Skip to content

Commit 3277e2a

Browse files
mknextjournal-ci
authored andcommitted
Upgrade to CodeMirror 6 to 0.16
* Upgrade to CodeMirror 6 0.16 * Fix format line * Fix test failures, mostly adjusting whitespace
1 parent 8f58807 commit 3277e2a

File tree

10 files changed

+193
-180
lines changed

10 files changed

+193
-180
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"dependencies": {
3-
"@codemirror/next": "^0.15.0",
4-
"lezer": "^0.13.0",
3+
"@codemirror/next": "^0.16.0",
4+
"lezer": "^0.13.1",
55
"lezer-clojure": "0.1.10",
66
"lezer-tree": "^0.13.0",
77
"lezer-generator": "^0.13.0",

src/demo/nextjournal/clojure_mode/demo.cljs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,21 @@
4747
(history)
4848
highlight/defaultHighlightStyle
4949
(view/drawSelection)
50-
;(lineNumbers)
50+
;(lineNumbers)
5151
(fold/foldGutter)
5252
(.. EditorState -allowMultipleSelections (of true))
5353
(if false
5454
;; use live-reloading grammar
5555
#js[(cm-clj/syntax live-grammar/parser)
5656
(.slice cm-clj/default-extensions 1)]
5757
cm-clj/default-extensions)
58-
(view/keymap cm-clj/complete-keymap)
59-
(view/keymap historyKeymap)])
58+
(.of view/keymap cm-clj/complete-keymap)
59+
(.of view/keymap historyKeymap)])
60+
61+
(defonce !view (atom nil))
6062

6163
(defn editor [source]
62-
(r/with-let [!view (atom nil)
63-
last-result (r/atom (sci/eval-string source))
64+
(r/with-let [last-result (r/atom (sci/eval-string source))
6465
mount! (fn [el]
6566
(when el
6667
(reset! !view (new EditorView
@@ -146,7 +147,14 @@
146147

147148

148149
(comment
149-
(let [s "#(a )"
150-
state (test-utils/make-state default-extensions s)
151-
tree (n/tree state)]
152-
))
150+
(def state (.-state @!view))
151+
152+
(def doc (.-doc state))
153+
154+
(def iter (.iter doc))
155+
(def n (.next iter))
156+
(.-lineBreak n)
157+
(let [s "#(a )"
158+
state (test-utils/make-state default-extensions s)
159+
tree (n/tree state)]
160+
))

src/demo/nextjournal/clojure_mode/demo/sci.cljs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@
3333

3434
(defn extension [{:keys [modifier
3535
on-result]}]
36-
(view/keymap
37-
(j/lit
38-
[{:key "Mod-Enter"
39-
:run (partial eval-cell on-result)}
40-
{:key (str modifier "-Enter")
41-
:shift (partial eval-top-level on-result)
42-
:run (partial eval-at-cursor on-result)}])))
36+
(.of view/keymap
37+
(j/lit
38+
[{:key "Mod-Enter"
39+
:run (partial eval-cell on-result)}
40+
{:key (str modifier "-Enter")
41+
:shift (partial eval-top-level on-result)
42+
:run (partial eval-at-cursor on-result)}])))

src/main/nextjournal/clojure_mode/extensions/close_brackets.cljs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@
145145
(u/dispatch-some view (handle-close state key-name))))
146146

147147
(defn extension []
148-
(view/keymap
149-
(j/lit
150-
[{:key "Backspace"
151-
:run (j/fn [^:js {:as view :keys [state]}]
152-
(u/dispatch-some view (handle-backspace state)))}
153-
{:key "(" :run (handle-open-cmd "(")}
154-
{:key "[" :run (handle-open-cmd "[")}
155-
{:key "{" :run (handle-open-cmd "{")}
156-
{:key \" :run (handle-open-cmd \")}
157-
{:key \) :run (handle-close-cmd \))}
158-
{:key \] :run (handle-close-cmd \])}
159-
{:key \} :run (handle-close-cmd \})}])))
148+
(.of view/keymap
149+
(j/lit
150+
[{:key "Backspace"
151+
:run (j/fn [^:js {:as view :keys [state]}]
152+
(u/dispatch-some view (handle-backspace state)))}
153+
{:key "(" :run (handle-open-cmd "(")}
154+
{:key "[" :run (handle-open-cmd "[")}
155+
{:key "{" :run (handle-open-cmd "{")}
156+
{:key \" :run (handle-open-cmd \")}
157+
{:key \) :run (handle-close-cmd \))}
158+
{:key \] :run (handle-close-cmd \])}
159+
{:key \} :run (handle-close-cmd \})}])))

