Remove CompletionHelpers escape parameter from CompletionRequiresQuotes (#25178)

This commit is contained in:
Armaan Mcleod
2025-03-18 09:39:53 +05:00
committed by GitHub
parent ef64132f0a
commit 377f7e9867
2 changed files with 19 additions and 23 deletions
@@ -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 == "'")
@@ -14,8 +14,6 @@ namespace System.Management.Automation
{
private static readonly SearchValues<char> s_defaultCharsToCheck = SearchValues.Create("$`");
private static readonly SearchValues<char> s_escapeCharsToCheck = SearchValues.Create("$[]`");
/// <summary>
/// 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<char> text, bool escape)
=> text.ContainsAny(escape ? s_escapeCharsToCheck : s_defaultCharsToCheck);
private static bool ContainsCharsToCheck(ReadOnlySpan<char> text)
=> text.ContainsAny(s_defaultCharsToCheck);
}
}