|
13 | 13 |
|
14 | 14 | ;;;; aliasing and qualification ;;;;
|
15 | 15 |
|
16 |
| -(def typed-alias " |
17 |
| - (if-let [[a typedns] (first (filter #(= (find-ns 'clojure.core.typed) |
| 16 | +(def typed-alias |
| 17 | + '(if-let [[a typedns] (first (filter #(= (find-ns 'clojure.core.typed) |
18 | 18 | (val %))
|
19 | 19 | (ns-aliases *ns*)))]
|
20 |
| - (str a \"/\") |
21 |
| - (str \"clojure.core.typed/\"))") |
| 20 | + (str a "/") |
| 21 | + (str "clojure.core.typed/"))) |
22 | 22 |
|
23 | 23 | (defn aliased<- [f]
|
24 | 24 | (str typed-alias " " (pr-str f)))
|
|
39 | 39 |
|
40 | 40 | ;;; raise wrappers
|
41 | 41 |
|
42 |
| -(defn raise* [e s & {:keys [res] :or {res :replace}}] |
| 42 | +(defn raise* [e fun-string & {:keys [res] :or {res :replace}}] |
43 | 43 | (object/raise e
|
44 | 44 | :eval.custom
|
45 |
| - s |
| 45 | + fun-string |
46 | 46 | {:result-type res :verbatim true}))
|
47 | 47 |
|
48 |
| -(defn raise-ann [e s & [opts]] |
| 48 | +(defn raise-ann [e fun-string & [opts]] |
49 | 49 | (object/raise e
|
50 | 50 | :eval.custom
|
51 |
| - s |
| 51 | + fun-string |
52 | 52 | (merge {:result-type :return
|
53 | 53 | :handler e
|
54 | 54 | :trigger ::annotate!}
|
55 | 55 | opts)))
|
56 | 56 |
|
57 | 57 | ;;; return handling
|
58 | 58 |
|
59 |
| -(defn post-ann [e {:keys [offset] :as meta*}] |
60 |
| - (let [cursor (ed/->cursor e)] |
61 |
| - (if offset |
62 |
| - (cursor/move-relative e |
63 |
| - cursor |
64 |
| - offset) |
65 |
| - (ed/set-selection e |
66 |
| - (ed/adjust-loc cursor -1) |
67 |
| - (ed/adjust-loc cursor -4))))) |
68 |
| - |
69 | 59 | (behavior ::annotate!
|
70 | 60 | :triggers #{::annotate!}
|
71 | 61 | :reaction (fn [this {:keys [result meta]}]
|
72 | 62 | (let [returned (reader/read-string result)]
|
73 | 63 | (ed/replace-selection this returned)
|
74 |
| - (post-ann this meta)))) |
75 |
| - |
| 64 | + (cursor/select-relative (merge meta {:editor this}))))) |
76 | 65 |
|
77 | 66 | ;;; core.typed/ann annotator
|
78 | 67 |
|
79 |
| -(defn ->newline-above! [e c] |
80 |
| - (cmd/exec! :typedclojure.pseudoparedit.top) |
81 |
| - (ed/insert-at-cursor e "\n") |
82 |
| - (ed/move-cursor e c)) |
83 |
| - |
84 | 68 | (defn ->ann-var [token]
|
85 | 69 | (str "(str \"(\""
|
86 | 70 | (aliased<- "ann")
|
|
104 | 88 | (:whitespace token)) (notifos/set-msg! "core.typed/ann can only annotate vars")
|
105 | 89 | (:orphan token) (raise-ann e
|
106 | 90 | (->ann-var nil)
|
107 |
| - {:offset {:ch -5}}) |
| 91 | + {:sel [-4 -4]}) |
108 | 92 | :else (do
|
109 |
| - (->newline-above! e c) |
| 93 | + (cursor/->newline-above! e c) |
110 | 94 | (raise-ann e (->ann-var (:string token)))))))})
|
111 | 95 |
|
112 | 96 | ;;; core.typed/ann-form annotator
|
|
137 | 121 | (raise-ann e (->ann-form (ed/selection e))))
|
138 | 122 | (:orphan token) (raise-ann e
|
139 | 123 | (->ann-form nil)
|
140 |
| - {:offset {:ch -5}}) |
| 124 | + {:sel [-4 -4]}) |
141 | 125 | (:selection token) (raise-ann e (->ann-form (:string token)))
|
142 | 126 | :else (let [[start end] (token/bounds e (:at token))]
|
143 | 127 | (ed/set-selection e start end)
|
|
156 | 140 | ")"))
|
157 | 141 |
|
158 | 142 | (cmd/command {:command :typedclojure.pred
|
159 |
| - :desc "Typed Clojure: add type predicate" |
| 143 | + :desc "Typed Clojure: add predicate" |
160 | 144 | :exec (fn []
|
161 | 145 | (let [e (pool/last-active)
|
162 | 146 | c (ed/->cursor e)
|
163 | 147 | token (if (ed/selection? e)
|
164 | 148 | {:string (ed/selection e) :selection true}
|
165 |
| - (token/->token e c))] |
| 149 | + (token/->token e c)) |
| 150 | + post-opts {:rel :start |
| 151 | + :sel [12 9]}] |
166 | 152 | (cond
|
167 | 153 | (or (:boundary token)
|
168 | 154 | (:whitespace token)) (do
|
169 | 155 | (ed/move-cursor e (:at token))
|
170 | 156 | (cmd/exec! :paredit.select.parent)
|
171 |
| - (raise* e (->pred (ed/selection e)))) |
172 |
| - (:orphan token) (raise* e (->pred)) |
173 |
| - (:selection token) (raise* e (->pred (:string token))) |
| 157 | + (raise-ann e |
| 158 | + (->pred (ed/selection e)) |
| 159 | + post-opts)) |
| 160 | + (:orphan token) (raise-ann e (->pred) post-opts) |
| 161 | + (:selection token) (raise-ann e |
| 162 | + (->pred (:string token)) |
| 163 | + post-opts) |
174 | 164 | :else (let [[start end] (token/bounds e (:at token))]
|
175 | 165 | (ed/set-selection e start end)
|
176 |
| - (raise* e (->pred (:string token)))))))}) |
| 166 | + (raise-ann e |
| 167 | + (->pred (:string token)) |
| 168 | + post-opts)))))}) |
177 | 169 |
|
178 | 170 | ;;;; checking commands ;;;;
|
179 | 171 |
|
|
204 | 196 | (cmd/command {:command :typedclojure.check.ns
|
205 | 197 | :desc "Typed Clojure: check namespace"
|
206 | 198 | :exec (fn []
|
207 |
| - (object/raise (pool/last-active) |
208 |
| - :eval.custom |
209 |
| - ns-checker |
210 |
| - {:result-type :statusbar :verbatim true}))}) |
| 199 | + (raise* (pool/last-active) ns-checker :res :statusbar))}) |
211 | 200 |
|
212 | 201 | ;;; core.typed/check-form-info
|
213 | 202 |
|
|
0 commit comments