Reuse alias tree for discovery and help
This commit is contained in:
@@ -182,3 +182,50 @@ func (resolver *Resolver) ResolveWithProvenance(path commandpath.Path) (commandp
|
||||
origins = nextOrigins
|
||||
}
|
||||
}
|
||||
|
||||
// ProperSourcePrefixes returns distinct nonempty proper prefixes of source paths.
|
||||
// Returned paths are owned by the caller.
|
||||
func (resolver *Resolver) ProperSourcePrefixes() []commandpath.Path {
|
||||
if resolver == nil {
|
||||
return nil
|
||||
}
|
||||
var paths []commandpath.Path
|
||||
for index := 1; index < len(resolver.trie); index++ {
|
||||
node := &resolver.trie[index]
|
||||
if len(node.children) != 0 {
|
||||
paths = append(paths, node.path.Clone())
|
||||
}
|
||||
}
|
||||
return paths
|
||||
}
|
||||
|
||||
// Descendants returns owned mappings whose sources are strictly below prefix.
|
||||
func (resolver *Resolver) Descendants(prefix commandpath.Path) []Mapping {
|
||||
if resolver == nil {
|
||||
return nil
|
||||
}
|
||||
index := 0
|
||||
for _, component := range prefix {
|
||||
next, ok := resolver.trie[index].children[component]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
index = next
|
||||
}
|
||||
var mappings []Mapping
|
||||
var visit func(int)
|
||||
visit = func(index int) {
|
||||
node := &resolver.trie[index]
|
||||
if node.mapping >= 0 {
|
||||
mapping := resolver.mappings[node.mapping]
|
||||
mappings = append(mappings, Mapping{Source: mapping.Source.Clone(), Target: mapping.Target.Clone()})
|
||||
}
|
||||
for _, child := range node.children {
|
||||
visit(child)
|
||||
}
|
||||
}
|
||||
for _, child := range resolver.trie[index].children {
|
||||
visit(child)
|
||||
}
|
||||
return mappings
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user