public MarkdownHelpInfo(VariantGroup variantGroup, PsHelpInfo helpInfo, string examplesFolder, string externalHelpFilename = "") { ExternalHelpFilename = externalHelpFilename; ModuleName = helpInfo.ModuleName; OnlineVersion = helpInfo.OnlineVersion?.Uri?.NullIfEmpty() ?? variantGroup.Link; Schema = Version.Parse("2.0.0"); CmdletName = variantGroup.CmdletName; Aliases = helpInfo.Aliases.NullIfEmpty() ?? variantGroup.Aliases; Synopsis = helpInfo.Synopsis.NullIfEmpty() ?? variantGroup.Description; Description = helpInfo.Description.NullIfEmpty() ?? variantGroup.Description; var defaultParameterSet = variantGroup.DefaultParameterSetName; SyntaxInfos = variantGroup.Variants.Select(v => new MarkdownSyntaxHelpInfo(v, v.VariantName == defaultParameterSet)).ToArray(); Examples = GetExamplesFromMarkdown(examplesFolder).NullIfEmpty() ?? helpInfo.Examples.Select(e => e.ToExampleHelpInfo()).ToArray().NullIfEmpty() ?? DefaultExampleHelpInfos; var parameterGroups = variantGroup.Variants.ToParameterGroups().Where(pg => !pg.DontShow).ToArray(); Parameters = parameterGroups .Join(helpInfo.Parameters, pg => pg.ParameterName, phi => phi.Name, (pg, phi) => new MarkdownParameterHelpInfo(phi, pg)) .OrderBy(phi => phi.Name).ToArray(); Inputs = helpInfo.InputTypes.Where(it => it.Name.NullIfWhiteSpace() != null).Select(it => it.Name).ToArray().NullIfEmpty() ?? parameterGroups.Where(pg => pg.IsInputType).Select(pg => pg.ParameterType.FullName).ToArray(); Outputs = helpInfo.OutputTypes.Where(it => it.Name.NullIfWhiteSpace() != null).Select(ot => ot.Name).ToArray().NullIfEmpty() ?? variantGroup.OutputTypes.Select(ot => ot.Type.FullName).ToArray(); RelatedLinks = helpInfo.RelatedLinks.Select(rl => rl.Text).ToArray(); SupportsShouldProcess = variantGroup.SupportsShouldProcess; SupportsPaging = variantGroup.SupportsPaging; }
public static Variant[] ToVariants(this CommandInfo info, PsHelpInfo helpInfo) { var metadata = new CommandMetadata(info); var privateCmdletName = metadata.Name.Split('!').First(); var parts = privateCmdletName.Split('_'); return(parts.Length > 1 ? new[] { new Variant(parts[0], parts[1], info, metadata, helpInfo: helpInfo) } // Process multiple parameter sets, so we declare a variant per parameter set. : info.ParameterSets.Select(ps => new Variant(privateCmdletName, ps.Name, info, metadata, true, helpInfo)).ToArray()); }
public Variant(string cmdletName, string variantName, CommandInfo info, CommandMetadata metadata, bool hasParameterSets = false, PsHelpInfo helpInfo = null) { CmdletName = cmdletName; VariantName = variantName; Info = info; HelpInfo = helpInfo ?? new PsHelpInfo(); Metadata = metadata; HasParameterSets = hasParameterSets; IsFunction = Info.CommandType == CommandTypes.Function; PrivateModuleName = Info.Source; PrivateCmdletName = Metadata.Name; SupportsShouldProcess = Metadata.SupportsShouldProcess; SupportsPaging = Metadata.SupportsPaging; Attributes = this.ToAttributes(); Parameters = this.ToParameters().OrderBy(p => p.OrderCategory).ThenByDescending(p => p.IsMandatory).ToArray(); IsInternal = Attributes.OfType <InternalExportAttribute>().Any(); IsDoNotExport = Attributes.OfType <DoNotExportAttribute>().Any(); CmdletOnlyParameters = Parameters.Where(p => !p.Categories.Any(c => c == ParameterCategory.Azure || c == ParameterCategory.Runtime)).ToArray(); Profiles = Attributes.OfType <ProfileAttribute>().SelectMany(pa => pa.Profiles).ToArray(); }