diff --git a/docs/explore.xqbk b/docs/explore.xqbk index 9854d1c..bd9d2ba 100644 --- a/docs/explore.xqbk +++ b/docs/explore.xqbk @@ -1 +1 @@ -{"cells":[{"kind":2,"language":"xquery","value":"(:<:)\r\n\r\nimport module namespace docs=\"lsp/docs\" at \"/srv/basex/webapp/lsp/docs.xqm\";"},{"kind":2,"language":"xquery","value":"ws:ids()"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"textDocument\")\r\nreturn $t"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"parse\")\r\nreturn $t/self::ERROR"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"textDocument\")?text\r\nreturn string-to-codepoints($t)=>index-of(10)"}]} \ No newline at end of file +{"cells":[{"kind":2,"language":"xquery","value":"(:<:)\r\n\r\nimport module namespace docs=\"lsp/docs\" at \"/srv/basex/webapp/lsp/docs.xqm\";"},{"kind":2,"language":"xquery","value":"ws:ids()"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"textDocument\")\r\nreturn map:put($t,\"text\",substring($t?text,1,15))"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"parse\")\r\nreturn $t/self::ERROR"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"textDocument\")?text\r\nreturn $t"}]} \ No newline at end of file diff --git a/webapp/lsp/lsp-diags.xqm b/webapp/lsp/lsp-diags.xqm index 247df30..7de6461 100644 --- a/webapp/lsp/lsp-diags.xqm +++ b/webapp/lsp/lsp-diags.xqm @@ -16,7 +16,9 @@ actions⁠?: readonly Action[] An optional array of actions that can be taken on declare record lsp-diags:nostic( range as pos:Range, severity as xs:integer, (: enum('error', 'hint', 'info', 'warning') :) - message as xs:string + message as xs:string, + code? as xs:string, + source as xs:string:="xquery" ); declare variable $lsp-diags:severities:={ @@ -43,6 +45,8 @@ as map(*){ (:~ syntax error, found '}' while expecting [S,'else'] at line 290, column 3: ...} }; ? return bookmark info for children of $outlineItem as s... + assert.equal(markers[0].code, 'XPST0003', 'parse error'); + assert.equal(markers[1].code, 'XQLT0001', 'previous parse error'); :) declare function lsp-diags:parse-error($text as xs:string, $xml as element(ERROR)) as map(*)*{ @@ -52,12 +56,13 @@ return ( lsp-diags:nostic(pos:Range(pos:toPosition($text, $xml/@b), pos:toPosition($text, $xml/@e)), $lsp-diags:severities('error'), - $dmesg), + $dmesg,code:="XPST0003"), lsp-diags:nostic(pos:Range(pos:toPosition($text, $xml/@e +1 ), pos:toPosition($text, string-length($text)-1)), $lsp-diags:severities('warning'), - "Unparsed due to previous parser error.") + "Unparsed due to previous parser error.", + code:="XQLT0001") ) };