diff options
author | Erlend E. Aasland <erlend@python.org> | 2024-04-10 08:12:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-10 08:12:05 (GMT) |
commit | 0d42ac9474f857633d00b414c0715f4efa73f1ca (patch) | |
tree | 96a3f6f4b4e7ed544d07b547ddf51b8cc5853acd /Tools/clinic | |
parent | 73906d5c908c1e0b73c5436faeff7d93698fc074 (diff) | |
download | cpython-0d42ac9474f857633d00b414c0715f4efa73f1ca.zip cpython-0d42ac9474f857633d00b414c0715f4efa73f1ca.tar.gz cpython-0d42ac9474f857633d00b414c0715f4efa73f1ca.tar.bz2 |
gh-117431: Argument Clinic: copy forced text signature when cloning (#117591)
Diffstat (limited to 'Tools/clinic')
-rw-r--r-- | Tools/clinic/libclinic/dsl_parser.py | 12 | ||||
-rw-r--r-- | Tools/clinic/libclinic/function.py | 1 |
2 files changed, 9 insertions, 4 deletions
diff --git a/Tools/clinic/libclinic/dsl_parser.py b/Tools/clinic/libclinic/dsl_parser.py index 4c739ef..9e22d84 100644 --- a/Tools/clinic/libclinic/dsl_parser.py +++ b/Tools/clinic/libclinic/dsl_parser.py @@ -666,6 +666,8 @@ class DSLParser: if equals: existing = existing.strip() if libclinic.is_legal_py_identifier(existing): + if self.forced_text_signature: + fail("Cannot use @text_signature when cloning a function") # we're cloning! names = self.parse_function_names(before) return self.parse_cloned_function(names, existing) @@ -689,7 +691,8 @@ class DSLParser: kind=self.kind, coexist=self.coexist, critical_section=self.critical_section, - target_critical_section=self.target_critical_section + target_critical_section=self.target_critical_section, + forced_text_signature=self.forced_text_signature ) self.add_function(func) @@ -1324,13 +1327,14 @@ class DSLParser: self.docstring_append(self.function, line) + @staticmethod def format_docstring_signature( - self, f: Function, parameters: list[Parameter] + f: Function, parameters: list[Parameter] ) -> str: lines = [] lines.append(f.displayname) - if self.forced_text_signature: - lines.append(self.forced_text_signature) + if f.forced_text_signature: + lines.append(f.forced_text_signature) elif f.kind in {GETTER, SETTER}: # @getter and @setter do not need signatures like a method or a function. return '' diff --git a/Tools/clinic/libclinic/function.py b/Tools/clinic/libclinic/function.py index 572916b..9390126 100644 --- a/Tools/clinic/libclinic/function.py +++ b/Tools/clinic/libclinic/function.py @@ -107,6 +107,7 @@ class Function: # functions with optional groups because we can't represent # those accurately with inspect.Signature in 3.4. docstring_only: bool = False + forced_text_signature: str | None = None critical_section: bool = False target_critical_section: list[str] = dc.field(default_factory=list) |