From dcf046f5508951491a5e76056bf815e16e2f8cb9 Mon Sep 17 00:00:00 2001 From: Ricardo Subtil Date: Sat, 25 Oct 2025 02:55:06 +0100 Subject: [PATCH 01/15] Add Godot to the list of DAP adapters (#568) --- _implementors/adapters.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_implementors/adapters.md b/_implementors/adapters.md index 21901a3..23a1fab 100644 --- a/_implementors/adapters.md +++ b/_implementors/adapters.md @@ -44,6 +44,7 @@ Many adapters publish releases tailored for specific editors, such as VS Code, a [Firefox Remote Debug](https://github.com/yurydelendik/vscode-ff-debug)|[@yurydelendik](https://github.com/yurydelendik)|[VS Code](https://marketplace.visualstudio.com/items?itemName=yurydelendik.firefox-debug) [Flash](https://github.com/vshaxe/flash-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=vshaxe.haxe-debug) [Flutter](https://github.com/flutter/flutter)|[@DanTup](https://github.com/DanTup) [@devoncarew](https://github.com/devoncarew)|[DAP Server](https://github.com/flutter/flutter/blob/master/packages/flutter_tools/lib/src/debug_adapters/README.md), [VS Code](https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter) +[Godot](https://github.com/godotengine/godot)|[@godotengine](https://github.com/godotengine)|[DAP Server](https://docs.godotengine.org/en/stable/tutorials/editor/external_editor.html#lsp-dap-support), [Rider](https://www.jetbrains.com/lp/rider-godot/), [VS Code](https://github.com/godotengine/godot-vscode-plugin) [Go Delve Debugger](https://github.com/go-delve/delve/tree/master/service/dap)| [@polinasok](https://github.com/polinasok) and [Delve](https://github.com/go-delve)| [DAP Server](https://github.com/go-delve/delve/tree/master/Documentation/api/dap), [VS Code](https://github.com/golang/vscode-go/blob/master/docs/debugging.md) [Harbour](https://github.com/APerricone/harbourCodeExtension)|[@APerricone](https://github.com/APerricone)|[VS Code](https://marketplace.visualstudio.com/items?itemName=aperricone.harbour) [HashLink](https://github.com/vshaxe/hashlink-debugger)|[@vshaxe](https://github.com/vshaxe/)|[VS Code](https://marketplace.visualstudio.com/items?itemName=HaxeFoundation.haxe-hl) From c586d88de577caee962da186022c4bb79b1103e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:45:04 -0800 Subject: [PATCH 02/15] chore(deps): bump js-yaml from 4.1.0 to 4.1.1 in /diagrams (#573) Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- diagrams/package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/diagrams/package-lock.json b/diagrams/package-lock.json index aca2f34..d98fad2 100644 --- a/diagrams/package-lock.json +++ b/diagrams/package-lock.json @@ -1755,9 +1755,10 @@ "peer": true }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", "peer": true, "dependencies": { "argparse": "^2.0.1" From 005c7670273e617c43c8523bb015783131955358 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 11:06:03 -0800 Subject: [PATCH 03/15] chore(deps): bump rexml from 3.3.9 to 3.4.2 (#559) Bumps [rexml](https://github.com/ruby/rexml) from 3.3.9 to 3.4.2. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.3.9...v3.4.2) --- updated-dependencies: - dependency-name: rexml dependency-version: 3.4.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 56f2249..46da7e6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -229,7 +229,7 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.9.10) ffi (>= 0.5.0, < 2) - rexml (3.3.9) + rexml (3.4.2) rouge (3.30.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) From 056733995c15a30fff27a1274eb86756a3a8ca8b Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 18 Dec 2025 11:25:58 -0800 Subject: [PATCH 04/15] fix: clarify arguments required for cancel/breakpointlocations (#579) Closes #576 Closes #266 --- debugAdapterProtocol.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index ecbe53c..596562b 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -137,6 +137,7 @@ "enum": [ "cancel" ] }, "arguments": { + "description": "Arguments must be passed to form a valid request. Debug adapters may reject requests that lack arguments with an error. These `arguments` are marked as optional for historical reasons.", "$ref": "#/definitions/CancelArguments" } }, @@ -1197,6 +1198,7 @@ "enum": [ "breakpointLocations" ] }, "arguments": { + "description": "Arguments must be passed to form a valid request. Debug adapters may reject requests that lack arguments with an error. These `arguments` are marked as optional for historical reasons.", "$ref": "#/definitions/BreakpointLocationsArguments" } }, From 3a9d1c657b1c692923a24bc7602fde8a0bd6ecd7 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 18 Dec 2025 11:44:13 -0800 Subject: [PATCH 05/15] fix: clarify behavior of start/count in variablesarguments (#580) * fix: clarify arguments required for cancel/breakpointlocations Closes #576 Closes #266 * fix: clarify behavior of start/count in variablesarguments Closes #571 --- debugAdapterProtocol.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index 596562b..e3f442c 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -2148,11 +2148,11 @@ }, "start": { "type": "integer", - "description": "The index of the first variable to return; if omitted children start at 0.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." + "description": "The index of the first variable to return; if omitted children start at 0. If the value of `start` exceeeds the number of available variables, the debug adapter should return an empty array.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "count": { "type": "integer", - "description": "The number of variables to return. If count is missing or 0, all variables are returned.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." + "description": "The number of variables to return. If count is missing or 0, all variables are returned. If fewer than `count` variables are returned, the client should assume no further variables are available.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "format": { "$ref": "#/definitions/ValueFormat", From 75e305f06f13eee38ad73e3ef77acc77c4ccf557 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 18 Dec 2025 12:08:40 -0800 Subject: [PATCH 06/15] fix: clarify expectations around source.path format (#581) Closes #563 Closes #182 --- debugAdapterProtocol.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index e3f442c..150d8da 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -3533,7 +3533,7 @@ }, "path": { "type": "string", - "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0)." + "description": "The path of the source to be shown in the UI. This may be a URI if `pathFormat` is set to `uri` in the `InitializeRequestArguments`.\nIt is used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0). If `sourceReference` is specified, then `path` is a presentational property and clients should not assume the path exists on disk, nor that the path or URI format is the same as that of the client's operating system." }, "sourceReference": { "type": "integer", From 3a181aa389a813baa1369e4e0f12a795b36ccbf3 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 19 Dec 2025 22:02:28 +0100 Subject: [PATCH 07/15] Added debugConsoleMode to StartDebuggingRequestArguments (#574) --- debugAdapterProtocol.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index 150d8da..30f55b6 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -849,6 +849,14 @@ "additionalProperties": true, "description": "Arguments passed to the new debug session. The arguments must only contain properties understood by the `launch` or `attach` requests of the debug adapter and they must not contain any client-specific properties (e.g. `type`) or client-specific features (e.g. substitutable 'variables')." }, + "debugConsoleMode": { + "type": "string", + "enum": [ + "separate", + "mergeWithParent" + ], + "description": "Specifies if a new debug console window should be created or the output should be merged with the parent session's console." + }, "request": { "type": "string", "enum": [ From a79957ed3ee5e4d139262db494b4888806b963ae Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 19 Dec 2025 13:25:48 -0800 Subject: [PATCH 08/15] fix: rename new debugConsoleMode (#584) The 'debug console' is not a protocol-level concept in DAP. Instead have this verbiage refer to the presentation of output events which is more aligned with what the protocol knows about. --- debugAdapterProtocol.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index 30f55b6..b7033e0 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -849,13 +849,13 @@ "additionalProperties": true, "description": "Arguments passed to the new debug session. The arguments must only contain properties understood by the `launch` or `attach` requests of the debug adapter and they must not contain any client-specific properties (e.g. `type`) or client-specific features (e.g. substitutable 'variables')." }, - "debugConsoleMode": { + "outputPresentation": { "type": "string", "enum": [ "separate", "mergeWithParent" ], - "description": "Specifies if a new debug console window should be created or the output should be merged with the parent session's console." + "description": "Hints whether output of the child sessions should be presented separately or merged with that of the parent session's." }, "request": { "type": "string", From 151c6bcd976ece9a61591476652a9c21a6d186e7 Mon Sep 17 00:00:00 2001 From: Tara <4934394+taradinoc@users.noreply.github.com> Date: Sat, 20 Dec 2025 14:29:16 -0800 Subject: [PATCH 09/15] Add ZIL debug adapter (#585) --- _implementors/adapters.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_implementors/adapters.md b/_implementors/adapters.md index 23a1fab..54c97e1 100644 --- a/_implementors/adapters.md +++ b/_implementors/adapters.md @@ -92,6 +92,7 @@ Many adapters publish releases tailored for specific editors, such as VS Code, a [VDM-SL, VDM++, VDM-RT](https://github.com/nickbattle/vdmj/tree/master/lsp)|[@nickbattle](https://github.com/nickbattle)|[VS Code](https://marketplace.visualstudio.com/items?itemName=jonaskrask.vdm-vscode) [VSCode rdbg Ruby Debugger](https://github.com/ruby/vscode-rdbg)|[@ko1](https://github.com/ko1)|[VS Code](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg) [Wolfram Language](https://github.com/kenkangxgwe/lsp-wl?tab=readme-ov-file#debug-adapter-features)|[@kenkangxgwe](https://github.com/kenkangxgwe/lsp-wl)|[VS Code](https://marketplace.visualstudio.com/items?itemName=lsp-wl.lsp-wl-client) +[ZIL](https://foss.heptapod.net/zilf/vscode-zil-language)|[@taradinoc](https://github.com/taradinoc)|[VS Code](https://marketplace.visualstudio.com/items?itemName=zilf.zil-language) {: .table .table-bordered .table-responsive} *If you are missing a debug adapter implementation please create a pull request in GitHub against this markdown [document](https://github.com/Microsoft/debug-adapter-protocol/blob/main/_implementors/adapters.md)* From 5f5599724e86f721c592aad30232c46283c262f6 Mon Sep 17 00:00:00 2001 From: Hassan El-Sheikha <71786895+hassanelsheikha@users.noreply.github.com> Date: Wed, 31 Dec 2025 21:20:45 -0500 Subject: [PATCH 10/15] Add Varphi debug adapter (#586) --- _implementors/adapters.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_implementors/adapters.md b/_implementors/adapters.md index 54c97e1..a6fb913 100644 --- a/_implementors/adapters.md +++ b/_implementors/adapters.md @@ -89,6 +89,7 @@ Many adapters publish releases tailored for specific editors, such as VS Code, a [SWI-Prolog](https://github.com/eshelyaron/debug_adapter)|[@eshelyaron](https://github.com/eshelyaron)|[SWI and Emacs](https://github.com/eshelyaron/debug_adapter#installation) [SWF](https://github.com/BowlerHatLLC/vscode-nextgenas)|[@joshtynjala](https://github.com/joshtynjala)|[VS Code](https://marketplace.visualstudio.com/items?itemName=bowlerhatllc.vscode-nextgenas) [TLA+](https://github.com/tlaplus/vscode-tlaplus)|[@lemmy](https://github.com/lemmy)|[VS Code](https://marketplace.visualstudio.com/items?itemName=alygin.vscode-tlaplus-nightly) +[Varphi](https://github.com/varphi-lang/varphi-python-dap)|[@hassanelsheikha](https://github.com/hassanelsheikha)|[VS Code](https://marketplace.visualstudio.com/items?itemName=varphi-lang.varphi) [VDM-SL, VDM++, VDM-RT](https://github.com/nickbattle/vdmj/tree/master/lsp)|[@nickbattle](https://github.com/nickbattle)|[VS Code](https://marketplace.visualstudio.com/items?itemName=jonaskrask.vdm-vscode) [VSCode rdbg Ruby Debugger](https://github.com/ruby/vscode-rdbg)|[@ko1](https://github.com/ko1)|[VS Code](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg) [Wolfram Language](https://github.com/kenkangxgwe/lsp-wl?tab=readme-ov-file#debug-adapter-features)|[@kenkangxgwe](https://github.com/kenkangxgwe/lsp-wl)|[VS Code](https://marketplace.visualstudio.com/items?itemName=lsp-wl.lsp-wl-client) From e7157f22d6232866186b0e0536429c1236672323 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 26 Jan 2026 10:59:41 -0800 Subject: [PATCH 11/15] Specify sizes and ranges of DAP integers (#583) * Specify sizes and ranges of DAP integers - Generally types/IDs that were only specified as `integer`s are now int32s. I only defined minimums on those that previously had ">0" behavior - Lines and columns are uint64 since they're only ever >0 and we should be able to express more than (u)int32-sized files. With these and other 64-bit types, I set the `minimum` and `maximum` to the max safe floating point integers so as to ensure compatibility with floating-point-based runtimes, like JavaScript and Lua (<=5.2) - variablesReference is defined as uint32 because we consistently define behavior as "when variablesReference is >0" and "<0" is undefined - systemProcessId is an int32. While research shows there are some exotic systems where it _can_ be an int64 (Solaris) it is practically still an int32 (even 64 bit Linux limits to 2^22) and we have already defined it as such elsewhere - Memory-related offset/count is defined as int64 - namedVariables/indexedVariables are counts, but they were previously specified as having a max value of `2147483647` so I kept them as int32's with a `minimum` value in the schema I would greatly appreciate folks that use various DAP clients to try this out and let me know if you run into issues or see things that should be changed. I'll keep this PR open for a while before merging it to gather feedback. Closes #422 Closes #551 * variablesReference -> int32 * rm bad min --- debugAdapterProtocol.json | 253 +++++++++- spec-generator/generator.ts | 32 +- spec-generator/json_schema.d.ts | 13 +- spec-generator/package-lock.json | 765 ++++++++++++++++++++++++++++++- spec-generator/package.json | 6 +- 5 files changed, 1039 insertions(+), 30 deletions(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index b7033e0..7c96e83 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -14,6 +14,8 @@ "properties": { "seq": { "type": "integer", + "format": "int32", + "minimum": 1, "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request." }, "type": { @@ -80,6 +82,8 @@ }, "request_seq": { "type": "integer", + "format": "int32", + "minimum": 1, "description": "Sequence number of the corresponding request." }, "success": { @@ -150,6 +154,8 @@ "properties": { "requestId": { "type": "integer", + "format": "int32", + "minimum": 1, "description": "The ID (attribute `seq`) of the request to cancel. If missing no request is cancelled.\nBoth a `requestId` and a `progressId` can be specified in one request." }, "progressId": { @@ -203,6 +209,7 @@ }, "threadId": { "type": "integer", + "format": "int32", "description": "The thread which was stopped." }, "preserveFocusHint": { @@ -220,7 +227,8 @@ "hitBreakpointIds": { "type": "array", "items": { - "type": "integer" + "type": "integer", + "format": "int32" }, "description": "Ids of the breakpoints that triggered the event. In most cases there is only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location." } @@ -246,6 +254,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "The thread which was continued." }, "allThreadsContinued": { @@ -274,6 +283,7 @@ "properties": { "exitCode": { "type": "integer", + "format": "int32", "description": "The exit code returned from the debuggee." } }, @@ -326,6 +336,7 @@ }, "threadId": { "type": "integer", + "format": "int32", "description": "The identifier of the thread." } }, @@ -376,6 +387,8 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If an attribute `variablesReference` exists and its value is > 0, the output contains objects which can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "source": { @@ -384,10 +397,14 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The source location's line where the output was produced." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The position in `line` where the output was produced. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "data": { @@ -396,6 +413,7 @@ }, "locationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the new value is declared. For example, if the logged value is function pointer, the adapter may be able to look up the function's location. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -513,6 +531,7 @@ }, "systemProcessId": { "type": "integer", + "format": "int32", "description": "The process ID of the debugged process, as assigned by the operating system. This property should be omitted for logical processes that do not map to operating system processes on the machine." }, "isLocalProcess": { @@ -531,6 +550,7 @@ }, "pointerSize": { "type": "integer", + "format": "uint32", "description": "The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display." } }, @@ -588,6 +608,8 @@ }, "requestId": { "type": "integer", + "format": "int32", + "minimum": 1, "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit progress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter." }, "cancellable": { @@ -600,7 +622,9 @@ }, "percentage": { "type": "number", - "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown." + "minimum": 0, + "maximum": 100, + "description": "Progress percentage to display. If omitted no percentage is shown." } }, "required": [ "progressId", "title" ] @@ -632,7 +656,9 @@ }, "percentage": { "type": "number", - "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown." + "minimum": 0, + "maximum": 100, + "description": "Progress percentage to display. If omitted no percentage is shown." } }, "required": [ "progressId" ] @@ -691,10 +717,12 @@ }, "threadId": { "type": "integer", + "format": "int32", "description": "If specified, the client only needs to refetch data related to this thread." }, "stackFrameId": { "type": "integer", + "format": "int32", "description": "If specified, the client only needs to refetch data related to this stack frame (and the `threadId` is ignored)." } } @@ -722,10 +750,15 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Starting offset in bytes where memory has been updated. Can be negative." }, "count": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Number of bytes updated." } }, @@ -802,11 +835,13 @@ "properties": { "processId": { "type": "integer", - "description": "The process ID. The value should be less than or equal to 2147483647 (2^31-1)." + "format": "int32", + "description": "The process ID." }, "shellProcessId": { "type": "integer", - "description": "The process ID of the terminal shell. The value should be less than or equal to 2147483647 (2^31-1)." + "format": "int32", + "description": "The process ID of the terminal shell." } } } @@ -1224,18 +1259,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start line of range to search possible breakpoint locations in. If only the line is specified, the request returns all possible locations in that line." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position within `line` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no column is given, the first position in the start line is assumed." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position within `endLine` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no end column is given, the last position in the end line is assumed." } }, @@ -1298,7 +1341,9 @@ "lines": { "type": "array", "items": { - "type": "integer" + "type": "integer", + "format": "uint64", + "maximum": 9007199254740991 }, "description": "Deprecated: The code locations of the breakpoints." }, @@ -1472,6 +1517,8 @@ "properties": { "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "Reference to the variable container if the data breakpoint is requested for a child of the container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "name": { @@ -1480,10 +1527,12 @@ }, "frameId": { "type": "integer", + "format": "int32", "description": "When `name` is an expression, evaluate it in the scope of this stack frame. If not specified, the expression is evaluated in the global scope. When `variablesReference` is specified, this property has no effect." }, "bytes": { "type": "integer", + "format": "uint32", "description": "If specified, a debug adapter should return information for the range of memory extending `bytes` number of bytes from the address or variable specified by `name`. Breakpoints set using the resulting data ID should pause on data access anywhere within that range.\n\nClients may set this property only if the `supportsDataBreakpointBytes` capability is true." }, "asAddress": { @@ -1664,6 +1713,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the argument `singleThread` is true, only the thread with this ID is resumed." }, "singleThread": { @@ -1714,6 +1764,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the thread for which to resume execution for one step (of the given granularity)." }, "singleThread": { @@ -1756,6 +1807,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the thread for which to resume execution for one step-into (of the given granularity)." }, "singleThread": { @@ -1764,6 +1816,7 @@ }, "targetId": { "type": "integer", + "format": "int32", "description": "Id of the target to step into." }, "granularity": { @@ -1802,6 +1855,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the thread for which to resume execution for one step-out (of the given granularity)." }, "singleThread": { @@ -1844,6 +1898,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the thread for which to resume execution for one step backwards (of the given granularity)." }, "singleThread": { @@ -1886,6 +1941,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the `singleThread` argument is true, only the thread with this ID is resumed." }, "singleThread": { @@ -1925,6 +1981,7 @@ "properties": { "frameId": { "type": "integer", + "format": "int32", "description": "Restart the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -1959,10 +2016,12 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Set the goto target for this thread." }, "targetId": { "type": "integer", + "format": "int32", "description": "The location where the debuggee will continue to run." } }, @@ -1997,6 +2056,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Pause execution for this thread." } }, @@ -2031,14 +2091,17 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Retrieve the stacktrace for this thread." }, "startFrame": { "type": "integer", + "format": "uint32", "description": "The index of the first frame to return; if omitted frames start at 0." }, "levels": { "type": "integer", + "format": "uint32", "description": "The maximum number of frames to return. If levels is not specified or 0, all frames are returned." }, "format": { @@ -2065,6 +2128,7 @@ }, "totalFrames": { "type": "integer", + "format": "uint32", "description": "The total number of frames available in the stack. If omitted or if `totalFrames` is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing `totalFrames` values for subsequent requests can be used to enforce paging in the client." } }, @@ -2097,6 +2161,7 @@ "properties": { "frameId": { "type": "integer", + "format": "int32", "description": "Retrieve the scopes for the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -2147,6 +2212,8 @@ "properties": { "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The variable for which to retrieve its children. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "filter": { @@ -2156,10 +2223,12 @@ }, "start": { "type": "integer", + "format": "uint32", "description": "The index of the first variable to return; if omitted children start at 0. If the value of `start` exceeeds the number of available variables, the debug adapter should return an empty array.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "count": { "type": "integer", + "format": "uint32", "description": "The number of variables to return. If count is missing or 0, all variables are returned. If fewer than `count` variables are returned, the client should assume no further variables are available.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "format": { @@ -2214,6 +2283,8 @@ "properties": { "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The reference of the variable container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "name": { @@ -2249,14 +2320,20 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If `variablesReference` is > 0, the new value is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.\n\nIf this property is included in the response, any `variablesReference` previously associated with the updated variable, and those of its children, are no longer valid." }, "namedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "memoryReference": { @@ -2265,6 +2342,7 @@ }, "valueLocationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the new value is declared. For example, if the new value is function pointer, the adapter may be able to look up the function's location. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -2301,6 +2379,8 @@ }, "sourceReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The reference to the source. This is the same as `source.sourceReference`.\nThis is provided for backward compatibility since old clients do not understand the `source` attribute." } }, @@ -2389,7 +2469,8 @@ "threadIds": { "type": "array", "items": { - "type": "integer" + "type": "integer", + "format": "int32" }, "description": "Ids of threads to be terminated." } @@ -2424,10 +2505,12 @@ "properties": { "startModule": { "type": "integer", + "format": "int32", "description": "The index of the first module to return; if omitted modules start at 0." }, "moduleCount": { "type": "integer", + "format": "uint32", "description": "The number of modules to return. If `moduleCount` is not specified or 0, all modules are returned." } } @@ -2449,6 +2532,8 @@ }, "totalModules": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The total number of modules available." } }, @@ -2528,14 +2613,19 @@ }, "frameId": { "type": "integer", + "format": "int32", "description": "Evaluate the expression in the scope of this stack frame. If not specified, the expression is evaluated in the global scope." }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The contextual line where the expression should be evaluated. In the 'hover' context, this should be set to the start of the expression being hovered." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The contextual column where the expression should be evaluated. This may be provided if `line` is also provided.\n\nIt is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "source": { @@ -2583,14 +2673,20 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "memoryReference": { @@ -2599,6 +2695,7 @@ }, "valueLocationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the returned value is declared. For example, if a function pointer is returned, the adapter may be able to look up the function's location. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -2639,6 +2736,7 @@ }, "frameId": { "type": "integer", + "format": "int32", "description": "Evaluate the expressions in the scope of this stack frame. If not specified, the expressions are evaluated in the global scope." }, "format": { @@ -2670,14 +2768,20 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "memoryReference": { @@ -2686,6 +2790,7 @@ }, "valueLocationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the new value is declared. For example, if the new value is function pointer, the adapter may be able to look up the function's location. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -2718,6 +2823,7 @@ "properties": { "frameId": { "type": "integer", + "format": "int32", "description": "The stack frame for which to retrieve the possible step-in targets." } }, @@ -2772,10 +2878,14 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line location for which the goto targets are determined." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The position within `line` for which the goto targets are determined. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, @@ -2826,6 +2936,7 @@ "properties": { "frameId": { "type": "integer", + "format": "int32", "description": "Returns completions in the scope of this stack frame. If not specified, the completions are returned for the global scope." }, "text": { @@ -2834,10 +2945,14 @@ }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The position within `text` for which to determine the completion proposals. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "A line for which to determine the completion proposals. If missing the first line of the text is assumed." } }, @@ -2888,6 +3003,7 @@ "properties": { "threadId": { "type": "integer", + "format": "int32", "description": "Thread for which exception information should be retrieved." } }, @@ -2951,10 +3067,15 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Offset (in bytes) to be applied to the reference location before reading data. Can be negative." }, "count": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Number of bytes to read at the specified location and offset." } }, @@ -2974,6 +3095,8 @@ }, "unreadableBytes": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that should be skipped before a subsequent `readMemory` request succeeds." }, "data": { @@ -3013,6 +3136,9 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Offset (in bytes) to be applied to the reference location before writing data. Can be negative." }, "allowPartial": { @@ -3036,10 +3162,14 @@ "properties": { "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Property that should be returned when `allowPartial` is true to indicate the offset of the first byte of data successfully written. Can be negative." }, "bytesWritten": { "type": "integer", + "format": "uint32", "description": "Property that should be returned when `allowPartial` is true to indicate the number of bytes starting from address that were successfully written." } } @@ -3074,14 +3204,21 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Offset (in bytes) to be applied to the reference location before disassembling. Can be negative." }, "instructionOffset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "Offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative." }, "instructionCount": { "type": "integer", + "format": "uint32", "description": "Number of instructions to disassemble starting at the specified location and offset.\nAn adapter must return exactly this number of instructions - any unavailable instructions should be replaced with an implementation-defined 'invalid instruction' value." }, "resolveSymbols": { @@ -3135,6 +3272,7 @@ "properties": { "locationReference": { "type": "integer", + "format": "int32", "description": "Location reference to resolve." } }, @@ -3154,18 +3292,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line number of the location. The client capability `linesStartAt1` determines whether it is 0- or 1-based." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Position of the location within the `line`. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no column is given, the first position in the start line is assumed." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End line of the location, present if the location refers to a range. The client capability `linesStartAt1` determines whether it is 0- or 1-based." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position of the location within `endLine`, present if the location refers to a range. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, @@ -3404,6 +3550,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "Unique (within a debug adapter implementation) identifier for the message. The purpose of these error IDs is to help extension authors that have the requirement that every user visible error message needs a corresponding error number, so that users or customer support can find information about the specific error more easily." }, "format": { @@ -3509,6 +3656,7 @@ }, "width": { "type": "integer", + "format": "uint32", "description": "Width of this column in characters (hint only)." } }, @@ -3521,6 +3669,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "Unique identifier for the thread." }, "name": { @@ -3545,6 +3694,8 @@ }, "sourceReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If the value > 0 the contents of the source must be retrieved through the `source` request (even if a path is specified).\nSince a `sourceReference` is only valid for a session, it can not be used to persist a source.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "presentationHint": { @@ -3583,6 +3734,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "An identifier for the stack frame. It must be unique across all threads.\nThis id can be used to retrieve the scopes of the frame with the `scopes` request or to restart the execution of a stack frame." }, "name": { @@ -3595,18 +3747,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line within the source of the frame. If the source attribute is missing or doesn't exist, `line` is 0 and should be ignored by the client." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If attribute `source` is missing or doesn't exist, `column` is 0 and should be ignored by the client." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the range covered by the stack frame." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "canRestart": { @@ -3651,14 +3811,20 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The variables of this scope can be retrieved by passing the value of `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of named variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks." }, "indexedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of indexed variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks." }, "expensive": { @@ -3671,18 +3837,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The start line of the range covered by this scope." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the range covered by this scope." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, @@ -3715,14 +3889,20 @@ }, "variablesReference": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "If `variablesReference` is > 0, the variable is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of named child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks." }, "indexedVariables": { "type": "integer", + "format": "int32", + "minimum": 0, "description": "The number of indexed child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks." }, "memoryReference": { @@ -3731,10 +3911,12 @@ }, "declarationLocationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the variable is declared. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." }, "valueLocationReference": { "type": "integer", + "format": "int32", "description": "A reference that allows the client to request the location where the variable's value is declared. For example, if the variable contains a function pointer, the adapter may be able to look up the function's location. This should be present only if the adapter is likely to be able to resolve the location.\n\nThis reference shares the same lifetime as the `variablesReference`. See 'Lifetime of Object References' in the Overview section for details." } }, @@ -3799,18 +3981,26 @@ "properties": { "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start line of breakpoint location." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The start position of a breakpoint location. Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of breakpoint location if the location covers a range." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end position of a breakpoint location (if the location covers a range). Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, @@ -3823,10 +4013,14 @@ "properties": { "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The source line of the breakpoint or logpoint." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position within source line of the breakpoint or logpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "condition": { @@ -3909,6 +4103,9 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "The offset from the instruction reference in bytes.\nThis can be negative." }, "condition": { @@ -3933,6 +4130,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "The identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints." }, "verified": { @@ -3949,18 +4147,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The start line of the actual range covered by the breakpoint." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the actual range covered by the breakpoint." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.\nIf no end line is given, then the end column is assumed to be in the start line." }, "instructionReference": { @@ -3969,6 +4175,9 @@ }, "offset": { "type": "integer", + "format": "int64", + "maximum": 9007199254740991, + "minimum": -9007199254740991, "description": "The offset from the instruction reference.\nThis can be negative." }, "reason": { @@ -3997,6 +4206,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "Unique identifier for a step-in target." }, "label": { @@ -4005,18 +4215,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line of the step-in target." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "Start position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the range covered by the step-in target." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "End position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, @@ -4029,6 +4247,7 @@ "properties": { "id": { "type": "integer", + "format": "int32", "description": "Unique identifier for a goto target. This is used in the `goto` request." }, "label": { @@ -4037,18 +4256,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line of the goto target." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The column of the goto target." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the range covered by the goto target." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end column of the range covered by the goto target." }, "instructionPointerReference": { @@ -4085,18 +4312,22 @@ }, "start": { "type": "integer", + "format": "uint32", "description": "Start position (within the `text` attribute of the `completions` request) where the completion text is added. The position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If the start position is omitted the text is added at the location specified by the `column` attribute of the `completions` request." }, "length": { "type": "integer", + "format": "uint32", "description": "Length determines how many characters are overwritten by the completion text and it is measured in UTF-16 code units. If missing the value 0 is assumed which results in the completion text being inserted." }, "selectionStart": { "type": "integer", + "format": "uint32", "description": "Determines the start of the new selection after the text has been inserted (or replaced). `selectionStart` is measured in UTF-16 code units and must be in the range 0 and length of the completion text. If omitted the selection starts at the end of the completion text." }, "selectionLength": { "type": "integer", + "format": "uint32", "description": "Determines the length of the new selection after the text has been inserted (or replaced) and it is measured in UTF-16 code units. The selection can not extend beyond the bounds of the completion text. If omitted the length is assumed to be 0." } }, @@ -4303,18 +4534,26 @@ }, "line": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The line within the source location that corresponds to this instruction, if any." }, "column": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The column within the line that corresponds to this instruction, if any." }, "endLine": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end line of the range that corresponds to this instruction, if any." }, "endColumn": { "type": "integer", + "format": "uint64", + "maximum": 9007199254740991, "description": "The end column of the range that corresponds to this instruction, if any." }, "presentationHint": { diff --git a/spec-generator/generator.ts b/spec-generator/generator.ts index 23b9200..70074c9 100644 --- a/spec-generator/generator.ts +++ b/spec-generator/generator.ts @@ -246,7 +246,7 @@ function enumDescriptions(c: P.Commentable, markdown: boolean) { return description; } -function comment(c: P.Commentable): string { +function comment(c: P.PropertyType): string { let description = c.description || ''; @@ -255,6 +255,30 @@ function comment(c: P.Commentable): string { c = (c).items; } + if (c.type === 'integer') { + if (!c.format) { + throw new Error('missing format on integer: ' + JSON.stringify(c)); + } + if (c.format.endsWith('64')) { + if (!c.minimum && !c.format.startsWith('u')) { + throw new Error('missing minimum on 64 bit integer: ' + JSON.stringify(c)); + } + if (!c.maximum) { + throw new Error('missing maximum on 64 bit integer: ' + JSON.stringify(c)); + } + } + } + + if (c.type === 'number' || c.type === 'integer') { + description += '\n@format ' + c.format; + if (c.minimum !== undefined) { + description += `\n@minimum ${c.minimum}`; + } + if (c.maximum !== undefined) { + description += `\n@maximum ${c.maximum}`; + } + } + if (description) { if (numIndents === 0) { @@ -436,8 +460,8 @@ function line(str?: string, newline?: boolean, indnt?: boolean): string { /// Main -const debugProtocolSchema = JSON.parse(fs.readFileSync('./debugAdapterProtocol.json').toString()); +const debugProtocolSchema = JSON.parse(fs.readFileSync(__dirname + '/../debugAdapterProtocol.json').toString()); -fs.writeFileSync(`specification.md`, MarkDown(debugProtocolSchema), { encoding: 'utf-8'}); +fs.writeFileSync(`${__dirname}/../specification.md`, MarkDown(debugProtocolSchema), { encoding: 'utf-8'}); -fs.writeFileSync(`_data/specification-toc.yml`, outline.dump(), { encoding: 'utf-8'}); +fs.writeFileSync(`${__dirname}/../_data/specification-toc.yml`, outline.dump(), { encoding: 'utf-8'}); diff --git a/spec-generator/json_schema.d.ts b/spec-generator/json_schema.d.ts index b2f6de1..02db09b 100644 --- a/spec-generator/json_schema.d.ts +++ b/spec-generator/json_schema.d.ts @@ -22,10 +22,10 @@ export module Protocol { } export type Definition2 = Definition | AllOf | StringType; - type PropertyType = PrimitiveType | StringType | ObjectType | ArrayType; + export type PropertyType = PrimitiveType | StringType | ObjectType | ArrayType | NumericType; export interface PrimitiveType extends BaseType { - type: "number" | "integer" | "boolean" + type: "boolean" } export interface Commentable { @@ -39,6 +39,13 @@ export module Protocol { _enum?: string[] } + export interface NumericType extends BaseType, Commentable { + type: "number" | "integer" + minimum?: number + maximum?: number + format?: string + } + export interface StringType extends BaseType, Commentable { type: "string" /** Possible values of a string. */ @@ -77,4 +84,4 @@ export module Protocol { /** Description of the type */ description?: string } -} \ No newline at end of file +} diff --git a/spec-generator/package-lock.json b/spec-generator/package-lock.json index 561d4b0..50b056b 100644 --- a/spec-generator/package-lock.json +++ b/spec-generator/package-lock.json @@ -9,7 +9,423 @@ "version": "0.0.1", "devDependencies": { "@types/node": "^16.0.0", - "typescript": "^4.5.5" + "tsx": "^4.21.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, "node_modules/@types/node": { @@ -18,32 +434,357 @@ "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", "dev": true }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, + "hasInstallScript": true, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4.2.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } } }, "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "dev": true, + "optional": true + }, + "@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "dev": true, + "optional": true + }, "@types/node": { "version": "16.11.22", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", "dev": true }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true + }, + "tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "requires": { + "esbuild": "~0.27.0", + "fsevents": "~2.3.3", + "get-tsconfig": "^4.7.5" + } } } } diff --git a/spec-generator/package.json b/spec-generator/package.json index 643c9aa..4e0ffb4 100644 --- a/spec-generator/package.json +++ b/spec-generator/package.json @@ -6,7 +6,6 @@ "name": "Microsoft Corporation", "email": "aweinand@microsoft.com" }, - "main": "out/generator.js", "private": true, "repository": { "type": "git", @@ -17,10 +16,9 @@ }, "devDependencies": { "@types/node": "^16.0.0", - "typescript": "^4.5.5" + "tsx": "^4.21.0" }, "scripts": { - "compile": "tsc -p .", - "watch": "tsc -w -p ." + "compile": "tsx generator.ts" } } From a9395d9085dd126df9d42522b4424f0c96ab0edd Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 29 Jan 2026 13:15:58 -0800 Subject: [PATCH 12/15] fix: clarify path format of runinterminalrequest with URIs (#582) * fix: clarify path format of runinterminalrequest with URIs Closes #540 * feedback --- debugAdapterProtocol.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index 7c96e83..414d282 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -801,7 +801,7 @@ }, "cwd": { "type": "string", - "description": "Working directory for the command. For non-empty, valid paths this typically results in execution of a change directory command." + "description": "Working directory for the command. For non-empty, valid paths this typically results in execution of a change directory command. If `pathFormat` is set to `uri` in the `InitializeRequestArguments`, this must be a file URI." }, "args": { "type": "array", From 5e94ae2906ec23617a1b4e7c4d89fd85b4dcf8e6 Mon Sep 17 00:00:00 2001 From: Be Date: Thu, 5 Feb 2026 10:07:47 -0600 Subject: [PATCH 13/15] add Kate to implementors list (#589) --- _implementors/tools.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_implementors/tools.md b/_implementors/tools.md index 550a6be..19808fa 100644 --- a/_implementors/tools.md +++ b/_implementors/tools.md @@ -25,6 +25,7 @@ The following table lists the known development tools (IDEs) that implement the | OpenSumi | OpenSumi | [OpenSumi](https://github.com/opensumi) | [opensumi/core](https://github.com/opensumi/core) | IntelliJ (LSP4IJ DAP support) | lsp4ij.debug | Red Hat | [IntelliJ LSP4IJ](https://github.com/redhat-developer/lsp4ij/blob/main/docs/dap/UserGuide.md) | | Zed | zed | Zed Industries | [zed](https://github.com/zed-industries/zed) | +| Kate | | KDE | [Kate](https://invent.kde.org/utilities/kate) | {: .table .table-bordered .table-responsive} The "client ID" is the identifier that a development tool sends to the debug adapter as part of the [**initialize**](../../specification#Requests_Initialize) request. From b584b597ab1bb43a28817a2b7582808f92d3b6e8 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 6 Feb 2026 15:34:15 -0800 Subject: [PATCH 14/15] Revert "fix: clarify expectations around source.path format (#581)" (#591) This reverts commit 75e305f06f13eee38ad73e3ef77acc77c4ccf557. There are some ungoing discussions around this clarification and it needs some more iteration. --- debugAdapterProtocol.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debugAdapterProtocol.json b/debugAdapterProtocol.json index 414d282..814e3b9 100644 --- a/debugAdapterProtocol.json +++ b/debugAdapterProtocol.json @@ -3690,7 +3690,7 @@ }, "path": { "type": "string", - "description": "The path of the source to be shown in the UI. This may be a URI if `pathFormat` is set to `uri` in the `InitializeRequestArguments`.\nIt is used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0). If `sourceReference` is specified, then `path` is a presentational property and clients should not assume the path exists on disk, nor that the path or URI format is the same as that of the client's operating system." + "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0)." }, "sourceReference": { "type": "integer", From 51d95ea4e692b34c5d06601bbd1bebc1ff3fbdd4 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 6 Feb 2026 15:43:39 -0800 Subject: [PATCH 15/15] docs: prep for 1.71.0 --- changelog.md | 8 ++++++++ index.html | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index d8593bc..198fe06 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,14 @@ sectionid: changelog #### All notable changes to the specification will be documented in this file. +* 1.71.x + * Specify sizes and ranges of DAP integers by adding `format`, `minimum`, and `maximum` attributes to integer properties throughout the protocol + * Add `debugConsoleMode` property to `StartDebuggingRequestArguments` + * Clarify behavior of `start` and `count` in `VariablesArguments`: when `start` exceeds available variables, return an empty array; when fewer than `count` variables are returned, the client should assume no further variables are available + * Clarify that `cancelArguments` and `breakpointLocationsArguments` require their respective properties + * Clarify the description of `completionTriggerCharacters` to indicate that clients may trigger completion on additional characters beyond those specified + * Clarify that `cwd` in `RunInTerminalRequest` can be a URI in addition to a file path + * 1.70.x * Clarify how `StackTraceArguments.format` applies * Clarify the default behavior of `ContinuedEvent.allThreadsContinued` diff --git a/index.html b/index.html index fb443ce..a50f917 100644 --- a/index.html +++ b/index.html @@ -86,7 +86,7 @@

Specification

- The latest version of the protocol specification is version 1.70.0. + The latest version of the protocol specification is version 1.71.0.

Change History