diff env/lib/python3.7/site-packages/libpasteurize/fixes/fix_annotations.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/libpasteurize/fixes/fix_annotations.py	Sat May 02 07:14:21 2020 -0400
@@ -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))