Compare commits

...
3 Commits
Author SHA1 Message Date
曾楚笑 5c37b736a3 Fix get_context indentation for async functions (#2107) 2026-09-22 21:50:04 +00:00
Elias 19236b472b Avoid goto crashes on unfinished keyword calls (#2106) 2026-09-20 07:13:11 +00:00
ef5d361121 Fix typos in comments and docstrings (#2101)
Found by codespell:
- curent -> current (classes.py)
- suppport -> support, propeties -> properties (inference/__init__.py)
- existance -> existence (inference/analysis.py)
- Propably -> Probably (inference/value/instance.py)

Co-authored-by: maxtaran2010 <ocotifuzo727@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 23:42:11 +00:00
9 changed files with 53 additions and 4 deletions
+2
View File
@@ -66,6 +66,8 @@ Code Contributors
- Martin Vielsmaier (@moser) <martin@vielsmaier.net>
- TingJia Wu (@WutingjiaX) <wutingjia@bytedance.com>
- Nguyễn Hồng Quân <ng.hong.quan@gmail.com>
- haoran3160-afk (@haoran3160-afk)
- Eric3-jp (@Eric3-jp) (with OpenAI Codex assistance)
And a few more "anonymous" contributors.
+2
View File
@@ -502,6 +502,8 @@ class Script:
tree_name = name.tree_name
if tree_name is not None: # Happens with lambdas.
scope = tree_name.get_definition()
if scope.parent.type in ('async_stmt', 'async_funcdef'):
scope = scope.parent
if scope.start_pos[1] < column:
break
definition = definition.parent()
+1 -1
View File
@@ -831,7 +831,7 @@ class Signature(BaseSignature):
def index(self):
"""
Returns the param index of the current cursor position.
Returns None if the index cannot be found in the curent call.
Returns None if the index cannot be found in the current call.
:rtype: int
"""
+1 -1
View File
@@ -125,7 +125,7 @@ class InferenceState:
debug.dbg('execute result: %s in %s', value_set, value)
return value_set
# mypy doesn't suppport decorated propeties (https://github.com/python/mypy/issues/1362)
# mypy doesn't support decorated properties (https://github.com/python/mypy/issues/1362)
@property
@inference_state_function_cache()
def builtins_module(self):
+1 -1
View File
@@ -110,7 +110,7 @@ def _check_for_setattr(instance):
def add_attribute_error(name_context, lookup_value, name):
message = ('AttributeError: %s has no attribute %s.' % (lookup_value, name))
# Check for __getattr__/__getattribute__ existance and issue a warning
# Check for __getattr__/__getattribute__ existence and issue a warning
# instead of an error, if that happens.
typ = Error
if lookup_value.is_instance() and not lookup_value.is_compiled():
+2
View File
@@ -170,6 +170,8 @@ class AbstractTreeName(AbstractNameDefinition):
trailer = par.parent
if trailer.type == 'arglist':
trailer = trailer.parent
if trailer.type == 'error_node':
return []
if trailer.type != 'classdef':
if trailer.type == 'decorator':
value_set = context.infer_node(trailer.children[1])
+1 -1
View File
@@ -224,7 +224,7 @@ class _BaseTreeInstance(AbstractInstanceValue):
elif isinstance(f, CompiledValueFilter):
yield CompiledInstanceClassFilter(self, f)
else:
# Propably from the metaclass.
# Probably from the metaclass.
yield f
@inference_state_method_cache()
+13
View File
@@ -231,6 +231,19 @@ def test_goto_follow_imports(Script):
assert d.name == 'a'
@pytest.mark.parametrize('prefix', ['', 'def foo(bar): pass\n', 'def f():\n '])
@pytest.mark.parametrize('call', ['foo(bar=1', 'foo(bar=1,', 'foo(foo(bar=1'])
def test_goto_incomplete_named_argument(Script, prefix, call):
code = prefix + call
column = code.splitlines()[-1].index('bar')
assert Script(code).goto(column=column) == []
def test_goto_named_argument_in_complete_inner_call(Script):
param, = Script('def foo(bar): pass\nfoo(foo(bar=1)').goto(2, 8)
assert (param.name, param.line, param.column) == ('bar', 1, 8)
def test_goto_module(Script):
def check(line, expected, follow_imports=False):
script = Script(path=path)
+30
View File
@@ -53,6 +53,21 @@ def x():
]
'''
async_code = '''\
async def coro():
return None
'''
async_method = '''\
class C:
async def coro(self):
return None
'''
async_nested = '''\
async def outer():
async def inner():
return None
'''
@pytest.mark.parametrize(
'code, line, column, full_name, expected_parents', [
@@ -106,6 +121,21 @@ def x():
(with_brackets, 3, None, 'myfile', []),
(with_brackets, 4, 4, 'myfile.x', ['x']),
(with_brackets, 4, 5, 'myfile.x', ['x']),
(async_code, 2, 0, 'myfile', []),
(async_code, 2, 4, 'myfile.coro', ['coro']),
(async_code, 2, 5, 'myfile.coro', ['coro']),
(async_code, 2, None, 'myfile.coro', ['coro']),
('@decorator\n' + async_code, 3, 0, 'myfile', []),
('@decorator\n' + async_code, 3, 4, 'myfile.coro', ['coro']),
('@decorator\n' + async_code, 3, 5, 'myfile.coro', ['coro']),
(async_method, 3, 4, 'myfile.C', ['C']),
(async_method, 3, 8, 'myfile.C.coro', ['C', 'coro']),
(async_method, 3, 9, 'myfile.C.coro', ['C', 'coro']),
(async_nested, 3, 0, 'myfile', []),
(async_nested, 3, 4, 'myfile.outer', ['outer']),
(async_nested, 3, 8, None, ['outer', 'inner']),
(async_nested, 3, 9, None, ['outer', 'inner']),
]
)
def test_context(Script, code, line, column, full_name, expected_parents):