in src/scip-lib/partialloader/index.go [208:242]
func (p *PartialLoadedIndex) GetSymbolInformationFromDescriptors(descriptors []model.Descriptor, version string) (*model.SymbolInformation, string, error) {
p.prefixTreeMu.RLock()
defer p.prefixTreeMu.RUnlock()
if len(descriptors) == 0 {
return nil, "", errors.New("no descriptors provided")
}
node := &p.PrefixTreeRoot.SymbolPrefixTreeNode
for _, part := range descriptors {
node = node.Children[part]
if node == nil {
return nil, "", nil
}
}
if node.SymbolVersions == nil || len(node.SymbolVersions) == 0 || version == "" {
return nil, "", nil
}
// If version is specified, try to get that specific version
if versionInfo, exists := node.SymbolVersions[version]; exists {
return versionInfo.Info, versionInfo.DocumentPath, nil
}
// If version is not specified or not found, return the first sorted version we find
versions := make([]string, 0, len(node.SymbolVersions))
for v := range node.SymbolVersions {
versions = append(versions, v)
}
sort.Strings(versions)
firstVersionInfo := node.SymbolVersions[versions[0]]
return firstVersionInfo.Info, firstVersionInfo.DocumentPath, nil
}