Godot Shader Language Server

External editor support for .gdshader
files.
[!WARNING]
π§ Early Work in Progress
This project is in its infancy and currently only supports some basic keyword
completion. Feel free to β the repo to track progress and signal to me that
there is interest!
Godot's shader language is powerful, but editing .gdshader
files outside the
Godot editor is painful. This project aims to bring proper language tooling
(autocomplete, hover, references, etc.) to editors like Neovim and VSCode. It
aims to be memory-efficient and editor-agnostic.
π± Prior Work
-
@GodOfAvacyn is the author of the
treesitter plugin and
language server for the Godot
shader language. Their treesitter plugin is great! As of writing, their
language server has many false positive diagnostics, and the project became
inactive while they were working on a full
rewrite.
-
@AlfishSoftware is the author of the
Godot Files VSCode
Extension, which
includes some support for .gdshader
files. However, it is VSCode-only. If
you are a VSCode user, I recommend checking it out!
-
There is an official Godot VSCode
plugin, but it has
minimal shader support and is VSCode-only.
π¦ Install
Neovim
-
Download the latest release
or build from source:
wget https://github.com/armsnyder/gdshader-language-server/releases/latest/download/gdshader-language-server_$(uname -s)_$(uname -m).tar.gz
or
go install github.com/armsnyder/gdshader-language-server@latest
-
Create a ~/.config/nvim/after/ftplugin/gdshader.lua
file with the
following content, adjusting the path to the gdshader-language-server
binary if necessary:
vim.lsp.start({
name = "gdshader",
cmd = { vim.fs.expand('~/go/bin/gdshader-language-server') },
capabilities = vim.lsp.protocol.make_client_capabilities(),
})
VSCode
Install the extension
Roadmap
Planned features:
- Basic keyword completion
- Basic shader-type-dependent global built-in completion
(
VERTEX
, NORMAL
, etc.)
- VSCode wrapper extension
- Built-ins for shader types other than
spatial
- More advanced completion (functions, variables, etc.)
- Go to definition
- Find references
- Formatting
- Hover (show documentation)
- Signature help
- Make the code more maintainable by generating rules based on the official
Godot documentation
- Grammar
for the VSCode extension
π€ Contributing
I love to see issues and pull requests! Just note that this is a side project
for me, and I cannot promise to respond quickly. I will generally accept pull
requests which are relevant to the project goals, are tested, and follow
existing code conventions.
π Code structure
.
βββ main.go # Entry point
βββ internal
βββ app # Main application logic
βββ ast # .gdshader file parser library (application agnostic)
βββ lsp # LSP server library (application agnostic)
βββ testutil # Test utilities for all packages
License
MIT