Use a CompletionRequest in the expression command completion [NFC]

The patch was originally written before we had a CompletionRequest,
so it still used a StringList to pass back the completions to
the request.

llvm-svn: 341124
This commit is contained in:
Raphael Isemann 2018-08-30 21:26:32 +00:00
parent bdffea12d0
commit c11a780ed6
7 changed files with 17 additions and 17 deletions

View File

@ -10,6 +10,7 @@
#ifndef liblldb_ExpressionParser_h_ #ifndef liblldb_ExpressionParser_h_
#define liblldb_ExpressionParser_h_ #define liblldb_ExpressionParser_h_
#include "lldb/Utility/CompletionRequest.h"
#include "lldb/Utility/Status.h" #include "lldb/Utility/Status.h"
#include "lldb/lldb-private-enumerations.h" #include "lldb/lldb-private-enumerations.h"
#include "lldb/lldb-public.h" #include "lldb/lldb-public.h"
@ -53,8 +54,8 @@ public:
/// Attempts to find possible command line completions for the given /// Attempts to find possible command line completions for the given
/// expression. /// expression.
/// ///
/// @param[out] matches /// @param[out] request
/// The list of completions that should be appended with string /// The completion request to fill out. The completion should be a string
/// that would complete the current token at the cursor position. /// that would complete the current token at the cursor position.
/// Note that the string in the list replaces the current token /// Note that the string in the list replaces the current token
/// in the command line. /// in the command line.
@ -81,7 +82,7 @@ public:
/// True if we added any completion results to the output; /// True if we added any completion results to the output;
/// false otherwise. /// false otherwise.
//------------------------------------------------------------------ //------------------------------------------------------------------
virtual bool Complete(StringList &matches, unsigned line, unsigned pos, virtual bool Complete(CompletionRequest &request, unsigned line, unsigned pos,
unsigned typed_pos) = 0; unsigned typed_pos) = 0;
//------------------------------------------------------------------ //------------------------------------------------------------------

View File

@ -121,7 +121,7 @@ public:
/// True if we added any completion results to the output; /// True if we added any completion results to the output;
/// false otherwise. /// false otherwise.
//------------------------------------------------------------------ //------------------------------------------------------------------
virtual bool Complete(ExecutionContext &exe_ctx, StringList &matches, virtual bool Complete(ExecutionContext &exe_ctx, CompletionRequest &request,
unsigned complete_pos) { unsigned complete_pos) {
return false; return false;
} }

View File

@ -369,9 +369,7 @@ int CommandObjectExpression::HandleCompletion(CompletionRequest &request) {
if (error.Fail()) if (error.Fail())
return 0; return 0;
StringList matches; expr->Complete(exe_ctx, request, cursor_pos);
expr->Complete(exe_ctx, matches, cursor_pos);
request.AddCompletions(matches);
return request.GetNumberOfMatches(); return request.GetNumberOfMatches();
} }

View File

