diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs index c953252ee3..b9e11a146c 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs @@ -60,9 +60,13 @@ public static async Task> GetCompletionSymbolsAsync(this Co } // if the completion provider encoded symbols into Properties, we can return them - if (properties.ContainsKey(SymbolName) && properties.ContainsKey(SymbolKind)) + if (properties.TryGetValue(SymbolName, out string symbolNameValue) + && properties.TryGetValue(SymbolKind, out string symbolKindValue) + && int.Parse(symbolKindValue) is int symbolKindInt) { - return recommendedSymbols.Where(x => x.Name == properties[SymbolName] && (int)x.Kind == int.Parse(properties[SymbolKind])).Distinct(); + return recommendedSymbols + .Where(x => (int)x.Kind == symbolKindInt && x.Name.Equals(symbolNameValue, StringComparison.OrdinalIgnoreCase)) + .Distinct(); } return Enumerable.Empty(); diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/IntellisenseService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/IntellisenseService.cs index f72a37f289..c2beb1504b 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/IntellisenseService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/IntellisenseService.cs @@ -51,7 +51,7 @@ public async Task> Handle(AutoCompleteRequest // get recommended symbols to match them up later with SymbolCompletionProvider var semanticModel = await document.GetSemanticModelAsync(); - var recommendedSymbols = await Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, position, _workspace); + var recommendedSymbols = (await Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, position, _workspace)).ToArray(); var isSuggestionMode = completionList.SuggestionModeItem != null; foreach (var item in completionList.Items) diff --git a/src/OmniSharp.Roslyn/Extensions/StringExtensions.cs b/src/OmniSharp.Roslyn/Extensions/StringExtensions.cs index 84d37e3777..60ec0947fc 100644 --- a/src/OmniSharp.Roslyn/Extensions/StringExtensions.cs +++ b/src/OmniSharp.Roslyn/Extensions/StringExtensions.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; namespace OmniSharp.Extensions @@ -16,12 +17,12 @@ public static bool IsValidCompletionStartsWithExactCase(this string completion, public static bool IsValidCompletionStartsWithIgnoreCase(this string completion, string partial) { - return completion.ToLower().StartsWith(partial.ToLower()); + return completion.StartsWith(partial, StringComparison.OrdinalIgnoreCase); } public static bool IsCamelCaseMatch(this string completion, string partial) { - return new string(completion.Where(c => c >= 'A' && c <= 'Z').ToArray()).StartsWith(partial.ToUpper()); + return new string(completion.Where(c => c >= 'A' && c <= 'Z').ToArray()).StartsWith(partial, StringComparison.OrdinalIgnoreCase); } public static bool IsSubsequenceMatch(this string completion, string partial) @@ -31,7 +32,7 @@ public static bool IsSubsequenceMatch(this string completion, string partial) return true; } - if (partial.Length > 1 && completion.ToLowerInvariant().Contains(partial.ToLowerInvariant())) + if (partial.Length > 1 && completion.IndexOf(partial, StringComparison.InvariantCultureIgnoreCase) >= 0) { return true; } @@ -54,7 +55,7 @@ private static bool FirstLetterMatches(string word, string match) return false; } - return char.ToLowerInvariant(word.First()) == char.ToLowerInvariant(match.First()); + return char.ToLowerInvariant(word[0]) == char.ToLowerInvariant(match[0]); } } }