public async Task <ImmutableArray <SymbolResult <ISymbol> > > FindDeclarationsAsync( string name, TSimpleNameSyntax nameNode, SymbolFilter filter) { if (name != null && string.IsNullOrWhiteSpace(name)) { return(ImmutableArray <SymbolResult <ISymbol> > .Empty); } using (var query = this.Exact ? SearchQuery.Create(name, ignoreCase: true) : SearchQuery.CreateFuzzy(name)) { var symbols = await FindDeclarationsAsync(filter, query).ConfigureAwait(false); if (Exact) { // We did an exact, case insensitive, search. Case sensitive matches should // be preferred though over insensitive ones. return(symbols.SelectAsArray(s => SymbolResult.Create(s.Name, nameNode, s, weight: s.Name == name ? 0 : 1))); } // TODO(cyrusn): It's a shame we have to compute this twice. However, there's no // great way to store the original value we compute because it happens deep in the // compiler bowels when we call FindDeclarations. var similarityChecker = WordSimilarityChecker.Allocate(name, substringsAreSimilar: false); var result = symbols.SelectAsArray(s => { var areSimilar = similarityChecker.AreSimilar(s.Name, out var matchCost); Debug.Assert(areSimilar); return(SymbolResult.Create(s.Name, nameNode, s, matchCost)); }); similarityChecker.Free(); return(result); } }
public SearchResult(SymbolResult <INamespaceOrTypeSymbol> result) : this(result.DesiredName, result.NameNode, INamespaceOrTypeSymbolExtensions.GetNameParts(result.Symbol), result.Weight) { }
public override SymbolReference CreateReference <T>(SymbolResult <T> symbol) { return(new ProjectSymbolReference( provider, symbol.WithSymbol <INamespaceOrTypeSymbol>(symbol.Symbol), _project)); }
public abstract SymbolReference CreateReference <T>(SymbolResult <T> symbol) where T : INamespaceOrTypeSymbol;