From 8a6962b2e78bba236abd3861488bf4c1999c283b Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Fri, 15 Aug 2025 16:08:58 +0200 Subject: [PATCH 1/2] Don't propagate errors from commutative merging --- src/tree_builder.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tree_builder.rs b/src/tree_builder.rs index eee15ba..e1e868f 100644 --- a/src/tree_builder.rs +++ b/src/tree_builder.rs @@ -258,15 +258,14 @@ impl<'a, 'b> TreeBuilder<'a, 'b> { if let PCSNode::Node { node: leader, .. } = node && let Some(commutative_parent) = leader.commutative_parent_definition() - { - // knowing that the order of all elements of the conflict does not matter, solve the conflict - let solved_conflict = self.commutatively_merge_lists( + && let Ok(solved_conflict) = self.commutatively_merge_lists( &base, &left, &right, commutative_parent, visiting_state, - )?; + ) + { children.extend(solved_conflict); } else { children.extend(MergedTree::new_conflict( -- 2.47.3 From f4ec84536287cbdc0e09bfc091b9b9016d77acaf Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Sat, 16 Aug 2025 09:54:13 +0200 Subject: [PATCH 2/2] Adapt tests after propagating errors from commutative merging --- .../field_visibility_conflict/Base.cc | 0 .../field_visibility_conflict/ExpectedCurrently.cc | 11 +++++++++++ .../field_visibility_conflict/ExpectedIdeally.cc} | 0 .../field_visibility_conflict/Left.cc | 0 .../field_visibility_conflict/Right.cc | 0 .../positional_argument_in_initializer_list/Base.c | 0 .../ExpectedCurrently.c | 11 +++++++++++ .../ExpectedIdeally.c} | 0 .../positional_argument_in_initializer_list/Left.c | 0 .../positional_argument_in_initializer_list/Right.c | 0 .../methods_with_comments/ExpectedCurrently.cs | 2 +- .../methods_with_doc_comments/ExpectedCurrently.php | 2 +- 12 files changed, 24 insertions(+), 2 deletions(-) rename examples/cpp/{working => failing}/field_visibility_conflict/Base.cc (100%) create mode 100644 examples/cpp/failing/field_visibility_conflict/ExpectedCurrently.cc rename examples/cpp/{working/field_visibility_conflict/Expected.cc => failing/field_visibility_conflict/ExpectedIdeally.cc} (100%) rename examples/cpp/{working => failing}/field_visibility_conflict/Left.cc (100%) rename examples/cpp/{working => failing}/field_visibility_conflict/Right.cc (100%) rename examples/cpp/{working => failing}/positional_argument_in_initializer_list/Base.c (100%) create mode 100644 examples/cpp/failing/positional_argument_in_initializer_list/ExpectedCurrently.c rename examples/cpp/{working/positional_argument_in_initializer_list/Expected.c => failing/positional_argument_in_initializer_list/ExpectedIdeally.c} (100%) rename examples/cpp/{working => failing}/positional_argument_in_initializer_list/Left.c (100%) rename examples/cpp/{working => failing}/positional_argument_in_initializer_list/Right.c (100%) diff --git a/examples/cpp/working/field_visibility_conflict/Base.cc b/examples/cpp/failing/field_visibility_conflict/Base.cc similarity index 100% rename from examples/cpp/working/field_visibility_conflict/Base.cc rename to examples/cpp/failing/field_visibility_conflict/Base.cc diff --git a/examples/cpp/failing/field_visibility_conflict/ExpectedCurrently.cc b/examples/cpp/failing/field_visibility_conflict/ExpectedCurrently.cc new file mode 100644 index 0000000..cda2fec --- /dev/null +++ b/examples/cpp/failing/field_visibility_conflict/ExpectedCurrently.cc @@ -0,0 +1,11 @@ +class MyClass { + public: + int field_1; +<<<<<<< LEFT + private: + size_t field_2; +||||||| BASE +======= + char field_3; +>>>>>>> RIGHT +} diff --git a/examples/cpp/working/field_visibility_conflict/Expected.cc b/examples/cpp/failing/field_visibility_conflict/ExpectedIdeally.cc similarity index 100% rename from examples/cpp/working/field_visibility_conflict/Expected.cc rename to examples/cpp/failing/field_visibility_conflict/ExpectedIdeally.cc diff --git a/examples/cpp/working/field_visibility_conflict/Left.cc b/examples/cpp/failing/field_visibility_conflict/Left.cc similarity index 100% rename from examples/cpp/working/field_visibility_conflict/Left.cc rename to examples/cpp/failing/field_visibility_conflict/Left.cc diff --git a/examples/cpp/working/field_visibility_conflict/Right.cc b/examples/cpp/failing/field_visibility_conflict/Right.cc similarity index 100% rename from examples/cpp/working/field_visibility_conflict/Right.cc rename to examples/cpp/failing/field_visibility_conflict/Right.cc diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Base.c b/examples/cpp/failing/positional_argument_in_initializer_list/Base.c similarity index 100% rename from examples/cpp/working/positional_argument_in_initializer_list/Base.c rename to examples/cpp/failing/positional_argument_in_initializer_list/Base.c diff --git a/examples/cpp/failing/positional_argument_in_initializer_list/ExpectedCurrently.c b/examples/cpp/failing/positional_argument_in_initializer_list/ExpectedCurrently.c new file mode 100644 index 0000000..ed17925 --- /dev/null +++ b/examples/cpp/failing/positional_argument_in_initializer_list/ExpectedCurrently.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/Expected.c b/examples/cpp/failing/positional_argument_in_initializer_list/ExpectedIdeally.c similarity index 100% rename from examples/cpp/working/positional_argument_in_initializer_list/Expected.c rename to examples/cpp/failing/positional_argument_in_initializer_list/ExpectedIdeally.c diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Left.c b/examples/cpp/failing/positional_argument_in_initializer_list/Left.c similarity index 100% rename from examples/cpp/working/positional_argument_in_initializer_list/Left.c rename to examples/cpp/failing/positional_argument_in_initializer_list/Left.c diff --git a/examples/cpp/working/positional_argument_in_initializer_list/Right.c b/examples/cpp/failing/positional_argument_in_initializer_list/Right.c similarity index 100% rename from examples/cpp/working/positional_argument_in_initializer_list/Right.c rename to examples/cpp/failing/positional_argument_in_initializer_list/Right.c diff --git a/examples/csharp/failing/methods_with_comments/ExpectedCurrently.cs b/examples/csharp/failing/methods_with_comments/ExpectedCurrently.cs index c389a04..54c9408 100644 --- a/examples/csharp/failing/methods_with_comments/ExpectedCurrently.cs +++ b/examples/csharp/failing/methods_with_comments/ExpectedCurrently.cs @@ -28,7 +28,7 @@ public partial class MyClass : IMyInterface /// [MyCustomAttribute] public string? MyProp { get; set; } - >>>>>>> RIGHT + private record MyPrivateRecord(bool Foo); } diff --git a/examples/php/failing/methods_with_doc_comments/ExpectedCurrently.php b/examples/php/failing/methods_with_doc_comments/ExpectedCurrently.php index 031bca5..0f7cc0b 100644 --- a/examples/php/failing/methods_with_doc_comments/ExpectedCurrently.php +++ b/examples/php/failing/methods_with_doc_comments/ExpectedCurrently.php @@ -9,8 +9,8 @@ class App { ||||||| BASE ======= public function baz(string $param) {} - >>>>>>> RIGHT + public function bar() {} } ?> -- 2.47.3