Skip to content

Commit 731a1ec

Browse files
committed
Fix documentation tooltip over debug tooltip
1 parent da4f933 commit 731a1ec

File tree

3 files changed

+97
-100
lines changed

3 files changed

+97
-100
lines changed

editor/plugins/script_editor_plugin.cpp

-14
Original file line numberDiff line numberDiff line change
@@ -497,19 +497,6 @@ ScriptEditor *ScriptEditor::script_editor = nullptr;
497497

498498
/*** SCRIPT EDITOR ******/
499499

500-
String ScriptEditor::_get_debug_tooltip(const String &p_text, Node *_se) {
501-
String val = EditorDebuggerNode::get_singleton()->get_var_value(p_text);
502-
const int display_limit = 300;
503-
if (!val.is_empty()) {
504-
if (val.size() > display_limit) {
505-
val = val.left(display_limit) + " [...] truncated!";
506-
}
507-
return p_text + ": " + val;
508-
} else {
509-
return String();
510-
}
511-
}
512-
513500
void ScriptEditor::_breaked(bool p_breaked, bool p_can_debug) {
514501
if (external_editor_active) {
515502
return;
@@ -2633,7 +2620,6 @@ bool ScriptEditor::edit(const Ref<Resource> &p_resource, int p_line, int p_col,
26332620
// If we delete a script within the filesystem, the original resource path
26342621
// is lost, so keep it as metadata to figure out the exact tab to delete.
26352622
se->set_meta("_edit_res_path", p_resource->get_path());
2636-
se->set_tooltip_request_func(callable_mp(this, &ScriptEditor::_get_debug_tooltip));
26372623
if (se->get_edit_menu()) {
26382624
se->get_edit_menu()->hide();
26392625
menu_hb->add_child(se->get_edit_menu());

editor/plugins/script_editor_plugin.h

-2
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,6 @@ class ScriptEditor : public PanelContainer {
378378

379379
bool restoring_layout;
380380

381-
String _get_debug_tooltip(const String &p_text, Node *_se);
382-
383381
void _resave_scripts(const String &p_str);
384382

385383
bool _test_script_times_on_disk(Ref<Resource> p_for_script = Ref<Resource>());

editor/plugins/script_text_editor.cpp

+97-84
Original file line numberDiff line numberDiff line change
@@ -1107,99 +1107,112 @@ void ScriptTextEditor::_show_symbol_tooltip(const String &p_symbol, int p_row, i
11071107
}
11081108

11091109
ScriptLanguage::LookupResult result;
1110+
String doc_symbol;
11101111
const String code_text = code_editor->get_text_editor()->get_text_with_cursor_char(p_row, p_column);
11111112
const Error lc_error = script->get_language()->lookup_code(code_text, p_symbol, script->get_path(), base, result);
1112-
if (lc_error != OK) {
1113-
return;
1114-
}
1115-
1116-
String doc_symbol;
1117-
switch (result.type) {
1118-
case ScriptLanguage::LOOKUP_RESULT_CLASS: {
1119-
doc_symbol = "class|" + result.class_name + "|";
1120-
} break;
1121-
case ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT: {
1122-
StringName cname = result.class_name;
1123-
while (ClassDB::class_exists(cname)) {
1124-
if (ClassDB::has_integer_constant(cname, result.class_member, true)) {
1125-
result.class_name = cname;
1126-
break;
1113+
if (lc_error == OK) {
1114+
switch (result.type) {
1115+
case ScriptLanguage::LOOKUP_RESULT_CLASS: {
1116+
doc_symbol = "class|" + result.class_name + "|";
1117+
} break;
1118+
case ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT: {
1119+
StringName cname = result.class_name;
1120+
while (ClassDB::class_exists(cname)) {
1121+
if (ClassDB::has_integer_constant(cname, result.class_member, true)) {
1122+
result.class_name = cname;
1123+
break;
1124+
}
1125+
cname = ClassDB::get_parent_class(cname);
11271126
}
1128-
cname = ClassDB::get_parent_class(cname);
1129-
}
1130-
doc_symbol = "constant|" + result.class_name + "|" + result.class_member;
1131-
} break;
1132-
case ScriptLanguage::LOOKUP_RESULT_CLASS_PROPERTY: {
1133-
StringName cname = result.class_name;
1134-
while (ClassDB::class_exists(cname)) {
1135-
if (ClassDB::has_property(cname, result.class_member, true)) {
1136-
result.class_name = cname;
1137-
break;
1127+
doc_symbol = "constant|" + result.class_name + "|" + result.class_member;
1128+
} break;
1129+
case ScriptLanguage::LOOKUP_RESULT_CLASS_PROPERTY: {
1130+
StringName cname = result.class_name;
1131+
while (ClassDB::class_exists(cname)) {
1132+
if (ClassDB::has_property(cname, result.class_member, true)) {
1133+
result.class_name = cname;
1134+
break;
1135+
}
1136+
cname = ClassDB::get_parent_class(cname);
11381137
}
1139-
cname = ClassDB::get_parent_class(cname);
1140-
}
1141-
doc_symbol = "property|" + result.class_name + "|" + result.class_member;
1142-
} break;
1143-
case ScriptLanguage::LOOKUP_RESULT_CLASS_METHOD: {
1144-
StringName cname = result.class_name;
1145-
while (ClassDB::class_exists(cname)) {
1146-
if (ClassDB::has_method(cname, result.class_member, true)) {
1147-
result.class_name = cname;
1148-
break;
1138+
doc_symbol = "property|" + result.class_name + "|" + result.class_member;
1139+
} break;
1140+
case ScriptLanguage::LOOKUP_RESULT_CLASS_METHOD: {
1141+
StringName cname = result.class_name;
1142+
while (ClassDB::class_exists(cname)) {
1143+
if (ClassDB::has_method(cname, result.class_member, true)) {
1144+
result.class_name = cname;
1145+
break;
1146+
}
1147+
cname = ClassDB::get_parent_class(cname);
11491148
}
1150-
cname = ClassDB::get_parent_class(cname);
1151-
}
1152-
doc_symbol = "method|" + result.class_name + "|" + result.class_member;
1153-
} break;
1154-
case ScriptLanguage::LOOKUP_RESULT_CLASS_SIGNAL: {
1155-
StringName cname = result.class_name;
1156-
while (ClassDB::class_exists(cname)) {
1157-
if (ClassDB::has_signal(cname, result.class_member, true)) {
1158-
result.class_name = cname;
1159-
break;
1149+
doc_symbol = "method|" + result.class_name + "|" + result.class_member;
1150+
} break;
1151+
case ScriptLanguage::LOOKUP_RESULT_CLASS_SIGNAL: {
1152+
StringName cname = result.class_name;
1153+
while (ClassDB::class_exists(cname)) {
1154+
if (ClassDB::has_signal(cname, result.class_member, true)) {
1155+
result.class_name = cname;
1156+
break;
1157+
}
1158+
cname = ClassDB::get_parent_class(cname);
11601159
}
1161-
cname = ClassDB::get_parent_class(cname);
1162-
}
1163-
doc_symbol = "signal|" + result.class_name + "|" + result.class_member;
1164-
} break;
1165-
case ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM: {
1166-
StringName cname = result.class_name;
1167-
while (ClassDB::class_exists(cname)) {
1168-
if (ClassDB::has_enum(cname, result.class_member, true)) {
1169-
result.class_name = cname;
1170-
break;
1160+
doc_symbol = "signal|" + result.class_name + "|" + result.class_member;
1161+
} break;
1162+
case ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM: {
1163+
StringName cname = result.class_name;
1164+
while (ClassDB::class_exists(cname)) {
1165+
if (ClassDB::has_enum(cname, result.class_member, true)) {
1166+
result.class_name = cname;
1167+
break;
1168+
}
1169+
cname = ClassDB::get_parent_class(cname);
11711170
}
1172-
cname = ClassDB::get_parent_class(cname);
1173-
}
1174-
doc_symbol = "enum|" + result.class_name + "|" + result.class_member;
1175-
} break;
1176-
case ScriptLanguage::LOOKUP_RESULT_CLASS_ANNOTATION: {
1177-
doc_symbol = "annotation|" + result.class_name + "|" + result.class_member;
1178-
} break;
1179-
case ScriptLanguage::LOOKUP_RESULT_LOCAL_CONSTANT:
1180-
case ScriptLanguage::LOOKUP_RESULT_LOCAL_VARIABLE: {
1181-
const String item_type = (result.type == ScriptLanguage::LOOKUP_RESULT_LOCAL_CONSTANT) ? "local_constant" : "local_variable";
1182-
Dictionary item_data;
1183-
item_data["description"] = result.description;
1184-
item_data["is_deprecated"] = result.is_deprecated;
1185-
item_data["deprecated_message"] = result.deprecated_message;
1186-
item_data["is_experimental"] = result.is_experimental;
1187-
item_data["experimental_message"] = result.experimental_message;
1188-
item_data["doc_type"] = result.doc_type;
1189-
item_data["enumeration"] = result.enumeration;
1190-
item_data["is_bitfield"] = result.is_bitfield;
1191-
item_data["value"] = result.value;
1192-
doc_symbol = item_type + "||" + p_symbol + "|" + JSON::stringify(item_data);
1193-
} break;
1194-
case ScriptLanguage::LOOKUP_RESULT_SCRIPT_LOCATION:
1195-
case ScriptLanguage::LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE: // Deprecated.
1196-
case ScriptLanguage::LOOKUP_RESULT_MAX: {
1197-
// Nothing to do.
1198-
} break;
1171+
doc_symbol = "enum|" + result.class_name + "|" + result.class_member;
1172+
} break;
1173+
case ScriptLanguage::LOOKUP_RESULT_CLASS_ANNOTATION: {
1174+
doc_symbol = "annotation|" + result.class_name + "|" + result.class_member;
1175+
} break;
1176+
case ScriptLanguage::LOOKUP_RESULT_LOCAL_CONSTANT:
1177+
case ScriptLanguage::LOOKUP_RESULT_LOCAL_VARIABLE: {
1178+
const String item_type = (result.type == ScriptLanguage::LOOKUP_RESULT_LOCAL_CONSTANT) ? "local_constant" : "local_variable";
1179+
Dictionary item_data;
1180+
item_data["description"] = result.description;
1181+
item_data["is_deprecated"] = result.is_deprecated;
1182+
item_data["deprecated_message"] = result.deprecated_message;
1183+
item_data["is_experimental"] = result.is_experimental;
1184+
item_data["experimental_message"] = result.experimental_message;
1185+
item_data["doc_type"] = result.doc_type;
1186+
item_data["enumeration"] = result.enumeration;
1187+
item_data["is_bitfield"] = result.is_bitfield;
1188+
item_data["value"] = result.value;
1189+
doc_symbol = item_type + "||" + p_symbol + "|" + JSON::stringify(item_data);
1190+
} break;
1191+
case ScriptLanguage::LOOKUP_RESULT_SCRIPT_LOCATION:
1192+
case ScriptLanguage::LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE: // Deprecated.
1193+
case ScriptLanguage::LOOKUP_RESULT_MAX: {
1194+
// Nothing to do.
1195+
} break;
1196+
}
1197+
}
1198+
1199+
String debug_value = EditorDebuggerNode::get_singleton()->get_var_value(p_symbol);
1200+
if (!debug_value.is_empty()) {
1201+
constexpr int DISPLAY_LIMIT = 1024;
1202+
if (debug_value.size() > DISPLAY_LIMIT) {
1203+
debug_value = debug_value.left(DISPLAY_LIMIT) + "... " + TTR("(truncated)");
1204+
}
1205+
debug_value = debug_value.replace("[", "[lb]");
1206+
1207+
if (doc_symbol.is_empty()) {
1208+
debug_value = p_symbol + ": " + debug_value;
1209+
} else {
1210+
debug_value = TTR("Current value: ") + debug_value;
1211+
}
11991212
}
12001213

1201-
if (!doc_symbol.is_empty()) {
1202-
EditorHelpBitTooltip::show_tooltip(code_editor->get_text_editor(), doc_symbol, String(), true);
1214+
if (!doc_symbol.is_empty() || !debug_value.is_empty()) {
1215+
EditorHelpBitTooltip::show_tooltip(code_editor->get_text_editor(), doc_symbol, debug_value, true);
12031216
}
12041217
}
12051218

0 commit comments

Comments
 (0)