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..684a99102 --- /dev/null +++ b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + 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..c5868aeeb --- /dev/null +++ b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md @@ -0,0 +1,64 @@ +# '@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 +5. Object should not have inner objects + +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..9de923dc3 --- /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-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: | + + + + + + + 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/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: | + + + + + + +