diff --git a/scripts/check_legacy_i2c.py b/scripts/check_legacy_i2c.py index 55d4833..282fb89 100644 --- a/scripts/check_legacy_i2c.py +++ b/scripts/check_legacy_i2c.py @@ -240,7 +240,11 @@ def scan_paths(paths: Sequence[Path]) -> ScanResult: def _format_finding(finding: Finding, root: Path) -> str: - relative_path = finding.path.resolve().relative_to(root) + resolved_path = finding.path.resolve() + try: + relative_path = resolved_path.relative_to(root) + except ValueError: + relative_path = resolved_path return ( f"{relative_path}:{finding.line_no}: {finding.reason}\n" f" {finding.line}" diff --git a/tests/test_check_legacy_i2c.py b/tests/test_check_legacy_i2c.py index b3d6d99..4de467a 100644 --- a/tests/test_check_legacy_i2c.py +++ b/tests/test_check_legacy_i2c.py @@ -120,6 +120,17 @@ def test_flags_conflict_check_comment_in_sdkconfig(self) -> None: self.assertEqual(finding.path, cfg_path) self.assertIn("legacy driver conflict check still enabled", finding.reason) + def test_formatter_handles_paths_outside_root(self) -> None: + with TemporaryDirectory() as tmpdir: + src_path = Path(tmpdir) / "legacy.c" + src_path.write_text('#include "driver/i2c.h"\n', encoding="utf-8") + + result = self.module.scan_paths([Path(tmpdir)]) + + self.assertEqual(len(result.findings), 1) + formatted = self.module._format_finding(result.findings[0], self.module.REPO_ROOT) + self.assertIn(str(src_path.resolve()), formatted) + if __name__ == "__main__": # pragma: no cover - manual execution unittest.main()