forked from sethvs/sthArgumentCompleter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sthArgumentCompleterCompleters.ps1
68 lines (59 loc) · 2.26 KB
/
sthArgumentCompleterCompleters.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class sthArgumentCompleter : System.Management.Automation.IArgumentCompleter
{
[System.Collections.Generic.IEnumerable[System.Management.Automation.CompletionResult]] CompleteArgument(
[string] $commandName,
[string] $parameterName,
[string] $wordToComplete,
[System.Management.Automation.Language.CommandAst] $commandAst,
[System.Collections.IDictionary] $fakeBoundParameters
)
{
$result = New-Object -TypeName "System.Collections.Generic.List[System.Management.Automation.CompletionResult]"
$type = 'Custom'
if ($commandName.Contains('Native'))
{
$type = 'Native'
}
$argumentCompleters = inGetArgumentCompleter -Type $type
$values = @()
[System.Collections.Generic.List[String]]$valuesToExclude = $null
if ($commandParameterAst = $commandAst.Find({$args[0].GetType().Name -eq 'CommandParameterAst' -and $args[0].ParameterName -eq $parameterName}, $false))
{
$i = $commandAst.CommandElements.IndexOf($commandParameterAst)
$parameterValueAst = $commandAst.CommandElements[$i+1]
}
else
{
$parameterValueAst = $commandAst.CommandElements[1]
}
if ($parameterValueAst)
{
if ($parameterValueAst.GetType().Name -eq 'ArrayLiteralAst')
{
$values = $parameterValueAst.Elements
}
elseif ($parameterValueAst.GetType().Name -eq 'ErrorExpressionAst')
{
$values = $parameterValueAst.NestedAst
}
if ($values)
{
$valuesToExclude = $values |
Where-Object { $_.GetType().Name -eq 'StringConstantExpressionAst' } |
ForEach-Object { $_.SafeGetValue() }
if ($wordToComplete)
{
$valuesToExclude.Remove($wordToComplete) | Out-Null
}
}
}
foreach ($key in $argumentCompleters.Keys)
{
if ($key -like "$wordToComplete*" -and $key -notin $valuesToExclude)
{
$result.Add([System.Management.Automation.CompletionResult]::new($key))
}
}
return $result
}
}