type symbol … func (s symbol) String() string { … } // for FieldNode or VariableNode (or ChainNode?) func (p *Parsed) fields(flds []string, x parse.Node) []symbol { … } func (p *Parsed) findSymbols() { … } // DocumentSymbols returns a hierarchy of the symbols defined in a template file. // (The hierarchy is flat. SymbolInformation might be better.) func DocumentSymbols(snapshot *cache.Snapshot, fh file.Handle) ([]protocol.DocumentSymbol, error) { … }