[mod] better completion info

This commit is contained in:
Andy Bunce 2025-10-10 15:39:51 +01:00
parent a2fa9cb062
commit 9894581d19
6 changed files with 43 additions and 19 deletions

View file

@ -4,4 +4,4 @@ declare variable $src:="sample.docs/parse-pdfbox.xml";
declare variable $parse:=doc($src)/*; declare variable $parse:=doc($src)/*;
let $context:= {"triggerCharacter":":","triggerKind":2.0e0} let $context:= {"triggerCharacter":":","triggerKind":2.0e0}
return comp:list($context ) return comp:dummy($context )=>array:build()

View file

@ -13,7 +13,7 @@
} }
] ]
}, },
"hoverProvider": true, "hoverProvider": false,
"documentSymbolProvider": true, "documentSymbolProvider": true,
"documentRangeFormattingProvider": false, "documentRangeFormattingProvider": false,
"colorProvider": false, "colorProvider": false,

View file

@ -9,6 +9,7 @@ import module namespace lspt = 'lsp-typedefs' at 'lsp-typedefs.xqm';
import module namespace pos="lsp/position" at "position.xqm"; import module namespace pos="lsp/position" at "position.xqm";
import module namespace syms="lsp/symbols" at "providers/documentSymbols.xqm"; import module namespace syms="lsp/symbols" at "providers/documentSymbols.xqm";
import module namespace comp = 'lsp-completions' at "providers/completions.xqm"; import module namespace comp = 'lsp-completions' at "providers/completions.xqm";
import module namespace hov = 'lsp-hover' at "providers/hover.xqm";
declare variable $lsp-text:methods:=map{ declare variable $lsp-text:methods:=map{
"textDocument/didOpen": lsp-text:didOpen#1, "textDocument/didOpen": lsp-text:didOpen#1,
@ -30,14 +31,8 @@ as map(*)
{ {
let $pos:=$json?params?position let $pos:=$json?params?position
let $uri:= $json?params?textDocument?uri let $uri:= $json?params?textDocument?uri
let $word:="TODO" let $r:=hov:list($uri,$pos)
let $r:= [ return rpc:result($json,{"contents":array:build($r)})
`Hover { pos:ln-col($pos) }, uri: {$uri},
[path](https://quodatum.github.io/basex-xqparse/i-BaseX.xhtml#EQName)
WordAt: {$word}`
]
return rpc:result($json,{"contents":$r})
}; };
(:~ symbols :) (:~ symbols :)
@ -57,8 +52,8 @@ as map(*)?
{ {
let $doc:=$json?params?textDocument?uri let $doc:=$json?params?textDocument?uri
let $context:=$json?params?context (:{"triggerCharacter":":","triggerKind":2.0e0}:) let $context:=$json?params?context (:{"triggerCharacter":":","triggerKind":2.0e0}:)
let $result:=comp:dummy($context)=>array:build() let $result:=comp:dummy($context)
return rpc:result($json,$result) return rpc:result($json,array:build($result))
}; };
declare declare

View file

@ -339,5 +339,18 @@ export interface CompletionItem {
:) :)
declare record lspt:CompletionItem( declare record lspt:CompletionItem(
label as xs:string, label as xs:string,
kind? as lspt:CompletionItemKind kind? as lspt:CompletionItemKind,
tags? as xs:string* :=(),
detail? as xs:string,
documentation? as (xs:string|lspt:MarkupContent)
);
declare type lspt:MarkupKind as enum('plaintext' , 'markdown');
(: A `MarkupContent` literal represents a string value which content is
* interpreted base on its kind flag.
:)
declare record lspt:MarkupContent(
kind as lspt:MarkupKind,
value as xs:string
); );

View file

@ -10,10 +10,14 @@ as lspt:CompletionItem*{
declare function comp:dummy($context as map(*)) declare function comp:dummy($context as map(*))
as lspt:CompletionItem*{ as lspt:CompletionItem*{
message($context,"context: "),
message($context,"context: "), map:for-each(
map:for-each($lspt:CompletionItemKindMap, $lspt:CompletionItemKindMap,
fn($k,$v){ fn($k,$v){
lspt:CompletionItem($k,$v) let $d:=lspt:MarkupContent(
}) 'markdown',
'[path](https://quodatum.github.io/basex-xqparse/i-BaseX.xhtml#EQName)'
)
return lspt:CompletionItem($k,$v,detail:="detail",documentation:=$d)
})
}; };

View file

@ -0,0 +1,12 @@
module namespace hov = 'lsp-hover';
import module namespace lspt = 'lsp-typedefs' at "../lsp-typedefs.xqm";
import module namespace pos="lsp/position" at "../position.xqm";
declare function hov:list($uri, $pos as map(*))
as xs:string*{
let $word:="TODO"
return `Hover { pos:ln-col($pos) }, uri: {$uri},
[path](https://quodatum.github.io/basex-xqparse/i-BaseX.xhtml#EQName)
WordAt: {$word}`
};