src/main/nextjournal/clojure_mode/extensions/eval_region.cljs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(ns nextjournal.clojure-mode.extensions.eval-region
22
(:require
3-
["@codemirror/next/state" :as state :refer [StateEffect StateField Facet precedence]]
3+
["@codemirror/next/state" :as state :refer [StateEffect StateField]]
44
["@codemirror/next/view" :as view :refer [EditorView Decoration keymap]]
55
["w3c-keyname" :refer [keyName]]
66
[applied-science.js-interop :as j]
@@ -18,12 +18,12 @@
1818
(last))
1919
node))
2020

21-
(defn primary-selection [state]
21+
(defn main-selection [state]
2222
(-> (j/call-in state [:selection :asSingle])
2323
(j/get-in [:ranges 0])))
2424

2525
(defn node-at-cursor
26-
([state] (node-at-cursor state (j/get (primary-selection state) :from)))
26+
([state] (node-at-cursor state (j/get (main-selection state) :from)))
2727
([^js state from]
2828
(some->> (n/nearest-touching state from -1)
2929
(#(when (or (n/terminal-type? (n/type %))
@@ -38,7 +38,7 @@
3838
(n/balanced-range state))))
3939

4040
(defn top-level-node [state]
41-
(->> (n/nearest-touching state (j/get (primary-selection state) :from) -1)
41+
(->> (n/nearest-touching state (j/get (main-selection state) :from) -1)
4242
(iterate n/up)
4343
(take-while (every-pred identity (complement n/top?)))
4444
last))
@@ -69,24 +69,23 @@
6969
(defonce mark-spec-highlight (j/lit {:attributes {:style "background-color: rgba(0, 243, 255, 0.35);"}}))
7070

7171
(defn cursor-range [^js state]
72-
(if (.. state -selection -primary -empty)
72+
(if (.. state -selection -main -empty)
7373
(node-at-cursor state)
74-
(.. state -selection -primary)))
74+
(.. state -selection -main)))
7575

7676
(defonce region-field
77-
(.define StateField
78-
(j/lit
79-
{:create (constantly (.-none Decoration))
80-
:update (j/fn [_value ^:js {:keys [state]}]
81-
(let [{:strs [Alt Shift Enter]} (get-modifier-field state)
82-
spec (if Enter mark-spec-highlight mark-spec)]
83-
(if-let [range (cond (and Alt Shift) (top-level-node state)
84-
Alt (or (u/guard (primary-selection state)
85-
#(not (j/get % :empty)))
86-
(cursor-range state)))]
87-
(single-mark spec range)
88-
(.-none Decoration))))
89-
:provide [(.-decorations EditorView)]})))
77+
(.define StateField
78+
(j/lit
79+
{:create (constantly (.-none Decoration))
80+
:update (j/fn [_value ^:js {:keys [state]}]
81+
(let [{:strs [Alt Shift Enter]} (get-modifier-field state)
82+
spec (if Enter mark-spec-highlight mark-spec)]
83+
(if-let [range (cond (and Alt Shift) (top-level-node state)
84+
Alt (or (u/guard (main-selection state)
85+
#(not (j/get % :empty)))
86+
(cursor-range state)))]
87+
(single-mark spec range)
88+
(.-none Decoration))))})))
9089

9190

9291
(defn get-region-field [^js state] (.field state region-field))
@@ -95,7 +94,7 @@
9594
(or (some-> (get-region-field state)
9695
(j/call :iter)
9796
(u/guard #(j/get % :value)))
98-
(.. state -selection -primary)))
97+
(.. state -selection -main)))
9998

10099
(defn modifier-extension
101100
"Maintains modifier-state-field, containing a map of {<modifier> true}, including Enter."
@@ -107,13 +106,13 @@
107106
^:js {:as view :keys [state]}]
108107
(let [prev (get-modifier-field state)
109108
next (cond-> {}
110-
altKey (assoc "Alt" true)
111-
shiftKey (assoc "Shift" true)
112-
metaKey (assoc "Meta" true)
113-
controlKey (assoc "Control" true)
114-
(and (= "keydown" type)
115-
(= "Enter" (keyName event)))
116-
(assoc "Enter" true))]
109+
altKey (assoc "Alt" true)
110+
shiftKey (assoc "Shift" true)
111+
metaKey (assoc "Meta" true)
112+
controlKey (assoc "Control" true)
113+
(and (= "keydown" type)
114+
(= "Enter" (keyName event)))
115+
(assoc "Enter" true))]
117116
(when (not= prev next)
118117
(set-modifier-field! view next))))
119118
handle-backspace (j/fn [^:js {:as view :keys [state dispatch]}]
@@ -123,21 +122,22 @@
123122
:annotations (u/user-event-annotation "delete")})))
124123
true))]
125124
#js[modifier-field
126-
(precedence (keymap
127-
(j/lit [{:key (str modifier "-Enter")
128-
:shift handle-enter
129-
:run handle-enter}
130-
{:key (str modifier "-Backspace")
131-
:run handle-backspace
132-
:shift handle-backspace}])) "override")
125+
(.of keymap
126+
(j/lit [{:key (str modifier "-Enter")
127+
:shift handle-enter
128+
:run handle-enter}
129+
{:key (str modifier "-Backspace")
130+
:run handle-backspace
131+
:shift handle-backspace}]))
133132
(.domEventHandlers view/EditorView
134133
#js{:keydown handle-key-event
135134
:keyup handle-key-event})]))
136135

