diff options
author | Harmen Stoppels <harmenstoppels@gmail.com> | 2023-10-02 09:25:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-02 00:25:52 -0700 |
commit | 32f21f2a017c5c0e08a204302eb6061f6c6cc3be (patch) | |
tree | 134b07837113b00c4417bfea930dad94abe007d0 /lib | |
parent | e60bbd1bfc8c655090edb9935033221fce79cc5d (diff) | |
download | spack-32f21f2a017c5c0e08a204302eb6061f6c6cc3be.tar.gz spack-32f21f2a017c5c0e08a204302eb6061f6c6cc3be.tar.bz2 spack-32f21f2a017c5c0e08a204302eb6061f6c6cc3be.tar.xz spack-32f21f2a017c5c0e08a204302eb6061f6c6cc3be.zip |
Spack python 3.12: PEP 695 unparse support (#40155)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/util/unparse/unparser.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/spack/spack/util/unparse/unparser.py b/lib/spack/spack/util/unparse/unparser.py index 75f61e53f9..27dba8f287 100644 --- a/lib/spack/spack/util/unparse/unparser.py +++ b/lib/spack/spack/util/unparse/unparser.py @@ -380,6 +380,10 @@ class Unparser: self.fill("@") self.dispatch(deco) self.fill("class " + node.name) + if getattr(node, "type_params", False): + self.write("[") + interleave(lambda: self.write(", "), self.dispatch, node.type_params) + self.write("]") with self.delimit_if("(", ")", condition=node.bases or node.keywords): comma = False for e in node.bases: @@ -425,6 +429,10 @@ class Unparser: self.dispatch(deco) def_str = fill_suffix + " " + node.name self.fill(def_str) + if getattr(node, "type_params", False): + self.write("[") + interleave(lambda: self.write(", "), self.dispatch, node.type_params) + self.write("]") with self.delimit("(", ")"): self.dispatch(node.args) if getattr(node, "returns", False): @@ -1138,3 +1146,23 @@ class Unparser: with self.require_parens(_Precedence.BOR, node): self.set_precedence(pnext(_Precedence.BOR), *node.patterns) interleave(lambda: self.write(" | "), self.dispatch, node.patterns) + + def visit_TypeAlias(self, node): + self.fill("type ") + self.dispatch(node.name) + self.write(" = ") + self.dispatch(node.value) + + def visit_TypeVar(self, node): + self.write(node.name) + if node.bound: + self.write(": ") + self.dispatch(node.bound) + + def visit_TypeVarTuple(self, node): + self.write("*") + self.write(node.name) + + def visit_ParamSpec(self, node): + self.write("**") + self.write(node.name) |