refactor: centralize numeric normalization
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import ast
|
||||
import hashlib
|
||||
import re
|
||||
from pathlib import Path
|
||||
@@ -33,6 +34,41 @@ def sha256(path: Path) -> str:
|
||||
return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
|
||||
|
||||
def function_contract(path: Path, name: str) -> tuple[str, str]:
|
||||
tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path))
|
||||
function = next(
|
||||
node for node in tree.body if isinstance(node, ast.FunctionDef) and node.name == name
|
||||
)
|
||||
body = ast.Module(body=function.body, type_ignores=[])
|
||||
return (
|
||||
ast.dump(function.args, include_attributes=False),
|
||||
ast.dump(body, include_attributes=False),
|
||||
)
|
||||
|
||||
|
||||
def module_contract(
|
||||
path: Path,
|
||||
*,
|
||||
excluded_definitions: set[str] | None = None,
|
||||
excluded_import_modules: set[str] | None = None,
|
||||
exclude_imports: bool = False,
|
||||
) -> str:
|
||||
excluded_definitions = excluded_definitions or set()
|
||||
excluded_import_modules = excluded_import_modules or set()
|
||||
tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path))
|
||||
tree.body = [
|
||||
node
|
||||
for node in tree.body
|
||||
if not (exclude_imports and isinstance(node, (ast.Import, ast.ImportFrom)))
|
||||
and not (
|
||||
isinstance(node, ast.ImportFrom)
|
||||
and node.module in excluded_import_modules
|
||||
)
|
||||
and getattr(node, "name", None) not in excluded_definitions
|
||||
]
|
||||
return ast.dump(tree, include_attributes=False)
|
||||
|
||||
|
||||
def reassembled_frontend_runtime() -> str:
|
||||
chunks: dict[tuple[int, int], str] = {}
|
||||
for path in FRONTEND_ROOT.rglob("*.js"):
|
||||
|
||||
Reference in New Issue
Block a user