From eb1a5750fe483e766e90b7a6fef3a1ddd969b069 Mon Sep 17 00:00:00 2001 From: Mattia Di Eleuterio Date: Sat, 17 Feb 2024 20:13:25 +0100 Subject: [PATCH] fix #2550 inlay hints lambdas parameter type null reference exception --- .../Handlers/OmniSharpInlayHintHandler.cs | 2 +- .../OmniSharpInlayHintHandlerFacts.cs | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/OmniSharp.LanguageServerProtocol/Handlers/OmniSharpInlayHintHandler.cs b/src/OmniSharp.LanguageServerProtocol/Handlers/OmniSharpInlayHintHandler.cs index c3c831e61e..ce16575d73 100644 --- a/src/OmniSharp.LanguageServerProtocol/Handlers/OmniSharpInlayHintHandler.cs +++ b/src/OmniSharp.LanguageServerProtocol/Handlers/OmniSharpInlayHintHandler.cs @@ -82,7 +82,7 @@ private static LSPInlayHint ToLSPInlayHint(OmniSharpInlayHint hint) ? new MarkupContent() { Kind = MarkupKind.Markdown, Value = hint.Tooltip } : null, Position = ToPosition(hint.Position), - TextEdits = new(ToTextEdits(hint.TextEdits)), + TextEdits = hint.TextEdits is not null ? new(ToTextEdits(hint.TextEdits)) : null, PaddingLeft = hint.Label.Length > trimmedStartLabel.Length, PaddingRight = trimmedStartLabel.Length > trimmedLabel.Length, Data = JToken.FromObject(hint.Data), diff --git a/tests/OmniSharp.Lsp.Tests/OmniSharpInlayHintHandlerFacts.cs b/tests/OmniSharp.Lsp.Tests/OmniSharpInlayHintHandlerFacts.cs index 904992d23d..ba5a3a6a44 100644 --- a/tests/OmniSharp.Lsp.Tests/OmniSharpInlayHintHandlerFacts.cs +++ b/tests/OmniSharp.Lsp.Tests/OmniSharpInlayHintHandlerFacts.cs @@ -156,6 +156,43 @@ public async Task InlayHintsForVarTypes(string fileName) } } + [Theory] + [InlineData("dummy.cs")] + [InlineData("dummy.csx")] + public async Task InlayHintsForLambdaParameterTypeNearFunctionParameterName(string fileName) + { + var code = @" +using System; +void fun(Func lambda) {} +{|ihRegion:fun(b => true);|} +"; + + var options = InlayHintsOptions.AllOn with { ForLambdaParameterTypes = false }; + + { + await SetInlayHintOptionsAsync(options); + var response = await GetInlayHints(fileName, code); + AssertEx.Equal(new[] + { + new InlayHint { Position = new Position { Line = 3, Character = 4 }, Label = "lambda:", Kind = InlayHintKind.Parameter, Tooltip = null, TextEdits = new[] { new TextEdit { Range = new Range() { Start = new Position() { Line = 3, Character = 4 }, End = new Position() { Line = 3, Character = 4 } }, NewText = "lambda: " } }, PaddingLeft = false, PaddingRight = true }, + }, + response, + ignoreDataComparer); + } + + { + await SetInlayHintOptionsAsync(options with { ForLambdaParameterTypes = true }); + var response = await GetInlayHints(fileName, code); + AssertEx.Equal(new[] + { + new InlayHint { Position = new Position { Line = 3, Character = 4 }, Label = "lambda:", Kind = InlayHintKind.Parameter, Tooltip = null, TextEdits = new[] { new TextEdit { Range = new Range() { Start = new Position() { Line = 3, Character = 4 }, End = new Position() { Line = 3, Character = 4 } }, NewText = "lambda: " } }, PaddingLeft = false, PaddingRight = true }, + new InlayHint { Position = new Position { Line = 3, Character = 4 }, Label = "int", Kind = InlayHintKind.Type, Tooltip = null, TextEdits = null, PaddingLeft = false, PaddingRight = true }, + }, + response, + ignoreDataComparer); + } + } + [Theory] [InlineData("dummy.cs")] [InlineData("dummy.csx")]