[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/rainbow-delimiters 35eace73ca 084/188: Reuse parse-partial
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/rainbow-delimiters 35eace73ca 084/188: Reuse parse-partial-sexp state in rainbow-delimiters-propertize. |
Date: |
Sat, 1 Jan 2022 00:58:54 -0500 (EST) |
branch: elpa/rainbow-delimiters
commit 35eace73cae255a562ff624e79c77ba749fd1730
Author: Fanael Linithien <fanael4@gmail.com>
Commit: Fanael Linithien <fanael4@gmail.com>
Reuse parse-partial-sexp state in rainbow-delimiters-propertize.
This is a big performance win, improving both latency and throughput.
---
rainbow-delimiters.el | 54 +++++++++++++++++++++++++++------------------------
1 file changed, 29 insertions(+), 25 deletions(-)
diff --git a/rainbow-delimiters.el b/rainbow-delimiters.el
index b25cf49fca..1767cb399b 100644
--- a/rainbow-delimiters.el
+++ b/rainbow-delimiters.el
@@ -380,9 +380,9 @@ The syntax table is constructed by the function
(modify-syntax-entry ?\) "){" table))
table))
-(defsubst rainbow-delimiters-depth (loc)
- "Return # of nested levels of parens, brackets, braces LOC is inside of."
- (let ((depth (car (rainbow-delimiters-syntax-ppss loc))))
+(defsubst rainbow-delimiters-depth (ppss)
+ "Return # of nested levels of delimiters at parse state PPSS."
+ (let ((depth (car ppss)))
(if (>= depth 0)
depth
0))) ; Ignore negative depths created by unmatched closing parens.
@@ -492,33 +492,37 @@ Used by font-lock for dynamic highlighting."
(with-syntax-table rainbow-delimiters-syntax-table
(let ((inhibit-point-motion-hooks t))
;; Point can be anywhere in buffer; determine the nesting depth at point.
- (let ((depth (rainbow-delimiters-depth (point))))
+ (let* ((last-ppss-pos (point))
+ (ppss (rainbow-delimiters-syntax-ppss last-ppss-pos))
+ (depth (rainbow-delimiters-depth ppss)))
(while (and (< (point) end)
(re-search-forward rainbow-delimiters-delim-regex end t))
(let ((delim-pos (match-beginning 0)))
- (let ((ppss (rainbow-delimiters-syntax-ppss delim-pos)))
- (unless (rainbow-delimiters-char-ineligible-p delim-pos ppss)
- (let* ((delim (char-after delim-pos))
- (opening-delim-info
- (assq delim rainbow-delimiters-opening-delim-info)))
- (if opening-delim-info
- (progn
- (setq depth (1+ depth))
- (rainbow-delimiters-apply-color (cdr
opening-delim-info)
- depth
- delim-pos
- t))
- ;; Not an opening delimiter, so it's a closing delimiter.
- (let ((closing-delim-info
- (assq delim rainbow-delimiters-closing-delim-info))
- (matching-opening-delim (char-after (nth 1 ppss))))
- (rainbow-delimiters-apply-color (nthcdr 2
closing-delim-info)
+ (setq ppss (save-excursion
+ (parse-partial-sexp last-ppss-pos delim-pos nil nil
ppss)))
+ (setq last-ppss-pos delim-pos)
+ (unless (rainbow-delimiters-char-ineligible-p delim-pos ppss)
+ (let* ((delim (char-after delim-pos))
+ (opening-delim-info
+ (assq delim rainbow-delimiters-opening-delim-info)))
+ (if opening-delim-info
+ (progn
+ (setq depth (1+ depth))
+ (rainbow-delimiters-apply-color (cdr opening-delim-info)
depth
delim-pos
- (= (nth 1
closing-delim-info)
-
matching-opening-delim))
- (setq depth (or (and (<= depth 0) 0) ; unmatched delim
- (1- depth)))))))))))))
+ t))
+ ;; Not an opening delimiter, so it's a closing delimiter.
+ (let ((closing-delim-info
+ (assq delim rainbow-delimiters-closing-delim-info))
+ (matching-opening-delim (char-after (nth 1 ppss))))
+ (rainbow-delimiters-apply-color (nthcdr 2
closing-delim-info)
+ depth
+ delim-pos
+ (= (nth 1
closing-delim-info)
+ matching-opening-delim))
+ (setq depth (or (and (<= depth 0) 0) ; unmatched delim
+ (1- depth))))))))))))
;; We already fontified the delimiters, tell font-lock there's nothing more
;; to do.
nil)
- [nongnu] elpa/rainbow-delimiters 506fef695f 049/188: Allow the user to define the number of faces used only for the outermost level., (continued)
- [nongnu] elpa/rainbow-delimiters 506fef695f 049/188: Allow the user to define the number of faces used only for the outermost level., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 5ab3135986 061/188: Fix a bug that caused (rainbow-delimiters-syntax-ppss 1) to return nil., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 43b02d2d20 075/188: Rename rainbow-delimiters-keywords., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters a095a77dc9 066/188: Correct the prefix of the rainbow-delimiters-faces group., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters d7946fdf94 078/188: Fix a typo in a comment., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 14e0f971f6 079/188: Call font-lock-{flush, fontify-buffer} only when font-lock-mode is on., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters b3f87cfe99 072/188: Highlight delimiters even in already highlighted text., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters a37d19b415 082/188: Add a comment explaining the previous change., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 36efff58a8 081/188: Don't highlight delimiters inside comments starting with two chars., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 24f6c5767e 083/188: Release version 1.3.8., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 35eace73ca 084/188: Reuse parse-partial-sexp state in rainbow-delimiters-propertize.,
ELPA Syncer <=
- [nongnu] elpa/rainbow-delimiters ddf7f179d3 085/188: Change defsubst -> defun., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 1305bca532 087/188: Use comment-search-forward to see if a delimiter starts a comment., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 6d488e566a 089/188: Test if comment-start-skip is non-nil before using it., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 3d425a85d3 094/188: Don't enable in Completion List Mode, ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters ecacb319d3 093/188: Wrap the font-lock-fontify-buffer call with with-no-warnings., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 6cdf1f1c14 096/188: Merge pull request #38 from lunaryorn/patch-1, ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters e2a67de8e7 097/188: Deprecate global-rainbow-delimiters-mode., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 29e7bfd8e4 098/188: Remove global-rainbow-delimiters-mode from installation instructions., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters 4cc4d38479 099/188: Remove global-rainbow-delimiters-mode., ELPA Syncer, 2022/01/01
- [nongnu] elpa/rainbow-delimiters d35b992378 106/188: Don't error when highlighting an unmatched closing delimiter., ELPA Syncer, 2022/01/01