mirror of
https://github.com/mfussenegger/nvim-dap
synced 2024-09-16 14:24:03 +02:00
Move on_config hooks from providers to listeners
Fits a bit better and there may be other client generated events in the future.
This commit is contained in:
parent
1f609cbc48
commit
eebde2c241
2 changed files with 55 additions and 40 deletions
81
doc/dap.txt
81
doc/dap.txt
|
@ -1241,6 +1241,54 @@ For events, the listeners are called with two arguments:
|
||||||
2. The event payload
|
2. The event payload
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
BUILT-IN CLIENT EVENTS *dap-listeners-ext*
|
||||||
|
|
||||||
|
In addition to the debug adapter protocol messages, the `dap.listeners` also
|
||||||
|
provides hooks to listen on and react to synthethic events created by the
|
||||||
|
client.
|
||||||
|
|
||||||
|
Currently there are:
|
||||||
|
|
||||||
|
- `dap.listeners.on_config` (See |dap-listeners-on_config|)
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
ON_CONFIG EXTENSIONS API *dap-listeners-on_config*
|
||||||
|
|
||||||
|
|
||||||
|
Plugins can pre-process the |dap-configuration| whenever a debug session
|
||||||
|
starts.
|
||||||
|
|
||||||
|
To do so, register a `on_config` hook in the `dap.listeners.on_config` table.
|
||||||
|
|
||||||
|
The key for the table is a `plugin-id`. Plugins should use their plugin name.
|
||||||
|
Do _not_ use the `dap.` namespace. It is reserved for nvim-dap itself.
|
||||||
|
|
||||||
|
The value for the table is a function that takes a |dap-configuration| as
|
||||||
|
parameter and must return a |dap-configuration|.
|
||||||
|
|
||||||
|
Before making modifications to the config you should copy it, to ensure you
|
||||||
|
don't make permanent changes to a configuration stored within
|
||||||
|
`dap.configrations.<filetype>` via mutations.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>lua
|
||||||
|
local dap = require("dap")
|
||||||
|
dap.listeners.on_config["dummy-noop"] = function(config)
|
||||||
|
return vim.deepcopy(config)
|
||||||
|
end
|
||||||
|
<
|
||||||
|
To support async operations, the on_config functions are called within a
|
||||||
|
coroutine.
|
||||||
|
|
||||||
|
This functionality should only be used by plugins that implement generic
|
||||||
|
functionality applicable for all or most configurations.
|
||||||
|
If you are writing a plugin that already owns an adapter definition, you
|
||||||
|
should prefer using the `enrich_config` function available in |dap-adapter|.
|
||||||
|
If you are not owning the adapter definition but the plugin's functionality is
|
||||||
|
still specific to a limited selection of adapters, please make sure you're not
|
||||||
|
messing with configurations used with adapters foreign to your plugin.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
PROVIDERS EXTENSIONS API *dap-providers*
|
PROVIDERS EXTENSIONS API *dap-providers*
|
||||||
|
|
||||||
|
@ -1291,39 +1339,6 @@ An example:
|
||||||
To support async operations, the config providers functions are called
|
To support async operations, the config providers functions are called
|
||||||
within a coroutine.
|
within a coroutine.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
ON_CONFIG EXTENSIONS API *dap-providers-on_config*
|
|
||||||
|
|
||||||
Plugins can pre-process the |dap-configuration| whenever a debug session
|
|
||||||
starts.
|
|
||||||
|
|
||||||
To do so, register a `on_config` hook in the `dap.providers.on_config` table.
|
|
||||||
|
|
||||||
The key for the table is a `plugin-id`. Plugins should use their plugin name.
|
|
||||||
Do _not_ use the `dap.` namespace. It is reserved for nvim-dap itself.
|
|
||||||
|
|
||||||
The value for the table is a function that takes a |dap-configuration| as
|
|
||||||
parameter and must return a |dap-configuration|.
|
|
||||||
|
|
||||||
Before making modifications to the config you should copy it, to ensure you
|
|
||||||
don't make permanent changes to a configuration stored within
|
|
||||||
`dap.configrations.<filetype>` via mutations.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>lua
|
|
||||||
local dap = require("dap")
|
|
||||||
dap.providers.on_config["dummy-noop"] = function(config)
|
|
||||||
return vim.deepcopy(config)
|
|
||||||
end
|
|
||||||
<
|
|
||||||
To support async operations, the on_config functions are called within a
|
|
||||||
coroutine.
|
|
||||||
|
|
||||||
This functionality should only be used by plugins that implement generic
|
|
||||||
functionality applicable for all or most configurations.
|
|
||||||
For configuration pre-processing that is specific to a individual adapter you
|
|
||||||
should instead use the `enrich_config` function available in |dap-adapter|.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
UTILS API *dap-utils*
|
UTILS API *dap-utils*
|
||||||
|
|
||||||
|
|
14
lua/dap.lua
14
lua/dap.lua
|
@ -118,14 +118,17 @@ M.listeners = {
|
||||||
rawset(tbl, key, {})
|
rawset(tbl, key, {})
|
||||||
return rawget(tbl, key)
|
return rawget(tbl, key)
|
||||||
end
|
end
|
||||||
});
|
}),
|
||||||
---@type dap.listeners
|
---@type dap.listeners
|
||||||
after = setmetatable({}, {
|
after = setmetatable({}, {
|
||||||
__index = function(tbl, key)
|
__index = function(tbl, key)
|
||||||
rawset(tbl, key, {})
|
rawset(tbl, key, {})
|
||||||
return rawget(tbl, key)
|
return rawget(tbl, key)
|
||||||
end
|
end
|
||||||
});
|
}),
|
||||||
|
|
||||||
|
---@type table<string, fun(config: dap.Configuration):dap.Configuration>
|
||||||
|
on_config = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -268,9 +271,6 @@ M.configurations = {}
|
||||||
local providers = {
|
local providers = {
|
||||||
---@type table<string, fun(bufnr: integer): dap.Configuration[]>
|
---@type table<string, fun(bufnr: integer): dap.Configuration[]>
|
||||||
configs = {},
|
configs = {},
|
||||||
|
|
||||||
---@type table<string, fun(config: dap.Configuration):dap.Configuration>
|
|
||||||
on_config = {},
|
|
||||||
}
|
}
|
||||||
do
|
do
|
||||||
local providers_mt = {
|
local providers_mt = {
|
||||||
|
@ -388,7 +388,7 @@ do
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
providers.on_config["dap.expand_variable"] = function(config)
|
M.listeners.on_config["dap.expand_variable"] = function(config)
|
||||||
return vim.tbl_map(expand_config_variables, config)
|
return vim.tbl_map(expand_config_variables, config)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -547,7 +547,7 @@ local function prepare_config(config)
|
||||||
config = config()
|
config = config()
|
||||||
assert(config and type(config) == "table", "config metatable __call must return a config table")
|
assert(config and type(config) == "table", "config metatable __call must return a config table")
|
||||||
end
|
end
|
||||||
for _, on_config in pairs(providers.on_config) do
|
for _, on_config in pairs(M.listeners.on_config) do
|
||||||
config = on_config(config)
|
config = on_config(config)
|
||||||
end
|
end
|
||||||
return config
|
return config
|
||||||
|
|
Loading…
Reference in a new issue