44 lines
1.6 KiB
Text
44 lines
1.6 KiB
Text
xquery version '4.0';
|
|
(:~ Symbols from walking the parse tree :)
|
|
module namespace syms="lsp/symbols";
|
|
import module namespace hnd="lsp/handlers" at "../handlers.xqm";
|
|
import module namespace lspt = 'lsp-typedefs' at "../lsp-typedefs.xqm";
|
|
|
|
declare function syms:list($parse as element(),$syms as lspt:DocumentSymbol* :=() )
|
|
{
|
|
let $actions as hnd:actionMap :={
|
|
"ContextValueDecl": syms:action#2,
|
|
"VarDecl": syms:VarDecl#2,
|
|
"FunctionDecl": syms:FunctionDecl#2,
|
|
"ItemTypeDecl": syms:action#2,
|
|
"NamedRecordTypeDecl": syms:action#2
|
|
}
|
|
let $state:= hnd:Result(())
|
|
let $result:= hnd:walk($parse,$actions,$state)
|
|
return $result?result
|
|
};
|
|
|
|
declare function syms:action($parse as element(),$state as hnd:Result )
|
|
as hnd:Result{
|
|
hnd:Result($state?result,true()) ,message(name($parse),"ACTION: ")
|
|
};
|
|
|
|
declare function syms:VarDecl($parse as element(VarDecl),$state as hnd:Result )
|
|
as hnd:Result{
|
|
let $name:=$parse/VarNameAndType/EQName
|
|
let $length:=string($parse)=>string-length()
|
|
let $range:=lspt:Range(lspt:Position(0,0),lspt:Position(0,3))
|
|
let $sym:=lspt:DocumentSymbol($name,$lspt:SymbolKindMap('Variable'),$range,$range,"TODO")
|
|
return ($state?result,$sym)=>hnd:Result(true())
|
|
};
|
|
|
|
declare function syms:FunctionDecl($parse as element(FunctionDecl),$state as hnd:Result )
|
|
as hnd:Result{
|
|
let $name:=$parse/UnreservedFunctionEQName
|
|
let $range:=lspt:Range(lspt:Position(0,0),lspt:Position(0,3))
|
|
let $sym:=lspt:DocumentSymbol($name,$lspt:SymbolKindMap('Method'),$range,$range,"TODO")
|
|
return ($state?result,$sym)=>hnd:Result(true())
|
|
};
|
|
|
|
|
|
|