Skip to content

Commit 17b7436

Browse files
Upgrade Lezer Parser to 1.0.0 and Codemirror bundle to 6.0.0 (#25)
In addition: * Fix API changes around tree navigation * Demo app evaluate forms in Clerk's SCI viewer context * Add github test workflow + snapshot build of demo app on every commit * Fix dependabot security alert: Bump elliptic from 6.5.3 to 6.5.4 (#26) * Tests run against lezer-clojure grammar, not live one shipped in the repo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent 699a445 commit 17b7436

File tree

20 files changed

+468
-483
lines changed

20 files changed

+468
-483
lines changed

.github/workflows/clojure.yaml

Lines changed: 0 additions & 70 deletions
This file was deleted.

.github/workflows/main.yml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: CI
2+
on: push
3+
jobs:
4+
test:
5+
name: Test
6+
runs-on: ubuntu-latest
7+
steps:
8+
- name: 🔧 Install java
9+
uses: actions/setup-java@v1
10+
with:
11+
java-version: '11.0.7'
12+
13+
- name: 🔧 Install clojure
14+
uses: DeLaGuardo/setup-clojure@master
15+
with:
16+
cli: '1.10.3.943'
17+
18+
- name: 🛎 Checkout
19+
uses: actions/checkout@v2
20+
21+
- name: 🧶 Yarn Install
22+
run: yarn install
23+
24+
- name: 🧪 Run tests
25+
run: yarn test
26+
27+
snapshot:
28+
name: Static App / Build
29+
runs-on: ubuntu-latest
30+
steps:
31+
- name: 🛎 Checkout
32+
uses: actions/checkout@v2
33+
34+
- name: 🔐 Google Auth
35+
uses: google-github-actions/auth@v0
36+
with:
37+
credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY }}
38+
39+
- name: 🔧 Setup Google Cloud SDK
40+
uses: google-github-actions/[email protected]
41+
42+
- name: 🔧 Install java
43+
uses: actions/setup-java@v1
44+
with:
45+
java-version: '11.0.7'
46+
47+
- name: 🔧 Install clojure
48+
uses: DeLaGuardo/setup-clojure@master
49+
with:
50+
cli: '1.10.3.943'
51+
- name: 🧶 Yarn Install
52+
run: yarn install
53+
54+
- name: 🧶 Yarn Build
55+
run: yarn build
56+
57+
- name: 📠 Copy static build to bucket under SHA
58+
run: gsutil cp -r public gs://nextjournal-snapshots/clojure-mode/build/${{ github.sha }}
59+
60+
- name: 📠 Copy static build to GitHub Pages
61+
if: ${{ github.ref == 'refs/heads/main' }}
62+
uses: JamesIves/[email protected]
63+
with:
64+
branch: gh-pages # The branch the action should deploy to.
65+
folder: public # The folder the action should deploy.
66+
67+
- name: ✅ Add success status to report with link to snapshot
68+
uses: Sibz/github-status-action@v1
69+
with:
70+
authToken: ${{secrets.GITHUB_TOKEN}}
71+
context: 'CI / Static App / URL'
72+
description: 'Ready'
73+
state: 'success'
74+
sha: ${{github.event.pull_request.head.sha || github.sha}}
75+
target_url: https://snapshots.nextjournal.com/clojure-mode/build/${{ github.sha }}

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
.idea
33
.calva
44
.clj-kondo
5+
.cpcache
56
.lsp
67
public/js
78
node_modules
89
public/test
910
*.iml
11+
out

