summaryrefslogtreecommitdiffstats
path: root/Tools/clinic
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2024-04-10 08:12:05 (GMT)
committerGitHub <noreply@github.com>2024-04-10 08:12:05 (GMT)
commit0d42ac9474f857633d00b414c0715f4efa73f1ca (patch)
tree96a3f6f4b4e7ed544d07b547ddf51b8cc5853acd /Tools/clinic
parent73906d5c908c1e0b73c5436faeff7d93698fc074 (diff)
downloadcpython-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.py12
-rw-r--r--Tools/clinic/libclinic/function.py1
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)