basex-lsp/webapp/lsp/lsp-diags.xqm
2025-08-10 23:18:01 +01:00

46 lines
No EOL
1.9 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module namespace lsp-diags = 'lsp-diags';
import module namespace pos="lsp/position" at "position.xqm";
declare type lsp-diags:ParseResult as element(Module|ERROR);
(:~
from: number The start position of the relevant text.
to: number The end position. May be equal to from, though actually covering text is preferable.
severity: "error" | "hint" | "info" | "warning" The severity of the problem. This will influence how it is displayed.
markClass?: string When given, add an extra CSS class to parts of the code that this diagnostic applies to.
source?: string An optional source string indicating where the diagnostic is coming from. You can put the name of your linter here, if applicable.
message: string The message associated with this diagnostic.
renderMessage?: fn(view: EditorView) → Node An optional custom rendering function that displays the message as a DOM node.
actions?: readonly Action[] An optional array of actions that can be taken on this diagnostic.
:)
declare record lsp-diags:nostic(
range as pos:Range,
severity as xs:integer, (: enum('error', 'hint', 'info', 'warning') :)
message as xs:string
);
declare function lsp-diags:publish(
$uri as xs:string,
$text as xs:string,
$xml as lsp-diags:ParseResult)
as map(*){
let $diagnostics:=if($xml/self::ERROR)
then [lsp-diags:parse-error($text, $xml)]
else []
return {"jsonrpc": "2.0",
"method":"textDocument/publishDiagnostics",
"params":{"uri": $uri, "diagnostics": $diagnostics}
}
};
(:~
<ERROR b="10819" e="10820" o="234" s="43">syntax error, found '}' while expecting [S,'else'] at line 290, column 3: ...} }; ? return bookmark info for children of $outlineItem as s...</ERROR>
:)
declare function lsp-diags:parse-error($text as xs:string, $xml as element(ERROR))
as map(*)?{
lsp-diags:nostic(pos:Range(pos:toPosition($xml, $xml/@b),
pos:toPosition($xml, $xml/@e)),
1,$xml/string())
};