diff --git a/CHANGELOG.md b/CHANGELOG.md index 45eb1f5994..b08276fd16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All changes to the project will be documented in this file. ## [1.34.10] - not yet released +* Fixed a bug where completion items didn't decode symbols corectly (impacted, for example, object initializer completion quality) ([omnisharp-vscode#3465](https://github.com/OmniSharp/omnisharp-vscode/issues/3465), PR: [#1670](https://github.com/OmniSharp/omnisharp-roslyn/pull/1670)) * Updated to MsBuild 16.4.0 on Linux/MacOS (PR:[#1669](https://github.com/OmniSharp/omnisharp-roslyn/pull/1669)) ## [1.34.9] - 2019-12-10 diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs index fa01e5d5f3..c953252ee3 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Intellisense/CompletionItemExtensions.cs @@ -21,7 +21,6 @@ internal static class CompletionItemExtensions private const string ParitalMethodCompletionProvider = "Microsoft.CodeAnalysis.CSharp.Completion.Providers.PartialMethodCompletionProvider"; private const string ProviderName = nameof(ProviderName); private const string SymbolCompletionItem = "Microsoft.CodeAnalysis.Completion.Providers.SymbolCompletionItem"; - private const string SymbolCompletionProvider = "Microsoft.CodeAnalysis.CSharp.Completion.Providers.SymbolCompletionProvider"; private const string SymbolKind = nameof(SymbolKind); private const string SymbolName = nameof(SymbolName); private const string Symbols = nameof(Symbols); @@ -49,7 +48,9 @@ public static bool IsObjectCreationCompletionItem(this CompletionItem item) public static async Task> GetCompletionSymbolsAsync(this CompletionItem completionItem, IEnumerable recommendedSymbols, Document document) { - if (completionItem.GetType() == _symbolCompletionItemType) + var properties = completionItem.Properties; + + if (completionItem.GetType() == _symbolCompletionItemType || properties.ContainsKey(Symbols)) { var decodedSymbolsTask = _getSymbolsAsync.InvokeStatic>>(new object[] { completionItem, document, default(CancellationToken) }); if (decodedSymbolsTask != null) @@ -58,8 +59,6 @@ public static async Task> GetCompletionSymbolsAsync(this Co } } - var properties = completionItem.Properties; - // if the completion provider encoded symbols into Properties, we can return them if (properties.ContainsKey(SymbolName) && properties.ContainsKey(SymbolKind)) { diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/IntellisenseFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/IntellisenseFacts.cs index 171cc74b06..03e33471c2 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/IntellisenseFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/IntellisenseFacts.cs @@ -259,6 +259,7 @@ public MyClass2() var completions = await FindCompletionsAsync(filename, source); ContainsCompletions(completions.Select(c => c.CompletionText), "Foo"); + ContainsCompletions(completions.Select(c => c.ReturnType), "string"); } [Theory]