pylance loses link to a object if it was returned by fixture
Environment data
- Language Server version: 2024.4.1
- OS and version: linux x64
- Python version (and distribution if applicable, e.g. Anaconda): python3.8 , pip23.2.1,
- python.analysis.indexing: true
- python.analysis.typeCheckingMode: basic
Code Snippet
class Cl_1:
def __init__(self):
pass
def some_f1:(self):
pass
class Cl_2:
def __init__(self):
self.obj1=Cl_1()
def some_f2:(self):
pass
@fixture
def fixt_1():
yield Cl_2()
@fixture
def fixt_2(fixt_1):
yield fixt_1
def test_some_test(fixt_2):
fixt_2.some_f2()
fixt_2.obj1.some_f1
Repro Steps
- XXX
Expected behavior
Test run ok. When I press CTRL+ left mouse click in any of the : fixt_2.some_f2() fixt_2.obj1.some_f1()
I jump into declaration of the appropriate function
Actual behavior
Test runs ok. Inside my test: (function) some_f2: Unknown (function) obj1: Unknown
Logs
XXX
Requirments
[requirements.txt](https://github.com/microsoft/pylance-release/files/14846468/requirements.txt)XXX
I did some experiments, this issue is reproducible when the inlay hints are not visible: "editor.inlayHints.enabled": "offUnlessPressed" or "editor.inlayHints.enabled": "off"
thank you for the issue.
yes there seems to be an issue with fixtures that use yield to return a generator.
there was a slight type in your def somef1:(self) to def somef1(self)
if you set typecheckingmode to basic you should see the errors
for now try adding annotations to the fixture usage
from pytest import fixture
class Cl_1:
def __init__(self):
pass
def some_f1(self):
pass
class Cl_2:
def __init__(self):
self.obj1=Cl_1()
def some_f2(self):
pass
@fixture
def fixt_1():
yield Cl_2()
@fixture
def fixt_2(fixt_1: Cl_2):
yield fixt_1
def test_some_test(fixt_2: Cl_2):
fixt_2.some_f2()
fixt_2.obj1.some_f1
on second thought maybe my annotation is wrong for this def test_some_test(fixt_2: Cl_2):
Hello, is there any movement in this investigation?
Sorry this hasn't been investigated yet.