xquery version '4.0'; (:~ Symbols from XQuery source file :) module namespace syms="lsp/symbols"; import module namespace pos="lsp/position" at "position.xqm"; declare type syms:SymbolKind as xs:integer; declare type syms:SymbolTag as xs:string; declare variable $syms:SymbolKindMap :={ 'File': 1 , 'Module': 2 , 'Namespace': 3 , 'Package': 4 , 'Class': 5 , 'Method': 6 , 'Property': 7 , 'Field': 8 , 'Constructor': 9 , 'Enum': 10 , 'Interface': 11 , 'Function': 12 , 'Variable': 13 , 'Constant': 14 , 'String': 15 , 'Number': 16 , 'Boolean': 17 , 'Array': 18 , 'Object': 19 , 'Key': 20 , 'Null': 21 , 'EnumMember': 22 , 'Struct': 23 , 'Event': 24 , 'Operator': 25 , 'TypeParameter': 26 }; declare record syms:DocumentSymbol( (: The name of this symbol. Will be displayed in the user interface and therefore must not be an empty string or a string only consisting of white spaces. :) name as xs:string, (: The kind of this symbol. :) kind as syms:SymbolKind, (: The range enclosing this symbol not including leading/trailing whitespace but everything else like comments. This information is typically used to determine if the clients cursor is inside the symbol to reveal it in the UI. :) range as pos:Range, (:The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. Must be contained by the `range`. :) selectionRange as pos:Range, (: More detail for this symbol, e.g the signature of a function.:) detail? as xs:string, (: Tags for this document symbol. @since 3.16.0 :) tags? as syms:SymbolTag*, (: Children of this symbol, e.g. properties of a class. :) children? as syms:DocumentSymbol* );