Remove duplicate modules from completion results (#25538)

This commit is contained in:
MartinGC94
2025-05-12 08:18:11 +05:00
committed by GitHub
parent e42ce16574
commit e7ee9da1ea
2 changed files with 42 additions and 7 deletions
@@ -499,11 +499,16 @@ namespace System.Management.Automation
nestedModulesToFilterOut = new(currentModule.NestedModules);
}
var completedModules = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (PSObject item in psObjects)
{
var moduleInfo = (PSModuleInfo)item.BaseObject;
var completionText = moduleInfo.Name;
var listItemText = completionText;
if (!completedModules.Add(completionText))
{
continue;
}
if (shortNameSearch
&& completionText.Contains('.')
&& !shortNamePattern.IsMatch(completionText.Substring(completionText.LastIndexOf('.') + 1))
@@ -526,7 +531,7 @@ namespace System.Management.Automation
completionText = CompletionHelpers.QuoteCompletionText(completionText, quote);
result.Add(new CompletionResult(completionText, listItemText, CompletionResultType.ParameterValue, toolTip));
result.Add(new CompletionResult(completionText, listItemText: moduleInfo.Name, CompletionResultType.ParameterValue, toolTip));
}
}
@@ -36,13 +36,13 @@ Describe "TabCompletion" -Tags CI {
It 'Should not include duplicate command results' {
$OldModulePath = $env:PSModulePath
$tempDir = Join-Path -Path $TestDrive -ChildPath "TempPsModuleDir"
$ModuleDirs = @(
Join-Path $tempDir "TestModule1\1.0"
Join-Path $tempDir "TestModule1\1.1"
Join-Path $tempDir "TestModule2\1.0"
)
try
{
$ModuleDirs = @(
Join-Path $tempDir "TestModule1\1.0"
Join-Path $tempDir "TestModule1\1.1"
Join-Path $tempDir "TestModule2\1.0"
)
foreach ($Dir in $ModuleDirs)
{
$NewDir = New-Item -Path $Dir -ItemType Directory -Force
@@ -61,6 +61,36 @@ Describe "TabCompletion" -Tags CI {
finally
{
$env:PSModulePath = $OldModulePath
Remove-Item -LiteralPath $ModuleDirs -Recurse -Force
}
}
It 'Should not include duplicate module results' {
$OldModulePath = $env:PSModulePath
$tempDir = Join-Path -Path $TestDrive -ChildPath "TempPsModuleDir"
try
{
$ModuleDirs = @(
Join-Path $tempDir "TestModule1\1.0"
Join-Path $tempDir "TestModule1\1.1"
)
foreach ($Dir in $ModuleDirs)
{
$NewDir = New-Item -Path $Dir -ItemType Directory -Force
$ModuleName = $NewDir.Parent.Name
Set-Content -Value 'MyTestFunction{}' -LiteralPath "$($NewDir.FullName)\$ModuleName.psm1"
New-ModuleManifest -Path "$($NewDir.FullName)\$ModuleName.psd1" -RootModule "$ModuleName.psm1" -FunctionsToExport "MyTestFunction" -ModuleVersion $NewDir.Name
}
$env:PSModulePath += [System.IO.Path]::PathSeparator + $tempDir
$Res = TabExpansion2 -inputScript 'Import-Module -Name TestModule'
$Res.CompletionMatches.Count | Should -Be 1
$Res.CompletionMatches[0].CompletionText | Should -Be TestModule1
}
finally
{
$env:PSModulePath = $OldModulePath
Remove-Item -LiteralPath $ModuleDirs -Recurse -Force
}
}