Skip to content

Commit 7f768cb

Browse files
authored
Don't show hints for hidden args (#66)
1 parent 1244c5a commit 7f768cb

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/NClap/Parser/ArgumentSetDefinition.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,26 @@ private ArgumentSetDefinition(ArgumentSetDefinition template) : this(template.At
9191
/// Enumerates all names of named arguments (of all name types).
9292
/// </summary>
9393
/// <returns>Enumeration.</returns>
94-
public IEnumerable<string> GetAllArgumentNames() => _namedArgumentsByName.Keys;
94+
public IEnumerable<string> GetAllArgumentNames() => GetAllArgumentNames(includeHiddenArguments: true);
95+
96+
/// <summary>
97+
/// Enumerates all names of named arguments (of all name types), possibly excluding
98+
/// hidden arguments.
99+
/// </summary>
100+
/// <param name="includeHiddenArguments">true to include names for hidden arguments; false to
101+
/// exclude them.</param>
102+
/// <returns>Enumeration.</returns>
103+
internal IEnumerable<string> GetAllArgumentNames(bool includeHiddenArguments)
104+
{
105+
IEnumerable<KeyValuePair<string, ArgumentDefinition>> namePairs = _namedArgumentsByName;
106+
107+
if (!includeHiddenArguments)
108+
{
109+
namePairs = namePairs.Where(keyValue => !keyValue.Value.Hidden);
110+
}
111+
112+
return namePairs.Select(keyValue => keyValue.Key);
113+
}
95114

96115
/// <summary>
97116
/// Enumerates named arguments of the given type.

src/NClap/Parser/ArgumentSetParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,9 +707,9 @@ private void ReportLine(string message, params object[] args)
707707
}));
708708
}
709709

710-
private IEnumerable<string> GetSimilarNamedArguments(ArgumentNameType? type, string name)
710+
private IEnumerable<string> GetSimilarNamedArguments(ArgumentNameType? type, string name, bool includeHiddenArguments = false)
711711
{
712-
var candidates = ArgumentSet.GetAllArgumentNames();
712+
var candidates = ArgumentSet.GetAllArgumentNames(includeHiddenArguments: includeHiddenArguments);
713713
var prefix = string.Empty;
714714

715715
if (type.HasValue)

src/Tests/UnitTests/Parser/ArgumentSetDefinitionTests.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,18 @@ public void TestThatArgumentNamesAreRetrievableFromSet()
3838
var set = DefineArgSet(new ArgumentBaseAttribute[]
3939
{
4040
new NamedArgumentAttribute { ShortName = "short", LongName = "foo" },
41-
new NamedArgumentAttribute { ShortName = "S", LongName = "LONG" }
41+
new NamedArgumentAttribute { ShortName = "S", LongName = "LONG" },
42+
new NamedArgumentAttribute { ShortName = "h", LongName = "Hidden", Hidden = true }
4243
});
4344

44-
set.GetArgumentNames(ArgumentNameType.ShortName).Should().BeEquivalentTo("short", "S");
45-
set.GetArgumentNames(ArgumentNameType.LongName).Should().BeEquivalentTo("foo", "LONG");
45+
set.GetArgumentNames(ArgumentNameType.ShortName).Should().BeEquivalentTo("short", "S", "h");
46+
set.GetArgumentNames(ArgumentNameType.LongName).Should().BeEquivalentTo("foo", "LONG", "Hidden");
4647
set.Invoking(s => s.GetArgumentNames((ArgumentNameType)0x1000))
4748
.Should().Throw<ArgumentOutOfRangeException>();
4849

49-
set.GetAllArgumentNames().Should().BeEquivalentTo("short", "S", "foo", "LONG");
50+
set.GetAllArgumentNames().Should().BeEquivalentTo("short", "S", "h", "foo", "LONG", "Hidden");
51+
set.GetAllArgumentNames(includeHiddenArguments: true).Should().BeEquivalentTo("short", "S", "h", "foo", "LONG", "Hidden");
52+
set.GetAllArgumentNames(includeHiddenArguments: false).Should().BeEquivalentTo("short", "S", "foo", "LONG");
5053
}
5154

5255
private ArgumentDefinition DefineArg(ArgumentSetDefinition set, ArgumentBaseAttribute argAttrib) =>

0 commit comments

Comments
 (0)