Merge pull request #8444 from magyar123/pr-complete-paths
Script editor now automatically completes file paths in GDScript
This commit is contained in:
commit
9acfb0782c
4 changed files with 33 additions and 0 deletions
|
@ -557,6 +557,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
||||||
hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.fnt");
|
hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.fnt");
|
||||||
set("text_editor/completion/auto_brace_complete", false);
|
set("text_editor/completion/auto_brace_complete", false);
|
||||||
set("text_editor/files/restore_scripts_on_load", true);
|
set("text_editor/files/restore_scripts_on_load", true);
|
||||||
|
set("text_editor/completion/complete_file_paths", true);
|
||||||
|
|
||||||
//set("docks/scene_tree/display_old_action_buttons",false);
|
//set("docks/scene_tree/display_old_action_buttons",false);
|
||||||
set("docks/scene_tree/start_create_dialog_fully_expanded", false);
|
set("docks/scene_tree/start_create_dialog_fully_expanded", false);
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
#include "gd_script.h"
|
#include "gd_script.h"
|
||||||
#include "global_config.h"
|
#include "global_config.h"
|
||||||
#include "os/file_access.h"
|
#include "os/file_access.h"
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
#include "editor/editor_file_system.h"
|
||||||
|
#include "editor/editor_settings.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
void GDScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
|
void GDScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
|
||||||
|
|
||||||
|
@ -1406,6 +1410,17 @@ static void _make_function_hint(const GDParser::FunctionNode *p_func, int p_argi
|
||||||
arghint += ")";
|
arghint += ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_directory_contents(EditorFileSystemDirectory *p_dir, Set<String> &r_list) {
|
||||||
|
|
||||||
|
for (int i = 0; i < p_dir->get_subdir_count(); i++) {
|
||||||
|
get_directory_contents(p_dir->get_subdir(i), r_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < p_dir->get_file_count(); i++) {
|
||||||
|
r_list.insert("\"" + p_dir->get_file_path(i) + "\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void _find_type_arguments(GDCompletionContext &context, const GDParser::Node *p_node, int p_line, const StringName &p_method, const GDCompletionIdentifier &id, int p_argidx, Set<String> &result, String &arghint) {
|
static void _find_type_arguments(GDCompletionContext &context, const GDParser::Node *p_node, int p_line, const StringName &p_method, const GDCompletionIdentifier &id, int p_argidx, Set<String> &result, String &arghint) {
|
||||||
|
|
||||||
//print_line("find type arguments?");
|
//print_line("find type arguments?");
|
||||||
|
@ -1754,6 +1769,10 @@ static void _find_call_arguments(GDCompletionContext &context, const GDParser::N
|
||||||
const GDParser::BuiltInFunctionNode *fn = static_cast<const GDParser::BuiltInFunctionNode *>(op->arguments[0]);
|
const GDParser::BuiltInFunctionNode *fn = static_cast<const GDParser::BuiltInFunctionNode *>(op->arguments[0]);
|
||||||
MethodInfo mi = GDFunctions::get_info(fn->function);
|
MethodInfo mi = GDFunctions::get_info(fn->function);
|
||||||
|
|
||||||
|
if (mi.name == "load" && bool(EditorSettings::get_singleton()->get("text_editor/completion/complete_file_paths"))) {
|
||||||
|
get_directory_contents(EditorFileSystem::get_singleton()->get_filesystem(), result);
|
||||||
|
}
|
||||||
|
|
||||||
arghint = _get_visual_datatype(mi.return_val, false) + " " + GDFunctions::get_func_name(fn->function) + String("(");
|
arghint = _get_visual_datatype(mi.return_val, false) + " " + GDFunctions::get_func_name(fn->function) + String("(");
|
||||||
for (int i = 0; i < mi.arguments.size(); i++) {
|
for (int i = 0; i < mi.arguments.size(); i++) {
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
|
@ -2375,6 +2394,11 @@ Error GDScriptLanguage::complete_code(const String &p_code, const String &p_base
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
case GDParser::COMPLETION_PRELOAD: {
|
||||||
|
|
||||||
|
if (EditorSettings::get_singleton()->get("text_editor/completion/complete_file_paths"))
|
||||||
|
get_directory_contents(EditorFileSystem::get_singleton()->get_filesystem(), options);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Set<String>::Element *E = options.front(); E; E = E->next()) {
|
for (Set<String>::Element *E = options.front(); E; E = E->next()) {
|
||||||
|
|
|
@ -387,6 +387,13 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
|
||||||
_set_error("Expected '(' after 'preload'");
|
_set_error("Expected '(' after 'preload'");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
completion_cursor = StringName();
|
||||||
|
completion_type = COMPLETION_PRELOAD;
|
||||||
|
completion_class = current_class;
|
||||||
|
completion_function = current_function;
|
||||||
|
completion_line = tokenizer->get_token_line();
|
||||||
|
completion_block = current_block;
|
||||||
|
completion_found = true;
|
||||||
tokenizer->advance();
|
tokenizer->advance();
|
||||||
|
|
||||||
String path;
|
String path;
|
||||||
|
|
|
@ -437,6 +437,7 @@ public:
|
||||||
COMPLETION_PARENT_FUNCTION,
|
COMPLETION_PARENT_FUNCTION,
|
||||||
COMPLETION_METHOD,
|
COMPLETION_METHOD,
|
||||||
COMPLETION_CALL_ARGUMENTS,
|
COMPLETION_CALL_ARGUMENTS,
|
||||||
|
COMPLETION_PRELOAD,
|
||||||
COMPLETION_INDEX,
|
COMPLETION_INDEX,
|
||||||
COMPLETION_VIRTUAL_FUNC,
|
COMPLETION_VIRTUAL_FUNC,
|
||||||
COMPLETION_YIELD,
|
COMPLETION_YIELD,
|
||||||
|
|
Loading…
Reference in a new issue