137136
(defn extension [{:keys [modifier]
138137
:or {modifier "Alt"}}]
139138
#js[(modifier-extension modifier)
140-
region-field])
139+
region-field
140+
(.. EditorView -decorations (from region-field))])
141141

142142
(defn cursor-node-string [^js state]
143143
(u/guard (some->> (node-at-cursor state)

src/main/nextjournal/clojure_mode/extensions/formatting.cljs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@
111111
[^js state
112112
indent-context
113113
from
114-
content
114+
text
115115
line-num
116116
changes
117117
format-spaces?]
118-
{:pre [(some? content)]}
119-
(let [current-indent (-> ^js (aget (.exec #"^\s*" content) 0)
118+
{:pre [(some? text)]}
119+
(let [current-indent (-> ^js (aget (.exec #"^\s*" text) 0)
120120
.-length)
121121
^number indent (-> (get-indentation indent-context from)
122122
(u/guard (complement neg?)))
@@ -131,7 +131,7 @@
131131
space-changes (when format-spaces?
132132
(space-changes state
133133
(+ from current-indent)
134-
(+ from (count content))))]
134+
(+ from (count text))))]
135135
(cond-> changes
136136
space-changes (into-arr space-changes)
137137
indentation-change (j/push! indentation-change))))
@@ -140,14 +140,14 @@
140140
[^js state]
141141
(let [context (make-indent-context state)]
142142
(u/update-selected-lines state
143-
(j/fn [^:js {:as line :keys [from content number]} ^js changes ^js range]
144-
(format-line state context from content number changes true)))))
143+
(j/fn [^:js {:as line :keys [from text number]} ^js changes ^js range]
144+
(format-line state context from text number changes true)))))
145145

146146
(defn format-all [state]
147147
(let [context (make-indent-context state)]
148148
(u/update-lines state
149-
(fn [^number from ^string content line-num]
150-
(format-line state context from content line-num #js[] true)))))
149+
(fn [^number from ^string text line-num]
150+
(format-line state context from text line-num #js[] true)))))
151151

152152
(defn format-transaction [^js tr]
153153
(let [origin (u/get-user-event-annotation tr)]
@@ -165,7 +165,7 @@
165165
context (make-indent-context state)]
166166
(u/iter-changed-lines tr
167167
(fn [^js line ^js changes]
168-
(format-line state context (.-from line) (.-content line) (.-number line) changes true)))))]
168+
(format-line state context (.-from line) (.-text line) (.-number line) changes true)))))]
169169
(.. tr -startState (update (j/assoc! changes :filter false)))
170170
tr)))
171171

0 commit comments

Comments
 (0)