Godot 游戲開發(fā),只需要 Sublime Text + LSP[2]

?? Godot 游戲開發(fā),只需要 Sublime Text + LSP
LSP - Language Server Protocol 編程語言服務(wù)器協(xié)議

https://docs.godotengine.org/en/stable/tutorials/editor/command_line_tutorial.html
[GDScript support for Sublime Text](https://packagecontrol.io/packages/GDScript%20(Godot%20Engine)
[LSP - Language Server Protocol for Sublime Text](https://packagecontrol.io/packages/LSP)
[LSP Client - GDScript (Godot Engine)](https://lsp.sublimetext.io/language_servers/#gdscript-godot-engine)
[Language Server Protocol Specification](https://microsoft.github.io/language-server-protocol/specification)
[TypeScript Wiki - Writing a Language Service Plugin](https://github.com/Microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin)
godot\3.5.1-stable\editor\editor_settings.cpp
godot\3.5.1-stable\modules\gdscript\language_server\lsp.hpp
godot\3.5.1-stable\modules\gdscript\language_server\gdscript_language_server.h
godot\master\modules\gdscript\language_server\godot_lsp.h
godot\master\modules\gdscript\language_server\gdscript_language_server.h
godot\master\modules\gdscript\language_server\gdscript_language_protocol.h

LSP - Language Server Protocol 是一種用于給編輯器提供代碼提示功能的協(xié)議,LSP 協(xié)議定義的是代碼編輯器與指定語言語法、關(guān)鍵字和各種對象符號之間的通信文檔格式,編輯在編寫代碼的過程中,會將內(nèi)容發(fā)送到 LSP 服務(wù)器。而各種語言的官方通常會實(shí)現(xiàn)自家的 LSP Client,LSP 服務(wù)器根據(jù)配置文件相詢指定語言對應(yīng)的 LSP Client,并從其獲取符合 LSP 協(xié)議規(guī)范的數(shù)據(jù),并反饋給代碼編輯器,通常代碼編輯器中會通過插件的形式提供 LSP 功能。比如,VSCode 或者 Sublime Text 等軟件都有相應(yīng)的 LSP 插件。
LSP - Language Server Protocol 是一種編程輔助工具,簡單地說 LSP 協(xié)議有兩個(gè)主體:
- Editor 按照 LSP 的消息規(guī)范向 Language Server 方發(fā)送用戶操作、當(dāng)前編輯代碼的相關(guān)信息;
- Server 按照 LSP 協(xié)議提供查詢服務(wù),響應(yīng)編輯器請求,并根據(jù)程序上下文給出建議、語法檢查、自動完成等等。
LSP 的好處就是統(tǒng)一,所以語言通過服務(wù)器提供智能操作,通數(shù)據(jù)通信使用 JSON RPC protocol,用性極高。
URI 格式參考 http://tools.ietf.org/html/rfc3986
除了使用 LSP 本地代碼提示服務(wù),另外還有 Language Server Index Format (LSIF) 語言服務(wù)器索引,這種數(shù)據(jù)格式的目標(biāo)是支持開發(fā)工具或 Web UI 中的豐富代碼導(dǎo)航,而不需要源代碼的本地副本。該格式在本質(zhì)上類似于語言服務(wù)器協(xié)議(LSP),它簡化了將豐富的代碼編輯功能集成到開發(fā)工具中的過程。
LSP 提供了豐富的代碼創(chuàng)作功能,例如自動完成、類型格式化和豐富的代碼導(dǎo)航。為了有效地提供這些功能,語言服務(wù)器要求所有源代碼文件都在本地磁盤上可用。LSP 語言服務(wù)器還可以將部分或全部文件讀入內(nèi)存并計(jì)算抽象語法樹以支持這些功能。LSIF 的目標(biāo)是增強(qiáng) LSP 協(xié)議以支持沒有這些要求的豐富代碼導(dǎo)航功能。LSIF 為語言服務(wù)器或其他編程工具定義了一種標(biāo)準(zhǔn)格式,以發(fā)布他們關(guān)于代碼工作空間的知識。此持久化信息稍后可用于響應(yīng)對同一工作區(qū)的 LSP 請求,而無需運(yùn)行語言服務(wù)器。
當(dāng)前 LSIF 規(guī)范版本還支持:
? ?1. Document symbols
? ?2. document links
? ?3. Go to Definition
? ?4. Go to Declaration
? ?5. Go to Type Definition
? ?6. Find All References
? ?7. Go to Implementation
LSP Specification 3.16 Major new feature are:
? ?1. Semantic Token support
? ?2. Call Hierarchy support
? ?3. Linked Editing support
? ?4. Moniker support
? ?5. Events for file operations (create, rename, delete)
? ?6. Change annotation support for text edits and file operations (create, rename, delete)
LSP 2.x Messages overview 注意箭頭表示消息流向,右側(cè)為 Client ?? Server,帶回鉤表示有回復(fù):
在 VSCode 或 Sublime Text 使用 LSP 插件。安裝插件后,使用 LSP: Troubleshoot Server 來檢測 clangd 等語言服務(wù)是否正常,即安裝了 Clangd 并可以在路徑環(huán)境變量中搜索到它。
Godot 也實(shí)現(xiàn)了 LSP Client 服務(wù),新舊版本默認(rèn)服務(wù)端口分別是 6005 和 6008。這些配置都可以通過EditorSettings 進(jìn)行設(shè)置:
配置 Sublime Text 以運(yùn)行 GDScript 腳本,根據(jù) Godot 路徑修改 PATH 環(huán)境變量:
先創(chuàng)建構(gòu)建配置,執(zhí)行菜單: Tools -> Build System -> New Build System ...
將以下 JSON 配置粘貼到配置文件中,并保存到 Packages\User\Godot.sublime-build 文件
然后打開 GDScript 腳本,按 Ctrl+B 執(zhí)行構(gòu)建命令
推薦安裝以下插件,以提供語法高亮和自動完成功能:
GDScript support for Sublime Text
LSP - Language Server Protocol for Sublime Text
安裝好插件后,需要配置 LSP,將以下配置寫入 Preferences > Package Settings > LSP > Settings,根據(jù) Godot 可執(zhí)行程序修改路徑,添加 "godot-lsp" 客戶服務(wù)后就可以通過 LSP 提供自動完成,以及上下文提示:
啟動 Godot 編輯器后,默認(rèn)就會啟用 LSP Client,在編輯器設(shè)置中可以修改默認(rèn)配置。Sublime Text 的快捷命令面板中,Ctrl-Shift-P,執(zhí)行 LSP: Troubleshoot Server 可以對語言服務(wù)進(jìn)行檢測。如果配置的端口不一致,就會導(dǎo)致服務(wù)連接不上,如果沒有使用對應(yīng) Godot 版本的端口,那么提供的提示信息就可能不是最準(zhǔn)確的。比如,舊版 ClassDB.instance() 和新版本的 instantiate() 是用于執(zhí)行類型實(shí)例的函數(shù),可能因?yàn)槭褂玫?Godot LSP Client 版本不同而出現(xiàn)不同的提示信息。
Sublime Text 中,啟用 Godot LSP 服務(wù)時(shí),會自動打開配置中 Godot 編輯器以運(yùn)行 LSP Client。如果,已經(jīng)運(yùn)行其它同版本的 Godot 編輯器,那么 LSP Client 就可能已經(jīng)在運(yùn)行了,自動打開的可以關(guān)閉。