diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs index e3ead4c357..2dd6807fa6 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionCompleters.cs @@ -234,7 +234,7 @@ namespace System.Management.Automation syntax = string.IsNullOrEmpty(syntax) ? name : syntax; bool needAmpersand; - if (CompletionHelpers.CompletionRequiresQuotes(name, false)) + if (CompletionHelpers.CompletionRequiresQuotes(name)) { needAmpersand = quote == string.Empty && addAmpersandIfNecessary; string quoteInUse = quote == string.Empty ? "'" : quote; @@ -524,7 +524,7 @@ namespace System.Management.Automation + moduleInfo.ModuleType.ToString() + "\r\nPath: " + moduleInfo.Path; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -1846,7 +1846,7 @@ namespace System.Management.Automation string completionText = entry; if (quote == string.Empty) { - if (CompletionHelpers.CompletionRequiresQuotes(entry, false)) + if (CompletionHelpers.CompletionRequiresQuotes(entry)) { realEntry = CodeGeneration.EscapeSingleQuotedStringContent(entry); completionText = "'" + realEntry + "'"; @@ -3220,7 +3220,7 @@ namespace System.Management.Automation var completionText = eventLog.Log.ToString(); var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3311,7 +3311,7 @@ namespace System.Management.Automation var completionText = psJob.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3386,7 +3386,7 @@ namespace System.Management.Automation var completionText = psJob.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3526,7 +3526,7 @@ namespace System.Management.Automation continue; uniqueSet.Add(completionText); - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3579,7 +3579,7 @@ namespace System.Management.Automation var completionText = providerInfo.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3627,7 +3627,7 @@ namespace System.Management.Automation var completionText = driveInfo.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3678,7 +3678,7 @@ namespace System.Management.Automation var completionText = serviceInfo.DisplayName; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3709,7 +3709,7 @@ namespace System.Management.Automation var completionText = serviceInfo.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3765,7 +3765,7 @@ namespace System.Management.Automation completionText = completionText.Replace("*", "`*"); } - if (!completionText.Equals("$", StringComparison.Ordinal) && CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (!completionText.Equals("$", StringComparison.Ordinal) && CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = effectiveQuote == string.Empty ? "'" : effectiveQuote; if (quoteInUse == "'") @@ -3815,7 +3815,7 @@ namespace System.Management.Automation var completionText = aliasInfo.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") @@ -3878,7 +3878,7 @@ namespace System.Management.Automation var completionText = trace.Name; var listItemText = completionText; - if (CompletionHelpers.CompletionRequiresQuotes(completionText, false)) + if (CompletionHelpers.CompletionRequiresQuotes(completionText)) { var quoteInUse = quote == string.Empty ? "'" : quote; if (quoteInUse == "'") diff --git a/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs b/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs index 88a272d695..02303956dc 100644 --- a/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs +++ b/src/System.Management.Automation/engine/CommandCompletion/CompletionHelpers.cs @@ -14,8 +14,6 @@ namespace System.Management.Automation { private static readonly SearchValues s_defaultCharsToCheck = SearchValues.Create("$`"); - private static readonly SearchValues s_escapeCharsToCheck = SearchValues.Create("$[]`"); - /// /// Get matching completions from word to complete. /// This makes it easier to handle different variations of completions with consideration of quotes. @@ -121,14 +119,12 @@ namespace System.Management.Automation return string.Empty; } - internal static bool CompletionRequiresQuotes(string completion, bool escape) + internal static bool CompletionRequiresQuotes(string completion) { // If the tokenizer sees the completion as more than two tokens, or if there is some error, then // some form of quoting is necessary (if it's a variable, we'd need ${}, filenames would need [], etc.) - Language.Token[] tokens; - ParseError[] errors; - Language.Parser.ParseInput(completion, out tokens, out errors); + Parser.ParseInput(completion, out Token[] tokens, out ParseError[] errors); // Expect no errors and 2 tokens (1 is for our completion, the other is eof) // Or if the completion is a keyword, we ignore the errors @@ -136,13 +132,13 @@ namespace System.Management.Automation if ((!requireQuote && tokens[0] is StringToken) || (tokens.Length == 2 && (tokens[0].TokenFlags & TokenFlags.Keyword) != 0)) { - requireQuote = ContainsCharsToCheck(tokens[0].Text, escape); + requireQuote = ContainsCharsToCheck(tokens[0].Text); } return requireQuote; } - private static bool ContainsCharsToCheck(ReadOnlySpan text, bool escape) - => text.ContainsAny(escape ? s_escapeCharsToCheck : s_defaultCharsToCheck); + private static bool ContainsCharsToCheck(ReadOnlySpan text) + => text.ContainsAny(s_defaultCharsToCheck); } }