Skip to content

Commit e26d708

Browse files
authored
Improve completion of parameters for attributes (#14525)
1 parent 63fc601 commit e26d708

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

src/System.Management.Automation/engine/CommandCompletion/CompletionAnalysis.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,12 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
526526

527527
result = CompletionCompleters.CompleteCommandArgument(completionContext);
528528
}
529+
else if (lastAst is AttributeAst)
530+
{
531+
completionContext.ReplacementIndex = replacementIndex += tokenAtCursor.Text.Length;
532+
completionContext.ReplacementLength = replacementLength = 0;
533+
result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
534+
}
529535
else
530536
{
531537
//
@@ -820,6 +826,7 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
820826
case TokenKind.Equals:
821827
case TokenKind.Comma:
822828
case TokenKind.AtParen:
829+
case TokenKind.LParen:
823830
{
824831
if (lastAst is AssignmentStatementAst assignmentAst)
825832
{
@@ -829,25 +836,18 @@ internal List<CompletionResult> GetResultHelper(CompletionContext completionCont
829836
break;
830837
}
831838
}
839+
840+
if (lastAst is AttributeAst)
841+
{
842+
completionContext.ReplacementLength = replacementLength = 0;
843+
result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
844+
break;
845+
}
832846

833847
bool unused;
834848
result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty, ref replacementIndex, ref replacementLength, out unused);
835849
break;
836850
}
837-
case TokenKind.LParen:
838-
if (lastAst is AttributeAst)
839-
{
840-
completionContext.ReplacementLength = replacementLength = 0;
841-
result = GetResultForAttributeArgument(completionContext, ref replacementIndex, ref replacementLength);
842-
}
843-
else
844-
{
845-
bool unused;
846-
result = GetResultForEnumPropertyValueOfDSCResource(completionContext, string.Empty,
847-
ref replacementIndex, ref replacementLength, out unused);
848-
}
849-
850-
break;
851851
default:
852852
break;
853853
}

test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,13 @@ Describe "TabCompletion" -Tags CI {
915915
$entry = $res.CompletionMatches | Where-Object CompletionText -EQ "Position"
916916
$entry.CompletionText | Should -BeExactly "Position"
917917
}
918+
It "Test Attribute member completion multiple members" {
919+
$inputStr = "function bar { [parameter(Position,]param() }"
920+
$res = TabExpansion2 -inputScript $inputStr -cursorColumn ($inputStr.IndexOf(',') + 1)
921+
$res.CompletionMatches | Should -HaveCount 10
922+
$entry = $res.CompletionMatches | Where-Object CompletionText -EQ "Mandatory"
923+
$entry.CompletionText | Should -BeExactly "Mandatory"
924+
}
918925

919926
It "Test completion with line continuation" {
920927
$inputStr = @'

0 commit comments

Comments
 (0)