summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuri Sizov <yuris@humnom.net>2023-12-20 15:07:44 +0100
committerYuri Sizov <yuris@humnom.net>2023-12-20 15:07:44 +0100
commit40e71923932962eebc7e59c52492b9250afb3ff9 (patch)
treefaeae0202818f82389d78c757824d403705d959a
parent718598e470300daa92043216d0c59e25e3e2da66 (diff)
parentd5847fa54e42e89cc784ee2c48b6b3c77ff21981 (diff)
downloadredot-engine-40e71923932962eebc7e59c52492b9250afb3ff9.tar.gz
Merge pull request #85191 from HolonProduction/off-by-one-code-edit
Fix updating delimiter cache of `CodeEdit` when typing on the first line
-rw-r--r--scene/gui/code_edit.cpp2
-rw-r--r--tests/scene/test_code_edit.h26
2 files changed, 27 insertions, 1 deletions
diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp
index cd11ec0445..e63e1ee42a 100644
--- a/scene/gui/code_edit.cpp
+++ b/scene/gui/code_edit.cpp
@@ -2925,7 +2925,7 @@ void CodeEdit::_update_delimiter_cache(int p_from_line, int p_to_line) {
int in_region = -1;
for (int i = start_line; i < MIN(end_line + 1, line_count); i++) {
- int current_end_region = (i <= 0 || delimiter_cache[i].size() < 1) ? -1 : delimiter_cache[i].back()->value();
+ int current_end_region = (i < 0 || delimiter_cache[i].size() < 1) ? -1 : delimiter_cache[i].back()->value();
in_region = (i <= 0 || delimiter_cache[i - 1].size() < 1) ? -1 : delimiter_cache[i - 1].back()->value();
const String &str = get_line(i);
diff --git a/tests/scene/test_code_edit.h b/tests/scene/test_code_edit.h
index c3a374b5cd..7d98372327 100644
--- a/tests/scene/test_code_edit.h
+++ b/tests/scene/test_code_edit.h
@@ -1503,6 +1503,19 @@ TEST_CASE("[SceneTree][CodeEdit] delimiters") {
CHECK(code_edit->is_in_string(1) == -1);
CHECK(code_edit->is_in_string(2) != -1);
CHECK(code_edit->is_in_string(3) == -1);
+
+ /* Next check updating the delimiter cache while typing. */
+ code_edit->set_text("\n\n");
+ code_edit->set_caret_line(0);
+ code_edit->set_caret_column(0);
+ CHECK(code_edit->is_in_string(0) == -1);
+ CHECK(code_edit->is_in_string(1) == -1);
+ code_edit->insert_text_at_caret("#");
+ CHECK(code_edit->is_in_string(0) != -1);
+ CHECK(code_edit->is_in_string(1) != -1);
+ code_edit->insert_text_at_caret("#");
+ CHECK(code_edit->is_in_string(0) != -1);
+ CHECK(code_edit->is_in_string(1) == -1);
}
SUBCASE("[CodeEdit] multiline comment delimiters") {
@@ -1692,6 +1705,19 @@ TEST_CASE("[SceneTree][CodeEdit] delimiters") {
CHECK(code_edit->is_in_comment(1) == -1);
CHECK(code_edit->is_in_comment(2) != -1);
CHECK(code_edit->is_in_comment(3) == -1);
+
+ /* Next check updating the delimiter cache while typing. */
+ code_edit->set_text("\n\n");
+ code_edit->set_caret_line(0);
+ code_edit->set_caret_column(0);
+ CHECK(code_edit->is_in_comment(0) == -1);
+ CHECK(code_edit->is_in_comment(1) == -1);
+ code_edit->insert_text_at_caret("#");
+ CHECK(code_edit->is_in_comment(0) != -1);
+ CHECK(code_edit->is_in_comment(1) != -1);
+ code_edit->insert_text_at_caret("#");
+ CHECK(code_edit->is_in_comment(0) != -1);
+ CHECK(code_edit->is_in_comment(1) == -1);
}
SUBCASE("[CodeEdit] multiline mixed delimiters") {