From eca55c068eb90aa5e1f36c6b31de589ce1df2ff1 Mon Sep 17 00:00:00 2001 From: Trevor Spiteri Date: Wed, 29 Apr 2020 01:26:37 +0200 Subject: 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(-) (limited to 'rust-mode.el') 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." -- cgit v1.2.3