Pysonar2是Python的语义索引库,专为大型代码库的批量处理而设计。结果索引可用于构建代码浏览器和代码搜索引擎。
Python是一种高度动态的语言。为了达到高精度和质量,Pysonar2执行概要分析以推断类型。 Pysonar2通常比Python IDE产生更好的索引,同时牺牲IDE的实时更新功能。
请注意,此处的“类型推理”一词是描述性的,而不是规定,这意味着推断的类型描述了代码实际使用的方式,但不开处方必须使用它们。因此,类型推理在这里的工作方式与类型系统不同(例如Hindley-Milner系统)。
Pysonar2是多个大规模代码导航服务的基础索引引擎,例如Google的内部代码搜索,SourceGraph.com和Insight.io(现为Elastic的一部分)。
mvn package -DskipTests
为了感觉到Pysonar2产生的产品,您可以构建一个带有以下命令行的Python 2.7标准库的简单代码浏览器:
java -jar target/pysonar-<version>.jar /usr/lib/python2.7 ./html
这可能需要几分钟,具体取决于您的机器。在此过程之后,您应该在HTML目录内找到一些交互式HTML文件。您可以在变量上移动鼠标,然后单击它们跳到定义等。
请注意,这只是基于库的简单演示程序。 Pysonar2并不是要成为最终用户工具。它主要设计为用于Python IDE,开发人员工具和代码搜索引擎的库,因此其界面可能不像最终用户工具那样吸引人。
如果您有问题,请随时与我联系。
Pysonar2使用CPYTHON的内置ast软件包来解析Python代码,因此请确保已安装python或python3并通过PATH环境变量指向。如果您的名称不同,请进行符号链接。
PYTHONPATH环境变量用于定位Python标准库。例如,将其指向正确的python库很重要,例如
export PYTHONPATH=/usr/lib/python2.7
如果未正确设置此设置,则将找不到对库代码的引用。
欢迎您做代码贡献。
由于Pysonar2背后的高度复杂和未发表的理论,即使是无辜的变化,事情也可能很容易出错。如果您希望为Pysonar2做出贡献,请在做出重大更改之前先与我讨论,否则我可能无法审查您的更改。
对于基本验证,您可以运行单元测试。 Pysonar2具有基本的测试框架。您可以使用此命令运行测试:
mvn test
如果修改代码或测试,则需要生成新的预期结果。运行以下命令行:
mvn package -DskipTests
java -classpath target/pysonar-<version>.jar org.yinwang.pysonar.TestInference -generate tests
要编写新的测试,您只需要编写相关的Python代码来证明您的更改,将它们放入名为tests/testname.test的目录中(Test Directory名称必须以“ .test”结尾)。请查看tests目录以获取示例。
请不要指望测试会捕获所有错误。要非常小心:)
Apache 2.0许可证。请参阅许可证文件。