Skip to content

Commit

Permalink
pythongh-112205: Require @getter and @Setter to be methods (python#11…
Browse files Browse the repository at this point in the history
…3278)

Co-authored-by: Alex Waygood <[email protected]>
  • Loading branch information
erlend-aasland and AlexWaygood authored Dec 19, 2023
1 parent e51b400 commit 6a69b80
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Lib/test/test_clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -2249,6 +2249,17 @@ class Foo "" ""
expected_error = "Cannot apply both @getter and @setter to the same function!"
self.expect_failure(block, expected_error, lineno=3)

def test_getset_no_class(self):
for annotation in "@getter", "@setter":
with self.subTest(annotation=annotation):
block = f"""
module m
{annotation}
m.func
"""
expected_error = "@getter and @setter must be methods"
self.expect_failure(block, expected_error, lineno=2)

def test_duplicate_coexist(self):
err = "Called @coexist twice"
block = """
Expand Down
4 changes: 4 additions & 0 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -5614,6 +5614,10 @@ def state_modulename_name(self, line: str) -> None:
function_name = fields.pop()
module, cls = self.clinic._module_and_class(fields)

if self.kind in {GETTER, SETTER}:
if not cls:
fail("@getter and @setter must be methods")

self.update_function_kind(full_name)
if self.kind is METHOD_INIT and not return_converter:
return_converter = init_return_converter()
Expand Down

0 comments on commit 6a69b80

Please sign in to comment.