Author: Shubham Sandeep Rastogi
Date: 2024-02-19T18:19:59-08:00
New Revision: 9ed8b272c30a01c450616f0ed8b2373d5d618ebb

URL: 
https://github.com/llvm/llvm-project/commit/9ed8b272c30a01c450616f0ed8b2373d5d618ebb
DIFF: 
https://github.com/llvm/llvm-project/commit/9ed8b272c30a01c450616f0ed8b2373d5d618ebb.diff

LOG: Revert "Centralize the handling of completion for simple argument lists. 
(#82085)"

This reverts commit 21631494b068d9364b8dc8f18e59adee9131a0a5.

Reverted because of greendragon failure:

******************** TEST 'lldb-api :: 
functionalities/completion/TestCompletion.py' FAILED ********************
Script:

Added: 
    

Modified: 
    lldb/include/lldb/Interpreter/CommandObject.h
    lldb/include/lldb/Interpreter/CommandOptionArgumentTable.h
    lldb/include/lldb/lldb-enumerations.h
    lldb/source/Commands/CommandObjectCommands.cpp
    lldb/source/Commands/CommandObjectDWIMPrint.cpp
    lldb/source/Commands/CommandObjectDWIMPrint.h
    lldb/source/Commands/CommandObjectFrame.cpp
    lldb/source/Commands/CommandObjectPlatform.cpp
    lldb/source/Commands/CommandObjectPlugin.cpp
    lldb/source/Commands/CommandObjectProcess.cpp
    lldb/source/Commands/CommandObjectRegister.cpp
    lldb/source/Commands/CommandObjectSession.cpp
    lldb/source/Commands/CommandObjectSettings.cpp
    lldb/source/Commands/CommandObjectTarget.cpp
    lldb/source/Commands/CommandObjectThread.cpp
    lldb/source/Commands/CommandObjectType.cpp
    lldb/source/Commands/CommandObjectWatchpoint.cpp
    lldb/source/Interpreter/CommandObject.cpp
    lldb/test/API/commands/help/TestHelp.py

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Interpreter/CommandObject.h 
b/lldb/include/lldb/Interpreter/CommandObject.h
index a326c6dc38a37a..b99de56f534469 100644
--- a/lldb/include/lldb/Interpreter/CommandObject.h
+++ b/lldb/include/lldb/Interpreter/CommandObject.h
@@ -242,13 +242,6 @@ class CommandObject : public 
std::enable_shared_from_this<CommandObject> {
   ///    The completion request that needs to be answered.
   virtual void HandleCompletion(CompletionRequest &request);
 
-  /// The default version handles argument definitions that have only one
-  /// argument type, and use one of the argument types that have an entry in
-  /// the CommonCompletions.  Override this if you have a more complex
-  /// argument setup.
-  /// FIXME: we should be able to extend this to more complex argument
-  /// definitions provided we have completers for all the argument types.
-  ///
   /// The input array contains a parsed version of the line.
   ///
   /// We've constructed the map of options and their arguments as well if that
@@ -258,7 +251,7 @@ class CommandObject : public 
std::enable_shared_from_this<CommandObject> {
   ///    The completion request that needs to be answered.
   virtual void
   HandleArgumentCompletion(CompletionRequest &request,
-                           OptionElementVector &opt_element_vector);
+                           OptionElementVector &opt_element_vector) {}
 
   bool HelpTextContainsWord(llvm::StringRef search_word,
                             bool search_short_help = true,

diff  --git a/lldb/include/lldb/Interpreter/CommandOptionArgumentTable.h 
b/lldb/include/lldb/Interpreter/CommandOptionArgumentTable.h
index ab5eff699b4cf0..d0cf54c31ca73f 100644
--- a/lldb/include/lldb/Interpreter/CommandOptionArgumentTable.h
+++ b/lldb/include/lldb/Interpreter/CommandOptionArgumentTable.h
@@ -243,7 +243,7 @@ static constexpr CommandObject::ArgumentTableEntry 
g_argument_table[] = {
     { lldb::eArgTypeLogCategory, "log-category", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of a 
category within a log channel, e.g. all (try \"log list\" to see a list of all 
channels and their categories." },
     { lldb::eArgTypeLogChannel, "log-channel", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of a log 
channel, e.g. process.gdb-remote (try \"log list\" to see a list of all 
channels and their categories)." },
     { lldb::eArgTypeMethod, "method", lldb::CompletionType::eNoCompletion, {}, 
{ nullptr, false }, "A C++ method name." },
-    { lldb::eArgTypeName, "name", lldb::eTypeCategoryNameCompletion, {}, { 
nullptr, false }, "The name of a type category." },
+    { lldb::eArgTypeName, "name", lldb::eTypeCategoryNameCompletion, {}, { 
nullptr, false }, "Help text goes here." },
     { lldb::eArgTypeNewPathPrefix, "new-path-prefix", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "Help text goes 
here." },
     { lldb::eArgTypeNumLines, "num-lines", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The number of 
lines to use." },
     { lldb::eArgTypeNumberPerLine, "number-per-line", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The number of 
items per line to display." },
@@ -262,7 +262,7 @@ static constexpr CommandObject::ArgumentTableEntry 
g_argument_table[] = {
     { lldb::eArgTypeQueueName, "queue-name", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of the 
thread queue." },
     { lldb::eArgTypeRegisterName, "register-name", 
lldb::CompletionType::eNoCompletion, {}, { RegisterNameHelpTextCallback, true 
}, nullptr },
     { lldb::eArgTypeRegularExpression, "regular-expression", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "A POSIX-compliant 
extended regular expression." },
-    { lldb::eArgTypeRunArgs, "run-args", 
lldb::CompletionType::eDiskFileCompletion, {}, { nullptr, false }, "Arguments 
to be passed to the target program when it starts executing." },
+    { lldb::eArgTypeRunArgs, "run-args", lldb::CompletionType::eNoCompletion, 
{}, { nullptr, false }, "Arguments to be passed to the target program when it 
starts executing." },
     { lldb::eArgTypeRunMode, "run-mode", lldb::CompletionType::eNoCompletion, 
g_running_mode, { nullptr, false }, "Help text goes here." },
     { lldb::eArgTypeScriptedCommandSynchronicity, "script-cmd-synchronicity", 
lldb::CompletionType::eNoCompletion, g_script_synchro_type, { nullptr, false }, 
"The synchronicity to use to run scripted commands with regard to LLDB event 
system." },
     { lldb::eArgTypeScriptLang, "script-language", 
lldb::CompletionType::eNoCompletion, g_script_option_enumeration, { nullptr, 
false }, "The scripting language to be used for script-based commands.  
Supported languages are python and lua." },
@@ -270,21 +270,21 @@ static constexpr CommandObject::ArgumentTableEntry 
g_argument_table[] = {
     { lldb::eArgTypeSelector, "selector", lldb::CompletionType::eNoCompletion, 
{}, { nullptr, false }, "An Objective-C selector name." },
     { lldb::eArgTypeSettingIndex, "setting-index", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "An index into a 
settings variable that is an array (try 'settings list' to see all the possible 
settings variables and their types)." },
     { lldb::eArgTypeSettingKey, "setting-key", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "A key into a 
settings variables that is a dictionary (try 'settings list' to see all the 
possible settings variables and their types)." },
-    { lldb::eArgTypeSettingPrefix, "setting-prefix", 
lldb::CompletionType::eSettingsNameCompletion, {}, { nullptr, false }, "The 
name of a settable internal debugger variable up to a dot ('.'), e.g. 
'target.process.'" },
-    { lldb::eArgTypeSettingVariableName, "setting-variable-name", 
lldb::CompletionType::eSettingsNameCompletion, {}, { nullptr, false }, "The 
name of a settable internal debugger variable.  Type 'settings list' to see a 
complete list of such variables." },
-    { lldb::eArgTypeShlibName, "shlib-name", 
lldb::CompletionType::eDiskFileCompletion, {}, { nullptr, false }, "The name of 
a shared library." },
+    { lldb::eArgTypeSettingPrefix, "setting-prefix", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of a 
settable internal debugger variable up to a dot ('.'), e.g. 'target.process.'" 
},
+    { lldb::eArgTypeSettingVariableName, "setting-variable-name", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of a 
settable internal debugger variable.  Type 'settings list' to see a complete 
list of such variables." },
+    { lldb::eArgTypeShlibName, "shlib-name", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The name of a 
shared library." },
     { lldb::eArgTypeSourceFile, "source-file", lldb::eSourceFileCompletion, 
{}, { nullptr, false }, "The name of a source file.." },
     { lldb::eArgTypeSortOrder, "sort-order", 
lldb::CompletionType::eNoCompletion, g_sort_option_enumeration, { nullptr, 
false }, "Specify a sort order when dumping lists." },
     { lldb::eArgTypeStartAddress, "start-address", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "Help text goes 
here." },
     { lldb::eArgTypeSummaryString, "summary-string", 
lldb::CompletionType::eNoCompletion, {}, { SummaryStringHelpTextCallback, true 
}, nullptr },
     { lldb::eArgTypeSymbol, "symbol", lldb::eSymbolCompletion, {}, { nullptr, 
false }, "Any symbol name (function name, variable, argument, etc.)" },
-    { lldb::eArgTypeThreadID, "thread-id", 
lldb::CompletionType::eThreadIndexCompletion, {}, { nullptr, false }, "Thread 
ID number." },
-    { lldb::eArgTypeThreadIndex, "thread-index", 
lldb::CompletionType::eThreadIndexCompletion, {}, { nullptr, false }, "Index 
into the process' list of threads." },
+    { lldb::eArgTypeThreadID, "thread-id", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "Thread ID 
number." },
+    { lldb::eArgTypeThreadIndex, "thread-index", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "Index into the 
process' list of threads." },
     { lldb::eArgTypeThreadName, "thread-name", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The thread's 
name." },
     { lldb::eArgTypeTypeName, "type-name", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "A type name." },
     { lldb::eArgTypeUnsignedInteger, "unsigned-integer", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "An unsigned 
integer." },
     { lldb::eArgTypeUnixSignal, "unix-signal", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "A valid Unix 
signal name or number (e.g. SIGKILL, KILL or 9)." },
-    { lldb::eArgTypeVarName, "variable-name", 
lldb::CompletionType::eVariablePathCompletion, {} ,{ nullptr, false }, "The 
name of a variable in your program." },
+    { lldb::eArgTypeVarName, "variable-name", 
lldb::CompletionType::eNoCompletion, {} ,{ nullptr, false }, "The name of a 
variable in your program." },
     { lldb::eArgTypeValue, "value", lldb::CompletionType::eNoCompletion, 
g_dependents_enumeration, { nullptr, false }, "A value could be anything, 
depending on where and how it is used." },
     { lldb::eArgTypeWidth, "width", lldb::CompletionType::eNoCompletion, {}, { 
nullptr, false }, "Help text goes here." },
     { lldb::eArgTypeNone, "none", lldb::CompletionType::eNoCompletion, {}, { 
nullptr, false }, "No help available for this." },
@@ -302,11 +302,8 @@ static constexpr CommandObject::ArgumentTableEntry 
g_argument_table[] = {
     { lldb::eArgTypeRecognizerID, "frame-recognizer-id", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The ID for a 
stack frame recognizer." },
     { lldb::eArgTypeConnectURL, "process-connect-url", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "A URL-style 
specification for a remote connection." },
     { lldb::eArgTypeTargetID, "target-id", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The index ID for 
an lldb Target." },
-    { lldb::eArgTypeStopHookID, "stop-hook-id", 
lldb::CompletionType::eStopHookIDCompletion, {}, { nullptr, false }, "The ID 
you receive when you create a stop-hook." },
+    { lldb::eArgTypeStopHookID, "stop-hook-id", 
lldb::CompletionType::eNoCompletion, {}, { nullptr, false }, "The ID you 
receive when you create a stop-hook." },
     { lldb::eArgTypeCompletionType, "completion-type", 
lldb::CompletionType::eNoCompletion, g_completion_type, { nullptr, false }, 
"The completion type to use when adding custom commands. If none is specified, 
the command won't use auto-completion." },
-    { lldb::eArgTypeRemotePath, "remote-path", 
lldb::CompletionType::eRemoteDiskFileCompletion, {}, { nullptr, false }, "A 
path on the system managed by the current platform." },
-    { lldb::eArgTypeRemoteFilename, "remote-filename", 
lldb::CompletionType::eRemoteDiskFileCompletion, {}, { nullptr, false }, "A 
file on the system managed by the current platform." },
-    { lldb::eArgTypeModule, "module", lldb::CompletionType::eModuleCompletion, 
{}, { nullptr, false }, "The name of a module loaded into the current target." 
},
     // clang-format on
 };
 

diff  --git a/lldb/include/lldb/lldb-enumerations.h 
b/lldb/include/lldb/lldb-enumerations.h
index 85769071dae785..4640533047833b 100644
--- a/lldb/include/lldb/lldb-enumerations.h
+++ b/lldb/include/lldb/lldb-enumerations.h
@@ -651,9 +651,6 @@ enum CommandArgumentType {
   eArgTypeTargetID,
   eArgTypeStopHookID,
   eArgTypeCompletionType,
-  eArgTypeRemotePath,
-  eArgTypeRemoteFilename,
-  eArgTypeModule,
   eArgTypeLastArg // Always keep this entry as the last entry in this
                   // enumeration!!
 };

diff  --git a/lldb/source/Commands/CommandObjectCommands.cpp 
b/lldb/source/Commands/CommandObjectCommands.cpp
index 7c459bdaf38022..b7cd65059b2214 100644
--- a/lldb/source/Commands/CommandObjectCommands.cpp
+++ b/lldb/source/Commands/CommandObjectCommands.cpp
@@ -63,6 +63,13 @@ class CommandObjectCommandsSource : public 
CommandObjectParsed {
     return std::string("");
   }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
   Options *GetOptions() override { return &m_options; }
 
 protected:
@@ -1961,6 +1968,13 @@ class CommandObjectCommandsScriptImport : public 
CommandObjectParsed {
 
   ~CommandObjectCommandsScriptImport() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
   Options *GetOptions() override { return &m_options; }
 
 protected:

diff  --git a/lldb/source/Commands/CommandObjectDWIMPrint.cpp 
b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
index fb2cc106ffd2dd..695f3d7931cd0a 100644
--- a/lldb/source/Commands/CommandObjectDWIMPrint.cpp
+++ b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
@@ -52,6 +52,12 @@ 
CommandObjectDWIMPrint::CommandObjectDWIMPrint(CommandInterpreter &interpreter)
 
 Options *CommandObjectDWIMPrint::GetOptions() { return &m_option_group; }
 
+void CommandObjectDWIMPrint::HandleArgumentCompletion(
+    CompletionRequest &request, OptionElementVector &opt_element_vector) {
+  lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+      GetCommandInterpreter(), lldb::eVariablePathCompletion, request, 
nullptr);
+}
+
 void CommandObjectDWIMPrint::DoExecute(StringRef command,
                                        CommandReturnObject &result) {
   m_option_group.NotifyOptionParsingStarting(&m_exe_ctx);

diff  --git a/lldb/source/Commands/CommandObjectDWIMPrint.h 
b/lldb/source/Commands/CommandObjectDWIMPrint.h
index 01ba9c225e3301..d868f8964c2ac5 100644
--- a/lldb/source/Commands/CommandObjectDWIMPrint.h
+++ b/lldb/source/Commands/CommandObjectDWIMPrint.h
@@ -39,6 +39,10 @@ class CommandObjectDWIMPrint : public CommandObjectRaw {
 
   bool WantsCompletion() override { return true; }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override;
+
 private:
   void DoExecute(llvm::StringRef command, CommandReturnObject &result) 
override;
 

diff  --git a/lldb/source/Commands/CommandObjectFrame.cpp 
b/lldb/source/Commands/CommandObjectFrame.cpp
index f092d54ffe9932..a4d3fb66e8b552 100644
--- a/lldb/source/Commands/CommandObjectFrame.cpp
+++ b/lldb/source/Commands/CommandObjectFrame.cpp
@@ -286,6 +286,16 @@ class CommandObjectFrameSelect : public 
CommandObjectParsed {
 
   ~CommandObjectFrameSelect() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() != 0)
+      return;
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eFrameIndexCompletion, request, 
nullptr);
+  }
+
   Options *GetOptions() override { return &m_options; }
 
 protected:
@@ -436,6 +446,15 @@ may even involve JITing and running code in the target 
program.)");
 
   Options *GetOptions() override { return &m_option_group; }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    // Arguments are the standard source file completer.
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eVariablePathCompletion, request,
+        nullptr);
+  }
+
 protected:
   llvm::StringRef GetScopeString(VariableSP var_sp) {
     if (!var_sp)

diff  --git a/lldb/source/Commands/CommandObjectPlatform.cpp 
b/lldb/source/Commands/CommandObjectPlatform.cpp
index b25c391bd4faa2..790f1dbb475358 100644
--- a/lldb/source/Commands/CommandObjectPlatform.cpp
+++ b/lldb/source/Commands/CommandObjectPlatform.cpp
@@ -418,7 +418,7 @@ class CommandObjectPlatformMkDir : public 
CommandObjectParsed {
       : CommandObjectParsed(interpreter, "platform mkdir",
                             "Make a new directory on the remote end.", nullptr,
                             0) {
-    CommandArgumentData thread_arg{eArgTypeRemotePath, eArgRepeatPlain};
+    CommandArgumentData thread_arg{eArgTypePath, eArgRepeatPlain};
     m_arguments.push_back({thread_arg});
   }
 
@@ -467,12 +467,21 @@ class CommandObjectPlatformFOpen : public 
CommandObjectParsed {
   CommandObjectPlatformFOpen(CommandInterpreter &interpreter)
       : CommandObjectParsed(interpreter, "platform file open",
                             "Open a file on the remote end.", nullptr, 0) {
-    CommandArgumentData path_arg{eArgTypeRemotePath, eArgRepeatPlain};
+    CommandArgumentData path_arg{eArgTypePath, eArgRepeatPlain};
     m_arguments.push_back({path_arg});
   }
 
   ~CommandObjectPlatformFOpen() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() == 0)
+      lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+          GetCommandInterpreter(), lldb::eRemoteDiskFileCompletion, request,
+          nullptr);
+  }
+
   void DoExecute(Args &args, CommandReturnObject &result) override {
     PlatformSP platform_sp(
         GetDebugger().GetPlatformList().GetSelectedPlatform());
@@ -786,7 +795,7 @@ class CommandObjectPlatformGetFile : public 
CommandObjectParsed {
     CommandArgumentData file_arg_remote, file_arg_host;
 
     // Define the first (and only) variant of this arg.
-    file_arg_remote.arg_type = eArgTypeRemoteFilename;
+    file_arg_remote.arg_type = eArgTypeFilename;
     file_arg_remote.arg_repetition = eArgRepeatPlain;
     // There is only one variant this argument could be; put it into the
     // argument entry.
@@ -867,7 +876,7 @@ class CommandObjectPlatformGetSize : public 
CommandObjectParsed {
     CommandArgumentData file_arg_remote;
 
     // Define the first (and only) variant of this arg.
-    file_arg_remote.arg_type = eArgTypeRemoteFilename;
+    file_arg_remote.arg_type = eArgTypeFilename;
     file_arg_remote.arg_repetition = eArgRepeatPlain;
     // There is only one variant this argument could be; put it into the
     // argument entry.
@@ -879,6 +888,17 @@ class CommandObjectPlatformGetSize : public 
CommandObjectParsed {
 
   ~CommandObjectPlatformGetSize() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() != 0)
+      return;
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eRemoteDiskFileCompletion, request,
+        nullptr);
+  }
+
   void DoExecute(Args &args, CommandReturnObject &result) override {
     // If the number of arguments is incorrect, issue an error message.
     if (args.GetArgumentCount() != 1) {
@@ -926,7 +946,7 @@ class CommandObjectPlatformGetPermissions : public 
CommandObjectParsed {
     CommandArgumentData file_arg_remote;
 
     // Define the first (and only) variant of this arg.
-    file_arg_remote.arg_type = eArgTypeRemoteFilename;
+    file_arg_remote.arg_type = eArgTypeFilename;
     file_arg_remote.arg_repetition = eArgRepeatPlain;
     // There is only one variant this argument could be; put it into the
     // argument entry.
@@ -938,6 +958,17 @@ class CommandObjectPlatformGetPermissions : public 
CommandObjectParsed {
 
   ~CommandObjectPlatformGetPermissions() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() != 0)
+      return;
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eRemoteDiskFileCompletion, request,
+        nullptr);
+  }
+
   void DoExecute(Args &args, CommandReturnObject &result) override {
     // If the number of arguments is incorrect, issue an error message.
     if (args.GetArgumentCount() != 1) {
@@ -984,7 +1015,7 @@ class CommandObjectPlatformFileExists : public 
CommandObjectParsed {
     CommandArgumentData file_arg_remote;
 
     // Define the first (and only) variant of this arg.
-    file_arg_remote.arg_type = eArgTypeRemoteFilename;
+    file_arg_remote.arg_type = eArgTypeFilename;
     file_arg_remote.arg_repetition = eArgRepeatPlain;
     // There is only one variant this argument could be; put it into the
     // argument entry.
@@ -996,6 +1027,17 @@ class CommandObjectPlatformFileExists : public 
CommandObjectParsed {
 
   ~CommandObjectPlatformFileExists() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() != 0)
+      return;
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eRemoteDiskFileCompletion, request,
+        nullptr);
+  }
+
   void DoExecute(Args &args, CommandReturnObject &result) override {
     // If the number of arguments is incorrect, issue an error message.
     if (args.GetArgumentCount() != 1) {
@@ -1038,7 +1080,7 @@ class CommandObjectPlatformPutFile : public 
CommandObjectParsed {
 
     Omitting the destination places the file in the platform working 
directory.)");
     CommandArgumentData source_arg{eArgTypePath, eArgRepeatPlain};
-    CommandArgumentData path_arg{eArgTypeRemotePath, eArgRepeatOptional};
+    CommandArgumentData path_arg{eArgTypePath, eArgRepeatOptional};
     m_arguments.push_back({source_arg});
     m_arguments.push_back({path_arg});
   }
@@ -1097,16 +1139,6 @@ class CommandObjectPlatformProcessLaunch : public 
CommandObjectParsed {
     m_arguments.push_back({run_arg_arg});
   }
 
-  void
-  HandleArgumentCompletion(CompletionRequest &request,
-                           OptionElementVector &opt_element_vector) override {
-    // I didn't make a type for RemoteRunArgs, but since we're going to run
-    // this on the remote system we should use the remote completer.
-    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
-        GetCommandInterpreter(), lldb::eRemoteDiskFileCompletion, request,
-        nullptr);
-  }
-
   ~CommandObjectPlatformProcessLaunch() override = default;
 
   Options *GetOptions() override { return &m_all_options; }
@@ -1520,6 +1552,13 @@ class CommandObjectPlatformProcessInfo : public 
CommandObjectParsed {
 
   ~CommandObjectPlatformProcessInfo() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eProcessIDCompletion, request, nullptr);
+  }
+
 protected:
   void DoExecute(Args &args, CommandReturnObject &result) override {
     Target *target = GetDebugger().GetSelectedTarget().get();
@@ -1811,7 +1850,7 @@ class CommandObjectPlatformInstall : public 
CommandObjectParsed {
             "Install a target (bundle or executable file) to the remote end.",
             "platform target-install <local-thing> <remote-sandbox>", 0) {
     CommandArgumentData local_arg{eArgTypePath, eArgRepeatPlain};
-    CommandArgumentData remote_arg{eArgTypeRemotePath, eArgRepeatPlain};
+    CommandArgumentData remote_arg{eArgTypePath, eArgRepeatPlain};
     m_arguments.push_back({local_arg});
     m_arguments.push_back({remote_arg});
   }

diff  --git a/lldb/source/Commands/CommandObjectPlugin.cpp 
b/lldb/source/Commands/CommandObjectPlugin.cpp
index da3b5f0518a690..f22885144b09b3 100644
--- a/lldb/source/Commands/CommandObjectPlugin.cpp
+++ b/lldb/source/Commands/CommandObjectPlugin.cpp
@@ -36,6 +36,13 @@ class CommandObjectPluginLoad : public CommandObjectParsed {
 
   ~CommandObjectPluginLoad() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     size_t argc = command.GetArgumentCount();

diff  --git a/lldb/source/Commands/CommandObjectProcess.cpp 
b/lldb/source/Commands/CommandObjectProcess.cpp
index 7cd5ad656f1b05..722b0e0c376be8 100644
--- a/lldb/source/Commands/CommandObjectProcess.cpp
+++ b/lldb/source/Commands/CommandObjectProcess.cpp
@@ -143,6 +143,14 @@ class CommandObjectProcessLaunch : public 
CommandObjectProcessLaunchOrAttach {
 
   ~CommandObjectProcessLaunch() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
   Options *GetOptions() override { return &m_all_options; }
 
   std::optional<std::string> GetRepeatCommand(Args &current_command_args,
@@ -1007,7 +1015,9 @@ class CommandObjectProcessLoad : public 
CommandObjectParsed {
                            OptionElementVector &opt_element_vector) override {
     if (!m_exe_ctx.HasProcessScope())
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
   }
 
   Options *GetOptions() override { return &m_options; }
@@ -1282,6 +1292,13 @@ class CommandObjectProcessSaveCore : public 
CommandObjectParsed {
 
   Options *GetOptions() override { return &m_options; }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
   class CommandOptions : public Options {
   public:
     CommandOptions() = default;

diff  --git a/lldb/source/Commands/CommandObjectRegister.cpp 
b/lldb/source/Commands/CommandObjectRegister.cpp
index 4ffdde1ee09f9f..a4d53e5c8dd5f1 100644
--- a/lldb/source/Commands/CommandObjectRegister.cpp
+++ b/lldb/source/Commands/CommandObjectRegister.cpp
@@ -80,7 +80,9 @@ class CommandObjectRegisterRead : public CommandObjectParsed {
                            OptionElementVector &opt_element_vector) override {
     if (!m_exe_ctx.HasProcessScope())
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eRegisterCompletion, request, nullptr);
   }
 
   Options *GetOptions() override { return &m_option_group; }
@@ -438,7 +440,8 @@ 
diff erent for the same register when connected to 
diff erent debug servers.)");
                            OptionElementVector &opt_element_vector) override {
     if (!m_exe_ctx.HasProcessScope() || request.GetCursorIndex() != 0)
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+    CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eRegisterCompletion, request, nullptr);
   }
 
 protected:

diff  --git a/lldb/source/Commands/CommandObjectSession.cpp 
b/lldb/source/Commands/CommandObjectSession.cpp
index 28506d6c59512d..d140bdfdba57b3 100644
--- a/lldb/source/Commands/CommandObjectSession.cpp
+++ b/lldb/source/Commands/CommandObjectSession.cpp
@@ -28,6 +28,13 @@ class CommandObjectSessionSave : public CommandObjectParsed {
 
   ~CommandObjectSessionSave() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
 protected:
   void DoExecute(Args &args, CommandReturnObject &result) override {
     llvm::StringRef file_path;

diff  --git a/lldb/source/Commands/CommandObjectSettings.cpp 
b/lldb/source/Commands/CommandObjectSettings.cpp
index 0cf3d1daf7f528..5fb7dcc80279fd 100644
--- a/lldb/source/Commands/CommandObjectSettings.cpp
+++ b/lldb/source/Commands/CommandObjectSettings.cpp
@@ -262,6 +262,14 @@ class CommandObjectSettingsShow : public 
CommandObjectParsed {
 
   ~CommandObjectSettingsShow() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eSettingsNameCompletion, request,
+        nullptr);
+  }
+
 protected:
   void DoExecute(Args &args, CommandReturnObject &result) override {
     result.SetStatus(eReturnStatusSuccessFinishResult);

diff  --git a/lldb/source/Commands/CommandObjectTarget.cpp 
b/lldb/source/Commands/CommandObjectTarget.cpp
index 4e006e4bb0e0fc..c3ecdb7700c256 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -257,6 +257,13 @@ class CommandObjectTargetCreate : public 
CommandObjectParsed {
 
   Options *GetOptions() override { return &m_option_group; }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     const size_t argc = command.GetArgumentCount();
@@ -2782,6 +2789,13 @@ class CommandObjectTargetModulesAdd : public 
CommandObjectParsed {
 
   Options *GetOptions() override { return &m_option_group; }
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
 protected:
   OptionGroupOptions m_option_group;
   OptionGroupUUID m_uuid_option_group;
@@ -3219,7 +3233,7 @@ class CommandObjectTargetModulesList : public 
CommandObjectParsed {
       : CommandObjectParsed(
             interpreter, "target modules list",
             "List current executable and dependent shared library images.") {
-    CommandArgumentData module_arg{eArgTypeModule, eArgRepeatStar};
+    CommandArgumentData module_arg{eArgTypeShlibName, eArgRepeatStar};
     m_arguments.push_back({module_arg});
   }
 
@@ -4329,6 +4343,13 @@ class CommandObjectTargetSymbolsAdd : public 
CommandObjectParsed {
 
   ~CommandObjectTargetSymbolsAdd() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eDiskFileCompletion, request, nullptr);
+  }
+
   Options *GetOptions() override { return &m_option_group; }
 
 protected:
@@ -5174,7 +5195,8 @@ class CommandObjectTargetStopHookDelete : public 
CommandObjectParsed {
                            OptionElementVector &opt_element_vector) override {
     if (request.GetCursorIndex())
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eStopHookIDCompletion, request, 
nullptr);
   }
 
 protected:
@@ -5229,7 +5251,8 @@ class CommandObjectTargetStopHookEnableDisable : public 
CommandObjectParsed {
                            OptionElementVector &opt_element_vector) override {
     if (request.GetCursorIndex())
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eStopHookIDCompletion, request, 
nullptr);
   }
 
 protected:

diff  --git a/lldb/source/Commands/CommandObjectThread.cpp 
b/lldb/source/Commands/CommandObjectThread.cpp
index 52e493b13c61ca..a1e7e3f11361e7 100644
--- a/lldb/source/Commands/CommandObjectThread.cpp
+++ b/lldb/source/Commands/CommandObjectThread.cpp
@@ -403,7 +403,10 @@ class CommandObjectThreadStepWithTypeAndScope : public 
CommandObjectParsed {
                            OptionElementVector &opt_element_vector) override {
     if (request.GetCursorIndex())
       return;
-    CommandObject::HandleArgumentCompletion(request, opt_element_vector);
+
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eThreadIndexCompletion, request,
+        nullptr);
   }
 
   Options *GetOptions() override { return &m_all_options; }
@@ -660,6 +663,14 @@ class CommandObjectThreadContinue : public 
CommandObjectParsed {
 
   ~CommandObjectThreadContinue() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eThreadIndexCompletion, request,
+        nullptr);
+  }
+
   void DoExecute(Args &command, CommandReturnObject &result) override {
     bool synchronous_execution = m_interpreter.GetSynchronous();
 

diff  --git a/lldb/source/Commands/CommandObjectType.cpp 
b/lldb/source/Commands/CommandObjectType.cpp
index 036b8e9d9def13..f76420f3cc6837 100644
--- a/lldb/source/Commands/CommandObjectType.cpp
+++ b/lldb/source/Commands/CommandObjectType.cpp
@@ -1758,6 +1758,14 @@ class CommandObjectTypeCategoryDefine : public 
CommandObjectParsed {
 
   ~CommandObjectTypeCategoryDefine() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eTypeCategoryNameCompletion, request,
+        nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     const size_t argc = command.GetArgumentCount();
@@ -1851,6 +1859,14 @@ class CommandObjectTypeCategoryEnable : public 
CommandObjectParsed {
 
   ~CommandObjectTypeCategoryEnable() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eTypeCategoryNameCompletion, request,
+        nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     const size_t argc = command.GetArgumentCount();
@@ -1910,6 +1926,14 @@ class CommandObjectTypeCategoryDelete : public 
CommandObjectParsed {
 
   ~CommandObjectTypeCategoryDelete() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eTypeCategoryNameCompletion, request,
+        nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     const size_t argc = command.GetArgumentCount();
@@ -2009,6 +2033,14 @@ class CommandObjectTypeCategoryDisable : public 
CommandObjectParsed {
 
   ~CommandObjectTypeCategoryDisable() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eTypeCategoryNameCompletion, request,
+        nullptr);
+  }
+
 protected:
   void DoExecute(Args &command, CommandReturnObject &result) override {
     const size_t argc = command.GetArgumentCount();

diff  --git a/lldb/source/Commands/CommandObjectWatchpoint.cpp 
b/lldb/source/Commands/CommandObjectWatchpoint.cpp
index 5b74b1ae43accc..438a16c50bd67f 100644
--- a/lldb/source/Commands/CommandObjectWatchpoint.cpp
+++ b/lldb/source/Commands/CommandObjectWatchpoint.cpp
@@ -831,6 +831,16 @@ corresponding to the byte size of the data type.");
 
   ~CommandObjectWatchpointSetVariable() override = default;
 
+  void
+  HandleArgumentCompletion(CompletionRequest &request,
+                           OptionElementVector &opt_element_vector) override {
+    if (request.GetCursorIndex() != 0)
+      return;
+    lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+        GetCommandInterpreter(), lldb::eVariablePathCompletion, request,
+        nullptr);
+  }
+
   Options *GetOptions() override { return &m_option_group; }
 
 protected:

diff  --git a/lldb/source/Interpreter/CommandObject.cpp 
b/lldb/source/Interpreter/CommandObject.cpp
index 93c53e89f7d1ae..6ed0fd1f1ddbd9 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -305,43 +305,6 @@ void CommandObject::HandleCompletion(CompletionRequest 
&request) {
   }
 }
 
-void CommandObject::HandleArgumentCompletion(
-    CompletionRequest &request, OptionElementVector &opt_element_vector) {
-  size_t num_arg_entries = GetNumArgumentEntries();
-  if (num_arg_entries != 1)
-    return;
-
-  CommandArgumentEntry *entry_ptr = GetArgumentEntryAtIndex(0);
-  if (!entry_ptr) {
-    assert(entry_ptr && "We said there was one entry, but there wasn't.");
-    return; // Not worth crashing if asserts are off...
-  }
-  
-  CommandArgumentEntry &entry = *entry_ptr;
-  // For now, we only handle the simple case of one homogenous argument type.
-  if (entry.size() != 1)
-    return;
-
-  // Look up the completion type, and if it has one, invoke it:
-  const CommandObject::ArgumentTableEntry *arg_entry =
-      FindArgumentDataByType(entry[0].arg_type);
-  const ArgumentRepetitionType repeat = entry[0].arg_repetition;
-
-  if (arg_entry == nullptr || arg_entry->completion_type == 
lldb::eNoCompletion)
-    return;
-
-  // FIXME: This should be handled higher in the Command Parser.
-  // Check the case where this command only takes one argument, and don't do
-  // the completion if we aren't on the first entry:
-  if (repeat == eArgRepeatPlain && request.GetCursorIndex() != 0)
-    return;
-
-  lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
-      GetCommandInterpreter(), arg_entry->completion_type, request, nullptr);
-
-}
-
-
 bool CommandObject::HelpTextContainsWord(llvm::StringRef search_word,
                                          bool search_short_help,
                                          bool search_long_help,

diff  --git a/lldb/test/API/commands/help/TestHelp.py 
b/lldb/test/API/commands/help/TestHelp.py
index f0f5bcb3218011..95ffdb3cc8b18b 100644
--- a/lldb/test/API/commands/help/TestHelp.py
+++ b/lldb/test/API/commands/help/TestHelp.py
@@ -104,7 +104,7 @@ def test_help_image_du_line_should_work(self):
     def test_help_image_list_shows_positional_args(self):
         """Command 'help image list' should describe positional args."""
         # 'image' is an alias for 'target modules'.
-        self.expect("help image list", substrs=["<module> [...]"])
+        self.expect("help image list", substrs=["<shlib-name> [...]"])
 
     @no_debug_info_test
     def test_help_target_variable_syntax(self):


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to