Added -Module completion for Save-Help/Update-Help commands (#20678)

This commit is contained in:
Armaan Mcleod
2023-12-21 13:06:17 +05:00
committed by GitHub
parent 103c945c32
commit 1b98bb0815
2 changed files with 77 additions and 30 deletions
@@ -2185,6 +2185,22 @@ namespace System.Management.Automation
NativeCompletionGetHelpCommand(context, parameterName, /* isHelpRelated: */ true, result);
break;
}
case "Save-Help":
{
if (parameterName.Equals("Module", StringComparison.OrdinalIgnoreCase))
{
CompleteModule(context, result);
}
break;
}
case "Update-Help":
{
if (parameterName.Equals("Module", StringComparison.OrdinalIgnoreCase))
{
CompleteModule(context, result);
}
break;
}
case "Invoke-Expression":
{
if (parameterName.Equals("Command", StringComparison.OrdinalIgnoreCase))
@@ -3032,39 +3048,44 @@ namespace System.Management.Automation
}
else if (!string.IsNullOrEmpty(paramName) && paramName.Equals("Module", StringComparison.OrdinalIgnoreCase))
{
RemoveLastNullCompletionResult(result);
var modules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var moduleResults = CompleteModuleName(context, loadedModulesOnly: true);
if (moduleResults != null)
{
foreach (CompletionResult moduleResult in moduleResults)
{
if (!modules.Contains(moduleResult.ToolTip))
{
modules.Add(moduleResult.ToolTip);
result.Add(moduleResult);
}
}
}
moduleResults = CompleteModuleName(context, loadedModulesOnly: false);
if (moduleResults != null)
{
foreach (CompletionResult moduleResult in moduleResults)
{
if (!modules.Contains(moduleResult.ToolTip))
{
modules.Add(moduleResult.ToolTip);
result.Add(moduleResult);
}
}
}
result.Add(CompletionResult.Null);
CompleteModule(context, result);
}
}
private static void CompleteModule(CompletionContext context, List<CompletionResult> result)
{
RemoveLastNullCompletionResult(result);
var modules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var moduleResults = CompleteModuleName(context, loadedModulesOnly: true);
if (moduleResults != null)
{
foreach (CompletionResult moduleResult in moduleResults)
{
if (!modules.Contains(moduleResult.ToolTip))
{
modules.Add(moduleResult.ToolTip);
result.Add(moduleResult);
}
}
}
moduleResults = CompleteModuleName(context, loadedModulesOnly: false);
if (moduleResults != null)
{
foreach (CompletionResult moduleResult in moduleResults)
{
if (!modules.Contains(moduleResult.ToolTip))
{
modules.Add(moduleResult.ToolTip);
result.Add(moduleResult);
}
}
}
result.Add(CompletionResult.Null);
}
private static void NativeCompletionGetHelpCommand(CompletionContext context, string paramName, bool isHelpRelated, List<CompletionResult> result)
{
if (!string.IsNullOrEmpty(paramName) && paramName.Equals("Name", StringComparison.OrdinalIgnoreCase))
@@ -885,6 +885,32 @@ ConstructorTestClass(int i, bool b)
}
}
Context 'Help Module parameter completion' {
BeforeAll {
$utilityModule = 'Microsoft.PowerShell.Utility'
$managementModule = 'Microsoft.PowerShell.Management'
$allMicrosoftPowerShellModules = (Get-Module -Name Microsoft.PowerShell* -ListAvailable).Name
Import-Module -Name $allMicrosoftPowerShellModules -ErrorAction SilentlyContinue
$allMicrosoftPowerShellModules = ($allMicrosoftPowerShellModules | Sort-Object -Unique) -join ' '
}
It "Should complete Module for '<TextInput>'" -TestCases @(
@{ TextInput = "Save-Help -Module Microsoft.PowerShell.U"; ExpectedModules = $utilityModule }
@{ TextInput = "Update-Help -Module Microsoft.PowerShell.U"; ExpectedModules = $utilityModule }
@{ TextInput = "Save-Help -Module Microsoft.PowerShell.Man"; ExpectedModules = $managementModule }
@{ TextInput = "Update-Help -Module Microsoft.PowerShell.Man"; ExpectedModules = $managementModule }
@{ TextInput = "Save-Help -Module Microsoft.Powershell"; ExpectedModules = $allMicrosoftPowerShellModules }
@{ TextInput = "Update-Help -Module Microsoft.PowerShell"; ExpectedModules = $allMicrosoftPowerShellModules }
@{ TextInput = "Save-Help -Module NonExistentModulePrefix"; ExpectedModules = '' }
@{ TextInput = "Update-Help -Module NonExistentModulePrefix"; ExpectedModules = '' }
) {
param($TextInput, $ExpectedModules)
$res = TabExpansion2 -inputScript $TextInput -cursorColumn $TextInput.Length
$completionText = $res.CompletionMatches.CompletionText | Sort-Object -Unique
$completionText -join ' ' | Should -BeExactly $ExpectedModules
}
}
Context "Format cmdlet's View paramter completion" {
BeforeAll {
$viewDefinition = @'