Warning
Development of neodev.nvim is now EOL. If you're on Neovim >= 0.10, then I highly suggest you to use lazydev.nvim It's a much faster and better replacement for neodev.
Neovim setup for init.lua and plugin development with full signature help, docs and completion for the nvim lua API.
- Automatically configures lua-language-server for your Neovim config, Neovim runtime and plugin directories
- Annotations for completion, hover and signatures of:
- Vim functions
- Neovim api functions
vim.opt- vim.loop
- properly configures the
requirepath. - adds all plugins in
optandstartto the workspace so you get completion for all installed plugins - properly configure the vim runtime
- Neovim >= 0.7.0
- completion plugin like nvim-cmp
Install the plugin with your preferred package manager:
{ "folke/neodev.nvim", opts= {} }Plug 'folke/neodev.nvim'neodev comes with the following defaults:
{
library= {
enabled=true, -- when not enabled, neodev will not change any settings to the LSP server-- these settings will be used for your Neovim config directoryruntime=true, -- runtime pathtypes=true, -- full signature, docs and completion of vim.api, vim.treesitter, vim.lsp and othersplugins=true, -- installed opt or start plugins in packpath-- you can also specify the list of plugins to make available as a workspace library-- plugins = { "nvim-treesitter", "plenary.nvim", "telescope.nvim" },
},
setup_jsonls=true, -- configures jsonls to provide completion for project specific .luarc.json files-- for your Neovim config directory, the config.library settings will be used as is-- for plugin directories (root_dirs having a /lua directory), config.library.plugins will be disabled-- for any other directory, config.library.enabled will be set to falseoverride=function(root_dir, options) end,
-- With lspconfig, Neodev will automatically setup your lua-language-server-- If you disable this, then you have to set {before_init=require("neodev.lsp").before_init}-- in your lsp start optionslspconfig=true,
-- much faster, but needs a recent built of lua-language-server-- needs lua-language-server >= 3.6.0pathStrict=true,
}neodev will ONLY change the lua_ls settings for:
- your Neovim config directory
- your Neovim runtime directory
- any plugin directory (this is an lsp root_dir that contains a
/luadirectory)
For any other root_dir, neodev will NOT change any settings.
TIP with neoconf.nvim, you can easily set project local Neodev settings. See the example .neoconf.json file in this repository
-- IMPORTANT: make sure to setup neodev BEFORE lspconfigrequire("neodev").setup({
-- add any options here, or leave empty to use the default settings
})
-- then setup your lsp server as usuallocallspconfig=require('lspconfig')
-- example to setup lua_ls and enable call snippetslspconfig.lua_ls.setup({
settings= {
Lua= {
completion= {
callSnippet="Replace"
}
}
}
})Example for setting up **neodev** that overrides the settings for `/etc/nixos`
-- You can override the default detection using the override function-- EXAMPLE: If you want a certain directory to be configured differently, you can override its settingsrequire("neodev").setup({
override=function(root_dir, library)
ifroot_dir:find("/etc/nixos", 1, true) ==1thenlibrary.enabled=truelibrary.plugins=trueendend,
})It's possible to setup Neodev without lspconfig, by configuring the before_init
of the options passed to vim.lsp.start.
Example without lspconfig
-- dont run neodev.setupvim.lsp.start({
name="lua-language-server",
cmd= { "lua-language-server" },
before_init=require("neodev.lsp").before_init,
root_dir=vim.fn.getcwd(),
settings= { Lua= {} },
})