aboutsummaryrefslogblamecommitdiff
path: root/.config/nvim/lua/lsp.lua
blob: 49a6534a872c7a2d158b3112c11fd367f9c9c7ad (plain) (tree)















































                                                                                                                                                                        

                                    

















                                                                                                                                                     


                                                                         
 



                                          
                                                                                          


                                   
                              




                                        


                                
































































                                                                                   







                                 
-- Setup nvim-cmp.
local cmp = require("cmp")

cmp.setup({
	snippet = {
		-- REQUIRED - you must specify a snippet engine
		expand = function(args)
			vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
		end;
	};
	window = {
		completion = cmp.config.window.bordered();
		documentation = cmp.config.window.bordered();
	};
	mapping = cmp.mapping.preset.insert({
		["<C-b>"] = cmp.mapping.scroll_docs(-4);
		["<C-f>"] = cmp.mapping.scroll_docs(4);
		["<C-Space>"] = cmp.mapping.complete();
		["<C-e>"] = cmp.mapping.abort();
		["<CR>"] = cmp.mapping.confirm({ select = true }); -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
	});
	sources = cmp.config.sources({
		{ name = "nvim_lsp" };
		{ name = "vsnip" }; -- For vsnip users.
	}, { { name = "buffer" } });
})

-- Set configuration for specific filetype.
cmp.setup.filetype("gitcommit", {
	sources = cmp.config.sources({
		{ name = "cmp_git" }; -- You can specify the `cmp_git` source if you were installed it.
	}, { { name = "buffer" } });
})

-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline("/", {
	mapping = cmp.mapping.preset.cmdline();
	sources = { { name = "buffer" } };
})

-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(":", {
	mapping = cmp.mapping.preset.cmdline();
	sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } });
})

-- Setup lspconfig.
local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp
	.protocol
	.make_client_capabilities())

require("lspconfig")["denols"].setup { capabilities = capabilities }
local lspkind = require("lspkind")
cmp.setup {
	formatting = {
		format = lspkind.cmp_format({
			mode = "symbol"; -- show only symbol annotations
			maxwidth = 50; -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)

			-- The function below will be called before any actual modifications from lspkind
			-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
			before = function(entry, vim_item) return vim_item end;
		});
	};
}
local on_attach = function(client, bufnr)
	vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
end
--Enable (broadcasting) snippet capability for completion
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true

local lsputils = require("lspconfig").util

require("lspconfig").tsserver.setup({ 
	on_attach = on_attach,
	root_dir = lsputils.root_pattern("package.json", "tsconfig.json", "jsconfig.json")
})

require("lspconfig").denols.setup {
	on_attach = on_attach;
	init_options = { 
		enable = true; 
		unstable = true; 
		config = "./deno.jsonc";
	};
	root_dir = vim.loop.cwd;
}

require('lspconfig').rust_analyzer.setup({})

require('lspconfig').sqls.setup({
	on_attach = function(client, bufnr)
		require('sqls').on_attach(client, bufnr)
	end
})

require'lspconfig'.omnisharp.setup {
	cmd = { "omnisharp" },
	
	-- Enables support for reading code style, naming convention and analyzer
	-- settings from .editorconfig.
	enable_editorconfig_support = true,
	
	-- If true, MSBuild project system will only load projects for files that
	-- were opened in the editor. This setting is useful for big C# codebases
	-- and allows for faster initialization of code navigation features only
	-- for projects that are relevant to code that is being edited. With this
	-- setting enabled OmniSharp may load fewer projects and may thus display
	-- incomplete reference lists for symbols.
	enable_ms_build_load_projects_on_demand = false,
	
	-- Enables support for roslyn analyzers, code fixes and rulesets.
	enable_roslyn_analyzers = false,
	
	-- Specifies whether 'using' directives should be grouped and sorted during
	-- document formatting.
	organize_imports_on_format = false,
	
	-- Enables support for showing unimported types and unimported extension
	-- methods in completion lists. When committed, the appropriate using
	-- directive will be added at the top of the current file. This option can
	-- have a negative impact on initial completion responsiveness,
	-- particularly for the first few completion sessions after opening a
	-- solution.
	enable_import_completion = false,
	
	-- Specifies whether to include preview versions of the .NET SDK when
	-- determining which version to use for project loading.
	sdk_include_prereleases = true,
	
	-- Only run analyzers against open files when 'enableRoslynAnalyzers' is
	-- true
	analyze_open_documents_only = false,
}

require('lspconfig').marksman.setup({
	root_dir = vim.loop.cwd;
})

require('lspconfig').jsonls.setup({
  capabilities = capabilities,
  cmd = { "vscode-json-languageserver", "--stdio" }
})

require('lspconfig').html.setup({
  capabilities = capabilities,
  cmd = { "vscode-html-languageserver", "--stdio" }
})

require('lspconfig').cssls.setup({
  capabilities = capabilities,
})

vim.diagnostic.config({
	virtual_text = true;
	signs = true;
	underline = true;
	update_in_insert = false;
	severity_sort = true;
})