|
76 | 76 | (format "\" Java version %s\n" (System/getProperty "java.version")))
|
77 | 77 |
|
78 | 78 | (defn vars-in-ns [ns]
|
79 | | - (->> ns ns-publics vals (map meta))) |
| 79 | + (->> ns |
| 80 | + ns-publics |
| 81 | + (map (fn [[_ var]] |
| 82 | + (assoc (meta var) |
| 83 | + :var var |
| 84 | + :fqs (symbol var)))))) |
80 | 85 |
|
81 | | -(defn filter-vars [pred vars] |
82 | | - (->> vars |
83 | | - (filter pred) |
84 | | - (map #(symbol (str (ns-name (:ns %)) "/" (:name %)))) |
85 | | - set)) |
| 86 | +(defn ->fqs [vars] |
| 87 | + (into #{} (map :fqs) vars)) |
86 | 88 |
|
87 | 89 | (defn multi-fn? [v]
|
88 | | - (instance? MultiFn (var-get (ns-resolve (:ns v) (:name v))))) |
| 90 | + (instance? MultiFn (var-get (:var v)))) |
89 | 91 |
|
90 | 92 | (defn function? [v]
|
91 | 93 | (or
|
|
103 | 105 | (re-find #"([^/]*/)?\Af?def(?!ault)"
|
104 | 106 | (str (if (map? v) (:name v) v))))
|
105 | 107 |
|
106 | | -(defn exclude [from & excludes] |
107 | | - (apply disj from (apply set/union excludes))) |
108 | | - |
109 | | -(defn keyword-groups [namespace] |
110 | | - (let [vars (vars-in-ns namespace) |
| 108 | +(def keyword-groups |
| 109 | + "Special forms, constants, and every public var in clojure.core keyed by |
| 110 | + syntax group name." |
| 111 | + (let [vars (vars-in-ns 'clojure.core) |
111 | 112 | compiler-specials (set (keys Compiler/specials))
|
112 | 113 | exceptions '#{throw try catch finally}
|
113 | 114 | repeat '#{recur loop* clojure.core/loop clojure.core/doseq clojure.core/dotimes clojure.core/while}
|
114 | 115 | conditionals '#{case* clojure.core/case
|
115 | 116 | if clojure.core/if-not clojure.core/if-let clojure.core/if-some
|
116 | 117 | clojure.core/cond clojure.core/cond-> clojure.core/cond->> clojure.core/condp
|
117 | 118 | clojure.core/when clojure.core/when-first clojure.core/when-let clojure.core/when-not clojure.core/when-some}
|
118 | | - define (set/union (filter-vars identity (filter define? vars)) |
| 119 | + define (set/union (->fqs (filter define? vars)) |
119 | 120 | (set (filter define? compiler-specials)))
|
120 | | - macros (filter-vars:macro vars) |
121 | | - functions (filter-varsfunction? vars) |
122 | | - variables (filter-varsvariable? vars) |
123 | | - special (set (set/union (filter-vars:special-form vars) |
124 | | - compiler-specials))] |
| 121 | + macros (->fqs (filter:macro vars)) |
| 122 | + functions (->fqs (filterfunction? vars)) |
| 123 | + variables (->fqs (filtervariable? vars)) |
| 124 | + special (set/union (->fqs (filter:special-form vars)) |
| 125 | + compiler-specials)] |
125 | 126 | {"clojureBoolean" '#{true false}
|
126 | 127 | "clojureConstant" '#{nil}
|
127 | 128 | "clojureException" exceptions
|
|
130 | 131 | "clojureDefine" define
|
131 | 132 | "clojureVariable" variables
|
132 | 133 | "clojureFunc" functions
|
133 | | - "clojureSpecial" (-> special (excludedefine repeat conditionals exceptions)) |
134 | | - "clojureMacro" (-> macros (excludedefine repeat conditionals special))})) |
| 134 | + "clojureSpecial" (set/difference special define repeat conditionals exceptions) |
| 135 | + "clojureMacro" (set/difference macros define repeat conditionals special)})) |
135 | 136 |
|
136 | 137 | ;; Java 8 Character class implements Unicode standard 6.2 from 2012 [1],
|
137 | 138 | ;; Java 15 implements Unicode standard 13 from 2020 [2],
|
|
279 | 280 |
|
280 | 281 | (def vim-keywords
|
281 | 282 | "Vimscript literal dictionary of important identifiers."
|
282 | | - (->> (keyword-groups 'clojure.core) |
| 283 | + (->> keyword-groups |
283 | 284 | sort
|
284 | 285 | (map (fn [[group keywords]]
|
285 | 286 | (->> keywords
|
|
293 | 294 |
|
294 | 295 | (def vim-completion-words
|
295 | 296 | "Vimscript literal list of words for omnifunc completion."
|
296 | | - (->> (keyword-groups 'clojure.core) |
| 297 | + (->> keyword-groups |
297 | 298 | vals
|
298 | 299 | (reduce set/union)
|
299 | 300 | map-keyword-names
|
|
444 | 445 | vim-unicode-block-char-classes)
|
445 | 446 | "-*- TOP CLUSTER -*-"
|
446 | 447 | (qstr generation-comment
|
447 | | - (vim-top-cluster (keys (keyword-groups 'clojure.core)) |
| 448 | + (vim-top-cluster (keys keyword-groups) |
448 | 449 | (slurp (fjoin dir "syntax/clojure.vim"))))}
|
449 | 450 |
|
450 | 451 | (fjoin dir "ftplugin/clojure.vim")
|
|
0 commit comments