Skip to content

Commit 424d73b

Browse files
committed
Make BuildCommandFromArguments reusable
1 parent ea69a99 commit 424d73b

File tree

2 files changed

+29
-30
lines changed

2 files changed

+29
-30
lines changed

src/PowerShellEditorServices/Services/DebugAdapter/Handlers/ConfigurationDoneHandler.cs

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@
1313
using OmniSharp.Extensions.DebugAdapter.Protocol.Events;
1414
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
1515
using OmniSharp.Extensions.DebugAdapter.Protocol.Server;
16-
using System.Collections.Generic;
1716
using System.Management.Automation;
1817
using System.Management.Automation.Language;
19-
using System.Text;
2018
using System.Threading;
2119
using System.Threading.Tasks;
2220

@@ -140,38 +138,13 @@ await _executionService
140138
{
141139
await _executionService
142140
.ExecutePSCommandAsync(
143-
BuildPSCommandFromArguments(scriptToLaunch, _debugStateService.Arguments),
141+
PSCommandHelpers.BuildCommandFromArguments(scriptToLaunch, _debugStateService.Arguments),
144142
CancellationToken.None,
145143
s_debuggerExecutionOptions)
146144
.ConfigureAwait(false);
147145
}
148146

149147
_debugAdapterServer.SendNotification(EventNames.Terminated);
150148
}
151-
152-
private static PSCommand BuildPSCommandFromArguments(string command, IReadOnlyList<string> arguments)
153-
{
154-
if (arguments is null or { Count: 0 })
155-
{
156-
return new PSCommand().AddCommand(command);
157-
}
158-
159-
// HACK: We use AddScript instead of AddArgument/AddParameter to reuse Powershell parameter binding logic.
160-
// We quote the command parameter so that expressions can still be used in the arguments.
161-
var sb = new StringBuilder()
162-
.Append('&')
163-
.Append('"')
164-
.Append(command)
165-
.Append('"');
166-
167-
foreach (string arg in arguments)
168-
{
169-
sb
170-
.Append(' ')
171-
.Append(ArgumentEscaping.Escape(arg));
172-
}
173-
174-
return new PSCommand().AddScript(sb.ToString());
175-
}
176149
}
177150
}

src/PowerShellEditorServices/Utility/PSCommandExtensions.cs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License.
33

44
using System;
5+
using System.Collections.Generic;
56
using System.IO;
67
using System.Linq.Expressions;
78
using System.Management.Automation;
@@ -11,11 +12,11 @@
1112

1213
namespace Microsoft.PowerShell.EditorServices.Utility
1314
{
14-
internal static class PSCommandExtensions
15+
internal static class PSCommandHelpers
1516
{
1617
private static readonly Func<CommandInfo, Command> s_commandCtor;
1718

18-
static PSCommandExtensions()
19+
static PSCommandHelpers()
1920
{
2021
var ctor = typeof(Command).GetConstructor(
2122
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,
@@ -119,5 +120,30 @@ private static StringBuilder AddCommandText(this StringBuilder sb, Command comma
119120

120121
return sb;
121122
}
123+
124+
public static PSCommand BuildCommandFromArguments(string command, IReadOnlyList<string> arguments)
125+
{
126+
if (arguments is null or { Count: 0 })
127+
{
128+
return new PSCommand().AddCommand(command);
129+
}
130+
131+
// HACK: We use AddScript instead of AddArgument/AddParameter to reuse Powershell parameter binding logic.
132+
// We quote the command parameter so that expressions can still be used in the arguments.
133+
var sb = new StringBuilder()
134+
.Append('&')
135+
.Append('"')
136+
.Append(command)
137+
.Append('"');
138+
139+
foreach (string arg in arguments)
140+
{
141+
sb
142+
.Append(' ')
143+
.Append(ArgumentEscaping.Escape(arg));
144+
}
145+
146+
return new PSCommand().AddScript(sb.ToString());
147+
}
122148
}
123149
}

0 commit comments

Comments
 (0)