diff --git a/webapp/lsp/providers/documentSymbols.xqm b/webapp/lsp/providers/documentSymbols.xqm index f7a83dc..d29e9b8 100644 --- a/webapp/lsp/providers/documentSymbols.xqm +++ b/webapp/lsp/providers/documentSymbols.xqm @@ -42,8 +42,8 @@ declare function syms:VarDecl($parse as element(VarDecl),$state as hnd:State ) as hnd:State{ let $name:=syms:localName($parse/VarNameAndType/EQName) let $length:=string($parse)=>string-length() - let $range:=pos:range-from-ast($parse,$state?extras?text)=>trace("POSSSS") - let $full-range:=$range + let $range:=pos:range-from-ast($parse/VarNameAndType/EQName,$state?extras?text) + let $full-range:=pos:range-from-ast($parse,$state?extras?text) let $sym:=lspt:DocumentSymbol($name,$lspt:SymbolKindMap('Variable'),$range,$full-range,"VAR") return $state =>map:put("result",($state?result,$sym)) @@ -55,8 +55,8 @@ declare function syms:FunctionDecl($parse as element(FunctionDecl),$state as hn as hnd:State{ let $name:=syms:localName($parse/UnreservedFunctionEQName) let $prev:=$state?result[$name eq ?name] - let $range:=pos:range-from-ast($parse,$state?extras?text)=>trace("POSSSS") - let $full-range:=$range + let $range:=pos:range-from-ast($parse/UnreservedFunctionEQName,$state?extras?text) + let $full-range:=pos:range-from-ast($parse,$state?extras?text) let $sym:=lspt:DocumentSymbol($name,$lspt:SymbolKindMap('Method'),$range,$full-range,"FUN") return $state =>map:put("result",($state?result,$sym)) @@ -66,8 +66,8 @@ as hnd:State{ declare function syms:NamedRecordTypeDecl($parse as element(NamedRecordTypeDecl), $state as hnd:State ) as hnd:State{ let $name:=syms:localName($parse/EQName) -let $range:=pos:range-from-ast($parse,$state?extras?text)=>trace("POSSSS") - let $full-range:=$range + let $range:=pos:range-from-ast($parse/EQName,$state?extras?text) + let $full-range:=pos:range-from-ast($parse,$state?extras?text) let $sym:=lspt:DocumentSymbol($name,$lspt:SymbolKindMap('TypeParameter'),$range,$full-range,"--RECORD") =>trace("RECORD") return $state diff --git a/webapp/static/clients/codemirror/grail.html b/webapp/static/clients/codemirror/grail.html index d815632..dc8458f 100644 --- a/webapp/static/clients/codemirror/grail.html +++ b/webapp/static/clients/codemirror/grail.html @@ -143,7 +143,18 @@
- OutLine + OutLine + + + Follow cursor + + + sort by: + Position + sort by: Name + sort by: Category + +
@@ -165,7 +176,8 @@
- + @@ -180,8 +192,6 @@ sort by: Position sort by: Name sort by: Category - - diff --git a/webapp/static/clients/codemirror/script.js b/webapp/static/clients/codemirror/script.js index 3f1d3ae..95a6821 100644 --- a/webapp/static/clients/codemirror/script.js +++ b/webapp/static/clients/codemirror/script.js @@ -1,10 +1,11 @@ + const view = new lsp.EditorView({ extensions: lsp.baseExts, parent: document.getElementById("editor") }); let doc = "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n"; var client; // https://codemirror.net/docs/ref/#lsp-client -var extLsp; // https://codemirror.net/docs/ref/#lsp-client.LSPPlugin + var workspace = { "file:///some/file.xqm": null }; @@ -68,14 +69,15 @@ $("cmdList").onclick = e => { }); $("popHelpInfo").innerHTML = `` $("popCmds").showPopover() - }; $("symList").addEventListener("itemSelected", e => { - const sel = e.detail.selectionRange; + const plugin=lsp.LSPPlugin.get(view) + if(!plugin) return; + const sel = e.detail.range // or selectionRange; console.log("SYM selection range", sel); - const an = extLsp.fromPosition(sel.start) - const hd = extLsp.fromPosition(sel.end) + const an = plugin.fromPosition(sel.start) + const hd = plugin.fromPosition(sel.end) view.dispatch({ selection: { anchor: an, head: hd}, scrollIntoView: true }); }); @@ -159,7 +161,7 @@ function connect() { client.connect(transport); $("popConnect").hidePopover(); $("tConnect").checked=true; - extLsp = client.plugin(file, "xquery"); + const extLsp = client.plugin(file, "xquery"); view.dispatch({ effects: lsp.StateEffect.appendConfig.of(