emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/rust-mode eca55c0 451/486: Check for -> and => early in ru


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode eca55c0 451/486: Check for -> and => early in rust-ordinary-lt-gt-p
Date: Sat, 7 Aug 2021 09:26:12 -0400 (EDT)

branch: elpa/rust-mode
commit eca55c068eb90aa5e1f36c6b31de589ce1df2ff1
Author: Trevor Spiteri <tspiteri@ieee.org>
Commit: Nathan Moreau <nathan.moreau@m4x.org>

    Check for -> and => early in rust-ordinary-lt-gt-p
    
    Since the check for -> and => is very cheap, move it up in
    rust-ordinary-lt-gt-p potentially saving much more expensive checks.
    
    Also use simple equality check instead of regex function looking-at
    for checking following character.
---
 rust-mode.el | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/rust-mode.el b/rust-mode.el
index 6a0c1b5..925a9c8 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -1132,6 +1132,10 @@ should be considered a paired angle bracket."
    ;; If matching is turned off suppress all of them
    ((not rust-match-angle-brackets) t)
 
+   ;; This is a cheap check so we do it early.
+   ;; Don't treat the > in -> or => as an angle bracket
+   ((and (= (following-char) ?>) (memq (preceding-char) '(?- ?=))) t)
+
    ;; We don't take < or > in strings or comments to be angle brackets
    ((rust-in-str-or-cmnt) t)
 
@@ -1141,23 +1145,21 @@ should be considered a paired angle bracket."
    ;; as angle brackets it won't mess up any paren balancing.
    ((rust-in-macro) t)
 
-   ((looking-at "<")
+   ((= (following-char) ?<)
     (rust-is-lt-char-operator))
 
-   ((looking-at ">")
-    (cond
-     ;; Don't treat the > in -> or => as an angle bracket
-     ((member (char-before (point)) '(?- ?=)) t)
+   ;; Since rust-ordinary-lt-gt-p is called only when either < or > are at the 
point,
+   ;; we know that the following char must be > in the clauses below.
 
-     ;; If we are at top level and not in any list, it can't be a closing
-     ;; angle bracket
-     ((>= 0 (rust-paren-level)) t)
+   ;; If we are at top level and not in any list, it can't be a closing
+   ;; angle bracket
+   ((>= 0 (rust-paren-level)) t)
 
-     ;; Otherwise, treat the > as a closing angle bracket if it would
-     ;; match an opening one
-     ((save-excursion
-        (backward-up-list)
-        (not (looking-at "<"))))))))
+   ;; Otherwise, treat the > as a closing angle bracket if it would
+   ;; match an opening one
+   ((save-excursion
+      (backward-up-list)
+      (/= (following-char) ?<)))))
 
 (defun rust-mode-syntactic-face-function (state)
   "Return face which distinguishes doc and normal comments in the given syntax 
STATE."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]