void ScriptTextEditor::_code_complete_script(const String& p_code, List<String>* r_options) { Node *base = get_tree()->get_edited_scene_root(); if (base) { base = _find_node_for_script(base,base,script); } String hint; Error err = script->get_language()->complete_code(p_code,script->get_path().get_base_dir(),base,r_options,hint); if (hint!="") { code_editor->get_text_edit()->set_code_hint(hint); } }
static Node* _find_node_for_script(Node* p_base, Node*p_current, const Ref<Script>& p_script) { if (p_current->get_owner()!=p_base && p_base!=p_current) return NULL; Ref<Script> c = p_current->get_script(); if (c==p_script) return p_current; for(int i=0;i<p_current->get_child_count();i++) { Node *found = _find_node_for_script(p_base,p_current->get_child(i),p_script); if (found) return found; } return NULL; }
void ScriptTextEditor::_lookup_symbol(const String& p_symbol,int p_row, int p_column) { Node *base = get_tree()->get_edited_scene_root(); if (base) { base = _find_node_for_script(base,base,script); } ScriptLanguage::LookupResult result; if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(),p_symbol,script->get_path().get_base_dir(),base,result)==OK) { _goto_line(p_row); switch(result.type) { case ScriptLanguage::LookupResult::RESULT_SCRIPT_LOCATION: { if (result.script.is_valid()) { emit_signal("request_open_script_at_line",result.script,result.location-1); } else { emit_signal("request_save_history"); _goto_line(result.location-1); } } break; case ScriptLanguage::LookupResult::RESULT_CLASS: { emit_signal("go_to_help","class_name:"+result.class_name); } break; case ScriptLanguage::LookupResult::RESULT_CLASS_CONSTANT: { StringName cname = result.class_name; bool success; while(true) { ObjectTypeDB::get_integer_constant(cname,result.class_member,&success); if (success) { result.class_name=cname; cname=ObjectTypeDB::type_inherits_from(cname); } else { break; } } emit_signal("go_to_help","class_constant:"+result.class_name+":"+result.class_member); } break; case ScriptLanguage::LookupResult::RESULT_CLASS_PROPERTY: { emit_signal("go_to_help","class_property:"+result.class_name+":"+result.class_member); } break; case ScriptLanguage::LookupResult::RESULT_CLASS_METHOD: { StringName cname = result.class_name; while(true) { if (ObjectTypeDB::has_method(cname,result.class_member)) { result.class_name=cname; cname=ObjectTypeDB::type_inherits_from(cname); } else { break; } } emit_signal("go_to_help","class_method:"+result.class_name+":"+result.class_member); } break; } } }