Skip to content

Commit 1a2426b

Browse files
committed
add activities for some template creation pathways
1 parent 74ee5e8 commit 1a2426b

File tree

5 files changed

+35
-28
lines changed

5 files changed

+35
-28
lines changed

.editorconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,10 @@ dotnet_diagnostic.IDE0200.severity = none
280280
dotnet_diagnostic.IDE0240.severity = warning
281281

282282
# Additional rules for template engine source code
283+
284+
# Default severity for analyzer diagnostics with category 'StyleCop.CSharp.SpacingRules'
285+
dotnet_analyzer_diagnostic.category-StyleCop.CSharp.SpacingRules.severity = none
286+
283287
[{src,test}/**{Microsoft.TemplateEngine.*,dotnet-new?*}/**.cs]
284288
# Default analyzed API surface = 'public' (public APIs)
285289
dotnet_code_quality.api_surface = public

src/Cli/Microsoft.TemplateEngine.Cli/Commands/create/InstantiateCommand.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ internal InstantiateCommand(
5151
Arity = new ArgumentArity(0, 999)
5252
};
5353

54-
internal IReadOnlyList<Option> PassByOptions { get; } = new Option[]
55-
{
54+
internal IReadOnlyList<Option> PassByOptions { get; } =
55+
[
5656
SharedOptions.ForceOption,
5757
SharedOptions.NameOption,
5858
SharedOptions.DryRunOption,
5959
SharedOptions.NoUpdateCheckOption
60-
};
60+
];
6161

6262
internal static Task<NewCommandStatus> ExecuteAsync(
6363
NewCommandArgs newCommandArgs,
@@ -74,6 +74,7 @@ internal static async Task<IEnumerable<TemplateGroup>> GetTemplateGroupsAsync(
7474
HostSpecificDataLoader hostSpecificDataLoader,
7575
CancellationToken cancellationToken)
7676
{
77+
using var createTemplateGroupsActivity = Activities.Source.StartActivity("create-template-groups");
7778
IReadOnlyList<ITemplateInfo> templates = await templatePackageManager.GetTemplatesAsync(cancellationToken).ConfigureAwait(false);
7879
return TemplateGroup.FromTemplateList(CliTemplateInfo.FromTemplateInfo(templates, hostSpecificDataLoader));
7980
}
@@ -84,6 +85,7 @@ internal static HashSet<TemplateCommand> GetTemplateCommand(
8485
TemplatePackageManager templatePackageManager,
8586
TemplateGroup templateGroup)
8687
{
88+
using var getTemplateActivity = Activities.Source.StartActivity("get-template-command");
8789
//groups templates in the group by precedence
8890
foreach (IGrouping<int, CliTemplateInfo> templateGrouping in templateGroup.Templates.GroupBy(g => g.Precedence).OrderByDescending(g => g.Key))
8991
{
@@ -114,7 +116,7 @@ internal static HashSet<TemplateCommand> GetTemplateCommand(
114116
templateGroup,
115117
candidates);
116118
}
117-
return new HashSet<TemplateCommand>();
119+
return [];
118120
}
119121

120122
internal static void HandleNoMatchingTemplateGroup(InstantiateCommandArgs instantiateArgs, IEnumerable<TemplateGroup> templateGroups, IReporter reporter)
@@ -204,6 +206,8 @@ private static async Task<NewCommandStatus> ExecuteIntAsync(
204206

205207
return await templateListCoordinator.DisplayCommandDescriptionAsync(instantiateArgs, cancellationToken).ConfigureAwait(false);
206208
}
209+
using var createActivity = Activities.Source.StartActivity("instantiate-command");
210+
createActivity?.DisplayName = $"Invoke '{instantiateArgs.ShortName}'";
207211

208212
IEnumerable<TemplateGroup> allTemplateGroups = await GetTemplateGroupsAsync(
209213
templatePackageManager,
@@ -273,10 +277,11 @@ private static async Task<NewCommandStatus> HandleTemplateInstantiationAsync(
273277
{
274278
TemplateCommand templateCommandToRun = candidates.Single();
275279
args.Command.Subcommands.Add(templateCommandToRun);
276-
280+
var templateParseActivity = Activities.Source.StartActivity("reparse-for-template");
277281
ParseResult updatedParseResult = args.ParseResult.RootCommandResult.Command.Parse(
278282
args.ParseResult.Tokens.Select(t => t.Value).ToArray(),
279283
args.ParseResult.Configuration);
284+
templateParseActivity?.Stop();
280285
return await candidates.Single().InvokeAsync(updatedParseResult, cancellationToken).ConfigureAwait(false);
281286
}
282287
else if (candidates.Any())

src/Cli/Microsoft.TemplateEngine.Cli/Commands/create/TemplateCommand.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Microsoft.TemplateEngine.Cli.Commands
1717
internal class TemplateCommand : Command
1818
{
1919
private static readonly TimeSpan ConstraintEvaluationTimeout = TimeSpan.FromMilliseconds(1000);
20-
private static readonly string[] _helpAliases = new[] { "-h", "/h", "--help", "-?", "/?" };
20+
private static readonly string[] _helpAliases = ["-h", "/h", "--help", "-?", "/?"];
2121
private readonly TemplatePackageManager _templatePackageManager;
2222
private readonly IEngineEnvironmentSettings _environmentSettings;
2323
private readonly BaseCommand _instantiateCommand;
@@ -146,19 +146,23 @@ internal static async Task<IReadOnlyList<TemplateConstraintResult>> ValidateCons
146146

147147
internal async Task<NewCommandStatus> InvokeAsync(ParseResult parseResult, CancellationToken cancellationToken)
148148
{
149+
using var templateInvocationActivity = Activities.Source.StartActivity("invoke-template");
149150
TemplateCommandArgs args = new(this, _instantiateCommand, parseResult);
150151
TemplateInvoker invoker = new(_environmentSettings, () => Console.ReadLine() ?? string.Empty);
151152
TemplatePackageCoordinator packageCoordinator = new(_environmentSettings, _templatePackageManager);
152-
TemplateConstraintManager constraintManager = new(_environmentSettings);
153+
using TemplateConstraintManager constraintManager = new(_environmentSettings);
153154
TemplatePackageDisplay templatePackageDisplay = new(Reporter.Output, Reporter.Error);
154155

155156
CancellationTokenSource cancellationTokenSource = new();
156157
cancellationTokenSource.CancelAfter(ConstraintEvaluationTimeout);
157158

159+
#pragma warning disable CA2025 // Do not pass 'IDisposable' instances into unawaited tasks
158160
Task<IReadOnlyList<TemplateConstraintResult>> constraintsEvaluation = ValidateConstraintsAsync(constraintManager, args.Template, args.IsForceFlagSpecified ? cancellationTokenSource.Token : cancellationToken);
161+
#pragma warning restore CA2025 // Do not pass 'IDisposable' instances into unawaited tasks
159162

160163
if (!args.IsForceFlagSpecified)
161164
{
165+
using var constraintResultsActivity = Activities.Source.StartActivity("validate-constraints");
162166
var constraintResults = await constraintsEvaluation.ConfigureAwait(false);
163167
if (constraintResults.Any())
164168
{
@@ -173,7 +177,7 @@ internal async Task<NewCommandStatus> InvokeAsync(ParseResult parseResult, Cance
173177
Task<(string Id, string Version, string Provider)> builtInPackageCheck = packageCoordinator.ValidateBuiltInPackageAvailabilityAsync(args.Template, cancellationToken);
174178
Task<CheckUpdateResult?> checkForUpdateTask = packageCoordinator.CheckUpdateForTemplate(args, cancellationToken);
175179

176-
Task[] tasksToWait = new Task[] { instantiateTask, builtInPackageCheck, checkForUpdateTask };
180+
Task[] tasksToWait = [instantiateTask, builtInPackageCheck, checkForUpdateTask];
177181

178182
await Task.WhenAll(tasksToWait).ConfigureAwait(false);
179183
Reporter.Output.WriteLine();

src/Cli/Microsoft.TemplateEngine.Cli/TemplateInvoker.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal TemplateInvoker(
3737

3838
internal async Task<NewCommandStatus> InvokeTemplateAsync(TemplateCommandArgs templateArgs, CancellationToken cancellationToken)
3939
{
40+
using var invokerActivity = Activities.Source.StartActivity("invoker-invoking");
4041
cancellationToken.ThrowIfCancellationRequested();
4142

4243
CliTemplateInfo templateToRun = templateArgs.Template;
@@ -158,6 +159,7 @@ private async Task<NewCommandStatus> CreateTemplateAsync(TemplateCommandArgs tem
158159

159160
try
160161
{
162+
using var templateCreationActivity = Activities.Source.StartActivity("actual-instantiate-template");
161163
instantiateResult = await _templateCreator.InstantiateAsync(
162164
templateArgs.Template,
163165
templateArgs.Name,
@@ -306,6 +308,7 @@ private async Task<NewCommandStatus> CreateTemplateAsync(TemplateCommandArgs tem
306308

307309
private NewCommandStatus HandlePostActions(ITemplateCreationResult creationResult, TemplateCommandArgs args)
308310
{
311+
using var postActionActivity = Activities.Source.StartActivity("post-actions");
309312
PostActionExecutionStatus result = _postActionDispatcher.Process(creationResult, args.IsDryRun, args.AllowScripts ?? AllowRunScripts.Prompt);
310313

311314
return result switch

src/Cli/Microsoft.TemplateEngine.Cli/TemplateListCoordinator.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ internal TemplateListCoordinator(
2424
IEngineEnvironmentSettings engineEnvironmentSettings,
2525
TemplatePackageManager templatePackageManager,
2626
IHostSpecificDataLoader hostSpecificDataLoader)
27-
2827
{
2928
_engineEnvironmentSettings = engineEnvironmentSettings ?? throw new ArgumentNullException(nameof(engineEnvironmentSettings));
3029
_templatePackageManager = templatePackageManager ?? throw new ArgumentNullException(nameof(templatePackageManager));
3130
_hostSpecificDataLoader = hostSpecificDataLoader ?? throw new ArgumentNullException(nameof(hostSpecificDataLoader));
3231
_defaultLanguage = engineEnvironmentSettings.GetDefaultLanguage();
32+
using var constraintManagerActivity = Activities.Source.StartActivity("create-constraints");
3333
_constraintManager = new TemplateConstraintManager(_engineEnvironmentSettings);
3434
}
3535

@@ -48,7 +48,6 @@ internal async Task<NewCommandStatus> DisplayTemplateGroupListAsync(
4848
ListTemplateResolver resolver = new(_constraintManager, _templatePackageManager, _hostSpecificDataLoader);
4949
TemplateResolutionResult resolutionResult = await resolver.ResolveTemplatesAsync(args, _defaultLanguage, cancellationToken).ConfigureAwait(false);
5050

51-
//IReadOnlyDictionary<string, string?>? appliedParameterMatches = resolutionResult.GetAllMatchedParametersList();
5251
if (resolutionResult.TemplateGroupsWithMatchingTemplateInfoAndParameters.Any())
5352
{
5453
Reporter.Output.WriteLine(LocalizableStrings.TemplatesFoundMatchingInputParameters, GetInputParametersString(args));
@@ -66,10 +65,10 @@ internal async Task<NewCommandStatus> DisplayTemplateGroupListAsync(
6665
}
6766
else
6867
{
69-
//if there is no criteria and filters it means that dotnet new list was run but there is no templates installed.
68+
// If there is no criteria and filters, it means that dotnet new list was run but there are no templates installed.
7069
if (args.ListNameCriteria == null && !args.AppliedFilters.Any())
7170
{
72-
//No templates installed.
71+
// No templates installed.
7372
Reporter.Output.WriteLine(LocalizableStrings.NoTemplatesFound);
7473
Reporter.Output.WriteLine();
7574
// To search for the templates on NuGet.org, run:
@@ -83,7 +82,7 @@ internal async Task<NewCommandStatus> DisplayTemplateGroupListAsync(
8382
return NewCommandStatus.Success;
8483
}
8584

86-
// at least one criteria was specified.
85+
// At least one criteria was specified.
8786
// No templates found matching the following input parameter(s): {0}.
8887
Reporter.Error.WriteLine(
8988
string.Format(
@@ -195,33 +194,30 @@ internal async Task<NewCommandStatus> DisplayCommandDescriptionAsync(
195194
return NewCommandStatus.Success;
196195
}
197196

198-
private static string GetInputParametersString(ListCommandArgs args/*, IReadOnlyDictionary<string, string?>? templateParameters = null*/)
197+
private static string GetInputParametersString(ListCommandArgs args)
199198
{
200199
string separator = ", ";
201200
IEnumerable<string> appliedFilters = args.AppliedFilters
202201
.Select(filter => $"{args.GetFilterToken(filter)}='{args.GetFilterValue(filter)}'");
203202

204-
//IEnumerable<string> appliedTemplateParameters = templateParameters?
205-
// .Select(param => string.IsNullOrWhiteSpace(param.Value) ? param.Key : $"{param.Key}='{param.Value}'") ?? Array.Empty<string>();
206-
207203
StringBuilder inputParameters = new();
208204
string? mainCriteria = args.ListNameCriteria;
209205
if (!string.IsNullOrWhiteSpace(mainCriteria))
210206
{
211207
inputParameters.Append($"'{mainCriteria}'");
212-
if (appliedFilters.Any()/* || appliedTemplateParameters.Any()*/)
208+
if (appliedFilters.Any())
213209
{
214210
inputParameters.Append(separator);
215211
}
216212
}
217-
if (appliedFilters/*.Concat(appliedTemplateParameters)*/.Any())
213+
if (appliedFilters.Any())
218214
{
219-
inputParameters.Append(string.Join(separator, appliedFilters/*.Concat(appliedTemplateParameters)*/));
215+
inputParameters.Append(string.Join(separator, appliedFilters));
220216
}
221217
return inputParameters.ToString();
222218
}
223219

