diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 828ec18..f01a833 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -57,12 +57,6 @@ discussing on Gitter rather than raising an issue.
* Version of Vimspector: (e.g. output of `git rev-parse HEAD` if cloned or the
name of the tarball used to install otherwise)
-* Output of `:VimspectorDebugInfo`
-
-```
-paste here
-```
-
* Output of `vim --version` or `nvim --version`
```
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index f186f5d..17f9601 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -13,7 +13,7 @@ defaults:
jobs:
PythonLint:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-16.04
container: 'puremourning/vimspector:test'
steps:
- uses: actions/checkout@v2
@@ -22,7 +22,7 @@ jobs:
- name: 'Run flake8'
run: '$HOME/.local/bin/flake8 python3/ *.py'
VimscriptLint:
- runs-on: 'ubuntu-18.04'
+ runs-on: 'ubuntu-16.04'
container: 'puremourning/vimspector:test'
steps:
- uses: actions/checkout@v2
@@ -32,7 +32,7 @@ jobs:
run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/
Linux:
- runs-on: 'ubuntu-18.04'
+ runs-on: 'ubuntu-16.04'
container:
image: 'puremourning/vimspector:test'
options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
@@ -111,16 +111,6 @@ jobs:
path: gadgets/macos/download
name: Cache gadgets
- - name: 'Install .NET Core SDK 3.1'
- uses: actions/setup-dotnet@v1.7.2
- with:
- dotnet-version: 3.1
-
- - uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: ^11
- name: "Switch to xcode 11 because of .NET debugging bug"
-
- run: vim --version
name: 'Print vim version information'
@@ -153,10 +143,10 @@ jobs:
# if: failure()
# with:
# NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
- # SSH_PASS: ${{ secrets.SSH_PASS }} # [V]imspector
+ # SSH_PASS: ${{ secrets.SSH_PASS }}
PublishRelease:
- runs-on: 'ubuntu-18.04'
+ runs-on: 'ubuntu-16.04'
needs:
- Linux
- MacOS
diff --git a/.github/workflows/lock_old_issues.yaml b/.github/workflows/lock_old_issues.yaml
deleted file mode 100644
index 25d65e0..0000000
--- a/.github/workflows/lock_old_issues.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: "Lock Old Issues"
-
-on:
- schedule:
- - cron: '0 0 * * *'
- workflow_dispatch:
-
-jobs:
- lock:
- runs-on: ubuntu-latest
- steps:
- - uses: dessant/lock-threads@v2
- with:
- github-token: ${{ github.token }}
- issue-lock-inactive-days: '60'
- # issue-exclude-created-before: ''
- # issue-exclude-labels: ''
- # issue-lock-labels: ''
- # issue-lock-comment: ''
- # issue-lock-reason: 'resolved'
- # pr-lock-inactive-days: '365'
- # pr-exclude-created-before: ''
- # pr-exclude-labels: ''
- # pr-lock-labels: ''
- # pr-lock-comment: ''
- # pr-lock-reason: 'resolved'
- process-only: 'issues'
diff --git a/.gitignore b/.gitignore
index 05dc8cd..77f22a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,4 +20,3 @@ support/test/csharp/*.exe*
configurations/
venv/
test-base/
-tags
diff --git a/.mergify.yml b/.mergify.yml
index 0f02002..09d3d83 100644
--- a/.mergify.yml
+++ b/.mergify.yml
@@ -9,8 +9,9 @@ pull_request_rules:
# CI https://doc.mergify.io/conditions.html#github-actions
- status-success=PythonLint
- status-success=VimscriptLint
- - status-success=Linux
- status-success=MacOS
+
+
actions: &merge-actions
merge:
method: merge
diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py
index 6f42505..f2e32ae 100644
--- a/.ycm_extra_conf.py
+++ b/.ycm_extra_conf.py
@@ -42,17 +42,7 @@ def Settings( **kwargs ):
return {
'sys_path': [
p.join( PATH_TO_THIS_DIR, 'python3' )
- ],
- 'ls': {
- 'python': {
- 'analysis': {
- 'extraPaths': [
- p.join( PATH_TO_THIS_DIR, 'python3' ),
- ],
- 'useLibraryCodeForTypes': True
- }
- }
- }
+ ]
}
if IgnoreExtraConf:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index adec034..1866974 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -46,23 +46,6 @@ The GitHub issue tracker is for *bug reports* and *features requests* for the
Vimspector project, and on-topic comments and follow-ups to them. It is not for
general discussion, general support or for any other purpose.
-Please **search the issue tracker for similar issues** before creating a new
-one. There's no point in duplication; if an existing open issue addresses your
-problem, please comment there instead of creating a duplicate. However, if the
-issue you found is **closed as resolved** (e.g. with a PR or the original user's
-problem was resolved), raise a **new issue**, because you've found a new
-problem. Reference the original issue if you think that's useful information.
-
-Closed issues which have been inactive for 60 days will be locked, this helps to
-keep discussions focussed. If you believe you are still experiencing an issue
-which has been closed, please raise a new issue, completing the issue template.
-
-If you do find a similar _open_ issue, **don't just post 'me too' or similar**
-responses. This almost never helps resolve the issue, and just causes noise for
-the maintainers. Only post if it will aid the maintainers in solving the issue;
-if there are existing diagnostics requested in the thread, perform
-them and post the results.
-
Please do not be offended if your Issue or comment is closed or hidden, for any
of the following reasons:
@@ -70,7 +53,6 @@ of the following reasons:
* The issue or comment is off-topic
* The issue does not represent a Vimspector bug or feature request
* The issue cannot be reasonably reproduced using the minimal vimrc
-* The issue is a duplicate of an existing issue
* etc.
Issue titles are important. It's not usually helpful to write a title like
diff --git a/README.md b/README.md
index d198292..2152a9c 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
For a tutorial and usage overview, take a look at the
[Vimspector website][website].
-For detailed explanation of the `.vimspector.json` format, see the
+For detailed explanatin of the `.vimspector.json` format, see the
[reference guide][vimspector-ref].
 [](https://gitter.im/vimspector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
@@ -59,16 +59,15 @@ For detailed explanation of the `.vimspector.json` format, see the
* [Console autocompletion](#console-autocompletion)
* [Log View](#log-view)
* [Closing debugger](#closing-debugger)
- * [Terminate debuggee](#terminate-debuggee)
* [Debug profile configuration](#debug-profile-configuration)
- * [C, C++, Rust, etc.](#c-c-rust-etc)
- * [Data visualization / pretty printing](#data-visualization--pretty-printing)
- * [C++ Remote debugging](#c-remote-debugging)
- * [C++ Remote launch and attach](#c-remote-launch-and-attach)
+ * [C, C , Rust, etc.](#c-c-rust-etc)
+ * [C Remote debugging](#c-remote-debugging)
+ * [C Remote launch and attach](#c-remote-launch-and-attach)
* [Rust](#rust)
* [Python](#python)
* [Python Remote Debugging](#python-remote-debugging)
* [Python Remote launch and attach](#python-remote-launch-and-attach)
+ * [Legacy: vscode-python](#legacy-vscode-python)
* [TCL](#tcl)
* [C♯](#c)
* [Go](#go)
@@ -77,7 +76,6 @@ For detailed explanation of the `.vimspector.json` format, see the
* [Debug cli application](#debug-cli-application)
* [JavaScript, TypeScript, etc.](#javascript-typescript-etc)
* [Java](#java)
- * [Hot code replace](#hot-code-replace)
* [Usage with YouCompleteMe](#usage-with-youcompleteme)
* [Other LSP clients](#other-lsp-clients)
* [Lua](#lua)
@@ -93,14 +91,14 @@ For detailed explanation of the `.vimspector.json` format, see the
* [Example](#example)
* [FAQ](#faq)
-
+
# Features and Usage
The plugin is a capable Vim graphical debugger for multiple languages.
-It's mostly tested for C++, Python and TCL, but in theory supports any
+It's mostly tested for c++, python and TCL, but in theory supports any
language that Visual Studio Code supports (but see caveats).
The [Vimspector website][website] has an overview of the UI, along with basic
@@ -145,24 +143,23 @@ runtime dependencies). They are categorised by their level of support:
* `Supported` : Fully supported, frequently used and manually tested
* `Experimental`: Working, but not frequently used and rarely tested
* `Legacy`: No longer supported, please migrate your config
-* `Retired`: No longer included or supported.
-| Language | Status | Switch (for `install_gadget.py`) | Adapter (for `:VimspectorInstall`) | Dependencies |
-|--------------------|-----------|----------------------------------|------------------------------------|--------------------------------------------|
-| C, C++, Rust etc. | Tested | `--all` or `--enable-c` (or cpp) | vscode-cpptools | mono-core |
-| Rust, C, C++, etc. | Supported | `--force-enable-rust` | CodeLLDB | Python 3 |
-| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
-| Go | Tested | `--enable-go` | vscode-go | Node, Go, [Delve][] |
-| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
-| Bourne Shell | Supported | `--all` or `--enable-bash` | vscode-bash-debug | Bash v?? |
-| Lua | Supported | `--all` or `--enable-lua` | local-lua-debugger-vscode | Node >=12.13.0, Npm, Lua interpreter |
-| Node.js | Supported | `--force-enable-node` | vscode-node-debug2 | 6 < Node < 12, Npm |
-| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
-| Java | Supported | `--force-enable-java ` | vscode-java-debug | Compatible LSP plugin (see [later](#java)) |
-| C# (dotnet core) | Tested | `--force-enable-csharp` | netcoredbg | DotNet core |
-| F#, VB, etc. | Supported | `--force-enable-[fsharp,vbnet]` | `, `--force-enable-vbnet` | netcoredbg | DotNet core |
-| C# (mono) | _Retired_ | N/A | N/A | N/A |
-| Python.legacy | _Retired_ | N/A | N/A | N/A |
+| Language | Status | Switch (for `install_gadget.py`) | Adapter (for `:VimspectorInstall`) | Dependencies |
+|--------------------|--------------|------------------------------------|------------------------------------|--------------------------------------------|
+| C, C++, Rust etc. | Tested | `--all` or `--enable-c` (or cpp) | vscode-cpptools | mono-core |
+| Rust, C, C++, etc. | Supported | `--force-enable-rust` | CodeLLDB | Python 3 |
+| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
+| Go | Tested | `--enable-go` | vscode-go | Go, [Delve][] |
+| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
+| Bourne Shell | Supported | `--all` or `--enable-bash` | vscode-bash-debug | Bash v?? |
+| Lua | Supported | `--all` or `--enable-lua` | local-lua-debugger-vscode | Node >=12.13.0, Npm, Lua interpreter |
+| Node.js | Supported | `--force-enable-node` | vscode-node-debug2 | 6 < Node < 12, Npm |
+| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
+| Java | Supported | `--force-enable-java ` | vscode-java-debug | Compatible LSP plugin (see [later](#java)) |
+| C# (dotnet core) | Experimental | `--force-enable-csharp` | netcoredbg | DotNet core |
+| C# (mono) | Experimental | `--force-enable-csharp` | vscode-mono-debug | Mono |
+| F#, VB, etc. | Experimental | `--force-enable-fsharp` (or vbnet) | netcoredbg | DotNet core |
+| Python.legacy | Legacy | `--force-enable-python.legacy` | vscode-python | Node 10, Python 2.7 or Python 3 |
## Other languages
@@ -291,7 +288,7 @@ If you just want to try out vimspector without changing your vim config, there
are example projects for a number of languages in `support/test`, including:
* Python (`support/test/python/simple_python`)
-* Go (`support/test/go/hello_world` and `support/test/go/name-starts-with-vowel`)
+* Go (`support/test/go/hello_world`)
* Nodejs (`support/test/node/simple`)
* Chrome (`support/test/chrome/`)
* etc.
@@ -527,6 +524,13 @@ Example:
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
],
"name": "cppdbg"
+ },
+ "vscode-python": {
+ "command": [
+ "node",
+ "${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js"
+ ],
+ "name": "vscode-python"
}
}
}
@@ -1008,8 +1012,6 @@ be changed manually to "switch to" that thread.
to set the "focussed" thread to the currently selected one. If the selected
line is a stack frame, set the focussed thread to the thread of that frame and
jump to that frame in the code window.
-* The current frame when a breakpoint is hit or if manuall jumping is also
- highlighted.

