From 349c0109722debfdd46d7a41016cae2157b0077f Mon Sep 17 00:00:00 2001 From: danielporterda Date: Fri, 7 Aug 2026 12:33:28 -0400 Subject: [PATCH] Code IfVersion attribute diagnostics Signed-off-by: danielporterda --- scripts/snippets/diagnostics.py | 24 +++++++++++++ .../test_if_version_attribute_diagnostics.py | 36 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 tests/test_if_version_attribute_diagnostics.py diff --git a/scripts/snippets/diagnostics.py b/scripts/snippets/diagnostics.py index 1affbacf3..1baf73c18 100644 --- a/scripts/snippets/diagnostics.py +++ b/scripts/snippets/diagnostics.py @@ -4,6 +4,8 @@ from .model import ( Diagnostic, + IfVersionAttributeIssue, + IfVersionAttributeRule, LocalSourcePolicyIssue, SnippetAttributeIssue, SnippetAttributeRule, @@ -33,6 +35,12 @@ SnippetAttributeRule.INVALID_LANGUAGE: "SNIP016", SnippetAttributeRule.INVALID_MARKERS: "SNIP017", } +IF_VERSION_ATTRIBUTE_CODES = { + IfVersionAttributeRule.UNKNOWN_ATTRIBUTE: "SNIP020", + IfVersionAttributeRule.INVALID_REPOSITORY: "SNIP021", + IfVersionAttributeRule.UNREGISTERED_REPOSITORY: "SNIP022", + IfVersionAttributeRule.INVALID_PULL_REQUEST: "SNIP023", +} def local_source_policy_diagnostic( @@ -95,3 +103,19 @@ def snippet_attribute_diagnostics( ) for issue in issues ) + + +def if_version_attribute_diagnostics( + path: Path, issues: tuple[IfVersionAttributeIssue, ...] +) -> tuple[Diagnostic, ...]: + """Assign stable diagnostic codes to IfVersion attribute failures.""" + + return tuple( + Diagnostic( + path=path, + span=issue.span, + code=IF_VERSION_ATTRIBUTE_CODES[issue.rule], + message=issue.message, + ) + for issue in issues + ) diff --git a/tests/test_if_version_attribute_diagnostics.py b/tests/test_if_version_attribute_diagnostics.py new file mode 100644 index 000000000..cbd652495 --- /dev/null +++ b/tests/test_if_version_attribute_diagnostics.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +from pathlib import Path + +import pytest + +from scripts.snippets.diagnostics import if_version_attribute_diagnostics +from scripts.snippets.model import ( + IfVersionAttributeIssue, + IfVersionAttributeRule, + Span, +) + +PATH = Path("docs-main/validator.source.mdx") +SPAN = Span(start=20, end=30, line=7, column=3) + + +@pytest.mark.parametrize( + ("rule", "code"), + [ + (IfVersionAttributeRule.UNKNOWN_ATTRIBUTE, "SNIP020"), + (IfVersionAttributeRule.INVALID_REPOSITORY, "SNIP021"), + (IfVersionAttributeRule.UNREGISTERED_REPOSITORY, "SNIP022"), + (IfVersionAttributeRule.INVALID_PULL_REQUEST, "SNIP023"), + ], +) +def test_maps_if_version_attribute_rule_to_stable_code( + rule: IfVersionAttributeRule, code: str +) -> None: + diagnostics = if_version_attribute_diagnostics( + PATH, + (IfVersionAttributeIssue(rule=rule, span=SPAN, message="failure"),), + ) + + assert diagnostics[0].code == code + assert diagnostics[0].span == SPAN