/// <summary> /// Override SearchHelp to find a dsc resource help matching a pattern. /// </summary> /// <param name="helpRequest">Help request.</param> /// <param name="searchOnlyContent">Not used.</param> /// <returns></returns> internal override IEnumerable <HelpInfo> SearchHelp(HelpRequest helpRequest, bool searchOnlyContent) { Debug.Assert(helpRequest != null, "helpRequest cannot be null."); string target = helpRequest.Target; Collection <string> patternList = new Collection <string>(); bool decoratedSearch = !WildcardPattern.ContainsWildcardCharacters(helpRequest.Target); if (decoratedSearch) { patternList.Add("*" + target + "*"); } else { patternList.Add(target); } foreach (string pattern in patternList) { DscResourceSearcher searcher = new DscResourceSearcher(pattern, _context); foreach (var helpInfo in GetHelpInfo(searcher)) { if (helpInfo != null) { yield return(helpInfo); } } } }
/// <summary> /// Override ExactMatchHelp to find the matching DscResource matching help request. /// </summary> /// <param name="helpRequest">Help Request for the search.</param> /// <returns>Enumerable of HelpInfo objects.</returns> internal override IEnumerable <HelpInfo> ExactMatchHelp(HelpRequest helpRequest) { Debug.Assert(helpRequest != null, "helpRequest cannot be null."); if ((helpRequest.HelpCategory & Automation.HelpCategory.DscResource) == 0) { yield return(null); } string target = helpRequest.Target; DscResourceSearcher searcher = new DscResourceSearcher(target, _context); foreach (var helpInfo in GetHelpInfo(searcher)) { if (helpInfo != null) { yield return(helpInfo); } } }
/// <summary> /// Get the help in for the DscResource Info. /// /// </summary> /// <param name="searcher">Searcher for DscResources.</param> /// <returns>Next HelpInfo object.</returns> private IEnumerable <HelpInfo> GetHelpInfo(DscResourceSearcher searcher) { while (searcher.MoveNext()) { DscResourceInfo current = ((IEnumerator <DscResourceInfo>)searcher).Current; string moduleName = null; string moduleDir = current.ParentPath; // for binary modules, current.Module is empty. // in such cases use the leaf folder of ParentPath as filename. if (current.Module != null) { moduleName = current.Module.Name; } else if (!String.IsNullOrEmpty(moduleDir)) { string[] splitPath = moduleDir.Split(Utils.Separators.Backslash); moduleName = splitPath[splitPath.Length - 1]; } if (!String.IsNullOrEmpty(moduleName) && !String.IsNullOrEmpty(moduleDir)) { string helpFileToFind = moduleName + "-Help.xml"; string helpFileName = null; Collection <string> searchPaths = new Collection <string>(); searchPaths.Add(moduleDir); HelpInfo helpInfo = GetHelpInfoFromHelpFile(current, helpFileToFind, searchPaths, true, out helpFileName); if (helpInfo != null) { yield return(helpInfo); } } } }