[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 2258572 39/79: Optimize. Refactor.
From: |
Jackson Ray Hamilton |
Subject: |
[elpa] master 2258572 39/79: Optimize. Refactor. |
Date: |
Sun, 14 Jun 2015 00:05:33 +0000 |
branch: master
commit 22585727bb15e190276c81d51aa508909f7eb34b
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>
Optimize. Refactor.
---
context-coloring.el | 219 ++++++++++++++++++++++++---------------------------
1 files changed, 103 insertions(+), 116 deletions(-)
diff --git a/context-coloring.el b/context-coloring.el
index c2153b9..4586832 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -281,7 +281,9 @@ generated by `js2-mode'."
(while (forward-comment 1)))
(defsubst context-coloring-get-syntax-code ()
- (syntax-class (syntax-after (point))))
+ (syntax-class
+ ;; Faster version of `syntax-after':
+ (aref (syntax-table) (char-after (point)))))
(defsubst context-coloring-exact-regexp (word)
"Create a regexp that matches exactly WORD."
@@ -297,15 +299,6 @@ generated by `js2-mode'."
'("defun" "defun*" "defsubst" "defmacro"
"cl-defun" "cl-defsubst" "cl-defmacro")))
-(defconst context-coloring-elisp-lambda-regexp
- (context-coloring-exact-regexp "lambda"))
-
-(defconst context-coloring-elisp-let-regexp
- (context-coloring-exact-regexp "let"))
-
-(defconst context-coloring-elisp-let*-regexp
- (context-coloring-exact-regexp "let*"))
-
(defconst context-coloring-elisp-arglist-arg-regexp
"\\`[^&:]")
@@ -333,6 +326,29 @@ generated by `js2-mode'."
(defconst context-coloring-AT-CHAR (string-to-char "@"))
(defconst context-coloring-BACKTICK-CHAR (string-to-char "`"))
+(defvar context-coloring-parse-interruptable-p t
+ "Set this to nil to force parse to continue until finished.")
+
+(defconst context-coloring-elisp-sexps-per-pause 1000
+ "Pause after this many iterations to check for user input.
+If user input is pending, stop the parse. This makes for a
+smoother user experience for large files.
+
+As of this writing, emacs lisp colorization seems to run at about
+60,000 iterations per second. A default value of 1000 should
+provide visually \"instant\" updates at 60 frames per second.")
+
+(defvar context-coloring-elisp-sexp-count 0)
+
+(defsubst context-coloring-elisp-increment-sexp-count ()
+ (setq context-coloring-elisp-sexp-count
+ (1+ context-coloring-elisp-sexp-count))
+ (when (and (zerop (% context-coloring-elisp-sexp-count
+ context-coloring-elisp-sexps-per-pause))
+ context-coloring-parse-interruptable-p
+ (input-pending-p))
+ (throw 'interrupted t)))
+
(defvar context-coloring-elisp-scope-stack '())
(defsubst context-coloring-elisp-make-scope (level)
@@ -383,16 +399,11 @@ generated by `js2-mode'."
(car context-coloring-elisp-scope-stack)
variable))
-(defun context-coloring-elisp-parse-arg (callback)
- (let (arg-pos
- arg-end
- arg-string)
- (setq arg-pos (point))
- (forward-sexp)
- (setq arg-end (point))
- (setq arg-string (buffer-substring-no-properties
- arg-pos
- arg-end))
+(defsubst context-coloring-elisp-parse-arg (callback)
+ (let* ((arg-string (buffer-substring-no-properties
+ (point)
+ (progn (forward-sexp)
+ (point)))))
(when (string-match-p
context-coloring-elisp-arglist-arg-regexp
arg-string)
@@ -454,8 +465,8 @@ generated by `js2-mode'."
;; Exit.
(forward-char)))
-(defun context-coloring-elisp-colorize-defun (&optional anonymous-p
- let-type)
+(defun context-coloring-elisp-colorize-defun-like (&optional anonymous-p
+ let-type)
(let ((start (point))
end
stop
@@ -515,57 +526,54 @@ generated by `js2-mode'."
(context-coloring-elisp-pop-scope)
(context-coloring-elisp-colorize-comments-and-strings-in-region start
end)))
+(defun context-coloring-elisp-colorize-defun ()
+ (context-coloring-elisp-colorize-defun-like))
+
(defun context-coloring-elisp-colorize-lambda ()
- (context-coloring-elisp-colorize-defun t))
+ (context-coloring-elisp-colorize-defun-like t))
(defun context-coloring-elisp-colorize-let ()
- (context-coloring-elisp-colorize-defun t 'let))
+ (context-coloring-elisp-colorize-defun-like t 'let))
(defun context-coloring-elisp-colorize-let* ()
- (context-coloring-elisp-colorize-defun t 'let*))
+ (context-coloring-elisp-colorize-defun-like t 'let*))
(defun context-coloring-elisp-colorize-parenthesized-sexp ()
- (let ((start (point))
- end
- syntax-code
- child-0-pos
- child-0-end
- child-0-string)
- (forward-sexp)
- (setq end (point))
- (goto-char start)
- (forward-char)
- (context-coloring-forward-sws)
- (setq syntax-code (context-coloring-get-syntax-code))
+ (context-coloring-elisp-increment-sexp-count)
+ (let* ((start (point))
+ (end (progn (forward-sexp)
+ (point)))
+ (syntax-code (progn (goto-char start)
+ (forward-char)
+ (context-coloring-forward-sws)
+ (context-coloring-get-syntax-code))))
;; Figure out if the sexp is a special form.
(cond
((when (or (= syntax-code context-coloring-WORD-CODE)
(= syntax-code context-coloring-SYMBOL-CODE))
- (setq child-0-pos (point))
- (forward-sexp)
- (setq child-0-end (point))
- (setq child-0-string (buffer-substring-no-properties
- child-0-pos
- child-0-end))
- (cond
- ((string-match-p context-coloring-elisp-defun-regexp child-0-string)
- (goto-char start)
- (context-coloring-elisp-colorize-defun)
- t)
- ((string-match-p context-coloring-elisp-lambda-regexp child-0-string)
- (goto-char start)
- (context-coloring-elisp-colorize-lambda)
- t)
- ((string-match-p context-coloring-elisp-let-regexp child-0-string)
- (goto-char start)
- (context-coloring-elisp-colorize-let)
- t)
- ((string-match-p context-coloring-elisp-let*-regexp child-0-string)
- (goto-char start)
- (context-coloring-elisp-colorize-let*)
- t)
- (t
- nil))))
+ (let ((name-string (buffer-substring-no-properties
+ (point)
+ (progn (forward-sexp)
+ (point)))))
+ (cond
+ ((string-match-p context-coloring-elisp-defun-regexp name-string)
+ (goto-char start)
+ (context-coloring-elisp-colorize-defun)
+ t)
+ ((string-equal "let" name-string)
+ (goto-char start)
+ (context-coloring-elisp-colorize-let)
+ t)
+ ((string-equal "let*" name-string)
+ (goto-char start)
+ (context-coloring-elisp-colorize-let*)
+ t)
+ ((string-equal "lambda" name-string)
+ (goto-char start)
+ (context-coloring-elisp-colorize-lambda)
+ t)
+ (t
+ nil)))))
;; Not a special form; just colorize the remaining region.
(t
(context-coloring-colorize-region
@@ -576,15 +584,13 @@ generated by `js2-mode'."
(forward-char)))))
(defun context-coloring-elisp-colorize-symbol ()
- (let (symbol-pos
- symbol-end
- symbol-string)
- (setq symbol-pos (point))
- (forward-sexp)
- (setq symbol-end (point))
- (setq symbol-string (buffer-substring-no-properties
+ (context-coloring-elisp-increment-sexp-count)
+ (let* ((symbol-pos (point))
+ (symbol-end (progn (forward-sexp)
+ (point)))
+ (symbol-string (buffer-substring-no-properties
symbol-pos
- symbol-end))
+ symbol-end)))
(cond
((string-match-p context-coloring-ignored-word-regexp symbol-string))
(t
@@ -595,6 +601,7 @@ generated by `js2-mode'."
symbol-string))))))
(defun context-coloring-elisp-colorize-expression-prefix ()
+ (context-coloring-elisp-increment-sexp-count)
(let ((char (char-after))
(start (point))
(end (progn (forward-sexp)
@@ -617,33 +624,24 @@ generated by `js2-mode'."
(context-coloring-elisp-colorize-sexp)))
(context-coloring-elisp-colorize-comments-and-strings-in-region start
end)))))
-(defvar context-coloring-parse-interruptable-p t
- "Set this to nil to force parse to continue until finished.")
-
-(defconst context-coloring-elisp-sexps-per-pause 1000
- "Pause after this many iterations to check for user input.
-If user input is pending, stop the parse. This makes for a
-smoother user experience for large files.
-
-As of this writing, emacs lisp colorization seems to run at about
-60,000 iterations per second. A default value of 1000 should
-provide visually \"instant\" updates at 60 frames per second.")
-
-(defvar context-coloring-elisp-sexp-count 0)
+(defun context-coloring-elisp-colorize-comment ()
+ (context-coloring-elisp-increment-sexp-count)
+ (let ((start (point)))
+ (context-coloring-forward-sws)
+ (context-coloring-maybe-colorize-comments-and-strings
+ start
+ (point))))
-(defun context-coloring-elisp-increment-sexp-count ()
- (setq context-coloring-elisp-sexp-count
- (1+ context-coloring-elisp-sexp-count))
- (when (and (zerop (% context-coloring-elisp-sexp-count
- context-coloring-elisp-sexps-per-pause))
- context-coloring-parse-interruptable-p
- (input-pending-p))
- (throw 'interrupted t)))
+(defun context-coloring-elisp-colorize-string ()
+ (context-coloring-elisp-increment-sexp-count)
+ (let ((start (point)))
+ (forward-sexp)
+ (context-coloring-maybe-colorize-comments-and-strings
+ start
+ (point))))
(defun context-coloring-elisp-colorize-sexp ()
- (let (syntax-code)
- (context-coloring-elisp-increment-sexp-count)
- (setq syntax-code (context-coloring-get-syntax-code))
+ (let ((syntax-code (context-coloring-get-syntax-code)))
(cond
((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
(context-coloring-elisp-colorize-parenthesized-sexp))
@@ -654,25 +652,11 @@ provide visually \"instant\" updates at 60 frames per
second.")
(context-coloring-elisp-colorize-expression-prefix))
((= syntax-code context-coloring-STRING-QUOTE-CODE)
(context-coloring-elisp-colorize-string))
+ ((= syntax-code context-coloring-ESCAPE-CODE)
+ (forward-char 2))
(t
(forward-char)))))
-(defun context-coloring-elisp-colorize-comment ()
- (let ((start (point)))
- (context-coloring-elisp-increment-sexp-count)
- (context-coloring-forward-sws)
- (context-coloring-maybe-colorize-comments-and-strings
- start
- (point))))
-
-(defun context-coloring-elisp-colorize-string ()
- (let ((start (point)))
- (context-coloring-elisp-increment-sexp-count)
- (forward-sexp)
- (context-coloring-maybe-colorize-comments-and-strings
- start
- (point))))
-
(defun context-coloring-elisp-colorize-comments-and-strings-in-region (start
end)
(let (syntax-code)
(goto-char start)
@@ -696,12 +680,15 @@ provide visually \"instant\" updates at 60 frames per
second.")
(point)))
(setq syntax-code (context-coloring-get-syntax-code))
(cond
- ((or (= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
- (= syntax-code context-coloring-WORD-CODE)
- (= syntax-code context-coloring-SYMBOL-CODE)
- (= syntax-code context-coloring-EXPRESSION-PREFIX-CODE)
- (= syntax-code context-coloring-STRING-QUOTE-CODE))
- (context-coloring-elisp-colorize-sexp))
+ ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
+ (context-coloring-elisp-colorize-parenthesized-sexp))
+ ((or (= syntax-code context-coloring-WORD-CODE)
+ (= syntax-code context-coloring-SYMBOL-CODE))
+ (context-coloring-elisp-colorize-symbol))
+ ((= syntax-code context-coloring-EXPRESSION-PREFIX-CODE)
+ (context-coloring-elisp-colorize-expression-prefix))
+ ((= syntax-code context-coloring-STRING-QUOTE-CODE)
+ (context-coloring-elisp-colorize-string))
((= syntax-code context-coloring-COMMENT-START-CODE)
(context-coloring-elisp-colorize-comment))
((= syntax-code context-coloring-ESCAPE-CODE)
- [elpa] master f3697c0 35/79: Strings are sexps., (continued)
- [elpa] master f3697c0 35/79: Strings are sexps., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 87893df 32/79: Support comma splicing., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 7167e93 19/79: Pass let and let* tests with recursive colorizer., Jackson Ray Hamilton, 2015/06/13
- [elpa] master af4f773 33/79: Colorize comments and strings inside backquotes., Jackson Ray Hamilton, 2015/06/13
- [elpa] master acaaf39 38/79: Add file statistics to benchmarks., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 8836df9 37/79: Add colorization times to logs., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 5661ed0 44/79: Document `:host' and `:port' properties., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 16fa835 40/79: Optimize JSON parser., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 3dfd515 42/79: Messy server implementation., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 872bf5f 46/79: Bump required scopifier version., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 2258572 39/79: Optimize. Refactor.,
Jackson Ray Hamilton <=
- [elpa] master 59492ab 41/79: Refactor token application., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 233ea1a 47/79: Kill any scopifier server before running the tests., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 0079778 48/79: Set `:send-report' to nil., Jackson Ray Hamilton, 2015/06/13
- [elpa] master cacf5de 49/79: Add cond support., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 8d15938 43/79: Cleaner server implementation., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 89286b6 54/79: Cleanup., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 5f9bd49 50/79: Add comments and strings to the cond test., Jackson Ray Hamilton, 2015/06/13
- [elpa] master c2834f0 51/79: Add condition-case support., Jackson Ray Hamilton, 2015/06/13
- [elpa] master 2ee41c1 52/79: Add comments and strings to condition-case test., Jackson Ray Hamilton, 2015/06/13
- [elpa] master e387aaf 45/79: Merge branch 'server' into elisp, Jackson Ray Hamilton, 2015/06/13