Code Monkey home page Code Monkey logo

neodev.nvim's Introduction

๐Ÿ’ป neodev.nvim

Neovim setup for init.lua and plugin development with full signature help, docs and completion for the nvim lua API.

image

โœจ Features

  • 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 require path.
  • adds all plugins in opt and start to the workspace so you get completion for all installed plugins
  • properly configure the vim runtime

โšก๏ธ Requirements

  • Neovim >= 0.7.0
  • completion plugin like nvim-cmp

๐Ÿ“ฆ Installation

Install the plugin with your preferred package manager:

{ "folke/neodev.nvim", opts = {} }
Plug 'folke/neodev.nvim'

โš™๏ธ Configuration

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 directory
    runtime = true, -- runtime path
    types = true, -- full signature, docs and completion of vim.api, vim.treesitter, vim.lsp and others
    plugins = 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 false
  override = 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 options
  lspconfig = true,
  -- much faster, but needs a recent built of lua-language-server
  -- needs lua-language-server >= 3.6.0
  pathStrict = true,
}

๐Ÿš€ Setup

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 /lua directory)

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 lspconfig
require("neodev").setup({
  -- add any options here, or leave empty to use the default settings
})

-- then setup your lsp server as usual
local lspconfig = require('lspconfig')

-- example to setup lua_ls and enable call snippets
lspconfig.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 settings
require("neodev").setup({
  override = function(root_dir, library)
    if root_dir:find("/etc/nixos", 1, true) == 1 then
      library.enabled = true
      library.plugins = true
    end
  end,
})

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.setup
vim.lsp.start({
  name = "lua-language-server",
  cmd = { "lua-language-server" },
  before_init = require("neodev.lsp").before_init,
  root_dir = vim.fn.getcwd(),
  settings = { Lua = {} },
})

neodev.nvim's People

Contributors

folke avatar github-actions[bot] avatar jopemachine avatar krapjost avatar kylo252 avatar laytan avatar lewis6991 avatar mrcjkb avatar nguyenvukhang avatar polyzen avatar registergen avatar ryota2357 avatar smjonas avatar t-727 avatar uga-rosa avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.