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:
parent
bdffea12d0
commit
c11a780ed6
|
@ -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;
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue