diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Signatures/SignatureHelpService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Signatures/SignatureHelpService.cs index ec85681855..da16d0261c 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Signatures/SignatureHelpService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Signatures/SignatureHelpService.cs @@ -119,7 +119,7 @@ private async Task GetInvocation(Document document, Request r return new InvocationContext(semanticModel, position, invocation.Expression, invocation.ArgumentList, invocation.IsInStaticContext()); } - if (node is ObjectCreationExpressionSyntax objectCreation && objectCreation.ArgumentList.Span.Contains(position)) + if (node is BaseObjectCreationExpressionSyntax objectCreation && objectCreation.ArgumentList.Span.Contains(position)) { var semanticModel = await document.GetSemanticModelAsync(); return new InvocationContext(semanticModel, position, objectCreation, objectCreation.ArgumentList, objectCreation.IsInStaticContext()); diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/SignatureHelpFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/SignatureHelpFacts.cs index a6e5e682fe..8324310fe7 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/SignatureHelpFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/SignatureHelpFacts.cs @@ -494,6 +494,62 @@ public Program(Program p) Assert.Equal(3, actual.Signatures.Count()); } + [Theory] + [InlineData("dummy.cs")] + [InlineData("dummy.csx")] + public async Task TestForImplicitCreationConstructorHelp(string filename) + { + const string source = +@"class Program +{ + public static void Main() + { + Program program = new($$) + } + public Program() + { + } + public Program(bool b) + { + } + public Program(Program p) + { + } +}"; + + var actual = await GetSignatureHelp(filename, source); + Assert.Equal(3, actual.Signatures.Count()); + } + + [Theory] + [InlineData("dummy.cs")] + [InlineData("dummy.csx")] + public async Task TestForImplicitCreationCtorWithOverloads(string filename) + { + const string source = +@"class Program +{ + public static void Main() + { + Program program = new(true, 12$$3) + } + public Program() + { + } + /// ctor2 + public Program(bool b, int n) + { + } + public Program(Program p, int n) + { + } +}"; + var actual = await GetSignatureHelp(filename, source); + Assert.Equal(3, actual.Signatures.Count()); + Assert.Equal(1, actual.ActiveParameter); + Assert.Contains("ctor2", actual.Signatures.ElementAt(actual.ActiveSignature).Documentation); + } + [Theory] [InlineData("dummy.cs")] [InlineData("dummy.csx")] @@ -606,7 +662,7 @@ void M1(int a) } }"; var actual = await GetSignatureHelp(filename, source); - Assert.Equal(2,actual.Signatures.Count()); + Assert.Equal(2, actual.Signatures.Count()); } [Theory] @@ -706,7 +762,7 @@ public void M1(int a,int b,int c,int d) { } Assert.Equal(2, actual.Signatures.Count()); var signatures = actual.Signatures.OrderBy(sig => sig.Parameters.Count()); Assert.Single(signatures.ElementAt(0).Parameters); - Assert.Equal(3,signatures.ElementAt(1).Parameters.Count()); + Assert.Equal(3, signatures.ElementAt(1).Parameters.Count()); } [Theory]