Ontwikkel een Neovim-configuratie voor geavanceerde foutopsporing en realtime code-analyse
description
Met deze prompt kan de gebruiker een krachtige Neovim-configuratie ontwikkelen die realtime feedback biedt tijdens het coderen. Dit helpt fouten sneller te vinden en te corrigeren, verbetert de codekwaliteit en versnelt de ontwikkelingscyclus. Het is beter dan alternatieven doordat het specifiek gericht is op integratie van geavanceerde foutopsporings- en analysetools binnen Neovim, wat resulteert in een efficiëntere en productievere workflow.
prompt
try_prompt
Help me een Neovim-configuratie te maken die realtime foutopsporing en code-analyse ondersteunt. Ik wil functies zoals automatische syntaxcontrole, codekwaliteit feedback, en integratie met statische analysetools voo ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een uitgebreide Neovim-configuratie die realtime foutopsporing en code-analyse ondersteunt voor Python en JavaScript. Ik zal plugins, instellingen en sneltoetsen aanbevelen om je workflow te optimaliseren.
1. **Pluginbeheer**
Gebruik bijvoorbeeld `packer.nvim` als pluginmanager. Voeg onderstaande plugins toe:
```lua
require('packer').startup(function()
-- LSP en autocompletion
use 'neovim/nvim-lspconfig'
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'hrsh7th/cmp-buffer'
use 'saadparwaiz1/cmp_luasnip'
use 'L3MON4D3/LuaSnip'
-- Syntax highlighting en linting
use 'nvim-treesitter/nvim-treesitter'
use 'mfussenegger/nvim-lint'
use 'jose-elias-alvarez/null-ls.nvim' -- voor externe linters en formatters
-- UI en foutweergave
use 'nvim-lua/plenary.nvim'
use 'folke/trouble.nvim' -- overzicht van problemen
use 'nvimdev/diagnostic-nvim' -- verbeterde diagnostics
end)
```
2. **LSP-configuratie voor Python en JavaScript**
Configureer LSP-servers voor beide talen:
```lua
local nvim_lsp = require('lspconfig')
-- Python
nvim_lsp.pyright.setup{
on_attach = function(client, bufnr)
-- Optioneel: extra instellingen
end,
}
-- JavaScript/TypeScript
nvim_lsp.tsserver.setup{
on_attach = function(client, bufnr)
-- Optioneel: extra instellingen
end,
}
```
3. **Autocompletion en snippets**
Configureer `nvim-cmp`:
```lua
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
require'luasnip'.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
}),
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
},
})
```
4. **Realtime syntaxcontrole en linting**
Gebruik `nvim-lint` en `null-ls` voor automatische linting:
```lua
require('lint').linters_by_ft = {
python = {'pylint', 'flake8'},
javascript = {'eslint'},
}
-- Automatisch linten bij opslaan
vim.api.nvim_create_autocmd({"BufWritePost"}, {
pattern = {"*.py", "*.js"},
callback = function()
require('lint').try_lint()
end,
})
```
Configureer `null-ls` voor externe tools zoals ESLint en Flake8:
```lua
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.diagnostics.eslint,
null_ls.builtins.diagnostics.flake8,
},
})
```
5. **Probleemweergave en workflow**
Gebruik `trouble.nvim` voor overzicht:
```lua
require("trouble").setup {
auto_open = false,
}
-- Sneltoetsen
vim.api.nvim_set_keymap('n', '<leader>e', '<cmd>TroubleToggle<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>l', '<cmd>lua require("lint").try_lint()<CR>', { noremap = true, silent = true })
```
6. **Extra tips**
- Gebruik `<leader>dd` om diagnostics te openen en te navigeren.
- Stel automatische linting in op opslaan om direct feedback te krijgen.
- Pas de sneltoetsen aan naar je voorkeur voor snelle toegang tot foutoverzicht en linting.
**Kort samengevat:**
- Installeer en configureer `nvim-lspconfig`, `nvim-cmp`, `nvim-treesitter`, `nvim-lint`, en `null-ls`.
- Gebruik `pylint`, `flake8`, en `eslint` voor realtime codekwaliteit feedback.
- Gebruik `trouble.nvim` voor overzicht van problemen.
- Stel automatische linting en diagnostics in op bestandssave en tijdens coderen.
Met deze setup krijg je directe feedback over syntaxfouten, codekwaliteitsproblemen en statische analyse voor Python en JavaScript, wat je foutopsporingsworkflow aanzienlijk verbetert.
provider: deepseek
model: deepseek-chat
Zeker, hier is een complete Neovim-configuratie voor realtime foutopsporing en code-analyse:
## Kern Plugins (voeg toe aan `plugins.lua` of `init.vim`)
```lua
-- Packer plugin manager
return require('packer').startup(function(use)
-- LSP en Autocompletion
use 'neovim/nvim-lspconfig'
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'hrsh7th/cmp-buffer'
use 'hrsh7th/cmp-path'
-- Syntax en foutdetectie
use 'dense-analysis/ale'
-- Debugging
use 'mfussenegger/nvim-dap'
use 'rcarriga/nvim-dap-ui'
use 'theHamsta/nvim-dap-virtual-text'
-- Code kwaliteit
use 'nvim-treesitter/nvim-treesitter'
use 'folke/trouble.nvim'
-- Syntax highlighting
use 'sheerun/vim-polyglot'
end)
```
## LSP Configuratie (`lua/lsp.lua`)
```lua
local lspconfig = require('lspconfig')
local cmp = require('cmp')
-- LSP servers installeren via Mason
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = {"pyright", "tsserver", "eslint"}
})
-- Autocompletion setup
cmp.setup({
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'buffer' },
})
})
-- Python LSP
lspconfig.pyright.setup({
on_attach = function(client, bufnr)
-- Enable format on save
vim.api.nvim_create_autocmd("BufWritePre", {
buffer = bufnr,
callback = function()
vim.lsp.buf.format()
end,
})
end
})
-- JavaScript/TypeScript LSP
lspconfig.tsserver.setup({})
lspconfig.eslint.setup({})
```
## ALE Configuratie (`lua/ale.lua`)
```lua
vim.g.ale_enabled = 1
vim.g.ale_sign_error = '✘'
vim.g.ale_sign_warning = '⚠'
vim.g.ale_lint_on_enter = 1
vim.g.ale_lint_on_save = 1
vim.g.ale_lint_on_text_changed = 'normal'
vim.g.ale_lint_on_insert_leave = 1
-- Linters per taal
vim.g.ale_linters = {
python = {'flake8', 'pylint', 'mypy'},
javascript = {'eslint'},
typescript = {'eslint', 'tsserver'}
}
-- Fixers
vim.g.ale_fixers = {
python = {'black', 'isort'},
javascript = {'prettier', 'eslint'},
typescript = {'prettier', 'eslint'}
}
vim.g.ale_fix_on_save = 1
```
## Debugging Configuratie (`lua/dap.lua`)
```lua
local dap = require('dap')
local dapui = require('dapui')
-- Python debugging
dap.adapters.python = {
type = 'executable',
command = 'python',
args = { '-m', 'debugpy.adapter' }
}
dap.configurations.python = {
{
type = 'python',
request = 'launch',
name = 'Launch file',
program = '${file}',
pythonPath = function()
return 'python'
end,
},
}
-- JavaScript debugging
dap.adapters.node2 = {
type = 'executable',
command = 'node',
args = {os.getenv('HOME') .. '/dev/microsoft/vscode-node-debug2/out/src/nodeDebug.js'}
}
dap.configurations.javascript = {
{
name = 'Launch',
type = 'node2',
request = 'launch',
program = '${file}',
cwd = vim.fn.getcwd(),
sourceMaps = true,
protocol = 'inspector',
console = 'integratedTerminal',
},
}
dapui.setup()
```
## Sneltoetsen (`lua/keymaps.lua`)
```lua
-- LSP sneltoetsen
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {desc = "Ga naar definitie"})
vim.keymap.set('n', 'gr', vim.lsp.buf.references, {desc = "Toon referenties"})
vim.keymap.set('n', 'K', vim.lsp.buf.hover, {desc = "Documentatie tonen"})
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, {desc = "Hernoemen"})
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, {desc = "Code acties"})
-- ALE sneltoetsen
vim.keymap.set('n', '<leader>af', '<cmd>ALEFix<CR>', {desc = "Code fixen"})
vim.keymap.set('n', '<leader>al', '<cmd>ALELint<CR>', {desc = "Lint uitvoeren"})
vim.keymap.set('n', '[d', '<cmd>ALEPrevious<CR>', {desc = "Vorige fout"})
vim.keymap.set('n', ']d', '<cmd>ALENext<CR>', {desc = "Volgende fout"})
-- Debugging sneltoetsen
vim.keymap.set('n', '<F5>', function() require('dap').continue() end, {desc = "Debugging starten/doorgaan"})
vim.keymap.set('n', '<F10>', function() require('dap').step_over() end, {desc = "Stap over"})
vim.keymap.set('n', '<F11>', function() require('dap').step_into() end, {desc = "Stap in"})
vim.keymap.set('n', '<F12>', function() require('dap').step_out() end, {desc = "Stap uit"})
vim.keymap.set('n', '<leader>b', function() require('dap').toggle_breakpoint() end, {desc = "Breakpoint toggle"})
vim.keymap.set('n', '<leader>B', function() require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, {desc = "Conditionele breakpoint"})
vim.keymap.set('n', '<leader>du', function() require('dapui').toggle() end, {desc = "Debug UI toggle"})
-- Trouble.nvim voor foutenoverzicht
vim.keymap.set('n', '<leader>xx', '<cmd>TroubleToggle<CR>', {desc = "Foutenoverzicht toggle"})
vim.keymap.set('n', '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<CR>', {desc = "Workspace diagnostiek"})
vim.keymap.set('n', '<leader>xd', '<cmd>TroubleToggle document_diagnostics<CR>', {desc = "Document diagnostiek"})
```
## Vereiste Tools Installeren
```bash
# Python tools
pip install flake8 pylint black isort mypy debugpy
# JavaScript/TypeScript tools
npm install -g eslint prettier typescript typescript-language-server
# Neovim LSP manager
git clone https://github.com/williamboman/mason.nvim ~/.local/share/nvim/site/pack/packer/start/mason.nvim
```
## Workflow Optimalisatie Tips
1. **Realtime Feedback**: ALE geeft direct feedback tijdens het typen
2. **Automatisch Fixen**: `:ALEFix` of opslaan met `ale_fix_on_save`
3. **Debugging**: Gebruik F5 om debugging te starten en F10/F11/F12 om te stappen
4. **Foutenoverzicht**: Gebruik `<leader>xx` om alle problemen in één overzicht te zien
5. **Code Acties**: Gebruik `<leader>ca` voor context-specifieke fixes
Deze configuratie geeft je een professionele ontwikkelomgeving met realtime feedback en krachtige debugging mogelijkheden!

