protected virtual void WriteExample(TextWriter writer, ParameterSetCollection parameterSets, HelpLevel level) { const string indent = " "; writer.WriteLine("EXAMPLES"); var entryAsm = Assembly.GetEntryAssembly(); string fileName = ""; if (entryAsm != null) fileName = Path.GetFileName(Assembly.GetEntryAssembly().Location); foreach (var set in parameterSets) { var examples = set.SelectMany(p => p.GetAttributes<ExampleValueAttribute>() .Select(ev => new Tuple<Parameter, ExampleValueAttribute>(p, ev))) .GroupBy(t => t.Item2.Set, StringComparer.InvariantCultureIgnoreCase); examples = examples.Where(g => g.Any(t => t.Item1.Property.DeclaringType == set.UnderlyingType)); foreach (IGrouping<string, Tuple<Parameter, ExampleValueAttribute>> group in examples) { var attrDict = group.ToDictionary(t => t.Item1, t => t.Item2); this.WriteSyntax(writer, new[] { set }, indent, fileName, false, p => { ExampleValueAttribute attr; if (attrDict.TryGetValue(p, out attr)) return true; return p.GetAttribute<RequiredAttribute>() != null; }, p => { ExampleValueAttribute attr; if (attrDict.TryGetValue(p, out attr)) return attr.Value; if (p.Property.PropertyType == typeof(Switch)) return ""; if (level.HasFlag(HelpLevel.Detailed)) return string.Format("<{0}>", p.Property.PropertyType.FullName); return string.Format("<{0}>", this.GetHumanReadableTypeName(p.Property.PropertyType)); }); } } }
public virtual void Write(TextWriter writer, ParameterSetCollection sets, HelpLevel level) { if (level.HasFlag(HelpLevel.Syntax)) { this.WriteSyntax(writer, sets, level); } if (level.HasFlag(HelpLevel.Examples)) { this.WriteExample(writer, sets, level); } if (level.HasFlag(HelpLevel.Parameters)) { this.WriteParameters(writer, sets, level); } }
private void WriteParameters(TextWriter writer, ParameterSetCollection sets, HelpLevel level) { // TODO grouping by "name" alone is not good enough var parameters = sets.SelectMany(set => set).GroupBy(p => p.Name) .OrderBy(g => g.Key, StringComparer.InvariantCultureIgnoreCase) .Select(g => g.First()); foreach (var parameter in parameters) { writer.WriteLine(); this.WriteParameter(writer, sets, parameter); } }
public virtual void Write(TextWriter writer, ParameterSet set, HelpLevel level) { var tmp = new ParameterSetCollection(new[] { set }); this.Write(writer, tmp, level); }