From 71da9bff818c0b2e850c0bed3125544987a093ec Mon Sep 17 00:00:00 2001 From: Marat-Tim Date: Sat, 3 May 2025 14:52:32 +0300 Subject: [PATCH 1/3] feat(#256): lint that find not merged bases --- .../eolang/lints/refs/base-must-be-merged.xsl | 37 +++++++++++ .../motives/refs/base-must-be-merged.md | 61 +++++++++++++++++++ .../catches-not-merged-objects.yaml | 16 +++++ .../no-merge-if-base-starts-with-dot.yaml | 13 ++++ .../no-merge-if-object-has-data.yaml | 15 +++++ .../no-merge-if-object-is-abstract.yaml | 13 ++++ ...ge-if-parent-base-not-starts-with-dot.yaml | 13 ++++ .../prints-name-of-not-merged-object.yaml | 15 +++++ 8 files changed, 183 insertions(+) create mode 100644 src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl create mode 100644 src/main/resources/org/eolang/motives/refs/base-must-be-merged.md create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml diff --git a/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl new file mode 100644 index 000000000..3a30a8e44 --- /dev/null +++ b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + warning + + Object + + + + + can be merged with its parent + + + + + diff --git a/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md new file mode 100644 index 000000000..583ec88ae --- /dev/null +++ b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md @@ -0,0 +1,61 @@ +# '@base' attributes of objects must be merged if possible + +In [XMIR], the object must be merged with parent if the following +conditions are met: + +1. Object is not abstract +2. Attribute `@base` of parent object should start with dot +3. Attribute `@base` object should not start with dot +4. Object should not have data + +Incorrect: + +```xml + + + + + +``` + +Correct: + +```xml + +``` + +Correct: + +```xml + + + +``` + +Correct: + +```xml + + + +``` + +Correct: + +```xml + + + A1-B2-C3-D4-E5 + + +``` + +Correct: + +```xml + + + +``` + +[XMIR]: https://news.eolang.org/2022-11-25-xmir-guide.html diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml new file mode 100644 index 000000000..d39df581a --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=1] + - /defects/defect[@line='2'] +document: | + + + + + + + diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml new file mode 100644 index 000000000..870658d9a --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +document: | + + + + + diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml new file mode 100644 index 000000000..cfc7653f1 --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +document: | + + + + A1-B2-C3-D4-E5 + + + diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml new file mode 100644 index 000000000..fe8433d23 --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +document: | + + + + + diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml new file mode 100644 index 000000000..2a9a2667e --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +document: | + + + + + diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml new file mode 100644 index 000000000..b4f54d1f4 --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects/defect[contains(text(), 'abracadabra')] +document: | + + + + + + + From b7cb9846a174ec4ee2464d9c79ec620d4854dec8 Mon Sep 17 00:00:00 2001 From: Marat-Tim Date: Sat, 3 May 2025 15:18:20 +0300 Subject: [PATCH 2/3] feat(#256): delete impossible test --- ...no-merge-if-parent-base-not-starts-with-dot.yaml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml deleted file mode 100644 index 2a9a2667e..000000000 --- a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-parent-base-not-starts-with-dot.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com -# SPDX-License-Identifier: MIT ---- -sheets: - - /org/eolang/lints/refs/base-must-be-merged.xsl -asserts: - - /defects[count(defect[@severity='warning'])=0] -document: | - - - - - From 89a147f6e6c90a9a4827f45ca3c7fc24dc30d5b6 Mon Sep 17 00:00:00 2001 From: Marat-Tim Date: Mon, 5 May 2025 14:42:23 +0300 Subject: [PATCH 3/3] feat(256): check for inner objects --- .../eolang/lints/refs/base-must-be-merged.xsl | 3 ++- .../motives/refs/base-must-be-merged.md | 23 +++++++++++-------- .../no-merge-if-object-has-data.yaml | 2 +- .../no-merge-if-object-has-inner-object.yaml | 15 ++++++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml diff --git a/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl index 3a30a8e44..684a99102 100644 --- a/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl +++ b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl @@ -3,7 +3,7 @@ ~ SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com ~ SPDX-License-Identifier: MIT --> - + @@ -11,6 +11,7 @@ + diff --git a/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md index 583ec88ae..c5868aeeb 100644 --- a/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md +++ b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md @@ -7,14 +7,15 @@ conditions are met: 2. Attribute `@base` of parent object should start with dot 3. Attribute `@base` object should not start with dot 4. Object should not have data +5. Object should not have inner objects Incorrect: ```xml - - - + + + ``` @@ -28,7 +29,7 @@ Correct: ```xml - + ``` @@ -36,7 +37,7 @@ Correct: ```xml - + ``` @@ -44,17 +45,19 @@ Correct: ```xml - - A1-B2-C3-D4-E5 - + + A1-B2-C3-D4-E5 + ``` Correct: ```xml - - + + + + ``` diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml index cfc7653f1..9de923dc3 100644 --- a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml @@ -9,7 +9,7 @@ document: | - A1-B2-C3-D4-E5 + A1-B2-C3-D4-E5 diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml new file mode 100644 index 000000000..81abae977 --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/refs/base-must-be-merged.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +document: | + + + + + + +