commit 31cacafbfcd660728b1346b906155ccec49be792
parent b23689987b0284b4c379833758fc7af60dbe23d1
Author: Tomas Nemec <nemi@skaut.cz>
Date: Sat, 17 Sep 2022 19:08:33 +0200
update
Diffstat:
2 files changed, 120 insertions(+), 37 deletions(-)
diff --git a/after/plugin/dap.lua b/after/plugin/dap.lua
@@ -3,37 +3,41 @@ if not pcall(require, 'dap') then
end
vim.keymap.set('n', '<leader>dc', function()
- require 'dap'.continue()
+ require'dap'.continue()
end, { silent = true, desc = 'DAP Continue' })
vim.keymap.set('n', '<leader>do', function()
- require 'dap'.step_over()
+ require'dap'.step_over()
end, { silent = true, desc = 'DAP Step Over' })
vim.keymap.set('n', '<leader>di', function()
- require 'dap'.step_into()
+ require'dap'.step_into()
end, { silent = true, desc = 'DAP Step Into' })
vim.keymap.set('n', '<leader>dt', function()
- require 'dap'.step_out()
+ require'dap'.step_out()
end, { silent = true, desc = 'DAP Step Out' })
vim.keymap.set('n', '<leader>db', function()
- require 'dap'.toggle_breakpoint()
+ require'dap'.toggle_breakpoint()
end, { silent = true, desc = 'DAP Toggle Breakpoint' })
vim.keymap.set('n', '<leader>dC', function()
- require 'dap'.clear_breakpoints()
+ require'dap'.clear_breakpoints()
end, { silent = true, desc = 'DAP Clear Breakpoint' })
vim.keymap.set('n', '<Leader>dB', function()
- require 'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))
+ require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))
end, { silent = true, desc = 'DAP Set Breakpoint' })
vim.keymap.set('n', '<leader>dL', function()
- require 'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))
+ require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))
end, { silent = true, desc = 'DAP Set Log Point' })
vim.keymap.set('n', '<leader>dr', function()
- require 'dap'.repl.open()
+ require'dap'.repl.open()
end, { silent = true, desc = 'DAP Open Repl' })
vim.keymap.set('n', '<leader>dl', function()
- require 'dap'.run_last()
+ require'dap'.run_last()
end, { silent = true, desc = 'DAP Run Last' })
local dap = require('dap')
+dap.set_log_level('TRACE')
+dap.repl.commands = vim.tbl_extend('force', dap.repl.commands, { custom_commands = { ['.restart'] = dap.restart } })
+
+-- DAP UI
local has_dapui, dapui = pcall(require, 'dapui')
if has_dapui then
dapui.setup()
@@ -50,6 +54,8 @@ if has_dapui then
dapui.toggle()
end, { silent = true, desc = 'DAP UI Toggle' })
end
+
+-- Virtual Text
local has_dapvt, dapvt = pcall(require, 'nvim-dap-virtual-text')
if has_dapvt then
dapvt.setup()
@@ -104,39 +110,77 @@ end
-- }
-- dap.adapters.nlua = function(callback, config) callback({ type = 'server', host = config.host, port = config.port }) end
+-- DAP CHROME
local has_vscode, vscode = pcall(require, 'dap-vscode-js')
--- if has_vscode then
+if has_vscode then
vscode.setup { adapters = { 'pwa-chrome' } }
--- else
--- dap.adapters['pwa-chrome'] = {
--- type = 'server',
--- port = '${port}',
--- id = 'pwa-chrome',
--- executable = {
--- command = 'node',
--- args = { vim.fn.stdpath 'data' .. '/site/pack/packer/opt/vscode-js-debug/out/src/vsDebugServer.js', '${port}' },
--- detached = false,
--- cwd = vim.fn.getcwd(),
--- },
--- }
--- end
+ dap.configurations.dart = {
+ {
+ type = 'pwa-chrome',
+ request = 'attach',
+ name = 'Attach',
-dap.set_log_level('TRACE')
-dap.configurations.dart = {
- {
- type = 'pwa-chrome',
- request = 'attach',
- name = 'Attach',
+ cwd = vim.fn.getcwd(),
+ port = 9222,
+ webRoot = '${workspaceFolder}/web',
+
+ pathMapping = function()
+ local has_pm, pm = pcall(require, 'tms.ft.dart.path_mapping')
+ if has_pm then
+ return pm.load()
+ end
+ return {}
+ end,
+ sourceMapPathOverrides = {
+ -- ['${webRoot}*'] = '${webRoot}/*',
+ ['*.template.dart'] = '${workspaceFolder}/.dart_tool/build/generated/playground/web/*.template.dart',
+ },
+
+ },
+ }
+end
- cwd = vim.fn.getcwd(),
- port = 9222,
- webRoot = '${workspaceFolder}/web',
- -- sourceMapPathOverrides = {},
+-- ALT CHROME
+--
+-- dap.adapters.chrome = {
+-- type = 'executable',
+-- command = 'node',
+-- args = { vim.fn.stdpath 'data' .. '/mason/packages/chrome-debug-adapter/out/src/chromeDebug.js' },
+-- }
+-- dap.configurations.dart = { -- change this to javascript if needed
+-- {
+-- type = 'chrome',
+-- request = 'attach',
+-- program = '${file}',
+-- cwd = vim.fn.getcwd(),
+-- sourceMaps = true,
+-- protocol = 'inspector',
+-- port = 9222,
+-- webRoot = '${workspaceFolder}/web',
+-- pathMapping = function()
+-- local has_pm, pm = pcall(require, 'tms.ft.dart.path_mapping')
+-- if has_pm then
+-- local mapping = pm.load()
+-- vim.pretty_print(mapping)
+-- return mapping
+-- end
+-- return {}
+-- end,
+-- -- pathMapping = {
+-- -- ['/packages/angular'] = '/home/tms/.pub-cache/hosted/pub.dartlang.org/angular-7.0.2/lib',
+-- -- ['/packages/build_web_compilers'] = '/home/tms/.pub-cache/hosted/pub.dartlang.org/build_web_compilers-3.2.5/lib',
+-- -- },
+-- -- sourceMapPathOverrides = {
+-- -- ['*.dart'] = '${webRoot}/*.dart',
+-- -- ['*.template.dart'] = '${workspaceFolder}/.dart_tool/build/generated/playground/web/*.template.dart',
+-- -- ['../core/linker/views/host_view.dart'] = '/home/tms/.pub-cache/hosted/pub.dartlang.org/angular-7.0.2/lib/src/core/linker/views/host_view.dart',
+-- -- ['main.template.dart'] = '${workspaceFolder}/.dart_tool/build/generated/playground/web/main.template.dart',
+-- -- },
- },
-}
+-- },
+-- }
--- go
+-- DAP GO
local has_dapgo, dapgo = pcall(require, 'dap-go')
if has_dapgo then
dapgo.setup()
diff --git a/lua/tms/ft/dart/path_mapping.lua b/lua/tms/ft/dart/path_mapping.lua
@@ -0,0 +1,39 @@
+local M = {}
+
+local function readfile(path)
+ local file = io.open(path, 'rb')
+ if not file then
+ return nil
+ end
+ local content = file:read('*a')
+ file:close()
+ return content
+end
+
+M.load = function()
+ local packages_config = vim.fn.getcwd() .. '/.dart_tool/package_config.json'
+ if vim.fn.filereadable(packages_config) then
+ vim.pretty_print(packages_config)
+ local content = readfile(packages_config)
+ local json = vim.fn.json_decode(content)
+ if not json or not json.packages then
+ return nil
+ end
+
+ local result = {}
+ for _, package in ipairs(json.packages) do
+ local package_path = ''
+ if string.find(package.rootUri, 'file://') then
+ package_path = string.sub(package.rootUri, 8) .. '/' .. package.packageUri;
+ else
+ package_path = package.rootUri .. package.packageUri;
+ end
+ result['/packages/' .. package.name .. '/'] = package_path;
+ end
+ return result
+ end
+
+ return nil
+end
+
+return M