more refinement
This commit is contained in:
BIN
nvim/.config/nvim/lsp/._terraform.lua
Normal file
BIN
nvim/.config/nvim/lsp/._terraform.lua
Normal file
Binary file not shown.
6
nvim/.config/nvim/lsp/terraform.lua
Normal file
6
nvim/.config/nvim/lsp/terraform.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
return {
|
||||
cmd = { "terraform-ls", "serve" },
|
||||
root_markers = { ".terraform.lock", "backend.tf" },
|
||||
filetypes = { "terraform", "tf" },
|
||||
settings = {},
|
||||
}
|
||||
@@ -18,7 +18,7 @@ vim.opt.backup = false -- creates a backup file
|
||||
-- if a file is being edited by another program (or was written to file while editing with another program), it is not
|
||||
-- allowed to be edited
|
||||
vim.opt.writebackup = false
|
||||
vim.opt.completeopt = "menuone,noselect" -- Set completeopt to have a better completion experience
|
||||
vim.o.completeopt = "menuone,noinsert,popup,fuzzy"
|
||||
vim.opt.termguicolors = true -- set termguicolors to enable highlight groups
|
||||
vim.opt.whichwrap = "bs<>[]hl" -- which "horizontal" keys are allowed to travel to prev/next line
|
||||
vim.opt.wrap = false -- display lines as one long line
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
vim.lsp.enable("luals")
|
||||
vim.lsp.enable("rust")
|
||||
vim.lsp.enable("bashls")
|
||||
vim.lsp.enable("terraform")
|
||||
|
||||
vim.lsp.config("*", {
|
||||
capabilities = {
|
||||
@@ -30,88 +31,116 @@ vim.api.nvim_create_autocmd("LspAttach", {
|
||||
})
|
||||
-- ]]
|
||||
|
||||
---[[AUTOCOMPLETION SETUP
|
||||
vim.o.completeopt = "menuone,noinsert,popup,fuzzy"
|
||||
-- [[INLAY HINTS
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
|
||||
client.server_capabilities.completionProvider.triggerCharacters = vim.split("qwertyuiopasdfghjklzxcvbnm. ", "")
|
||||
vim.api.nvim_create_autocmd({ "TextChangedI" }, {
|
||||
buffer = args.buf,
|
||||
callback = function()
|
||||
vim.lsp.completion.get()
|
||||
end,
|
||||
})
|
||||
-- if client:supports_method("textDocument/implementation") then
|
||||
-- Create a keymap for vim.lsp.buf.implementation ...
|
||||
-- end
|
||||
if client.server_capabilities.inlayHintProvider then
|
||||
vim.lsp.inlay_hint.enable(true, { bufnr = vim.fn.bufnr() })
|
||||
end
|
||||
vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
|
||||
---
|
||||
---[[Code required to add documentation popup for an item
|
||||
local _, cancel_prev = nil, function() end
|
||||
vim.api.nvim_create_autocmd("CompleteChanged", {
|
||||
buffer = args.buf,
|
||||
callback = function()
|
||||
if client:supports_method("textDocument/implementation") then
|
||||
cancel_prev()
|
||||
local info = vim.fn.complete_info({ "selected" })
|
||||
local completionItem =
|
||||
vim.tbl_get(vim.v.completed_item, "user_data", "nvim", "lsp", "completion_item")
|
||||
if nil == completionItem then
|
||||
return
|
||||
end
|
||||
_, cancel_prev = vim.lsp.buf_request(
|
||||
args.buf,
|
||||
vim.lsp.protocol.Methods.completionItem_resolve,
|
||||
completionItem,
|
||||
function(err, item, ctx)
|
||||
if not item then
|
||||
return
|
||||
end
|
||||
local docs = (item.documentation or {}).value
|
||||
local win = vim.api.nvim__complete_set(info["selected"], { info = docs })
|
||||
if win.winid and vim.api.nvim_win_is_valid(win.winid) then
|
||||
vim.treesitter.start(win.bufnr, "markdown")
|
||||
vim.wo[win.winid].conceallevel = 3
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
end,
|
||||
})
|
||||
---]]
|
||||
end,
|
||||
})
|
||||
-- ]]
|
||||
|
||||
-- Expanding multiline snippets
|
||||
vim.api.nvim_create_augroup("user-snippet-expand", {})
|
||||
vim.api.nvim_create_autocmd("CompleteDone", {
|
||||
group = "user-snippet-expand",
|
||||
desc = "Expand LSP snippet",
|
||||
pattern = "*",
|
||||
callback = function(opts)
|
||||
local comp = vim.v.completed_item
|
||||
local item = vim.tbl_get(comp, "user_data", "nvim", "lsp", "completion_item")
|
||||
--
|
||||
-- vim.api.nvim_create_autocmd("LspAttach", {
|
||||
-- callback = function(args)
|
||||
-- local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
|
||||
-- client.server_capabilities.completionProvider.triggerCharacters = vim.split("qwertyuiopasdfghjklzxcvbnm. ", "")
|
||||
-- vim.api.nvim_create_autocmd({ "TextChangedI" }, {
|
||||
-- buffer = args.buf,
|
||||
-- callback = function()
|
||||
-- vim.lsp.completion.get()
|
||||
-- end,
|
||||
-- })
|
||||
-- -- if client:supports_method("textDocument/implementation") then
|
||||
-- -- Create a keymap for vim.lsp.buf.implementation ...
|
||||
-- -- end
|
||||
-- if client.server_capabilities.inlayHintProvider then
|
||||
-- vim.lsp.inlay_hint.enable(true, { bufnr = vim.fn.bufnr() })
|
||||
-- end
|
||||
|
||||
-- check that we were given a snippet
|
||||
if not item or not item.insertTextFormat or item.insertTextFormat == 1 then
|
||||
return
|
||||
end
|
||||
|
||||
-- remove the inserted text
|
||||
local cursor = vim.api.nvim_win_get_cursor(0)
|
||||
local line = vim.api.nvim_get_current_line()
|
||||
local lnum = cursor[1] - 1
|
||||
local start_char = cursor[2] - #comp.word
|
||||
vim.api.nvim_buf_set_text(opts.buf, lnum, start_char, lnum, #line, { "" })
|
||||
|
||||
-- insert snippet
|
||||
local snip_text = vim.tbl_get(item, "textEdit", "newText") or item.insertText
|
||||
assert(snip_text, "Language server indicated it had a snippet, but no snippet text could be found!")
|
||||
require("luasnip").lsp_expand(snip_text)
|
||||
end,
|
||||
})
|
||||
---AUTOCOMPLETION SETUP END]]
|
||||
---[[AUTOCOMPLETION SETUP
|
||||
-- vim.api.nvim_create_autocmd("LspAttach", {
|
||||
-- callback = function(args)
|
||||
-- local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
|
||||
-- client.server_capabilities.completionProvider.triggerCharacters = vim.split("qwertyuiopasdfghjklzxcvbnm. ", "")
|
||||
-- vim.api.nvim_create_autocmd({ "TextChangedI" }, {
|
||||
-- buffer = args.buf,
|
||||
-- callback = function()
|
||||
-- vim.lsp.completion.get()
|
||||
-- end,
|
||||
-- })
|
||||
-- -- if client:supports_method("textDocument/implementation") then
|
||||
-- -- Create a keymap for vim.lsp.buf.implementation ...
|
||||
-- -- end
|
||||
-- if client.server_capabilities.inlayHintProvider then
|
||||
-- vim.lsp.inlay_hint.enable(true, { bufnr = vim.fn.bufnr() })
|
||||
-- end
|
||||
-- vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
|
||||
-- ---
|
||||
-- ---[[Code required to add documentation popup for an item
|
||||
-- local _, cancel_prev = nil, function() end
|
||||
-- vim.api.nvim_create_autocmd("CompleteChanged", {
|
||||
-- buffer = args.buf,
|
||||
-- callback = function()
|
||||
-- if client:supports_method("textDocument/implementation") then
|
||||
-- cancel_prev()
|
||||
-- local info = vim.fn.complete_info({ "selected" })
|
||||
-- local completionItem =
|
||||
-- vim.tbl_get(vim.v.completed_item, "user_data", "nvim", "lsp", "completion_item")
|
||||
-- if nil == completionItem then
|
||||
-- return
|
||||
-- end
|
||||
-- _, cancel_prev = vim.lsp.buf_request(
|
||||
-- args.buf,
|
||||
-- vim.lsp.protocol.Methods.completionItem_resolve,
|
||||
-- completionItem,
|
||||
-- function(err, item, ctx)
|
||||
-- if not item then
|
||||
-- return
|
||||
-- end
|
||||
-- local docs = (item.documentation or {}).value
|
||||
-- local win = vim.api.nvim__complete_set(info["selected"], { info = docs })
|
||||
-- if win.winid and vim.api.nvim_win_is_valid(win.winid) then
|
||||
-- vim.treesitter.start(win.bufnr, "markdown")
|
||||
-- vim.wo[win.winid].conceallevel = 3
|
||||
-- end
|
||||
-- end
|
||||
-- )
|
||||
-- end
|
||||
-- end,
|
||||
-- })
|
||||
-- ---]]
|
||||
-- end,
|
||||
-- })
|
||||
--
|
||||
-- -- Expanding multiline snippets
|
||||
-- vim.api.nvim_create_augroup("user-snippet-expand", {})
|
||||
-- vim.api.nvim_create_autocmd("CompleteDone", {
|
||||
-- group = "user-snippet-expand",
|
||||
-- desc = "Expand LSP snippet",
|
||||
-- pattern = "*",
|
||||
-- callback = function(opts)
|
||||
-- local comp = vim.v.completed_item
|
||||
-- local item = vim.tbl_get(comp, "user_data", "nvim", "lsp", "completion_item")
|
||||
--
|
||||
-- -- check that we were given a snippet
|
||||
-- if not item or not item.insertTextFormat or item.insertTextFormat == 1 then
|
||||
-- return
|
||||
-- end
|
||||
--
|
||||
-- -- remove the inserted text
|
||||
-- local cursor = vim.api.nvim_win_get_cursor(0)
|
||||
-- local line = vim.api.nvim_get_current_line()
|
||||
-- local lnum = cursor[1] - 1
|
||||
-- local start_char = cursor[2] - #comp.word
|
||||
-- vim.api.nvim_buf_set_text(opts.buf, lnum, start_char, lnum, #line, { "" })
|
||||
--
|
||||
-- -- insert snippet
|
||||
-- local snip_text = vim.tbl_get(item, "textEdit", "newText") or item.insertText
|
||||
-- assert(snip_text, "Language server indicated it had a snippet, but no snippet text could be found!")
|
||||
-- require("luasnip").lsp_expand(snip_text)
|
||||
-- end,
|
||||
-- })
|
||||
-- ---AUTOCOMPLETION SETUP END]]
|
||||
|
||||
BIN
nvim/.config/nvim/lua/plugins/._completion.lua
Normal file
BIN
nvim/.config/nvim/lua/plugins/._completion.lua
Normal file
Binary file not shown.
105
nvim/.config/nvim/lua/plugins/completion.lua
Normal file
105
nvim/.config/nvim/lua/plugins/completion.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
return {
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
version = "v2.*",
|
||||
dependencies = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
-- install jsregexp (optional!).
|
||||
build = "make install_jsregexp",
|
||||
config = function()
|
||||
local ls = require("luasnip")
|
||||
local s = ls.snippet
|
||||
local t = ls.text_node
|
||||
local i = ls.insert_node
|
||||
|
||||
ls.add_snippets("lua", {
|
||||
s("hello", {
|
||||
t('print("hello world!")'),
|
||||
}),
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
-- use a release tag to download pre-built binaries
|
||||
version = "1.*",
|
||||
dependencies = {
|
||||
"moyiz/blink-emoji.nvim",
|
||||
},
|
||||
---@module 'blink.cmp'
|
||||
---@type blink.cmp.Config
|
||||
opts = {
|
||||
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
|
||||
-- 'super-tab' for mappings similar to vscode (tab to accept)
|
||||
-- 'enter' for enter to accept
|
||||
-- 'none' for no mappings
|
||||
--
|
||||
-- All presets have the following mappings:
|
||||
-- C-space: Open menu or open docs if already open
|
||||
-- C-n/C-p or Up/Down: Select next/previous item
|
||||
-- C-e: Hide menu
|
||||
-- C-k: Toggle signature help (if signature.enabled = true)
|
||||
--
|
||||
-- See :h blink-cmp-config-keymap for defining your own keymap
|
||||
keymap = { preset = "default" },
|
||||
|
||||
appearance = {
|
||||
nerd_font_variant = "mono",
|
||||
},
|
||||
|
||||
-- (Default) Only show the documentation popup when manually triggered
|
||||
completion = { documentation = { auto_show = true } },
|
||||
cmdline = {
|
||||
keymap = {
|
||||
-- recommended, as the default keymap will only show and select the next item
|
||||
["<Tab>"] = { "show", "accept" },
|
||||
},
|
||||
completion = {
|
||||
menu = { auto_show = true },
|
||||
ghost_text = { enabled = true },
|
||||
},
|
||||
},
|
||||
|
||||
snippets = { preset = "luasnip" },
|
||||
-- Default list of enabled providers defined so that you can extend it
|
||||
-- elsewhere in your config, without redefining it, due to `opts_extend`
|
||||
sources = {
|
||||
default = { "lsp", "path", "snippets", "buffer", "emoji" },
|
||||
providers = {
|
||||
cmdline = {
|
||||
min_keyword_length = function(ctx)
|
||||
-- when typing a command, only show when the keyword is 3 characters or longer
|
||||
if ctx.mode == "cmdline" and string.find(ctx.line, " ") == nil then
|
||||
return 3
|
||||
end
|
||||
return 0
|
||||
end,
|
||||
},
|
||||
emoji = {
|
||||
module = "blink-emoji",
|
||||
name = "Emoji",
|
||||
score_offset = 15, -- Tune by preference
|
||||
opts = { insert = true }, -- Insert emoji (default) or complete its name
|
||||
should_show_items = function()
|
||||
return vim.tbl_contains(
|
||||
-- Enable emoji completion only for git commits and markdown.
|
||||
-- By default, enabled for all file-types.
|
||||
{ "gitcommit", "markdown" },
|
||||
vim.o.filetype
|
||||
)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
|
||||
-- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
|
||||
-- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
|
||||
--
|
||||
-- See the fuzzy documentation for more information
|
||||
fuzzy = { implementation = "prefer_rust_with_warning" },
|
||||
},
|
||||
opts_extend = { "sources.default" },
|
||||
},
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
return {
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
dependencies = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
-- install jsregexp (optional!).
|
||||
build = "make install_jsregexp",
|
||||
config = function()
|
||||
local ls = require("luasnip")
|
||||
local s = ls.snippet
|
||||
local t = ls.text_node
|
||||
local i = ls.insert_node
|
||||
|
||||
ls.add_snippets("lua", {
|
||||
s("hello", {
|
||||
t('print("hello world!")'),
|
||||
}),
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -43,11 +43,22 @@ return {
|
||||
"node_modules",
|
||||
"target",
|
||||
".terraform",
|
||||
".git",
|
||||
".venv",
|
||||
"Cargo.toml",
|
||||
".git",
|
||||
-- Ignore git submodules
|
||||
"^./.git/",
|
||||
"^./*/.git/",
|
||||
".gitmodules",
|
||||
".gitignore",
|
||||
".*/%.git/.*", -- Ignore any .git directories in subdirectories
|
||||
},
|
||||
hidden = true,
|
||||
-- Ignore git submodules
|
||||
follow = true,
|
||||
},
|
||||
git_files = {
|
||||
recurse_submodules = false,
|
||||
show_untracked = true,
|
||||
},
|
||||
buffers = {
|
||||
initial_mode = "normal",
|
||||
|
||||
Reference in New Issue
Block a user