summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands/CommandCompletions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Commands/CommandCompletions.cpp')
-rw-r--r--lldb/source/Commands/CommandCompletions.cpp33
1 files changed, 24 insertions, 9 deletions
diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp
index dbeb564b08b..bb8b8aa7caa 100644
--- a/lldb/source/Commands/CommandCompletions.cpp
+++ b/lldb/source/Commands/CommandCompletions.cpp
@@ -405,15 +405,30 @@ CommandCompletions::SettingsNames (CommandInterpreter &interpreter,
bool &word_complete,
StringList &matches)
{
- lldb::UserSettingsControllerSP root_settings = Debugger::GetSettingsController();
- Args partial_setting_name_pieces = UserSettingsController::BreakNameIntoPieces (partial_setting_name);
-
- return UserSettingsController::CompleteSettingsNames (root_settings,
- partial_setting_name_pieces,
- word_complete,
- matches);
-
- //return matches.GetSize();
+ // Cache the full setting name list
+ static StringList g_property_names;
+ if (g_property_names.GetSize() == 0)
+ {
+ // Generate the full setting name list on demand
+ lldb::OptionValuePropertiesSP properties_sp (interpreter.GetDebugger().GetValueProperties());
+ if (properties_sp)
+ {
+ StreamString strm;
+ properties_sp->DumpValue(NULL, strm, OptionValue::eDumpOptionName);
+ const std::string &str = strm.GetString();
+ g_property_names.SplitIntoLines(str.c_str(), str.size());
+ }
+ }
+
+ size_t exact_matches_idx = SIZE_MAX;
+ const size_t num_matches = g_property_names.AutoComplete (partial_setting_name, matches, exact_matches_idx);
+// return UserSettingsController::CompleteSettingsNames (root_settings,
+// partial_setting_name_pieces,
+// word_complete,
+// matches);
+//
+ word_complete = exact_matches_idx != SIZE_MAX;
+ return num_matches;
}
OpenPOWER on IntegriCloud