Add completion basic settings

This commit is contained in:
pro100ton 2025-01-31 23:45:06 +03:00
parent ee4f78902b
commit f9c4d63afb
3 changed files with 229 additions and 0 deletions

193
lua/custom/lsp.lua Normal file
View file

@ -0,0 +1,193 @@
local lspconfig = require("lspconfig")
local mason_lspconfig = require("mason-lspconfig")
local cmp_nvim_lsp = require("cmp_nvim_lsp")
local keymap = vim.keymap
local capabilities = nil
if pcall(require, "cmp_nvim_lsp") then
capabilities = require("cmp_nvim_lsp").default_capabilities()
end
local servers = {
gopls = {
settings = {
gopls = {
hints = {
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
constantValues = true,
functionTypeParameters = true,
parameterNames = true,
rangeVariableTypes = true,
},
},
},
},
ruff = {
init_options = {
settings = {
-- Ruff language server settings go here
logLevel = "debug",
},
},
},
pyright = {
settings = {
pyright = {
-- Using Ruff's import organizer
disableOrganizeImports = true,
},
python = {
analysis = {
-- Ignore all files for analysis to exclusively use Ruff for linting
ignore = { "*" },
diagnosticMode = "off",
typeCheckingMode = "off",
},
},
},
},
lua_ls = {
capabilities = capabilities,
settings = {
Lua = {
-- make the language server recognize "vim" global
diagnostics = {
globals = { "vim" },
},
completion = {
callSnippet = "Replace",
},
},
},
},
clangd = {
filetypes = { "c" },
cmd = {
"clangd",
"--offset-encoding=utf-16",
},
},
}
local servers_to_install = vim.tbl_filter(function(key)
local t = servers[key]
if type(t) == "table" then
return not t.manual_install
else
return t
end
end, vim.tbl_keys(servers))
require("mason").setup()
local ensure_installed = {
"stylua",
"lua_ls",
"ruff",
"gopls",
"gofumpt",
"golines",
"prettier",
"pyright"
}
vim.list_extend(ensure_installed, servers_to_install)
require("mason-tool-installer").setup { ensure_installed = ensure_installed }
for name, config in pairs(servers) do
if config == true then
config = {}
end
config = vim.tbl_deep_extend("force", {}, {
capabilities = capabilities,
}, config)
lspconfig[name].setup(config)
end
for name, config in pairs(servers) do
if config == true then
config = {}
end
config = vim.tbl_deep_extend("force", {}, {
capabilities = capabilities,
}, config)
lspconfig[name].setup(config)
end
-- Here it is used the LSP server attaches to file
vim.api.nvim_create_autocmd("LspAttach", {
-- Grouping together autocommands.
-- Here we creating new group and calling it "UserLspConfig"
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
-- callback defining logic to execute on the event
callback = function(ev)
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf, silent = true }
-- set keybinds
-- show definition, references
opts.desc = "Show LSP references"
keymap.set("n", "gR", "<cmd>Telescope lsp_references<CR>", opts)
-- go to declaration
opts.desc = "Go to declaration"
keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
-- show lsp definitions
opts.desc = "Show LSP definitions"
keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<CR>", opts)
-- show lsp implementations
opts.desc = "Show LSP implementations"
keymap.set("n", "gi", "<cmd>Telescope lsp_implementations<CR>", opts)
-- show lsp type definitions
opts.desc = "Show LSP type definitions"
keymap.set("n", "gt", "<cmd>Telescope lsp_type_definitions<CR>", opts)
-- see available code actions, in visual mode will apply to selection
opts.desc = "See available code actions"
keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts)
-- smart rename
opts.desc = "Smart rename"
keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
-- show diagnostics for file
opts.desc = "Show buffer diagnostics"
keymap.set("n", "<leader>D", "<cmd>Telescope diagnostics bufnr=0<CR>", opts)
-- show diagnostics for line
opts.desc = "Show line diagnostics"
keymap.set("n", "<leader>d", vim.diagnostic.open_float, opts)
-- jump to previous diagnostic in buffer
opts.desc = "Go to previous diagnostic"
keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
-- jump to next diagnostic in buffer
opts.desc = "Go to next diagnostic"
keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
-- show documentation for what is under cursor
opts.desc = "Show documentation for what is under cursor"
keymap.set("n", "K", vim.lsp.buf.hover, opts)
-- mapping to restart lsp if necessary
opts.desc = "Restart LSP"
keymap.set("n", "<leader>rs", ":LspRestart<CR>", opts)
opts.desc = "Run formatting on current buffer"
keymap.set("n", "<space>f", function()
vim.lsp.buf.format({ async = true })
end, opts)
end,
})

View file

@ -12,6 +12,7 @@ return {
"saadparwaiz1/cmp_luasnip", -- for autocompletion "saadparwaiz1/cmp_luasnip", -- for autocompletion
"rafamadriz/friendly-snippets", -- useful snippets "rafamadriz/friendly-snippets", -- useful snippets
"onsails/lspkind.nvim", -- vs-code like pictograms "onsails/lspkind.nvim", -- vs-code like pictograms
"hrsh7th/cmp-nvim-lsp",
}, },
config = function() config = function()
require "custom/completion" require "custom/completion"

View file

@ -0,0 +1,35 @@
return {
{
"neovim/nvim-lspconfig",
dependencies = {
{
--`lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
"folke/lazydev.nvim",
ft = "lua",
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = "luvit-meta/library", words = { "vim%.uv" } },
},
},
},
{ "Bilal2453/luvit-meta", lazy = true },
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"WhoIsSethDaniel/mason-tool-installer.nvim",
-- Some enhancements for notifications in bottom-right corner
{ "j-hui/fidget.nvim", opts = {} },
-- Following plugin enables enhancements for diagnostics info
-- { "https://git.sr.ht/~whynothugo/lsp_lines.nvim" },
-- Autoformatting
"stevearc/conform.nvim",
},
config = function()
require "custom/lsp"
end,
},
}