Skip to content

Commit 01913e0

Browse files
committed
Merge pull request #101156 from Hilderin/fix-documentation-tooltip-over-debug-tooltip
Fix documentation tooltip over debug tooltip
2 parents fdfa1f2 + 731a1ec commit 01913e0

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
@@ -1108,99 +1108,112 @@ void ScriptTextEditor::_show_symbol_tooltip(const String &p_symbol, int p_row, i
11081108
}
11091109

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

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

0 commit comments

Comments
 (0)