public static void ShowInvocationExamples(ListOrHelpTemplateListResolutionResult templateResolutionResult, IHostSpecificDataLoader hostDataLoader, string commandName) { const int ExamplesToShow = 2; IReadOnlyList <string> preferredNameList = new List <string>() { "mvc" }; int numShown = 0; IReadOnlyCollection <ITemplateMatchInfo> bestMatchedTemplates = templateResolutionResult.ExactMatchedTemplates; if (bestMatchedTemplates.Count == 0) { return; } IList <ITemplateInfo> templateList = bestMatchedTemplates.Select(x => x.Info).ToList(); Reporter.Output.WriteLine("Examples:"); HashSet <string> usedGroupIds = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (string preferredName in preferredNameList) { ITemplateInfo template = templateList.FirstOrDefault(x => string.Equals(x.ShortName, preferredName, StringComparison.OrdinalIgnoreCase)); if (template != null) { string identity = string.IsNullOrWhiteSpace(template.GroupIdentity) ? string.IsNullOrWhiteSpace(template.Identity) ? string.Empty : template.Identity : template.GroupIdentity; if (usedGroupIds.Add(identity)) { GenerateUsageForTemplate(template, hostDataLoader, commandName); numShown++; } } templateList.Remove(template); // remove it so it won't get chosen again } // show up to 2 examples (total, including the above) Random rnd = new Random(); for (int i = numShown; i < ExamplesToShow && templateList.Count > 0; i++) { int index = rnd.Next(0, templateList.Count - 1); ITemplateInfo template = templateList[index]; string identity = string.IsNullOrWhiteSpace(template.GroupIdentity) ? string.IsNullOrWhiteSpace(template.Identity) ? string.Empty : template.Identity : template.GroupIdentity; if (usedGroupIds.Add(identity) && !GenerateUsageForTemplate(template, hostDataLoader, commandName)) { --i; } templateList.Remove(template); // remove it so it won't get chosen again } // show a help example Reporter.Output.WriteLine($" dotnet {commandName} --help"); // show a help example for template Reporter.Output.WriteLine($" {HelpForTemplateResolution.GetTemplateHelpCommand(commandName, bestMatchedTemplates.First().Info)}"); }
public void TestGetTemplateResolutionResult_UniqueNameMatchesCorrectly() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new TemplateInfo() { ShortName = "console1", Name = "Long name for Console App", Identity = "Console.App", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>() }); templatesToSearch.Add(new TemplateInfo() { ShortName = "console2", Name = "Long name for Console App #2", Identity = "Console.App2", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>() }); INewCommandInput userInputs = new MockNewCommandInput() { TemplateName = "console2", IsListFlagSpecified = true }; ListOrHelpTemplateListResolutionResult matchResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal("console2", matchResult.UnambiguousTemplateGroup.Single().Info.ShortName); Assert.Equal("Console.App2", matchResult.UnambiguousTemplateGroup.Single().Info.Identity); Assert.Equal(1, matchResult.UnambiguousTemplateGroup.Count); }
public static CreationResultStatus CoordinateHelpAndUsageDisplay(ListOrHelpTemplateListResolutionResult templateResolutionResult, IEngineEnvironmentSettings environmentSettings, INewCommandInput commandInput, IHostSpecificDataLoader hostDataLoader, ITelemetryLogger telemetryLogger, TemplateCreator templateCreator, string defaultLanguage, bool showUsageHelp = true) { if (showUsageHelp) { ShowUsageHelp(commandInput, telemetryLogger); } //in case only --help option is specified we don't need to show templates list if (commandInput.IsHelpFlagSpecified && string.IsNullOrEmpty(commandInput.TemplateName)) { return(CreationResultStatus.Success); } // in case list is specified we always need to list templates if (commandInput.IsListFlagSpecified) { return(DisplayListOrHelpForAmbiguousTemplateGroup(templateResolutionResult, environmentSettings, commandInput, hostDataLoader, telemetryLogger, defaultLanguage)); } else // help flag specified or no flag specified { if (!string.IsNullOrEmpty(commandInput.TemplateName) && templateResolutionResult.HasUnambiguousTemplateGroup) { // This will show detailed help on the template group, which only makes sense if there is a single template group adn all templates are the same language. return(DisplayHelpForUnambiguousTemplateGroup(templateResolutionResult, environmentSettings, commandInput, hostDataLoader, templateCreator, telemetryLogger, defaultLanguage)); } else { return(DisplayListOrHelpForAmbiguousTemplateGroup(templateResolutionResult, environmentSettings, commandInput, hostDataLoader, telemetryLogger, defaultLanguage)); } } }
public async Task <CreationResultStatus> CoordinateInvocationOrAcquisitionAsync() { EnsureTemplateResolutionResult(); if (_templateToInvoke != null) { // invoke and then check for updates CreationResultStatus creationResult = await InvokeTemplateAsync(); // check for updates on this template (pack) await CheckForTemplateUpdateAsync(); return(creationResult); } else { // The command didn't resolve to an installed template. Search for something that does. bool anySearchMatches = await SearchForTemplateMatchesAsync(); if (!anySearchMatches) { ListOrHelpTemplateListResolutionResult listingTemplateListResolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateListResolutionResult, _environment, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, false)); } else { return(CreationResultStatus.Success); } } }
private static CreationResultStatus DisplayHelpForUnambiguousTemplateGroup(ListOrHelpTemplateListResolutionResult templateResolutionResult, IEngineEnvironmentSettings environmentSettings, INewCommandInput commandInput, IHostSpecificDataLoader hostDataLoader, TemplateCreator templateCreator, ITelemetryLogger telemetryLogger, string defaultLanguage) { // sanity check: should never happen; as condition for unambiguous template group is checked above if (!templateResolutionResult.UnambiguousTemplateGroup.Any()) { return(DisplayListOrHelpForAmbiguousTemplateGroup(templateResolutionResult, environmentSettings, commandInput, hostDataLoader, telemetryLogger, defaultLanguage)); } //if language is specified and all templates in unambigiuos group match the language show the help for that template if (templateResolutionResult.AllTemplatesInUnambiguousTemplateGroupAreSameLanguage) { IReadOnlyCollection <ITemplateMatchInfo> unambiguousTemplateGroupForDetailDisplay = templateResolutionResult.UnambiguousTemplateGroup; return(TemplateDetailedHelpForSingularTemplateGroup(unambiguousTemplateGroupForDetailDisplay, environmentSettings, commandInput, hostDataLoader, templateCreator)); } //if language is not specified and group has template that matches the language show the help for that the template that matches the language if (string.IsNullOrEmpty(commandInput.Language) && !string.IsNullOrEmpty(defaultLanguage) && templateResolutionResult.HasUnambiguousTemplateGroupForDefaultLanguage) { IReadOnlyCollection <ITemplateMatchInfo> unambiguousTemplateGroupForDetailDisplay = templateResolutionResult.UnambiguousTemplatesForDefaultLanguage; return(TemplateDetailedHelpForSingularTemplateGroup(unambiguousTemplateGroupForDetailDisplay, environmentSettings, commandInput, hostDataLoader, templateCreator)); } else { return(DisplayListOrHelpForAmbiguousTemplateGroup(templateResolutionResult, environmentSettings, commandInput, hostDataLoader, telemetryLogger, defaultLanguage)); } }
private static void ShowContextAndTemplateNameMismatchHelp(ListOrHelpTemplateListResolutionResult templateResolutionResult, string templateName, string templateLanguage, string context, string baselineName) { if (string.IsNullOrEmpty(templateName) && string.IsNullOrEmpty(templateLanguage) && string.IsNullOrEmpty(context) && string.IsNullOrEmpty(baselineName)) { return; } DisplayPartialNameMatchLanguageAndContextProblems(templateName, templateLanguage, context, templateResolutionResult, baselineName); }
private static string GetPartialMatchReason(ListOrHelpTemplateListResolutionResult templateResolutionResult, INewCommandInput commandInput) { string separator = ", "; return(string.Join(separator, SupportedFilterOptions.SupportedListFilters .OfType <TemplateFilterOption>() .Where(filter => filter.IsFilterSet(commandInput) && filter.MismatchCriteria(templateResolutionResult)) .Select(filter => $"{filter.Name}='{filter.FilterValue(commandInput)}'"))); }
public void TestGetTemplateResolutionResult_UnambiguousGroupIsFound() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.L1", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L1") } } }); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.L2", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L2") } } }); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.L3", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L3") } } }); INewCommandInput userInputs = new MockNewCommandInput() { TemplateName = "console", IsListFlagSpecified = true }; ListOrHelpTemplateListResolutionResult matchResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.Equal(1, matchResult.ExactMatchedTemplatesGrouped.Count); Assert.Equal(3, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal(3, matchResult.UnambiguousTemplateGroup.Count); }
private async Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { ListOrHelpTemplateListResolutionResult listingTemplateResolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified)); } TemplateListResolutionResult templateResolutionResult = TemplateListResolver.GetTemplateResolutionResult(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); TemplateInvocationAndAcquisitionCoordinator invocationCoordinator = new TemplateInvocationAndAcquisitionCoordinator(_settingsLoader, _commandInput, _templateCreator, _hostDataLoader, _telemetryLogger, _defaultLanguage, CommandName, _inputGetter, _callbacks); return(await invocationCoordinator.CoordinateInvocationOrAcquisitionAsync()); }
public void TestGetTemplateResolutionResult_MatchByTagsAndMismatchByFilter() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.T1", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Classifications = new List <string> { "Common", "Test" }, Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L1") }, { "type", ResolutionTestHelper.CreateTestCacheTag("project") } }, BaselineInfo = new Dictionary <string, IBaselineInfo>() { { "app", new BaselineInfo() }, { "standard", new BaselineInfo() } } }); INewCommandInput userInputs = new MockNewCommandInput() { TemplateName = "Common", IsListFlagSpecified = true, Language = "L2", TypeFilter = "item", }; ListOrHelpTemplateListResolutionResult matchResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.False(matchResult.HasExactMatches); Assert.Equal(0, matchResult.ExactMatchedTemplatesGrouped.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasPartialMatches); Assert.Equal(1, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(1, matchResult.PartiallyMatchedTemplatesGrouped.Count); Assert.True(matchResult.HasLanguageMismatch); Assert.True(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); }
public void TestGetTemplateResolutionResult_InputLanguageIsPreferredOverDefault() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.L1", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L1") } } }); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.L2", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Tags = new Dictionary <string, ICacheTag>(StringComparer.OrdinalIgnoreCase) { { "language", ResolutionTestHelper.CreateTestCacheTag("L2") } } }); INewCommandInput userInputs = new MockNewCommandInput() { TemplateName = "console", IsListFlagSpecified = true, Language = "L2" }; ListOrHelpTemplateListResolutionResult matchResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, "L1"); Assert.True(matchResult.HasExactMatches); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal("console", matchResult.UnambiguousTemplateGroup.Single().Info.ShortName); Assert.Equal("Console.App.L2", matchResult.UnambiguousTemplateGroup.Single().Info.Identity); Assert.Equal("L2", matchResult.UnambiguousTemplateGroup.Single().Info.Tags["language"].ChoicesAndDescriptions.Keys.FirstOrDefault()); Assert.Equal(1, matchResult.UnambiguousTemplateGroup.Count); }
// TODO: make sure help / usage works right in these cases. private CreationResultStatus EnterMaintenanceFlow() { if (!TemplateListResolver.ValidateRemainingParameters(_commandInput, out IReadOnlyList <string> invalidParams)) { HelpForTemplateResolution.DisplayInvalidParameters(invalidParams); if (_commandInput.IsHelpFlagSpecified) { // this code path doesn't go through the full help & usage stack, so needs it's own call to ShowUsageHelp(). HelpForTemplateResolution.ShowUsageHelp(_commandInput, _telemetryLogger); } else { Reporter.Error.WriteLine(string.Format(LocalizableStrings.RunHelpForInformationAboutAcceptedParameters, CommandName).Bold().Red()); } return(CreationResultStatus.InvalidParamValues); } if (_commandInput.ToUninstallList != null) { return(EnterUninstallFlow()); } if (_commandInput.ToInstallList != null && _commandInput.ToInstallList.Count > 0 && _commandInput.ToInstallList[0] != null) { CreationResultStatus installResult = EnterInstallFlow(); if (installResult == CreationResultStatus.Success) { _settingsLoader.Reload(); ListOrHelpTemplateListResolutionResult resolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(resolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: false); } return(installResult); } // No other cases specified, we've fallen through to "Optional usage help + List" ListOrHelpTemplateListResolutionResult templateResolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified); return(CreationResultStatus.Success); }
public async Task <CreationResultStatus> CoordinateInvocationOrAcquisitionAsync() { EnsureTemplateResolutionResult(); if (_templateToInvoke != null) { // invoke and then check for updates CreationResultStatus creationResult = await InvokeTemplateAsync(); // check for updates on this template (pack) await CheckForTemplateUpdateAsync(); return(creationResult); } else { ListOrHelpTemplateListResolutionResult listingTemplateListResolutionResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateListResolutionResult, _environment, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, false)); } }
private static string GetPartialMatchReason(ListOrHelpTemplateListResolutionResult templateResolutionResult, string templateLanguage, string context, string baselineName) { StringBuilder reason = new StringBuilder(); string separator = ", "; if (templateResolutionResult.HasLanguageMismatch) { reason.Append(separator).AppendFormat($"language='{templateLanguage}'"); } if (templateResolutionResult.HasContextMismatch) { reason.Append(separator).AppendFormat($"type='{context}'"); } if (templateResolutionResult.HasBaselineMismatch) { reason.Append(separator).AppendFormat($"baseline='{baselineName}'"); } return(reason.Length != 0 ? reason.ToString(separator.Length, reason.Length - separator.Length) : string.Empty); }
public void TestGetTemplateResolutionResult_TemplateWithoutTypeShouldNotBeMatchedForContextFilter() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new TemplateInfo() { ShortName = "console", Name = "Long name for Console App", Identity = "Console.App.T1", GroupIdentity = "Console.App.Test", CacheParameters = new Dictionary <string, ICacheParameter>(), Classifications = new List <string> { "Common", "Test" }, Tags = new Dictionary <string, ICacheTag>() }); INewCommandInput userInputs = new MockNewCommandInput() { TemplateName = "Common", IsListFlagSpecified = true, TypeFilter = "item", }; ListOrHelpTemplateListResolutionResult matchResult = TemplateListResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.False(matchResult.HasExactMatches); Assert.Equal(0, matchResult.ExactMatchedTemplatesGrouped.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasPartialMatches); Assert.Equal(1, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(1, matchResult.PartiallyMatchedTemplatesGrouped.Count); Assert.False(matchResult.HasLanguageMismatch); Assert.True(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); }
private static void ShowContextAndTemplateNameMismatchHelp(ListOrHelpTemplateListResolutionResult templateResolutionResult, INewCommandInput commandInput) { if (string.IsNullOrEmpty(commandInput.TemplateName) && SupportedFilterOptions.SupportedListFilters.All(filter => !filter.IsFilterSet(commandInput))) { return; } bool anythingReported = false; if (templateResolutionResult.HasExactMatches) { return; } else { ShowNoTemplatesFoundMessage(commandInput); anythingReported = true; } if (templateResolutionResult.HasPartialMatches) { // {0} template(s) partially matched, but failed on {1}. Reporter.Error.WriteLine( string.Format( LocalizableStrings.TemplatesNotValidGivenTheSpecifiedFilter, templateResolutionResult.PartiallyMatchedTemplatesGrouped.Count, GetPartialMatchReason(templateResolutionResult, commandInput)) .Bold().Red()); anythingReported = true; } if (anythingReported) { Reporter.Error.WriteLine(); } }
private static void DisplayPartialNameMatchLanguageAndContextProblems(string templateName, string templateLanguage, string context, ListOrHelpTemplateListResolutionResult templateResolutionResult, string baselineName) { bool anythingReported = false; if (templateResolutionResult.HasExactMatches) { return; } else { // ShowNoTemplatesFoundMessage(templateName, templateLanguage, context, baselineName); anythingReported = true; } if (templateResolutionResult.HasPartialMatches) { // {0} template(s) partially matched, but failed on {1}. Reporter.Error.WriteLine( string.Format( LocalizableStrings.TemplatesNotValidGivenTheSpecifiedFilter, templateResolutionResult.PartiallyMatchedTemplatesGrouped.Count, GetPartialMatchReason(templateResolutionResult, templateLanguage, context, baselineName)) .Bold().Red()); anythingReported = true; } if (anythingReported) { Reporter.Error.WriteLine(); } }
private static CreationResultStatus DisplayListOrHelpForAmbiguousTemplateGroup(ListOrHelpTemplateListResolutionResult templateResolutionResult, IEngineEnvironmentSettings environmentSettings, INewCommandInput commandInput, IHostSpecificDataLoader hostDataLoader, ITelemetryLogger telemetryLogger, string defaultLanguage) { // The following occurs when: // --alias <value> is specifed // --help is specified // template (group) can't be resolved if (!string.IsNullOrWhiteSpace(commandInput.Alias)) { Reporter.Error.WriteLine(LocalizableStrings.InvalidInputSwitch.Bold().Red()); Reporter.Error.WriteLine(" " + commandInput.TemplateParamInputFormat("--alias").Bold().Red()); return(CreationResultStatus.NotFound); } bool hasInvalidParameters = false; IReadOnlyCollection <ITemplateMatchInfo> templatesForDisplay = templateResolutionResult.ExactMatchedTemplates; GetParametersInvalidForTemplatesInList(templatesForDisplay, out IReadOnlyList <string> invalidForAllTemplates, out IReadOnlyList <string> invalidForSomeTemplates); if (invalidForAllTemplates.Any() || invalidForSomeTemplates.Any()) { hasInvalidParameters = true; DisplayInvalidParameters(invalidForAllTemplates); DisplayParametersInvalidForSomeTemplates(invalidForSomeTemplates, LocalizableStrings.PartialTemplateMatchSwitchesNotValidForAllMatches); } if (templateResolutionResult.HasExactMatches) { IReadOnlyCollection <IGrouping <string, ITemplateMatchInfo> > groupedTemplatesForDisplay = templateResolutionResult.ExactMatchedTemplatesGrouped; ShowTemplatesFoundMessage(commandInput); DisplayTemplateList(groupedTemplatesForDisplay, environmentSettings, commandInput, defaultLanguage); } else { ShowContextAndTemplateNameMismatchHelp(templateResolutionResult, commandInput); } if (!commandInput.IsListFlagSpecified) { TemplateUsageHelp.ShowInvocationExamples(templateResolutionResult, hostDataLoader, commandInput.CommandName); } if (hasInvalidParameters) { return(CreationResultStatus.NotFound); } else if (commandInput.IsListFlagSpecified || commandInput.IsHelpFlagSpecified) { return(templateResolutionResult.HasExactMatches ? CreationResultStatus.Success : CreationResultStatus.NotFound); } else { return(CreationResultStatus.OperationNotSpecified); } }