Skip to content

Commit f77170f

Browse files
committed
simplified completer quote escaping
1 parent 8df0658 commit f77170f

File tree

6 files changed

+30
-18
lines changed

6 files changed

+30
-18
lines changed

src/Commands/Base/Completers/ContentTypeCompleter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ namespace PnP.PowerShell.Commands.Base.Completers
1111
{
1212
public sealed class ContentTypeCompleter : PnPArgumentCompleter
1313
{
14-
public override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar)
14+
protected override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
1515
{
1616
IEnumerable<ContentType> result = PnPConnection.Current.Context.LoadQuery(PnPConnection.Current.Context.Web.AvailableContentTypes.Include(f => f.Name));
1717
PnPConnection.Current.Context.ExecuteQueryRetry();
1818
foreach (var ct in result.Where(l => l.Name.StartsWith(wordToComplete, StringComparison.InvariantCultureIgnoreCase)))
1919
{
20-
yield return new CompletionResult($"{quoteChar}{ct.Name}{quoteChar}");
20+
yield return new CompletionResult(ct.Name);
2121
}
2222
}
2323
}

src/Commands/Base/Completers/FieldInternalNameCompleter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ namespace PnP.PowerShell.Commands.Base.Completers
1111
{
1212
public sealed class FieldInternalNameCompleter : PnPArgumentCompleter
1313
{
14-
public override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar)
14+
protected override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
1515
{
1616
IEnumerable<Field> result = PnPConnection.Current.Context.LoadQuery(PnPConnection.Current.Context.Web.AvailableFields.Include(f => f.InternalName));
1717
PnPConnection.Current.Context.ExecuteQueryRetry();
1818
foreach (var field in result.Where(l => l.InternalName.StartsWith(wordToComplete, StringComparison.InvariantCultureIgnoreCase)))
1919
{
20-
yield return new CompletionResult($"{quoteChar}{field.InternalName}{quoteChar}");
20+
yield return new CompletionResult(field.InternalName);
2121
}
2222
}
2323
}

src/Commands/Base/Completers/ListNameCompleter.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@ namespace PnP.PowerShell.Commands.Base.Completers
1010
{
1111
public sealed class ListNameCompleter : PnPArgumentCompleter
1212
{
13-
public override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar)
13+
protected override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
1414
{
1515
IEnumerable<List> result = PnPConnection.Current.Context.LoadQuery(PnPConnection.Current.Context.Web.Lists.Include(list => list.Title));
1616
PnPConnection.Current.Context.ExecuteQueryRetry();
1717
foreach (var list in result.Where(l => l.Title.StartsWith(wordToComplete, StringComparison.InvariantCultureIgnoreCase)))
1818
{
19-
var listTitle = list.Title;
20-
if(quoteChar == '"')
21-
{
22-
listTitle = list.Title.Replace("\"","`\"");
23-
}
24-
yield return new CompletionResult($"{quoteChar}{listTitle}{quoteChar}");
19+
yield return new CompletionResult(list.Title);
20+
2521
}
2622

2723
}

src/Commands/Base/Completers/PageCompleter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ namespace PnP.PowerShell.Commands.Base.Completers
1616
{
1717
public sealed class PageCompleter : PnPArgumentCompleter
1818
{
19-
public override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar)
19+
protected override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
2020
{
2121
List<CompletionResult> results = new List<CompletionResult>();
2222
wordToComplete = wordToComplete.Replace('\\', '/');
2323
var pages = PnPConnection.Current.PnPContext.Web.GetPages(wordToComplete.TrimStart('/'));
2424
foreach (var page in pages.OrderBy(p => p.Name))
2525
{
2626
var result = string.IsNullOrEmpty(page.Folder) ? page.Name : page.Folder + "/" + page.Name;
27-
results.Add(new CompletionResult($"{quoteChar}{result}{quoteChar}"));
27+
results.Add(new CompletionResult(result));
2828
}
2929
return results;
3030
}

src/Commands/Base/Completers/PnPArgumentCompleter.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,27 @@ public IEnumerable<CompletionResult> CompleteArgument(string commandName, string
1818
quoteChar = '\'';
1919
}
2020
wordToComplete = wordToComplete.Trim(['"', '\'']);
21-
var task = Task.Run(() => GetArguments(commandName, parameterName, wordToComplete, commandAst, fakeBoundParameters, quoteChar));
22-
return task.TimeoutAfter(TimeSpan.FromMilliseconds(GetTimeOut())).GetAwaiter().GetResult();
21+
var task = Task.Run(() => GetArguments(commandName, parameterName, wordToComplete, commandAst, fakeBoundParameters));
22+
23+
var results = task.TimeoutAfter(TimeSpan.FromMilliseconds(GetTimeOut())).GetAwaiter().GetResult();
24+
foreach(var result in results)
25+
{
26+
var completionText = result.CompletionText;
27+
if(quoteChar == '"')
28+
{
29+
completionText = completionText.Replace("\"","`\"");
30+
} else if(quoteChar == '\'')
31+
{
32+
completionText = completionText.Replace("'","`'");
33+
}
34+
yield return new CompletionResult($"{quoteChar}{completionText}{quoteChar}",result.ListItemText,result.ResultType,result.ToolTip);
35+
}
2336
}
2437

25-
public abstract IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar);
38+
protected virtual IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
39+
{
40+
return null;
41+
}
2642

2743
private Int32 GetTimeOut()
2844
{

src/Commands/Base/Completers/PropertyBagKeyCompleter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace PnP.PowerShell.Commands.Base.Completers
1212
{
1313
public sealed class PropertyBagKeyCompleter : PnPArgumentCompleter
1414
{
15-
public override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters, char quoteChar)
15+
protected override IEnumerable<CompletionResult> GetArguments(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
1616
{
1717
IEnumerable<string> keys = null;
1818
if (fakeBoundParameters["Folder"] == null)
@@ -36,7 +36,7 @@ public override IEnumerable<CompletionResult> GetArguments(string commandName, s
3636

3737
foreach (var key in keys.Where(k => k.StartsWith(wordToComplete, StringComparison.InvariantCultureIgnoreCase)))
3838
{
39-
yield return new CompletionResult($"{quoteChar}{key}{quoteChar}");
39+
yield return new CompletionResult(key);
4040
}
4141
}
4242
}

0 commit comments

Comments
 (0)