func()

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
}