[Lldb-commits] [lldb] 461f859 - [lldb] Treat user aliases the same as built-ins when tab completing (#65974)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Sep 13 02:12:15 PDT 2023
Author: David Spickett
Date: 2023-09-13T10:12:12+01:00
New Revision: 461f859a722fb80103d437005bb14deb215f8260
URL: https://github.com/llvm/llvm-project/commit/461f859a722fb80103d437005bb14deb215f8260
DIFF: https://github.com/llvm/llvm-project/commit/461f859a722fb80103d437005bb14deb215f8260.diff
LOG: [lldb] Treat user aliases the same as built-ins when tab completing (#65974)
Previously we would check all built-ins first for suggestions,
then check built-ins and aliases. This meant that if you had
an alias brkpt -> breakpoint, "br" would complete to "breakpoint".
Instead of giving you the choice of "brkpt" or "breakpoint".
Added:
Modified:
lldb/source/Interpreter/CommandInterpreter.cpp
lldb/test/API/functionalities/completion/TestCompletion.py
Removed:
################################################################################
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 6d1ad799f2d10fb..dcff53ff843f328 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -508,6 +508,11 @@ void CommandInterpreter::Initialize() {
if (cmd_obj_sp) {
AddAlias("history", cmd_obj_sp);
}
+
+ cmd_obj_sp = GetCommandSPExact("help");
+ if (cmd_obj_sp) {
+ AddAlias("h", cmd_obj_sp);
+ }
}
void CommandInterpreter::Clear() {
@@ -1227,36 +1232,11 @@ CommandObject *
CommandInterpreter::GetCommandObject(llvm::StringRef cmd_str,
StringList *matches,
StringList *descriptions) const {
- CommandObject *command_obj =
- GetCommandSP(cmd_str, false, true, matches, descriptions).get();
-
- // If we didn't find an exact match to the command string in the commands,
- // look in the aliases.
-
- if (command_obj)
- return command_obj;
-
- command_obj = GetCommandSP(cmd_str, true, true, matches, descriptions).get();
-
- if (command_obj)
- return command_obj;
-
- // If there wasn't an exact match then look for an inexact one in just the
- // commands
- command_obj = GetCommandSP(cmd_str, false, false, nullptr).get();
-
- // Finally, if there wasn't an inexact match among the commands, look for an
- // inexact match in both the commands and aliases.
-
- if (command_obj) {
- if (matches)
- matches->AppendString(command_obj->GetCommandName());
- if (descriptions)
- descriptions->AppendString(command_obj->GetHelp());
- return command_obj;
- }
-
- return GetCommandSP(cmd_str, true, false, matches, descriptions).get();
+ // Try to find a match among commands and aliases. Allowing inexact matches,
+ // but perferring exact matches.
+ return GetCommandSP(cmd_str, /*include_aliases=*/true, /*exact=*/false,
+ matches, descriptions)
+ .get();
}
CommandObject *CommandInterpreter::GetUserCommandObject(
diff --git a/lldb/test/API/functionalities/completion/TestCompletion.py b/lldb/test/API/functionalities/completion/TestCompletion.py
index 302b461b61d0d4d..f71bc73928f0f4e 100644
--- a/lldb/test/API/functionalities/completion/TestCompletion.py
+++ b/lldb/test/API/functionalities/completion/TestCompletion.py
@@ -618,19 +618,15 @@ def test_command_unalias(self):
def test_command_aliases(self):
self.runCmd("command alias brkpt breakpoint")
- # If there is an unambiguous completion from the built-in commands,
- # we choose that.
- self.complete_from_to("br", "breakpoint")
- # Only if there is not, do we then look for an unambiguous completion
- # from the user defined aliases.
+ # Exact matches are chosen if possible, even if there are longer
+ # completions we could use.
+ self.complete_from_to("b", "b ")
+ # Aliases are included in possible completions.
+ self.complete_from_to("br", ["breakpoint", "brkpt"])
+ # An alias can be the chosen completion.
self.complete_from_to("brk", "brkpt")
- # Aliases are included when there's no exact match.
- self.runCmd("command alias play breakpoint")
- self.complete_from_to("pl", ["plugin", "platform", "play"])
-
- # That list can also contain only aliases if there's no built-ins to
- # match.
+ # The list can contain only aliases if there's no built-ins to match.
self.runCmd("command alias test_1 breakpoint")
self.runCmd("command alias test_2 breakpoint")
self.complete_from_to("test_", ["test_1", "test_2"])
More information about the lldb-commits
mailing list