Godot 游戏开发,只需要 Sublime Text + LSP[2]

🟡 Godot 游戏开发,只需要 Sublime Text + LSP
LSP - Language Server Protocol 编程语言服务器协议

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 是一种用于给编辑器提供代码提示功能的协议,LSP 协议定义的是代码编辑器与指定语言语法、关键字和各种对象符号之间的通信文档格式,编辑在编写代码的过程中,会将内容发送到 LSP 服务器。而各种语言的官方通常会实现自家的 LSP Client,LSP 服务器根据配置文件相询指定语言对应的 LSP Client,并从其获取符合 LSP 协议规范的数据,并反馈给代码编辑器,通常代码编辑器中会通过插件的形式提供 LSP 功能。比如,VSCode 或者 Sublime Text 等软件都有相应的 LSP 插件。
LSP - Language Server Protocol 是一种编程辅助工具,简单地说 LSP 协议有两个主体:
- Editor 按照 LSP 的消息规范向 Language Server 方发送用户操作、当前编辑代码的相关信息;
- Server 按照 LSP 协议提供查询服务,响应编辑器请求,并根据程序上下文给出建议、语法检查、自动完成等等。
LSP 的好处就是统一,所以语言通过服务器提供智能操作,通数据通信使用 JSON RPC protocol,用性极高。
URI 格式参考 http://tools.ietf.org/html/rfc3986
除了使用 LSP 本地代码提示服务,另外还有 Language Server Index Format (LSIF) 语言服务器索引,这种数据格式的目标是支持开发工具或 Web UI 中的丰富代码导航,而不需要源代码的本地副本。该格式在本质上类似于语言服务器协议(LSP),它简化了将丰富的代码编辑功能集成到开发工具中的过程。
LSP 提供了丰富的代码创作功能,例如自动完成、类型格式化和丰富的代码导航。为了有效地提供这些功能,语言服务器要求所有源代码文件都在本地磁盘上可用。LSP 语言服务器还可以将部分或全部文件读入内存并计算抽象语法树以支持这些功能。LSIF 的目标是增强 LSP 协议以支持没有这些要求的丰富代码导航功能。LSIF 为语言服务器或其他编程工具定义了一种标准格式,以发布他们关于代码工作空间的知识。此持久化信息稍后可用于响应对同一工作区的 LSP 请求,而无需运行语言服务器。
当前 LSIF 规范版本还支持:
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 注意箭头表示消息流向,右侧为 Client ➡️ Server,带回钩表示有回复:
在 VSCode 或 Sublime Text 使用 LSP 插件。安装插件后,使用 LSP: Troubleshoot Server 来检测 clangd 等语言服务是否正常,即安装了 Clangd 并可以在路径环境变量中搜索到它。
Godot 也实现了 LSP Client 服务,新旧版本默认服务端口分别是 6005 和 6008。这些配置都可以通过EditorSettings 进行设置:
配置 Sublime Text 以运行 GDScript 脚本,根据 Godot 路径修改 PATH 环境变量:
先创建构建配置,执行菜单: Tools -> Build System -> New Build System ...
将以下 JSON 配置粘贴到配置文件中,并保存到 Packages\User\Godot.sublime-build 文件
然后打开 GDScript 脚本,按 Ctrl+B 执行构建命令
推荐安装以下插件,以提供语法高亮和自动完成功能:
GDScript support for Sublime Text
LSP - Language Server Protocol for Sublime Text
安装好插件后,需要配置 LSP,将以下配置写入 Preferences > Package Settings > LSP > Settings,根据 Godot 可执行程序修改路径,添加 "godot-lsp" 客户服务后就可以通过 LSP 提供自动完成,以及上下文提示:
启动 Godot 编辑器后,默认就会启用 LSP Client,在编辑器设置中可以修改默认配置。Sublime Text 的快捷命令面板中,Ctrl-Shift-P,执行 LSP: Troubleshoot Server 可以对语言服务进行检测。如果配置的端口不一致,就会导致服务连接不上,如果没有使用对应 Godot 版本的端口,那么提供的提示信息就可能不是最准确的。比如,旧版 ClassDB.instance() 和新版本的 instantiate() 是用于执行类型实例的函数,可能因为使用的 Godot LSP Client 版本不同而出现不同的提示信息。
Sublime Text 中,启用 Godot LSP 服务时,会自动打开配置中 Godot 编辑器以运行 LSP Client。如果,已经运行其它同版本的 Godot 编辑器,那么 LSP Client 就可能已经在运行了,自动打开的可以关闭。