@@ -1071,8 +1073,6 @@ information when something goes wrong that's not a Vim traceback.
If you just want to see the Vimspector log file, use `:VimspectorToggleLog`,
which will tail it in a little window (doesn't work on Windows).
-You can see some debugging info with `:VimspectorDebugInfo`
-
## Closing debugger
To close the debugger, use:
@@ -1177,38 +1177,6 @@ licensing.
}
```
-### Data visualization / pretty printing
-
-Depending on the backend you need to enable pretty printing of complex types manually.
-
-* LLDB: Pretty printing is enabled by default
-
-* GDB: To enable gdb pretty printers, consider the snippet below.
- It is not enough to have `set print pretty on` in your .gdbinit!
-
-```
-{
- "configurations": {
- "Launch": {
- "adapter": "vscode-cpptools",
- "configuration": {
- "request": "launch",
- "program": "",
- ...
- "MIMode": "gdb"
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- }
- ],
- }
- }
- }
-}
-```
-
### C++ Remote debugging
The cpptools documentation describes how to attach cpptools to gdbserver using
@@ -1294,6 +1262,10 @@ Rust is supported with any gdb/lldb-based debugger. So it works fine with
headers/libs to build a C python extension for performance.
* Full options: https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
+
+**Migrating from `vscode-python`**: change `"adapter": "vscode-python"` to
+`"adapter": "debugpy"`.
+
```json
{
"configurations": {
@@ -1360,6 +1332,34 @@ debugpy](https://github.com/microsoft/debugpy/wiki/Debugging-over-SSH).
If you're feeling fancy, checkout the [reference guide][remote-debugging] for
an example of getting Vimspector to remotely launch and attach.
+### Legacy: vscode-python
+
+* No longer installed by default - please pass `--force-enable-python.legacy` if
+ you just want to continue using your working setup.
+* [vscode-python](https://github.com/Microsoft/vscode-python)
+* NOTE: You must be running `node` 10. See [this issue](https://github.com/puremourning/vimspector/issues/105)
+
+```json
+{
+ "configurations": {
+ ": Launch": {
+ "adapter": "vscode-python",
+ "configuration": {
+ "name": ": Launch",
+ "type": "python",
+ "request": "launch",
+ "cwd": "",
+ "stopOnEntry": true,
+ "console": "externalTerminal",
+ "debugOptions": [],
+ "program": ""
+ }
+ }
+ ...
+ }
+}
+```
+
## TCL
* TCL (TclProDebug)
@@ -1383,8 +1383,35 @@ netcoredbg`
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
"args": [],
"stopAtEntry": true,
+ "cwd": "${workspaceRoot}"
+ }
+ }
+ }
+}
+```
+
+* C# - mono
+
+Install with `install_gadget.py --force-enable-csharp` or `:VimspectorInstall
+vscode-mono-debug`.
+
+***Known not to work.***
+
+```json
+{
+ "configurations": {
+ "launch - mono": {
+ "adapter": "vscode-mono-debug",
+ "configuration": {
+ "request": "launch",
+ "program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
+ "args": [],
"cwd": "${workspaceRoot}",
- "env": {}
+ "runtimeExecutable": "mono",
+ "runtimeArgs": [],
+ "env": [],
+ "externalConsole": false,
+ "console": "integratedTerminal"
}
}
}
@@ -1401,8 +1428,6 @@ Requires:
* [Delve][delve-install] installed, e.g. `go get -u github.com/go-delve/delve/cmd/dlv`
* Delve to be in your PATH, or specify the `dlvToolPath` launch option
-NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md) rather than the "built-in" DAP support in Delve. You can track https://github.com/puremourning/vimspector/issues/186 for that.
-
```json
{
"configurations": {
@@ -1420,7 +1445,7 @@ NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/
```
See the vscode-go docs for
-[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#troubleshooting)
+[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#troubleshooting)
## PHP
@@ -1566,20 +1591,6 @@ editor plugin to use Java. I recommend [YouCompleteMe][], which has full support
for jdt.ls, and most importantly a trivial way to load the debug adapter and to
use it with Vimspector.
-### Hot code replace
-
-When using the [java debug server][java-debug-server], Vimspector supports the
-hot code replace custom feature. By default, when the underlying class files
-change, vimspector asks the user if they wish to reload these classes at
-runtime.
-
-This behaviour can be customised:
-
-* `let g:ycm_java_hotcodereplace_mode = 'ask'` - the default, ask the user for
- each reload.
-* `let g:ycm_java_hotcodereplace_mode = 'always'` - don't ask, always reload
-* `let g:ycm_java_hotcodereplace_mode = 'never'` - don't ask, never reload
-
### Usage with YouCompleteMe
* Set up [YCM for java][YcmJava].
@@ -1739,26 +1750,22 @@ Vimsector uses them, they will not be replaced. So to customise the signs,
define them in your `vimrc`.
-| Sign | Description | Priority |
-|---------------------------|-----------------------------------------|----------|
-| `vimspectorBP` | Line breakpoint | 9 |
-| `vimspectorBPCond` | Conditional line breakpoint | 9 |
-| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
-| `vimspectorPC` | Program counter (i.e. current line) | 200 |
-| `vimspectorPCBP` | Program counter and breakpoint | 200 |
-| `vimspectorCurrentThread` | Focussed thread in stack trace view | 200 |
-| `vimspectorCurrentFrame` | Current stack frame in stack trace view | 200 |
+| Sign | Description | Priority |
+|------------------------|-------------------------------------|----------|
+| `vimspectorBP` | Line breakpoint | 9 |
+| `vimspectorBPCond` | Conditional line breakpoint | 9 |
+| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
+| `vimspectorPC` | Program counter (i.e. current line) | 200 |
+| `vimspectorPCBP` | Program counter and breakpoint | 200 |
The default symbols are the equivalent of something like the following:
```viml
-sign define vimspectorBP text=\ ● texthl=WarningMsg
-sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
-sign define vimspectorBPDisabled text=\ ● texthl=LineNr
-sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
-sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
-sign define vimspectorCurrentThread text=▶ texthl=MatchParen linehl=CursorLine
-sign define vimspectorCurrentFrame text=▶ texthl=Special linehl=CursorLine
+sign define vimspectorBP text=\ ● texthl=WarningMsg
+sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
+sign define vimspectorBPDisabled text=\ ● texthl=LineNr
+sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
+sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
```
If the signs don't display properly, your font probably doesn't contain these
@@ -1766,13 +1773,11 @@ glyphs. You can easily change them by defining the sign in your vimrc. For
example, you could put this in your `vimrc` to use some simple ASCII symbols:
```viml
-sign define vimspectorBP text=o texthl=WarningMsg
-sign define vimspectorBPCond text=o? texthl=WarningMsg
-sign define vimspectorBPDisabled text=o! texthl=LineNr
-sign define vimspectorPC text=\ > texthl=MatchParen
-sign define vimspectorPCBP text=o> texthl=MatchParen
-sign define vimspectorCurrentThread text=> texthl=MatchParen
-sign define vimspectorCurrentFrame text=> texthl=Special
+sign define vimspectorBP text=o texthl=WarningMsg
+sign define vimspectorBPCond text=o? texthl=WarningMsg
+sign define vimspectorBPDisabled text=o! texthl=LineNr
+sign define vimspectorPC text=\ > texthl=MatchParen
+sign define vimspectorPCBP text=o> texthl=MatchParen
```
## Sign priority
@@ -2049,10 +2054,6 @@ hi link jsonComment Comment
Debug adapters (for some reason) send telemetry data to clients. Vimspector simply
displays this information in the output window. It *does not* and *will not ever*
collect, use, forward or otherwise share any data with any third parties.
-10. Do I _have_ to put a `.vimspector.json` in the root of every project? No, you
- can put all of your adapter and debug configs in a [single directory](https://puremourning.github.io/vimspector/configuration.html#debug-configurations) if you want to, but note
- the caveat that `${workspaceRoot}` won't be calculated correctly in that case.
- The vimsepctor author uses this [a lot](https://github.com/puremourning/.vim-mac/tree/master/vimspector-conf).
[ycmd]: https://github.com/Valloric/ycmd
diff --git a/autoload/vimspector.vim b/autoload/vimspector.vim
index 78c7c1b..a547e5c 100644
--- a/autoload/vimspector.vim
+++ b/autoload/vimspector.vim
@@ -13,9 +13,6 @@
" See the License for the specific language governing permissions and
" limitations under the License.
-if !has( 'python3' )
- finish
-endif
" Boilerplate {{{
let s:save_cpo = &cpoptions
@@ -44,11 +41,11 @@ function! s:Enabled() abort
return s:enabled
endfunction
-function! vimspector#Launch( ... ) abort
+function! vimspector#Launch() abort
if !s:Enabled()
return
endif
- py3 _vimspector_session.Start( *vim.eval( 'a:000' ) )
+ py3 _vimspector_session.Start()
endfunction
function! vimspector#LaunchWithSettings( settings ) abort
@@ -557,14 +554,6 @@ function! vimspector#ShowEvalBalloon( is_visual ) abort
\ . '", 0 )' )
endfunction
-function! vimspector#PrintDebugInfo() abort
- if !s:Enabled()
- return
- endif
-
- py3 _vimspector_session.PrintDebugInfo()
-endfunction
-
" Boilerplate {{{
let &cpoptions=s:save_cpo
diff --git a/autoload/vimspector/internal/balloon.vim b/autoload/vimspector/internal/balloon.vim
index b607e51..32d17ab 100644
--- a/autoload/vimspector/internal/balloon.vim
+++ b/autoload/vimspector/internal/balloon.vim
@@ -69,9 +69,14 @@ function! vimspector#internal#balloon#CreateTooltip( is_hover, ... ) abort
\ 'resize': 1,
\ 'close': 'button',
\ 'callback': 'vimspector#internal#balloon#CloseCallback',
+ \ 'mapping': 0
\ }
- let config = vimspector#internal#popup#SetBorderChars( config )
+ " When ambiwidth is single, use prettier characters for the border. This
+ " would look silly when ambiwidth is double.
+ if &ambiwidth ==# 'single' && &encoding ==? 'utf-8'
+ let config[ 'borderchars' ] = [ '─', '│', '─', '│', '╭', '╮', '┛', '╰' ]
+ endif
if a:is_hover
let config[ 'filter' ] = 'vimspector#internal#balloon#MouseFilter'
@@ -81,7 +86,6 @@ function! vimspector#internal#balloon#CreateTooltip( is_hover, ... ) abort
let config[ 'filter' ] = 'vimspector#internal#balloon#CursorFilter'
let config[ 'moved' ] = 'any'
let config[ 'cursorline' ] = 1
- let config[ 'mapping' ] = 0
let s:popup_win_id = popup_atcursor( body, config )
endif
diff --git a/autoload/vimspector/internal/neojob.vim b/autoload/vimspector/internal/neojob.vim
index a398afe..0cefc63 100644
--- a/autoload/vimspector/internal/neojob.vim
+++ b/autoload/vimspector/internal/neojob.vim
@@ -159,16 +159,15 @@ function! s:_OnCommandEvent( category, id, data, event ) abort
call setbufvar( buffer, '&modified', 0 )
endtry
- " if the buffer is visible, scroll it, but don't allow autocommands to fire,
- " as this may close the current window!
+ " if the buffer is visible, scroll it
let w = bufwinnr( buffer )
if w > 0
let cw = winnr()
try
- noautocmd execute w . 'wincmd w'
- noautocmd normal! Gz-
+ execute w . 'wincmd w'
+ normal! Gz-
finally
- noautocmd execute cw . 'wincmd w'
+ execute cw . 'wincmd w'
endtry
endif
elseif a:event ==# 'exit'
diff --git a/autoload/vimspector/internal/neopopup.vim b/autoload/vimspector/internal/neopopup.vim
index a734ca3..fe5fe05 100644
--- a/autoload/vimspector/internal/neopopup.vim
+++ b/autoload/vimspector/internal/neopopup.vim
@@ -80,56 +80,6 @@ function! vimspector#internal#neopopup#HideSplash( id ) abort
unlet s:db[ a:id ]
endfunction
-function! vimspector#internal#neopopup#Confirm( confirm_id,
- \ text,
- \ options,
- \ default_value,
- \ keys ) abort
-
- " Neovim doesn't have an equivalent of popup_dialog, and it's way too much
- " effort to write one, so we just use confirm()...
- " Annoyingly we can't use confirm() here because for some reason it doesn't
- " render properly in a channel callback. So we use input() and mimic dialog
- " behaviour.
- let prompt = a:text
- for opt in a:options
- let prompt .= ' ' . opt
- endfor
- let prompt .= ': '
-
- try
- let result = input( prompt, a:keys[ a:default_value - 1 ] )
- catch /.*/
- let result = -1
- endtry
-
- " Map the results to what the vim popup stuff would return (s:ConfirmCallback
- " in popup.vim), i.e.:
- " - 1-based index of selected item, or
- " - -1 or 0 for cancellation
- if result == ''
- " User pressed ESC/ctrl-c
- let result = -1
- else
- let index = 1
- for k in a:keys
- if k ==? result
- let result = index
- break
- endif
- let index += 1
- endfor
-
- if index > len( a:keys )
- let result = -1
- endif
- endif
-
- py3 __import__( 'vimspector', fromlist = [ 'utils' ] ).utils.ConfirmCallback(
- \ int( vim.eval( 'a:confirm_id' ) ),
- \ int( vim.eval( 'result' ) ) )
-endfunction
-
" Boilerplate {{{
let &cpoptions=s:save_cpo
unlet s:save_cpo
diff --git a/autoload/vimspector/internal/popup.vim b/autoload/vimspector/internal/popup.vim
index 083fdf5..fc8820b 100644
--- a/autoload/vimspector/internal/popup.vim
+++ b/autoload/vimspector/internal/popup.vim
@@ -12,7 +12,6 @@
" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
" See the License for the specific language governing permissions and
" limitations under the License.
-scriptencoding utf-8
" Boilerplate {{{
@@ -33,113 +32,6 @@ function! vimspector#internal#popup#HideSplash( id ) abort
call popup_hide( a:id )
endfunction
-let s:current_selection = 0
-let s:selections = []
-let s:text = []
-
-function! s:UpdatePopup( id ) abort
- let buf = copy( s:text )
- call extend( buf, s:DrawButtons() )
- call popup_settext( a:id, buf )
-endfunction
-
-function! s:ConfirmKeyFilter( keys, id, key ) abort
- if a:key ==# "\"
- call popup_close( a:id, s:current_selection + 1 )
- return 1
- elseif index( [ "\", "\" ], a:key ) >= 0
- let s:current_selection = ( s:current_selection + 1 ) % len( s:selections )
- call s:UpdatePopup( a:id )
- return 1
- elseif index( [ "\", "\" ], a:key ) >= 0
- let s:current_selection = s:current_selection == 0
- \ ? len( s:selections ) - 1: s:current_selection - 1
- call s:UpdatePopup( a:id )
- return 1
- elseif a:key ==# "\" || a:key ==# "\"
- call popup_close( a:id, -1 )
- return 1
- endif
-
- let index = 1
- for key in a:keys
- if a:key ==? key
- call popup_close( a:id, index )
- return 1
- endif
- let index += 1
- endfor
-endfunction
-
-function! s:ConfirmCallback( confirm_id, id, result ) abort
- py3 __import__( 'vimspector', fromlist = [ 'utils' ] ).utils.ConfirmCallback(
- \ int( vim.eval( 'a:confirm_id' ) ),
- \ int( vim.eval( 'a:result' ) ) )
-endfunction
-
-function! s:SelectionPosition( idx ) abort
- return a:idx == 0 ? 0 : len( join( s:selections[ : a:idx - 1 ], ' ' ) ) + 1
-endfunction
-
-function! s:DrawButtons() abort
- return [ {
- \ 'text': join( s:selections, ' ' ),
- \ 'props': [
- \ {
- \ 'col': s:SelectionPosition( s:current_selection ) + 1,
- \ 'length': len( s:selections[ s:current_selection ] ),
- \ 'type': 'VimspectorSelectedItem'
- \ },
- \ ]
- \ } ]
-endfunction
-
-function! vimspector#internal#popup#Confirm(
- \ confirm_id,
- \ text,
- \ options,
- \ default_value,
- \ keys ) abort
-
- silent! call prop_type_add( 'VimspectorSelectedItem', {
- \ 'highlight': 'PMenuSel'
- \ } )
-
- let lines = split( a:text, "\n", v:true )
- let buf = []
- for line in lines
- call add( buf, { 'text': line, 'props': [] } )
- endfor
-
- call add( buf, { 'text': '', 'props': [] } )
-
- let s:selections = a:options
- let s:current_selection = ( a:default_value - 1 )
-
- let s:text = copy( buf )
- call extend( buf, s:DrawButtons() )
-
- let config = {
- \ 'callback': function( 's:ConfirmCallback', [ a:confirm_id ] ),
- \ 'filter': function( 's:ConfirmKeyFilter', [ a:keys ] ),
- \ 'mapping': v:false,
- \ }
- let config = vimspector#internal#popup#SetBorderChars( config )
-
- return popup_dialog( buf, config )
-endfunction
-
-function! vimspector#internal#popup#SetBorderChars( config ) abort
- " When ambiwidth is single, use prettier characters for the border. This
- " would look silly when ambiwidth is double.
- if &ambiwidth ==# 'single' && &encoding ==? 'utf-8'
- let a:config[ 'borderchars' ] = [ '─', '│', '─', '│', '╭', '╮', '┛', '╰' ]
- endif
-
- return a:config
-endfunction
-
-
" Boilerplate {{{
let &cpoptions=s:save_cpo
unlet s:save_cpo
diff --git a/doc/vimspector-ref.txt b/doc/vimspector-ref.txt
deleted file mode 100644
index 367d409..0000000
--- a/doc/vimspector-ref.txt
+++ /dev/null
@@ -1,1085 +0,0 @@
-*vimspector-ref*
-
-===============================================================================
-Contents ~
-
- 1. Introduction |vimspector-ref-introduction|
- 2. title: Configuration |vimspector-ref-title-configuration|
- 3. Concepts |vimspector-ref-concepts|
- 1. Debug adapter configuration |vimspector-ref-debug-adapter-configuration|
- 2. Debug profile configuration |vimspector-ref-debug-profile-configuration|
- 3. Replacements and variables |vimspector-ref-replacements-variables|
- 1. The splat operator |vimspector-ref-splat-operator|
- 2. Default values |vimspector-ref-default-values|
- 3. Coercing Types |vimspector-ref-coercing-types|
- 4. Configuration Format |vimspector-ref-configuration-format|
- 5. Files and locations |vimspector-ref-files-locations|
- 6. Adapter configurations |vimspector-ref-adapter-configurations|
- 7. Debug configurations |vimspector-ref-debug-configurations|
- 1. Configuration selection |vimspector-ref-configuration-selection|
- 1. Specifying a default configuration |vimspector-ref-specifying-default-configuration|
- 2. Preventing automatic selection |vimspector-ref-preventing-automatic-selection|
- 2. Exception Breakpoints |vimspector-ref-exception-breakpoints|
- 8. Predefined Variables |vimspector-ref-predefined-variables|
- 9. Remote Debugging Support |vimspector-ref-remote-debugging-support|
- 1. Python (debugpy) Example |vimspector-ref-python-example|
- 2. C-family (gdbserver) Example |vimspector-ref-c-family-example|
- 3. Docker Example |vimspector-ref-docker-example|
- 10. Appendix: Configuration file format |vimspector-ref-appendix-configuration-file-format|
- 11. Appendix: Editor configuration |vimspector-ref-appendix-editor-configuration|
- 12. References |vimspector-ref-references|
-
-===============================================================================
- *vimspector-ref-introduction*
-Introduction ~
-
-===============================================================================
- *vimspector-ref-title-configuration*
-title: Configuration ~
-
-This document defines the supported format for project and adapter
-configuration for Vimspector.
-
-- Concepts
-
- - Debug adapter configuration
- - Debug profile configuration
- - Replacements and variables
- - The splat operator
- - Default values
- - Coercing Types
-
-- Configuration Format
-- Files and locations
-- Adapter configurations
-- Debug configurations
-
- - Configuration selection
-
- - Specifying a default configuration
- - Preventing automatic selection
-
- - Exception Breakpoints
-
-- Predefined Variables
-- Remote Debugging Support
-
- - Python (debugpy) Example
- - C-family (gdbserver) Example
- - Docker Example
-
-- Appendix: Configuration file format
-- Appendix: Editor configuration
-
-===============================================================================
- *vimspector-ref-concepts*
-Concepts ~
-
-As Vimspector supports debugging arbitrary projects, you need to tell it a few
-details about what you want to debug, and how to go about doing that.
-
-In order to debug things, Vimspector requires a Debug Adapter which bridges
-between Vimspector and the actual debugger tool. Vimspector can be used with
-any debug adapter that implements the Debug Adapter Protocol [1].
-
-For each debugging session, you provide a _debug configuration_ which includes
-things like:
-
-- The debug adapter to use (and possibly how to launch and configure it).
-- How to connect to the remote host, if remote debugging.
-- How to launch or attach to your process.
-
-Along with optional additional configuration for things like:
-
-- Exception breakpoints
-
--------------------------------------------------------------------------------
- *vimspector-ref-debug-adapter-configuration*
-Debug adapter configuration ~
-
-The adapter to use for a particular debug session can be specified inline
-within the _debug configuration_, but more usually the debug adapter is defined
-separately and just referenced from the _debug configuration_.
-
-The adapter configuration includes things like:
-
-- How to launch or connect to the debug adapter
-- How to configure it for PID attachment
-- How to set up remote debugging, such as how to launch the process remotely
- (for example, under 'gdbserver', 'ptvsd', etc.)
-
--------------------------------------------------------------------------------
- *vimspector-ref-debug-profile-configuration*
-Debug profile configuration ~
-
-Projects can have many different debug profiles. For example you might have all
-of the following, for a given source tree:
-
-- Remotely launch c++ the process, and break on 'main'
-- Locally Python test and break exception
-- Remotely attach to a c++ process
-- Locally launch a bash script
-- Attach to a JVM listening on a port
-
-Each of these represents a different use case and a different _debug
-configuration_. As mentioned above, a _debug configuration_ is essentially:
-
-- The adapter to use
-
-- The type of session (launch or attach), and whether or not to do it
- remotely
-
-- The configuration to pass to the adapter in order to launch or attach to
- the process.
-
-The bulk of the configuration is the last of these, which comprises
-adapter-specific options, as the Debug Adapter Protocol does not specify any
-standard for launch or attach configuration.
-
--------------------------------------------------------------------------------
- *vimspector-ref-replacements-variables*
-Replacements and variables ~
-
-Vimspector _debug configuration_ is intended to be as general as possible, and
-to be committed to source control so that debugging your applications becomes a
-simple, quick and pain-free habit (e.g. answering questions like "what happens
-if..." with "just hit F5 and step through!").
-
-Therefore it's important to abstract certain details, like runtime and
-build-time paths, and to parameterise the _debug configuration_. Vimspector
-provides a simple mechanism to do this with '${replacement}' style
-replacements.
-
-The values available within the '${...}' are defined below, but in summary the
-following are supported:
-
-- Environment variables, such as '${PATH}'
-- Predefined variables, such as '${workspaceRoot}', '${file}' etc.
-- Configuration-defined variables, either provided by the adapter
- configuration or debug configuration, or from running a simple shell
- command.
-- Anything else you like - the user will be asked to provide a value.
-
-If the latter 2 are confusing, for now, suffice to say that they are how
-Vimspector allows parameterisation of debug sessions. The [Vimspector
-website][website-getting-started] has a good example of where this sort of
-thing is useful: accepting the name of a test to run.
-
-But for now, consider the following example snippet:
->
- {
- "configurations": {
- "example-debug-configuration": {
- // This is a single-line comment explaining the purpose
- "adapter": "example-adapter-name",
- "variables": {
- "SecretToken": { // Variables should start with upper-case letters
- "shell" : [ "cat", "${HOME}/.secret_token" ]
- }
- },
- "configuration": {
- "request": "launch" /* or it could be "attach" */,
- "program": [
- "${fileBasenameNoExtension}",
- "-c", "configuration_file.cfg",
- "-u", "${USER}",
- "--test-identifier", "${TestIdentifier}",
- "--secret-token", "${SecretToken}"
- ]
- },
- "breakpoints": {
- "exception": {
- "caught": "",
- "uncaught": "Y"
- }
- }
- }
- }
- }
-<
-In this (fictitious) example the 'program' launch configuration item contains
-the following variable substitutions:
-
-- '${fileBasenameNoExtension}' - this is a Predefined Variable, set by
- Vimspector to the base name of the file that's opened in Vim, with its
- extension removed ('/path/to/xyz.cc' -> 'xyz').
-
-- '${USER}' - this refers to the Environment Variable 'USER'.
-
-- '${TestIdentifier}' - this variable is not defined, so the user is asked to
- provide a value interactively when starting debugging. Vimspector remembers
- what they said and provides it as the default should they debug again.
-
-- '${SecretToken}' - this variable is provided by the configuration's
- 'variables' block. Its value is taken from the 'strip''d result of running
- the shell command. Note these variables can be supplied by both the debug
- and adapter configurations and can be either static strings or shell
- commands.
-
--------------------------------------------------------------------------------
- *vimspector-ref-splat-operator*
-The splat operator ~
-
-Often we want to create a single '.vimspector.json' entry which encompasses
-many use cases, as it is tedious to write every use case/start up option in
-JSON. This is why we have the replacement variables after all.
-
-Frequently debug adapters request command arguments as a JSON array, for
-example:
->
- "args": [ "one", "two three", "four" ],
-<
-To help with this sort of case, Vimspector supports a 'splat' operator for
-replacement variables operating within lists. The syntax is: '"*${var}', which
-means roughly "splice the contents of '${var}' into the list at this position".
-'${var}' is parsed like a shell command (using python's 'shlex' parser) and
-each word is added as a list item.
-
-For example:
->
- "args": [ "*${CommandLineArgs}" ]
-<
-This would:
-
-- Ask the user to provide the variable 'CommandLineArgs'. Let's say they
- entered 'one "two three" four'
-- Split 'CommandLineArgs' like shell arguments: 'one', 'two three' and 'four'
-- Set 'args' in the settings dict to: '[ "one", "two three", "four" ]'
-
-You can also combine with static values:
->
- "args": [ "First", "*${CommandLineArgs}", "Last" ]
-<
-This would yield the intuitive result: '[ "First", "one", "two three", "four",
-"Last" ]'
-
--------------------------------------------------------------------------------
- *vimspector-ref-default-values*
-Default values ~
-
-You can specify replacements with default values. In this case if the user has
-not specified a value, they are prompted but with the default value
-pre-populated, allowing them to just press return to accept the default.
-
-The syntax is '${variableName:default value}'. The default value can contain
-any character, but to include a '}' you must escape it with a backslash. To
-include a backslash in the JSON you must write '\\', as in:
->
- { "key": "${value:default {\\} stuff}" }
-<
-The default value can also be a replacement variable. However, this _must_ be a
-variable that's already defined, such as one of the predefined variables, or
-one specified in a 'variables' block. In order to reference them, you _must_
-use '${var}' syntax and you _must_ escape the closing '}'. For example, the is
-a common and useful case:
->
- {
- "configuration": {
- "program": "${script:${file\\}}"
- }
- }
-<
-This will prompt the user to specify 'script', but it will default to the path
-to the current file.
-
--------------------------------------------------------------------------------
- *vimspector-ref-coercing-types*
-Coercing Types ~
-
-Sometimes, you want to provide an option for a boolean parameter, or want to
-allow the user to specify more than just strings. Vimspector allows you to do
-this, ensuring that the resulting JSON is valid. This is done by interpreting a
-value as a JSON string and substituting the resulting JSON value in its place.
-
-This is easier to explain with an example. Let's say we want to offer the
-ability to break on entry, as an option for the user. The launch configuration
-requires 'stopOnEntry' to be a bool. This doesn't work:
->
- "stopOnEntry": "${StopOnEntry}"
-<
-The reason is that if the user types 'true', the resulting object is:
->
- "stopOnEntry": "true"
-<
-The problem being that is a string, not a boolean. So Vimspector allows you to
-re-interpret the string as a JSON value and use that instead. To do this, add
-'#json' to the key's name. You can even add a default, like this:
->
- "stopOnEntry#json": "${stopOnEntry:true}"
-<
-If the user accepts the default, the resulting string '"true"' is coerced to a
-JSON value 'true', and the suffix is stripped fom the key, resulting in the
-following:
->
- "stopOnEntry#json": true
-<
-Which is what we need.
-
-If you happen to have a key that already ends in '#json' (unlikely!), then you
-can force Vimspector to treat the value as a string by appending '#s', as in:
->
- "unlikelyKeyName#json#s": "this is a string, not JSON data"
-<
-**_Advanced usage:_**
-
-The most common usage for this is for number and bool types, but it works for
-objects too. If you want to be able to specify a whole object (e.g. a whole
-'env' dict), then you can do that too:
->
- "env#json": "${Environment:{\\}}"
-<
-The default value here is '{}' (note the '}' must be escaped!). The user can
-then enter something like '{ "MYVAR": "MyValue", "OTHER": "Other" }' and the
-resulting object would be:
->
- "env": {
- "MYVAR": "MyValue",
- "OTHER": "Other"
- }
-<
-It also works for lists, though the splat operator is usually more convenient
-for that.
-
-===============================================================================
- *vimspector-ref-configuration-format*
-Configuration Format ~
-
-All Vimspector configuration is defined in a JSON object. The complete
-specification of this object is available in the JSON Schema [2], but the basic
-format for the configuration object is:
->
- {
- "adapters": { /gadgets/'.
-
-This path is exposed as the vimspector _variable_ '${gadgetDir}'. This is
-useful for configuring gadget command lines.
-
-Where os is one of:
-
-- 'macos'
-- 'linux'
-- 'windows' (though note: Windows is not supported)
-
-The format is the same as '.vimspector.json', but only the 'adapters' key is
-used:
-
-Example:
->
- {
- "adapters": {
- "lldb-vscode": {
- "variables": {
- "LLVM": {
- "shell": "brew --prefix llvm"
- }
- },
- "attach": {
- "pidProperty": "pid",
- "pidSelect": "ask"
- },
- "command": [
- "${LLVM}/bin/lldb-vscode"
- ],
- "env": {
- "LLDB_LAUNCH_FLAG_LAUNCH_IN_TTY": "YES"
- },
- "name": "lldb"
- },
- "vscode-cpptools": {
- "attach": {
- "pidProperty": "processId",
- "pidSelect": "ask"
- },
- "command": [
- "${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
- ],
- "name": "cppdbg"
- },
- "vscode-python": {
- "command": [
- "node",
- "${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js"
- ],
- "name": "vscode-python"
- }
- }
- }
-<
-The gadget file is automatically written by 'install_gadget.py' (or
-':VimspectorInstall').
-
-Vimspector will also load any fies matching:
-'/gadgets//.gadgets.d/*.json'. These have the same
-format as '.gadgets.json' but are not overwritten when running
-'install_gadget.py'.
-
--------------------------------------------------------------------------------
- *vimspector-upgrade*
-Upgrade ~
-
-After updating the Vimspector code (either via 'git pull' or whatever package
-manager), run ':VimspectorUpdate' to update any already-installed gadgets.
-
-===============================================================================
- *vimspector-about*
-About ~
-
--------------------------------------------------------------------------------
- *vimspector-background*
-Background ~
-
-The motivation is that debugging in Vim is a pretty horrible experience,
-particularly if you use multiple languages. With pyclewn no more and the
-built-in termdebug plugin limited to gdb, I wanted to explore options.
-
-While Language Server Protocol is well known, the Debug Adapter Protocol is
-less well known, but achieves a similar goal: language agnostic API abstracting
-debuggers from clients.
-
-The aim of this project is to provide a simple but effective debugging
-experience in Vim for multiple languages, by leveraging the debug adapters that
-are being built for Visual Studio Code.
-
-The ability to do remote debugging is a must. This is key to my workflow, so
-baking it in to the debugging experience is a top bill goal for the project. So
-vimspector has first-class support for executing programs remotely and
-attaching to them. This support is unique to vimspector and on top of
-(complementary to) any such support in actual debug adapters.
-
--------------------------------------------------------------------------------
- *vimspector-status*
-Status ~
-
-Vimspector is a work in progress, and any feedback/contributions are more than
-welcome.
-
-The backlog can be viewed on Trello [15].
-
--------------------------------------------------------------------------------
- *vimspector-experimental*
-Experimental ~
-
-The plugin is currently _experimental_. That means that any part of it can (and
-probably will) change, including things like:
-
-- breaking changes to the configuration
-- keys, layout, functionality of the UI
-
-However, I commit to only doing this in the most extreme cases and to annouce
-such changes on Gitter well in advance. There's nothing more annoying than
-stuff just breaking on you. I get that.
-
--------------------------------------------------------------------------------
- *vimspector-motivation*
-Motivation ~
-
-A message from the author about the motivation for this plugin:
-
-Many development environments have a built-in debugger. I spend an inordinate
-amount of my time in Vim. I do all my development in Vim and I have even
-customised my workflows for building code, running tests etc.
-
-For many years I have observed myself, friends and colleagues have been writing
-'printf', 'puts', 'print', etc. debugging statements in all sorts of files
-simply because there is no _easy_ way to run a debugger for _whatever_ language
-we happen to be developing in.
-
-I truly believe that interactive, graphical debugging environments are the best
-way to understand and reason about both unfamiliar and familiar code, and that
-the lack of ready, simple access to a debugger is a huge hidden productivity
-hole for many.
-
-Don't get me wrong, I know there are literally millions of developers out there
-that are more than competent at developing without a graphical debugger, but I
-maintain that if they had the ability to _just press a key_ and jump into the
-debugger, it would be faster and more enjoyable that just cerebral code
-comprehension.
-
-I created Vimspector because I find changing tools frustrating. 'gdb' for c++,
-'pdb' for python, etc. Each has its own syntax. Each its own lexicon. Each its
-own foibles.
-
-I designed the configuration system in such a way that the configuration can be
-committed to source control so that it _just works_ for any of your colleagues,
-friends, collaborators or complete strangers.
-
-I made remote debugging a first-class feature because that's a primary use case
-for me in my job.
-
-With Vimspector I can _just hit ''_ in all of the languages I develop in
-and debug locally or remotely using the exact same workflow, mappings and UI. I
-have integrated this with my Vim in such a way that I can hit a button and _run
-the test under the cursor in Vimspector_. This kind of integration has
-massively improved my workflow and productivity. It's even made the process of
-learning a new codebase... fun.
-
-- Ben Jackson, Creator.
-
--------------------------------------------------------------------------------
- *vimspector-license*
-License ~
-
-Apache 2.0 [16]
-
-Copyright © 2018 Ben Jackson
-
--------------------------------------------------------------------------------
- *vimspector-sponsorship*
-Sponsorship ~
-
-If you like Vimspector so much that you're wiling to part with your hard-earned
-cash, please consider donating to one of the following charities, which are
-meaningful to the author of Vimspector (in order of preference):
-
-- Greyhound Rescue Wales [17]
-- Cancer Research UK [18]
-- ICCF Holland [19]
-- Any charity of your choosing.
-
-===============================================================================
- *vimspector-mappings*
-Mappings ~
-
-By default, vimspector does not change any of your mappings. Mappings are very
-personal and so you should work out what you like and use vim's powerful
-mapping features to set your own mappings. To that end, Vimspector defines the
-following '' mappings:
-
-=================================================================================================================================================================================
-| _Mapping_ | _Function_ | _API_ |
-=================================================================================================================================================================================
-| 'VimspectorContinue' | When debugging, continue. Otherwise start debugging. | 'vimspector#Continue()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorStop' | Stop debugging. | 'vimspector#Stop()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimpectorRestart' | Restart debugging with the same configuration. | 'vimspector#Restart()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorPause' | Pause debuggee. | 'vimspector#Pause()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorToggleBreakpoint' | Toggle line breakpoint on the current line. | 'vimspector#ToggleBreakpoint()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorToggleConditionalBreakpoint' | Toggle conditional line breakpoint on the current line. | 'vimspector#ToggleBreakpoint( { trigger expr, hit count expr } )' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorAddFunctionBreakpoint' | Add a function breakpoint for the expression under cursor | "vimspector#AddFunctionBreakpoint( '' )" |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorRunToCursor' | Run to Cursor | 'vimspector#RunToCursor()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorStepOver' | Step Over | 'vimspector#StepOver()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorStepInto' | Step Into | 'vimspector#StepInto()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorStepOut' | Step out of current function scope | 'vimspector#StepOut()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorUpFrame' | Move up a frame in the current call stack | 'vimspector#UpFrame()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorDownFrame' | Move down a frame in the current call stack | 'vimspector#DownFrame()' |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-| 'VimspectorBalloonEval' | Evaluate expression under cursor (or visual) in popup | _internal_ |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-
-These map roughly 1-1 with the API functions below.
-
-For example, if you want '' to start/continue debugging, add this to some
-appropriate place, such as your 'vimrc' (hint: run ':e $MYVIMRC').
->
- nmap VimspectorContinue
-<
-In addition, many users probably want to only enable certain Vimspector
-mappings while debugging is active. This is also possible, though it requires
-writing some vimscipt.
-
-That said, many people are familiar with particular debuggers, so the following
-mappings can be enabled by setting 'g:vimspector_enable_mappings' to the
-specified value.
-
--------------------------------------------------------------------------------
- *vimspector-visual-studio-vscode*
-Visual Studio / VSCode ~
-
-To use Visual Studio-like mappings, add the following to your 'vimrc' **before
-loading vimspector**:
->
- let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
-<
-=========================================================================================================================
-| _Key_ | _Mapping_ | _Function_ |
-=========================================================================================================================
-| 'F5' | 'VimspectorContinue' | When debugging, continue. Otherwise start debugging. |
--------------------------------------------------------------------------------------------------------------------------
-| 'Shift F5' | 'VimspectorStop' | Stop debugging. |
--------------------------------------------------------------------------------------------------------------------------
-| 'Ctrl Shift F5' | 'VimspectorRestart' | Restart debugging with the same configuration. |
--------------------------------------------------------------------------------------------------------------------------
-| 'F6' | 'VimspectorPause' | Pause debuggee. |
--------------------------------------------------------------------------------------------------------------------------
-| 'F9' | 'VimspectorToggleBreakpoint' | Toggle line breakpoint on the current line. |
--------------------------------------------------------------------------------------------------------------------------
-| 'Shift F9' | 'VimspectorAddFunctionBreakpoint' | Add a function breakpoint for the expression under cursor |
--------------------------------------------------------------------------------------------------------------------------
-| 'F10' | 'VimspectorStepOver' | Step Over |
--------------------------------------------------------------------------------------------------------------------------
-| 'F11' | 'VimspectorStepInto' | Step Into |
--------------------------------------------------------------------------------------------------------------------------
-| 'Shift F11' | 'VimspectorStepOut' | Step out of current function scope |
--------------------------------------------------------------------------------------------------------------------------
-
-
--------------------------------------------------------------------------------
- *vimspector-human-mode*
-Human Mode ~
-
-If, like me, you only have 2 hands and 10 fingers, you probably don't like
-Ctrl-Shift-F keys. Also, if you're running in a terminal, there's a real
-possibility of terminfo being wrong for shifted-F-keys, particularly if your
-'TERM' is 'screen-256color'. If these issues (number of hands, 'TERM'
-variables) are unfixable, try the following mappings, by adding the following
-**before loading vimspector**:
->
- let g:vimspector_enable_mappings = 'HUMAN'
-<
-============================================================================================================================
-| _Key_ | _Mapping_ | _Function_ |
-============================================================================================================================
-| 'F5' | 'VimspectorContinue' | When debugging, continue. Otherwise start debugging. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F3' | 'VimspectorStop' | Stop debugging. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F4' | 'VimspectorRestart' | Restart debugging with the same configuration. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F6' | 'VimspectorPause' | Pause debuggee. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F9' | 'VimspectorToggleBreakpoint' | Toggle line breakpoint on the current line. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F9' | 'VimspectorToggleConditionalBreakpoint' | Toggle conditional line breakpoint on the current line. |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F8' | 'VimspectorAddFunctionBreakpoint' | Add a function breakpoint for the expression under cursor |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F8' | 'VimspectorRunToCursor' | Run to Cursor |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F10' | 'VimspectorStepOver' | Step Over |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F11' | 'VimspectorStepInto' | Step Into |
-----------------------------------------------------------------------------------------------------------------------------
-| 'F12' | 'VimspectorStepOut' | Step out of current function scope |
-----------------------------------------------------------------------------------------------------------------------------
-
-
-In addition, I recommend adding a mapping to 'VimspectorBalloonEval', in
-normal and visual modes, for example:
->
- " mnemonic 'di' = 'debug inspect' (pick your own, if you prefer!)
-
- " for normal mode - the word under the cursor
- nmap di VimspectorBalloonEval
- " for visual mode, the visually selected text
- xmap di VimspectorBalloonEval
-<
-You may also wish to add mappings for up/down the stack, for example:
->
- nmap VimspectorUpFrame
- nmap VimspectorDownFrame
-<
-===============================================================================
- *vimspector-usage-api*
-Usage and API ~
-
-This section defines detailed usage instructions, organised by feature. For
-most users, the mappings section contains the most common commands and default
-usage. This section can be used as a reference to create your own mappings or
-custom behaviours.
-
--------------------------------------------------------------------------------
- *vimspector-launch-attach-by-pid*
-Launch and attach by PID: ~
-
-- Create '.vimspector.json'. See below.
-- ':call vimspector#Launch()' and select a configuration.
-
- Image: debug session (see reference [6])
-
--------------------------------------------------------------------------------
- *vimspector-launch-with-options*
-Launch with options ~
-
-To launch a specific debug configuration, or specify replacement variables [20]
-for the launch, you can use:
-
-- ':call vimspector#LaunchWithSettings( dict )'
-
-The argument is a 'dict' with the following keys:
-
-- 'configuration': (optional) Name of the debug configuration to launch
-- '': (optional) Name of a variable to set
-
-This allows for some integration and automation. For example, if you have a
-configuration named 'Run Test' that contains a replacement variable [20] named
-'${Test}' you could write a mapping which ultimately executes:
->
- vimspector#LaunchWithSettings( #{ configuration: 'Run Test'
- \ Test: 'Name of the test' } )
-<
-This would start the 'Run Test' configuration with '${Test}' set to "'Name of
-the test'" and Vimspector would _not_ prompt the user to enter or confirm these
-things.
-
-See our YouCompleteMe integration guide for another example where it can be
-used to specify the port to connect the java debugger
-
--------------------------------------------------------------------------------
- *vimspector-debug-configuration-selection*
-Debug configuration selection ~
-
-Vimspector uses the following logic to choose a configuration to launch:
-
-1. If a configuration was specified in the launch options (as above), use
- that.
-
-2. Otherwise if there's only one configuration and it doesn't have
- 'autoselect' set to 'false', use that.
-
-3. Otherwise if there's exactly one configuration with 'default' set to
- 'true' and without 'autoselect' set to 'false', use that.
-
-4. Otherwise, prompt the user to select a configuration.
-
-See the reference guide [21] for details.
-
--------------------------------------------------------------------------------
- *vimspector-get-configurations*
-Get configurations ~
-
-- Use 'vimspector#GetConfigurations()' to get a list of configurations
-
-For example, to get an array of configurations and fuzzy matching on the result
->
- :call matchfuzzy(vimspector#GetConfigurations(), "test::case_1")
-<
--------------------------------------------------------------------------------
- *vimspector-breakpoints*
-Breakpoints ~
-
-See the mappings [22] section for the default mappings for working with
-breakpoints. This section describes the full API in vimscript functions.
-
--------------------------------------------------------------------------------
- *vimspector-summary*
-Summary ~
-
-- Use 'vimspector#ToggleBreakpoint( { options dict } )' to set/disable/delete
- a line breakpoint. The argument is optional (see below).
-
-- Use "vimspector#AddFunctionBreakpoint( '', { options dict} )" to add
- a function breakpoint. The second argument is optional (see below).
-
-- Use 'vimspector#SetLineBreakpoint( file_name, line_num, { options dict } )'
- to set a breakpoint at a specific file/line. The last argument is optional
- (see below)
-
-- Use 'vimspector#ClearLineBreakpoint( file_name, line_num )' to remove a
- breakpoint at a specific file/line
-
-- Use 'vimspector#ClearBreakpoints()' to clear all breakpoints
-
-Examples:
-
-- 'call vimspector#ToggleBreakpoint()' - toggle breakpoint on current line
-
-- "call vimspector#SetLineBreakpoint( 'some_file.py', 10 )" - set a
- breakpoint on 'some_filepy:10'
-
-- "call vimspector#AddFunctionBreakpoint( 'main' )" - add a function
- breakpoint on the 'main' function
-
-- "call vimspector#ToggleBreakpoint( { 'condition': 'i > 5' } )" - add a
- breakpoint on the current line that triggers only when 'i > 5' is 'true'
-
-- "call vimspector#SetLineBreakpoint( 'some_file.py', 10, { 'condition': 'i >
- 5' } )" - add a breakpoint at 'some_file.py:10' that triggers only when 'i
- > 5' is 'true'
-
-- "call vimspector#ClearLineBreakpoint( 'some_file.py', 10 )" - delete the
- breakpoint at 'some_file.py:10'
-
-- 'call vimspector#ClearBreakpoints()' - clear all breakpoints
-
--------------------------------------------------------------------------------
- *vimspector-line-breakpoints*
-Line breakpoints ~
-
-The simplest and most common form of breakpoint is a line breakpoint. Execution
-is paused when the specified line is executed.
-
-For most debugging scenarios, users will just hit '' to create a line
-breakpoint on the current line and '' to launch the application.
-
--------------------------------------------------------------------------------
- *vimspector-conditional-breakpoints*
-Conditional breakpoints ~
-
-Some debug adapters support conditional breakpoints. Note that vimspector does
-not tell you if the debugger doesn't support conditional breakpoints (yet). A
-conditional breakpoint is a breakpoint which only triggers if some expression
-evaluates to true, or has some other constraints met.
-
-Some of these functions above take a single optional argument which is a
-dictionary of options. The dictionary can have the following keys:
-
-- 'condition': An optional expression evaluated to determine if the
- breakpoint should fire. Not supported by all debug adapters. For example,
- to break when 'abc' is '10', enter something like 'abc == 10', depending on
- the language.
-
-- 'hitCondition': An optional expression evaluated to determine a number of
- times the breakpoint should be ignored. Should (probably?) not be used in
- combination with 'condition'. Not supported by all debug adapters. For
- example, to break on the 3rd time hitting this line, enter '3'.
-
-In both cases, the expression is evaluated by the debugger, so should be in
-whatever dialect the debugger understands when evaluating expressions.
-
-When using the '' mapping, the user is prompted to enter these
-expressions in a command line (with history).
-
--------------------------------------------------------------------------------
- *vimspector-exception-breakpoints*
-Exception breakpoints ~
-
-Exception breakpoints typically fire when an exception is throw or other error
-condition occurs. Depending on the debugger, when starting debugging, you may
-be asked a few questions about how to handle exceptions. These are "exception
-breakpoints" and vimspector remembers your choices while Vim is still running.
-
-Typically you can accept the defaults (just keep pressing ''!) as most
-debug adapter defaults are sane, but if you want to break on, say 'uncaught
-exception' then answer 'Y' to that (for example).
-
-You can configure your choices in the '.vimspector.json'. See the configuration
-guide [23] for details on that.
-
--------------------------------------------------------------------------------
- *vimspector-clear-breakpoints*
-Clear breakpoints ~
-
-Use 'vimspector#ClearBreakpoints()' to clear all breakpoints including the
-memory of exception breakpoint choices.
-
--------------------------------------------------------------------------------
- *vimspector-run-to-cursor*
-Run to Cursor ~
-
-Use 'vimspector#RunToCursor' or '': this creates a temporary
-breakpoint on the current line, then continues execution, clearing the
-breakpoint when it is hit.
-
--------------------------------------------------------------------------------
- *vimspector-stepping*
-Stepping ~
-
-- Step in/out, finish, continue, pause etc. using the WinBar, or mappings.
-- If you really want to, the API is 'vimspector#StepInto()' etc.
-
- Image: code window (see reference [24])
-
--------------------------------------------------------------------------------
- *vimspector-variables-scopes*
-Variables and scopes ~
-
-- Current scope shows values of locals.
-- Use '', or double-click with left mouse to expand/collapse (+, -).
-- Set the value of the variable with '' (control + '') or
- '' (if 'modifyOtherKeys' doesn't work for you)
-- When changing the stack frame the locals window updates.
-- While paused, hover to see values
-
- Image: locals window (see reference [25])
-
-Scopes and variables are represented by the buffer 'vimspector.Variables'.
-
--------------------------------------------------------------------------------
- *vimspector-variable-or-selection-hover-evaluation*
-Variable or selection hover evaluation ~
-
-All rules for 'Variables and scopes' apply plus the following:
-
-- With mouse enabled, hover over a variable and get the value it evaluates
- to.
-
-- Use your mouse to perform a visual selection of an expression (e.g. 'a +
- b') and get its result.
-
-- Make a normal mode ('nmap') and visual mode ('xmap') mapping to
- 'VimspectorBalloonEval' to manually trigger the popup.
-
-- Set the value of the variable with '' (control + '') or
- '' (if 'modifyOtherKeys' doesn't work for you)
-
-- Use regular nagivation keys ('j', 'k') to choose the current selection;
- '' (or leave the tooltip window) to close the tooltip.
-
- Image: variable eval hover (see reference [26])
-
--------------------------------------------------------------------------------
- *vimspector-watches*
-Watches ~
-
-The watch window is used to inspect variables and expressions. Expressions are
-evaluated in the selected stack frame which is "focussed"
-
-The watches window is a prompt buffer, where that's available. Enter insert
-mode to add a new watch expression.
-
-- Add watches to the variables window by entering insert mode and typing the
- expression. Commit with ''.
-
-- Alternatively, use ':VimspectorWatch '. Tab-completion for
- expression is available in some debug adapters.
-
-- Expand result with '', or double-click with left mouse.
-
-- Set the value of the variable with '' (control + '') or
- '' (if 'modifyOtherKeys' doesn't work for you)
-
-- Delete with ''.
-
- Image: watch window (see reference [27])
-
-The watches are represented by the buffer 'vimspector.StackTrace'.
-
--------------------------------------------------------------------------------
- *vimspector-watch-autocompletion*
-Watch autocompletion ~
-
-The watch prompt buffer has its 'omnifunc' set to a function that will
-calculate completion for the current expression. This is trivially used with
-'' (see ':help ins-completion'), or integrated with your
-favourite completion system. The filetype in the buffer is set to
-'VimspectorPrompt'.
-
-For YouCompleteMe, the following config works well:
->
- let g:ycm_semantic_triggers = {
- \ 'VimspectorPrompt': [ '.', '->', ':', '<' ]
- }
-<
--------------------------------------------------------------------------------
- *vimspector-stack-traces*
-Stack Traces ~
-
-The stack trace window shows the state of each program thread. Threads which
-are stopped can be expanded to show the stack trace of that thread.
-
-Often, but not always, all threads are stopped when a breakpoint is hit. The
-status of a thread is show in parentheses after the thread's name. Where
-supported by the underlying debugger, threads can be paused and continued
-individually from within the Stack Trace window.
-
-A particular thread, highlighted with the 'CursorLine' highlight group is the
-"focussed" thread. This is the thread that receives commands like "Stop In",
-"Stop Out", "Continue" and "Pause" in the code window. The focussed thread can
-be changed manually to "switch to" that thread.
-
-- Use '', or double-click with left mouse to expand/collapse a thread
- stack trace, or use the WinBar button.
-
-- Use '', or double-click with left mouse on a stack frame to jump to it.
-
-- Use the WinBar or 'vimspector#PauseContinueThread()' to individually pause
- or continue the selected thread.
-
-- Use the "Focus" WinBar button, '' or
- 'vimspector#SetCurrentThread()' to set the "focussed" thread to the
- currently selected one. If the selected line is a stack frame, set the
- focussed thread to the thread of that frame and jump to that frame in the
- code window.
-
- Image: stack trace (see reference [28])
-
-The stack trace is represented by the buffer 'vimspector.StackTrace'.
-
--------------------------------------------------------------------------------
- *vimspector-program-output*
-Program Output ~
-
-- In the outputs window, use the WinBar to select the output channel.
-- Alternatively, use ':VimspectorShowOutput '. Use command-line
- completion to see the categories.
-- The debuggee prints to the stdout channel.
-- Other channels may be useful for debugging.
-
- Image: output window (see reference [29])
-
-If the output window is closed, a new one can be opened with
-':VimspectorShowOutput ' (use tab-completion - 'wildmenu' to see the
-options).
-
--------------------------------------------------------------------------------
- *vimspector-console*
-Console ~
-
-The console window is a prompt buffer, where that's available, and can be used
-as an interactive CLI for the debug adapter. Support for this varies amongst
-adapters.
-
-- Enter insert mode to enter a command to evaluate.
-- Alternatively, ':VimspectorEval '. Completion is available with
- some debug adapters.
-- Commit the request with ''
-- The request and subsequent result are printed.
-
-NOTE: See also Watches above.
-
-If the output window is closed, a new one can be opened with
-':VimspectorShowOutput Console'.
-
--------------------------------------------------------------------------------
- *vimspector-console-autocompletion*
-Console autocompletion ~
-
-The console prompt buffer has its 'omnifunc' set to a function that will
-calculate completion for the current command/expression. This is trivially used
-with '' (see ':help ins-completion'), or integrated with your
-favourite completion system. The filetype in the buffer is set to
-'VimspectorPrompt'.
-
-For YouCompleteMe, the following config works well:
->
- let g:ycm_semantic_triggers = {
- \ 'VimspectorPrompt': [ '.', '->', ':', '<' ]
- }
-<
--------------------------------------------------------------------------------
- *vimspector-log-view*
-Log View ~
-
-The Vimspector log file contains a full trace of the communication between
-Vimspector and the debug adapter. This is the primary source of diagnostic
-information when something goes wrong that's not a Vim traceback.
-
-If you just want to see the Vimspector log file, use ':VimspectorToggleLog',
-which will tail it in a little window (doesn't work on Windows).
-
--------------------------------------------------------------------------------
- *vimspector-closing-debugger*
-Closing debugger ~
-
-To close the debugger, use:
-
-- 'Reset' WinBar button
-- ':VimspectorReset' when the WinBar is not available.
-- 'call vimspector#Reset()'
-
--------------------------------------------------------------------------------
- *vimspector-terminate-debuggee*
-Terminate debuggee ~
-
-If the debuggee is still running when stopping or resetting, then some debug
-adapters allow you to specify what should happen to it when finishing
-debugging. Typically, the default behaviour is sensible, and this is what
-happens most of the time. These are the defaults according to DAP:
-
-- If the request was 'launch': terminate the debuggee
-- If the request was 'attach': don't terminate the debuggee
-
-Some debug adapters allow you to choose what to do when disconnecting. If you
-wish to control this behaviour, use ':VimspectorReset' or call
-"vimspector#Reset( { 'interactive': v:true } )". If the debug adapter offers a
-choice as to whether or not to terminate the debuggee, you will be prompted to
-choose. The same applies for 'vimspector#Stop()' which can take an argument:
-"vimspector#Stop( { 'interactive': v:true } )".
-
-===============================================================================
- *vimspector-debug-profile-configuration*
-Debug profile configuration ~
-
-For an introduction to the configuration of '.vimspector.json', take a look at
-the Getting Started section of the Vimspector website [1].
-
-For full explanation, including how to use variables, substitutions and how to
-specify exception breakpoints, see the docs [2].
-
-The JSON configuration file allows C-style comments:
-
-- '// comment to end of line ...'
-- '/* inline comment ... */'
-
-Current tested with the following debug adapters.
-
--------------------------------------------------------------------------------
- *vimspector-c-c-rust-etc.*
-C, C++, Rust, etc. ~
-
-- vscode-cpptools [30]
-
-- On macOS, I _strongly_ recommend using CodeLLDB instead for C and C++
- projects. It's really excellent, has fewer dependencies and doesn't open
- console apps in another Terminal window.
-
-Example '.vimspector.json' (works with both 'vscode-cpptools' and
-'lldb-vscode'. For 'lldb-vscode' replace the name of the adapter with
-'lldb-vscode':
-
-- vscode-cpptools Linux/MacOS:
->
- {
- "configurations": {
- "Launch": {
- "adapter": "vscode-cpptools",
- "configuration": {
- "request": "launch",
- "program": "",
- "args": [ ... ],
- "cwd": "",
- "environment": [ ... ],
- "externalConsole": true,
- "MIMode": ""
- }
- },
- "Attach": {
- "adapter": "vscode-cpptools",
- "configuration": {
- "request": "attach",
- "program": "",
- "MIMode": ""
- }
- }
- ...
- }
- }
-<
-- vscode-cpptools Windows
-
-**_NOTE FOR WINDOWS USERS:_** You need to install 'gdb.exe'. I recommend using
-'scoop install gdb'. Vimspector cannot use the visual studio debugger due to
-licensing.
->
- {
- "configurations": {
- "Launch": {
- "adapter": "vscode-cpptools",
- "configuration": {
- "request": "launch",
- "program": "",
- "stopAtEntry": true
- }
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-c-remote-debugging*
-C++ Remote debugging ~
-
-The cpptools documentation describes how to attach cpptools to gdbserver using
-'miDebuggerAddress'. Note that when doing this you should use the '"request":
-"attach"'.
-
--------------------------------------------------------------------------------
- *vimspector-c-remote-launch-attach*
-C++ Remote launch and attach ~
-
-If you're feeling fancy, checkout the reference guide [31] for an example of
-getting Vimspector to remotely launch and attach.
-
-- CodeLLDB (MacOS)
-
-CodeLLDB is superior to vscode-cpptools in a number of ways on macOS at least.
-
-See Rust.
-
-- lldb-vscode (MacOS)
-
-An alternative is to to use 'lldb-vscode', which comes with llvm. Here's how:
-
-- Install llvm (e.g. with HomeBrew: 'brew install llvm')
-- Create a file named
- '/path/to/vimspector/gadgets/macos/.gadgets.d/lldb-vscode.json':
->
- {
- "adapters": {
- "lldb-vscode": {
- "variables": {
- "LLVM": {
- "shell": "brew --prefix llvm"
- }
- },
- "attach": {
- "pidProperty": "pid",
- "pidSelect": "ask"
- },
- "command": [
- "${LLVM}/bin/lldb-vscode"
- ],
- "env": {
- "LLDB_LAUNCH_FLAG_LAUNCH_IN_TTY": "YES"
- },
- "name": "lldb"
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-rust*
-Rust ~
-
-Rust is supported with any gdb/lldb-based debugger. So it works fine with
-'vscode-cpptools' and 'lldb-vscode' above. However, support for rust is best in
-'CodeLLDB' [32].
-
-- './install_gadget.py --force-enable-rust' or ':VimspectorInstall CodeLLDB'
-- Example: 'support/test/rust/vimspector_test'
->
- {
- "configurations": {
- "launch": {
- "adapter": "CodeLLDB",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/target/debug/vimspector_test"
- }
- }
- }
- }
-<
-- Docs: https://github.com/vadimcn/vscode-lldb/blob/master/MANUAL.md
-
--------------------------------------------------------------------------------
- *vimspector-python*
-Python ~
-
-- Python: debugpy [33]
-
-- Install with 'install_gadget.py --enable-python' or ':VimspectorInstall
- debugpy', ideally requires a working compiler and the python development
- headers/libs to build a C python extension for performance.
-
-- Full options:
- https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
-
-**Migrating from 'vscode-python'**: change '"adapter": "vscode-python"' to
-'"adapter": "debugpy"'.
->
- {
- "configurations": {
- ": Launch": {
- "adapter": "debugpy",
- "configuration": {
- "name": ": Launch",
- "type": "python",
- "request": "launch",
- "cwd": "",
- "python": "/path/to/python/interpreter/to/use",
- "stopOnEntry": true,
- "console": "externalTerminal",
- "debugOptions": [],
- "program": ""
- }
- }
- ...
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-python-remote-debugging*
-Python Remote Debugging ~
-
-In order to use remote debugging with debugpy, you have to connect Vimspector
-directly to the application that is being debugged. This is easy, but it's a
-little different from how we normally configure things. Specifically, you need
-to:
-
-- Start your application with debugpy, specifying the '--listen' argument.
- See the debugpy documentation [34] for details.
-
-- Use the built-in "multi-session" adapter. This just asks for the host/port
- to connect to. For example:
->
- {
- "configurations": {
- "Python Attach": {
- "adapter": "multi-session",
- "configuration": {
- "request": "attach",
- "pathMappings": [
- // mappings here (optional)
- ]
- }
- }
- }
- }
-<
-See details of the launch configuration [35] for explanation of things like
-'pathMappings'.
-
-Additional documentation, including how to do this when the remote machine can
-only be contacted via SSH are provided by debugpy [36].
-
--------------------------------------------------------------------------------
- *vimspector-python-remote-launch-attach*
-Python Remote launch and attach ~
-
-If you're feeling fancy, checkout the reference guide [31] for an example of
-getting Vimspector to remotely launch and attach.
-
--------------------------------------------------------------------------------
- *vimspector-legacy-vscode-python*
-Legacy: vscode-python ~
-
-- No longer installed by default - please pass '--force-enable-python.legacy'
- if you just want to continue using your working setup.
-- vscode-python [37]
-- NOTE: You must be running 'node' 10. See this issue [38]
->
- {
- "configurations": {
- ": Launch": {
- "adapter": "vscode-python",
- "configuration": {
- "name": ": Launch",
- "type": "python",
- "request": "launch",
- "cwd": "",
- "stopOnEntry": true,
- "console": "externalTerminal",
- "debugOptions": [],
- "program": ""
- }
- }
- ...
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-tcl*
-TCL ~
-
-- TCL (TclProDebug)
-
-See my fork of TclProDebug [39] for instructions.
-
--------------------------------------------------------------------------------
- *vimspector-c*
-C♯ ~
-
-- C# - dotnet core
-
-Install with 'install_gadget.py --force-enable-csharp' or ':VimspectorInstall
-netcoredbg'
->
- {
- "configurations": {
- "launch - netcoredbg": {
- "adapter": "netcoredbg",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
- "args": [],
- "stopAtEntry": true,
- "cwd": "${workspaceRoot}"
- }
- }
- }
- }
-<
-- C# - mono
-
-Install with 'install_gadget.py --force-enable-csharp' or ':VimspectorInstall
-vscode-mono-debug'.
-
-**_Known not to work._**
->
- {
- "configurations": {
- "launch - mono": {
- "adapter": "vscode-mono-debug",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
- "args": [],
- "cwd": "${workspaceRoot}",
- "runtimeExecutable": "mono",
- "runtimeArgs": [],
- "env": [],
- "externalConsole": false,
- "console": "integratedTerminal"
- }
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-go*
-Go ~
-
-- Go
-
-Requires:
-
-- 'install_gadget.py --enable-go' or ':VimspectorInstall vscode-go'
-- Delve [40] installed, e.g. 'go get -u github.com/go-delve/delve/cmd/dlv'
-- Delve to be in your PATH, or specify the 'dlvToolPath' launch option
->
- {
- "configurations": {
- "run": {
- "adapter": "vscode-go",
- "configuration": {
- "request": "launch",
- "program": "${fileDirname}",
- "mode": "debug",
- "dlvToolPath": "$HOME/go/bin/dlv"
- }
- }
- }
- }
-<
-See the vscode-go docs for troubleshooting information [41]
-
--------------------------------------------------------------------------------
- *vimspector-php*
-PHP ~
-
-This uses the php-debug, see
-https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug
-
-Requires:
-
-- (optional) Xdebug helper for chrome https://chrome.google.com/webstore/deta
- il/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
-
-- 'install_gadget.py --force-enable-php' or ':VimspectorInstall
- vscode-php-debug'
-
-- configured php xdebug extension
->
- zend_extension=xdebug.so
- xdebug.remote_enable=on
- xdebug.remote_handler=dbgp
- xdebug.remote_host=localhost
- xdebug.remote_port=9000
-<
- replace 'localhost' with the ip of your workstation.
-
-lazy alternative
->
- zend_extension=xdebug.so
- xdebug.remote_enable=on
- xdebug.remote_handler=dbgp
- xdebug.remote_connect_back=true
- xdebug.remote_port=9000
-<
-- .vimspector.json
->
- {
- "configurations": {
- "Listen for XDebug": {
- "adapter": "vscode-php-debug",
- "configuration": {
- "name": "Listen for XDebug",
- "type": "php",
- "request": "launch",
- "port": 9000,
- "stopOnEntry": false,
- "pathMappings": {
- "/var/www/html": "${workspaceRoot}"
- }
- }
- },
- "Launch currently open script": {
- "adapter": "vscode-php-debug",
- "configuration": {
- "name": "Launch currently open script",
- "type": "php",
- "request": "launch",
- "program": "${file}",
- "cwd": "${fileDirname}",
- "port": 9000
- }
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-debug-web-application*
-Debug web application ~
-
-append 'XDEBUG_SESSION_START=xdebug' to your query string
->
- curl "http://localhost?XDEBUG_SESSION_START=xdebug"
-<
-or use the previously mentioned Xdebug Helper extension (which sets a
-'XDEBUG_SESSION' cookie)
-
--------------------------------------------------------------------------------
- *vimspector-debug-cli-application*
-Debug cli application ~
->
- export XDEBUG_CONFIG="idekey=xdebug"
- php
-<
--------------------------------------------------------------------------------
- *vimspector-javascript-typescript-etc.*
-JavaScript, TypeScript, etc. ~
-
-- Node.js
-
-Requires:
-
-- 'install_gadget.py --force-enable-node'
-
-- For installation, a Node.js environment that is < node 12. I believe this
- is an incompatibility with gulp. Advice, use [nvm][] with 'nvm install
- --lts 10; nvm use --lts 10; ./install_gadget.py --force-enable-node ...'
-
-- Options described here:
- https://code.visualstudio.com/docs/nodejs/nodejs-debugging
-
-- Example: 'support/test/node/simple'
->
- {
- "configurations": {
- "run": {
- "adapter": "vscode-node",
- "configuration": {
- "request": "launch",
- "protocol": "auto",
- "stopOnEntry": true,
- "console": "integratedTerminal",
- "program": "${workspaceRoot}/simple.js",
- "cwd": "${workspaceRoot}"
- }
- }
- }
- }
-<
-- Chrome
-
-This uses the chrome debugger, see https://marketplace.visualstudio.com/items?i
-temName=msjsdiag.debugger-for-chrome.
-
-It allows you to debug scripts running inside chrome from within Vim.
-
-- './install_gadget.py --force-enable-chrome' or ':VimspectorInstall
- debugger-for-chrome'
-- Example: 'support/test/chrome'
->
- {
- "configurations": {
- "launch": {
- "adapter": "chrome",
- "configuration": {
- "request": "launch",
- "url": "http://localhost:1234/",
- "webRoot": "${workspaceRoot}/www"
- }
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-java*
-Java ~
-
-Vimspector works well with the java debug server [42], which runs as a jdt.ls
-(Java Language Server) plugin, rather than a standalone debug adapter.
-
-Vimspector is not in the business of running language servers, only debug
-adapters, so this means that you need a compatible Language Server Protocol
-editor plugin to use Java. I recommend YouCompleteMe [43], which has full
-support for jdt.ls, and most importantly a trivial way to load the debug
-adapter and to use it with Vimspector.
-
--------------------------------------------------------------------------------
- *vimspector-usage-with-youcompleteme*
-Usage with YouCompleteMe ~
-
-- Set up YCM for java [43].
-
-- Get Vimspector to download the java debug plugin: 'install_gadget.py
- --force-enable-java ' or ':VimspectorInstall
- java-debug-adapter'
-
-- Configure Vimspector for your project using the 'vscode-java' adapter,
- e.g.:
->
- {
- "configurations": {
- "Java Attach": {
- "adapter": "vscode-java",
- "configuration": {
- "request": "attach",
- "hostName": "${host}",
- "port": "${port}",
- "sourcePaths": [
- "${workspaceRoot}/src/main/java",
- "${workspaceRoot}/src/test/java"
- ]
- }
- }
- }
- }
-<
-- Tell YCM to load the debugger plugin. This should be the 'gadgets/'
- directory, not any specific adapter. e.g. in '.vimrc'
->
- " Tell YCM where to find the plugin. Add to any existing values.
- let g:ycm_java_jdtls_extension_path = [
- \ ''
- \ ]
-<
-- Create a mapping, such as '' to start the debug server and
- launch vimspector, e.g. in '~/.vim/ftplugin/java.vim':
->
- let s:jdt_ls_debugger_port = 0
- function! s:StartDebugging()
- if s:jdt_ls_debugger_port <= 0
- " Get the DAP port
- let s:jdt_ls_debugger_port = youcompleteme#GetCommandResponse(
- \ 'ExecuteCommand',
- \ 'vscode.java.startDebugSession' )
-
- if s:jdt_ls_debugger_port == ''
- echom "Unable to get DAP port - is JDT.LS initialized?"
- let s:jdt_ls_debugger_port = 0
- return
- endif
- endif
-
- " Start debugging with the DAP port
- call vimspector#LaunchWithSettings( { 'DAPPort': s:jdt_ls_debugger_port } )
- endfunction
-
- nnoremap :call StartDebugging()
-<
-You can then use '' to start debugging rather than just ''.
-
-If you see "Unable to get DAP port - is JDT.LS initialized?", try running
-':YcmCompleter ExecuteCommand vscode.java.startDebugSession' and note the
-output. If you see an error like 'ResponseFailedException: Request failed:
--32601: No delegateCommandHandler for vscode.java.startDebugSession', make sure
-that: _Your YCM jdt.ls is actually working, see the YCM docs [44] for
-troubleshooting_ The YCM jdt.ls has had time to initialize before you start the
-debugger * That 'g:ycm_java_jdtls_extension_path' is set in '.vimrc' or prior
-to YCM starting
-
-For the launch arguments, see the vscode document [45].
-
--------------------------------------------------------------------------------
- *vimspector-other-lsp-clients*
-Other LSP clients ~
-
-See this issue [46] for more background.
-
--------------------------------------------------------------------------------
- *vimspector-lua*
-Lua ~
-
-Lua is supported through local-lua-debugger-vscode [47]. This debugger uses
-stdio to communicate with the running process, so calls to 'io.read' will cause
-problems.
-
-- './install_gadget.py --enable-lua' or ':VimspectorInstall
- local-lua-debugger-vscode'
-- Examples: 'support/test/lua/simple' and 'support/test/lua/love'
->
- {
- "$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json#",
- "configurations": {
- "lua": {
- "adapter": "lua-local",
- "configuration": {
- "request": "launch",
- "type": "lua-local",
- "cwd": "${workspaceFolder}",
- "program": {
- "lua": "lua",
- "file": "${file}"
- }
- }
- },
- "luajit": {
- "adapter": "lua-local",
- "configuration": {
- "request": "launch",
- "type": "lua-local",
- "cwd": "${workspaceFolder}",
- "program": {
- "lua": "luajit",
- "file": "${file}"
- }
- }
- },
- "love": {
- "adapter": "lua-local",
- "configuration": {
- "request": "launch",
- "type": "lua-local",
- "cwd": "${workspaceFolder}",
- "program": {
- "command": "love"
- },
- "args": ["${workspaceFolder}"]
- }
- }
- }
- }
-<
--------------------------------------------------------------------------------
- *vimspector-other-servers*
-Other servers ~
-
-- Java - vscode-javac. This works, but is not as functional as Java Debug
- Server. Take a look at this comment [48] for instructions.
-
-===============================================================================
- *vimspector-customisation*
-Customisation ~
-
-There is very limited support for customisation of the UI.
-
--------------------------------------------------------------------------------
- *vimspector-changing-default-signs*
-Changing the default signs ~
-
-Vimsector uses the following signs internally. If they are defined before
-Vimsector uses them, they will not be replaced. So to customise the signs,
-define them in your 'vimrc'.
-
-=============================================================================
-| _Sign_ | _Description_ | _Priority_ |
-=============================================================================
-| 'vimspectorBP' | Line breakpoint | 9 |
------------------------------------------------------------------------------
-| 'vimspectorBPCond' | Conditional line breakpoint | 9 |
------------------------------------------------------------------------------
-| 'vimspectorBPDisabled' | Disabled breakpoint | 9 |
------------------------------------------------------------------------------
-| 'vimspectorPC' | Program counter (i.e. current line) | 200 |
------------------------------------------------------------------------------
-| 'vimspectorPCBP' | Program counter and breakpoint | 200 |
------------------------------------------------------------------------------
-
-
-The default symbols are the equivalent of something like the following:
->
- sign define vimspectorBP text=\ ● texthl=WarningMsg
- sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
- sign define vimspectorBPDisabled text=\ ● texthl=LineNr
- sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
- sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
-<
-If the signs don't display properly, your font probably doesn't contain these
-glyphs. You can easily change them by defining the sign in your vimrc. For
-example, you could put this in your 'vimrc' to use some simple ASCII symbols:
->
- sign define vimspectorBP text=o texthl=WarningMsg
- sign define vimspectorBPCond text=o? texthl=WarningMsg
- sign define vimspectorBPDisabled text=o! texthl=LineNr
- sign define vimspectorPC text=\ > texthl=MatchParen
- sign define vimspectorPCBP text=o> texthl=MatchParen
-<
--------------------------------------------------------------------------------
- *vimspector-sign-priority*
-Sign priority ~
-
-Many different plugins provide signs for various purposes. Examples include
-diagnostic signs for code errors, etc. Vim provides only a single priority to
-determine which sign should be displayed when multiple signs are placed at a
-single line. If you are finding that other signs are interfering with
-vimspector's (or vice-versa), you can customise the priority used by vimspector
-by setting the following dictionary:
->
- let g:vimspector_sign_priority = {
- \ '': ,
- \ }
-<
-For example:
->
- let g:vimspector_sign_priority = {
- \ 'vimspectorBP': 3,
- \ 'vimspectorBPCond': 2,
- \ 'vimspectorBPDisabled': 1,
- \ 'vimspectorPC': 999,
- \ }
-<
-All keys are optional. If a sign is not customised, the default priority it
-used (as shown above).
-
-See ':help sign-priority'. The default priority is 10, larger numbers override
-smaller ones.
-
--------------------------------------------------------------------------------
- *vimspector-changing-default-window-sizes*
-Changing the default window sizes ~
-
-**_Please Note_**: This customisation API is **_unstable_**, meaning that it
-may change at any time. I will endeavour to reduce the impact of this and
-announce changes in Gitter.
-
-The following options control the default sizes of the UI windows (all of them
-are numbers)
-
-- 'g:vimspector_sidebar_width' (default: 50 columns): The width in columns of
- the left utility windows (variables, watches, stack trace)
-
-- 'g:vimspector_bottombar_height' (default 10 lines): The height in rows of
- the output window below the code window.
-
-Example:
->
- let g:vimspector_sidebar_width = 75
- let g:vimspector_bottombar_height = 15
-<
--------------------------------------------------------------------------------
- *vimspector-changing-terminal-size*
-Changing the terminal size ~
-
-The terminal is typically created as a vertical split to the right of the code
-window, and that window is re-used for subsequent terminal buffers. The
-following control the sizing of the terminal window used for debuggee
-input/output when using Vim's built-in terminal.
-
-- 'g:vimspector_code_minwidth' (default: 82 columns): Minimum number of
- columns to try and maintain for the code window when splitting to create
- the terminal window.
-
-- 'g:vimspector_terminal_maxwidth' (default: 80 columns): Maximum number of
- columns to use for the terminal.
-
-- 'g:vimspector_terminal_minwidth' (default: 10 columns): Minimum number of
- columns to use when it is not possible to fit
- 'g:vimspector_terminal_maxwidth' columns for the terminal.
-
-That's a lot of options, but essentially we try to make sure that there are at
-least 'g:vimspector_code_minwidth' columns for the main code window and that
-the terminal is no wider than 'g:vimspector_terminal_maxwidth' columns.
-'g:vimspector_terminal_minwidth' is there to ensure that there's a reasonable
-number of columns for the terminal even when there isn't enough horizontal
-space to satisfy the other constraints.
-
-Example:
->
- let g:vimspector_code_minwidth = 90
- let g:vimspector_terminal_maxwidth = 75
- let g:vimspector_terminal_minwidth = 20
-<
--------------------------------------------------------------------------------
- *vimspector-custom-mappings-while-debugging*
-Custom mappings while debugging ~
-
-It's useful to be able to define mappings only while debugging and remove those
-mappings when debugging is complete. For this purpose, Vimspector provides 2
-'User' autocommands:
-
-- 'VimspectorJumpedToFrame' - triggered whenever a 'break' event happens, or
- when selecting a stack from to jump to. This can be used to create (for
- example) buffer-local mappings for any files opened in the code window.
-
-- 'VimspectorDebugEnded' - triggered when the debug session is terminated
- (actually when Vimspector is fully reset)
-
-An example way to use this is included in 'support/custom_ui_vimrc'. In there,
-these autocommands are used to create buffer-local mappings for any files
-visited while debugging and to clear them when completing debugging. This is
-particularly useful for commands like 'VimspectorBalloonEval' which only
-make sense while debugging (and only in the code window). Check the commented
-section 'Custom mappings while debugging'.
-
-NOTE: This is a fairly advanced feature requiring some nontrivial vimscript.
-It's possible that this feature will be incorporated into Vimspector in future
-as it is a common requirement.
-
--------------------------------------------------------------------------------
- *vimspector-advanced-ui-customisation*
-Advanced UI customisation ~
-
-**_Please Note_**: This customisation API is **_unstable_**, meaning that it
-may change at any time. I will endeavour to reduce the impact of this and
-announce changes in Gitter.
-
-The above customisation of window sizes is limited intentionally to keep things
-simple. Vimspector also provides a way for you to customise the UI without
-restrictions, by running a 'User' autocommand just after creating the UI or
-opening the terminal. This requires you to write some vimscript, but allows you
-to do things like:
-
-- Hide a particular window or windows
-- Move a particular window or windows
-- Resize windows
-- Have multiple windows for a particular buffer (say, you want 2 watch
- windows)
-- etc.
-
-You can essentially do anything you could do manually by writing a little
-vimscript code.
-
-The 'User' autocommand is raised with 'pattern' set with the following values:
-
-- 'VimspectorUICreated': Just after setting up the UI for a debug session
-- 'VimspectorTerminalOpened': Just after opening the terminal window for
- program input/output.
-
-The following global variable is set up for you to get access to the UI
-elements: 'g:vimspector_session_windows'. This is a 'dict' with the following
-keys:
-
-- 'g:vimspector_session_windows.tagpage': The tab page for the session
-- 'g:vimspector_session_windows.variables': Window ID of the variables
- window, containing the 'vimspector.Variables' buffer.
-- 'g:vimspector_session_windows.watches': Window ID of the watches window,
- containing the 'vimspector.Watches' buffer.
-- 'g:vimspector_session_windows.stack_trace': Window ID of the stack trade
- window containing the 'vimspector.StackTrace' buffer.
-- 'g:vimspector_session_windows.code': Window ID of the code window.
-- 'g:vimspector_session_windows.output': Window ID of the output window.
-
-In addition, the following key is added when triggering the
-'VimspectorTerminalOpened' event:
-
-- 'g:vimspector_session_windows.terminal': Window ID of the terminal window
-
--------------------------------------------------------------------------------
- *vimspector-customising-winbar*
-Customising the WinBar ~
-
-You can even customise the WinBar buttons by simply running the usual 'menu'
-(and 'unmenu') commands.
-
-By default, Vimspector uses something a bit like this:
->
- nnoremenu WinBar.■\ Stop :call vimspector#Stop( { 'interactive': v:false } )
- nnoremenu WinBar.▶\ Cont :call vimspector#Continue()
- nnoremenu WinBar.▷\ Pause :call vimspector#Pause()
- nnoremenu WinBar.↷\ Next :call vimspector#StepOver()
- nnoremenu WinBar.→\ Step :call vimspector#StepInto()
- nnoremenu WinBar.←\ Out :call vimspector#StepOut()
- nnoremenu WinBar.⟲: :call vimspector#Restart()
- nnoremenu WinBar.✕ :call vimspector#Reset( { 'interactive': v:false } )
-<
-If you prefer a different layout or if the unicode symbols don't render
-correctly in your font, you can customise this in the 'VimspectorUICreated'
-autocommand, for example:
->
- func! CustomiseUI()
- call win_gotoid( g:vimspector_session_windows.code )
- " Clear the existing WinBar created by Vimspector
- nunmenu WinBar
- " Cretae our own WinBar
- nnoremenu WinBar.Kill :call vimspector#Stop( { 'interactive': v:true } )
- nnoremenu WinBar.Continue :call vimspector#Continue()
- nnoremenu WinBar.Pause :call vimspector#Pause()
- nnoremenu WinBar.Step\ Over :call vimspector#StepOver()
- nnoremenu WinBar.Step\ In :call vimspector#StepInto()
- nnoremenu WinBar.Step\ Out :call vimspector#StepOut()
- nnoremenu WinBar.Restart :call vimspector#Restart()
- nnoremenu WinBar.Exit :call vimspector#Reset()
- endfunction
-
- augroup MyVimspectorUICustomistaion
- autocmd!
- autocmd User VimspectorUICreated call s:CustomiseUI()
- augroup END
-<
--------------------------------------------------------------------------------
- *vimspector-example*
-Example ~
-
-There is some example code in 'support/custom_ui_vimrc' showing how you can use
-the window IDs to modify various aspects of the UI using some basic vim
-commands, primarily 'win_gotoid' function and the 'wincmd' ex command.
-
-To try this out 'vim -Nu support/custom_ui_vimrc '.
-
-Here's a rather smaller example. A simple way to use this is to drop it into a
-file named 'my_vimspector_ui.vim' in '~/.vim/plugin' (or paste into your
-'vimrc'):
->
- " Set the basic sizes
- let g:vimspector_sidebar_width = 80
- let g:vimspector_code_minwidth = 85
- let g:vimspector_terminal_minwidth = 75
-
- function! s:CustomiseUI()
- " Customise the basic UI...
-
- " Close the output window
- call win_gotoid( g:vimspector_session_windows.output )
- q
- endfunction
-
- function s:SetUpTerminal()
- " Customise the terminal window size/position
- " For some reasons terminal buffers in Neovim have line numbers
- call win_gotoid( g:vimspector_session_windows.terminal )
- set norelativenumber nonumber
- endfunction
-
- augroup MyVimspectorUICustomistaion
- autocmd!
- autocmd User VimspectorUICreated call s:CustomiseUI()
- autocmd User VimspectorTerminalOpened call s:SetUpTerminal()
- augroup END
-<
-===============================================================================
- *vimspector-faq*
-FAQ ~
-
-1. Q: Does it work? A: Yeah. It's a bit unpolished.
-
-2. Q: Does it work with _this_ language? A: Probably, but it won't
- necessarily be easy to work out what to put in the '.vimspector.json'. As
- you can see above, some of the servers aren't really editor agnostic, and
- require very-specific unique handling.
-
-3. How do I stop it starting a new Terminal.app on macOS? See this comment
- [49]
-
-4. Can I specify answers to the annoying questions about exception
- breakpoints in my '.vimspector.json' ? Yes, see here [23].
-
-5. Do I have to specify the file to execute in '.vimspector.json', or could
- it be the current vim file? You don't need to. You can specify $file for
- the current active file. See here [20] for complete list of replacements
- in the configuration file.
-
-6. You allow comments in '.vimspector.json', but Vim highlights these as
- errors, do you know how to make this not-an-error? Yes, put this in
- '~/.vim/after/syntax/json.vim':
->
- syn region jsonComment start="/\*" end="\*/"
- hi link jsonCommentError Comment
- hi link jsonComment Comment
-<
-1. What is the difference between a 'gadget' and an 'adapter'? A gadget is
- something you install with ':VimspectorInstall' or 'install_gadget.py',
- an 'adapter' is something that Vimspector talks to (actually it's the
- Vimspector config describing that thing). These are _usually_ one-to-one,
- but in theory a single gadget can supply multiple 'adapter' configs.
- Typically this happens when a 'gadget' supplies different 'adapter'
- config for, say remote debugging, or debugging in a container, etc.
-
-2. The signs and winbar display funny symbols. How do I fix them? See this
- and this
-
-3. What's this telemetry stuff all about? Are you sending my data to evil
- companies? Debug adapters (for some reason) send telemetry data to
- clients. Vimspector simply displays this information in the output
- window. It _does not_ and _will not ever_ collect, use, forward or
- otherwise share any data with any third parties.
-
-===============================================================================
- *vimspector-references*
-References ~
-
-[1] https://puremourning.github.io/vimspector-web/
-[2] https://puremourning.github.io/vimspector/configuration.html
-[3] https://github.com/puremourning/vimspector/workflows/Build/badge.svg?branch=master
-[4] https://gitter.im/vimspector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge
-[5] https://badges.gitter.im/vimspector/Lobby.svg
-[6] https://puremourning.github.io/vimspector-web/img/vimspector-overview.png
-[7] https://asciinema.org/a/VmptWmFHTNLPfK3DVsrR2bv8S
-[8] https://asciinema.org/a/VmptWmFHTNLPfK3DVsrR2bv8S.svg
-[9] https://asciinema.org/a/1wZJSoCgs3AvjkhKwetJOJhDh
-[10] https://asciinema.org/a/1wZJSoCgs3AvjkhKwetJOJhDh.svg
-[11] https://github.com/go-delve/delve
-[12] https://github.com/puremourning/vimspector/wiki/languages
-[13] https://asciinema.org/a/Hfu4ZvuyTZun8THNen9FQbTay
-[14] https://asciinema.org/a/Hfu4ZvuyTZun8THNen9FQbTay.svg
-[15] https://trello.com/b/yvAKK0rD/vimspector
-[16] http://www.apache.org/licenses/LICENSE-2.0
-[17] https://greyhoundrescuewales.co.uk
-[18] https://www.cancerresearchuk.org
-[19] https://iccf.nl
-[20] https://puremourning.github.io/vimspector/configuration.html#replacements-and-variables
-[21] https://puremourning.github.io/vimspector/configuration.html#configuration-selection
-[22] €mappings
-[23] https://puremourning.github.io/vimspector/configuration.html#exception-breakpoints
-[24] https://puremourning.github.io/vimspector-web/img/vimspector-code-window.png
-[25] https://puremourning.github.io/vimspector-web/img/vimspector-locals-window.png
-[26] https://puremourning.github.io/vimspector-web/img/vimspector-variable-eval-hover.png
-[27] https://puremourning.github.io/vimspector-web/img/vimspector-watch-window.png
-[28] https://puremourning.github.io/vimspector-web/img/vimspector-callstack-window.png
-[29] https://puremourning.github.io/vimspector-web/img/vimspector-output-window.png
-[30] https://github.com/Microsoft/vscode-cpptools
-[31] https://puremourning.github.io/vimspector/configuration.html#remote-debugging-support
-[32] https://github.com/vadimcn/vscode-lldb#features
-[33] https://github.com/microsoft/debugpy
-[34] https://github.com/microsoft/debugpy#debugpy-cli-usage
-[35] https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
-[36] https://github.com/microsoft/debugpy/wiki/Debugging-over-SSH
-[37] https://github.com/Microsoft/vscode-python
-[38] https://github.com/puremourning/vimspector/issues/105
-[39] https://github.com/puremourning/TclProDebug
-[40] https://github.com/go-delve/delve/tree/master/Documentation/installation
-[41] https://github.com/golang/vscode-go/blob/master/docs/debugging.md#troubleshooting
-[42] https://github.com/Microsoft/java-debug
-[43] https://github.com/ycm-core/YouCompleteMe#java-semantic-completion
-[44] https://github.com/ycm-core/YouCompleteMe#troubleshooting
-[45] https://code.visualstudio.com/docs/java/java-debugging
-[46] https://github.com/puremourning/vimspector/issues/3
-[47] https://github.com/tomblind/local-lua-debugger-vscode
-[48] https://github.com/puremourning/vimspector/issues/3#issuecomment-576916076
-[49] https://github.com/puremourning/vimspector/issues/90#issuecomment-577857322
-
-vim: ft=help
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
index acf20f2..d2eb55f 100644
--- a/docs/Gemfile.lock
+++ b/docs/Gemfile.lock
@@ -1,13 +1,13 @@
GEM
remote: https://rubygems.org/
specs:
- activesupport (6.0.3.6)
+ activesupport (6.0.3.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
- addressable (2.8.0)
+ addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
coffee-script (2.4.1)
coffee-script-source
@@ -16,7 +16,7 @@ GEM
colorator (1.1.0)
commonmarker (0.17.13)
ruby-enum (~> 0.5)
- concurrent-ruby (1.1.8)
+ concurrent-ruby (1.1.7)
dnsruby (1.61.5)
simpleidn (~> 0.1)
em-websocket (0.5.2)
@@ -30,12 +30,12 @@ GEM
faraday-net_http (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords
- faraday-net_http (1.0.1)
- ffi (1.15.0)
+ faraday-net_http (1.0.0)
+ ffi (1.14.2)
forwardable-extended (2.6.0)
gemoji (3.0.1)
- github-pages (214)
- github-pages-health-check (= 1.17.0)
+ github-pages (209)
+ github-pages-health-check (= 1.16.1)
jekyll (= 3.9.0)
jekyll-avatar (= 0.7.0)
jekyll-coffeescript (= 1.1.1)
@@ -50,9 +50,9 @@ GEM
jekyll-readme-index (= 0.3.0)
jekyll-redirect-from (= 0.16.0)
jekyll-relative-links (= 0.6.1)
- jekyll-remote-theme (= 0.4.3)
+ jekyll-remote-theme (= 0.4.2)
jekyll-sass-converter (= 1.5.2)
- jekyll-seo-tag (= 2.7.1)
+ jekyll-seo-tag (= 2.6.1)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.1.1)
@@ -70,19 +70,19 @@ GEM
jekyll-theme-time-machine (= 0.1.1)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.12.0)
- kramdown (= 2.3.1)
+ kramdown (= 2.3.0)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.3)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.10.4, < 2.0)
- rouge (= 3.26.0)
+ rouge (= 3.23.0)
terminal-table (~> 1.4)
- github-pages-health-check (1.17.0)
+ github-pages-health-check (1.16.1)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (~> 4.0)
- public_suffix (>= 2.0.2, < 5.0)
+ public_suffix (~> 3.0)
typhoeus (~> 1.3)
html-pipeline (2.14.0)
activesupport (>= 2)
@@ -136,15 +136,15 @@ GEM
jekyll (>= 3.3, < 5.0)
jekyll-relative-links (0.6.1)
jekyll (>= 3.3, < 5.0)
- jekyll-remote-theme (0.4.3)
+ jekyll-remote-theme (0.4.2)
addressable (~> 2.0)
jekyll (>= 3.5, < 5.0)
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
- jekyll-seo-tag (2.7.1)
- jekyll (>= 3.8, < 5.0)
+ jekyll-seo-tag (2.6.1)
+ jekyll (>= 3.3, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-swiss (1.0.0)
@@ -196,23 +196,23 @@ GEM
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
- kramdown (2.3.1)
+ kramdown (2.3.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
- listen (3.5.1)
+ listen (3.4.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
- mini_portile2 (2.5.1)
+ mini_portile2 (2.5.0)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
- minitest (5.14.4)
+ minitest (5.14.3)
multipart-post (2.1.1)
- nokogiri (1.11.5)
+ nokogiri (1.11.1)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
octokit (4.20.0)
@@ -220,16 +220,16 @@ GEM
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
- public_suffix (4.0.6)
+ public_suffix (3.1.1)
racc (1.5.2)
rb-fsevent (0.10.4)
rb-inotify (0.10.1)
ffi (~> 1.0)
- rexml (3.2.5)
- rouge (3.26.0)
- ruby-enum (0.9.0)
+ rexml (3.2.4)
+ rouge (3.23.0)
+ ruby-enum (0.8.0)
i18n
- ruby2_keywords (0.0.4)
+ ruby2_keywords (0.0.2)
rubyzip (2.3.0)
safe_yaml (1.0.5)
sass (3.7.4)
@@ -240,7 +240,7 @@ GEM
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
- simpleidn (0.2.1)
+ simpleidn (0.1.1)
unf (~> 0.1.4)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
diff --git a/docs/configuration.md b/docs/configuration.md
index 3d524bf..e736985 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -271,7 +271,7 @@ JSON value `true`, and the suffix is stripped fom the key, resulting in the
following:
```json
- "stopOnEntry": true
+ "stopOnEntry#json": true
```
Which is what we need.
@@ -722,7 +722,7 @@ Vimspector then orchestrates the various tools to set you up.
"variables": {
// Just an example of how to specify a variable manually rather than
// vimspector asking for input from the user
- "ServiceName": "${fileBasenameNoExtension}"
+ "ServiceName": "${fileBasenameNoExtention}"
},
"adapter": "python-remote",
diff --git a/plugin/vimspector.vim b/plugin/vimspector.vim
index 2668bf1..37509a7 100644
--- a/plugin/vimspector.vim
+++ b/plugin/vimspector.vim
@@ -13,13 +13,6 @@
" See the License for the specific language governing permissions and
" limitations under the License.
-if !has( 'python3' )
- echohl WarningMsg
- echom 'Vimspector unavailable: Requires Vim compiled with +python3'
- echohl None
- finish
-endif
-
" Boilerplate {{{
let s:save_cpo = &cpoptions
set cpoptions&vim
@@ -42,8 +35,6 @@ let s:mappings = get( g:, 'vimspector_enable_mappings', '' )
nnoremap VimspectorContinue
\ :call vimspector#Continue()
-nnoremap VimspectorLaunch
- \ :call vimspector#Launch( v:true )
nnoremap VimspectorStop
\ :call vimspector#Stop()
nnoremap VimspectorRestart
@@ -93,7 +84,6 @@ if s:mappings ==# 'VISUAL_STUDIO'
nmap VimspectorStepOut
elseif s:mappings ==# 'HUMAN'
nmap VimspectorContinue
- nmap VimspectorLaunch
nmap VimspectorStop
nmap VimspectorRestart
nmap VimspectorPause
@@ -115,9 +105,6 @@ command! -bar -nargs=? -complete=custom,vimspector#CompleteOutput
command! -bar
\ VimspectorToggleLog
\ call vimspector#ToggleLog()
-command! -bar
- \ VimspectorDebugInfo
- \ call vimspector#PrintDebugInfo()
command! -nargs=1 -complete=custom,vimspector#CompleteExpr
\ VimspectorEval
\ call vimspector#Evaluate( )
diff --git a/python3/vimspector/custom/java.py b/python3/vimspector/custom/java.py
deleted file mode 100644
index c2a2264..0000000
--- a/python3/vimspector/custom/java.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# vimspector - A multi-language debugging system for Vim
-# Copyright 2021 Ben Jackson
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from vimspector.debug_session import DebugSession
-from vimspector import utils, settings
-
-
-class JavaDebugAdapter( object ):
- def __init__( self, debug_session: DebugSession ):
- self.debug_session = debug_session
-
- def OnEvent_hotcodereplace( self, message ):
- # Hack for java debug server hot-code-replace
- body = message.get( 'body' ) or {}
-
- if body.get( 'type' ) != 'hotcodereplace':
- return
-
- if body.get( 'changeType' ) == 'BUILD_COMPLETE':
- def handler( result ):
- if result == 1:
- self.debug_session._connection.DoRequest( None, {
- 'command': 'redefineClasses',
- 'arguments': {},
- } )
-
- mode = settings.Get( 'java_hotcodereplace_mode' )
- if mode == 'ask':
- utils.Confirm( self.debug_session._api_prefix,
- 'Code has changed, hot reload?',
- handler,
- default_value = 1 )
- elif mode == 'always':
- self.debug_session._connection.DoRequest( None, {
- 'command': 'redefineClasses',
- 'arguments': {},
- } )
- elif body.get( 'message' ):
- utils.UserMessage( 'Hot code replace: ' + body[ 'message' ] )
diff --git a/python3/vimspector/debug_adapter_connection.py b/python3/vimspector/debug_adapter_connection.py
index 206938a..283c40c 100644
--- a/python3/vimspector/debug_adapter_connection.py
+++ b/python3/vimspector/debug_adapter_connection.py
@@ -29,14 +29,14 @@ class PendingRequest( object ):
class DebugAdapterConnection( object ):
- def __init__( self, handlers, send_func ):
+ def __init__( self, handler, send_func ):
self._logger = logging.getLogger( __name__ )
utils.SetUpLogging( self._logger )
self._Write = send_func
self._SetState( 'READ_HEADER' )
self._buffer = bytes()
- self._handlers = handlers
+ self._handler = handler
self._next_message_id = 0
self._outstanding_requests = {}
@@ -124,7 +124,7 @@ class DebugAdapterConnection( object ):
def Reset( self ):
self._Write = None
- self._handlers = None
+ self._handler = None
while self._outstanding_requests:
_, request = self._outstanding_requests.popitem()
@@ -226,12 +226,7 @@ class DebugAdapterConnection( object ):
# self._logger.debug( 'Message received (raw): %s', payload )
- try:
- message = json.loads( payload, strict = False )
- except Exception:
- self._logger.exception( "Invalid message received: %s", payload )
- self._SetState( 'READ_HEADER' )
- raise
+ message = json.loads( payload )
self._logger.debug( 'Message received: {0}'.format( message ) )
@@ -242,7 +237,7 @@ class DebugAdapterConnection( object ):
def _OnMessageReceived( self, message ):
- if not self._handlers:
+ if not self._handler:
return
if message[ 'type' ] == 'response':
@@ -275,21 +270,25 @@ class DebugAdapterConnection( object ):
self._logger.error( 'Request failed: {0}'.format( reason ) )
if request.failure_handler:
request.failure_handler( reason, message )
+ elif 'OnFailure' in dir( self._handler ):
+ self._handler.OnFailure( reason, request.msg, message )
else:
- for h in self._handlers:
- if 'OnFailure' in dir( h ):
- h.OnFailure( reason, request.msg, message )
-
+ utils.UserMessage( 'Request failed: {0}'.format( reason ) )
elif message[ 'type' ] == 'event':
method = 'OnEvent_' + message[ 'event' ]
- for h in self._handlers:
- if method in dir( h ):
- getattr( h, method )( message )
+ if method in dir( self._handler ):
+ getattr( self._handler, method )( message )
+ else:
+ utils.UserMessage( 'Unhandled event: {0}'.format( message[ 'event' ] ),
+ persist = True )
elif message[ 'type' ] == 'request':
method = 'OnRequest_' + message[ 'command' ]
- for h in self._handlers:
- if method in dir( h ):
- getattr( h, method )( message )
+ if method in dir( self._handler ):
+ getattr( self._handler, method )( message )
+ else:
+ utils.UserMessage(
+ 'Unhandled request: {0}'.format( message[ 'command' ] ),
+ persist = True )
def _KillTimer( request ):
diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py
index 36ad62b..4d8c816 100644
--- a/python3/vimspector/debug_session.py
+++ b/python3/vimspector/debug_session.py
@@ -21,7 +21,6 @@ import shlex
import subprocess
import functools
import vim
-import importlib
from vimspector import ( breakpoints,
code,
@@ -100,7 +99,7 @@ class DebugSession( object ):
return launch_config_file, configurations
- def Start( self, force_choose=False, launch_variables = None ):
+ def Start( self, launch_variables = None ):
# We mutate launch_variables, so don't mutate the default argument.
# https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments
if launch_variables is None:
@@ -135,11 +134,6 @@ class DebugSession( object ):
if 'configuration' in launch_variables:
configuration_name = launch_variables.pop( 'configuration' )
- elif force_choose:
- # Always display the menu
- configuration_name = utils.SelectFromList(
- 'Which launch configuration?',
- sorted( configurations.keys() ) )
elif ( len( configurations ) == 1 and
next( iter( configurations.values() ) ).get( "autoselect", True ) ):
configuration_name = next( iter( configurations.keys() ) )
@@ -894,21 +888,8 @@ class DebugSession( object ):
self._splash_screen,
"Unable to start adapter" )
else:
- if 'custom_handler' in self._adapter:
- spec = self._adapter[ 'custom_handler' ]
- if isinstance( spec, dict ):
- module = spec[ 'module' ]
- cls = spec[ 'class' ]
- else:
- module, cls = spec.rsplit( '.', 1 )
-
- CustomHandler = getattr( importlib.import_module( module ), cls )
- handlers = [ CustomHandler( self ), self ]
- else:
- handlers = [ self ]
-
self._connection = debug_adapter_connection.DebugAdapterConnection(
- handlers,
+ self,
lambda msg: utils.Call(
"vimspector#internal#{}#Send".format( self._connection_type ),
msg ) )
@@ -916,58 +897,39 @@ class DebugSession( object ):
self._logger.info( 'Debug Adapter Started' )
def _StopDebugAdapter( self, interactive = False, callback = None ):
+ self._splash_screen = utils.DisplaySplash(
+ self._api_prefix,
+ self._splash_screen,
+ "Shutting down debug adapter..." )
+
+ def handler( *args ):
+ self._splash_screen = utils.HideSplash( self._api_prefix,
+ self._splash_screen )
+
+ if callback:
+ self._logger.debug( "Setting server exit handler before disconnect" )
+ assert not self._run_on_server_exit
+ self._run_on_server_exit = callback
+
+ vim.eval( 'vimspector#internal#{}#StopDebugSession()'.format(
+ self._connection_type ) )
+
arguments = {}
-
- def disconnect():
- self._splash_screen = utils.DisplaySplash(
- self._api_prefix,
- self._splash_screen,
- "Shutting down debug adapter..." )
-
- def handler( *args ):
- self._splash_screen = utils.HideSplash( self._api_prefix,
- self._splash_screen )
-
- if callback:
- self._logger.debug( "Setting server exit handler before disconnect" )
- assert not self._run_on_server_exit
- self._run_on_server_exit = callback
-
- vim.eval( 'vimspector#internal#{}#StopDebugSession()'.format(
- self._connection_type ) )
-
- self._connection.DoRequest( handler, {
- 'command': 'disconnect',
- 'arguments': arguments,
- }, failure_handler = handler, timeout = 5000 )
-
- if not interactive:
- disconnect()
- elif not self._server_capabilities.get( 'supportTerminateDebuggee' ):
- disconnect()
- elif not self._stackTraceView.AnyThreadsRunning():
- disconnect()
- else:
- def handle_choice( choice ):
- if choice == 1:
- # yes
+ if ( interactive and
+ self._server_capabilities.get( 'supportTerminateDebuggee' ) ):
+ if self._stackTraceView.AnyThreadsRunning():
+ choice = utils.AskForInput( "Terminate debuggee [Y/N/default]? ", "" )
+ if choice == "Y" or choice == "y":
arguments[ 'terminateDebuggee' ] = True
- elif choice == 2:
- # no
+ elif choice == "N" or choice == 'n':
arguments[ 'terminateDebuggee' ] = False
- elif choice <= 0:
- # Abort
- return
- # Else, use server default
- disconnect()
+ self._connection.DoRequest( handler, {
+ 'command': 'disconnect',
+ 'arguments': arguments,
+ }, failure_handler = handler, timeout = 5000 )
- utils.Confirm( self._api_prefix,
- "Terminate debuggee?",
- handle_choice,
- default_value = 3,
- options = [ '(Y)es', '(N)o', '(D)efault' ],
- keys = [ 'y', 'n', 'd' ] )
+ # TODO: Use the 'tarminate' request if supportsTerminateRequest set
def _PrepareAttach( self, adapter_config, launch_config ):
@@ -1270,37 +1232,6 @@ class DebugSession( object ):
self._stackTraceView.LoadThreads( True )
- @IfConnected()
- @RequiresUI()
- def PrintDebugInfo( self ):
- def Line():
- return ( "--------------------------------------------------------------"
- "------------------" )
-
- def Pretty( obj ):
- if obj is None:
- return [ "None" ]
- return [ Line() ] + json.dumps( obj, indent=2 ).splitlines() + [ Line() ]
-
-
- debugInfo = [
- "Vimspector Debug Info",
- Line(),
- f"ConnectionType: { self._connection_type }",
- "Adapter: " ] + Pretty( self._adapter ) + [
- "Configuration: " ] + Pretty( self._configuration ) + [
- f"API Prefix: { self._api_prefix }",
- f"Launch/Init: { self._launch_complete } / { self._init_complete }",
- f"Workspace Root: { self._workspace_root }",
- "Launch Config: " ] + Pretty( self._launch_config ) + [
- "Server Capabilities: " ] + Pretty( self._server_capabilities ) + [
- ]
-
- self._outputView.ClearCategory( 'DebugInfo' )
- self._outputView.Print( "DebugInfo", debugInfo )
- self.ShowOutput( "DebugInfo" )
-
-
def OnEvent_loadedSource( self, msg ):
pass
diff --git a/python3/vimspector/gadgets.py b/python3/vimspector/gadgets.py
index 02eb0e7..d1b6872 100644
--- a/python3/vimspector/gadgets.py
+++ b/python3/vimspector/gadgets.py
@@ -30,12 +30,12 @@ GADGETS = {
root,
gadget ),
'all': {
- 'version': '1.6.0',
+ 'version': '0.27.0',
"adapters": {
"vscode-cpptools": {
"name": "cppdbg",
"command": [
- "${gadgetDir}/vscode-cpptools/debugAdapters/bin/OpenDebugAD7"
+ "${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
],
"attach": {
"pidProperty": "processId",
@@ -53,17 +53,17 @@ GADGETS = {
'linux': {
'file_name': 'cpptools-linux.vsix',
'checksum':
- 'c25299bcfb46b22d41aa3f125df7184e6282a35ff9fb69c47def744cb4778f55',
+ '3695202e1e75a03de18049323b66d868165123f26151f8c974a480eaf0205435',
},
'macos': {
- 'file_name': 'cpptools-osx-arm64.vsix',
+ 'file_name': 'cpptools-osx.vsix',
'checksum':
- 'ceb3e8cdaa2b5bb45af50913ddd8402089969748af8d70f5d46480408287ba6f',
+ 'cb061e3acd7559a539e5586f8d3f535101c4ec4e8a48195856d1d39380b5cf3c',
},
'windows': {
'file_name': 'cpptools-win32.vsix',
'checksum':
- 'ef7ac5831874a3c7dbf0feb826bfda2be579aff9b6d990622fff1d0d4ede00d1',
+ 'aa294368ed16d48c59e49c8000e146eae5a19ad07b654efed5db8ec93b24229e',
"adapters": {
"vscode-cpptools": {
"name": "cppdbg",
@@ -86,6 +86,29 @@ GADGETS = {
},
},
},
+ 'vscode-python': {
+ 'language': 'python.legacy',
+ 'enabled': False,
+ 'download': {
+ 'url': 'https://github.com/Microsoft/vscode-python/releases/download/'
+ '${version}/${file_name}',
+ },
+ 'all': {
+ 'version': '2019.11.50794',
+ 'file_name': 'ms-python-release.vsix',
+ 'checksum':
+ '6a9edf9ecabed14aac424e6007858068204a3638bf3bb4f235bd6035d823acc6',
+ },
+ 'adapters': {
+ "vscode-python": {
+ "name": "vscode-python",
+ "command": [
+ "node",
+ "${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js",
+ ],
+ }
+ },
+ },
'debugpy': {
'language': 'python',
'download': {
@@ -136,8 +159,7 @@ GADGETS = {
"port": "${DAPPort}",
"configuration": {
"cwd": "${workspaceRoot}"
- },
- 'custom_handler': 'vimspector.custom.java.JavaDebugAdapter'
+ }
}
},
},
@@ -211,15 +233,15 @@ GADGETS = {
'format': 'tar',
},
'all': {
- 'version': '1.2.0-782'
+ 'version': '1.2.0-635'
},
'macos': {
'file_name': 'netcoredbg-osx.tar.gz',
'checksum':
- '',
+ '71c773e34d358950f25119bade7e3081c4c2f9d71847bd49027ca5792e918beb',
},
'linux': {
- 'file_name': 'netcoredbg-linux-bionic-amd64.tar.gz',
+ 'file_name': 'netcoredbg-linux-bionic.tar.gz',
'checksum': '',
},
'windows': {
@@ -246,6 +268,41 @@ GADGETS = {
},
}
},
+ 'vscode-mono-debug': {
+ 'language': 'csharp',
+ 'enabled': False,
+ 'download': {
+ 'url': 'https://marketplace.visualstudio.com/_apis/public/gallery/'
+ 'publishers/ms-vscode/vsextensions/mono-debug/${version}/'
+ 'vspackage',
+ 'target': 'vscode-mono-debug.vsix.gz',
+ 'format': 'zip.gz',
+ },
+ 'all': {
+ 'file_name': 'vscode-mono-debug.vsix',
+ 'version': '0.16.2',
+ 'checksum':
+ '121eca297d83daeeb1e6e1d791305d1827998dbd595c330086b3b94d33dba3b9',
+ },
+ 'adapters': {
+ 'vscode-mono-debug': {
+ "name": "mono-debug",
+ "command": [
+ "mono",
+ "${gadgetDir}/vscode-mono-debug/bin/Release/mono-debug.exe"
+ ],
+ "attach": {
+ "pidSelect": "none"
+ },
+ "configuration": {
+ "cwd": "${workspaceRoot}",
+ "console": "integratedTerminal",
+ "args": [],
+ "env": {}
+ }
+ },
+ }
+ },
'vscode-bash-debug': {
'language': 'bash',
'download': {
@@ -323,10 +380,10 @@ GADGETS = {
'${version}/${file_name}',
},
'all': {
- 'version': 'v1.17.0',
- 'file_name': 'php-debug-1.17.0.vsix',
+ 'version': 'v1.14.9',
+ 'file_name': 'php-debug.vsix',
'checksum':
- 'd0fff272503414b6696cc737bc2e18e060fdd5e5dc4bcaf38ae7373afd8d8bc9',
+ '0c5709cbbffe26b12aa63a88142195a9a045a5d8fca7fe63d62c789fe601630d',
},
'adapters': {
'vscode-php-debug': {
@@ -394,12 +451,12 @@ GADGETS = {
'${version}/${file_name}',
},
'all': {
- 'version': 'v1.6.6',
+ 'version': 'v1.5.3',
},
'macos': {
- 'file_name': 'codelldb-aarch64-darwin.vsix',
+ 'file_name': 'codelldb-x86_64-darwin.vsix',
'checksum':
- '5adc3b9139eabdafd825bd5efc55df4424a203fb2b6087b425cd434956e7ec58',
+ '7505bc1cdfcfd1cb981e2996aec62d63577440709bac31dcadb41a3b4b44631a',
'make_executable': [
'adapter/codelldb',
'lldb/bin/debugserver',
@@ -410,7 +467,7 @@ GADGETS = {
'linux': {
'file_name': 'codelldb-x86_64-linux.vsix',
'checksum':
- 'eda2cd9b3089dcc0524c273e91ffb5875fe08c930bf643739a2cd1846e1f98d6',
+ 'ce7efc3e94d775368e5942a02bf5c326b6809a0b4c389f79ffa6a8f6f6b72139',
'make_executable': [
'adapter/codelldb',
'lldb/bin/lldb',
@@ -421,7 +478,7 @@ GADGETS = {
'windows': {
'file_name': 'codelldb-x86_64-windows.vsix',
'checksum':
- '8ddebe8381a3d22dc3d95139c3797fda06b5cc34aadf300e13b1c516b9da95fe',
+ '',
'make_executable': []
},
'adapters': {
diff --git a/python3/vimspector/installer.py b/python3/vimspector/installer.py
index a81db8f..f0f85a4 100644
--- a/python3/vimspector/installer.py
+++ b/python3/vimspector/installer.py
@@ -358,8 +358,7 @@ def InstallCppTools( name, root, gadget ):
# It's hilarious, but the execute bits aren't set in the vsix. So they
# actually have javascript code which does this. It's just a horrible horrible
# hack that really is not funny.
- MakeExecutable(
- os.path.join( extension, 'debugAdapters', 'bin', 'OpenDebugAD7' ) )
+ MakeExecutable( os.path.join( extension, 'debugAdapters', 'OpenDebugAD7' ) )
with open( os.path.join( extension, 'package.json' ) ) as f:
package = json.load( f )
runtime_dependencies = package[ 'runtimeDependencies' ]
diff --git a/python3/vimspector/output.py b/python3/vimspector/output.py
index 3f0da1e..c453417 100644
--- a/python3/vimspector/output.py
+++ b/python3/vimspector/output.py
@@ -32,7 +32,6 @@ class TabBuffer( object ):
BUFFER_MAP = {
'console': 'Console',
'stdout': 'Console',
- 'output': 'Console',
'stderr': 'stderr',
'telemetry': None,
}
@@ -65,11 +64,8 @@ class OutputView( object ):
self._api_prefix = api_prefix
VIEWS.add( self )
- def Print( self, category, text: typing.Union[ str, list ] ):
- if not isinstance( text, list ):
- text = text.splitlines()
-
- self._Print( category, text )
+ def Print( self, categroy, text ):
+ self._Print( 'server', text.splitlines() )
def OnOutput( self, event ):
category = CategoryToBuffer( event.get( 'category' ) or 'output' )
@@ -108,26 +104,13 @@ class OutputView( object ):
def Clear( self ):
for category, tab_buffer in self._buffers.items():
- self._CleanUpBuffer( category, tab_buffer )
+ if tab_buffer.is_job:
+ utils.CleanUpCommand( category, self._api_prefix )
+ utils.CleanUpHiddenBuffer( tab_buffer.buf )
# FIXME: nunmenu the WinBar ?
self._buffers = {}
-
- def ClearCategory( self, category: str ):
- if category not in self._buffers:
- return
-
- self._CleanUpBuffer( category, self._buffers[ category ] )
-
-
- def _CleanUpBuffer( self, category: str, tab_buffer: TabBuffer ):
- if tab_buffer.is_job:
- utils.CleanUpCommand( category, self._api_prefix )
-
- utils.CleanUpHiddenBuffer( tab_buffer.buf )
-
-
def WindowIsValid( self ):
return self._window.valid
diff --git a/python3/vimspector/settings.py b/python3/vimspector/settings.py
index 89378af..e9e76ea 100644
--- a/python3/vimspector/settings.py
+++ b/python3/vimspector/settings.py
@@ -42,8 +42,7 @@ DEFAULTS = {
'vimspectorBP': 9,
'vimspectorBPCond': 9,
'vimspectorBPDisabled': 9,
- 'vimspectorCurrentThread': 200,
- 'vimspectorCurrentFrame': 200,
+ 'vimspectorCurrentThread': 200
},
# Installer
@@ -60,10 +59,7 @@ DEFAULTS = {
'expand_or_jump': [ '', '<2-LeftMouse>' ],
'focus_thread': [ '' ],
}
- },
-
- # Custom
- 'java_hotcodereplace_mode': 'ask',
+ }
}
diff --git a/python3/vimspector/stack_trace.py b/python3/vimspector/stack_trace.py
index 8b1d848..ae14e68 100644
--- a/python3/vimspector/stack_trace.py
+++ b/python3/vimspector/stack_trace.py
@@ -102,8 +102,7 @@ class StackTraceView( object ):
self._scratch_buffers = []
# FIXME: This ID is by group, so should be module scope
- self._current_thread_sign_id = 0 # 1 when used
- self._current_frame_sign_id = 0 # 2 when used
+ self._next_sign_id = 1
utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' )
utils.SetUpUIWindow( win )
@@ -128,7 +127,6 @@ class StackTraceView( object ):
':call vimspector#SetCurrentThread()' )
win.options[ 'cursorline' ] = False
- win.options[ 'signcolumn' ] = 'auto'
if not signs.SignDefined( 'vimspectorCurrentThread' ):
@@ -138,13 +136,6 @@ class StackTraceView( object ):
texthl = 'MatchParen',
linehl = 'CursorLine' )
- if not signs.SignDefined( 'vimspectorCurrentFrame' ):
- signs.DefineSign( 'vimspectorCurrentFrame',
- text = '▶ ',
- double_text = '▶',
- texthl = 'Special',
- linehl = 'CursorLine' )
-
self._line_to_frame = {}
self._line_to_thread = {}
@@ -166,12 +157,9 @@ class StackTraceView( object ):
self._sources = {}
self._requesting_threads = StackTraceView.ThreadRequestState.NO
self._pending_thread_request = None
- if self._current_thread_sign_id:
- signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
- self._current_thread_sign_id = 0
- if self._current_frame_sign_id:
- signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
- self._current_frame_sign_id = 0
+ if self._next_sign_id:
+ signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
+ self._next_sign_id = 0
with utils.ModifiableScratchBuffer( self._buf ):
utils.ClearBuffer( self._buf )
@@ -285,10 +273,10 @@ class StackTraceView( object ):
self._line_to_frame.clear()
self._line_to_thread.clear()
- if self._current_thread_sign_id:
- signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
+ if self._next_sign_id:
+ signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
else:
- self._current_thread_sign_id = 1
+ self._next_sign_id = 1
with utils.ModifiableScratchBuffer( self._buf ):
with utils.RestoreCursorPosition():
@@ -302,7 +290,7 @@ class StackTraceView( object ):
f'({thread.State()})' )
if self._current_thread == thread.id:
- signs.PlaceSign( self._current_thread_sign_id,
+ signs.PlaceSign( self._next_sign_id,
'VimspectorStackTrace',
'vimspectorCurrentThread',
self._buf.name,
@@ -433,7 +421,6 @@ class StackTraceView( object ):
# Should this set the current _Thread_ too ? If i jump to a frame in
# Thread 2, should that become the focussed thread ?
self._current_frame = frame
- self._DrawThreads()
return self._session.SetCurrentFrame( self._current_frame, reason )
return False
@@ -531,11 +518,6 @@ class StackTraceView( object ):
if not thread.IsExpanded():
return
- if self._current_frame_sign_id:
- signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
- else:
- self._current_frame_sign_id = 2
-
for frame in thread.stacktrace:
if frame.get( 'source' ):
source = frame[ 'source' ]
@@ -560,14 +542,6 @@ class StackTraceView( object ):
source[ 'name' ],
frame[ 'line' ] ) )
- if ( self._current_frame is not None and
- self._current_frame[ 'id' ] == frame[ 'id' ] ):
- signs.PlaceSign( self._current_frame_sign_id,
- 'VimspectorStackTrace',
- 'vimspectorCurrentFrame',
- self._buf.name,
- line )
-
self._line_to_frame[ line ] = ( thread, frame )
def _ResolveSource( self, source, and_then ):
diff --git a/python3/vimspector/utils.py b/python3/vimspector/utils.py
index 5f836fc..d8dd345 100644
--- a/python3/vimspector/utils.py
+++ b/python3/vimspector/utils.py
@@ -375,44 +375,6 @@ def AskForInput( prompt, default_value = None, completion = None ):
return None
-CONFIRM = {}
-CONFIRM_ID = 0
-
-
-def ConfirmCallback( confirm_id, result ):
- try:
- handler = CONFIRM.pop( confirm_id )
- except KeyError:
- UserMessage( f"Internal error: unexpected callback id { confirm_id }",
- persist = True,
- error = True )
- return
-
- handler( result )
-
-
-def Confirm( api_prefix,
- prompt,
- handler,
- default_value = 2,
- options: list = None,
- keys: list = None ):
- if not options:
- options = [ '(Y)es', '(N)o' ]
- if not keys:
- keys = [ 'y', 'n' ]
-
- global CONFIRM_ID
- CONFIRM_ID += 1
- CONFIRM[ CONFIRM_ID ] = handler
- Call( f'vimspector#internal#{ api_prefix }popup#Confirm',
- CONFIRM_ID,
- prompt,
- options,
- default_value,
- keys )
-
-
def AppendToBuffer( buf, line_or_lines, modified=False ):
line = 1
try:
@@ -441,10 +403,8 @@ def AppendToBuffer( buf, line_or_lines, modified=False ):
-def ClearBuffer( buf, modified = False ):
+def ClearBuffer( buf ):
buf[ : ] = None
- if not modified:
- buf.options[ 'modified' ] = False
def SetBufferContents( buf, lines, modified=False ):
diff --git a/run_tests b/run_tests
index 201ec1b..39dc7ec 100755
--- a/run_tests
+++ b/run_tests
@@ -21,7 +21,7 @@ out_fd=1
while [ -n "$1" ]; do
case "$1" in
- "--basedir"|"--base-dir"|"--test-base")
+ "--basedir")
shift
SetBaseDir $1
shift
@@ -36,7 +36,7 @@ while [ -n "$1" ]; do
INSTALL=$1
shift
;;
- "--update"|"--upgrade")
+ "--update")
UPDATE=1
shift
;;
@@ -91,8 +91,7 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "script" ]; then
if ! python3 $(dirname $0)/install_gadget.py \
--basedir ${BASEDIR} \
${INSTALLER_ARGS} \
- --all \
- --force-enable-csharp; then
+ --all; then
echo "Script installation reported errors" >&2
exit 1
fi
@@ -103,7 +102,7 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "vim" ]; then
--cmd "${BASEDIR_CMD}" \
-c 'autocmd User VimspectorInstallSuccess qa!' \
-c 'autocmd User VimspectorInstallFailed cquit!' \
- -c "VimspectorInstall --all netcoredbg"; then
+ -c "VimspectorInstall --all"; then
echo "Vim installation reported errors" >&2
exit 1
fi
@@ -145,9 +144,6 @@ set -e
pushd tests/testdata/cpp/simple
make clean all
popd
- pushd support/test/csharp
- dotnet build
- popd
set +e
echo "%DONE - built test programs"
diff --git a/support/custom_ui_vimrc b/support/custom_ui_vimrc
index e76c6ee..a8812cb 100644
--- a/support/custom_ui_vimrc
+++ b/support/custom_ui_vimrc
@@ -54,7 +54,7 @@ function s:SetUpTerminal()
let padding = 4
let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] )
call win_gotoid( terminal_win )
- execute string(cols) . 'wincmd |'
+ execute cols . 'wincmd |'
endfunction
function! s:CustomiseWinBar()
diff --git a/support/gadget_upgrade/README.md b/support/gadget_upgrade/README.md
deleted file mode 100644
index 9ae3d7f..0000000
--- a/support/gadget_upgrade/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Manually updating shipped gadgets
-
-Download the gadget files manuall from their official source into this dir.
-Run `./checksum.py ` to get the checksums.
-
-Update ../../python3/vimspector/gadgets.py with the new version and the
-checksums.
-
diff --git a/support/gadget_upgrade/checksum.py b/support/gadget_upgrade/checksum.py
deleted file mode 100755
index d0c1404..0000000
--- a/support/gadget_upgrade/checksum.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env python3
-
-import hashlib
-import sys
-
-
-def GetChecksumSHA254( file_path ):
- with open( file_path, 'rb' ) as existing_file:
- return hashlib.sha256( existing_file.read() ).hexdigest()
-
-
-for arg in sys.argv[ 1: ]:
- print( f"{ arg } = { GetChecksumSHA254( arg ) }" )
diff --git a/support/test/bash/.vimspector.json b/support/test/bash/.vimspector.json
deleted file mode 100644
index a1be1b9..0000000
--- a/support/test/bash/.vimspector.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json",
- "configurations": {
- "Run Current Script": {
- "adapter": "vscode-bash",
- "autoselect": false,
- "configuration": {
- "request": "launch",
- "program": "${file}",
- "cwd": "${fileDirname}",
- "args": [ "*${args}" ]
- }
- }
- }
-}
diff --git a/support/test/cpp/simple_c_program/.vimspector.json b/support/test/cpp/simple_c_program/.vimspector.json
index fb4c958..7b8c53a 100644
--- a/support/test/cpp/simple_c_program/.vimspector.json
+++ b/support/test/cpp/simple_c_program/.vimspector.json
@@ -15,15 +15,6 @@
"program": "${workspaceRoot}/test",
"stopAtEntry": true
}
- },
- "cpptools": {
- "adapter": "vscode-cpptools",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/test",
- "stopOnEntry": true,
- "MIMode": "lldb"
- }
}
}
}
diff --git a/support/test/cpp/simple_c_program/.ycm_extra_conf.py b/support/test/cpp/simple_c_program/.ycm_extra_conf.py
index 4203b36..0d17586 100644
--- a/support/test/cpp/simple_c_program/.ycm_extra_conf.py
+++ b/support/test/cpp/simple_c_program/.ycm_extra_conf.py
@@ -1,4 +1,4 @@
def Settings( **kwargs ):
return {
- 'flags': [ '-x', 'c++', '-Wall', '-Wextra', '-std=c++17' ]
+ 'flags': [ '-x', 'c++', '-Wall', '-Wextra' ]
}
diff --git a/support/test/csharp/.gitignore b/support/test/csharp/.gitignore
index 03cd7d8..b7d74e4 100644
--- a/support/test/csharp/.gitignore
+++ b/support/test/csharp/.gitignore
@@ -1,3 +1,2 @@
bin/
obj/Debug
-obj/
diff --git a/support/test/csharp/.vimspector.json b/support/test/csharp/.vimspector.json
index 326739b..524ae1a 100644
--- a/support/test/csharp/.vimspector.json
+++ b/support/test/csharp/.vimspector.json
@@ -1,57 +1,25 @@
{
- "adapters": {
- "netcoredbg-debuglog": {
- "attach": {
- "pidProperty": "processId",
- "pidSelect": "ask"
+ "configurations": {
+ "launch - netcoredbg": {
+ "adapter": "netcoredbg",
+ "configuration": {
+ "request": "launch",
+ "program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
+ "args": [],
+ "stopAtEntry": true
+ }
},
- "command": [
- "${gadgetDir}/netcoredbg/netcoredbg",
- "--interpreter=vscode",
- "--engineLogging=${workspaceRoot}/netcoredbg.engine.log",
- "--log=${workspaceRoot}/netcoredbg.log"
- ],
- "configuration": {
- "cwd": "${workspaceRoot}"
- },
- "name": "netcoredbg"
- }
- },
- "configurations": {
- //
- // NOTE:
- // If you add to this, you must update tests/get_configurations.test.vim
- //
-
- "launch - netcoredbg": {
- "adapter": "netcoredbg",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/bin/Debug/netcoreapp3.1/csharp.dll",
- "args": [],
- "stopAtEntry": false
- }
- },
- "launch - netcoredbg - with debug log": {
- "adapter": "netcoredbg-debuglog",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/bin/Debug/netcoreapp3.1/csharp.dll",
- "args": [],
- "stopAtEntry": false
- }
- },
- "launch - mono": {
- "adapter": "vscode-mono-debug",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/Program.exe",
- "console": "integratedTerminal",
- "cwd": "${workspaceRoot}",
- "args": [],
- "env": {}
+ "launch - mono": {
+ "adapter": "vscode-mono-debug",
+ "configuration": {
+ "request": "launch",
+ "program": "${workspaceRoot}/Program.exe",
+ "console": "integratedTerminal",
+ "cwd": "${workspaceRoot}",
+ "args": [],
+ "env": {}
+ }
}
}
- }
}
diff --git a/support/test/csharp/csharp.csproj b/support/test/csharp/csharp.csproj
index d453e9a..01d5113 100644
--- a/support/test/csharp/csharp.csproj
+++ b/support/test/csharp/csharp.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ netcoreapp2.2
diff --git a/support/test/csharp/csharp.sln b/support/test/csharp/csharp.sln
index 91f59bf..bba50e0 100644
--- a/support/test/csharp/csharp.sln
+++ b/support/test/csharp/csharp.sln
@@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26124.0
MinimumVisualStudioVersion = 15.0.26124.0
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp", "csharp.csproj", "{91DB205F-E422-430B-BBB8-955110C7B3B6}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -17,18 +15,4 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x64.ActiveCfg = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x64.Build.0 = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x86.ActiveCfg = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x86.Build.0 = Debug|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|Any CPU.Build.0 = Release|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x64.ActiveCfg = Release|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x64.Build.0 = Release|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x86.ActiveCfg = Release|Any CPU
- {91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
EndGlobal
diff --git a/support/test/csharp/obj/csharp.csproj.nuget.cache b/support/test/csharp/obj/csharp.csproj.nuget.cache
new file mode 100644
index 0000000..3ac8d84
--- /dev/null
+++ b/support/test/csharp/obj/csharp.csproj.nuget.cache
@@ -0,0 +1,5 @@
+{
+ "version": 1,
+ "dgSpecHash": "6/vdr7YprlSIoQecv/nNuLNflFpO0X7eN7jHUinZTsgian9nYpmHMWirsDWMi5l+29TH+Qy8O/QfaB/48QtjRQ==",
+ "success": true
+}
\ No newline at end of file
diff --git a/support/test/csharp/obj/csharp.csproj.nuget.g.props b/support/test/csharp/obj/csharp.csproj.nuget.g.props
new file mode 100644
index 0000000..c71f0e6
--- /dev/null
+++ b/support/test/csharp/obj/csharp.csproj.nuget.g.props
@@ -0,0 +1,21 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ /Users/ben/.nuget/packages/
+ /Users/ben/.nuget/packages/;/usr/local/share/dotnet/sdk/NuGetFallbackFolder
+ PackageReference
+ 5.7.0
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+
+
+
+
\ No newline at end of file
diff --git a/support/test/csharp/obj/csharp.csproj.nuget.g.targets b/support/test/csharp/obj/csharp.csproj.nuget.g.targets
new file mode 100644
index 0000000..099158b
--- /dev/null
+++ b/support/test/csharp/obj/csharp.csproj.nuget.g.targets
@@ -0,0 +1,10 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+
+
+
+
+
\ No newline at end of file
diff --git a/support/test/csharp/obj/project.assets.json b/support/test/csharp/obj/project.assets.json
new file mode 100644
index 0000000..bd6c0fc
--- /dev/null
+++ b/support/test/csharp/obj/project.assets.json
@@ -0,0 +1,748 @@
+{
+ "version": 3,
+ "targets": {
+ ".NETCoreApp,Version=v2.2": {
+ "Microsoft.NETCore.App/2.2.0": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETCore.DotNetHostPolicy": "2.2.0",
+ "Microsoft.NETCore.Platforms": "2.2.0",
+ "Microsoft.NETCore.Targets": "2.0.0",
+ "NETStandard.Library": "2.0.3"
+ },
+ "compile": {
+ "ref/netcoreapp2.2/Microsoft.CSharp.dll": {},
+ "ref/netcoreapp2.2/Microsoft.VisualBasic.dll": {},
+ "ref/netcoreapp2.2/Microsoft.Win32.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.AppContext.dll": {},
+ "ref/netcoreapp2.2/System.Buffers.dll": {},
+ "ref/netcoreapp2.2/System.Collections.Concurrent.dll": {},
+ "ref/netcoreapp2.2/System.Collections.Immutable.dll": {},
+ "ref/netcoreapp2.2/System.Collections.NonGeneric.dll": {},
+ "ref/netcoreapp2.2/System.Collections.Specialized.dll": {},
+ "ref/netcoreapp2.2/System.Collections.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.Annotations.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.DataAnnotations.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.TypeConverter.dll": {},
+ "ref/netcoreapp2.2/System.ComponentModel.dll": {},
+ "ref/netcoreapp2.2/System.Configuration.dll": {},
+ "ref/netcoreapp2.2/System.Console.dll": {},
+ "ref/netcoreapp2.2/System.Core.dll": {},
+ "ref/netcoreapp2.2/System.Data.Common.dll": {},
+ "ref/netcoreapp2.2/System.Data.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.Contracts.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.Debug.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.Process.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.StackTrace.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.Tools.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.TraceSource.dll": {},
+ "ref/netcoreapp2.2/System.Diagnostics.Tracing.dll": {},
+ "ref/netcoreapp2.2/System.Drawing.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.Drawing.dll": {},
+ "ref/netcoreapp2.2/System.Dynamic.Runtime.dll": {},
+ "ref/netcoreapp2.2/System.Globalization.Calendars.dll": {},
+ "ref/netcoreapp2.2/System.Globalization.Extensions.dll": {},
+ "ref/netcoreapp2.2/System.Globalization.dll": {},
+ "ref/netcoreapp2.2/System.IO.Compression.Brotli.dll": {},
+ "ref/netcoreapp2.2/System.IO.Compression.FileSystem.dll": {},
+ "ref/netcoreapp2.2/System.IO.Compression.ZipFile.dll": {},
+ "ref/netcoreapp2.2/System.IO.Compression.dll": {},
+ "ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.dll": {},
+ "ref/netcoreapp2.2/System.IO.FileSystem.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.IO.FileSystem.Watcher.dll": {},
+ "ref/netcoreapp2.2/System.IO.FileSystem.dll": {},
+ "ref/netcoreapp2.2/System.IO.IsolatedStorage.dll": {},
+ "ref/netcoreapp2.2/System.IO.MemoryMappedFiles.dll": {},
+ "ref/netcoreapp2.2/System.IO.Pipes.dll": {},
+ "ref/netcoreapp2.2/System.IO.UnmanagedMemoryStream.dll": {},
+ "ref/netcoreapp2.2/System.IO.dll": {},
+ "ref/netcoreapp2.2/System.Linq.Expressions.dll": {},
+ "ref/netcoreapp2.2/System.Linq.Parallel.dll": {},
+ "ref/netcoreapp2.2/System.Linq.Queryable.dll": {},
+ "ref/netcoreapp2.2/System.Linq.dll": {},
+ "ref/netcoreapp2.2/System.Memory.dll": {},
+ "ref/netcoreapp2.2/System.Net.Http.dll": {},
+ "ref/netcoreapp2.2/System.Net.HttpListener.dll": {},
+ "ref/netcoreapp2.2/System.Net.Mail.dll": {},
+ "ref/netcoreapp2.2/System.Net.NameResolution.dll": {},
+ "ref/netcoreapp2.2/System.Net.NetworkInformation.dll": {},
+ "ref/netcoreapp2.2/System.Net.Ping.dll": {},
+ "ref/netcoreapp2.2/System.Net.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.Net.Requests.dll": {},
+ "ref/netcoreapp2.2/System.Net.Security.dll": {},
+ "ref/netcoreapp2.2/System.Net.ServicePoint.dll": {},
+ "ref/netcoreapp2.2/System.Net.Sockets.dll": {},
+ "ref/netcoreapp2.2/System.Net.WebClient.dll": {},
+ "ref/netcoreapp2.2/System.Net.WebHeaderCollection.dll": {},
+ "ref/netcoreapp2.2/System.Net.WebProxy.dll": {},
+ "ref/netcoreapp2.2/System.Net.WebSockets.Client.dll": {},
+ "ref/netcoreapp2.2/System.Net.WebSockets.dll": {},
+ "ref/netcoreapp2.2/System.Net.dll": {},
+ "ref/netcoreapp2.2/System.Numerics.Vectors.dll": {},
+ "ref/netcoreapp2.2/System.Numerics.dll": {},
+ "ref/netcoreapp2.2/System.ObjectModel.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.DispatchProxy.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Emit.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Extensions.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Metadata.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.TypeExtensions.dll": {},
+ "ref/netcoreapp2.2/System.Reflection.dll": {},
+ "ref/netcoreapp2.2/System.Resources.Reader.dll": {},
+ "ref/netcoreapp2.2/System.Resources.ResourceManager.dll": {},
+ "ref/netcoreapp2.2/System.Resources.Writer.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Extensions.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Handles.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Loader.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Numerics.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Json.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Xml.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.Serialization.dll": {},
+ "ref/netcoreapp2.2/System.Runtime.dll": {},
+ "ref/netcoreapp2.2/System.Security.Claims.dll": {},
+ "ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.dll": {},
+ "ref/netcoreapp2.2/System.Security.Cryptography.Csp.dll": {},
+ "ref/netcoreapp2.2/System.Security.Cryptography.Encoding.dll": {},
+ "ref/netcoreapp2.2/System.Security.Cryptography.Primitives.dll": {},
+ "ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.dll": {},
+ "ref/netcoreapp2.2/System.Security.Principal.dll": {},
+ "ref/netcoreapp2.2/System.Security.SecureString.dll": {},
+ "ref/netcoreapp2.2/System.Security.dll": {},
+ "ref/netcoreapp2.2/System.ServiceModel.Web.dll": {},
+ "ref/netcoreapp2.2/System.ServiceProcess.dll": {},
+ "ref/netcoreapp2.2/System.Text.Encoding.Extensions.dll": {},
+ "ref/netcoreapp2.2/System.Text.Encoding.dll": {},
+ "ref/netcoreapp2.2/System.Text.RegularExpressions.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Overlapped.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Tasks.Extensions.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Tasks.Parallel.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Tasks.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Thread.dll": {},
+ "ref/netcoreapp2.2/System.Threading.ThreadPool.dll": {},
+ "ref/netcoreapp2.2/System.Threading.Timer.dll": {},
+ "ref/netcoreapp2.2/System.Threading.dll": {},
+ "ref/netcoreapp2.2/System.Transactions.Local.dll": {},
+ "ref/netcoreapp2.2/System.Transactions.dll": {},
+ "ref/netcoreapp2.2/System.ValueTuple.dll": {},
+ "ref/netcoreapp2.2/System.Web.HttpUtility.dll": {},
+ "ref/netcoreapp2.2/System.Web.dll": {},
+ "ref/netcoreapp2.2/System.Windows.dll": {},
+ "ref/netcoreapp2.2/System.Xml.Linq.dll": {},
+ "ref/netcoreapp2.2/System.Xml.ReaderWriter.dll": {},
+ "ref/netcoreapp2.2/System.Xml.Serialization.dll": {},
+ "ref/netcoreapp2.2/System.Xml.XDocument.dll": {},
+ "ref/netcoreapp2.2/System.Xml.XPath.XDocument.dll": {},
+ "ref/netcoreapp2.2/System.Xml.XPath.dll": {},
+ "ref/netcoreapp2.2/System.Xml.XmlDocument.dll": {},
+ "ref/netcoreapp2.2/System.Xml.XmlSerializer.dll": {},
+ "ref/netcoreapp2.2/System.Xml.dll": {},
+ "ref/netcoreapp2.2/System.dll": {},
+ "ref/netcoreapp2.2/WindowsBase.dll": {},
+ "ref/netcoreapp2.2/mscorlib.dll": {},
+ "ref/netcoreapp2.2/netstandard.dll": {}
+ },
+ "build": {
+ "build/netcoreapp2.2/Microsoft.NETCore.App.props": {},
+ "build/netcoreapp2.2/Microsoft.NETCore.App.targets": {}
+ }
+ },
+ "Microsoft.NETCore.DotNetAppHost/2.2.0": {
+ "type": "package"
+ },
+ "Microsoft.NETCore.DotNetHostPolicy/2.2.0": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETCore.DotNetHostResolver": "2.2.0"
+ }
+ },
+ "Microsoft.NETCore.DotNetHostResolver/2.2.0": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETCore.DotNetAppHost": "2.2.0"
+ }
+ },
+ "Microsoft.NETCore.Platforms/2.2.0": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "Microsoft.NETCore.Targets/2.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "NETStandard.Library/2.0.3": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "build": {
+ "build/netstandard2.0/NETStandard.Library.targets": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Microsoft.NETCore.App/2.2.0": {
+ "sha512": "7z5l8Jp324S8bU8+yyWeYHXUFYvKyiI5lqS1dXgTzOx1H69Qbf6df12kCKlNX45LpMfCMd4U3M6p7Rl5Zk7SLA==",
+ "type": "package",
+ "path": "microsoft.netcore.app/2.2.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "Microsoft.NETCore.App.versions.txt",
+ "THIRD-PARTY-NOTICES.TXT",
+ "build/netcoreapp2.2/Microsoft.NETCore.App.PlatformManifest.txt",
+ "build/netcoreapp2.2/Microsoft.NETCore.App.props",
+ "build/netcoreapp2.2/Microsoft.NETCore.App.targets",
+ "microsoft.netcore.app.2.2.0.nupkg.sha512",
+ "microsoft.netcore.app.nuspec",
+ "ref/netcoreapp2.2/Microsoft.CSharp.dll",
+ "ref/netcoreapp2.2/Microsoft.CSharp.xml",
+ "ref/netcoreapp2.2/Microsoft.VisualBasic.dll",
+ "ref/netcoreapp2.2/Microsoft.VisualBasic.xml",
+ "ref/netcoreapp2.2/Microsoft.Win32.Primitives.dll",
+ "ref/netcoreapp2.2/Microsoft.Win32.Primitives.xml",
+ "ref/netcoreapp2.2/System.AppContext.dll",
+ "ref/netcoreapp2.2/System.Buffers.dll",
+ "ref/netcoreapp2.2/System.Buffers.xml",
+ "ref/netcoreapp2.2/System.Collections.Concurrent.dll",
+ "ref/netcoreapp2.2/System.Collections.Concurrent.xml",
+ "ref/netcoreapp2.2/System.Collections.Immutable.dll",
+ "ref/netcoreapp2.2/System.Collections.Immutable.xml",
+ "ref/netcoreapp2.2/System.Collections.NonGeneric.dll",
+ "ref/netcoreapp2.2/System.Collections.NonGeneric.xml",
+ "ref/netcoreapp2.2/System.Collections.Specialized.dll",
+ "ref/netcoreapp2.2/System.Collections.Specialized.xml",
+ "ref/netcoreapp2.2/System.Collections.dll",
+ "ref/netcoreapp2.2/System.Collections.xml",
+ "ref/netcoreapp2.2/System.ComponentModel.Annotations.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.Annotations.xml",
+ "ref/netcoreapp2.2/System.ComponentModel.DataAnnotations.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.xml",
+ "ref/netcoreapp2.2/System.ComponentModel.Primitives.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.Primitives.xml",
+ "ref/netcoreapp2.2/System.ComponentModel.TypeConverter.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.TypeConverter.xml",
+ "ref/netcoreapp2.2/System.ComponentModel.dll",
+ "ref/netcoreapp2.2/System.ComponentModel.xml",
+ "ref/netcoreapp2.2/System.Configuration.dll",
+ "ref/netcoreapp2.2/System.Console.dll",
+ "ref/netcoreapp2.2/System.Console.xml",
+ "ref/netcoreapp2.2/System.Core.dll",
+ "ref/netcoreapp2.2/System.Data.Common.dll",
+ "ref/netcoreapp2.2/System.Data.Common.xml",
+ "ref/netcoreapp2.2/System.Data.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Contracts.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Contracts.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.Debug.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Debug.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.Process.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Process.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.StackTrace.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.StackTrace.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.Tools.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Tools.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.TraceSource.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.TraceSource.xml",
+ "ref/netcoreapp2.2/System.Diagnostics.Tracing.dll",
+ "ref/netcoreapp2.2/System.Diagnostics.Tracing.xml",
+ "ref/netcoreapp2.2/System.Drawing.Primitives.dll",
+ "ref/netcoreapp2.2/System.Drawing.Primitives.xml",
+ "ref/netcoreapp2.2/System.Drawing.dll",
+ "ref/netcoreapp2.2/System.Dynamic.Runtime.dll",
+ "ref/netcoreapp2.2/System.Globalization.Calendars.dll",
+ "ref/netcoreapp2.2/System.Globalization.Extensions.dll",
+ "ref/netcoreapp2.2/System.Globalization.dll",
+ "ref/netcoreapp2.2/System.IO.Compression.Brotli.dll",
+ "ref/netcoreapp2.2/System.IO.Compression.FileSystem.dll",
+ "ref/netcoreapp2.2/System.IO.Compression.ZipFile.dll",
+ "ref/netcoreapp2.2/System.IO.Compression.ZipFile.xml",
+ "ref/netcoreapp2.2/System.IO.Compression.dll",
+ "ref/netcoreapp2.2/System.IO.Compression.xml",
+ "ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.dll",
+ "ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.xml",
+ "ref/netcoreapp2.2/System.IO.FileSystem.Primitives.dll",
+ "ref/netcoreapp2.2/System.IO.FileSystem.Watcher.dll",
+ "ref/netcoreapp2.2/System.IO.FileSystem.Watcher.xml",
+ "ref/netcoreapp2.2/System.IO.FileSystem.dll",
+ "ref/netcoreapp2.2/System.IO.FileSystem.xml",
+ "ref/netcoreapp2.2/System.IO.IsolatedStorage.dll",
+ "ref/netcoreapp2.2/System.IO.IsolatedStorage.xml",
+ "ref/netcoreapp2.2/System.IO.MemoryMappedFiles.dll",
+ "ref/netcoreapp2.2/System.IO.MemoryMappedFiles.xml",
+ "ref/netcoreapp2.2/System.IO.Pipes.dll",
+ "ref/netcoreapp2.2/System.IO.Pipes.xml",
+ "ref/netcoreapp2.2/System.IO.UnmanagedMemoryStream.dll",
+ "ref/netcoreapp2.2/System.IO.dll",
+ "ref/netcoreapp2.2/System.Linq.Expressions.dll",
+ "ref/netcoreapp2.2/System.Linq.Expressions.xml",
+ "ref/netcoreapp2.2/System.Linq.Parallel.dll",
+ "ref/netcoreapp2.2/System.Linq.Parallel.xml",
+ "ref/netcoreapp2.2/System.Linq.Queryable.dll",
+ "ref/netcoreapp2.2/System.Linq.Queryable.xml",
+ "ref/netcoreapp2.2/System.Linq.dll",
+ "ref/netcoreapp2.2/System.Linq.xml",
+ "ref/netcoreapp2.2/System.Memory.dll",
+ "ref/netcoreapp2.2/System.Memory.xml",
+ "ref/netcoreapp2.2/System.Net.Http.dll",
+ "ref/netcoreapp2.2/System.Net.Http.xml",
+ "ref/netcoreapp2.2/System.Net.HttpListener.dll",
+ "ref/netcoreapp2.2/System.Net.HttpListener.xml",
+ "ref/netcoreapp2.2/System.Net.Mail.dll",
+ "ref/netcoreapp2.2/System.Net.Mail.xml",
+ "ref/netcoreapp2.2/System.Net.NameResolution.dll",
+ "ref/netcoreapp2.2/System.Net.NameResolution.xml",
+ "ref/netcoreapp2.2/System.Net.NetworkInformation.dll",
+ "ref/netcoreapp2.2/System.Net.NetworkInformation.xml",
+ "ref/netcoreapp2.2/System.Net.Ping.dll",
+ "ref/netcoreapp2.2/System.Net.Ping.xml",
+ "ref/netcoreapp2.2/System.Net.Primitives.dll",
+ "ref/netcoreapp2.2/System.Net.Primitives.xml",
+ "ref/netcoreapp2.2/System.Net.Requests.dll",
+ "ref/netcoreapp2.2/System.Net.Requests.xml",
+ "ref/netcoreapp2.2/System.Net.Security.dll",
+ "ref/netcoreapp2.2/System.Net.Security.xml",
+ "ref/netcoreapp2.2/System.Net.ServicePoint.dll",
+ "ref/netcoreapp2.2/System.Net.ServicePoint.xml",
+ "ref/netcoreapp2.2/System.Net.Sockets.dll",
+ "ref/netcoreapp2.2/System.Net.Sockets.xml",
+ "ref/netcoreapp2.2/System.Net.WebClient.dll",
+ "ref/netcoreapp2.2/System.Net.WebClient.xml",
+ "ref/netcoreapp2.2/System.Net.WebHeaderCollection.dll",
+ "ref/netcoreapp2.2/System.Net.WebHeaderCollection.xml",
+ "ref/netcoreapp2.2/System.Net.WebProxy.dll",
+ "ref/netcoreapp2.2/System.Net.WebProxy.xml",
+ "ref/netcoreapp2.2/System.Net.WebSockets.Client.dll",
+ "ref/netcoreapp2.2/System.Net.WebSockets.Client.xml",
+ "ref/netcoreapp2.2/System.Net.WebSockets.dll",
+ "ref/netcoreapp2.2/System.Net.WebSockets.xml",
+ "ref/netcoreapp2.2/System.Net.dll",
+ "ref/netcoreapp2.2/System.Numerics.Vectors.dll",
+ "ref/netcoreapp2.2/System.Numerics.Vectors.xml",
+ "ref/netcoreapp2.2/System.Numerics.dll",
+ "ref/netcoreapp2.2/System.ObjectModel.dll",
+ "ref/netcoreapp2.2/System.ObjectModel.xml",
+ "ref/netcoreapp2.2/System.Reflection.DispatchProxy.dll",
+ "ref/netcoreapp2.2/System.Reflection.DispatchProxy.xml",
+ "ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.dll",
+ "ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.dll",
+ "ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.xml",
+ "ref/netcoreapp2.2/System.Reflection.Emit.dll",
+ "ref/netcoreapp2.2/System.Reflection.Emit.xml",
+ "ref/netcoreapp2.2/System.Reflection.Extensions.dll",
+ "ref/netcoreapp2.2/System.Reflection.Metadata.dll",
+ "ref/netcoreapp2.2/System.Reflection.Metadata.xml",
+ "ref/netcoreapp2.2/System.Reflection.Primitives.dll",
+ "ref/netcoreapp2.2/System.Reflection.Primitives.xml",
+ "ref/netcoreapp2.2/System.Reflection.TypeExtensions.dll",
+ "ref/netcoreapp2.2/System.Reflection.TypeExtensions.xml",
+ "ref/netcoreapp2.2/System.Reflection.dll",
+ "ref/netcoreapp2.2/System.Resources.Reader.dll",
+ "ref/netcoreapp2.2/System.Resources.ResourceManager.dll",
+ "ref/netcoreapp2.2/System.Resources.ResourceManager.xml",
+ "ref/netcoreapp2.2/System.Resources.Writer.dll",
+ "ref/netcoreapp2.2/System.Resources.Writer.xml",
+ "ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.dll",
+ "ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.xml",
+ "ref/netcoreapp2.2/System.Runtime.Extensions.dll",
+ "ref/netcoreapp2.2/System.Runtime.Extensions.xml",
+ "ref/netcoreapp2.2/System.Runtime.Handles.dll",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.xml",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.dll",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.xml",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.dll",
+ "ref/netcoreapp2.2/System.Runtime.InteropServices.xml",
+ "ref/netcoreapp2.2/System.Runtime.Loader.dll",
+ "ref/netcoreapp2.2/System.Runtime.Loader.xml",
+ "ref/netcoreapp2.2/System.Runtime.Numerics.dll",
+ "ref/netcoreapp2.2/System.Runtime.Numerics.xml",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.dll",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.xml",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Json.dll",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Json.xml",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.dll",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.xml",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Xml.dll",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.Xml.xml",
+ "ref/netcoreapp2.2/System.Runtime.Serialization.dll",
+ "ref/netcoreapp2.2/System.Runtime.dll",
+ "ref/netcoreapp2.2/System.Runtime.xml",
+ "ref/netcoreapp2.2/System.Security.Claims.dll",
+ "ref/netcoreapp2.2/System.Security.Claims.xml",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.dll",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.xml",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Csp.dll",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Csp.xml",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Encoding.dll",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Encoding.xml",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Primitives.dll",
+ "ref/netcoreapp2.2/System.Security.Cryptography.Primitives.xml",
+ "ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.dll",
+ "ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netcoreapp2.2/System.Security.Principal.dll",
+ "ref/netcoreapp2.2/System.Security.Principal.xml",
+ "ref/netcoreapp2.2/System.Security.SecureString.dll",
+ "ref/netcoreapp2.2/System.Security.dll",
+ "ref/netcoreapp2.2/System.ServiceModel.Web.dll",
+ "ref/netcoreapp2.2/System.ServiceProcess.dll",
+ "ref/netcoreapp2.2/System.Text.Encoding.Extensions.dll",
+ "ref/netcoreapp2.2/System.Text.Encoding.Extensions.xml",
+ "ref/netcoreapp2.2/System.Text.Encoding.dll",
+ "ref/netcoreapp2.2/System.Text.RegularExpressions.dll",
+ "ref/netcoreapp2.2/System.Text.RegularExpressions.xml",
+ "ref/netcoreapp2.2/System.Threading.Overlapped.dll",
+ "ref/netcoreapp2.2/System.Threading.Overlapped.xml",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.dll",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.xml",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Extensions.dll",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Extensions.xml",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Parallel.dll",
+ "ref/netcoreapp2.2/System.Threading.Tasks.Parallel.xml",
+ "ref/netcoreapp2.2/System.Threading.Tasks.dll",
+ "ref/netcoreapp2.2/System.Threading.Tasks.xml",
+ "ref/netcoreapp2.2/System.Threading.Thread.dll",
+ "ref/netcoreapp2.2/System.Threading.Thread.xml",
+ "ref/netcoreapp2.2/System.Threading.ThreadPool.dll",
+ "ref/netcoreapp2.2/System.Threading.ThreadPool.xml",
+ "ref/netcoreapp2.2/System.Threading.Timer.dll",
+ "ref/netcoreapp2.2/System.Threading.Timer.xml",
+ "ref/netcoreapp2.2/System.Threading.dll",
+ "ref/netcoreapp2.2/System.Threading.xml",
+ "ref/netcoreapp2.2/System.Transactions.Local.dll",
+ "ref/netcoreapp2.2/System.Transactions.Local.xml",
+ "ref/netcoreapp2.2/System.Transactions.dll",
+ "ref/netcoreapp2.2/System.ValueTuple.dll",
+ "ref/netcoreapp2.2/System.Web.HttpUtility.dll",
+ "ref/netcoreapp2.2/System.Web.HttpUtility.xml",
+ "ref/netcoreapp2.2/System.Web.dll",
+ "ref/netcoreapp2.2/System.Windows.dll",
+ "ref/netcoreapp2.2/System.Xml.Linq.dll",
+ "ref/netcoreapp2.2/System.Xml.ReaderWriter.dll",
+ "ref/netcoreapp2.2/System.Xml.ReaderWriter.xml",
+ "ref/netcoreapp2.2/System.Xml.Serialization.dll",
+ "ref/netcoreapp2.2/System.Xml.XDocument.dll",
+ "ref/netcoreapp2.2/System.Xml.XDocument.xml",
+ "ref/netcoreapp2.2/System.Xml.XPath.XDocument.dll",
+ "ref/netcoreapp2.2/System.Xml.XPath.XDocument.xml",
+ "ref/netcoreapp2.2/System.Xml.XPath.dll",
+ "ref/netcoreapp2.2/System.Xml.XPath.xml",
+ "ref/netcoreapp2.2/System.Xml.XmlDocument.dll",
+ "ref/netcoreapp2.2/System.Xml.XmlSerializer.dll",
+ "ref/netcoreapp2.2/System.Xml.XmlSerializer.xml",
+ "ref/netcoreapp2.2/System.Xml.dll",
+ "ref/netcoreapp2.2/System.dll",
+ "ref/netcoreapp2.2/WindowsBase.dll",
+ "ref/netcoreapp2.2/mscorlib.dll",
+ "ref/netcoreapp2.2/netstandard.dll",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.NETCore.DotNetAppHost/2.2.0": {
+ "sha512": "DrhaKInRKKvN6Ns2VNIlC7ZffLOp9THf8cO6X4fytPRJovJUbF49/zzx4WfgX9E44FMsw9hT8hrKiIqDSHvGvA==",
+ "type": "package",
+ "path": "microsoft.netcore.dotnetapphost/2.2.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "microsoft.netcore.dotnetapphost.2.2.0.nupkg.sha512",
+ "microsoft.netcore.dotnetapphost.nuspec",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.NETCore.DotNetHostPolicy/2.2.0": {
+ "sha512": "FJie7IoPZFaPgNDxhZGmDBQP/Bs5vPdfca/G2Wf9gd6LIvMYkZcibtmJwB4tcf4KXkaOYfIOo4Cl9sEPMsSzkw==",
+ "type": "package",
+ "path": "microsoft.netcore.dotnethostpolicy/2.2.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "microsoft.netcore.dotnethostpolicy.2.2.0.nupkg.sha512",
+ "microsoft.netcore.dotnethostpolicy.nuspec",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.NETCore.DotNetHostResolver/2.2.0": {
+ "sha512": "spDm3AJYmebthDNhzY17YLPtvbc+Y1lCLVeiIH1uLJ/hZaM+40pBiPefFR8J1u66Ndkqi8ipR2tEbqPnYnjRhw==",
+ "type": "package",
+ "path": "microsoft.netcore.dotnethostresolver/2.2.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "microsoft.netcore.dotnethostresolver.2.2.0.nupkg.sha512",
+ "microsoft.netcore.dotnethostresolver.nuspec",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.NETCore.Platforms/2.2.0": {
+ "sha512": "T/J+XZo+YheFTJh8/4uoeJDdz5qOmOMkjg6/VL8mHJ9AnP8+fmV/kcbxeXsob0irRNiChf+V0ig1MCRLp/+Kog==",
+ "type": "package",
+ "path": "microsoft.netcore.platforms/2.2.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/netstandard1.0/_._",
+ "microsoft.netcore.platforms.2.2.0.nupkg.sha512",
+ "microsoft.netcore.platforms.nuspec",
+ "runtime.json",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "Microsoft.NETCore.Targets/2.0.0": {
+ "sha512": "odP/tJj1z6GylFpNo7pMtbd/xQgTC3Ex2If63dRTL38bBNMwsBnJ+RceUIyHdRBC0oik/3NehYT+oECwBhIM3Q==",
+ "type": "package",
+ "path": "microsoft.netcore.targets/2.0.0",
+ "files": [
+ ".nupkg.metadata",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "lib/netstandard1.0/_._",
+ "microsoft.netcore.targets.2.0.0.nupkg.sha512",
+ "microsoft.netcore.targets.nuspec",
+ "runtime.json",
+ "useSharedDesignerContext.txt",
+ "version.txt"
+ ]
+ },
+ "NETStandard.Library/2.0.3": {
+ "sha512": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
+ "type": "package",
+ "path": "netstandard.library/2.0.3",
+ "files": [
+ ".nupkg.metadata",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "build/netstandard2.0/NETStandard.Library.targets",
+ "build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll",
+ "build/netstandard2.0/ref/System.AppContext.dll",
+ "build/netstandard2.0/ref/System.Collections.Concurrent.dll",
+ "build/netstandard2.0/ref/System.Collections.NonGeneric.dll",
+ "build/netstandard2.0/ref/System.Collections.Specialized.dll",
+ "build/netstandard2.0/ref/System.Collections.dll",
+ "build/netstandard2.0/ref/System.ComponentModel.Composition.dll",
+ "build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll",
+ "build/netstandard2.0/ref/System.ComponentModel.Primitives.dll",
+ "build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll",
+ "build/netstandard2.0/ref/System.ComponentModel.dll",
+ "build/netstandard2.0/ref/System.Console.dll",
+ "build/netstandard2.0/ref/System.Core.dll",
+ "build/netstandard2.0/ref/System.Data.Common.dll",
+ "build/netstandard2.0/ref/System.Data.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.Contracts.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.Debug.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.Process.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.Tools.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll",
+ "build/netstandard2.0/ref/System.Diagnostics.Tracing.dll",
+ "build/netstandard2.0/ref/System.Drawing.Primitives.dll",
+ "build/netstandard2.0/ref/System.Drawing.dll",
+ "build/netstandard2.0/ref/System.Dynamic.Runtime.dll",
+ "build/netstandard2.0/ref/System.Globalization.Calendars.dll",
+ "build/netstandard2.0/ref/System.Globalization.Extensions.dll",
+ "build/netstandard2.0/ref/System.Globalization.dll",
+ "build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll",
+ "build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll",
+ "build/netstandard2.0/ref/System.IO.Compression.dll",
+ "build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll",
+ "build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll",
+ "build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll",
+ "build/netstandard2.0/ref/System.IO.FileSystem.dll",
+ "build/netstandard2.0/ref/System.IO.IsolatedStorage.dll",
+ "build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll",
+ "build/netstandard2.0/ref/System.IO.Pipes.dll",
+ "build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll",
+ "build/netstandard2.0/ref/System.IO.dll",
+ "build/netstandard2.0/ref/System.Linq.Expressions.dll",
+ "build/netstandard2.0/ref/System.Linq.Parallel.dll",
+ "build/netstandard2.0/ref/System.Linq.Queryable.dll",
+ "build/netstandard2.0/ref/System.Linq.dll",
+ "build/netstandard2.0/ref/System.Net.Http.dll",
+ "build/netstandard2.0/ref/System.Net.NameResolution.dll",
+ "build/netstandard2.0/ref/System.Net.NetworkInformation.dll",
+ "build/netstandard2.0/ref/System.Net.Ping.dll",
+ "build/netstandard2.0/ref/System.Net.Primitives.dll",
+ "build/netstandard2.0/ref/System.Net.Requests.dll",
+ "build/netstandard2.0/ref/System.Net.Security.dll",
+ "build/netstandard2.0/ref/System.Net.Sockets.dll",
+ "build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll",
+ "build/netstandard2.0/ref/System.Net.WebSockets.Client.dll",
+ "build/netstandard2.0/ref/System.Net.WebSockets.dll",
+ "build/netstandard2.0/ref/System.Net.dll",
+ "build/netstandard2.0/ref/System.Numerics.dll",
+ "build/netstandard2.0/ref/System.ObjectModel.dll",
+ "build/netstandard2.0/ref/System.Reflection.Extensions.dll",
+ "build/netstandard2.0/ref/System.Reflection.Primitives.dll",
+ "build/netstandard2.0/ref/System.Reflection.dll",
+ "build/netstandard2.0/ref/System.Resources.Reader.dll",
+ "build/netstandard2.0/ref/System.Resources.ResourceManager.dll",
+ "build/netstandard2.0/ref/System.Resources.Writer.dll",
+ "build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll",
+ "build/netstandard2.0/ref/System.Runtime.Extensions.dll",
+ "build/netstandard2.0/ref/System.Runtime.Handles.dll",
+ "build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "build/netstandard2.0/ref/System.Runtime.InteropServices.dll",
+ "build/netstandard2.0/ref/System.Runtime.Numerics.dll",
+ "build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll",
+ "build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll",
+ "build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll",
+ "build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll",
+ "build/netstandard2.0/ref/System.Runtime.Serialization.dll",
+ "build/netstandard2.0/ref/System.Runtime.dll",
+ "build/netstandard2.0/ref/System.Security.Claims.dll",
+ "build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll",
+ "build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll",
+ "build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll",
+ "build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll",
+ "build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll",
+ "build/netstandard2.0/ref/System.Security.Principal.dll",
+ "build/netstandard2.0/ref/System.Security.SecureString.dll",
+ "build/netstandard2.0/ref/System.ServiceModel.Web.dll",
+ "build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll",
+ "build/netstandard2.0/ref/System.Text.Encoding.dll",
+ "build/netstandard2.0/ref/System.Text.RegularExpressions.dll",
+ "build/netstandard2.0/ref/System.Threading.Overlapped.dll",
+ "build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll",
+ "build/netstandard2.0/ref/System.Threading.Tasks.dll",
+ "build/netstandard2.0/ref/System.Threading.Thread.dll",
+ "build/netstandard2.0/ref/System.Threading.ThreadPool.dll",
+ "build/netstandard2.0/ref/System.Threading.Timer.dll",
+ "build/netstandard2.0/ref/System.Threading.dll",
+ "build/netstandard2.0/ref/System.Transactions.dll",
+ "build/netstandard2.0/ref/System.ValueTuple.dll",
+ "build/netstandard2.0/ref/System.Web.dll",
+ "build/netstandard2.0/ref/System.Windows.dll",
+ "build/netstandard2.0/ref/System.Xml.Linq.dll",
+ "build/netstandard2.0/ref/System.Xml.ReaderWriter.dll",
+ "build/netstandard2.0/ref/System.Xml.Serialization.dll",
+ "build/netstandard2.0/ref/System.Xml.XDocument.dll",
+ "build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll",
+ "build/netstandard2.0/ref/System.Xml.XPath.dll",
+ "build/netstandard2.0/ref/System.Xml.XmlDocument.dll",
+ "build/netstandard2.0/ref/System.Xml.XmlSerializer.dll",
+ "build/netstandard2.0/ref/System.Xml.dll",
+ "build/netstandard2.0/ref/System.dll",
+ "build/netstandard2.0/ref/mscorlib.dll",
+ "build/netstandard2.0/ref/netstandard.dll",
+ "build/netstandard2.0/ref/netstandard.xml",
+ "lib/netstandard1.0/_._",
+ "netstandard.library.2.0.3.nupkg.sha512",
+ "netstandard.library.nuspec"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ ".NETCoreApp,Version=v2.2": [
+ "Microsoft.NETCore.App >= 2.2.0"
+ ]
+ },
+ "packageFolders": {
+ "/Users/ben/.nuget/packages/": {},
+ "/usr/local/share/dotnet/sdk/NuGetFallbackFolder": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/csharp.csproj",
+ "projectName": "csharp",
+ "projectPath": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/csharp.csproj",
+ "packagesPath": "/Users/ben/.nuget/packages/",
+ "outputPath": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/obj/",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "/usr/local/share/dotnet/sdk/NuGetFallbackFolder"
+ ],
+ "configFilePaths": [
+ "/Users/ben/.nuget/NuGet/NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "netcoreapp2.2"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "netcoreapp2.2": {
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "netcoreapp2.2": {
+ "dependencies": {
+ "Microsoft.NETCore.App": {
+ "suppressParent": "All",
+ "target": "Package",
+ "version": "[2.2.0, )",
+ "autoReferenced": true
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/3.1.402/RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/support/test/go/hello_world/.vimspector.json b/support/test/go/hello_world/.vimspector.json
index 4613b98..8ab5091 100644
--- a/support/test/go/hello_world/.vimspector.json
+++ b/support/test/go/hello_world/.vimspector.json
@@ -1,18 +1,4 @@
{
- "adapters": {
- "dlv-dap": {
- "variables": {
- "port": "${unusedLocalPort}"
- },
- "command": [
- "$HOME/go/bin/dlv",
- "dap",
- "--listen",
- "127.0.0.1:${port}"
- ],
- "port": "${port}"
- }
- },
"configurations": {
"run": {
"adapter": "vscode-go",
@@ -26,21 +12,6 @@
"env": { "GO111MODULE": "off" }
}
},
- "run-dap": {
- "adapter": "dlv-dap",
- "configuration": {
- "request": "launch",
- "env": { "GO111MODULE": "off" },
-
- "mode": "debug", // debug|test
- "program": "${workspaceRoot}/hello-world.go"
-
- // "args": [],
- // "buildFlags": ...
- // "stackTraceDepth": ...,
- // "showGlobalVariables": true,
- }
- },
"run-exec": {
// NOTE: To use this you _must_ disable optimistaion:
// go build -o hello_world -gcflags="all=-N -l"
diff --git a/support/test/go/name-starts-with-vowel/.vimspector.json b/support/test/go/name-starts-with-vowel/.vimspector.json
deleted file mode 100644
index ffcfc93..0000000
--- a/support/test/go/name-starts-with-vowel/.vimspector.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "configurations": {
- "run-cmd": {
- "adapter": "vscode-go",
- "configuration": {
- "request": "launch",
- "program": "${workspaceRoot}/cmd/namestartswithvowel/main.go",
- "mode": "debug",
- "dlvToolPath": "$HOME/go/bin/dlv",
- "dlvLoadConfig": {
- "maxArrayValues": 1000,
- "maxStringLen": 1000
- }
- }
- },
- "test-current-file": {
- "adapter": "vscode-go",
- "configuration": {
- "request": "launch",
- "mode": "test",
- "program": "${fileDirname}",
- "cwd": "${fileDirname}",
- "dlvToolPath": "$GOPATH/bin/dlv",
- "env": {},
- "args": []
- }
- }
- }
-}
diff --git a/support/test/go/name-starts-with-vowel/README.md b/support/test/go/name-starts-with-vowel/README.md
deleted file mode 100644
index fec967e..0000000
--- a/support/test/go/name-starts-with-vowel/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Purpose
-
-This example comes with two example vimspector configs for the Go programming language.
-
-1) `run-cmd` will launch the main programme under `cmd/namestartswithvowel`.
-1) `test-current-file` will run the tests in the current file in debug mode.
-
-## Example use-cases
-
-### run-cmd
-
-* Open `cmd/namestartswithvowel/main.go`
-* Add a breakpoint somewhere within the programme
-* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping)
-* Select the first launch configuration (`1: run-cmd`)
-
-### test-current-file
-
-* Open `internal/vowels/vowels_test.go`
-* Add a breakpoint somewhere within the test
-* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping)
-* Select the second launch configuration (`2: test-current-file`)
-
-## Additional Configuration
-
-There are two additional configuration options specified under `run-cmd`; these parameters configure the maximum string/array size to be shown while debugging.
-
-```
-"dlvLoadConfig": {
- "maxArrayValues": 1000,
- "maxStringLen": 1000
-}
-```
diff --git a/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go b/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go
deleted file mode 100644
index c160aea..0000000
--- a/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package main
-
-import (
- "fmt"
-
- "example.com/internal/vowels"
-)
-
-func main() {
- names := []string{"Simon", "Bob", "Jennifer", "Amy", "Duke", "Elizabeth"}
-
- for _, n := range names {
- if vowels.NameStartsWithVowel(n) {
- fmt.Printf("%s starts with a vowel!\n", n)
- continue
- }
-
- fmt.Printf("%s does not start with a vowel!\n", n)
- }
-}
diff --git a/support/test/go/name-starts-with-vowel/go.mod b/support/test/go/name-starts-with-vowel/go.mod
deleted file mode 100644
index 3070734..0000000
--- a/support/test/go/name-starts-with-vowel/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module example.com
-
-go 1.16
diff --git a/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go b/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go
deleted file mode 100644
index 4e76480..0000000
--- a/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package vowels
-
-import "strings"
-
-func NameStartsWithVowel(name string) bool {
- s := strings.Split(strings.ToLower(name), "")
-
- return s[0] == "a" || s[0] == "e" || s[0] == "i" || s[0] == "o" || s[0] == "u"
-}
diff --git a/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go b/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go
deleted file mode 100644
index e0d5773..0000000
--- a/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package vowels
-
-import (
- "fmt"
- "testing"
-)
-
-func TestNameStartsWithVowel(t *testing.T) {
- testCases := []struct {
- input string
- expectedOutput bool
- }{
- {
- input: "Simon",
- expectedOutput: false,
- },
- {
- input: "Andy",
- expectedOutput: true,
- },
- }
- for _, tt := range testCases {
- t.Run(fmt.Sprintf("%s should product %t", tt.input, tt.expectedOutput), func(t *testing.T) {
- out := NameStartsWithVowel(tt.input)
- if out != tt.expectedOutput {
- t.Errorf("%s produced %t, when %t was expected", tt.input, out, tt.expectedOutput)
- }
- })
- }
-}
diff --git a/support/test/java/test_project/pom.xml b/support/test/java/test_project/pom.xml
index e6dc4d3..890e7e8 100644
--- a/support/test/java/test_project/pom.xml
+++ b/support/test/java/test_project/pom.xml
@@ -4,7 +4,7 @@
TestApplication
1
- 11
- 11
+ 8
+ 8
diff --git a/tests/ci/image/Dockerfile b/tests/ci/image/Dockerfile
index 164a5a7..a25febc 100644
--- a/tests/ci/image/Dockerfile
+++ b/tests/ci/image/Dockerfile
@@ -70,12 +70,6 @@ RUN mkdir -p /home/linuxbrew/.linuxbrew &&\
RUN /home/linuxbrew/.linuxbrew/bin/brew install golang
-# dotnet
-RUN curl -sSL https://dot.net/v1/dotnet-install.sh \
- | bash /dev/stdin --channel LTS --install-dir /usr/share/dotnet && \
- update-alternatives --install /usr/bin/dotnet dotnet \
- /usr/share/dotnet/dotnet 1
-
# clean up
RUN /home/linuxbrew/.linuxbrew/bin/brew cleanup && \
rm -rf ~/.cache && \
diff --git a/tests/get_configurations.test.vim b/tests/get_configurations.test.vim
index 33e6577..4a37d01 100644
--- a/tests/get_configurations.test.vim
+++ b/tests/get_configurations.test.vim
@@ -12,7 +12,6 @@ function Test_Get_Configurations()
let configs = vimspector#GetConfigurations()
call assert_equal([
\ 'launch - netcoredbg',
- \ 'launch - netcoredbg - with debug log',
\ 'launch - mono',
\ ], configs)
diff --git a/tests/language_csharp.test.vim b/tests/language_csharp.test.vim
deleted file mode 100644
index 64cf954..0000000
--- a/tests/language_csharp.test.vim
+++ /dev/null
@@ -1,65 +0,0 @@
-function! SetUp()
- call vimspector#test#setup#SetUpWithMappings( v:none )
-endfunction
-
-function! ClearDown()
- call vimspector#test#setup#ClearDown()
-endfunction
-
-function! SetUp_Test_Go_Simple()
- let g:vimspector_enable_mappings = 'HUMAN'
-endfunction
-
-function! Test_CSharp_Simple()
- let fn='Program.cs'
- lcd ../support/test/csharp
- exe 'edit ' . fn
-
- call vimspector#SetLineBreakpoint( fn, 31 )
- call vimspector#LaunchWithSettings( {
- \ 'configuration': 'launch - netcoredbg'
- \ } )
- call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 31, 7 )
- call WaitForAssert( {->
- \ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 31 )
- \ } )
-
- call vimspector#StepOver()
- call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 32, 12 )
- call WaitForAssert( {->
- \ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 32 )
- \ } )
-
- call vimspector#test#setup#Reset()
-
- lcd -
- %bwipeout!
-endfunction
-
-
-function! Test_Run_To_Cursor()
- let fn='Program.cs'
- lcd ../support/test/csharp
- exe 'edit ' . fn
-
- call vimspector#SetLineBreakpoint( fn, 31 )
- call vimspector#LaunchWithSettings( {
- \ 'configuration': 'launch - netcoredbg'
- \ } )
- call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 31, 7 )
- call WaitForAssert( {->
- \ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 31 )
- \ } )
-
- call cursor( 33, 1 )
- call vimspector#RunToCursor()
- call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 33, 1 )
- call WaitForAssert( {->
- \ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 33 )
- \ } )
-
- call vimspector#test#setup#Reset()
- lcd -
- %bwipeout!
-endfunction
-
diff --git a/tests/lib/plugin/shared.vim b/tests/lib/plugin/shared.vim
index f98b8e9..70e297e 100644
--- a/tests/lib/plugin/shared.vim
+++ b/tests/lib/plugin/shared.vim
@@ -99,7 +99,7 @@ function! ThisTestIsFlaky()
let g:test_is_flaky = v:true
endfunction
-function! AssertMatchList( expected, actual ) abort
+function! AssertMatchist( expected, actual ) abort
let ret = assert_equal( len( a:expected ), len( a:actual ) )
let len = min( [ len( a:expected ), len( a:actual ) ] )
let idx = 0
diff --git a/tests/stack_trace.test.vim b/tests/stack_trace.test.vim
index b5ed795..a65ea5e 100644
--- a/tests/stack_trace.test.vim
+++ b/tests/stack_trace.test.vim
@@ -30,7 +30,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -45,7 +45,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -56,7 +56,7 @@ function! Test_Multiple_Threads_Continue()
\ )
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -70,7 +70,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -81,7 +81,7 @@ function! Test_Multiple_Threads_Continue()
\ )
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -95,7 +95,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -106,7 +106,7 @@ function! Test_Multiple_Threads_Continue()
\ )
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -121,7 +121,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -132,7 +132,7 @@ function! Test_Multiple_Threads_Continue()
\ )
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -146,7 +146,7 @@ function! Test_Multiple_Threads_Continue()
" So we break out of the loop
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( notify_l )
@@ -157,7 +157,7 @@ function! Test_Multiple_Threads_Continue()
\ )
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -192,7 +192,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l )
@@ -205,7 +205,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -218,7 +218,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ ],
@@ -230,7 +230,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -244,7 +244,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -257,7 +257,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -273,7 +273,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -287,7 +287,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -304,7 +304,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -319,7 +319,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -338,7 +338,7 @@ function! Test_Multiple_Threads_Step()
" So we break out of the loop
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)',
@@ -366,7 +366,7 @@ function! Test_UpDownStack()
call vimspector#LaunchWithSettings( { 'configuration': 'run' } )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -379,25 +379,11 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 2,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
call vimspector#DownFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -410,26 +396,11 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 2,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
-
call vimspector#UpFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -442,26 +413,11 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 3,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
-
call feedkeys( "\VimspectorUpFrame", 'x' )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -474,26 +430,11 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 4,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
-
call feedkeys( "\VimspectorDownFrame", 'x' )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -506,26 +447,11 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 3,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
-
call vimspector#DownFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15',
@@ -538,21 +464,6 @@ function! Test_UpDownStack()
\ '$' )
\ )
\ } )
- call win_gotoid( g:vimspector_session_windows.stack_trace )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 1,
- \ 'vimspectorCurrentThread',
- \ 200 ) } )
- call WaitForAssert( { ->
- \ vimspector#test#signs#AssertSignGroupSingletonAtLine(
- \ 'VimspectorStackTrace',
- \ 2,
- \ 'vimspectorCurrentFrame',
- \ 200 ) } )
- wincmd w
-
call vimspector#ClearBreakpoints()
diff --git a/tests/testdata/cpp/simple/.vimspector.json b/tests/testdata/cpp/simple/.vimspector.json
index 48ce801..0dca061 100644
--- a/tests/testdata/cpp/simple/.vimspector.json
+++ b/tests/testdata/cpp/simple/.vimspector.json
@@ -12,7 +12,7 @@
"externalConsole": false,
"stopAtEntry": true,
"stopOnEntry": true,
- "MIMode": "${VIMSPECTOR_MIMODE}"
+ "MImode": "${VIMSPECTOR_MIMODE}"
},
"breakpoints": {
"exception": {
@@ -33,7 +33,7 @@
"externalConsole": false,
"stopAtEntry": false,
"stopOnEntry": false,
- "MIMode": "${VIMSPECTOR_MIMODE}"
+ "MImode": "${VIMSPECTOR_MIMODE}"
},
"breakpoints": {
"exception": {
@@ -55,7 +55,7 @@
"externalConsole": false,
"stopAtEntry": false,
"stopOnEntry": false,
- "MIMode": "${VIMSPECTOR_MIMODE}"
+ "MImode": "${VIMSPECTOR_MIMODE}"
},
"breakpoints": {
"exception": {
@@ -82,7 +82,7 @@
"configuration": {
"request": "launch",
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
- "MIMode": "${VIMSPECTOR_MIMODE}",
+ "MImode": "${VIMSPECTOR_MIMODE}",
"externalConsole": false,
"args": [
"CALCULATED_LIST", "${CALCULATED_LIST}",
diff --git a/tests/variables.test.vim b/tests/variables.test.vim
index c00fb7f..c7d373b 100644
--- a/tests/variables.test.vim
+++ b/tests/variables.test.vim
@@ -194,7 +194,6 @@ function! Test_ExpandVariables()
\ [
\ '- Scope: Locals',
\ ' *+ t (Test): {...}',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -212,7 +211,7 @@ function! Test_ExpandVariables()
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' \*- t (Test): {...}',
@@ -220,7 +219,6 @@ function! Test_ExpandVariables()
\ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -231,7 +229,7 @@ function! Test_ExpandVariables()
" Step - stays expanded
call vimspector#StepOver()
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' - t (Test): {...}',
@@ -239,7 +237,6 @@ function! Test_ExpandVariables()
\ ' - c (char): 0 ''\\0\{1,3}''',
\ ' - fffff (float): 0',
\ ' + another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -256,7 +253,6 @@ function! Test_ExpandVariables()
\ [
\ '- Scope: Locals',
\ ' + t (Test): {...}',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -271,7 +267,6 @@ function! Test_ExpandVariables()
\ [
\ '- Scope: Locals',
\ ' + t (Test): {...}',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -283,7 +278,7 @@ function! Test_ExpandVariables()
call setpos( '.', [ 0, 2, 1 ] )
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' - t (Test): {...}',
@@ -291,7 +286,6 @@ function! Test_ExpandVariables()
\ ' \*- c (char): 99 ''c''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -308,7 +302,6 @@ function! Test_ExpandVariables()
\ assert_equal(
\ [
\ '+ Scope: Locals',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -323,7 +316,6 @@ function! Test_ExpandVariables()
\ assert_equal(
\ [
\ '+ Scope: Locals',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -339,7 +331,6 @@ function! Test_ExpandVariables()
\ assert_equal(
\ [
\ '+ Scope: Locals',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -387,7 +378,7 @@ function! Test_ExpandWatch()
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -406,7 +397,7 @@ function! Test_ExpandWatch()
" Step - stays expanded
call vimspector#StepOver()
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -458,7 +449,7 @@ function! Test_ExpandWatch()
call setpos( '.', [ 0, 3, 1 ] )
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -616,7 +607,7 @@ function! Test_EvaluateFailure()
" Add a wtch
call vimspector#AddWatch( 'test' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: test',
@@ -667,7 +658,7 @@ function! Test_VariableEval()
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -699,7 +690,7 @@ function! Test_VariableEval()
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -733,7 +724,7 @@ function! Test_VariableEval()
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Evaluation error',
\ ],
@@ -777,7 +768,7 @@ function! Test_VariableEvalExpand()
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -795,7 +786,7 @@ function! Test_VariableEvalExpand()
call feedkeys( "jjjj\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -815,7 +806,7 @@ function! Test_VariableEvalExpand()
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -855,7 +846,6 @@ function! Test_SetVariableValue_Local()
\ [
\ '- Scope: Locals',
\ ' *+ t (Test): {...}',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -873,7 +863,7 @@ function! Test_SetVariableValue_Local()
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' \*- t (Test): {...}',
@@ -881,7 +871,6 @@ function! Test_SetVariableValue_Local()
\ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -900,7 +889,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
EOF
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' \*- t (Test): {...}',
@@ -908,7 +897,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -920,7 +908,7 @@ EOF
call vimspector#SetVariableValue( '1234' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' \*- t (Test): {...}',
@@ -928,7 +916,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -940,7 +927,7 @@ EOF
call vimspector#SetVariableValue( 'this is invalid' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '- Scope: Locals',
\ ' \*- t (Test): {...}',
@@ -948,7 +935,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
- \ '+ Scope: Registers',
\ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1,
@@ -997,7 +983,7 @@ function! Test_SetVariableValue_Watch()
call feedkeys( "\", 'xt' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -1026,7 +1012,7 @@ EOF
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -1046,7 +1032,7 @@ EOF
call vimspector#SetVariableValue( '1234' )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ 'Watches: ----',
\ 'Expression: t',
@@ -1089,7 +1075,7 @@ function! Test_SetVariableValue_Balloon()
\ } )
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',
@@ -1116,7 +1102,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
EOF
call WaitForAssert( {->
- \ AssertMatchList(
+ \ AssertMatchist(
\ [
\ '{...}',
\ ' - i: 0',