Better modules

This commit is contained in:
juanmagalhaes 2023-08-16 00:12:13 -03:00
parent 5721e692da
commit 39dfc1554a
21 changed files with 368 additions and 373 deletions

View file

@ -0,0 +1,38 @@
return function(buffer)
local nmap = require("core.utils").createNmap({
buffer = buffer,
desc = 'LSP: ',
})
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- See `:help K` for why this keymap
nmap('M', vim.lsp.buf.hover, 'Hover Documentation')
nmap('<C-m>', vim.lsp.buf.signature_help, 'Signature Documentation')
-- Lesser used LSP functionality
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
nmap('<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, '[W]orkspace [L]ist Folders')
-- nvim-ufo mappings
nmap("zR", require("ufo").openAllFolds, "Open All Folds")
nmap("zM", require("ufo").closeAllFolds, "Close All Folds")
nmap("zj", function()
local winid = require("ufo").peekFoldedLinesUnderCursor()
if not winid then
vim.lsp.buf.hover()
end
end, "Peek At Current Fold")
end

View file

@ -0,0 +1,8 @@
return function(buffer, cmds)
local nmap = require("core.utils").createNmap({
buffer = buffer,
desc = 'LSP: ',
})
nmap('<leader>oi', cmds.organize_imports, 'OrganizeImports')
end

View file

View file

@ -0,0 +1,16 @@
local function fuzzyFindFiles()
require('telescope.builtin').grep_string({
path_display = { 'smart' },
only_sort_text = true,
word_match = "-w",
search = '',
})
end
vim.keymap.set('n', '<C-p>', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' })
vim.keymap.set('n', 'K', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<C-a>', fuzzyFindFiles, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<C-s>', require('telescope.builtin').live_grep, { desc = '[S]earch Live Exact Match' })
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })

View file

@ -0,0 +1,37 @@
-- [[ General Keymaps ]]
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
-- Remap for dealing with word wrap
vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
-- Stop yanking on paste
vim.keymap.set('x', 'p', 'P')
-- [[ Highlight on yank ]]
-- See `:help vim.highlight.on_yank()`
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
vim.api.nvim_create_autocmd('TextYankPost', {
callback = function()
vim.highlight.on_yank()
end,
group = highlight_group,
pattern = '*',
})
-- Esc functionality
vim.keymap.set("n", "<Esc>", function()
-- Clear terminal notification below
vim.notify("")
-- Removes highlight search
vim.cmd.noh()
vim.cmd(':silent! Neotree cancel<cr>')
end, { silent = true })
-- Split resize
vim.keymap.set('n', '<C-j>', ':res +1<cr>', { desc = 'Resize split' })
vim.keymap.set('n', '<C-k>', ':res -1<cr>', { desc = 'Resize split' })
vim.keymap.set('n', '<C-h>', ':vertical res -1<cr>', { desc = 'Resize split vertically' })
vim.keymap.set('n', '<C-l>', ':vertical res +1<cr>', { desc = 'Resize split vertically' })

View file

@ -0,0 +1,6 @@
local import = require('core.utils').createImporter("core.keymaps")
import('general')
import('project-tree')
import('file-search')
import('diagnostics')

View file

@ -0,0 +1,4 @@
-- Neotree mappings
vim.keymap.set('n', '<leader><space>', ':Neotree toggle<cr>', { desc = 'File tree' })
vim.keymap.set('n', '<leader>nf', ':Neotree filesystem reveal<cr>', { desc = 'Reveal in file tree' })

View file

@ -1,8 +1,5 @@
-- Here is where you install your plugins.
-- You can configure plugins using the `config` key.
--
-- You can also configure plugins after the setup call,
-- as they will be available in your neovim runtime.
-- Plugin declarations
local plugins = {
-- :Git/:G
'tpope/vim-fugitive',
@ -23,7 +20,6 @@ local plugins = {
'williamboman/mason-lspconfig.nvim',
-- Useful status updates for LSP
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{
'j-hui/fidget.nvim',
tag = 'legacy',
@ -131,22 +127,13 @@ local plugins = {
-- require plugins with more complex config
require 'plugins.todo-comments',
require 'core.plugins.todo-comments',
require 'plugins.neo-tree',
require 'core.plugins.neo-tree',
require 'plugins.nvim-ufo',
require 'core.plugins.nvim-ufo',
require 'kickstart.plugins.autoformat',
-- require 'kickstart.plugins.debug',
-- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping
-- up-to-date with whatever is in the kickstart repo.
--
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
{ import = 'custom.plugins' },
}
local pluginOptions = {}

View file

@ -1,6 +1,8 @@
-- [[ Setting options ]]
-- See `:help vim.o`
-- NOTE: You can change these options as you wish!
-- Sets <space> as the <leader> key
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- Disale Swap Files
vim.opt.swapfile = false

View file

@ -0,0 +1,48 @@
-- [[ Configure nvim-cmp ]]
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {}
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {},
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
},
}

View file

@ -0,0 +1,18 @@
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
defaults = {
mappings = {
i = {
['<C-u>'] = false,
['<C-d>'] = false,
},
},
},
}
-- Enable telescope fzf native, if installed
pcall(require('telescope').load_extension, 'fzf')
-- See `:help telescope.builtin`

