fixed Dap Debug for .net
This commit is contained in:
parent
61087071ab
commit
1313a988a5
|
@ -8,17 +8,42 @@ return {
|
||||||
'nvim-neotest/nvim-nio',
|
'nvim-neotest/nvim-nio',
|
||||||
|
|
||||||
-- Installs the debug adapters for you
|
-- Installs the debug adapters for you
|
||||||
'williamboman/mason.nvim',
|
-- 'williamboman/mason.nvim',
|
||||||
'jay-babu/mason-nvim-dap.nvim',
|
'jay-babu/mason-nvim-dap.nvim',
|
||||||
|
|
||||||
-- Add your own debuggers here
|
-- Add your own debuggers here
|
||||||
'leoluz/nvim-dap-go',
|
'leoluz/nvim-dap-go',
|
||||||
|
'dotnet/vscode-csharp',
|
||||||
|
|
||||||
|
-- virtual Text
|
||||||
|
'theHamsta/nvim-dap-virtual-text',
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require('dapui').setup()
|
require('dapui').setup()
|
||||||
require('dap-go').setup()
|
require('dap-go').setup()
|
||||||
|
require('nvim-dap-virtual-text').setup()
|
||||||
|
require('lspconfig').omnisharp.setup {}
|
||||||
|
require('dap.ext.vscode').load_launchjs(nil, {})
|
||||||
local dap, dapui = require 'dap', require 'dapui'
|
local dap, dapui = require 'dap', require 'dapui'
|
||||||
|
local ph_status, dotnet_ph = pcall(require, 'utilities.path_finder')
|
||||||
|
dap.adapters.coreclr = {
|
||||||
|
type = 'executable',
|
||||||
|
command = 'netcoredbg',
|
||||||
|
args = { '--interpreter=vscode' },
|
||||||
|
}
|
||||||
|
|
||||||
|
dap.configurations.cs = {
|
||||||
|
{
|
||||||
|
type = 'coreclr',
|
||||||
|
name = 'launch - netcoredbg',
|
||||||
|
request = 'launch',
|
||||||
|
program = function()
|
||||||
|
-- return vim.fn.input('Path to dll:', '/Users/marctalcott/Documents/Projects/DotNetProjects/HelloWorld/bin/Debug/net8.0/', 'file')
|
||||||
|
return vim.fn.input('Path to dll: ', vim.fn.getcwd() .. '/bin/Debug/net8.0/', 'file')
|
||||||
|
end,
|
||||||
|
console = 'integratedTerminal',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
dap.listeners.before.attach.dapui_config = function()
|
dap.listeners.before.attach.dapui_config = function()
|
||||||
dapui.open()
|
dapui.open()
|
||||||
|
@ -33,9 +58,25 @@ return {
|
||||||
dapui.close()
|
dapui.close()
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.keymap.set('n', '<Leader>db', ':DapToggleBreakpoint<CR>')
|
-- Keymaps for all
|
||||||
vim.keymap.set('n', '<Leader>dc', ':DapContinue<CR>')
|
vim.fn.sign_define('DapBreakpoint', { text = '🔴', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' })
|
||||||
vim.keymap.set('n', '<Leader>dx', ':DapTerminate<CR>')
|
|
||||||
vim.keymap.set('n', '<Leader>do', ':DapStepOver<CR>')
|
vim.keymap.set('n', '<Leader>db', dap.toggle_breakpoint, { desc = '[d]ebug toggle [b]reakpoint' })
|
||||||
|
vim.keymap.set('n', '<Leader>dc', dap.continue, { desc = '[d]ebug [c]continue' })
|
||||||
|
vim.keymap.set('n', '<Leader>dC', dap.close, { desc = '[d]ebug [C]lose' })
|
||||||
|
vim.keymap.set('n', '<F5>', dap.continue, { desc = 'Debug Continue' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<F8>', dap.step_over, { desc = 'Step Over' })
|
||||||
|
vim.keymap.set('n', '<F9>', dap.step_out, { desc = 'Step Out' })
|
||||||
|
vim.keymap.set('n', '<F10>', dap.step_into, { desc = 'Step Into' })
|
||||||
|
vim.keymap.set('n', '<F12>', dap.terminate, { desc = 'Terminate' })
|
||||||
|
vim.keymap.set('n', '<Leader>dx', dap.terminate, { desc = 'Terminate' })
|
||||||
|
vim.keymap.set('n', '<Leader>do', dap.step_over, { desc = 'Step over' })
|
||||||
|
vim.keymap.set('n', '<Leader>dr', dap.restart, { desc = 'Restart' })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>dR', ":lua require('dapui').open({reset = true})<CR>", { noremap = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>ht', ":lua require('harpoon.ui').toggle_quick_menu()<CR>", { noremap = true })
|
||||||
|
vim.keymap.set('n', '<Leader>?', function()
|
||||||
|
require('dapui').eval(nil, { enter = true })
|
||||||
|
end, { desc = 'Restart' })
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
-- Check to see if path is a part of the config.projects, if so set last_proj_path and last_dll_path
|
||||||
|
function M.GetProjConfig(path, config)
|
||||||
|
local result = {}
|
||||||
|
if config == nil then
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
local projects = config.projects
|
||||||
|
|
||||||
|
if projects == nil then
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
for _, project in ipairs(projects) do
|
||||||
|
if project.base_path and string.find(path, project.base_path) then
|
||||||
|
-- TODO: nil check, if even needed.
|
||||||
|
-- TODO: these names make no sense
|
||||||
|
result.dotnet_last_proj_path = project.dotnet_proj_file
|
||||||
|
result.dotnet_last_dll_path = project.dotnet_dll_path
|
||||||
|
result.dotnet_debug_cwd = project.dotnet_debug_cwd
|
||||||
|
result.project_found = true
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
result.project_found = false
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.search_up_path(project_root, path, pattern_func)
|
||||||
|
local parent = vim.fn.fnamemodify(path, ':h')
|
||||||
|
-- the parent of 'C:/' is 'C:/'
|
||||||
|
if parent == path then
|
||||||
|
return project_root
|
||||||
|
end
|
||||||
|
local parent_root = pattern_func(parent)
|
||||||
|
-- returns nil when no root is found
|
||||||
|
if parent_root == nil then
|
||||||
|
return project_root
|
||||||
|
end
|
||||||
|
return M.search_up_path(parent_root, parent, pattern_func)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.dotnet_get_dll_path(path, proj_found)
|
||||||
|
local request = function()
|
||||||
|
return vim.fn.input('Path to dll ', vim.fn.getcwd() .. '/bin/Debug/', 'file')
|
||||||
|
end
|
||||||
|
|
||||||
|
if path == nil then
|
||||||
|
path = request()
|
||||||
|
print('Dll path: ' .. path)
|
||||||
|
else
|
||||||
|
if proj_found == false and vim.fn.confirm('Do you want to change the path to dll?\n' .. path, '&yes\n&no', 2) == 1 then
|
||||||
|
path = request()
|
||||||
|
print('Dll path: ' .. path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return path
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.dotnet_build_project(last_path, config)
|
||||||
|
local default_path = vim.fn.getcwd() .. '/'
|
||||||
|
if last_path ~= nil then
|
||||||
|
default_path = last_path
|
||||||
|
end
|
||||||
|
local result = nil
|
||||||
|
|
||||||
|
-- If project was found in config, use it
|
||||||
|
if config.dotnet_last_proj_path ~= nil then
|
||||||
|
print('Found project in config. Project file path is ' .. config.dotnet_last_proj_path)
|
||||||
|
result = config.dotnet_last_proj_path
|
||||||
|
else
|
||||||
|
-- If the project was not found, always ask for it, but fill in the last path
|
||||||
|
result = vim.fn.input('Path to your *proj file', default_path, 'file')
|
||||||
|
end
|
||||||
|
|
||||||
|
local cmd = 'dotnet build -c Debug ' .. result
|
||||||
|
print ''
|
||||||
|
print('Cmd to execute: ' .. cmd)
|
||||||
|
-- TODO: This should be done in async way
|
||||||
|
local f = os.execute(cmd)
|
||||||
|
if f == 0 then
|
||||||
|
print '\nBuild: ✔️ '
|
||||||
|
else
|
||||||
|
print('\nBuild: ❌ (code: ' .. f .. ')')
|
||||||
|
end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
Loading…
Reference in New Issue