224-
private static string GetPartialMatchReason(TemplateResolutionResult templateResolutionResult, ListCommandArgs args/*, IReadOnlyDictionary<string, string?>? templateParameters = null*/)
220+
private static string GetPartialMatchReason(TemplateResolutionResult templateResolutionResult, ListCommandArgs args)
225221
{
226222
string separator = ", ";
227223

@@ -230,15 +226,10 @@ private static string GetPartialMatchReason(TemplateResolutionResult templateRes
230226
.Where(filter => filter.MismatchCriteria(templateResolutionResult))
231227
.Select(filter => $"{args.GetFilterToken(filter)}='{args.GetFilterValue(filter)}'");
232228

233-
//IEnumerable<string> appliedTemplateParameters = templateParameters?
234-
// .Where(parameter =>
235-
// templateResolutionResult.IsParameterMismatchReason(parameter.Key))
236-
// .Select(param => string.IsNullOrWhiteSpace(param.Value) ? param.Key : $"{param.Key}='{param.Value}'") ?? Array.Empty<string>();
237-
238229
StringBuilder inputParameters = new();
239-
if (appliedFilters/*.Concat(appliedTemplateParameters)*/.Any())
230+
if (appliedFilters.Any())
240231
{
241-
inputParameters.Append(string.Join(separator, appliedFilters/*.Concat(appliedTemplateParameters)*/));
232+
inputParameters.Append(string.Join(separator, appliedFilters));
242233
}
243234
return inputParameters.ToString();
244235
}

0 commit comments

Comments
 (0)