Skip to content

Commit 32c7e3f

Browse files
feat: BACK-8055 Detect unused definitions
1 parent f62f2b6 commit 32c7e3f

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/erc7730/lint/lint.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from erc7730.lint.lint_base import MultiLinter
1919
from erc7730.lint.lint_transaction_type_classifier import ClassifyTransactionTypeLinter
2020
from erc7730.lint.lint_validate_abi import ValidateABILinter
21+
from erc7730.lint.lint_validate_definitions import DefinitionLinter
2122
from erc7730.lint.lint_validate_display_fields import ValidateDisplayFieldsLinter
2223
from erc7730.list.list import get_erc7730_files
2324
from erc7730.model.input.descriptor import InputERC7730Descriptor
@@ -51,11 +52,7 @@ def lint_all(paths: list[Path], out: OutputAdder) -> int:
5152
:return: number of files checked
5253
"""
5354
linter = MultiLinter(
54-
[
55-
ValidateABILinter(),
56-
ValidateDisplayFieldsLinter(),
57-
ClassifyTransactionTypeLinter(),
58-
]
55+
[ValidateABILinter(), ValidateDisplayFieldsLinter(), ClassifyTransactionTypeLinter(), DefinitionLinter()]
5956
)
6057

6158
files = list(get_erc7730_files(*paths, out=out))
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import final, override
2+
3+
from erc7730.common.output import OutputAdder
4+
from erc7730.lint import ERC7730Linter
5+
from erc7730.model.resolved.context import ResolvedEIP712Context
6+
from erc7730.model.resolved.descriptor import ResolvedERC7730Descriptor
7+
8+
9+
@final
10+
class DefinitionLinter(ERC7730Linter):
11+
"""Check that parameters under definitions are used in formats section"""
12+
13+
@override
14+
def lint(self, descriptor: ResolvedERC7730Descriptor, out: OutputAdder) -> None:
15+
if isinstance(descriptor.context, ResolvedEIP712Context) and descriptor.display.definitions is not None:
16+
for name, _ in descriptor.display.definitions.items():
17+
found = False
18+
for _, format in descriptor.display.formats.items():
19+
if found is False:
20+
for field in format.fields:
21+
if field.path == name:
22+
found = True
23+
if found is False:
24+
out.error(
25+
title="Unused field definition",
26+
message=f"Field {name} is not used in descriptor formats.",
27+
)

0 commit comments

Comments
 (0)