acoomans created this revision.
acoomans added a reviewer: lldb-commits.

This adds autocompletion for the `expression` (and thus `print` and `p`) 
commands. Variables and symbols are suggested.

For example: let's assume we have a struct called //my_struct//. We break, then 
run:

  (lldb) p my_ [TAB]

will autocomplete to:

  (lldb) p my_struct

Now let's assume we run:

  (lldb) p m [TAB]

we'll get suggestions from all corresponding symbols like this:

  Available completions:
        mach_absolute_time
        mach_approximate_time
        mach_boottime_usec
        mach_continuous_approximate_time
        mach_continuous_time
        mach_error
  [...]
  More (Y/n/a):


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D50802

Files:
  source/Commands/CommandObjectExpression.cpp
  source/Commands/CommandObjectExpression.h


Index: source/Commands/CommandObjectExpression.h
===================================================================
--- source/Commands/CommandObjectExpression.h
+++ source/Commands/CommandObjectExpression.h
@@ -62,6 +62,8 @@
 
   Options *GetOptions() override;
 
+  int HandleArgumentCompletion(CompletionRequest &request, OptionElementVector 
&opt_element_vector) override;
+
 protected:
   //------------------------------------------------------------------
   // IOHandler::Delegate functions
@@ -80,6 +82,8 @@
 
   void GetMultilineExpression();
 
+    bool WantsRawCommandString() override { return false; }
+
   OptionGroupOptions m_option_group;
   OptionGroupFormat m_format_options;
   OptionGroupValueObjectDisplay m_varobj_options;
Index: source/Commands/CommandObjectExpression.cpp
===================================================================
--- source/Commands/CommandObjectExpression.cpp
+++ source/Commands/CommandObjectExpression.cpp
@@ -307,6 +307,16 @@
 
 Options *CommandObjectExpression::GetOptions() { return &m_option_group; }
 
+int CommandObjectExpression::HandleArgumentCompletion(CompletionRequest 
&request,
+                                                      OptionElementVector 
&opt_element_vector)   {
+  CommandCompletions::InvokeCommonCompletionCallbacks(
+          GetCommandInterpreter(),
+          CommandCompletions::eVariablePathCompletion | 
CommandCompletions::eSymbolCompletion,
+          request,
+          nullptr);
+  return request.GetNumberOfMatches();
+}
+
 static lldb_private::Status
 CanBeUsedForElementCountPrinting(ValueObject &valobj) {
   CompilerType type(valobj.GetCompilerType());


Index: source/Commands/CommandObjectExpression.h
===================================================================
--- source/Commands/CommandObjectExpression.h
+++ source/Commands/CommandObjectExpression.h
@@ -62,6 +62,8 @@
 
   Options *GetOptions() override;
 
+  int HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override;
+
 protected:
   //------------------------------------------------------------------
   // IOHandler::Delegate functions
@@ -80,6 +82,8 @@
 
   void GetMultilineExpression();
 
+    bool WantsRawCommandString() override { return false; }
+
   OptionGroupOptions m_option_group;
   OptionGroupFormat m_format_options;
   OptionGroupValueObjectDisplay m_varobj_options;
Index: source/Commands/CommandObjectExpression.cpp
===================================================================
--- source/Commands/CommandObjectExpression.cpp
+++ source/Commands/CommandObjectExpression.cpp
@@ -307,6 +307,16 @@
 
 Options *CommandObjectExpression::GetOptions() { return &m_option_group; }
 
+int CommandObjectExpression::HandleArgumentCompletion(CompletionRequest &request,
+                                                      OptionElementVector &opt_element_vector)   {
+  CommandCompletions::InvokeCommonCompletionCallbacks(
+          GetCommandInterpreter(),
+          CommandCompletions::eVariablePathCompletion | CommandCompletions::eSymbolCompletion,
+          request,
+          nullptr);
+  return request.GetNumberOfMatches();
+}
+
 static lldb_private::Status
 CanBeUsedForElementCountPrinting(ValueObject &valobj) {
   CompilerType type(valobj.GetCompilerType());
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to