about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py')
-rw-r--r--.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py b/.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py
new file mode 100644
index 00000000..884b6741
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/libpasteurize/fixes/fix_annotations.py
@@ -0,0 +1,48 @@
+u"""
+Fixer to remove function annotations
+"""
+
+from lib2to3 import fixer_base
+from lib2to3.pgen2 import token
+from lib2to3.fixer_util import syms
+
+warning_text = u"Removing function annotations completely."
+
+def param_without_annotations(node):
+    return node.children[0]
+
+class FixAnnotations(fixer_base.BaseFix):
+
+    warned = False
+
+    def warn_once(self, node, reason):
+        if not self.warned:
+            self.warned = True
+            self.warning(node, reason=reason)
+
+    PATTERN = u"""
+              funcdef< 'def' any parameters< '(' [params=any] ')' > ['->' ret=any] ':' any* >
+              """
+
+    def transform(self, node, results):
+        u"""
+        This just strips annotations from the funcdef completely.
+        """
+        params = results.get(u"params")
+        ret = results.get(u"ret")
+        if ret is not None:
+            assert ret.prev_sibling.type == token.RARROW, u"Invalid return annotation"
+            self.warn_once(node, reason=warning_text)
+            ret.prev_sibling.remove()
+            ret.remove()
+        if params is None: return
+        if params.type == syms.typedargslist:
+            # more than one param in a typedargslist
+            for param in params.children:
+                if param.type == syms.tname:
+                    self.warn_once(node, reason=warning_text)
+                    param.replace(param_without_annotations(param))
+        elif params.type == syms.tname:
+            # one param
+            self.warn_once(node, reason=warning_text)
+            params.replace(param_without_annotations(params))