(: 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) ) };