mirror of
https://github.com/pnx/dotfiles
synced 2026-06-16 03:14:55 +02:00
moar nvim: snippets and other things
This commit is contained in:
parent
bcb84e54eb
commit
0fb3cfeef9
14 changed files with 426 additions and 138 deletions
|
|
@ -1,29 +1,31 @@
|
||||||
{
|
{
|
||||||
"LuaSnip": { "branch": "master", "commit": "b152822e1a4bafb6bdf11a16cc26525cbd95ee00" },
|
"LuaSnip": { "branch": "master", "commit": "03c607c2bd4db0238d8f93a6393ffbd931466390" },
|
||||||
"catppuccin": { "branch": "main", "commit": "6af91673ceccbd6e073b66c439e7fce239f72d24" },
|
"catppuccin": { "branch": "main", "commit": "d97387aea8264f484bb5d5e74f2182a06c83e0d8" },
|
||||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" },
|
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
|
||||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||||
"conform.nvim": { "branch": "master", "commit": "12b3995537f52ba2810a9857e8ca256881febbda" },
|
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
|
||||||
"fd": { "branch": "master", "commit": "8acd7722f09ff45ef51335751160e0a8dcc096dc" },
|
"conform.nvim": { "branch": "master", "commit": "00f9d91391b04b1935e2f15948bd96cc111e7d3a" },
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "bc933d24a669608968ff4791b14d2d9554813a65" },
|
"fd": { "branch": "master", "commit": "29936f0fbae1e52984ab582b2b2c98685d6ad638" },
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "3d08501caef2329aba5121b753e903904088f7e6" },
|
"gitsigns.nvim": { "branch": "main", "commit": "805610a9393fa231f2c2b49cb521bfa413fadb3d" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "d3974346b6cef2116c8e7b08423256a834cb7cbc" },
|
"indent-blankline.nvim": { "branch": "master", "commit": "171d4d5a1560ccb556e94aa6df7e969068384049" },
|
||||||
"lsp-zero.nvim": { "branch": "v3.x", "commit": "e00dcf8a6019a88139626c1668dccdc295abd324" },
|
"lazy.nvim": { "branch": "main", "commit": "05240b41548c4245a04d34ee54f789e824129991" },
|
||||||
|
"lsp-zero.nvim": { "branch": "v3.x", "commit": "f12d50716e8e59ea9f5cf484eac6968c33a95917" },
|
||||||
"lspkind-nvim": { "branch": "master", "commit": "1735dd5a5054c1fb7feaf8e8658dbab925f4f0cf" },
|
"lspkind-nvim": { "branch": "master", "commit": "1735dd5a5054c1fb7feaf8e8658dbab925f4f0cf" },
|
||||||
"lualine-lsp-progress": { "branch": "master", "commit": "56842d097245a08d77912edf5f2a69ba29f275d7" },
|
"lualine-lsp-progress": { "branch": "master", "commit": "56842d097245a08d77912edf5f2a69ba29f275d7" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" },
|
"lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" },
|
||||||
"nvim-autopairs": { "branch": "master", "commit": "14e97371b2aab6ee70054c1070a123dfaa3e217e" },
|
"nvim-autopairs": { "branch": "master", "commit": "b0b79e42a28f09719a7da9534c3731fa37319d9b" },
|
||||||
"nvim-cmp": { "branch": "main", "commit": "8f3c541407e691af6163e2447f3af1bd6e17f9a3" },
|
"nvim-cmp": { "branch": "main", "commit": "5260e5e8ecadaf13e6b82cf867a909f54e15fd07" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "97762065bf7e1ac617d0a8710eb7ec2d656287a9" },
|
"nvim-lspconfig": { "branch": "master", "commit": "a284b14b3a9c4851f900286cd7eb68e3a8f90b1c" },
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "268611e3ece8463bfb5b09044dcd1b76a28ffbb6" },
|
"nvim-treesitter": { "branch": "master", "commit": "00a8cfd562dc805eb4d732fbca35e23640dbf7c8" },
|
||||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "23b820146956b3b681c19e10d3a8bc0cbd9a1d4c" },
|
"nvim-treesitter-textobjects": { "branch": "master", "commit": "84cc9ed772f1fee2f47c1e076f518829583d8347" },
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "531f48334c422222aebc888fd36e7d109cb354cd" },
|
"nvim-ts-autotag": { "branch": "main", "commit": "531f48334c422222aebc888fd36e7d109cb354cd" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "475fbcfcb6ee7c35aa33a6b6207ebd4032791d87" },
|
"nvim-web-devicons": { "branch": "master", "commit": "e37bb1feee9e7320c76050a55443fa843b4b6f83" },
|
||||||
"oil.nvim": { "branch": "master", "commit": "bcfc0a2e01def5019aa14fac2fc6de20dedb6d3d" },
|
"oil.nvim": { "branch": "master", "commit": "06a19f77f1a1da37b675635e6f9c5b5d50bcaacd" },
|
||||||
"playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" },
|
"playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "08e301982b9a057110ede7a735dd1b5285eb341f" },
|
"plenary.nvim": { "branch": "master", "commit": "08e301982b9a057110ede7a735dd1b5285eb341f" },
|
||||||
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||||
"telescope.nvim": { "branch": "master", "commit": "fac83a556e7b710dc31433dec727361ca062dbe9" },
|
"telescope.nvim": { "branch": "master", "commit": "0c12735d5aff6a48ffd8111bf144dc2ff44e5975" },
|
||||||
|
"trouble.nvim": { "branch": "main", "commit": "b9cf677f20bb2faa2dacfa870b084e568dca9572" },
|
||||||
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
|
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
local autocmd = vim.api.nvim_create_autocmd
|
local autocmd = vim.api.nvim_create_autocmd
|
||||||
|
local augroup = vim.api.nvim_create_augroup
|
||||||
|
|
||||||
-- Highlight on yank
|
-- Highlight on yank
|
||||||
autocmd('TextYankPost', {
|
autocmd('TextYankPost', {
|
||||||
|
|
|
||||||
|
|
@ -1,61 +1,73 @@
|
||||||
return function()
|
return function()
|
||||||
local cmp = require('cmp')
|
local cmp = require("cmp")
|
||||||
local lspkind = require('utils.lspkind')
|
local utils = require("utils.cmd")
|
||||||
local icons = require('config.icons')
|
local luasnip = require("luasnip")
|
||||||
|
local lspkind = require("utils.lspkind")
|
||||||
|
local icons = require("config.icons")
|
||||||
|
|
||||||
local selectPrev = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert })
|
local selectPrev = utils.selectPrev({ behavior = cmp.SelectBehavior.Insert })
|
||||||
local selectNext = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert })
|
local selectNext = utils.selectNext({ behavior = cmp.SelectBehavior.Insert })
|
||||||
|
|
||||||
local windowstyle = {
|
local windowstyle = {
|
||||||
border = vim.g.float_border or 'none',
|
border = vim.g.float_border or "none",
|
||||||
winhighlight = 'Normal:Pmenu,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None',
|
winhighlight = "Normal:Pmenu,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None",
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
preselect = false,
|
preselect = false,
|
||||||
completion = {
|
completion = {
|
||||||
completeopt = "menuone,longest,noinsert,preview"
|
completeopt = "menuone,longest,noinsert,preview",
|
||||||
},
|
},
|
||||||
view = {
|
view = {
|
||||||
entries = { name = 'custom', selection_order = 'near_cursor' },
|
entries = { name = "custom", selection_order = "near_cursor" },
|
||||||
},
|
},
|
||||||
window = {
|
window = {
|
||||||
documentation = windowstyle,
|
documentation = windowstyle,
|
||||||
completion = windowstyle
|
completion = windowstyle,
|
||||||
},
|
},
|
||||||
mapping = {
|
mapping = {
|
||||||
["<Up>"] = selectPrev,
|
["<Up>"] = selectPrev,
|
||||||
["<S-Tab>"] = selectPrev,
|
["<S-Tab>"] = selectPrev,
|
||||||
["<Down>"] = selectNext,
|
["<Down>"] = selectNext,
|
||||||
["<Tab>"] = selectNext,
|
["<Tab>"] = selectNext,
|
||||||
["<C-c>"] = cmp.mapping.abort(),
|
["<C-c>"] = cmp.mapping.abort(),
|
||||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
["<CR>"] = utils.confirm({ select = true }),
|
||||||
},
|
},
|
||||||
snippet = {
|
snippet = {
|
||||||
expand = function(args)
|
expand = function(args)
|
||||||
require('luasnip').lsp_expand(args.body)
|
require("luasnip").lsp_expand(args.body)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
formatting = {
|
formatting = {
|
||||||
fields = { "abbr", "kind", "menu" },
|
fields = { "abbr", "kind", "menu" },
|
||||||
format = lspkind.format({
|
format = lspkind.format({
|
||||||
mode = 'symbol',
|
mode = "symbol",
|
||||||
preset = 'codicons',
|
preset = "codicons",
|
||||||
symbol_map = icons.symbols,
|
symbol_map = icons.symbols,
|
||||||
maxwidth = 40,
|
maxwidth = 40,
|
||||||
ellipsis_char = "...",
|
ellipsis_char = "...",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
sources = {
|
sources = {
|
||||||
{ name = 'nvim_lsp' },
|
{ name = "nvim_lsp" },
|
||||||
{ name = 'buffer' },
|
{ name = "luasnip" },
|
||||||
{ name = 'path' },
|
{ name = "buffer" },
|
||||||
{ name = 'luasnip' }
|
{ name = "path" },
|
||||||
},
|
{
|
||||||
experimental = {
|
name = "spell",
|
||||||
ghost_text = {
|
option = {
|
||||||
hl_group = "NonText",
|
keep_all_entries = false,
|
||||||
},
|
enable_in_context = function()
|
||||||
},
|
return true
|
||||||
}
|
end,
|
||||||
|
preselect_correct_word = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
experimental = {
|
||||||
|
ghost_text = {
|
||||||
|
hl_group = "NonText",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,14 @@ return {
|
||||||
staged = "✓",
|
staged = "✓",
|
||||||
conflict = "",
|
conflict = "",
|
||||||
},
|
},
|
||||||
|
todo = {
|
||||||
|
default = '',
|
||||||
|
warn = '',
|
||||||
|
perf = '',
|
||||||
|
bug = '',
|
||||||
|
hack = '',
|
||||||
|
test = '',
|
||||||
|
},
|
||||||
diagnostics = {
|
diagnostics = {
|
||||||
error = '',
|
error = '',
|
||||||
warn = '',
|
warn = '',
|
||||||
|
|
@ -66,7 +74,7 @@ return {
|
||||||
unknown = '',
|
unknown = '',
|
||||||
},
|
},
|
||||||
symbols = {
|
symbols = {
|
||||||
Text = "",
|
Text = "TXT",
|
||||||
Method = "",
|
Method = "",
|
||||||
Function = "",
|
Function = "",
|
||||||
Constructor = "",
|
Constructor = "",
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ return {
|
||||||
{ { "n", "v" }, "<leader>p", [["+p]], { desc = "Paste from system clipboard register" } },
|
{ { "n", "v" }, "<leader>p", [["+p]], { desc = "Paste from system clipboard register" } },
|
||||||
|
|
||||||
-- File operations
|
-- File operations
|
||||||
-- { "n", "<leader>Fe", "<cmd>Ex<CR>", { silent = true, desc = "Open Netrw" } },
|
{ "n", "gf", "<cmd>e <cfile><CR>", { silent = true, desc = "Open (or create) file under cursor" } },
|
||||||
{ "n", "<leader>Fc", ":CreateFile ", { silent = true, desc = "Create new file" } },
|
{ "n", "<leader>Fc", ":CreateFile ", { silent = true, desc = "Create new file" } },
|
||||||
{ "n", "<leader>Fx", "<cmd>!chmod +x %<CR>", { silent = true, desc = "Set execute flag on current file" } },
|
{ "n", "<leader>Fx", "<cmd>!chmod +x %<CR>", { silent = true, desc = "Set execute flag on current file" } },
|
||||||
|
|
||||||
|
|
@ -71,11 +71,15 @@ return {
|
||||||
{ "n", "<leader>rw", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
|
{ "n", "<leader>rw", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
|
||||||
{ desc = "search+replace word under cursor" } },
|
{ desc = "search+replace word under cursor" } },
|
||||||
|
|
||||||
{ { "x" }, "<leader>fhx", [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format hex" } },
|
-- Hex formatting
|
||||||
{ { "x" }, "<leader>fha", [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Format each hex number to be 2 characters long" } },
|
{ "x", "<leader>fhx", [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format hex" } },
|
||||||
{ { "x" }, "<leader>fhn", [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format hex with 8 bytes per row" } },
|
{ "x", "<leader>fha", [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Format each hex number to be 2 characters long" } },
|
||||||
|
{ "x", "<leader>fhn", [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format hex with 8 bytes per row" } },
|
||||||
-- {{"x"}, "<leader>hb", [[:'<,'>s/\(\x\{2\}\)/0x\1, /g<cr>]], { desc = "Format a hex string to byte array"}},
|
-- {{"x"}, "<leader>hb", [[:'<,'>s/\(\x\{2\}\)/0x\1, /g<cr>]], { desc = "Format a hex string to byte array"}},
|
||||||
|
|
||||||
|
-- Case formatting
|
||||||
|
{ "x", "<leader>fcsc", [[:s/\%V\([a-z]\+\)_\?/\u\1/g]], { desc = "Convert text from snake_case to CamelCase" } },
|
||||||
|
|
||||||
-- diagnostics
|
-- diagnostics
|
||||||
{ "n", "<leader>do", vim.diagnostic.open_float, { desc = "Open diagnostics" } },
|
{ "n", "<leader>do", vim.diagnostic.open_float, { desc = "Open diagnostics" } },
|
||||||
{ "n", "<leader>dn", vim.diagnostic.get_next, { desc = "Goto next" } },
|
{ "n", "<leader>dn", vim.diagnostic.get_next, { desc = "Goto next" } },
|
||||||
|
|
@ -85,14 +89,17 @@ return {
|
||||||
{ "n", "<leader>m", ":terminal tmuxs<cr>i", { desc = "Open tmux manager" } },
|
{ "n", "<leader>m", ":terminal tmuxs<cr>i", { desc = "Open tmux manager" } },
|
||||||
|
|
||||||
|
|
||||||
{ "n", "Q", "<nop>" },
|
{ "n", "Q", "<nop>" }, -- NOPE
|
||||||
|
|
||||||
},
|
},
|
||||||
whichkey = {
|
whichkey = {
|
||||||
mode = { "n", "v" },
|
mode = { "n", "v", "x" },
|
||||||
["<leader>r"] = { name = "+Rename" },
|
["<leader>r"] = { name = "+Rename" },
|
||||||
["<leader>b"] = { name = "+Buffers" },
|
["<leader>b"] = { name = "+Buffers" },
|
||||||
["<leader>f"] = { name = "+Format" },
|
["<leader>f"] = { name = "+Format" },
|
||||||
|
["<leader>fc"] = { name = "+Case" },
|
||||||
|
["<leader>fcs"] = { name = "+snake_case" },
|
||||||
|
["<leader>fh"] = { name = "+Hex" },
|
||||||
["<leader>F"] = { name = "+Files" },
|
["<leader>F"] = { name = "+Files" },
|
||||||
["<leader>d"] = { name = "+Diagnostics" },
|
["<leader>d"] = { name = "+Diagnostics" },
|
||||||
["<leader>s"] = { name = "+Search" },
|
["<leader>s"] = { name = "+Search" },
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
vim.g.lsp_zero_ui_float_border = vim.g.float_border or 'none'
|
vim.g.lsp_zero_ui_float_border = vim.g.float_border or 'none'
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
document_highlight = true,
|
||||||
servers = {
|
servers = {
|
||||||
-- PHP
|
-- PHP
|
||||||
phpactor = {
|
phpactor = {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ set.wrap = false -- Disable line wrap
|
||||||
set.pumheight = 20
|
set.pumheight = 20
|
||||||
set.laststatus = 3
|
set.laststatus = 3
|
||||||
set.splitkeep = "screen"
|
set.splitkeep = "screen"
|
||||||
set.scrolloff = 20
|
set.scrolloff = 10
|
||||||
|
|
||||||
-- Configure how new splits should be opened
|
-- Configure how new splits should be opened
|
||||||
set.splitright = true
|
set.splitright = true
|
||||||
|
|
@ -67,6 +67,10 @@ set.incsearch = true
|
||||||
set.ignorecase = true
|
set.ignorecase = true
|
||||||
set.smartcase = true
|
set.smartcase = true
|
||||||
|
|
||||||
|
-- Spell stuff, because i cant english
|
||||||
|
set.spell = true
|
||||||
|
set.spelllang = { 'en_us' }
|
||||||
|
|
||||||
-- line numbers
|
-- line numbers
|
||||||
set.number = true
|
set.number = true
|
||||||
set.relativenumber = true
|
set.relativenumber = true
|
||||||
|
|
|
||||||
|
|
@ -166,5 +166,18 @@ return {
|
||||||
keys = keys.oil or {},
|
keys = keys.oil or {},
|
||||||
opts = require('config.oil'),
|
opts = require('config.oil'),
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"folke/trouble.nvim",
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
opts = {},
|
||||||
|
config = function (_, opts)
|
||||||
|
require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/snippets"})
|
||||||
|
require("luasnip").setup(opts)
|
||||||
|
end
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,64 +1,66 @@
|
||||||
return {
|
return {
|
||||||
'VonHeikemen/lsp-zero.nvim',
|
"VonHeikemen/lsp-zero.nvim",
|
||||||
branch = 'v3.x',
|
branch = "v3.x",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
'neovim/nvim-lspconfig',
|
"neovim/nvim-lspconfig",
|
||||||
'hrsh7th/cmp-nvim-lsp',
|
"hrsh7th/cmp-nvim-lsp",
|
||||||
|
|
||||||
-- completion
|
-- completion
|
||||||
{
|
{
|
||||||
'hrsh7th/nvim-cmp',
|
"hrsh7th/nvim-cmp",
|
||||||
version = false,
|
version = false,
|
||||||
event = "InsertEnter",
|
event = "InsertEnter",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
'hrsh7th/cmp-buffer',
|
"hrsh7th/cmp-buffer", -- autocomplete from buffer
|
||||||
'hrsh7th/cmp-path',
|
"hrsh7th/cmp-path", -- autocomplete from filesystem
|
||||||
'hrsh7th/cmp-nvim-lsp',
|
"hrsh7th/cmp-nvim-lsp", -- autocomplete from lsp
|
||||||
'L3MON4D3/LuaSnip',
|
"saadparwaiz1/cmp_luasnip", -- autocomplete from snippet engine
|
||||||
'onsails/lspkind-nvim',
|
"L3MON4D3/LuaSnip", -- snippet engine
|
||||||
},
|
"onsails/lspkind-nvim", -- icons for kind
|
||||||
opts = require('config.cmp'),
|
},
|
||||||
config = function(_, opts)
|
opts = require("config.cmp"),
|
||||||
local cmp = require('cmp')
|
config = function(_, opts)
|
||||||
cmp.setup(opts)
|
local cmp = require("cmp")
|
||||||
|
cmp.setup(opts)
|
||||||
|
|
||||||
-- insert () on function completion using autopairs
|
-- insert () on function completion using autopairs
|
||||||
cmp.event:on(
|
cmp.event:on("confirm_done", require("nvim-autopairs.completion.cmp").on_confirm_done())
|
||||||
'confirm_done',
|
end,
|
||||||
require('nvim-autopairs.completion.cmp').on_confirm_done()
|
},
|
||||||
)
|
},
|
||||||
end
|
opts = require("config.lsp"),
|
||||||
},
|
config = function(_, opts)
|
||||||
},
|
local lsp_zero = require("lsp-zero")
|
||||||
opts = require('config.lsp'),
|
local lsp_config = require("lspconfig")
|
||||||
config = function(_, opts)
|
local augroup = vim.api.nvim_create_augroup("Lsp", {})
|
||||||
local lsp_zero = require('lsp-zero')
|
local map = require("utils.keys")
|
||||||
local lsp_config = require('lspconfig')
|
|
||||||
local augroup = vim.api.nvim_create_augroup("Lsp", {})
|
|
||||||
local map = require('utils.keys')
|
|
||||||
|
|
||||||
lsp_zero.on_attach(function(_, bufnr)
|
lsp_zero.on_attach(function(_, bufnr)
|
||||||
for _, v in ipairs(require('config.keymaps').lsp or {}) do
|
for _, v in ipairs(require("config.keymaps").lsp or {}) do
|
||||||
map(v, { buffer = bufnr })
|
map(v, { buffer = bufnr })
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
for name, server_opt in pairs(opts.servers) do
|
for name, server_opt in pairs(opts.servers) do
|
||||||
local on_attach = function(_, bufnr)
|
local on_attach = function(client, bufnr)
|
||||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||||
|
|
||||||
if server_opt.on_save then
|
if server_opt.on_save then
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
group = augroup,
|
group = augroup,
|
||||||
buffer = bufnr,
|
buffer = bufnr,
|
||||||
callback = server_opt.on_save,
|
callback = server_opt.on_save,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
server_opt = vim.tbl_deep_extend("force", {on_attach = on_attach}, server_opt or {})
|
if (opts.document_highlight or false) and client.supports_method('textDocument/documentHighlight')then
|
||||||
|
require("utils.lsp").document_highlight(bufnr)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
lsp_config[name].setup(server_opt)
|
server_opt = vim.tbl_deep_extend("force", { on_attach = on_attach }, server_opt or {})
|
||||||
end
|
|
||||||
end,
|
lsp_config[name].setup(server_opt)
|
||||||
|
end
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ local M = {}
|
||||||
M.keymaps = function(opts)
|
M.keymaps = function(opts)
|
||||||
opts = type(opts) == 'string' and require(opts) or opts
|
opts = type(opts) == 'string' and require(opts) or opts
|
||||||
vim.g.mapleader = opts.leader
|
vim.g.mapleader = opts.leader
|
||||||
|
|
||||||
for _, v in ipairs(opts.global) do
|
for _, v in ipairs(opts.global) do
|
||||||
vim.keymap.set(unpack(v))
|
vim.keymap.set(unpack(v))
|
||||||
end
|
end
|
||||||
|
|
|
||||||
45
nvim/lua/utils/cmd.lua
Normal file
45
nvim/lua/utils/cmd.lua
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
local luasnip = require('luasnip')
|
||||||
|
local cmp = require('cmp')
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.selectNext(opts)
|
||||||
|
return cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item(opts or {})
|
||||||
|
elseif luasnip.locally_jumpable(1) then
|
||||||
|
luasnip.jump(1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {"i", "s"})
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.selectPrev(opts)
|
||||||
|
return cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item(opts or {})
|
||||||
|
elseif luasnip.locally_jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {"i", "s"})
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.confirm(opts)
|
||||||
|
return cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
if luasnip.expand_or_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
else
|
||||||
|
cmp.confirm(opts or {})
|
||||||
|
end
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
22
nvim/lua/utils/lsp.lua
Normal file
22
nvim/lua/utils/lsp.lua
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.document_highlight(bufnr)
|
||||||
|
local group = vim.api.nvim_create_augroup('lsp_document_highlight', { clear = false })
|
||||||
|
vim.api.nvim_clear_autocmds({
|
||||||
|
buffer = bufnr,
|
||||||
|
group = group,
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
|
||||||
|
group = group,
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
|
||||||
|
group = group,
|
||||||
|
buffer = bufnr,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
9
nvim/snippets/all.lua
Normal file
9
nvim/snippets/all.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
s("ternary", {
|
||||||
|
-- equivalent to "${1:cond} ? ${2:then} : ${3:else}"
|
||||||
|
i(1, "cond"), t(" ? "), i(2, "then"), t(" : "), i(3, "else")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
163
nvim/snippets/php.lua
Normal file
163
nvim/snippets/php.lua
Normal file
|
|
@ -0,0 +1,163 @@
|
||||||
|
local q = require('vim.treesitter.query')
|
||||||
|
|
||||||
|
local ls = require('luasnip')
|
||||||
|
local s = ls.snippet
|
||||||
|
-- local sn = ls.snippet_node
|
||||||
|
-- local isn = ls.indent_snippet_node
|
||||||
|
local t = ls.text_node
|
||||||
|
local i = ls.insert_node
|
||||||
|
local f = ls.function_node
|
||||||
|
local c = ls.choice_node
|
||||||
|
-- local d = ls.dynamic_node
|
||||||
|
-- local r = ls.restore_node
|
||||||
|
local events = require('luasnip.util.events')
|
||||||
|
local ai = require('luasnip.nodes.absolute_indexer')
|
||||||
|
local fmt = require('luasnip.extras.fmt').fmt
|
||||||
|
local m = require('luasnip.extras').m
|
||||||
|
local lambda = require('luasnip.extras').l
|
||||||
|
local rep = require('luasnip.extras').rep
|
||||||
|
local postfix = require('luasnip.extras.postfix').postfix
|
||||||
|
|
||||||
|
local visibility_modifiers = {
|
||||||
|
t('public'),
|
||||||
|
t('private'),
|
||||||
|
t('protected'),
|
||||||
|
}
|
||||||
|
|
||||||
|
local query_constructor_args = vim.treesitter.query.parse(
|
||||||
|
'php',
|
||||||
|
[[
|
||||||
|
(method_declaration
|
||||||
|
name: (name) @method_name (#eq? @method_name "__construct")
|
||||||
|
parameters:
|
||||||
|
(formal_parameters
|
||||||
|
(simple_parameter name: (variable_name (name) @arg_name ))
|
||||||
|
))
|
||||||
|
]]
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
-- Class
|
||||||
|
s(
|
||||||
|
{
|
||||||
|
trig = 'cl',
|
||||||
|
},
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
/**
|
||||||
|
* {} {}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
{}
|
||||||
|
|
||||||
|
class {} {{
|
||||||
|
|
||||||
|
{}
|
||||||
|
|
||||||
|
{} function __construct({}) {{
|
||||||
|
{}
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
}}
|
||||||
|
]],
|
||||||
|
{
|
||||||
|
i(1, 'Class description'),
|
||||||
|
i(2, 'Classname'),
|
||||||
|
f(function(args, snip, user_arg)
|
||||||
|
-- TODO: generate namespace using parent directories
|
||||||
|
return 'namespace ' .. args[1][1] .. ';'
|
||||||
|
end, { 2 }),
|
||||||
|
rep(2),
|
||||||
|
f(function(args, snip, user_arg)
|
||||||
|
local parser = vim.treesitter.get_parser(0, 'php')
|
||||||
|
local syntax_tree = parser:parse()
|
||||||
|
local root = syntax_tree[1]:root()
|
||||||
|
|
||||||
|
local text = ''
|
||||||
|
local fields = { '' }
|
||||||
|
|
||||||
|
for _, match, _ in query_constructor_args:iter_matches(root, 0) do
|
||||||
|
for id, node in pairs(match) do
|
||||||
|
local name = query_constructor_args.captures[id]
|
||||||
|
if name == 'arg_name' then
|
||||||
|
text = q.get_node_text(node, 0)
|
||||||
|
fields[#fields + 1] = 'private $_' .. text .. ';'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return fields
|
||||||
|
end, 4),
|
||||||
|
c(3, visibility_modifiers),
|
||||||
|
i(4, '/* Constructor parameters */'),
|
||||||
|
f(function()
|
||||||
|
local fields = { '' }
|
||||||
|
local parser = vim.treesitter.get_parser(0, 'php')
|
||||||
|
local syntax_tree = parser:parse()
|
||||||
|
local root = syntax_tree[1]:root()
|
||||||
|
|
||||||
|
local text = ''
|
||||||
|
local fields = { '' }
|
||||||
|
|
||||||
|
for _, match, _ in query_constructor_args:iter_matches(root, 0) do
|
||||||
|
for id, node in pairs(match) do
|
||||||
|
local name = query_constructor_args.captures[id]
|
||||||
|
if name == 'arg_name' then
|
||||||
|
text = q.get_node_text(node, 0)
|
||||||
|
fields[#fields + 1] = '$this->_' .. text .. '= $' .. text .. ';'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return fields
|
||||||
|
end, { 4 }),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
s(
|
||||||
|
{
|
||||||
|
trig = 'am',
|
||||||
|
},
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
Cacca
|
||||||
|
]],
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
s(
|
||||||
|
{
|
||||||
|
trig = 'af',
|
||||||
|
},
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
Cacca
|
||||||
|
]],
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
-- Getter Setter
|
||||||
|
s(
|
||||||
|
{
|
||||||
|
trig = 'getset'
|
||||||
|
},
|
||||||
|
fmt([[
|
||||||
|
public function get{}() : {} {{
|
||||||
|
return {};
|
||||||
|
}}
|
||||||
|
public function set{}(${} {}) {{
|
||||||
|
$this->{} = ${};
|
||||||
|
return $this;
|
||||||
|
}}
|
||||||
|
]], {
|
||||||
|
i(1, 'Name'),
|
||||||
|
i(2, 'Type'),
|
||||||
|
rep(1), -- getter return type
|
||||||
|
rep(1), -- getter return value
|
||||||
|
rep(1), -- setter arg name
|
||||||
|
rep(2), -- setter arg type
|
||||||
|
rep(2), -- setter property
|
||||||
|
rep(1), -- setter value
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}, {}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue