Skip to content

Commit 3f31b04

Browse files
committed
Add dynamic parameters
1 parent 0b4a51a commit 3f31b04

File tree

4 files changed

+123
-0
lines changed

4 files changed

+123
-0
lines changed

src/code/ArchitectureCompleter.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) Thomas Nieto - All Rights Reserved
2+
// You may use, distribute and modify this code under the
3+
// terms of the MIT license.
4+
5+
using System.Collections;
6+
using System.Collections.Generic;
7+
using System.Management.Automation;
8+
using System.Management.Automation.Language;
9+
10+
namespace AnyPackage.Provider.DotNet
11+
{
12+
public sealed class ArchitectureCompleter : IArgumentCompleter
13+
{
14+
private static string[] architectures = new string[]
15+
{
16+
"android-arm64",
17+
"ios-arm64",
18+
"linux-arm",
19+
"linux-arm64",
20+
"linux-bionic-arm64",
21+
"linux-musl-arm64",
22+
"linux-musl-x64",
23+
"linux-x64",
24+
"osx-arm64",
25+
"osx-x64",
26+
"win-arm64",
27+
"win-x64",
28+
"win-x86"
29+
};
30+
31+
public IEnumerable<CompletionResult> CompleteArgument(string commandName,
32+
string parameterName,
33+
string wordToComplete,
34+
CommandAst commandAst,
35+
IDictionary fakeBoundParameters)
36+
{
37+
var wildcard = new WildcardPattern(wordToComplete + "*", WildcardOptions.IgnoreCase);
38+
39+
foreach (var arch in architectures)
40+
{
41+
if (wildcard.IsMatch(arch))
42+
{
43+
yield return new CompletionResult(arch, arch, CompletionResultType.ParameterValue, arch);
44+
}
45+
}
46+
}
47+
}
48+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) Thomas Nieto - All Rights Reserved
2+
// You may use, distribute and modify this code under the
3+
// terms of the MIT license.
4+
5+
using System.Management.Automation;
6+
7+
namespace AnyPackage.Provider.DotNet
8+
{
9+
public sealed class InstallPackageDynamicParameters
10+
{
11+
[Parameter]
12+
[ArgumentCompleter(typeof(ArchitectureCompleter))]
13+
[ValidateNotNullOrEmpty]
14+
public string Architecture { get; set; } = string.Empty;
15+
16+
[Parameter]
17+
[ValidateNotNullOrEmpty]
18+
public string Framework { get; set; } = string.Empty;
19+
}
20+
}

src/code/ToolProvider.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@ namespace AnyPackage.Provider.DotNet
1111
[PackageProvider(".NET Tool")]
1212
public class ToolProvider : PackageProvider, IFindPackage, IGetPackage, IInstallPackage, IUpdatePackage, IUninstallPackage
1313
{
14+
protected override object? GetDynamicParameters(string commandName)
15+
{
16+
switch (commandName)
17+
{
18+
case "Install-Package":
19+
return new InstallPackageDynamicParameters();
20+
21+
case "Update-Package":
22+
return new UpdatePackageDynamicParameters();
23+
24+
default:
25+
return null;
26+
}
27+
}
28+
1429
public void FindPackage(PackageRequest request)
1530
{
1631
if (request.Name == "*")
@@ -127,6 +142,21 @@ public void InstallPackage(PackageRequest request)
127142
args += " --prerelease";
128143
}
129144

145+
if (request.DynamicParameters is not null)
146+
{
147+
var dynamicParameters = request.DynamicParameters as InstallPackageDynamicParameters;
148+
149+
if (dynamicParameters is not null && dynamicParameters.Architecture != "")
150+
{
151+
args += $" --arch {dynamicParameters.Architecture}";
152+
}
153+
154+
if (dynamicParameters is not null && dynamicParameters.Framework != "")
155+
{
156+
args += $" --framework {dynamicParameters.Framework}";
157+
}
158+
}
159+
130160
InvokeDotNet(request, args);
131161
}
132162

@@ -151,6 +181,16 @@ public void UpdatePackage(PackageRequest request)
151181
args += " --prerelease";
152182
}
153183

184+
if (request.DynamicParameters is not null)
185+
{
186+
var dynamicParameters = request.DynamicParameters as UpdatePackageDynamicParameters;
187+
188+
if (dynamicParameters is not null && dynamicParameters.Framework != "")
189+
{
190+
args += $" --framework {dynamicParameters.Framework}";
191+
}
192+
}
193+
154194
InvokeDotNet(request, args);
155195
}
156196

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright (c) Thomas Nieto - All Rights Reserved
2+
// You may use, distribute and modify this code under the
3+
// terms of the MIT license.
4+
5+
using System.Management.Automation;
6+
7+
namespace AnyPackage.Provider.DotNet
8+
{
9+
public sealed class UpdatePackageDynamicParameters
10+
{
11+
[Parameter]
12+
[ValidateNotNullOrEmpty]
13+
public string Framework { get; set; } = string.Empty;
14+
}
15+
}

0 commit comments

Comments
 (0)