aboutsummaryrefslogtreecommitdiff
path: root/www/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/index.js')
-rw-r--r--www/index.js17
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"
3import {Decoration, DecorationSet} from "@codemirror/view" 3import {Decoration, DecorationSet} from "@codemirror/view"
4import {StateField, StateEffect} from "@codemirror/state" 4import {StateField, StateEffect} from "@codemirror/state"
5import {rust} from "@codemirror/lang-rust" 5import {rust} from "@codemirror/lang-rust"
6import {oneDark, oneDarkTheme, oneDarkHighlightStyle} from "@codemirror/theme-one-dark"
6 7
7let cst = document.getElementById('cst'); 8let cst = document.getElementById('cst');
8let view = new EditorView({ 9let 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
23const doHighlight = StateEffect.define() 27const 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
89function doRender() { 98function 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);