branch: master
commit f7c6dcbd01b7c0176b4b7183467a8d6248d764db
Author: Jackson Ray Hamilton <[email protected]>
Commit: Jackson Ray Hamilton <[email protected]>
Refactor callee dispatching.
---
context-coloring.el | 92 ++++++++++++++++-----------------------------------
1 files changed, 29 insertions(+), 63 deletions(-)
diff --git a/context-coloring.el b/context-coloring.el
index 77c2d55..6b78a1a 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -394,20 +394,6 @@ the way."
(context-coloring-join
(mapcar #'context-coloring-exact-regexp words) "\\|"))
-(defconst context-coloring-elisp-defun-regexp
- (context-coloring-exact-or-regexp
- '("defun" "defun*" "defsubst" "defmacro"
- "cl-defun" "cl-defsubst" "cl-defmacro")))
-
-(defconst context-coloring-elisp-condition-case-regexp
- (context-coloring-exact-or-regexp
- '("condition-case"
- "condition-case-unless-debug")))
-
-(defconst context-coloring-elisp-dolist-regexp
- (context-coloring-exact-or-regexp
- '("dolist" "dotimes")))
-
(defconst context-coloring-elisp-ignored-word-regexp
(context-coloring-join (list "\\`[-+]?[0-9]"
"\\`[&:].+"
@@ -818,6 +804,24 @@ with CALLBACK."
(context-coloring-elisp-get-current-scope-level))
(context-coloring-elisp-colorize-comments-and-strings-in-region start
end)))
+(defvar context-coloring-elisp-callee-dispatch-hash-table
+ (let ((table (make-hash-table :test 'equal)))
+ (dolist (callee '("defun" "defun*" "defsubst" "defmacro" "cl-defun"
"cl-defsubst" "cl-defmacro"))
+ (puthash callee #'context-coloring-elisp-colorize-defun table))
+ (dolist (callee '("condition-case" "condition-case-unless-debug"))
+ (puthash callee #'context-coloring-elisp-colorize-condition-case table))
+ (dolist (callee '("dolist" "dotimes"))
+ (puthash callee #'context-coloring-elisp-colorize-dolist table))
+ (puthash "let" #'context-coloring-elisp-colorize-let table)
+ (puthash "let*" #'context-coloring-elisp-colorize-let* table)
+ (puthash "lambda" #'context-coloring-elisp-colorize-lambda table)
+ (puthash "cond" #'context-coloring-elisp-colorize-cond table)
+ (puthash "defadvice" #'context-coloring-elisp-colorize-defadvice table)
+ (puthash "quote" #'context-coloring-elisp-colorize-quote table)
+ (puthash "backquote" #'context-coloring-elisp-colorize-backquote table)
+ table)
+ "Map function names to their coloring functions.")
+
(defun context-coloring-elisp-colorize-parenthesized-sexp ()
"Color the sexp enclosed by parenthesis at point."
(context-coloring-elisp-increment-sexp-count)
@@ -829,57 +833,19 @@ with CALLBACK."
;; Coloring is unnecessary here, it'll happen
;; presently.
(context-coloring-forward-sws)
- (context-coloring-get-syntax-code))))
+ (context-coloring-get-syntax-code)))
+ dispatch-function)
;; Figure out if the sexp is a special form.
(cond
- ((when (context-coloring-elisp-identifier-p syntax-code)
- (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)
- ((string-equal "cond" name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-cond)
- t)
- ((string-match-p context-coloring-elisp-condition-case-regexp
name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-condition-case)
- t)
- ((string-match-p context-coloring-elisp-dolist-regexp name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-dolist)
- t)
- ((string-equal "defadvice" name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-defadvice)
- t)
- ((string-equal "quote" name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-quote)
- t)
- ((string-equal "backquote" name-string)
- (goto-char start)
- (context-coloring-elisp-colorize-backquote)
- t)
- (t
- nil)))))
+ ((and (context-coloring-elisp-identifier-p syntax-code)
+ (setq dispatch-function (gethash
+ (buffer-substring-no-properties
+ (point)
+ (progn (forward-sexp)
+ (point)))
+
context-coloring-elisp-callee-dispatch-hash-table)))
+ (goto-char start)
+ (funcall dispatch-function))
;; Not a special form; just colorize the remaining region.
(t
(context-coloring-colorize-region