forked from VimPlug/jedi
Fix check pytest fixture from import on the right context
This commit is contained in:
@@ -177,21 +177,21 @@ def _iter_pytest_modules(module_context, skip_own_module=False):
|
|||||||
class FixtureFilter(ParserTreeFilter):
|
class FixtureFilter(ParserTreeFilter):
|
||||||
def _filter(self, names):
|
def _filter(self, names):
|
||||||
for name in super()._filter(names):
|
for name in super()._filter(names):
|
||||||
# resolve possible imports before checking for a fixture
|
# look for fixture definitions of imported names
|
||||||
if name.parent.type == "import_from":
|
if name.parent.type == "import_from":
|
||||||
imported_names = goto_import(self.parent_context, name)
|
imported_names = goto_import(self.parent_context, name)
|
||||||
# discard imports of whole modules, that have no tree_name
|
|
||||||
imported_tree_names = (
|
|
||||||
iname.tree_name for iname in imported_names if iname.tree_name
|
|
||||||
)
|
|
||||||
if any(
|
if any(
|
||||||
self._is_fixture(tree_name) for tree_name in imported_tree_names
|
self._is_fixture(iname.parent_context, iname.tree_name)
|
||||||
|
for iname in imported_names
|
||||||
|
# discard imports of whole modules, that have no tree_name
|
||||||
|
if iname.tree_name
|
||||||
):
|
):
|
||||||
yield name
|
yield name
|
||||||
elif self._is_fixture(name):
|
|
||||||
|
elif self._is_fixture(self.parent_context, name):
|
||||||
yield name
|
yield name
|
||||||
|
|
||||||
def _is_fixture(self, name):
|
def _is_fixture(self, context, name):
|
||||||
funcdef = name.parent
|
funcdef = name.parent
|
||||||
# Class fixtures are not supported
|
# Class fixtures are not supported
|
||||||
if funcdef.type != "funcdef":
|
if funcdef.type != "funcdef":
|
||||||
@@ -215,11 +215,12 @@ class FixtureFilter(ParserTreeFilter):
|
|||||||
last_leaf = last_trailer.get_last_leaf()
|
last_leaf = last_trailer.get_last_leaf()
|
||||||
if last_leaf == ')':
|
if last_leaf == ')':
|
||||||
values = infer_call_of_leaf(
|
values = infer_call_of_leaf(
|
||||||
self.parent_context, last_leaf, cut_own_trailer=True)
|
context, last_leaf, cut_own_trailer=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
values = self.parent_context.infer_node(dotted_name)
|
values = context.infer_node(dotted_name)
|
||||||
else:
|
else:
|
||||||
values = self.parent_context.infer_node(dotted_name)
|
values = context.infer_node(dotted_name)
|
||||||
for value in values:
|
for value in values:
|
||||||
if value.name.get_qualified_names(include_module_names=True) \
|
if value.name.get_qualified_names(include_module_names=True) \
|
||||||
== ('_pytest', 'fixtures', 'fixture'):
|
== ('_pytest', 'fixtures', 'fixture'):
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from pytest import fixture
|
|
||||||
|
from .fixtures import admin_user # noqa
|
||||||
|
|
||||||
|
|
||||||
from pytest_plugin.fixtures import admin_user # noqa
|
@pytest.fixture()
|
||||||
|
def admin_client():
|
||||||
|
return Client()
|
||||||
|
|
||||||
|
|
||||||
class Client:
|
class Client:
|
||||||
@@ -11,8 +14,3 @@ class Client:
|
|||||||
|
|
||||||
def logout(self):
|
def logout(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
|
||||||
def admin_client():
|
|
||||||
return Client()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user