From e3da623f39beb07cd04435bd20eaa48e4e84f2a8 Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 28 Dec 2016 19:22:57 -0400 Subject: [PATCH] Cleaned up alias generation --- src/Discord.Net.Commands/Info/ModuleInfo.cs | 42 +++++++++++------------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/Discord.Net.Commands/Info/ModuleInfo.cs b/src/Discord.Net.Commands/Info/ModuleInfo.cs index bff9d9a56..40a434592 100644 --- a/src/Discord.Net.Commands/Info/ModuleInfo.cs +++ b/src/Discord.Net.Commands/Info/ModuleInfo.cs @@ -30,44 +30,36 @@ namespace Discord.Commands Remarks = builder.Remarks; Parent = parent; - Aliases = BuildAliases(builder).ToImmutableArray(); + Aliases = BuildAliases(builder, service).ToImmutableArray(); Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray(); Preconditions = BuildPreconditions(builder).ToImmutableArray(); Submodules = BuildSubmodules(builder, service).ToImmutableArray(); } - private static IEnumerable BuildAliases(ModuleBuilder builder) + private static IEnumerable BuildAliases(ModuleBuilder builder, CommandService service) { - IEnumerable result = null; + var result = builder.Aliases.ToList(); + var builderStack = new Stack(); - Stack builderStack = new Stack(); - builderStack.Push(builder); - - ModuleBuilder parent = builder.Parent; - while (parent != null) - { + var parent = builder; + while ((parent = parent.Parent) != null) 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 { "" }; - return result; } @@ -76,9 +68,7 @@ namespace Discord.Commands var result = new List(); foreach (var submodule in parent.Modules) - { result.Add(submodule.Build(service, this)); - } return result; }