From 6960cd325cd028ef27fda5ee74f15371dbe9e4e7 Mon Sep 17 00:00:00 2001 From: VasilevNStas Date: Tue, 11 Aug 2026 17:30:33 +0300 Subject: [PATCH] feat(#155): add too-deep-object lint --- .../eolang/lints/design/too-deep-object.xsl | 34 +++++++++++++++++++ .../eolang/motives/design/too-deep-object.md | 29 ++++++++++++++++ .../allows-normal-nesting.yaml | 18 ++++++++++ .../catches-too-deep-object.yaml | 25 ++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 src/main/resources/org/eolang/lints/design/too-deep-object.xsl create mode 100644 src/main/resources/org/eolang/motives/design/too-deep-object.md create mode 100644 src/test/resources/org/eolang/lints/packs/single/too-deep-object/allows-normal-nesting.yaml create mode 100644 src/test/resources/org/eolang/lints/packs/single/too-deep-object/catches-too-deep-object.yaml diff --git a/src/main/resources/org/eolang/lints/design/too-deep-object.xsl b/src/main/resources/org/eolang/lints/design/too-deep-object.xsl new file mode 100644 index 000000000..0b6adea35 --- /dev/null +++ b/src/main/resources/org/eolang/lints/design/too-deep-object.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + warning + The object + + is nested too deep: + + levels of nesting, while the maximum is 12 + + + + + diff --git a/src/main/resources/org/eolang/motives/design/too-deep-object.md b/src/main/resources/org/eolang/motives/design/too-deep-object.md new file mode 100644 index 000000000..7636a7fcf --- /dev/null +++ b/src/main/resources/org/eolang/motives/design/too-deep-object.md @@ -0,0 +1,29 @@ +# Too deep object + +Objects nested deeper than twelve levels are hard to read and to debug. +The nesting level of an object is the number of its ancestor objects. +If it exceeds twelve, a warning is raised. + +Incorrect: + +```eo +# Foo. +[] > foo + a > x + b + c + d + e + f + g + h + i + j + k + l + m +``` + +Here, `m` is nested thirteen levels deep, which is hard to follow. +It should be refactored by extracting some of the nested objects into +their own top-level objects. diff --git a/src/test/resources/org/eolang/lints/packs/single/too-deep-object/allows-normal-nesting.yaml b/src/test/resources/org/eolang/lints/packs/single/too-deep-object/allows-normal-nesting.yaml new file mode 100644 index 000000000..812013736 --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/too-deep-object/allows-normal-nesting.yaml @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/design/too-deep-object.xsl +asserts: + - /defects[count(defect[@severity='warning'])=0] +input: | + # Foo. + + [] > foo + a > x + b + c + d + e + f + g diff --git a/src/test/resources/org/eolang/lints/packs/single/too-deep-object/catches-too-deep-object.yaml b/src/test/resources/org/eolang/lints/packs/single/too-deep-object/catches-too-deep-object.yaml new file mode 100644 index 000000000..b5eba891d --- /dev/null +++ b/src/test/resources/org/eolang/lints/packs/single/too-deep-object/catches-too-deep-object.yaml @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com +# SPDX-License-Identifier: MIT +--- +sheets: + - /org/eolang/lints/design/too-deep-object.xsl +asserts: + - /defects[count(defect[@severity='warning'])=1] + - /defects/defect[@line='16'] +input: | + # Foo. + + [] > foo + a > x + b + c + d + e + f + g + h + i + j + k + l + m