summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2024-09-20 21:35:08 +0200
committerGitHub <noreply@github.com>2024-09-20 21:35:08 +0200
commit621cadcf651b93757d5dbf8969023ae62a16f1a4 (patch)
tree79efec5d0c0dbfe1c1e1c9b71f04e9c8c2186d28 /core
parent2be730a05b7ff221b89c967981f7caee6e164ef0 (diff)
parent96382204736cbc131fbc2640ba6ba238c53017c0 (diff)
downloadredot-engine-621cadcf651b93757d5dbf8969023ae62a16f1a4.tar.gz
Merge pull request #97168 from Hilderin/fix-reloading-scripts-already-in-use
Fix reloading scripts already in use
Diffstat (limited to 'core')
-rw-r--r--core/object/script_language.cpp12
-rw-r--r--core/object/script_language.h5
2 files changed, 15 insertions, 2 deletions
diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp
index d2fc7392c8..c5856a8a81 100644
--- a/core/object/script_language.cpp
+++ b/core/object/script_language.cpp
@@ -191,7 +191,17 @@ void Script::reload_from_file() {
set_source_code(rel->get_source_code());
set_last_modified_time(rel->get_last_modified_time());
- reload();
+ // Only reload the script when there are no compilation errors to prevent printing the error messages twice.
+ if (rel->is_valid()) {
+ if (Engine::get_singleton()->is_editor_hint() && is_tool()) {
+ get_language()->reload_tool_script(this, true);
+ } else {
+ // It's important to set p_keep_state to true in order to manage reloading scripts
+ // that are currently instantiated.
+ reload(true);
+ }
+ }
+
#else
Resource::reload_from_file();
#endif
diff --git a/core/object/script_language.h b/core/object/script_language.h
index d0023d70e8..3ddfbb3e7d 100644
--- a/core/object/script_language.h
+++ b/core/object/script_language.h
@@ -112,7 +112,10 @@ class Script : public Resource {
OBJ_SAVE_TYPE(Script);
protected:
- virtual bool editor_can_reload_from_file() override { return false; } // this is handled by editor better
+ // Scripts are reloaded via the Script Editor when edited in Godot,
+ // the LSP server when edited in a connected external editor, or
+ // through EditorFileSystem::_update_script_documentation when updated directly on disk.
+ virtual bool editor_can_reload_from_file() override { return false; }
void _notification(int p_what);
static void _bind_methods();