From b1af49be51a0707719f38f7018882ef37ce6c712 Mon Sep 17 00:00:00 2001 From: Blake Krpec Date: Sun, 27 Oct 2024 01:14:31 -0500 Subject: [PATCH 1/5] add filterOptions --- lua/dap/session.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/dap/session.lua b/lua/dap/session.lua index f14a0335..0b54fc2b 100644 --- a/lua/dap/session.lua +++ b/lua/dap/session.lua @@ -961,7 +961,7 @@ do end end -function Session:set_exception_breakpoints(filters, exceptionOptions, on_done) +function Session:set_exception_breakpoints(filters, exceptionOptions, filterOptions, on_done) if not self.capabilities.exceptionBreakpointFilters then utils.notify("Debug adapter doesn't support exception breakpoints", vim.log.levels.INFO) return @@ -991,12 +991,16 @@ function Session:set_exception_breakpoints(filters, exceptionOptions, on_done) return end + if not filterOptions then + filterOptions = {} + end + -- setExceptionBreakpoints (https://microsoft.github.io/debug-adapter-protocol/specification#Requests_SetExceptionBreakpoints) --- filters: string[] --- exceptionOptions: exceptionOptions?: ExceptionOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionOptions) self:request( 'setExceptionBreakpoints', - { filters = filters, exceptionOptions = exceptionOptions }, + { filters = filters, exceptionOptions = exceptionOptions, filterOptions }, function(err, _) if err then utils.notify('Error setting exception breakpoints: ' .. utils.fmt_error(err), vim.log.levels.ERROR) From be412ae4733065c5651dc4d76f7654ab98aab7da Mon Sep 17 00:00:00 2001 From: Blake Krpec Date: Sun, 27 Oct 2024 01:18:59 -0500 Subject: [PATCH 2/5] .\lua\dap\session.lua --- lua/dap/session.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/dap/session.lua b/lua/dap/session.lua index 0b54fc2b..9ec84f45 100644 --- a/lua/dap/session.lua +++ b/lua/dap/session.lua @@ -1000,7 +1000,7 @@ function Session:set_exception_breakpoints(filters, exceptionOptions, filterOpti --- exceptionOptions: exceptionOptions?: ExceptionOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionOptions) self:request( 'setExceptionBreakpoints', - { filters = filters, exceptionOptions = exceptionOptions, filterOptions }, + { filters = filters, exceptionOptions = exceptionOptions, filterOptions = filterOptions }, function(err, _) if err then utils.notify('Error setting exception breakpoints: ' .. utils.fmt_error(err), vim.log.levels.ERROR) From 5e24216034ea1cddfcefaaf9ff0e0031694ec082 Mon Sep 17 00:00:00 2001 From: Blake Krpec Date: Sun, 27 Oct 2024 02:29:11 -0500 Subject: [PATCH 3/5] add missing nil --- lua/dap/session.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/dap/session.lua b/lua/dap/session.lua index 9ec84f45..90ef3014 100644 --- a/lua/dap/session.lua +++ b/lua/dap/session.lua @@ -316,7 +316,7 @@ function Session:event_initialized() local bps = breakpoints.get() self:set_breakpoints(bps, function() if self.capabilities.exceptionBreakpointFilters then - self:set_exception_breakpoints(dap().defaults[self.config.type].exception_breakpoints, nil, on_done) + self:set_exception_breakpoints(dap().defaults[self.config.type].exception_breakpoints, nil, nil, on_done) else on_done() end From 98c43a9406ec1d6c108e7d047009989e64461807 Mon Sep 17 00:00:00 2001 From: Blake Krpec Date: Fri, 1 Nov 2024 10:21:52 -0500 Subject: [PATCH 4/5] expose setExceptionBreakpoint optional args --- lua/dap.lua | 11 ++++++++--- lua/dap/session.lua | 12 +++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lua/dap.lua b/lua/dap.lua index 1b4eb086..1f52bed9 100644 --- a/lua/dap.lua +++ b/lua/dap.lua @@ -147,6 +147,11 @@ M.defaults = setmetatable( { fallback = { exception_breakpoints = 'default'; + ---@type table[]|nil + exception_options = nil; + ---@type table[]|nil + exception_filter_options = nil; + ---@type "statement"|"line"|"instruction" stepping_granularity = 'statement'; @@ -952,15 +957,15 @@ end -- setExceptionBreakpoints (https://microsoft.github.io/debug-adapter-protocol/specification#Requests_SetExceptionBreakpoints) --- filters: string[] --- exceptionOptions: exceptionOptions?: ExceptionOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionOptions) -function M.set_exception_breakpoints(filters, exceptionOptions) +--- filterOptions: filterOptions?: ExceptionFilterOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionFilterOptions) +function M.set_exception_breakpoints(filters, exceptionOptions, filterOptions) if session then - session:set_exception_breakpoints(filters, exceptionOptions) + session:set_exception_breakpoints(filters, exceptionOptions, filterOptions) else notify('Cannot set exception breakpoints: No active session!', vim.log.levels.INFO) end end - function M.run_to_cursor() local lsession = session if not lsession then diff --git a/lua/dap/session.lua b/lua/dap/session.lua index 90ef3014..c2992635 100644 --- a/lua/dap/session.lua +++ b/lua/dap/session.lua @@ -316,7 +316,11 @@ function Session:event_initialized() local bps = breakpoints.get() self:set_breakpoints(bps, function() if self.capabilities.exceptionBreakpointFilters then - self:set_exception_breakpoints(dap().defaults[self.config.type].exception_breakpoints, nil, nil, on_done) + self:set_exception_breakpoints( + dap().defaults[self.config.type].exception_breakpoints, + dap().defaults[self.config.type].exception_options, + dap().defaults[self.config.type].exception_filter_options, + on_done) else on_done() end @@ -991,13 +995,15 @@ function Session:set_exception_breakpoints(filters, exceptionOptions, filterOpti return end - if not filterOptions then - filterOptions = {} + if filterOptions and not self.capabilities.supportsExceptionFilterOptions then + utils.notify('Debug adapter does not support FilterOptions', vim.log.levels.INFO) + return end -- setExceptionBreakpoints (https://microsoft.github.io/debug-adapter-protocol/specification#Requests_SetExceptionBreakpoints) --- filters: string[] --- exceptionOptions: exceptionOptions?: ExceptionOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionOptions) + --- filterOptions: filterOptions?: ExceptionFilterOptions[] (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionFilterOptions) self:request( 'setExceptionBreakpoints', { filters = filters, exceptionOptions = exceptionOptions, filterOptions = filterOptions }, From bff1b49f2011a0e9d07babd5fe71797b619965ee Mon Sep 17 00:00:00 2001 From: Blake Krpec Date: Sat, 9 Nov 2024 20:06:21 -0600 Subject: [PATCH 5/5] update doc.txt --- doc/dap.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/dap.txt b/doc/dap.txt index 83a1e993..e39c250d 100644 --- a/doc/dap.txt +++ b/doc/dap.txt @@ -780,7 +780,8 @@ clear_breakpoints() *dap.clear_breakpoints()* Removes all breakpoints -set_exception_breakpoints({filters}, {exceptionOptions}) +set_exception_breakpoints({filters}, {exceptionOptions}, +{filterOptions}) *dap.set_exception_breakpoints()* Sets breakpoints on exceptions filtered by `filters`. If `filters` is not @@ -797,6 +798,9 @@ set_exception_breakpoints({filters}, {exceptionOptions}) {exceptionOptions} ExceptionOptions[]? (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionOptions) + {filterOptions} ExceptionFilterOptions[]? + (https://microsoft.github.io/debug-adapter-protocol/specification#Types_ExceptionFilterOptions) + >lua -- Ask user to stop on which kinds of exceptions require'dap'.set_exception_breakpoints()