From 19f925775a04dde24b7f30cb2ecf20643670d248 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Thu, 9 Sep 2021 22:23:07 +0200 Subject: [PATCH] Get snippets running --- init.lua | 37 +++++++++++++++++++++++++++++++++---- lua/cmp_plug.lua | 33 ++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/init.lua b/init.lua index bd180ca..275eed3 100644 --- a/init.lua +++ b/init.lua @@ -73,12 +73,12 @@ utils.map('n', 'b', 'Telescope buffers') utils.map('n', 'r', 'Telescope lsp_references') utils.map('n', '', 'Telescope lsp_document_symbols') -------------------- LSP ----------------------------------- -local lsp = require 'lspconfig' +local nvim_lsp = require 'lspconfig' -- We use the default settings for ccls and pylsp: the option table can stay empty -lsp.ccls.setup {} -lsp.pyright.setup{} -lsp.clangd.setup{} +nvim_lsp.ccls.setup {} +nvim_lsp.pyright.setup{} +nvim_lsp.clangd.setup{} utils.map('n', ',', 'lua vim.lsp.diagnostic.goto_prev()') utils.map('n', ';', 'lua vim.lsp.diagnostic.goto_next()') @@ -94,6 +94,33 @@ utils.map('n', '', 'lua vim.lsp.buf.workspace_symbol()') utils.map('n', '', ':ClangdSwitchSourceHeader') +-- Add additional capabilities supported by nvim-cmp +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' } +capabilities.textDocument.completion.completionItem.snippetSupport = true +capabilities.textDocument.completion.completionItem.preselectSupport = true +capabilities.textDocument.completion.completionItem.insertReplaceSupport = true +capabilities.textDocument.completion.completionItem.labelDetailsSupport = true +capabilities.textDocument.completion.completionItem.deprecatedSupport = true +capabilities.textDocument.completion.completionItem.commitCharactersSupport = true +capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } +capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + }, +} + +-- Enable some language servers with the additional completion capabilities offered by nvim-cmp +local servers = { 'clangd', 'pyright', 'rust_analyzer', 'tsserver' } +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { + -- on_attach = my_custom_on_attach, + capabilities = capabilities, + } +end + -------------------- GITSIGNS ------------------------------ -- require('gitsigns').setup() -------------------- LIGHTBULB ----------------------------- @@ -132,3 +159,5 @@ require'nvim-treesitter.configs'.setup { -- termcolors = {} -- table of colour name strings } } +-------------------- LUASNIP ------------------------------- +require("luasnip.loaders.from_vscode").load() diff --git a/lua/cmp_plug.lua b/lua/cmp_plug.lua index 767e9ad..502ab1f 100644 --- a/lua/cmp_plug.lua +++ b/lua/cmp_plug.lua @@ -1,4 +1,5 @@ local cmp = require('cmp') +local luasnip = require("luasnip") local t = function(str) return vim.api.nvim_replace_termcodes(str, true, true, true) @@ -45,26 +46,28 @@ cmp.setup { }), [""] = cmp.mapping(function(fallback) if vim.fn.pumvisible() == 1 then - if vim.fn["UltiSnips#CanExpandSnippet"]() == 1 or - vim.fn["UltiSnips#CanJumpForwards"]() == 1 then - return vim.fn.feedkeys(t( - "=UltiSnips#ExpandSnippetOrJump()")) - end - - vim.fn.feedkeys(t(""), "n") - elseif check_back_space() then - vim.fn.feedkeys(t(""), "n") + vim.api.nvim_feedkeys(t(""), "n", true) + elseif luasnip.expand_or_jumpable() then + vim.api.nvim_feedkeys(t("luasnip-expand-or-jump"), "", true) else - fallback() + fallback() end - end, {"i", "s"}), - [""] = cmp.mapping(function(fallback) + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(t(""), "n") + vim.api.nvim_feedkeys(t(""), "n", true) + elseif luasnip.jumpable(-1) then + vim.api.nvim_feedkeys(t("luasnip-jump-prev"), "", true) else - fallback() + fallback() end - end, {"i", "s"}) + end, { + "i", + "s", + }), }, snippet = { expand = function(args)