/// <summary> /// </summary> /// <param name="helpRequest">Help request object.</param> /// <returns></returns> internal override IEnumerable <HelpInfo> ExactMatchHelp(HelpRequest helpRequest) { HelpRequest defaultHelpRequest = helpRequest.Clone(); defaultHelpRequest.Target = "default"; return(base.ExactMatchHelp(defaultHelpRequest)); }
/// <summary> /// Search help for a target. /// </summary> /// <param name="helpRequest">Help request object.</param> /// <param name="searchOnlyContent"> /// If true, searches for pattern in the help content. Individual /// provider can decide which content to search in. /// /// If false, searches for pattern in the command names. /// </param> /// <returns>A collection of help info objects.</returns> internal override IEnumerable <HelpInfo> SearchHelp(HelpRequest helpRequest, bool searchOnlyContent) { string target = helpRequest.Target; string wildcardpattern = GetWildCardPattern(target); HelpRequest searchHelpRequest = helpRequest.Clone(); searchHelpRequest.Target = wildcardpattern; if (!this.CacheFullyLoaded) { IEnumerable <HelpInfo> result = DoSearchHelp(searchHelpRequest); if (result != null) { foreach (HelpInfo helpInfoToReturn in result) { yield return(helpInfoToReturn); } } } else { int countOfHelpInfoObjectsFound = 0; WildcardPattern helpMatcher = WildcardPattern.Get(wildcardpattern, WildcardOptions.IgnoreCase); foreach (string key in _helpCache.Keys) { if ((!searchOnlyContent && helpMatcher.IsMatch(key)) || (searchOnlyContent && ((HelpInfo)_helpCache[key]).MatchPatternInContent(helpMatcher))) { countOfHelpInfoObjectsFound++; yield return((HelpInfo)_helpCache[key]); if (helpRequest.MaxResults > 0 && countOfHelpInfoObjectsFound >= helpRequest.MaxResults) { yield break; } } } } }
/// <summary> /// Process a helpInfo forwarded from other providers (normally commandHelpProvider) /// </summary> /// <remarks> /// For command help info, this will /// 1. check whether provider-specific commandlet help exists. /// 2. merge found provider-specific help with commandlet help provided. /// </remarks> /// <param name="helpInfo">HelpInfo forwarded in.</param> /// <param name="helpRequest">Help request object.</param> /// <returns>The help info object after processing.</returns> override internal HelpInfo ProcessForwardedHelp(HelpInfo helpInfo, HelpRequest helpRequest) { if (helpInfo == null) { return(null); } if (helpInfo.HelpCategory != HelpCategory.Command) { return(helpInfo); } string providerName = helpRequest.Provider; if (string.IsNullOrEmpty(providerName)) { providerName = this._sessionState.Path.CurrentLocation.Provider.Name; } HelpRequest providerHelpRequest = helpRequest.Clone(); providerHelpRequest.Target = providerName; ProviderHelpInfo providerHelpInfo = (ProviderHelpInfo)this.ExactMatchHelp(providerHelpRequest); if (providerHelpInfo == null) { return(null); } CommandHelpInfo commandHelpInfo = (CommandHelpInfo)helpInfo; CommandHelpInfo result = commandHelpInfo.MergeProviderSpecificHelp(providerHelpInfo.GetCmdletHelp(commandHelpInfo.Name), providerHelpInfo.GetDynamicParameterHelp(helpRequest.DynamicParameters)); // Reset ForwardHelpCategory for the helpinfo to be returned so that it will not be forwarded back again. result.ForwardHelpCategory = HelpCategory.None; return(result); }