From 2321324e41375fdca82e9723563063dfa6fd6187 Mon Sep 17 00:00:00 2001 From: MartinGC94 Date: Thu, 31 Dec 2020 20:45:16 +0100 Subject: [PATCH 1/3] Fix attribute parameter completion with more than 1 parameter --- .../CommandCompletion/CompletionAnalysis.cs | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs index 95b26ff6907..0e955516687 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs @@ -526,6 +526,12 @@ internal List GetResultHelper(CompletionContext completionCont result = CompletionCompleters.CompleteCommandArgument(completionContext); } + else if (lastAst is AttributeAst) + { + completionContext.ReplacementIndex = replacementIndex += tokenAtCursor.Text.Length; + completionContext.ReplacementLength = replacementLength = 0; + result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength); + } else { // @@ -820,6 +826,7 @@ internal List GetResultHelper(CompletionContext completionCont case TokenKind.Equals: case TokenKind.Comma: case TokenKind.AtParen: + case TokenKind.LParen: { if (lastAst is AssignmentStatementAst assignmentAst) { @@ -829,25 +836,17 @@ internal List GetResultHelper(CompletionContext completionCont break; } } + if (lastAst is AttributeAst) + { + completionContext.ReplacementLength = replacementLength = 0; + result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength); + break; + } bool unused; result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out unused); break; } - case TokenKind.LParen: - if (lastAst is AttributeAst) - { - completionContext.ReplacementLength = replacementLength = 0; - result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength); - } - else - { - bool unused; - result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, - ref replacementIndex, ref replacementLength, out unused); - } - - break; default: break; } From e69edc6cbbbb66e90bebdd44d385e0b978b2311c Mon Sep 17 00:00:00 2001 From: MartinGC94 <42123497+MartinGC94@users.noreply.github.com> Date: Thu, 31 Dec 2020 21:32:53 +0100 Subject: [PATCH 2/3] Add test for multiple attribute parameters. --- test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 b/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 index c42f30e510a..77667306aed 100644 --- a/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 +++ b/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 @@ -915,6 +915,13 @@ Describe "TabCompletion" -Tags CI { $entry = $res.CompletionMatches | Where-Object CompletionText -EQ "Position" $entry.CompletionText | Should -BeExactly "Position" } + It "Test Attribute member completion multiple members" { + $inputStr = "function bar { [parameter(Position,]param() }" + $res = TabExpansion2 -inputScript $inputStr -cursorColumn ($inputStr.IndexOf(',') + 1) + $res.CompletionMatches | Should -HaveCount 10 + $entry = $res.CompletionMatches | Where-Object CompletionText -EQ "Mandatory" + $entry.CompletionText | Should -BeExactly "Mandatory" + } It "Test completion with line continuation" { $inputStr = @' From 328ba08d56e178a6336fd193a8262ad127064740 Mon Sep 17 00:00:00 2001 From: Ilya Date: Thu, 14 Jan 2021 08:22:51 +0500 Subject: [PATCH 3/3] Update src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs Co-authored-by: Robert Holt --- .../engine/CommandCompletion/CompletionAnalysis.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs index 0e955516687..ee37554268a 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs @@ -836,6 +836,7 @@ internal List GetResultHelper(CompletionContext completionCont break; } } + if (lastAst is AttributeAst) { completionContext.ReplacementLength = replacementLength = 0;