diff options
Diffstat (limited to 'www/index.js')
-rw-r--r-- | www/index.js | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/www/index.js b/www/index.js index f870e92..3e00b9e 100644 --- a/www/index.js +++ b/www/index.js | |||
@@ -3,6 +3,7 @@ import {EditorState, EditorView, basicSetup} from "@codemirror/basic-setup" | |||
3 | import {Decoration, DecorationSet} from "@codemirror/view" | 3 | import {Decoration, DecorationSet} from "@codemirror/view" |
4 | import {StateField, StateEffect} from "@codemirror/state" | 4 | import {StateField, StateEffect} from "@codemirror/state" |
5 | import {rust} from "@codemirror/lang-rust" | 5 | import {rust} from "@codemirror/lang-rust" |
6 | import {oneDark, oneDarkTheme, oneDarkHighlightStyle} from "@codemirror/theme-one-dark" | ||
6 | 7 | ||
7 | let cst = document.getElementById('cst'); | 8 | let cst = document.getElementById('cst'); |
8 | let view = new EditorView({ | 9 | let view = new EditorView({ |
@@ -14,10 +15,13 @@ let view = new EditorView({ | |||
14 | if (v.docChanged) { | 15 | if (v.docChanged) { |
15 | doRender() | 16 | doRender() |
16 | } | 17 | } |
17 | }) | 18 | }), |
19 | oneDark, | ||
20 | oneDarkTheme, | ||
21 | oneDarkHighlightStyle.extension | ||
18 | ] | 22 | ] |
19 | }), | 23 | }), |
20 | parent: document.getElementById('source-code') | 24 | parent: document.getElementById('source-code'), |
21 | }) | 25 | }) |
22 | 26 | ||
23 | const doHighlight = StateEffect.define() | 27 | const doHighlight = StateEffect.define() |
@@ -60,6 +64,8 @@ function render_cst(synRoot) { | |||
60 | let synText = wrap(synRoot.kind() + " @ " + r.to_string() + " " +synRoot.text(), "pre"); | 64 | let synText = wrap(synRoot.kind() + " @ " + r.to_string() + " " +synRoot.text(), "pre"); |
61 | synText.onmouseover = () => { | 65 | synText.onmouseover = () => { |
62 | highlightArea(view, r); | 66 | highlightArea(view, r); |
67 | let sourceFile = view.state.doc.toString(); | ||
68 | view.scrollPosIntoView(r.start()); | ||
63 | } | 69 | } |
64 | nodeDiv.appendChild(synText); | 70 | nodeDiv.appendChild(synText); |
65 | if (!synRoot.is_token()) { | 71 | if (!synRoot.is_token()) { |
@@ -80,14 +86,17 @@ function render_err(errorList) { | |||
80 | let errDiv = document.createElement("div"); | 86 | let errDiv = document.createElement("div"); |
81 | errDiv.className = "syntax-err"; | 87 | errDiv.className = "syntax-err"; |
82 | errorList.forEach(err => { | 88 | errorList.forEach(err => { |
83 | errDiv.appendChild(wrap(err.to_string(), "pre")); | 89 | let sourceFile = view.state.doc.toString(); |
90 | let line = err.range().line(sourceFile); | ||
91 | let col = err.range().col(sourceFile); | ||
92 | errDiv.appendChild(wrap(`line ${line}, col ${col}: ` + err.to_string(), "pre")); | ||
84 | // highlightArea(view, err.range()); | 93 | // highlightArea(view, err.range()); |
85 | }); | 94 | }); |
86 | return errDiv; | 95 | return errDiv; |
87 | } | 96 | } |
88 | 97 | ||
89 | function doRender() { | 98 | function doRender() { |
90 | let sourceFile = view.state.doc.toString();; | 99 | let sourceFile = view.state.doc.toString(); |
91 | cst.innerHTML = ""; | 100 | cst.innerHTML = ""; |
92 | try { | 101 | try { |
93 | let synRoot = SynNode.from_str(sourceFile); | 102 | let synRoot = SynNode.from_str(sourceFile); |