[mod] refactor

This commit is contained in:
Andy Bunce 2025-08-03 22:47:54 +01:00
parent ab88b9139e
commit ce69c61b6c
2 changed files with 58 additions and 16 deletions

45
webapp/lsp/docs.xqm Normal file
View file

@ -0,0 +1,45 @@
(: Store for XQuery document data , type, text,uri
on save parse is created and stored
implementation: data is stored in webSocket
@author Andy Bunce
:)
module namespace docs="lsp/docs";
import module namespace p="xq4" at "xq4.xqm";
(: document info :)
declare type docs:property as enum("textDocument","parse");
(: get $property for $file from session $socket :)
declare function docs:get(
$socket as xs:string,
$file as xs:string,
$property as docs:property
)
{
let $key:=ws:get($socket,"files")($file)($property)
return ws:get($socket,$key)
};
(: save $textDocument data as session $socket properties :)
declare function docs:save(
$socket as xs:string,
$textDocument as map(*)
)
{
let $text as xs:string:=$textDocument?text
let $uri:=$textDocument?uri
let $files:=ws:get($socket,"files",{})
let $files:=if(map:contains($files,$uri))
then $files
else map:put($files,$uri,{
"textDocument":random:uuid(),
"parse":random:uuid() })
let $keys:=$files($uri)
let $xml:=p:parse-Module($text)
return (
ws:set($socket,"files",$files),
ws:set($socket,$keys?textDocument,$textDocument),
ws:set($socket,$keys?parse,$xml)
)
};

View file

@ -1,24 +1,21 @@
(: parse a didOpen :)
import module namespace p="xq4" at "xq4.xqm";
(: Save an XQuery doc and it's parse :)
import module namespace docs="lsp/docs" at "docs.xqm";
declare variable $textDocument external;
declare variable $webSocket as xs:string external;
let $text as xs:string:=$textDocument?text
let $uri:=$textDocument?uri
let $files:=ws:get($webSocket,"files",{})
let $files:=if(map:contains($files,$uri))
then $files
else map:put($files,$uri,{"textDocument":random:uuid(),"parse":random:uuid() })
let $keys:=$files($uri)
let $xml:=p:parse-Module($text)
docs:save(
$webSocket,
$textDocument
),
return (
ws:set($webSocket,"files",$files),
ws:set($webSocket,$keys?textDocument,$textDocument),
ws:set($webSocket,$keys?parse,$xml),
ws:send({"jsonrpc": "2.0","method":"window/logMessage",
"params":{"type":1,"message":"TODO"}},$webSocket)
ws:send(
{"jsonrpc": "2.0",
"method":"window/logMessage",
"params":{"type":1,"message":"TODO"}
},
$webSocket
)