demo/src/nextjournal/clojure_mode/demo.cljs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
(ns nextjournal.clojure-mode.demo
2-
(:require ["@codemirror/closebrackets" :refer [closeBrackets]]
3-
["@codemirror/fold" :as fold]
4-
["@codemirror/gutter" :refer [lineNumbers]]
5-
["@codemirror/highlight" :as highlight]
6-
["@codemirror/history" :refer [history historyKeymap]]
2+
(:require ["@codemirror/language" :refer [foldGutter syntaxHighlighting defaultHighlightStyle]]
3+
["@codemirror/commands" :refer [history historyKeymap]]
74
["@codemirror/state" :refer [EditorState]]
85
["@codemirror/view" :as view :refer [EditorView]]
9-
["lezer" :as lezer]
10-
["lezer-generator" :as lg]
11-
["lezer-tree" :as lz-tree]
6+
[nextjournal.clerk.sci-viewer :as sv]
7+
[nextjournal.clerk.viewer :as clerk.viewer]
128
[applied-science.js-interop :as j]
139
[clojure.string :as str]
1410
[nextjournal.clojure-mode :as cm-clj]
1511
[nextjournal.clojure-mode.demo.sci :as sci]
16-
[nextjournal.clojure-mode.extensions.close-brackets :as close-brackets]
17-
[nextjournal.clojure-mode.extensions.formatting :as format]
18-
[nextjournal.clojure-mode.extensions.selection-history :as sel-history]
1912
[nextjournal.clojure-mode.keymap :as keymap]
2013
[nextjournal.clojure-mode.live-grammar :as live-grammar]
21-
[nextjournal.clojure-mode.node :as n]
22-
[nextjournal.clojure-mode.selections :as sel]
2314
[nextjournal.clojure-mode.test-utils :as test-utils]
15+
[react]
2416
[reagent.core :as r]
2517
[reagent.dom :as rdom]))
2618

@@ -44,10 +36,9 @@
4436

4537
(defonce extensions #js[theme
4638
(history)
47-
highlight/defaultHighlightStyle
39+
(syntaxHighlighting defaultHighlightStyle)
4840
(view/drawSelection)
49-
;(lineNumbers)
50-
(fold/foldGutter)
41+
(foldGutter)
5142
(.. EditorState -allowMultipleSelections (of true))
5243
(if false
5344
;; use live-reloading grammar
@@ -77,7 +68,11 @@
7768
:style {:max-height 410}}]
7869
(when eval?
7970
[:div.mt-3.mv-4.pl-6 {:style {:white-space "pre-wrap" :font-family "var(--code-font)"}}
80-
(prn-str @last-result)])]
71+
(when-some [{:keys [error result]} @last-result]
72+
(cond
73+
error [:div.red error]
74+
(react/isValidElement result) result
75+
'else (sv/inspect-paginated result)))])]
8176
(finally
8277
(j/call @!view :destroy))))
8378

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
(ns nextjournal.clojure-mode.demo.sci
22
(:require ["@codemirror/view" :as view]
33
[applied-science.js-interop :as j]
4-
[sci.core :as sci]
5-
[nextjournal.clojure-mode.node :as n]
4+
[clojure.string :as str]
5+
[nextjournal.clerk.sci-viewer :as sv]
66
[nextjournal.clojure-mode.extensions.eval-region :as eval-region]
7-
[nextjournal.clojure-mode.util :as u]))
8-
9-
(defonce context (sci/init {}))
7+
[sci.core :as sci]))
108

119
(defn eval-string [source]
12-
(try (sci/eval-string* context source)
13-
(catch js/Error e
14-
(str e))))
10+
(when-some [code (not-empty (str/trim source))]
11+
(try {:result (sci/eval-string* @sv/!sci-ctx code)}
12+
(catch js/Error e
13+
{:error (str (.-message e))}))))
1514

