From de56925e7fff8b98ba7f372416d2839b53867d7b Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 12 Apr 2026 17:40:18 +1000 Subject: [PATCH 1/5] fix: remove 15 orphaned compatibility bridge files in treesitter module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All 15 deleted files are underscore-prefixed compatibility shims in desloppify/languages/_framework/treesitter/ that re-exported symbols from their canonical grouped-namespace locations via a _compat_bridge helper. The package __init__.py docstring explicitly flags these as \"compatibility shims only\" and instructs new code to import from the grouped namespaces. Static analysis confirms zero direct importers for any of the 15 files. Deleted: _compat_bridge.py (infrastructure for the shims) _complexity_function_metrics.py → analysis.complexity_function_metrics _complexity_nesting.py → analysis.complexity_nesting _extractors.py → analysis.extractors _import_cache.py → imports.resolver_cache _import_graph.py → imports.graph _import_resolvers_backend.py → imports.resolvers_backend _import_resolvers_functional.py → imports.resolvers_functional _import_resolvers_scripts.py → imports.resolvers_scripts _normalize.py → imports.normalize _smells.py → analysis.smells _specs_compiled.py → specs.compiled _specs_functional.py → specs.functional _specs_scripting.py → specs.scripting _unused_imports.py → analysis.unused_imports --- .../_framework/treesitter/_compat_bridge.py | 20 ------------------- .../_complexity_function_metrics.py | 10 ---------- .../treesitter/_complexity_nesting.py | 10 ---------- .../_framework/treesitter/_extractors.py | 10 ---------- .../_framework/treesitter/_import_cache.py | 10 ---------- .../_framework/treesitter/_import_graph.py | 10 ---------- .../treesitter/_import_resolvers_backend.py | 10 ---------- .../_import_resolvers_functional.py | 10 ---------- .../treesitter/_import_resolvers_scripts.py | 10 ---------- .../_framework/treesitter/_normalize.py | 10 ---------- .../_framework/treesitter/_smells.py | 10 ---------- .../_framework/treesitter/_specs_compiled.py | 10 ---------- .../treesitter/_specs_functional.py | 10 ---------- .../_framework/treesitter/_specs_scripting.py | 10 ---------- .../_framework/treesitter/_unused_imports.py | 10 ---------- 15 files changed, 160 deletions(-) delete mode 100644 desloppify/languages/_framework/treesitter/_compat_bridge.py delete mode 100644 desloppify/languages/_framework/treesitter/_complexity_function_metrics.py delete mode 100644 desloppify/languages/_framework/treesitter/_complexity_nesting.py delete mode 100644 desloppify/languages/_framework/treesitter/_extractors.py delete mode 100644 desloppify/languages/_framework/treesitter/_import_cache.py delete mode 100644 desloppify/languages/_framework/treesitter/_import_graph.py delete mode 100644 desloppify/languages/_framework/treesitter/_import_resolvers_backend.py delete mode 100644 desloppify/languages/_framework/treesitter/_import_resolvers_functional.py delete mode 100644 desloppify/languages/_framework/treesitter/_import_resolvers_scripts.py delete mode 100644 desloppify/languages/_framework/treesitter/_normalize.py delete mode 100644 desloppify/languages/_framework/treesitter/_smells.py delete mode 100644 desloppify/languages/_framework/treesitter/_specs_compiled.py delete mode 100644 desloppify/languages/_framework/treesitter/_specs_functional.py delete mode 100644 desloppify/languages/_framework/treesitter/_specs_scripting.py delete mode 100644 desloppify/languages/_framework/treesitter/_unused_imports.py diff --git a/desloppify/languages/_framework/treesitter/_compat_bridge.py b/desloppify/languages/_framework/treesitter/_compat_bridge.py deleted file mode 100644 index bb9485aa4..000000000 --- a/desloppify/languages/_framework/treesitter/_compat_bridge.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Shared compatibility bridge helpers for legacy tree-sitter wrapper modules.""" - -from __future__ import annotations - -from importlib import import_module -from types import ModuleType - - -def load_compat_exports(namespace: dict[str, object], module_path: str) -> tuple[ModuleType, list[str]]: - """Populate a wrapper module namespace from its canonical implementation.""" - impl = import_module(module_path) - exports = [name for name in dir(impl) if not name.startswith("__")] - namespace.update({name: getattr(impl, name) for name in exports}) - public = getattr(impl, "__all__", None) - if public is None: - public = [name for name in exports if not name.startswith("_")] - return impl, list(public) - - -__all__ = ["load_compat_exports"] diff --git a/desloppify/languages/_framework/treesitter/_complexity_function_metrics.py b/desloppify/languages/_framework/treesitter/_complexity_function_metrics.py deleted file mode 100644 index 5529aab2c..000000000 --- a/desloppify/languages/_framework/treesitter/_complexity_function_metrics.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.analysis.complexity_function_metrics. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.analysis.complexity_function_metrics") diff --git a/desloppify/languages/_framework/treesitter/_complexity_nesting.py b/desloppify/languages/_framework/treesitter/_complexity_nesting.py deleted file mode 100644 index 2d5888cfe..000000000 --- a/desloppify/languages/_framework/treesitter/_complexity_nesting.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.analysis.complexity_nesting. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.analysis.complexity_nesting") diff --git a/desloppify/languages/_framework/treesitter/_extractors.py b/desloppify/languages/_framework/treesitter/_extractors.py deleted file mode 100644 index 66c5d590e..000000000 --- a/desloppify/languages/_framework/treesitter/_extractors.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.analysis.extractors. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.analysis.extractors") diff --git a/desloppify/languages/_framework/treesitter/_import_cache.py b/desloppify/languages/_framework/treesitter/_import_cache.py deleted file mode 100644 index 2c513b817..000000000 --- a/desloppify/languages/_framework/treesitter/_import_cache.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.resolver_cache. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.resolver_cache") diff --git a/desloppify/languages/_framework/treesitter/_import_graph.py b/desloppify/languages/_framework/treesitter/_import_graph.py deleted file mode 100644 index e505d28b8..000000000 --- a/desloppify/languages/_framework/treesitter/_import_graph.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.graph. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.graph") diff --git a/desloppify/languages/_framework/treesitter/_import_resolvers_backend.py b/desloppify/languages/_framework/treesitter/_import_resolvers_backend.py deleted file mode 100644 index 19a4ec2a5..000000000 --- a/desloppify/languages/_framework/treesitter/_import_resolvers_backend.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.resolvers_backend. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.resolvers_backend") diff --git a/desloppify/languages/_framework/treesitter/_import_resolvers_functional.py b/desloppify/languages/_framework/treesitter/_import_resolvers_functional.py deleted file mode 100644 index 7ad33fd97..000000000 --- a/desloppify/languages/_framework/treesitter/_import_resolvers_functional.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.resolvers_functional. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.resolvers_functional") diff --git a/desloppify/languages/_framework/treesitter/_import_resolvers_scripts.py b/desloppify/languages/_framework/treesitter/_import_resolvers_scripts.py deleted file mode 100644 index 0c69b58a2..000000000 --- a/desloppify/languages/_framework/treesitter/_import_resolvers_scripts.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.resolvers_scripts. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.resolvers_scripts") diff --git a/desloppify/languages/_framework/treesitter/_normalize.py b/desloppify/languages/_framework/treesitter/_normalize.py deleted file mode 100644 index b4f8e3469..000000000 --- a/desloppify/languages/_framework/treesitter/_normalize.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.imports.normalize. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.imports.normalize") diff --git a/desloppify/languages/_framework/treesitter/_smells.py b/desloppify/languages/_framework/treesitter/_smells.py deleted file mode 100644 index b32256c11..000000000 --- a/desloppify/languages/_framework/treesitter/_smells.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.analysis.smells. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.analysis.smells") diff --git a/desloppify/languages/_framework/treesitter/_specs_compiled.py b/desloppify/languages/_framework/treesitter/_specs_compiled.py deleted file mode 100644 index 71400b248..000000000 --- a/desloppify/languages/_framework/treesitter/_specs_compiled.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.specs.compiled. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.specs.compiled") diff --git a/desloppify/languages/_framework/treesitter/_specs_functional.py b/desloppify/languages/_framework/treesitter/_specs_functional.py deleted file mode 100644 index 134c3220f..000000000 --- a/desloppify/languages/_framework/treesitter/_specs_functional.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.specs.functional. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.specs.functional") diff --git a/desloppify/languages/_framework/treesitter/_specs_scripting.py b/desloppify/languages/_framework/treesitter/_specs_scripting.py deleted file mode 100644 index 26c4db4f6..000000000 --- a/desloppify/languages/_framework/treesitter/_specs_scripting.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.specs.scripting. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.specs.scripting") diff --git a/desloppify/languages/_framework/treesitter/_unused_imports.py b/desloppify/languages/_framework/treesitter/_unused_imports.py deleted file mode 100644 index a506af5e7..000000000 --- a/desloppify/languages/_framework/treesitter/_unused_imports.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Compatibility bridge to grouped tree-sitter namespace module. - -Canonical implementation now lives in desloppify.languages._framework.treesitter.analysis.unused_imports. -""" - -from __future__ import annotations - -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.analysis.unused_imports") From 5064479d11cd9153036b5ab0f22709736bf91150 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 12 Apr 2026 17:55:16 +1000 Subject: [PATCH 2/5] chore: trigger CR review From 6cb0b498b01e366ce1bedd0e96c54fd4113941e9 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 12 Apr 2026 18:05:54 +1000 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20inline=20compat=20bridge=20in=20=5Fs?= =?UTF-8?q?pecs.py=20=E2=80=94=20=5Fcompat=5Fbridge=20was=20removed=20by?= =?UTF-8?q?=20PR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- desloppify/languages/_framework/treesitter/_specs.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/desloppify/languages/_framework/treesitter/_specs.py b/desloppify/languages/_framework/treesitter/_specs.py index 2bf3a4bbf..488fcd3de 100644 --- a/desloppify/languages/_framework/treesitter/_specs.py +++ b/desloppify/languages/_framework/treesitter/_specs.py @@ -1,10 +1,9 @@ """Compatibility bridge to grouped tree-sitter namespace module. -Canonical implementation now lives in desloppify.languages._framework.treesitter.specs.specs. +Canonical implementation lives in desloppify.languages._framework.treesitter.specs.specs. """ from __future__ import annotations -from ._compat_bridge import load_compat_exports - -_IMPL, __all__ = load_compat_exports(globals(), "desloppify.languages._framework.treesitter.specs.specs") +from desloppify.languages._framework.treesitter.specs.specs import * # noqa: F401, F403 +from desloppify.languages._framework.treesitter.specs.specs import __all__ From fde47d0bef955b5a392676523b8487eec298b660 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 12 Apr 2026 18:16:08 +1000 Subject: [PATCH 4/5] fix(treesitter): wrap long lines in _specs.py to satisfy E501 --- .../languages/_framework/treesitter/_specs.py | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/desloppify/languages/_framework/treesitter/_specs.py b/desloppify/languages/_framework/treesitter/_specs.py index 488fcd3de..636eea814 100644 --- a/desloppify/languages/_framework/treesitter/_specs.py +++ b/desloppify/languages/_framework/treesitter/_specs.py @@ -1,9 +1,30 @@ """Compatibility bridge to grouped tree-sitter namespace module. -Canonical implementation lives in desloppify.languages._framework.treesitter.specs.specs. +Canonical implementation lives in +desloppify.languages._framework.treesitter.specs.specs. """ from __future__ import annotations -from desloppify.languages._framework.treesitter.specs.specs import * # noqa: F401, F403 -from desloppify.languages._framework.treesitter.specs.specs import __all__ +from importlib import import_module +from types import ModuleType + + +def load_compat_exports( + namespace: dict[str, object], + module_path: str, +) -> tuple[ModuleType, list[str]]: + """Populate a wrapper module namespace from its canonical implementation.""" + impl = import_module(module_path) + exports = [name for name in dir(impl) if not name.startswith("__")] + namespace.update({name: getattr(impl, name) for name in exports}) + public = getattr(impl, "__all__", None) + if public is None: + public = [name for name in exports if not name.startswith("_")] + return impl, list(public) + + +_IMPL, __all__ = load_compat_exports( + globals(), + "desloppify.languages._framework.treesitter.specs.specs", +) From 2b8a348cc79ece7fcf6c18fc47b4f4a24da34b85 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 12 Apr 2026 19:23:28 +1000 Subject: [PATCH 5/5] fix(treesitter): sort import blocks in __init__.py (ruff I001) Two import blocks were unsorted. Fix with ruff --fix to satisfy I001. --- .../languages/_framework/treesitter/__init__.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/desloppify/languages/_framework/treesitter/__init__.py b/desloppify/languages/_framework/treesitter/__init__.py index 0f5dad64e..03aecc0d3 100644 --- a/desloppify/languages/_framework/treesitter/__init__.py +++ b/desloppify/languages/_framework/treesitter/__init__.py @@ -16,6 +16,7 @@ import logging from desloppify.base.output.fallbacks import log_best_effort_failure + from .types import TreeSitterLangSpec logger = logging.getLogger(__name__) @@ -69,12 +70,18 @@ def reset_script_import_caches(scan_path: str | None = None) -> None: RuntimeError, ) +from .phases import ( # noqa: E402 + all_treesitter_phases, + make_ast_smells_phase, + make_cohesion_phase, + make_unused_imports_phase, +) from .specs.specs import ( # noqa: E402 BASH_SPEC, + C_SPEC, CLOJURE_SPEC, CPP_SPEC, CSHARP_SPEC, - C_SPEC, DART_SPEC, ELIXIR_SPEC, ERLANG_SPEC, @@ -101,12 +108,6 @@ def reset_script_import_caches(scan_path: str | None = None) -> None: TYPESCRIPT_SPEC, ZIG_SPEC, ) -from .phases import ( # noqa: E402 - all_treesitter_phases, - make_ast_smells_phase, - make_cohesion_phase, - make_unused_imports_phase, -) def get_spec(language: str) -> TreeSitterLangSpec | None: