mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Added -Module completion for Save-Help/Update-Help commands (#20678)
This commit is contained in:
@@ -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 = @'
|
||||
|
||||
Reference in New Issue
Block a user