| File: Commands\NewCommand.cs | Web Access |
| Project: src\sdk\src\Cli\Microsoft.TemplateEngine.Cli\Microsoft.TemplateEngine.Cli.csproj (Microsoft.TemplateEngine.Cli) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.CommandLine; using System.CommandLine.Completions; using Microsoft.DotNet.Cli.Commands.New; using Microsoft.DotNet.Cli.Help; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Edge.Settings; namespace Microsoft.TemplateEngine.Cli.Commands { internal partial class NewCommand(Func<ParseResult, ITemplateEngineHost> hostBuilder, NewCommandDefinition definition) : BaseCommand<NewCommandArgs, NewCommandDefinition>(hostBuilder, definition), ICustomHelp { protected internal override IEnumerable<CompletionItem> GetCompletions(CompletionContext context, IEngineEnvironmentSettings environmentSettings, TemplatePackageManager templatePackageManager) { if (context is not TextCompletionContext textCompletionContext) { foreach (CompletionItem completion in base.GetCompletions(context, environmentSettings, templatePackageManager)) { yield return completion; } yield break; } InstantiateCommandArgs instantiateCommandArgs = InstantiateCommandArgs.FromNewCommandArgs(ParseContext(context.ParseResult)); HostSpecificDataLoader? hostSpecificDataLoader = new(environmentSettings); //TODO: consider new API to get templates only from cache (non async) IReadOnlyList<ITemplateInfo> templates = Task.Run(async () => await templatePackageManager.GetTemplatesAsync(default).ConfigureAwait(false)).GetAwaiter().GetResult(); IEnumerable<TemplateGroup> templateGroups = TemplateGroup.FromTemplateList(CliTemplateInfo.FromTemplateInfo(templates, hostSpecificDataLoader)); if (templateGroups.Any(template => template.ShortNames.Contains(instantiateCommandArgs.ShortName))) { foreach (CompletionItem completion in InstantiateCommand.GetTemplateCompletions(instantiateCommandArgs, templateGroups, environmentSettings, templatePackageManager, textCompletionContext)) { yield return completion; } yield break; } foreach (CompletionItem completion in InstantiateCommand.GetTemplateNameCompletions(instantiateCommandArgs.ShortName, templateGroups, environmentSettings)) { yield return completion; } foreach (CompletionItem completion in base.GetCompletions(context, environmentSettings, templatePackageManager)) { yield return completion; } } protected override Task<NewCommandStatus> ExecuteAsync( NewCommandArgs args, IEngineEnvironmentSettings environmentSettings, TemplatePackageManager templatePackageManager, ParseResult parseResult, CancellationToken cancellationToken) { return InstantiateCommand.ExecuteAsync(args, environmentSettings, templatePackageManager, parseResult, cancellationToken); } protected override NewCommandArgs ParseContext(ParseResult parseResult) => new(this, parseResult); } }