Fix --gdscript-docs tool failing when autoloads are used in the project.

Fixes #79497
This commit is contained in:
Álex Román Núñez 2023-09-22 14:37:12 +02:00
parent fe5b1c8d49
commit 10697adb8a

View File

@ -1318,6 +1318,19 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
audio_driver = NULL_AUDIO_DRIVER; audio_driver = NULL_AUDIO_DRIVER;
display_driver = NULL_DISPLAY_DRIVER; display_driver = NULL_DISPLAY_DRIVER;
main_args.push_back(I->get()); main_args.push_back(I->get());
#ifdef MODULE_GDSCRIPT_ENABLED
} else if (I->get() == "--gdscript-docs") {
if (I->next()) {
project_path = I->next()->get();
// Will be handled in start()
main_args.push_back(I->get());
main_args.push_back(I->next()->get());
N = I->next()->next();
} else {
OS::get_singleton()->print("Missing relative or absolute path to project for --gdscript-docs, aborting.\n");
goto error;
}
#endif // MODULE_GDSCRIPT_ENABLED
#endif // TOOLS_ENABLED #endif // TOOLS_ENABLED
} else if (I->get() == "--path") { // set path of project to start or edit } else if (I->get() == "--path") { // set path of project to start or edit
@ -2806,39 +2819,7 @@ bool Main::start() {
} }
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#ifdef MODULE_GDSCRIPT_ENABLED if (!doc_tool_path.is_empty() && gdscript_docs_path.is_empty()) {
if (!doc_tool_path.is_empty() && !gdscript_docs_path.is_empty()) {
DocTools docs;
Error err;
Vector<String> paths = get_files_with_extension(gdscript_docs_path, "gd");
ERR_FAIL_COND_V_MSG(paths.size() == 0, false, "Couldn't find any GDScript files under the given directory: " + gdscript_docs_path);
for (const String &path : paths) {
Ref<GDScript> gdscript = ResourceLoader::load(path);
for (const DocData::ClassDoc &class_doc : gdscript->get_documentation()) {
docs.add_doc(class_doc);
}
}
if (doc_tool_path == ".") {
doc_tool_path = "./docs";
}
Ref<DirAccess> da = DirAccess::create_for_path(doc_tool_path);
err = da->make_dir_recursive(doc_tool_path);
ERR_FAIL_COND_V_MSG(err != OK, false, "Error: Can't create GDScript docs directory: " + doc_tool_path + ": " + itos(err));
HashMap<String, String> doc_data_classes;
err = docs.save_classes(doc_tool_path, doc_data_classes, false);
ERR_FAIL_COND_V_MSG(err != OK, false, "Error saving GDScript docs:" + itos(err));
OS::get_singleton()->set_exit_code(EXIT_SUCCESS);
return false;
}
#endif // MODULE_GDSCRIPT_ENABLED
if (!doc_tool_path.is_empty()) {
// Needed to instance editor-only classes for their default values // Needed to instance editor-only classes for their default values
Engine::get_singleton()->set_editor_hint(true); Engine::get_singleton()->set_editor_hint(true);
@ -3170,6 +3151,38 @@ bool Main::start() {
} }
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#ifdef MODULE_GDSCRIPT_ENABLED
if (!doc_tool_path.is_empty() && !gdscript_docs_path.is_empty()) {
DocTools docs;
Error err;
Vector<String> paths = get_files_with_extension(gdscript_docs_path, "gd");
ERR_FAIL_COND_V_MSG(paths.size() == 0, false, "Couldn't find any GDScript files under the given directory: " + gdscript_docs_path);
for (const String &path : paths) {
Ref<GDScript> gdscript = ResourceLoader::load(path);
for (const DocData::ClassDoc &class_doc : gdscript->get_documentation()) {
docs.add_doc(class_doc);
}
}
if (doc_tool_path == ".") {
doc_tool_path = "./docs";
}
Ref<DirAccess> da = DirAccess::create_for_path(doc_tool_path);
err = da->make_dir_recursive(doc_tool_path);
ERR_FAIL_COND_V_MSG(err != OK, false, "Error: Can't create GDScript docs directory: " + doc_tool_path + ": " + itos(err));
HashMap<String, String> doc_data_classes;
err = docs.save_classes(doc_tool_path, doc_data_classes, false);
ERR_FAIL_COND_V_MSG(err != OK, false, "Error saving GDScript docs:" + itos(err));
OS::get_singleton()->set_exit_code(EXIT_SUCCESS);
return false;
}
#endif // MODULE_GDSCRIPT_ENABLED
EditorNode *editor_node = nullptr; EditorNode *editor_node = nullptr;
if (editor) { if (editor) {
OS::get_singleton()->benchmark_begin_measure("editor"); OS::get_singleton()->benchmark_begin_measure("editor");