summaryrefslogtreecommitdiff
path: root/cider-mode.el
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2016-02-13 22:03:13 +0000
committerArtur Malabarba <bruce.connor.am@gmail.com>2016-02-13 22:21:34 +0000
commitbfa34f34b770485b55bb04765d7f77b2a90dd7ca (patch)
tree18de4039338ae751c7adc05e9bcc6712aecabba9 /cider-mode.el
parent4801f39f142cb88477cc676bb87187c10ca72531 (diff)
Refactor duplicated code in -compile-font-lock-keywords
Also optimize code to run the `memq`s outside the loop.
Diffstat (limited to 'cider-mode.el')
-rw-r--r--cider-mode.el75
1 files changed, 29 insertions, 46 deletions
diff --git a/cider-mode.el b/cider-mode.el
index 462a2007..9210ac79 100644
--- a/cider-mode.el
+++ b/cider-mode.el
@@ -362,52 +362,35 @@ The value can also be t, which means to font-lock as much as possible."
cider-font-lock-dynamically))
deprecated enlightened
macros functions vars instrumented traced)
- (when (memq 'core cider-font-lock-dynamically)
- (while core-plist
- (let ((sym (pop core-plist))
- (meta (pop core-plist)))
- (pcase (nrepl-dict-get meta "cider.nrepl.middleware.util.instrument/breakfunction")
- (`nil nil)
- (`"#'cider.nrepl.middleware.debug/breakpoint-if-interesting"
- (push sym instrumented))
- (`"#'cider.nrepl.middleware.enlighten/light-form"
- (push sym enlightened)))
- (when (or (nrepl-dict-get meta "clojure.tools.trace/traced")
- (nrepl-dict-get meta "cider.inlined-deps.clojure.tools.trace/traced"))
- (push sym traced))
- (when (nrepl-dict-get meta "deprecated")
- (push sym deprecated))
- (cond
- ((nrepl-dict-get meta "macro")
- (push sym macros))
- ((nrepl-dict-get meta "arglists")
- (push sym functions))
- (t
- (push sym vars))))))
- (while symbols-plist
- (let ((sym (pop symbols-plist))
- (meta (pop symbols-plist)))
- (pcase (nrepl-dict-get meta "cider.nrepl.middleware.util.instrument/breakfunction")
- (`nil nil)
- (`"#'cider.nrepl.middleware.debug/breakpoint-if-interesting"
- (push sym instrumented))
- (`"#'cider.nrepl.middleware.enlighten/light-form"
- (push sym enlightened)))
- (when (or (nrepl-dict-get meta "clojure.tools.trace/traced")
- (nrepl-dict-get meta "cider.inlined-deps.clojure.tools.trace/traced"))
- (push sym traced))
- (when (and (nrepl-dict-get meta "deprecated")
- (memq 'deprecated cider-font-lock-dynamically))
- (push sym deprecated))
- (cond
- ((and (memq 'macro cider-font-lock-dynamically)
- (nrepl-dict-get meta "macro"))
- (push sym macros))
- ((and (memq 'function cider-font-lock-dynamically)
- (nrepl-dict-get meta "arglists"))
- (push sym functions))
- ((memq 'var cider-font-lock-dynamically)
- (push sym vars)))))
+ (cl-labels ((handle-plist
+ (plist)
+ (let ((do-function (memq 'function cider-font-lock-dynamically))
+ (do-var (memq 'var cider-font-lock-dynamically))
+ (do-macro (memq 'macro cider-font-lock-dynamically))
+ (do-deprecated (memq 'deprecated cider-font-lock-dynamically)))
+ (while plist
+ (let ((sym (pop plist))
+ (meta (pop plist)))
+ (pcase (nrepl-dict-get meta "cider.nrepl.middleware.util.instrument/breakfunction")
+ (`nil nil)
+ (`"#'cider.nrepl.middleware.debug/breakpoint-if-interesting"
+ (push sym instrumented))
+ (`"#'cider.nrepl.middleware.enlighten/light-form"
+ (push sym enlightened)))
+ (when (or (nrepl-dict-get meta "clojure.tools.trace/traced")
+ (nrepl-dict-get meta "cider.inlined-deps.clojure.tools.trace/traced"))
+ (push sym traced))
+ (when (and do-deprecated (nrepl-dict-get meta "deprecated"))
+ (push sym deprecated))
+ (cond ((and do-macro (nrepl-dict-get meta "macro"))
+ (push sym macros))
+ ((and do-function (nrepl-dict-get meta "arglists"))
+ (push sym functions))
+ (do-var (push sym vars))))))))
+ (when (memq 'core cider-font-lock-dynamically)
+ (let ((cider-font-lock-dynamically '(function var macro core deprecated)))
+ (handle-plist core-plist)))
+ (handle-plist symbols-plist))
`(
,@(when macros
`((,(concat (rx (or "(" "#'")) ; Can't take the value of macros.