@ -563,7 +563,7 @@ class CodeComplete : public CodeCompleteConsumer {
std::string m_expr; std::string m_expr;
unsigned m_position = 0; unsigned m_position = 0;
StringList &m_matches; CompletionRequest &m_request;
/// Returns true if the given character can be used in an identifier. /// Returns true if the given character can be used in an identifier.
/// This also returns true for numbers because for completion we usually /// This also returns true for numbers because for completion we usually
@ -638,10 +638,10 @@ public:
/// @param[out] position /// @param[out] position
/// The character position of the user cursor in the `expr` parameter. /// The character position of the user cursor in the `expr` parameter.
/// ///
CodeComplete(StringList &matches, std::string expr, unsigned position) CodeComplete(CompletionRequest &request, std::string expr, unsigned position)
: CodeCompleteConsumer(CodeCompleteOptions(), false), : CodeCompleteConsumer(CodeCompleteOptions(), false),
m_info(std::make_shared<GlobalCodeCompletionAllocator>()), m_expr(expr), m_info(std::make_shared<GlobalCodeCompletionAllocator>()), m_expr(expr),
m_position(position), m_matches(matches) {} m_position(position), m_request(request) {}
/// Deregisters and destroys this code-completion consumer. /// Deregisters and destroys this code-completion consumer.
virtual ~CodeComplete() {} virtual ~CodeComplete() {}
@ -735,7 +735,7 @@ public:
// with the kind of result the lldb API expects. // with the kind of result the lldb API expects.
std::string CompletionSuggestion = std::string CompletionSuggestion =
mergeCompletion(m_expr, m_position, ToInsert); mergeCompletion(m_expr, m_position, ToInsert);
m_matches.AppendString(CompletionSuggestion); m_request.AddCompletion(CompletionSuggestion);
} }
} }
} }
@ -763,7 +763,7 @@ public:
}; };
} // namespace } // namespace
bool ClangExpressionParser::Complete(StringList &matches, unsigned line, bool ClangExpressionParser::Complete(CompletionRequest &request, unsigned line,
unsigned pos, unsigned typed_pos) { unsigned pos, unsigned typed_pos) {
DiagnosticManager mgr; DiagnosticManager mgr;
// We need the raw user expression here because that's what the CodeComplete // We need the raw user expression here because that's what the CodeComplete
@ -773,7 +773,7 @@ bool ClangExpressionParser::Complete(StringList &matches, unsigned line,
// the LLVMUserExpression which exposes the right API. This should never fail // the LLVMUserExpression which exposes the right API. This should never fail
// as we always have a ClangUserExpression whenever we call this. // as we always have a ClangUserExpression whenever we call this.
LLVMUserExpression &llvm_expr = *static_cast<LLVMUserExpression *>(&m_expr); LLVMUserExpression &llvm_expr = *static_cast<LLVMUserExpression *>(&m_expr);
CodeComplete CC(matches, llvm_expr.GetUserText(), typed_pos); CodeComplete CC(request, llvm_expr.GetUserText(), typed_pos);
// We don't need a code generator for parsing. // We don't need a code generator for parsing.
m_code_generator.reset(); m_code_generator.reset();
// Start parsing the expression with our custom code completion consumer. // Start parsing the expression with our custom code completion consumer.

View File

@ -62,7 +62,7 @@ public:
//------------------------------------------------------------------ //------------------------------------------------------------------
~ClangExpressionParser() override; ~ClangExpressionParser() override;
bool Complete(StringList &matches, unsigned line, unsigned pos, bool Complete(CompletionRequest &request, unsigned line, unsigned pos,
unsigned typed_pos) override; unsigned typed_pos) override;
//------------------------------------------------------------------ //------------------------------------------------------------------

View File

@ -643,7 +643,8 @@ static void AbsPosToLineColumnPos(unsigned abs_pos, llvm::StringRef code,
} }
bool ClangUserExpression::Complete(ExecutionContext &exe_ctx, bool ClangUserExpression::Complete(ExecutionContext &exe_ctx,
StringList &matches, unsigned complete_pos) { CompletionRequest &request,
unsigned complete_pos) {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
// We don't want any visible feedback when completing an expression. Mostly // We don't want any visible feedback when completing an expression. Mostly
@ -709,7 +710,7 @@ bool ClangUserExpression::Complete(ExecutionContext &exe_ctx,
// The actual column where we have to complete is the start column of the // The actual column where we have to complete is the start column of the
// user expression + the offset inside the user code that we were given. // user expression + the offset inside the user code that we were given.
const unsigned completion_column = user_expr_column + complete_pos; const unsigned completion_column = user_expr_column + complete_pos;
parser.Complete(matches, user_expr_line, completion_column, complete_pos); parser.Complete(request, user_expr_line, completion_column, complete_pos);
return true; return true;
} }

View File

@ -143,7 +143,7 @@ public:
lldb_private::ExecutionPolicy execution_policy, lldb_private::ExecutionPolicy execution_policy,
bool keep_result_in_memory, bool generate_debug_info) override; bool keep_result_in_memory, bool generate_debug_info) override;
bool Complete(ExecutionContext &exe_ctx, StringList &matches, bool Complete(ExecutionContext &exe_ctx, CompletionRequest &request,
unsigned complete_pos) override; unsigned complete_pos) override;
ExpressionTypeSystemHelper *GetTypeSystemHelper() override { ExpressionTypeSystemHelper *GetTypeSystemHelper() override {