Add C# installation support

This commit is contained in:
mathijs-bakker
2025-08-22 11:49:38 +02:00
parent 28cbf6c0ba
commit 468c7f29a5
3 changed files with 97 additions and 32 deletions

View File

@@ -2,7 +2,7 @@
# godotdev.nvim
Batteries-included Neovim plugin for **Godot game development**, using Neovim as an external editor. Provides LSP support for GDScript and Godot shaders, DAP debugging, and Treesitter syntax highlighting.
BBatteries-included Neovim plugin for Godot game development, using Neovim as an external editor. Provides LSP support for GDScript and Godot shaders, DAP debugging, Treesitter syntax highlighting, and optional C# installation support.
## Features
@@ -11,7 +11,9 @@ Batteries-included Neovim plugin for **Godot game development**, using Neovim as
- `.gdshader` syntax highlighting via Treesitter
- Debug GDScript with `nvim-dap` (`127.0.0.1:6006` by default)
- Keymaps for common LSP actions
- Optional C# support: LSP, debugging, and tooling
- Batteries included: everything you need for Godot development in Neovim
- Built-in health checks via `:checkhealth godotdev`
## Requirements
@@ -21,27 +23,29 @@ Batteries-included Neovim plugin for **Godot game development**, using Neovim as
- `nvim-dap` and `nvim-dap-ui` for debugging
- `nvim-treesitter`
- Windows users must have [`ncat`](https://nmap.org/ncat/) in PATH
- Optional C# support requires:
- .NET SDK (dotnet)
- C# LSP server (csharp-ls recommended or omnisharp)
- netcoredbg debugger
## Installation (Lazy.nvim)
```lua
{
'Mathijs-Bakker/godotdev.nvim',
lazy = false,
dependencies = { 'nvim-lspconfig', 'nvim-dap', 'nvim-dap-ui', 'nvim-treesitter' },
config = function()
require("godotdev").setup()
end,
}
```
## Quickstart
1. Open your Godot project in Neovim
1. Start Godot editor with TCP LSP enabled (Editor Settings → Network → Enable TCP LSP server)
1. Open a .gd or .gdshader file
1. Open a `.gd` or `.gdshader` file
1. LSP will automatically attach
1. Use <leader>rn to rename, gd to go to definition, gr for references, etc.
1. Use `<leader>rn` to rename, `gd` to go to definition, `gr` for references, etc.
1. Start debugging with DAP (Launch scene configuration)
1. Optional: Enable C# support by setting `csharp = true` in the plugin setup
1. Run `:checkhealth godotdev` at any time to verify plugin, LSP, debug server, and C# dependencies
## Configuration
@@ -51,6 +55,7 @@ require("godotdev").setup({
editor_host = "127.0.0.1", -- Godot editor host
editor_port = 6005, -- LSP port
debug_port = 6006, -- DAP port
csharp = true, -- enable C# support
})
```
@@ -152,7 +157,10 @@ gdvim
- `<leader>du` -> , Toggle UI
- `<leader>dr` -> , Open REPL
## C# installation Support
## License
MIT
- Enable by setting `csharp = true` in `require("godotdev").setup()`
- Health checks via `:checkhealth godotdev` will verify:
- .NET SDK (`dotnet`)
- C# LSP server (`csharp-ls` or `omnisharp`)
- Debugger (`netcoredbg`)

View File

@@ -1,4 +1,6 @@
local health = vim.health
local godotdev = require("godotdev")
local M = {}
M.opts = {
@@ -29,7 +31,6 @@ local function port_open(host, port)
return vim.v.shell_error == 0
end
-- Check if a plugin is installed, works with Lazy.nvim
local function plugin_installed(name)
if name == "nvim-lspconfig" then
return vim.fn.exists(":LspInfo") == 2
@@ -41,59 +42,96 @@ local function plugin_installed(name)
return false
end
local function has_exe(name)
return vim.fn.executable(name) == 1
end
function M.check()
health.start("Godotdev.nvim")
-- plugin dependencies
-- Godot version
health.start("Godot version")
local ok, godot_version = pcall(vim.fn.system, "godot --version")
if ok and godot_version and godot_version ~= "" then
local ver = vim.trim(godot_version)
health.ok("Godot detected: " .. ver)
local major, minor = ver:match("(%d+)%.(%d+)")
if major and minor and (tonumber(major) < 4 or (tonumber(major) == 4 and tonumber(minor) < 3)) then
health.warn("Godot version is below 4.3. Some features may not work correctly.")
end
else
health.info("Godot executable not found. Make sure 'godot' is in your PATH.")
end
-- Dependencies
health.start("Dependencies")
for _, plugin in ipairs({ "nvim-lspconfig", "nvim-treesitter", "nvim-dap" }) do
if plugin_installed(plugin) then
health.ok("Dependency '" .. plugin .. "' is installed")
health.ok("✅ OK Dependency '" .. plugin .. "' is installed")
else
health.warn("Dependency '" .. plugin .. "' not found. Some features may not work.")
health.warn("⚠️ WARNING Dependency '" .. plugin .. "' not found. Some features may not work.")
end
end
-- Godot editor LSP
-- Godot detection
health.start("Godot detection")
local editor_port = M.opts.editor_port
if port_open("127.0.0.1", editor_port) then
health.ok("Godot editor LSP detected on port " .. editor_port)
health.ok("✅ OK Godot editor LSP detected on port " .. editor_port)
else
health.warn(string.format(
[[
Godot editor LSP not detected on port %d.
[[⚠️ WARNING Godot editor LSP not detected on port %d.
Make sure the Godot editor is running with LSP server enabled.
- Open your project in Godot.
- Enable the LSP server (Editor Settings → Network → Enable TCP LSP server).
- Confirm the port matches %d (change `editor_port` in your config if needed).
]],
- Enable TCP LSP server in Editor Settings → Network
- Confirm port matches %d]],
editor_port,
editor_port
))
end
-- Godot editor debug server
local debug_port = M.opts.debug_port
if plugin_installed("nvim-dap") then
if port_open("127.0.0.1", debug_port) then
health.ok("Godot editor debug server detected on port " .. debug_port)
health.ok("✅ OK Godot editor debug server detected on port " .. debug_port)
else
health.warn("Godot editor debug server not detected on port " .. debug_port)
health.warn("⚠️ WARNING Godot editor debug server not detected on port " .. debug_port)
end
end
-- Windows: ncat check
if is_windows then
if vim.fn.executable("ncat") == 1 then
health.ok("'ncat' is installed")
if has_exe("ncat") then
health.ok("✅ OK 'ncat' is installed")
else
health.error([[
Windows: 'ncat' not found. Install via Scoop or Chocolatey:
❌ ERROR Windows: 'ncat' not found. Install via Scoop or Chocolatey:
scoop install nmap
choco install nmap
]])
choco install nmap]])
end
end
-- Optional C# support
if godotdev.opts.csharp then
health.start("C# support")
if has_exe("dotnet") then
health.ok("✅ OK 'dotnet' found")
else
health.error("❌ ERROR 'dotnet' not found. Install the .NET SDK: https://dotnet.microsoft.com/download")
end
if has_exe("csharp-ls") or has_exe("omnisharp") then
health.ok("✅ OK C# LSP server found (csharp-ls or omnisharp)")
else
health.error("❌ ERROR No C# LSP server found. Install 'csharp-ls' (recommended) or 'omnisharp'.")
end
if has_exe("netcoredbg") then
health.ok("✅ OK 'netcoredbg' found")
else
health.error("❌ ERROR 'netcoredbg' not found. Install from: https://github.com/Samsung/netcoredbg")
end
else
health.info(" C# checks skipped (csharp=false)")
end
end
return M

View File

@@ -25,6 +25,25 @@ function M.setup(opts)
})
require("godotdev.tree-sitter")
if opts.csharp then
local dap = require("dap")
dap.adapters.coreclr = {
type = "executable",
command = opts.netcoredbg_path or "netcoredbg",
args = { "--interpreter=vscode" },
}
dap.configurations.cs = {
{
type = "coreclr",
name = "launch - netcoredbg",
request = "launch",
program = function()
return vim.fn.input("Path to dll: ", vim.fn.getcwd() .. "/bin/Debug/net6.0/", "file")
end,
},
}
end
end
return M