Enderpy是Python的代碼完成引擎,靜態類型的Checker和語言服務器。
該項目正在積極發展。有破壞性的變化,除非您想為此做出貢獻並獲得樂趣,否則它沒有被認為可以使用。
它為開發人員提供了快速的自動完成和快速反饋循環,撰寫Python時。
拉夫表明,提供更快的靜態檢查器實現速度有一個價值。
該項目旨在建立實現快速自動完成和類型檢查的目標所需的組件,包括:
克隆存儲庫
git submodule init
git submodule update
cargo build
上述測試應無問題進行。
然後使用編輯客戶端。目前,支持的編輯是:
如果您在這裡,那麼您想編寫一些鏽蝕代碼,讓我們開始。您可以向我發送一條消息以進行討論/幫助。
您可以使用這些學習資源來了解項目的每個部分。
以下將是對項目及其工作原理的簡要介紹。但是,最好諮詢代碼以查看到底發生了什麼。
默認情況下,擴展名使用enderpy-lsp命令運行語言服務器。要更改它,將SERVER_PATH Env變量設置為自定義可執行文件。
將以下片段添加到您的init.lua文件中。
-- Replace this ↓ with the actual path to your copy of the repository.
local enderpy_path = " /path/to/enderpy "
vim . api . nvim_create_autocmd ( " FileType " , {
pattern = " python " ,
callback = function ()
vim . lsp . start ({
name = " enderpy " ,
cmd = { enderpy_path .. " /target/debug/enderpy-lsp " },
})
end ,
})該項目由多個板條箱組成,每個板條箱分別發布給板條箱:iio:
CLI和LSP是使用此項目的兩種方法。例如,當您在編輯器中使用Enderpy時,會發生這種情況:
所有測試均使用insta.rs完成。
在每個板條箱中,您會找到一個稱為test_data的文件夾,其中包含其中的輸入。這些輸入是用於測試該板條箱的Python文件。例如,這是如何再次測試解析器的輸入:
enderpy/parser/src/parser/parser.rs
4A6F49D中的3695行
當測試使用Insta進行測試時,它們會產生可以查看的快照,並且保存這些快照後,它們將是測試的預期輸出。閱讀Insta.rs文檔,以查看如何運行和查看測試。
解析階段是關於獲取Python源代碼並將其變成AST。
Lexer負責將Python源代碼施加。
解析器使用Lexer的輸出來讀取令牌並產生AST。
您可以使用CLI工具看到每個步驟的輸出(使用幫助查找如何使用它)。
還將結果與Python進行比較,您可以使用以下Python模塊:
分析階段首先獲得通往初始文件的路徑以輸入檢查。有一個名為Builder結構,可以管理從獲得途徑到創建診斷的所有內容。
Builder首先在初始文件中解析導入,並導入這些輸入以進行檢查。然後,它將在文件上進行第一次通過以綁定定義並將其存儲在符號表中。
項目使用訪問者模式來穿越AST。
Python有一個符號表,您可以使用該表來查看程序的符號表。 ./scripts文件夾中有一個腳本。
創建符號表之後,Bulider運行每個文件的Typecheck。
最後,構建器填充了列表中的錯誤。
該項目可以通過兩種方式使用,首先是可以檢查您的Python項目的CLI工具,也可以用作編輯器內的LSP。
可用以下命令:
Usage: enderpy < COMMAND >
Commands:
tokenize Print lexer tokens
parse Print abstract syntax tree
check Type check
symbols Prints Symbol table
help Print this message or the help of the given subcommand(s)對於LSP,您需要安裝enderpy-lsp程序,然後為編輯器安裝擴展程序。
LSP支持:
當前沒有配置。這些是程序的默認行為。
項目根:被視為項目根的路徑。這會影響導入解決方案,並收集文件進行檢查。
Python可執行文件:Python可執行的路徑。這是為了解決第三方依賴。