[lldb][NFC] Use CompletionRequest in Variable::AutoComplete

llvm-svn: 369252
This commit is contained in:
Raphael Isemann 2019-08-19 11:49:43 +00:00
parent eb801abd58
commit 0684132107
1 changed files with 32 additions and 43 deletions

View File

@ -488,24 +488,21 @@ static void PrivateAutoComplete(
StackFrame *frame, llvm::StringRef partial_path,
const llvm::Twine
&prefix_path, // Anything that has been resolved already will be in here
const CompilerType &compiler_type,
StringList &matches, bool &word_complete);
const CompilerType &compiler_type, CompletionRequest &request);
static void PrivateAutoCompleteMembers(
StackFrame *frame, const std::string &partial_member_name,
llvm::StringRef partial_path,
const llvm::Twine
&prefix_path, // Anything that has been resolved already will be in here
const CompilerType &compiler_type,
StringList &matches, bool &word_complete);
const CompilerType &compiler_type, CompletionRequest &request);
static void PrivateAutoCompleteMembers(
StackFrame *frame, const std::string &partial_member_name,
llvm::StringRef partial_path,
const llvm::Twine
&prefix_path, // Anything that has been resolved already will be in here
const CompilerType &compiler_type,
StringList &matches, bool &word_complete) {
const CompilerType &compiler_type, CompletionRequest &request) {
// We are in a type parsing child members
const uint32_t num_bases = compiler_type.GetNumDirectBaseClasses();
@ -515,9 +512,9 @@ static void PrivateAutoCompleteMembers(
CompilerType base_class_type =
compiler_type.GetDirectBaseClassAtIndex(i, nullptr);
PrivateAutoCompleteMembers(
frame, partial_member_name, partial_path, prefix_path,
base_class_type.GetCanonicalType(), matches, word_complete);
PrivateAutoCompleteMembers(frame, partial_member_name, partial_path,
prefix_path,
base_class_type.GetCanonicalType(), request);
}
}
@ -528,9 +525,9 @@ static void PrivateAutoCompleteMembers(
CompilerType vbase_class_type =
compiler_type.GetVirtualBaseClassAtIndex(i, nullptr);
PrivateAutoCompleteMembers(
frame, partial_member_name, partial_path, prefix_path,
vbase_class_type.GetCanonicalType(), matches, word_complete);
PrivateAutoCompleteMembers(frame, partial_member_name, partial_path,
prefix_path,
vbase_class_type.GetCanonicalType(), request);
}
}
@ -551,9 +548,9 @@ static void PrivateAutoCompleteMembers(
frame, partial_path,
prefix_path + member_name, // Anything that has been resolved
// already will be in here
member_compiler_type.GetCanonicalType(), matches, word_complete);
member_compiler_type.GetCanonicalType(), request);
} else {
matches.AppendString((prefix_path + member_name).str());
request.AddCompletion((prefix_path + member_name).str());
}
}
}
@ -564,8 +561,7 @@ static void PrivateAutoComplete(
StackFrame *frame, llvm::StringRef partial_path,
const llvm::Twine
&prefix_path, // Anything that has been resolved already will be in here
const CompilerType &compiler_type,
StringList &matches, bool &word_complete) {
const CompilerType &compiler_type, CompletionRequest &request) {
// printf ("\nPrivateAutoComplete()\n\tprefix_path = '%s'\n\tpartial_path =
// '%s'\n", prefix_path.c_str(), partial_path.c_str());
std::string remaining_partial_path;
@ -586,15 +582,15 @@ static void PrivateAutoComplete(
case eTypeClassReference:
case eTypeClassTypedef:
case eTypeClassVector: {
matches.AppendString(prefix_path.str());
word_complete = matches.GetSize() == 1;
request.AddCompletion(prefix_path.str());
request.SetWordComplete(true);
} break;
case eTypeClassClass:
case eTypeClassStruct:
case eTypeClassUnion:
if (prefix_path.str().back() != '.')
matches.AppendString((prefix_path + ".").str());
request.AddCompletion((prefix_path + ".").str());
break;
case eTypeClassObjCObject:
@ -604,10 +600,10 @@ static void PrivateAutoComplete(
case eTypeClassPointer: {
bool omit_empty_base_classes = true;
if (compiler_type.GetNumChildren(omit_empty_base_classes, nullptr) > 0)
matches.AppendString((prefix_path + "->").str());
request.AddCompletion((prefix_path + "->").str());
else {
matches.AppendString(prefix_path.str());
word_complete = true;
request.AddCompletion(prefix_path.str());
request.SetWordComplete(true);
}
} break;
}
@ -621,7 +617,7 @@ static void PrivateAutoComplete(
const size_t num_variables = variable_list->GetSize();
for (size_t i = 0; i < num_variables; ++i) {
Variable *variable = variable_list->GetVariableAtIndex(i).get();
matches.AppendString(variable->GetName().AsCString());
request.AddCompletion(variable->GetName().AsCString());
}
}
}
@ -632,14 +628,14 @@ static void PrivateAutoComplete(
case '*':
if (prefix_path.str().empty()) {
PrivateAutoComplete(frame, partial_path.substr(1), "*", compiler_type,
matches, word_complete);
request);
}
break;
case '&':
if (prefix_path.isTriviallyEmpty()) {
PrivateAutoComplete(frame, partial_path.substr(1), std::string("&"),
compiler_type, matches, word_complete);
compiler_type, request);
}
break;
@ -651,14 +647,14 @@ static void PrivateAutoComplete(
CompilerType pointee_type(compiler_type.GetPointeeType());
if (partial_path.size() > 2 && partial_path[2]) {
// If there is more after the "->", then search deeper
PrivateAutoComplete(
frame, partial_path.substr(2), prefix_path + "->",
pointee_type.GetCanonicalType(), matches, word_complete);
PrivateAutoComplete(frame, partial_path.substr(2),
prefix_path + "->",
pointee_type.GetCanonicalType(), request);
} else {
// Nothing after the "->", so list all members
PrivateAutoCompleteMembers(
frame, std::string(), std::string(), prefix_path + "->",
pointee_type.GetCanonicalType(), matches, word_complete);
pointee_type.GetCanonicalType(), request);
}
} break;
default:
@ -676,14 +672,13 @@ static void PrivateAutoComplete(
if (partial_path.size() > 1 && partial_path[1]) {
// If there is more after the ".", then search deeper
PrivateAutoComplete(frame, partial_path.substr(1),
prefix_path + ".", compiler_type, matches,
word_complete);
prefix_path + ".", compiler_type, request);
} else {
// Nothing after the ".", so list all members
PrivateAutoCompleteMembers(frame, std::string(), partial_path,
prefix_path + ".", compiler_type,
matches, word_complete);
request);
}
break;
default:
@ -709,8 +704,7 @@ static void PrivateAutoComplete(
if (compiler_type.IsValid()) {
PrivateAutoCompleteMembers(frame, token, remaining_partial_path,
prefix_path, compiler_type, matches,
word_complete);
prefix_path, compiler_type, request);
} else if (frame) {
// We haven't found our variable yet
const bool get_file_globals = true;
@ -739,13 +733,12 @@ static void PrivateAutoComplete(
frame, remaining_partial_path,
prefix_path + token, // Anything that has been resolved
// already will be in here
variable_compiler_type.GetCanonicalType(), matches,
word_complete);
variable_compiler_type.GetCanonicalType(), request);
} else {
matches.AppendString((prefix_path + variable_name).str());
request.AddCompletion((prefix_path + variable_name).str());
}
} else if (remaining_partial_path.empty()) {
matches.AppendString((prefix_path + variable_name).str());
request.AddCompletion((prefix_path + variable_name).str());
}
}
}
@ -760,12 +753,8 @@ size_t Variable::AutoComplete(const ExecutionContext &exe_ctx,
CompletionRequest &request) {
CompilerType compiler_type;
bool word_complete = false;
StringList matches;
PrivateAutoComplete(exe_ctx.GetFramePtr(), request.GetCursorArgumentPrefix(),
"", compiler_type, matches, word_complete);
request.SetWordComplete(word_complete);
request.AddCompletions(matches);
"", compiler_type, request);
return request.GetNumberOfMatches();
}