There is no completely automated facility for generating stubs that are both accurate and comprehensive for native modules. After some experimentation, I found that MyPy's stubgen does the best at generating correct stubs with a few caveats that are relatively easy to fix:
- Some types resolve to cross module symbols incorrectly.
- staticmethod and classmethod signatures seem to always be completely generic and need to be manually provided.
- It does not generate an all which, from testing, causes namespace pollution to be visible to IDE code completion.
As a first step, I did the following:
- Ran stubgen for _mlir.ir, _mlir.passmanager, and _mlirExecutionEngine.
- Manually looked for all instances where unnamed arguments were being emitted (i.e. as 'arg0', etc) and updated the C++ side to include names (and re-ran stubgen to get a good initial state).
- Made/noted a few structural changes to each pyi file to make it minimally functional.
- Added the pyi files to the CMake rules so they are installed and visible.
To test, I added a .env file to the root of the project with PYTHONPATH=... set as per instructions. Then reload the developer window (in VsCode) and verify that completion works for various changes to test cases.
There are still a number of overly generic signatures, but I want to check in this low-touch baseline before iterating on more ambiguous changes. This is already a big improvement.
Still arg0 here.