126 lines
3.2 KiB
Lua
126 lines
3.2 KiB
Lua
vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, { noremap = true, silent = true })
|
|
|
|
vim.diagnostic.config({
|
|
update_in_insert = false,
|
|
virtual_text = {
|
|
prefix = '', -- remove annoying ▎ etc
|
|
format = function(diagnostic)
|
|
-- Show the source (e.g. "luacheck", "lua_ls") before the message
|
|
if diagnostic.source then
|
|
return string.format('[%s] %s', diagnostic.source, diagnostic.message)
|
|
end
|
|
return diagnostic.message
|
|
end,
|
|
},
|
|
float = {
|
|
border = 'rounded',
|
|
source = true, -- show source in floating window too
|
|
},
|
|
severity_sort = true,
|
|
})
|
|
|
|
vim.lsp.enable({ 'lua_ls' })
|
|
vim.lsp.enable({ 'json_ls' })
|
|
|
|
return {
|
|
{ 'mason-org/mason.nvim', config = true },
|
|
-- { 'saghen/blink.cmp', version = '1.*' },
|
|
{
|
|
'nvim-treesitter/nvim-treesitter',
|
|
build = ':TSUpdate',
|
|
main = 'nvim-treesitter.configs',
|
|
opts = {
|
|
highlight = { enable = true },
|
|
incremental_selection = { enable = true },
|
|
textobjects = { enable = true },
|
|
ensure_installed = {
|
|
-- Documentation
|
|
'vim',
|
|
'vimdoc',
|
|
'markdown',
|
|
'markdown_inline',
|
|
-- Data
|
|
'gitcommit',
|
|
'gitignore',
|
|
'dockerfile',
|
|
'diff',
|
|
'json',
|
|
'jsonc',
|
|
-- Scripting
|
|
'bash',
|
|
'lua',
|
|
'sql',
|
|
-- Programming
|
|
'c',
|
|
'cpp',
|
|
'go',
|
|
'rust',
|
|
'python',
|
|
-- Web
|
|
'html',
|
|
'css',
|
|
'javascript',
|
|
'typescript',
|
|
'tsx',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
'mfussenegger/nvim-lint',
|
|
event = { 'BufReadPre', 'BufNewFile' },
|
|
opts = {
|
|
linters_by_ft = {
|
|
lua = { 'luacheck' },
|
|
python = { 'ruff' },
|
|
javascript = { 'eslint_d' },
|
|
},
|
|
},
|
|
config = function(_, opts)
|
|
local lint = require('lint')
|
|
lint.linters_by_ft = opts.linters_by_ft
|
|
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
|
group = vim.api.nvim_create_augroup('lint_autocmd', { clear = true }),
|
|
callback = function()
|
|
lint.try_lint()
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
{
|
|
'stevearc/conform.nvim',
|
|
event = { 'BufWritePre' },
|
|
opts = {
|
|
-- Automatically format on save
|
|
format_on_save = {
|
|
timeout_ms = 500,
|
|
lsp_format = 'fallback', -- Use LSP when no formatter is configured
|
|
},
|
|
|
|
-- Formatters per filetype
|
|
default_format_opts = { stop_after_first = true },
|
|
formatters_by_ft = {
|
|
lua = { 'stylua' },
|
|
sh = { 'shfmt' },
|
|
swift = { 'swift_format' },
|
|
python = { 'isort', 'black' },
|
|
javascript = { 'prettierd', 'prettier' },
|
|
javascriptreact = { 'prettierd', 'prettier' },
|
|
typescript = { 'prettierd', 'prettier' },
|
|
typescriptreact = { 'prettierd', 'prettier' },
|
|
},
|
|
},
|
|
|
|
config = function(_, opts)
|
|
require('conform').setup(opts)
|
|
|
|
-- Create a command to format manually
|
|
vim.api.nvim_create_user_command('Format', function()
|
|
require('conform').format({
|
|
async = true,
|
|
lsp_format = 'fallback',
|
|
})
|
|
end, { desc = 'Format current buffer' })
|
|
end,
|
|
},
|
|
}
|