Summary: This patch adds initial code completion support for the `expr` command. We now have a completion handler in the expression CommandObject that essentially just attempts to parse the given user expression with Clang with an attached code completion consumer. We filter and prepare the code completions provided by Clang and send them back to the completion API. The current completion is limited to variables that are in the current scope. This includes local variables and all types used by local variables. We however don't do any completion of symbols that are not used in the local scope (or in some other way already in the ASTContext). This is partly because there is not yet any code that manually searches for additiona information in the debug information. Another cause is that for some reason the existing code for loading these additional symbols when requested by Clang doesn't seem to work. This will be fixed in a future patch. Reviewers: jingham, teemperor Reviewed By: teemperor Subscribers: labath, aprantl, JDevlieghere, friss, lldb-commits Differential Revision: https://reviews.llvm.org/D48465 llvm-svn: 341086
98 lines
3.1 KiB
C++
98 lines
3.1 KiB
C++
//===-- CommandObjectExpression.h -------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_CommandObjectExpression_h_
|
|
#define liblldb_CommandObjectExpression_h_
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/Core/IOHandler.h"
|
|
#include "lldb/Interpreter/CommandObject.h"
|
|
#include "lldb/Interpreter/OptionGroupBoolean.h"
|
|
#include "lldb/Interpreter/OptionGroupFormat.h"
|
|
#include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
|
|
#include "lldb/Target/ExecutionContext.h"
|
|
#include "lldb/lldb-private-enumerations.h"
|
|
namespace lldb_private {
|
|
|
|
class CommandObjectExpression : public CommandObjectRaw,
|
|
public IOHandlerDelegate {
|
|
public:
|
|
class CommandOptions : public OptionGroup {
|
|
public:
|
|
CommandOptions();
|
|
|
|
~CommandOptions() override;
|
|
|
|
llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
|
|
|
|
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
|
|
ExecutionContext *execution_context) override;
|
|
|
|
void OptionParsingStarting(ExecutionContext *execution_context) override;
|
|
|
|
// Options table: Required for subclasses of Options.
|
|
|
|
static OptionDefinition g_option_table[];
|
|
bool top_level;
|
|
bool unwind_on_error;
|
|
bool ignore_breakpoints;
|
|
bool allow_jit;
|
|
bool show_types;
|
|
bool show_summary;
|
|
bool debug;
|
|
uint32_t timeout;
|
|
bool try_all_threads;
|
|
lldb::LanguageType language;
|
|
LanguageRuntimeDescriptionDisplayVerbosity m_verbosity;
|
|
LazyBool auto_apply_fixits;
|
|
};
|
|
|
|
CommandObjectExpression(CommandInterpreter &interpreter);
|
|
|
|
~CommandObjectExpression() override;
|
|
|
|
Options *GetOptions() override;
|
|
|
|
int HandleCompletion(CompletionRequest &request) override;
|
|
|
|
protected:
|
|
//------------------------------------------------------------------
|
|
// IOHandler::Delegate functions
|
|
//------------------------------------------------------------------
|
|
void IOHandlerInputComplete(IOHandler &io_handler,
|
|
std::string &line) override;
|
|
|
|
bool IOHandlerIsInputComplete(IOHandler &io_handler,
|
|
StringList &lines) override;
|
|
|
|
bool DoExecute(llvm::StringRef command, CommandReturnObject &result) override;
|
|
|
|
bool EvaluateExpression(llvm::StringRef expr, Stream *output_stream,
|
|
Stream *error_stream,
|
|
CommandReturnObject *result = NULL);
|
|
|
|
void GetMultilineExpression();
|
|
|
|
OptionGroupOptions m_option_group;
|
|
OptionGroupFormat m_format_options;
|
|
OptionGroupValueObjectDisplay m_varobj_options;
|
|
OptionGroupBoolean m_repl_option;
|
|
CommandOptions m_command_options;
|
|
uint32_t m_expr_line_count;
|
|
std::string m_expr_lines; // Multi-line expression support
|
|
std::string m_fixed_expression; // Holds the current expression's fixed text.
|
|
};
|
|
|
|
} // namespace lldb_private
|
|
|
|
#endif // liblldb_CommandObjectExpression_h_
|