Prerequisites
Summary
I put [ArgumentCompleter([MyType])] on a [string] parameter. Code is trying to treat the attribute as the type. Types don't have parantheses. But otherwise, the syntax for an attribute reference is similar to how you reference a type. Though, in this case, an attribute type reference would be [ArgumentCompleterAttribute]. I tried it with both a class passed to the attribute and a script block. Same results both times.
On a related note, when I try to run my script outside Code in Windows Terminal, PS 7.3.4 ignores the same [ArgumentCompleter()] attribute references. It acts as those attributes aren't there at all.
PowerShell Version
PS C:\Users\willp> $PSVersionTable
Name Value
---- -----
PSVersion 7.3.4
PSEdition Core
GitCommitId 7.3.4
OS Microsoft Windows 10.0.22621
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Visual Studio Code Version
Version: 1.78.2 (system setup)
Commit: b3e4e68a0bc097f0ae7907b217c1119af9e03435
Date: 2023-05-10T14:39:26.248Z
Electron: 22.5.2
Chromium: 108.0.5359.215
Node.js: 16.17.1
V8: 10.8.168.25-electron.0
OS: Windows_NT x64 10.0.22621
Sandboxed: No
Extension Version
Name: PowerShell
Id: ms-vscode.powershell
Description: Develop PowerShell modules, commands and scripts in Visual Studio Code!
Version: 2023.5.0
Publisher: Microsoft
VS Marketplace Link: https://un5ycay0g6kvwu1qda8b8v9c7q1vtaan90.julianrbryant.com/items?itemName=ms-vscode.PowerShell
Steps to Reproduce
I wrote the argument completer class shown below.
class TimeZoneCompleter : Management.Automation.IArgumentCompleter
{
[Collections.Generic.IEnumerable[Management.Automation.CompletionResult]] CompleteArgument([string] $strCmdName, [string] $strParamName, [string] $strWordToComplete, [Management.Automation.Language.CommandAst] $cmdAst, [Collections.IDictionary]$mapFakeBoundParameters)
{
[Management.Automation.CompletionResult[]]$result = [Management.Automation.CompletionResult[]]@();
([TimeZoneInfo]::GetSystemTimeZones() + $global:mapCommonTimeZones.Values) | Where-Object { $_.Id -like "$strWordToComplete*" -or $_.DisplayName -like "$strWordToComplete*" -or $_.DaylightName -like "$strWordToComplete*" -or $_.StandardName -like "$strWordToComplete*" } | ForEach-Object { $result += [Management.Automation.CompletionResult]::New("'$($_.Id)'", $_.Id, [Management.Automation.CompletionResultType]::ParameterValue, $_.DisplayName) };
return $result;
}
}
I then applied that attribute to my method's parameter. (Simplified version of the method shown below.)
function x
{
param
(
[ArgumentCompleter([TimeZoneCompleter])
[TimeZoneInfo]
$timezone
)
}
Visuals
This screenshot shows how such code is rendered. Notice how the ArgumentCompleter attribute is in blue. It should be in a brown.

Logs
No response
Prerequisites
Summary
I put
[ArgumentCompleter([MyType])]on a[string]parameter. Code is trying to treat the attribute as the type. Types don't have parantheses. But otherwise, the syntax for an attribute reference is similar to how you reference a type. Though, in this case, an attribute type reference would be[ArgumentCompleterAttribute]. I tried it with both a class passed to the attribute and a script block. Same results both times.On a related note, when I try to run my script outside Code in Windows Terminal, PS 7.3.4 ignores the same
[ArgumentCompleter()]attribute references. It acts as those attributes aren't there at all.PowerShell Version
Visual Studio Code Version
Extension Version
Steps to Reproduce
I wrote the argument completer class shown below.
I then applied that attribute to my method's parameter. (Simplified version of the method shown below.)
Visuals
This screenshot shows how such code is rendered. Notice how the

ArgumentCompleterattribute is in blue. It should be in a brown.Logs
No response