From 1bec27f69efb734ebe294655d35380934322f58e Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Fri, 9 Aug 2024 17:35:34 +0100 Subject: [PATCH] Disallow renaming for non-local names used in class scope in store context They create a new binding in the class namespace --- src/python_minifier/rename/resolve_names.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/python_minifier/rename/resolve_names.py b/src/python_minifier/rename/resolve_names.py index d22a0211..25555fdc 100644 --- a/src/python_minifier/rename/resolve_names.py +++ b/src/python_minifier/rename/resolve_names.py @@ -47,7 +47,11 @@ def resolve_names(node): if isinstance(node, ast.Name) and isinstance(node.ctx, ast.Load): get_binding(node.id, node.namespace).add_reference(node) elif isinstance(node, ast.Name) and node.id in node.namespace.nonlocal_names: - get_binding(node.id, node.namespace).add_reference(node) + binding = get_binding(node.id, node.namespace) + binding.add_reference(node) + + if isinstance(node.ctx, ast.Store) and isinstance(node.namespace, ast.ClassDef): + binding.disallow_rename() elif isinstance(node, ast.ClassDef) and node.name in node.namespace.nonlocal_names: get_binding(node.name, node.namespace).add_reference(node)