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