Skip to content

More improvements to stubgen #7951

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 38 commits into from
Nov 15, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
037ce58
Continue operation even if imported module raises SystemExit
JukkaL Nov 5, 2019
86e9ad4
Use separate process for module introspection
JukkaL Nov 5, 2019
9923a7a
Recover from helper process death
JukkaL Nov 5, 2019
0722c7d
Display message when we start processing ASTs
JukkaL Nov 5, 2019
db0a8d5
Automatically skip 'setup' modules and other non-library modules
JukkaL Nov 5, 2019
ca1923a
Add additional vendored package naming convention
JukkaL Nov 6, 2019
7e10f4c
Fallback to finding module using sys.path if import fails
JukkaL Nov 6, 2019
8e1b5b8
Import all names imported from the current package by default
JukkaL Nov 6, 2019
0728e70
Silently ignore invalid docstring signatures
JukkaL Nov 7, 2019
67e2db4
Also use Python 2 sys.path to find files
JukkaL Nov 7, 2019
2cb948c
Do not generate invalid argument names from docstrings
JukkaL Nov 7, 2019
514ae1d
Be more aggressive about ignoring various dunders
JukkaL Nov 7, 2019
b818592
Avoid generating both an attribute and a property definition
JukkaL Nov 7, 2019
6237ec4
Avoid None return type for some methods that should always return a v…
JukkaL Nov 8, 2019
b4c8f21
Fix indent of named tuples
JukkaL Nov 8, 2019
c0dda3b
Fix some imports from vendorex six.moves
JukkaL Nov 8, 2019
0d6e545
Fall back to Any for a dynamic named tuple definition
JukkaL Nov 8, 2019
97f2bf4
Don't crash on invalid property definition
JukkaL Nov 8, 2019
2affb99
Clear decorators if we skip a function
JukkaL Nov 8, 2019
29acbed
Fix @classmethod without corresponding 'def' in C module
JukkaL Nov 8, 2019
75a094b
Catch more bad types and bad arguments names in C stubs
JukkaL Nov 8, 2019
fb95598
Fix stripping of C type names
JukkaL Nov 8, 2019
17440b4
Misc tweaks
JukkaL Nov 14, 2019
7968a6a
Fixes
JukkaL Nov 14, 2019
73fb604
Fix lint
JukkaL Nov 15, 2019
2cc05d5
'None' is a valid type
JukkaL Nov 15, 2019
7e3826c
Update test case
JukkaL Nov 15, 2019
e8a1498
Fix Python 3.5
JukkaL Nov 15, 2019
9634aa9
Another Python 3.5 fix
JukkaL Nov 15, 2019
18591d3
Raise exception if subprocess gets stuck
JukkaL Nov 15, 2019
99c6dad
Attempt to fix compiled
JukkaL Nov 15, 2019
78771f4
Attempt to fix compiled
JukkaL Nov 15, 2019
1a098c6
Attempt to fix compiled
JukkaL Nov 15, 2019
d35ec7b
Fix unused import
JukkaL Nov 15, 2019
d892a7a
Fix test case on Windows
JukkaL Nov 15, 2019
4724d00
Pass sys.path to the worker function
JukkaL Nov 15, 2019
1bc5af7
Respond to feedback
JukkaL Nov 15, 2019
fd088b1
Skip test case on Windows
JukkaL Nov 15, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Don't crash on invalid property definition
  • Loading branch information
JukkaL committed Nov 14, 2019
commit 97f2bf49dbb5b4a3bf69f2ccb92676ca44bed76c
28 changes: 17 additions & 11 deletions mypy/semanal.py
Original file line number Diff line number Diff line change
Expand Up @@ -865,19 +865,25 @@ def analyze_property_with_multi_part_definition(self, defn: OverloadedFuncDef) -
defn.is_property = True
items = defn.items
first_item = cast(Decorator, defn.items[0])
for item in items[1:]:
if isinstance(item, Decorator) and len(item.decorators) == 1:
node = item.decorators[0]
if isinstance(node, MemberExpr):
if node.name == 'setter':
# The first item represents the entire property.
first_item.var.is_settable_property = True
# Get abstractness from the original definition.
item.func.is_abstract = first_item.func.is_abstract
else:
self.fail("Decorated property not supported", item)
deleted_items = []
for i, item in enumerate(items[1:]):
if isinstance(item, Decorator):
if len(item.decorators) == 1:
node = item.decorators[0]
if isinstance(node, MemberExpr):
if node.name == 'setter':
# The first item represents the entire property.
first_item.var.is_settable_property = True
# Get abstractness from the original definition.
item.func.is_abstract = first_item.func.is_abstract
else:
self.fail("Decorated property not supported", item)
item.func.accept(self)
else:
self.fail('Unexpected definition for property "{}"'.format(first_item.func.name()), item)
deleted_items.append(i + 1)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if the extra item is also decorated (with some unrelated decorator)? Maybe add a test for this?

for i in reversed(deleted_items):
del items[i]

def add_function_to_symbol_table(self, func: Union[FuncDef, OverloadedFuncDef]) -> None:
if self.is_class_scope():
Expand Down
9 changes: 9 additions & 0 deletions test-data/unit/check-classes.test
Original file line number Diff line number Diff line change
Expand Up @@ -6545,3 +6545,12 @@ class C3(Generic[TypeT1]):
return 0

[builtins fixtures/isinstancelist.pyi]

[case testPropertyWithExtraMethod]
class A:
@property
def x(self): ...
@x.setter
def x(self, value) -> None: ...
def x(self) -> None: ... # E: Unexpected definition for property "x"
[builtins fixtures/property.pyi]
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy