[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)/*;
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,
"documentRangeFormattingProvider": 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 syms="lsp/symbols" at "providers/documentSymbols.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{
"textDocument/didOpen": lsp-text:didOpen#1,
@ -30,14 +31,8 @@ as map(*)
{
let $pos:=$json?params?position
let $uri:= $json?params?textDocument?uri
let $word:="TODO"
let $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})
let $r:=hov:list($uri,$pos)
return rpc:result($json,{"contents":array:build($r)})
};
(:~ symbols :)
@ -57,8 +52,8 @@ as map(*)?
{
let $doc:=$json?params?textDocument?uri
let $context:=$json?params?context (:{"triggerCharacter":":","triggerKind":2.0e0}:)
let $result:=comp:dummy($context)=>array:build()
return rpc:result($json,$result)
let $result:=comp:dummy($context)
return rpc:result($json,array:build($result))
};
declare

View file

@ -339,5 +339,18 @@ export interface CompletionItem {
:)
declare record lspt:CompletionItem(
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(*))
as lspt:CompletionItem*{
message($context,"context: "),
map:for-each($lspt:CompletionItemKindMap,
fn($k,$v){
lspt:CompletionItem($k,$v)
})
message($context,"context: "),
map:for-each(
$lspt:CompletionItemKindMap,
fn($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}`
};