1615
(j/defn eval-at-cursor [on-result ^:js {:keys [state]}]
1716
(some->> (eval-region/cursor-node-string state)
@@ -26,7 +25,8 @@
2625
true)
2726

2827
(j/defn eval-cell [on-result ^:js {:keys [state]}]
29-
(-> (str "(do " (.-doc state) " )")
28+
(-> (.-doc state)
29+
(str)
3030
(eval-string)
3131
(on-result))
3232
true)

deps.edn

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
{:deps {applied-science/js-interop {:mvn/version "0.2.5"}
1+
{:deps {applied-science/js-interop {:mvn/version "0.3.3"}
22
org.clojure/clojure {:mvn/version "1.10.3"}
33
org.clojure/clojurescript {:mvn/version "1.10.866"}}
44
:aliases
55
{:dev {:extra-paths ["test"]
66
:extra-deps {thheller/shadow-cljs {:mvn/version "2.14.4"}}}
7-
:demo {:extra-deps {borkdude/sci {:mvn/version "0.2.0"}
8-
reagent/reagent {:mvn/version "1.0.0"}}
9-
:extra-paths ["demo/src"]}}}
7+
8+
:demo {:extra-paths ["demo/src"]
9+
:jvm-opts ["-Dpolyglot.engine.WarnInterpreterOnly=false"]
10+
:extra-deps {org.babashka/sci {:mvn/version "0.3.5"}
11+
reagent/reagent {:mvn/version "1.1.1"}
12+
io.github.nextjournal/clerk {:git/sha "601bef312884b9a0f0c5339299578698aa8eb5fe"}
13+
;; clerk dev deps
14+
io.github.babashka/sci.configs {:git/sha "fcd367c6a6115c5c4e41f3a08ee5a8d5b3387a18"}
15+
io.github.nextjournal/viewers {:git/sha "15d03f0b0534fbdcfcc949e0fae2e1a1f4bee931"
16+
:exclusions [io.github.nextjournal/clojure-mode]}}}}}

package.json

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,39 @@
11
{
22
"dependencies": {
3-
"@codemirror/autocomplete": "^0.18.0",
4-
"@codemirror/closebrackets": "^0.18.0",
5-
"@codemirror/commands": "^0.18.0",
6-
"@codemirror/comment": "^0.18.0",
7-
"@codemirror/fold": "^0.18.0",
8-
"@codemirror/gutter": "^0.18.0",
9-
"@codemirror/highlight": "^0.18.3",
10-
"@codemirror/history": "^0.18.0",
11-
"@codemirror/language": "^0.18.0",
12-
"@codemirror/lint": "^0.18.0",
13-
"@codemirror/matchbrackets": "^0.18.0",
14-
"@codemirror/rectangular-selection": "^0.18.0",
15-
"@codemirror/search": "^0.18.0",
16-
"@codemirror/state": "^0.18.0",
17-
"@codemirror/view": "^0.18.0",
18-
"lezer": "^0.13.1",
19-
"lezer-clojure": "0.1.10",
20-
"lezer-generator": "^0.13.0",
21-
"lezer-tree": "^0.13.0",
3+
"@codemirror/autocomplete": "^6.0.2",
4+
"@codemirror/commands": "^6.0.0",
5+
"@codemirror/language": "^6.1.0",
6+
"@codemirror/lint": "^6.0.0",
7+
"@codemirror/search": "^6.0.0",
8+
"@codemirror/state": "^6.0.1",
9+
"@codemirror/view": "^6.0.2",
10+
"@lezer/common": "^1.0.0",
11+
"@lezer/generator": "^1.0.0",
12+
"@lezer/highlight": "^1.0.0",
13+
"@lezer/lr": "^1.0.0",
14+
"d3-require": "^1.2.4",
15+
"emoji-regex": "^10.0.0",
16+
"framer-motion": "^6.2.8",
17+
"katex": "^0.12.0",
18+
"lezer-clojure": "1.0.0-rc.1",
19+
"markdown-it": "12.3.2",
20+
"markdown-it-block-image": "0.0.3",
21+
"markdown-it-sidenote": "gerwitz/markdown-it-sidenote#0b4ffb98ae6d013072f79a832785225c05dd1f29",
22+
"markdown-it-texmath": "0.9.1",
23+
"markdown-it-toc-done-right": "4.2.0",
2224
"platform": "1.3.5",
2325
"react": "17.0.1",
2426
"react-dom": "17.0.1",
25-
"shadow-cljs": "^2.14.4",
2627
"stacktrace-js": "^2.0.2",
2728
"w3c-keyname": "^2.2.4"
2829
},
2930
"scripts": {
3031
"watch": "shadow-cljs -A:demo watch demo test",
31-
"build": "shadow-cljs -A:demo release demo"
32+
"build": "shadow-cljs -A:demo release demo",
33+
"test": "shadow-cljs -A:dev release ci-test && node out/node-tests.js",
34+
"watch2": "git ls-files | entr yarn test"
35+
},
36+
"devDependencies": {
37+
"shadow-cljs": "2.19.5"
3238
}
3339
}

shadow-cljs.edn

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,12 @@
1414
;; sometimes I get weird $jscomp.inherits errors, which can be fixed
1515
;; by temporarily uncommenting the following forms in each build.
1616
#_#_:js-options
17-
{:resolve {"lezer-clojure" {:target :npm
18-
:require "lezer-clojure/dist/index.cjs"}}}}}}
17+
{:resolve {"lezer-clojure" {:target :npm
18+
:require "lezer-clojure/dist/index.cjs"}}}}
19+
:ci-test {:target :node-test
20+
:ns-regexp "-tests$"
21+
:output-dir "out"
22+
:output-to "out/node-tests.js"
23+
:compiler-options {:optimizations :simple}
24+
:closure-defines {nextjournal.clojure-mode.util/node-js? true}
25+
:js-options {:output-feature-set :es8}}}}

src/deps.cljs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
{:npm-deps {"@codemirror/autocomplete" "^0.18.0",
2-
"@codemirror/closebrackets" "^0.18.0",
3-
"@codemirror/commands" "^0.18.0",
4-
"@codemirror/comment" "^0.18.0",
5-
"@codemirror/fold" "^0.18.0",
6-
"@codemirror/gutter" "^0.18.0",
7-
"@codemirror/highlight" "^0.18.0",
8-
"@codemirror/history" "^0.18.0",
9-
"@codemirror/language" "^0.18.0",
10-
"@codemirror/lint" "^0.18.0",
11-
"@codemirror/matchbrackets" "^0.18.0",
12-
"@codemirror/rectangular-selection" "^0.18.0",
13-
"@codemirror/search" "^0.18.0",
14-
"@codemirror/state" "^0.18.0",
15-
"@codemirror/view" "^0.18.0",
16-
"lezer-clojure" "0.1.10"}}
1+
{:npm-deps
2+
{"@codemirror/autocomplete" "^6.0.2"
3+
"@codemirror/commands" "^6.0.0"
4+
"@codemirror/language" "^6.1.0"
5+
"@codemirror/lint" "^6.0.0"
6+
"@codemirror/search" "^6.0.0"
7+
"@codemirror/state" "^6.0.1"
8+
"@codemirror/view" "^6.0.2"
9+
"@lezer/common" "^1.0.0"
10+
"@lezer/generator" "^1.0.0"
11+
"@lezer/highlight" "^1.0.0"
12+
"@lezer/lr" "^1.0.0"
13+
"lezer-clojure" "1.0.0-rc.1"
14+
"platform" "1.3.5"
15+
"react" "17.0.1"
16+
"react-dom" "17.0.1"
17+
"stacktrace-js" "^2.0.2"
18+
"w3c-keyname" "^2.2.4"
19+
}}

0 commit comments

Comments
 (0)