Browse Source

Cleaned up alias generation

pull/450/head
RogueException 8 years ago
parent
commit
e3da623f39
1 changed files with 16 additions and 26 deletions
  1. +16
    -26
      src/Discord.Net.Commands/Info/ModuleInfo.cs

+ 16
- 26
src/Discord.Net.Commands/Info/ModuleInfo.cs View File

@@ -30,44 +30,36 @@ namespace Discord.Commands
Remarks = builder.Remarks; Remarks = builder.Remarks;
Parent = parent; Parent = parent;


Aliases = BuildAliases(builder).ToImmutableArray();
Aliases = BuildAliases(builder, service).ToImmutableArray();
Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray(); Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray();
Preconditions = BuildPreconditions(builder).ToImmutableArray(); Preconditions = BuildPreconditions(builder).ToImmutableArray();


Submodules = BuildSubmodules(builder, service).ToImmutableArray(); Submodules = BuildSubmodules(builder, service).ToImmutableArray();
} }


private static IEnumerable<string> BuildAliases(ModuleBuilder builder)
private static IEnumerable<string> BuildAliases(ModuleBuilder builder, CommandService service)
{ {
IEnumerable<string> result = null;
var result = builder.Aliases.ToList();
var builderStack = new Stack<ModuleBuilder>();


Stack<ModuleBuilder> builderStack = new Stack<ModuleBuilder>();
builderStack.Push(builder);

ModuleBuilder parent = builder.Parent;
while (parent != null)
{
var parent = builder;
while ((parent = parent.Parent) != null)
builderStack.Push(parent); builderStack.Push(parent);
parent = parent.Parent;
}


while (builderStack.Count() > 0)
while (builderStack.Count > 0)
{ {
ModuleBuilder level = builderStack.Pop(); //get the topmost builder
if (result == null)
var level = builderStack.Pop();
result = result.Permutate(level.Aliases, (first, second) =>
{ {
if (level.Aliases.Count > 0)
result = level.Aliases.ToList(); //create a shallow copy so we don't overwrite the builder unexpectedly
}
else if (result.Count() > level.Aliases.Count)
result = result.Permutate(level.Aliases, (first, second) => first + " " + second);
else
result = level.Aliases.Permutate(result, (second, first) => first + " " + second);
if (first == "")
return second;
else if (second == "")
return first;
else
return first + service._separatorChar + second;
}).ToList();
} }


if (result == null) //there were no aliases; default to an empty string alias
result = new List<string> { "" };

return result; return result;
} }


@@ -76,9 +68,7 @@ namespace Discord.Commands
var result = new List<ModuleInfo>(); var result = new List<ModuleInfo>();


foreach (var submodule in parent.Modules) foreach (var submodule in parent.Modules)
{
result.Add(submodule.Build(service, this)); result.Add(submodule.Build(service, this));
}


return result; return result;
} }


Loading…
Cancel
Save