@@ -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