From 81b92583e12d64d97855457a11e970b02dd9f617 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Fri, 8 Jul 2016 14:15:14 -0700 Subject: [PATCH] Fix #682 - [system.manage] doesn't work --- .../CommandCompletion/CompletionCompleters.cs | 23 ++++++++++++++----- .../Host/TabCompletion/BugFix.Tests.ps1 | 9 ++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 test/powershell/Host/TabCompletion/BugFix.Tests.ps1 diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs index 4200b1055..8c3eb882b 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs @@ -5907,21 +5907,32 @@ namespace System.Management.Automation /// The namespace private static void HandleNamespace(Dictionary entryCache, string @namespace) { - if (!string.IsNullOrEmpty(@namespace)) + if (string.IsNullOrEmpty(@namespace)) { + return; + } + + int dotIndex = 0; + while (dotIndex != -1) + { + dotIndex = @namespace.IndexOf('.', dotIndex + 1); + string subNamespace = dotIndex != -1 + ? @namespace.Substring(0, dotIndex) + : @namespace; + TypeCompletionMapping entry; - if (!entryCache.TryGetValue(@namespace, out entry)) + if (!entryCache.TryGetValue(subNamespace, out entry)) { entry = new TypeCompletionMapping { - Key = @namespace, - Completions = { new NamespaceCompletion { Namespace = @namespace } } + Key = subNamespace, + Completions = { new NamespaceCompletion { Namespace = subNamespace } } }; - entryCache.Add(@namespace, entry); + entryCache.Add(subNamespace, entry); } else if (!entry.Completions.OfType().Any()) { - entry.Completions.Add(new NamespaceCompletion { Namespace = @namespace }); + entry.Completions.Add(new NamespaceCompletion { Namespace = subNamespace }); } } } diff --git a/test/powershell/Host/TabCompletion/BugFix.Tests.ps1 b/test/powershell/Host/TabCompletion/BugFix.Tests.ps1 new file mode 100644 index 000000000..18a64f782 --- /dev/null +++ b/test/powershell/Host/TabCompletion/BugFix.Tests.ps1 @@ -0,0 +1,9 @@ +Describe "Issue#682 - [system.manage] should work" { + + It "[system.manage" { + $result = TabExpansion2 -inputScript "[system.manage" -cursorColumn "[system.manage".Length + $result | Should Not BeNullOrEmpty + $result.CompletionMatches.Count | Should Be 1 + $result.CompletionMatches[0].CompletionText | Should Be "System.Management" + } +}