#!/usr/bin/env python3 from __future__ import annotations import importlib.util import sys import tempfile import unittest from pathlib import Path SCRIPT_PATH = Path(__file__).with_name("check-import-aliases.py") spec = importlib.util.spec_from_file_location("check_import_aliases", SCRIPT_PATH) assert spec is not None and spec.loader is not None check_import_aliases = importlib.util.module_from_spec(spec) sys.modules[spec.name] = check_import_aliases spec.loader.exec_module(check_import_aliases) class CheckImportAliasesTest(unittest.TestCase): def test_reports_explicit_alias_without_conflict(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) source = root / "main.go" source.write_text( 'package main\n\nimport fooalias "example.com/project/foo"\n\nfunc main() { fooalias.Do() }\n' ) findings, retained, explicit = check_import_aliases.audit( root, {"example.com/project/foo": "foo"}, ("example.com/project",), ) self.assertEqual(explicit, 1) self.assertEqual(len(retained), 0) self.assertEqual(len(findings), 1) self.assertEqual(findings[0].alias, "fooalias") self.assertEqual(findings[0].default_name, "foo") def test_scans_first_party_presets_but_ignores_x_snapshots(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) presets_source = root / "presets" / "locale.go" presets_source.parent.mkdir() presets_source.write_text( "package presets\n\n" 'import localepkg "example.com/project/presets/internal/locale"\n' ) x_snapshot = root / "x" / "presets" / "locale.go" x_snapshot.parent.mkdir(parents=True) x_snapshot.write_text( "package presets\n\n" 'import localepkg "example.com/project/presets/internal/locale"\n' ) findings, retained, explicit = check_import_aliases.audit( root, {"example.com/project/presets/internal/locale": "locale"}, ("example.com/project",), ) self.assertEqual(explicit, 1) self.assertEqual(retained, []) self.assertEqual(len(findings), 1) self.assertEqual(findings[0].file, Path("presets/locale.go")) self.assertEqual(findings[0].alias, "localepkg") self.assertEqual(findings[0].default_name, "locale") def test_retains_alias_when_another_import_uses_default_name(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) source = root / "main.go" source.write_text( "package main\n\n" "import (\n" ' fooalias "example.com/project/foo"\n' ' "example.com/project/otherfoo"\n' ")\n" ) findings, retained, explicit = check_import_aliases.audit( root, { "example.com/project/foo": "foo", "example.com/project/otherfoo": "foo", }, ("example.com/project",), ) self.assertEqual(explicit, 1) self.assertEqual(findings, []) self.assertEqual(len(retained), 1) self.assertEqual(retained[0].conflicts, ("example.com/project/otherfoo",)) def test_retains_both_aliases_when_two_imports_share_default_name(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) source = root / "main.go" source.write_text( "package main\n\n" "import (\n" ' fooapi "example.com/project/fooapi"\n' ' foostore "example.com/project/foostore"\n' ")\n" ) findings, retained, explicit = check_import_aliases.audit( root, { "example.com/project/fooapi": "foo", "example.com/project/foostore": "foo", }, ("example.com/project",), ) self.assertEqual(explicit, 2) self.assertEqual(findings, []) self.assertEqual(len(retained), 2) self.assertEqual( {item.alias: item.conflicts for item in retained}, { "fooapi": ("example.com/project/foostore",), "foostore": ("example.com/project/fooapi",), }, ) def test_retains_alias_when_file_package_matches_default_name(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) source = root / "foo" / "ports.go" source.parent.mkdir() source.write_text( 'package foo\n\nimport storefoo "example.com/project/foo"\n\ntype Port = storefoo.Port\n' ) findings, retained, explicit = check_import_aliases.audit( root, {"example.com/project/foo": "foo"}, ("example.com/project",), ) self.assertEqual(explicit, 1) self.assertEqual(findings, []) self.assertEqual(len(retained), 1) self.assertEqual(retained[0].conflicts, ("file package foo",)) def test_ignores_dot_blank_x_and_generated_files(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) (root / "main.go").write_text( "package main\n\n" "import (\n" ' _ "example.com/project/sideeffect"\n' ' . "example.com/project/dot"\n' ")\n" ) xfile = root / "x" / "external.go" xfile.parent.mkdir() xfile.write_text( 'package x\n\nimport fooalias "example.com/project/foo"\n' ) claude_snapshot = root / ".claude" / "snapshot.go" claude_snapshot.parent.mkdir() claude_snapshot.write_text( 'package snapshot\n\nimport fooalias "example.com/project/foo"\n' ) data_snapshot = root / "meshx" / ".data" / "snapshot.go" data_snapshot.parent.mkdir(parents=True) data_snapshot.write_text( 'package snapshot\n\nimport fooalias "example.com/project/foo"\n' ) generated = root / "generated.pb.go" generated.write_text( "// Code generated by protoc. DO NOT EDIT.\n" "package main\n\n" 'import fooalias "example.com/project/foo"\n' ) findings, retained, explicit = check_import_aliases.audit( root, {"example.com/project/foo": "foo"}, ("example.com/project",), ) self.assertEqual(explicit, 0) self.assertEqual(findings, []) self.assertEqual(retained, []) if __name__ == "__main__": unittest.main()