From 6e54e55083c2dec32123970e9597b3161003118c Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Sat, 10 May 2025 14:25:35 +0200 Subject: [PATCH] =?UTF-8?q?fix:=C2=A0Restrict=20commutativity=20of=20initi?= =?UTF-8?q?alizer=5Flist=20in=20C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/cpp/working/json_in_cpp/Base.cpp | 5 +++++ examples/cpp/working/json_in_cpp/Expected.cpp | 17 +++++++++++++++++ examples/cpp/working/json_in_cpp/Left.cpp | 6 ++++++ examples/cpp/working/json_in_cpp/README | 1 + examples/cpp/working/json_in_cpp/Right.cpp | 6 ++++++ .../Base.c | 3 +++ .../Expected.c | 11 +++++++++++ .../Left.c | 4 ++++ .../Right.c | 4 ++++ src/supported_langs.rs | 3 ++- 10 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 examples/cpp/working/json_in_cpp/Base.cpp create mode 100644 examples/cpp/working/json_in_cpp/Expected.cpp create mode 100644 examples/cpp/working/json_in_cpp/Left.cpp create mode 100644 examples/cpp/working/json_in_cpp/README create mode 100644 examples/cpp/working/json_in_cpp/Right.cpp create mode 100644 examples/cpp/working/positional_argument_in_initializer_list/Base.c create mode 100644 examples/cpp/working/positional_argument_in_initializer_list/Expected.c create mode 100644 examples/cpp/working/positional_argument_in_initializer_list/Left.c create mode 100644 examples/cpp/working/positional_argument_in_initializer_list/Right.c diff --git a/examples/cpp/working/json_in_cpp/Base.cpp b/examples/cpp/working/json_in_cpp/Base.cpp new file mode 100644 index 0000000..b80b216 --- /dev/null +++ b/examples/cpp/working/json_in_cpp/Base.cpp @@ -0,0 +1,5 @@ +json func() { + return json{{"num", 0}, + {"obj", {{"a", 1}, {"b", 2}}}, + {"list", json::array({{{"a", 3}, {"b", 4}}})}}; +} diff --git a/examples/cpp/working/json_in_cpp/Expected.cpp b/examples/cpp/working/json_in_cpp/Expected.cpp new file mode 100644 index 0000000..3f10389 --- /dev/null +++ b/examples/cpp/working/json_in_cpp/Expected.cpp @@ -0,0 +1,17 @@ +json func() { + return json{{"num", 0}, +<<<<<<< LEFT + {"list", json::array({{{"a", 1}, {"b", 2}}})}, +||||||| BASE + {{"num", 0}, + {"obj", {{"a", 1}, {"b", 2}}}, + {"list", json::array({{{"a", 3}, {"b", 4}}})}}, +======= + {{"num", 0}, + {"obj", {{"a", 1}, {"b", 2}}}, + {"list", json::array({{{"a", 3}, {"b", 4}}})}, + {"c", 5}}, +>>>>>>> RIGHT + {"other", {{"a", 3}, {"b", 4}}}, + {"c", 5}}; +} diff --git a/examples/cpp/working/json_in_cpp/Left.cpp b/examples/cpp/working/json_in_cpp/Left.cpp new file mode 100644 index 0000000..6522edf --- /dev/null +++ b/examples/cpp/working/json_in_cpp/Left.cpp @@ -0,0 +1,6 @@ +json func() { + return json{{"num", 0}, + {"list", json::array({{{"a", 1}, {"b", 2}}})}, + {"other", {{"a", 3}, {"b", 4}}}, + {"c", 5}}; +} diff --git a/examples/cpp/working/json_in_cpp/README b/examples/cpp/working/json_in_cpp/README new file mode 100644 index 0000000..01ac4cf --- /dev/null +++ b/examples/cpp/working/json_in_cpp/README @@ -0,0 +1 @@ +Taken from https://codeberg.org/mergiraf/mergiraf/issues/262 diff --git a/examples/cpp/working/json_in_cpp/Right.cpp b/examples/cpp/working/json_in_cpp/Right.cpp new file mode 100644 index 0000000..51f3701 --- /dev/null +++ b/examples/cpp/working/json_in_cpp/Right.cpp @@ -0,0 +1,6 @@ +json func() { + return json{{"num", 0}, + {"obj", {{"a", 1}, {"b", 2}}}, + {"list", json::array({{{"a", 3}, {"b", 4}}})}, + {"c", 5}}; +} diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Base.c b/examples/cpp/working/positional_argument_in_initializer_list/Base.c new file mode 100644 index 0000000..55b4447 --- /dev/null +++ b/examples/cpp/working/positional_argument_in_initializer_list/Base.c @@ -0,0 +1,3 @@ +my_struct_t instance = { + "hello" +}; diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Expected.c b/examples/cpp/working/positional_argument_in_initializer_list/Expected.c new file mode 100644 index 0000000..8c1cff1 --- /dev/null +++ b/examples/cpp/working/positional_argument_in_initializer_list/Expected.c @@ -0,0 +1,11 @@ +my_struct_t instance = { +<<<<<<< LEFT + "hello", + "merhaba", +||||||| BASE + "hello" +======= + "hello", + "salut", +>>>>>>> RIGHT +}; diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Left.c b/examples/cpp/working/positional_argument_in_initializer_list/Left.c new file mode 100644 index 0000000..89ca9b4 --- /dev/null +++ b/examples/cpp/working/positional_argument_in_initializer_list/Left.c @@ -0,0 +1,4 @@ +my_struct_t instance = { + "hello", + "merhaba", +}; diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Right.c b/examples/cpp/working/positional_argument_in_initializer_list/Right.c new file mode 100644 index 0000000..df919c2 --- /dev/null +++ b/examples/cpp/working/positional_argument_in_initializer_list/Right.c @@ -0,0 +1,4 @@ +my_struct_t instance = { + "hello", + "salut", +}; diff --git a/src/supported_langs.rs b/src/supported_langs.rs index af0ab8c..911cbd8 100644 --- a/src/supported_langs.rs +++ b/src/supported_langs.rs @@ -444,7 +444,8 @@ pub static SUPPORTED_LANGUAGES: LazyLock> = LazyLock::new(|| { language: tree_sitter_cpp::LANGUAGE.into(), atomic_nodes: vec![], commutative_parents: vec![ - CommutativeParent::new("initializer_list", "{", ",", "}"), + CommutativeParent::new("initializer_list", "{", ",", "}") + .restricted_to_groups(&[&["initializer_pair"]]), CommutativeParent::new("field_declaration_list", "{\n", "\n", "\n}\n") .restricted_to_groups(&[&["field_declaration"], &["function_definition"]]), ], -- 2.47.3