示例#1
0
            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);
                }
            }
示例#2
0
 public SearchResult(SymbolResult <INamespaceOrTypeSymbol> result)
     : this(result.DesiredName, result.NameNode, INamespaceOrTypeSymbolExtensions.GetNameParts(result.Symbol), result.Weight)
 {
 }
示例#3
0
 public override SymbolReference CreateReference <T>(SymbolResult <T> symbol)
 {
     return(new ProjectSymbolReference(
                provider, symbol.WithSymbol <INamespaceOrTypeSymbol>(symbol.Symbol), _project));
 }
示例#4
0
 public abstract SymbolReference CreateReference <T>(SymbolResult <T> symbol) where T : INamespaceOrTypeSymbol;