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許可證。請參閱許可證文件。