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)