6
lua/core/setup/init.lua Normal file
View file

@ -0,0 +1,6 @@
local import = require('core.utils').createImporter("core.setup")
import('file-search')
import('syntax-highlight')
import('language-servers')
import('completion-engine')

View file

@ -0,0 +1,81 @@
local servers = {
-- clangd = {},
-- gopls = {},
-- pyright = {},
-- rust_analyzer = {},
tsserver = {},
lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
},
},
}
-- Setup neovim lua configuration
require('neodev').setup()
-- nvim-cmp supports additional completion capabilities,
-- so broadcast that to servers
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Ensure the servers above are installed
local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys(servers),
}
local lspKeymaps = require('core.keymaps.async.language-servers')
local on_attach = function(_, bufnr)
lspKeymaps(bufnr)
end
mason_lspconfig.setup_handlers {
function(server_name)
require('lspconfig')[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = servers[server_name],
}
end,
}
-- Tsserver run organize imports command
local function organize_imports()
local params = {
command = "_typescript.organizeImports",
arguments = { vim.api.nvim_buf_get_name(0) },
title = ""
}
vim.lsp.buf.execute_command(params)
end
local tsserverKeymaps = require('core.keymaps.async.tsserver')
local tsserver_on_attach = function(_, bufnr)
lspKeymaps(bufnr)
tsserverKeymaps(bufnr, {
organize_imports = organize_imports
})
end
require('lspconfig').tsserver.setup {
on_attach = tsserver_on_attach,
capabilities = capabilities,
init_options = {
preferences = {
disableSuggestions = true
}
},
commands = {
OrganizeImports = {
organize_imports,
description = "Organize Imports"
}
}
}

View file

@ -0,0 +1,67 @@
-- [[ Configure Treesitter ]]
-- See `:help nvim-treesitter`
require('nvim-treesitter.configs').setup {
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'javascript', 'vimdoc', 'vim' },
-- Autoinstall languages that are not installed.
-- Defaults to false (but you can change for yourself!)
auto_install = false,
highlight = { enable = true },
indent = { enable = true },
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<c-space>',
node_incremental = '<c-space>',
scope_incremental = '<c-s>',
node_decremental = '<M-space>',
},
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
['aa'] = '@parameter.outer',
['ia'] = '@parameter.inner',
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
[']m'] = '@function.outer',
[']]'] = '@class.outer',
},
goto_next_end = {
[']M'] = '@function.outer',
[']['] = '@class.outer',
},
goto_previous_start = {
['[m'] = '@function.outer',
['[['] = '@class.outer',
},
goto_previous_end = {
['[M'] = '@function.outer',
['[]'] = '@class.outer',
},
},
swap = {
enable = true,
swap_next = {
['<leader>a'] = '@parameter.inner',
},
swap_previous = {
['<leader>A'] = '@parameter.inner',
},
},
},
}

24
lua/core/utils.lua Normal file
View file

@ -0,0 +1,24 @@
local createImporter = function(path)
return function(module)
require(path .. "." .. module)
end
end
local createNmap = function(opts)
return function(keys, func, _desc)
if opts.desc then
_desc = opts.desc .. _desc
end
local newOpts = { desc = _desc }
for k, v in pairs(newOpts) do opts[k] = v end
vim.keymap.set('n', keys, func, newOpts)
end
end
return {
createImporter = createImporter,
createNmap = createNmap,
}

View file

@ -1,5 +0,0 @@
-- You can add your own plugins here or in other files in this directory!
-- I promise not to create any merge conflicts in this directory :)
--
-- See the kickstart.nvim README for more information
return {}