我正在开发一个项目,需要分析 Python 代码库并以编程方式提取特定变量的类型信息。我对使用 Pylance(或底层 Pyright)很感兴趣,因为我发现它与 VS Code 一起使用时的类型推断非常准确。
有没有办法以编程方式使用 Pylance 或 Pyright 来分析 Python 代码并检索类型信息?
到目前为止我所考虑的:
语言服务器协议 (LSP):
Pylance 使用语言服务器协议 (LSP) 作为语言服务器运行。我想过设置一个LSP客户端,启动Pylance语言服务器,然后发送LSP请求来获取类型信息。但是,我不确定这种方法的具体细节。
直接使用 Pyright:
由于 Pyright 是 Pylance 背后的核心类型检查器,因此我考虑直接将其用作库来分析代码。但我不确定内部 API 以及如何以编程方式利用它们来实现此目的。
替代工具:
我知道还有其他工具(例如 mypy)可能提供用于分析 Python 代码的编程 API。但我对 Pylance/Pyright 特别感兴趣,因为它们在类型推断方面非常准确。
手动解析:
作为最后的手段,我考虑使用 ast 库手动解析 Python 代码以提取类型提示。这不会提供推断类型,但它可能是一个起点。
一个简单的例子:
class Person:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def get_age(self) -> int:
return self.age
def add_numbers(a: int, b: int) -> int:
return a + b
def main():
# Create a Person object
person = Person("Alice", 30)
# Invoke get_age method and print the result
age = person.get_age()
print(f"{person.name}'s age is {age} years old.")
if __name__ == "__main__":
main()
对于“age = person.get_age()”行,对于 person 变量,我想知道它的类型为“Person”。我必须以编程方式执行此操作。
有没有人尝试过类似的事情或对如何实现这一目标有见解?任何指导或指示将不胜感激!