1:- module(pls_symbols, [ 2 workspace_symbols/2, 3 document_symbols/2 4 ]). 5 6:- use_module(library(uri)). 7 8:- use_module(pls_index). 9 10workspace_symbols(Query,Symbols) :- 11 findall(Symbol,workspace_symbol(Query,Symbol),Symbols). 12 13workspace_symbol(Query,Symbol) :- 14 try_profile_symbol(URI, Query, Range, Name, _Detail, Kind), 15 Symbol = symbol{ 16 name: Name, 17 kind: Kind, 18 location: _{ 19 uri: URI, 20 range: Range 21 } 22 }. 23 24document_symbols(URI, SymbolInfos) :- 25 findall(SymbolInfo, document_symbol(URI, SymbolInfo), SymbolInfos). 26 27document_symbol(URI, Symbol) :- 28 try_profile_symbol(URI, '', Range, Name, Detail, Kind), 29 Symbol = symbol{ 30 name: Name, 31 detail: Detail, 32 kind: Kind, 33 range: Range, 34 selectionRange: Range 35 }. 36 37try_profile_symbol(URI, Query, Range, Name, Detail, Kind) :- 38 get_document_profile(URI, Profile), 39 Profile \= base, 40 pls_index_profiles:profile_symbol(Profile, URI, Query, Range, Name, Detail, Kind). 41 42try_profile_symbol(URI, Query, Range, Name, Detail, Kind) :- 43 pls_index_profiles:profile_symbol(base, URI, Query, Range, Name, Detail, Kind)