Compare commits
98 commits
data-break
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c12519b9d | ||
|
|
2bb8561eb6 |
||
|
|
a868102b5e |
||
|
|
dc862fe565 | ||
|
|
b4bcfca932 |
||
|
|
3df0602a69 |
||
|
|
1c2dda4a6a |
||
|
|
db5ed8e802 | ||
|
|
17ca1522f8 | ||
|
|
561a5b9aa2 | ||
|
|
46cfdc678d | ||
|
|
51d78fce5f |
||
|
|
14f34ea6d1 |
||
|
|
a720d0e1d5 | ||
|
|
7c7e3f9c3f | ||
|
|
57ce099280 | ||
|
|
27eb464b8e |
||
|
|
f1e2c12e5b | ||
|
|
26cd7c5c7e |
||
|
|
59c9cd10ab | ||
|
|
9c806d2a01 |
||
|
|
3af97f1928 |
||
|
|
da39c4955c |
||
|
|
21ebb22fd4 | ||
|
|
aa0cddc0da |
||
|
|
5075f3a11a | ||
|
|
bab81953d7 |
||
|
|
0500e41429 |
||
|
|
1cbb400d42 |
||
|
|
5ea1f0d9d4 | ||
|
|
a51b8b23c9 | ||
|
|
99c0c4f763 |
||
|
|
daa8865fea |
||
|
|
f4d756fe86 |
||
|
|
d43904eb57 | ||
|
|
aacd62f09f | ||
|
|
0e9497ce8f | ||
|
|
2708e8e6ec |
||
|
|
adf6163653 |
||
|
|
0af9d70b0d |
||
|
|
9113dbb698 | ||
|
|
08679d1c3e | ||
|
|
4e04a862cb | ||
|
|
a7e8e93920 | ||
|
|
2b84439413 | ||
|
|
0c88cc8bad | ||
|
|
a47d0b921c |
||
|
|
026ac22280 | ||
|
|
297c0bea56 | ||
|
|
a9a26a5a60 |
||
|
|
1e25313cb5 | ||
|
|
bc15c94513 | ||
|
|
f389d65a24 | ||
|
|
b4195eee93 | ||
|
|
6ad9101cf2 |
||
|
|
a41db89523 | ||
|
|
dd88e051a4 | ||
|
|
fa92c2a8d5 | ||
|
|
6709b45c77 |
||
|
|
278fc3cd8c | ||
|
|
13a5a1b947 | ||
|
|
7d83419a4f | ||
|
|
7b3016aa90 |
||
|
|
d70d51a614 | ||
|
|
caeb6610ed |
||
|
|
0d9e7835a8 | ||
|
|
054ea35428 | ||
|
|
244d7d8fdf | ||
|
|
35e5b3d56e | ||
|
|
842d9fbc2d | ||
|
|
6a24a17f2e |
||
|
|
91e0426e88 |
||
|
|
bf24b37190 |
||
|
|
2d589475eb |
||
|
|
1414f261a1 | ||
|
|
a39017dd06 | ||
|
|
c05335c799 | ||
|
|
efc5c76866 | ||
|
|
154e727b96 | ||
|
|
6b74e584d5 | ||
|
|
85bb8594ab | ||
|
|
63fd3165fb | ||
|
|
afb912dd08 | ||
|
|
b92a89f0d4 | ||
|
|
6f88b400e1 | ||
|
|
af2670ef9a |
||
|
|
2b24611036 |
||
|
|
d84ebdd0ee |
||
|
|
6b67d165b9 | ||
|
|
a53d68f043 | ||
|
|
6d3f3e207b | ||
|
|
5716bbefa9 |
||
|
|
2615cff97a | ||
|
|
01ea50cb70 | ||
|
|
7d2770f3c4 | ||
|
|
2a635294d0 | ||
|
|
38c843219e | ||
|
|
c012f9520e |
61 changed files with 5391 additions and 1210 deletions
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -17,12 +17,12 @@ assignees: ''
|
||||||
|
|
||||||
> Please answer the following questions
|
> Please answer the following questions
|
||||||
|
|
||||||
* Does your issue reproduce using `vim -Nu /path/to/vimspector/support/minimal_vimrc` ? \[Yes/No]
|
* Does your issue reproduce using `vim --clean -Nu /path/to/vimspector/support/minimal_vimrc` ? \[Yes/No]
|
||||||
* If you are using Neovim, does your issue reproduce using Vim? \[Yes/No]
|
* If you are using Neovim, does your issue reproduce using Vim? \[Yes/No]
|
||||||
|
|
||||||
> List of steps to reproduce:
|
> List of steps to reproduce:
|
||||||
|
|
||||||
> 1. Run `vim -Nu /path/to/vimspector/support/minimal_vimrc`
|
> 1. Run `vim ---clean Nu /path/to/vimspector/support/minimal_vimrc`
|
||||||
> 2. Open _this project_...
|
> 2. Open _this project_...
|
||||||
> 3. Press _this sequence of keys_
|
> 3. Press _this sequence of keys_
|
||||||
|
|
||||||
|
|
@ -57,6 +57,12 @@ discussing on Gitter rather than raising an issue.
|
||||||
* Version of Vimspector: (e.g. output of `git rev-parse HEAD` if cloned or the
|
* Version of Vimspector: (e.g. output of `git rev-parse HEAD` if cloned or the
|
||||||
name of the tarball used to install otherwise)
|
name of the tarball used to install otherwise)
|
||||||
|
|
||||||
|
* Output of `:VimspectorDebugInfo`
|
||||||
|
|
||||||
|
```
|
||||||
|
paste here
|
||||||
|
```
|
||||||
|
|
||||||
* Output of `vim --version` or `nvim --version`
|
* Output of `vim --version` or `nvim --version`
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
20
.github/workflows/build.yaml
vendored
20
.github/workflows/build.yaml
vendored
|
|
@ -13,7 +13,7 @@ defaults:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
PythonLint:
|
PythonLint:
|
||||||
runs-on: ubuntu-16.04
|
runs-on: ubuntu-18.04
|
||||||
container: 'puremourning/vimspector:test'
|
container: 'puremourning/vimspector:test'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- name: 'Run flake8'
|
- name: 'Run flake8'
|
||||||
run: '$HOME/.local/bin/flake8 python3/ *.py'
|
run: '$HOME/.local/bin/flake8 python3/ *.py'
|
||||||
VimscriptLint:
|
VimscriptLint:
|
||||||
runs-on: 'ubuntu-16.04'
|
runs-on: 'ubuntu-18.04'
|
||||||
container: 'puremourning/vimspector:test'
|
container: 'puremourning/vimspector:test'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
@ -32,7 +32,7 @@ jobs:
|
||||||
run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/
|
run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/
|
||||||
|
|
||||||
Linux:
|
Linux:
|
||||||
runs-on: 'ubuntu-16.04'
|
runs-on: 'ubuntu-18.04'
|
||||||
container:
|
container:
|
||||||
image: 'puremourning/vimspector:test'
|
image: 'puremourning/vimspector:test'
|
||||||
options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
|
options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
|
||||||
|
|
@ -111,6 +111,16 @@ jobs:
|
||||||
path: gadgets/macos/download
|
path: gadgets/macos/download
|
||||||
name: Cache gadgets
|
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
|
- run: vim --version
|
||||||
name: 'Print vim version information'
|
name: 'Print vim version information'
|
||||||
|
|
||||||
|
|
@ -143,10 +153,10 @@ jobs:
|
||||||
# if: failure()
|
# if: failure()
|
||||||
# with:
|
# with:
|
||||||
# NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
|
# NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
|
||||||
# SSH_PASS: ${{ secrets.SSH_PASS }}
|
# SSH_PASS: ${{ secrets.SSH_PASS }} # [V]imspector
|
||||||
|
|
||||||
PublishRelease:
|
PublishRelease:
|
||||||
runs-on: 'ubuntu-16.04'
|
runs-on: 'ubuntu-18.04'
|
||||||
needs:
|
needs:
|
||||||
- Linux
|
- Linux
|
||||||
- MacOS
|
- MacOS
|
||||||
|
|
|
||||||
27
.github/workflows/lock_old_issues.yaml
vendored
Normal file
27
.github/workflows/lock_old_issues.yaml
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
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'
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -20,3 +20,4 @@ support/test/csharp/*.exe*
|
||||||
configurations/
|
configurations/
|
||||||
venv/
|
venv/
|
||||||
test-base/
|
test-base/
|
||||||
|
tags
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,8 @@ pull_request_rules:
|
||||||
# CI https://doc.mergify.io/conditions.html#github-actions
|
# CI https://doc.mergify.io/conditions.html#github-actions
|
||||||
- status-success=PythonLint
|
- status-success=PythonLint
|
||||||
- status-success=VimscriptLint
|
- status-success=VimscriptLint
|
||||||
|
- status-success=Linux
|
||||||
- status-success=MacOS
|
- status-success=MacOS
|
||||||
|
|
||||||
|
|
||||||
actions: &merge-actions
|
actions: &merge-actions
|
||||||
merge:
|
merge:
|
||||||
method: merge
|
method: merge
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,17 @@ def Settings( **kwargs ):
|
||||||
return {
|
return {
|
||||||
'sys_path': [
|
'sys_path': [
|
||||||
p.join( PATH_TO_THIS_DIR, 'python3' )
|
p.join( PATH_TO_THIS_DIR, 'python3' )
|
||||||
]
|
],
|
||||||
|
'ls': {
|
||||||
|
'python': {
|
||||||
|
'analysis': {
|
||||||
|
'extraPaths': [
|
||||||
|
p.join( PATH_TO_THIS_DIR, 'python3' ),
|
||||||
|
],
|
||||||
|
'useLibraryCodeForTypes': True
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if IgnoreExtraConf:
|
if IgnoreExtraConf:
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,23 @@ 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
|
Vimspector project, and on-topic comments and follow-ups to them. It is not for
|
||||||
general discussion, general support or for any other purpose.
|
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
|
Please do not be offended if your Issue or comment is closed or hidden, for any
|
||||||
of the following reasons:
|
of the following reasons:
|
||||||
|
|
||||||
|
|
@ -53,6 +70,7 @@ of the following reasons:
|
||||||
* The issue or comment is off-topic
|
* The issue or comment is off-topic
|
||||||
* The issue does not represent a Vimspector bug or feature request
|
* The issue does not represent a Vimspector bug or feature request
|
||||||
* The issue cannot be reasonably reproduced using the minimal vimrc
|
* The issue cannot be reasonably reproduced using the minimal vimrc
|
||||||
|
* The issue is a duplicate of an existing issue
|
||||||
* etc.
|
* etc.
|
||||||
|
|
||||||
Issue titles are important. It's not usually helpful to write a title like
|
Issue titles are important. It's not usually helpful to write a title like
|
||||||
|
|
@ -83,7 +101,7 @@ in the issue report.
|
||||||
The minimal vimrc is in `support/test/minimal_vimrc` and can be used as follows:
|
The minimal vimrc is in `support/test/minimal_vimrc` and can be used as follows:
|
||||||
|
|
||||||
```
|
```
|
||||||
vim -Nu /path/to/vimspector/support/minimal_vimrc
|
vim --clean -Nu /path/to/vimspector/support/minimal_vimrc
|
||||||
```
|
```
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
|
|
|
||||||
301
README.md
301
README.md
|
|
@ -3,7 +3,7 @@
|
||||||
For a tutorial and usage overview, take a look at the
|
For a tutorial and usage overview, take a look at the
|
||||||
[Vimspector website][website].
|
[Vimspector website][website].
|
||||||
|
|
||||||
For detailed explanatin of the `.vimspector.json` format, see the
|
For detailed explanation of the `.vimspector.json` format, see the
|
||||||
[reference guide][vimspector-ref].
|
[reference guide][vimspector-ref].
|
||||||
|
|
||||||
 [](https://gitter.im/vimspector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
 [](https://gitter.im/vimspector/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||||
|
|
@ -59,15 +59,16 @@ For detailed explanatin of the `.vimspector.json` format, see the
|
||||||
* [Console autocompletion](#console-autocompletion)
|
* [Console autocompletion](#console-autocompletion)
|
||||||
* [Log View](#log-view)
|
* [Log View](#log-view)
|
||||||
* [Closing debugger](#closing-debugger)
|
* [Closing debugger](#closing-debugger)
|
||||||
|
* [Terminate debuggee](#terminate-debuggee)
|
||||||
* [Debug profile configuration](#debug-profile-configuration)
|
* [Debug profile configuration](#debug-profile-configuration)
|
||||||
* [C, C , Rust, etc.](#c-c-rust-etc)
|
* [C, C++, Rust, etc.](#c-c-rust-etc)
|
||||||
* [C Remote debugging](#c-remote-debugging)
|
* [Data visualization / pretty printing](#data-visualization--pretty-printing)
|
||||||
* [C Remote launch and attach](#c-remote-launch-and-attach)
|
* [C++ Remote debugging](#c-remote-debugging)
|
||||||
|
* [C++ Remote launch and attach](#c-remote-launch-and-attach)
|
||||||
* [Rust](#rust)
|
* [Rust](#rust)
|
||||||
* [Python](#python)
|
* [Python](#python)
|
||||||
* [Python Remote Debugging](#python-remote-debugging)
|
* [Python Remote Debugging](#python-remote-debugging)
|
||||||
* [Python Remote launch and attach](#python-remote-launch-and-attach)
|
* [Python Remote launch and attach](#python-remote-launch-and-attach)
|
||||||
* [Legacy: vscode-python](#legacy-vscode-python)
|
|
||||||
* [TCL](#tcl)
|
* [TCL](#tcl)
|
||||||
* [C♯](#c)
|
* [C♯](#c)
|
||||||
* [Go](#go)
|
* [Go](#go)
|
||||||
|
|
@ -76,6 +77,7 @@ For detailed explanatin of the `.vimspector.json` format, see the
|
||||||
* [Debug cli application](#debug-cli-application)
|
* [Debug cli application](#debug-cli-application)
|
||||||
* [JavaScript, TypeScript, etc.](#javascript-typescript-etc)
|
* [JavaScript, TypeScript, etc.](#javascript-typescript-etc)
|
||||||
* [Java](#java)
|
* [Java](#java)
|
||||||
|
* [Hot code replace](#hot-code-replace)
|
||||||
* [Usage with YouCompleteMe](#usage-with-youcompleteme)
|
* [Usage with YouCompleteMe](#usage-with-youcompleteme)
|
||||||
* [Other LSP clients](#other-lsp-clients)
|
* [Other LSP clients](#other-lsp-clients)
|
||||||
* [Lua](#lua)
|
* [Lua](#lua)
|
||||||
|
|
@ -91,14 +93,14 @@ For detailed explanatin of the `.vimspector.json` format, see the
|
||||||
* [Example](#example)
|
* [Example](#example)
|
||||||
* [FAQ](#faq)
|
* [FAQ](#faq)
|
||||||
|
|
||||||
<!-- Added by: ben, at: Sun 21 Feb 2021 21:15:32 GMT -->
|
<!-- Added by: ben, at: Fri 19 Mar 2021 22:57:28 GMT -->
|
||||||
|
|
||||||
<!--te-->
|
<!--te-->
|
||||||
|
|
||||||
# Features and Usage
|
# Features and Usage
|
||||||
|
|
||||||
The plugin is a capable Vim graphical debugger for multiple languages.
|
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).
|
language that Visual Studio Code supports (but see caveats).
|
||||||
|
|
||||||
The [Vimspector website][website] has an overview of the UI, along with basic
|
The [Vimspector website][website] has an overview of the UI, along with basic
|
||||||
|
|
@ -143,23 +145,24 @@ runtime dependencies). They are categorised by their level of support:
|
||||||
* `Supported` : Fully supported, frequently used and manually tested
|
* `Supported` : Fully supported, frequently used and manually tested
|
||||||
* `Experimental`: Working, but not frequently used and rarely tested
|
* `Experimental`: Working, but not frequently used and rarely tested
|
||||||
* `Legacy`: No longer supported, please migrate your config
|
* `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 |
|
| 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 |
|
| 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 |
|
| Rust, C, C++, etc. | Supported | `--force-enable-rust` | CodeLLDB | Python 3 |
|
||||||
| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
|
| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
|
||||||
| Go | Tested | `--enable-go` | vscode-go | Go, [Delve][] |
|
| Go | Tested | `--enable-go` | vscode-go | Node, Go, [Delve][] |
|
||||||
| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
|
| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
|
||||||
| Bourne Shell | Supported | `--all` or `--enable-bash` | vscode-bash-debug | Bash v?? |
|
| 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 |
|
| 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 |
|
| Node.js | Supported | `--force-enable-node` | vscode-node-debug2 | 6 < Node < 12, Npm |
|
||||||
| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
|
| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
|
||||||
| Java | Supported | `--force-enable-java ` | vscode-java-debug | Compatible LSP plugin (see [later](#java)) |
|
| 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# (dotnet core) | Tested | `--force-enable-csharp` | netcoredbg | DotNet core |
|
||||||
| C# (mono) | Experimental | `--force-enable-csharp` | vscode-mono-debug | Mono |
|
| F#, VB, etc. | Supported | `--force-enable-[fsharp,vbnet]` | `, `--force-enable-vbnet` | netcoredbg | DotNet core |
|
||||||
| F#, VB, etc. | Experimental | `--force-enable-fsharp` (or vbnet) | netcoredbg | DotNet core |
|
| C# (mono) | _Retired_ | N/A | N/A | N/A |
|
||||||
| Python.legacy | Legacy | `--force-enable-python.legacy` | vscode-python | Node 10, Python 2.7 or Python 3 |
|
| Python.legacy | _Retired_ | N/A | N/A | N/A |
|
||||||
|
|
||||||
## Other languages
|
## Other languages
|
||||||
|
|
||||||
|
|
@ -288,7 +291,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:
|
are example projects for a number of languages in `support/test`, including:
|
||||||
|
|
||||||
* Python (`support/test/python/simple_python`)
|
* Python (`support/test/python/simple_python`)
|
||||||
* Go (`support/test/go/hello_world`)
|
* Go (`support/test/go/hello_world` and `support/test/go/name-starts-with-vowel`)
|
||||||
* Nodejs (`support/test/node/simple`)
|
* Nodejs (`support/test/node/simple`)
|
||||||
* Chrome (`support/test/chrome/`)
|
* Chrome (`support/test/chrome/`)
|
||||||
* etc.
|
* etc.
|
||||||
|
|
@ -524,13 +527,6 @@ Example:
|
||||||
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
|
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
|
||||||
],
|
],
|
||||||
"name": "cppdbg"
|
"name": "cppdbg"
|
||||||
},
|
|
||||||
"vscode-python": {
|
|
||||||
"command": [
|
|
||||||
"node",
|
|
||||||
"${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js"
|
|
||||||
],
|
|
||||||
"name": "vscode-python"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -656,18 +652,23 @@ 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
|
features to set your own mappings. To that end, Vimspector defines the following
|
||||||
`<Plug>` mappings:
|
`<Plug>` mappings:
|
||||||
|
|
||||||
* `<Plug>VimspectorContinue`
|
| Mapping | Function | API |
|
||||||
* `<Plug>VimspectorStop`
|
| --- | --- | --- |
|
||||||
* `<Plug>VimspectorRestart`
|
| `<Plug>VimspectorContinue` | When debugging, continue. Otherwise start debugging. | `vimspector#Continue()` |
|
||||||
* `<Plug>VimspectorPause`
|
| `<Plug>VimspectorStop` | Stop debugging. | `vimspector#Stop()` |
|
||||||
* `<Plug>VimspectorToggleBreakpoint`
|
| `<Plug>VimpectorRestart` | Restart debugging with the same configuration. | `vimspector#Restart()` |
|
||||||
* `<Plug>VimspectorToggleConditionalBreakpoint`
|
| `<Plug>VimspectorPause` | Pause debuggee. | `vimspector#Pause()` |
|
||||||
* `<Plug>VimspectorAddFunctionBreakpoint`
|
| `<Plug>VimspectorToggleBreakpoint` | Toggle line breakpoint on the current line. | `vimspector#ToggleBreakpoint()` |
|
||||||
* `<Plug>VimspectorStepOver`
|
| `<Plug>VimspectorToggleConditionalBreakpoint` | Toggle conditional line breakpoint on the current line. | `vimspector#ToggleBreakpoint( { trigger expr, hit count expr } )` |
|
||||||
* `<Plug>VimspectorStepInto`
|
| `<Plug>VimspectorAddFunctionBreakpoint` | Add a function breakpoint for the expression under cursor | `vimspector#AddFunctionBreakpoint( '<cexpr>' )` |
|
||||||
* `<Plug>VimspectorStepOut`
|
| `<Plug>VimspectorRunToCursor` | Run to Cursor | `vimspector#RunToCursor()` |
|
||||||
* `<Plug>VimspectorRunToCursor`
|
| `<Plug>VimspectorStepOver` | Step Over | `vimspector#StepOver()` |
|
||||||
* `<Plug>VimspectorBalloonEval`
|
| `<Plug>VimspectorStepInto` | Step Into | `vimspector#StepInto()` |
|
||||||
|
| `<Plug>VimspectorStepOut` | Step out of current function scope | `vimspector#StepOut()` |
|
||||||
|
| `<Plug>VimspectorUpFrame` | Move up a frame in the current call stack | `vimspector#UpFrame()` |
|
||||||
|
| `<Plug>VimspectorDownFrame` | Move down a frame in the current call stack | `vimspector#DownFrame()` |
|
||||||
|
| `<Plug>VimspectorBalloonEval` | Evaluate expression under cursor (or visual) in popup | *internal* |
|
||||||
|
|
||||||
|
|
||||||
These map roughly 1-1 with the API functions below.
|
These map roughly 1-1 with the API functions below.
|
||||||
|
|
||||||
|
|
@ -695,17 +696,17 @@ loading vimspector**:
|
||||||
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
|
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
|
||||||
```
|
```
|
||||||
|
|
||||||
| Key | Function | API |
|
| Key | Mapping | Function
|
||||||
| --- | --- | --- |
|
| --- | --- | ---
|
||||||
| `F5` | When debugging, continue. Otherwise start debugging. | `vimspector#Continue()` |
|
| `F5` | `<Plug>VimspectorContinue` | When debugging, continue. Otherwise start debugging.
|
||||||
| `Shift F5` | Stop debugging. | `vimspector#Stop()` |
|
| `Shift F5` | `<Plug>VimspectorStop` | Stop debugging.
|
||||||
| `Ctrl Shift F5` | Restart debugging with the same configuration. | `vimspector#Restart()` |
|
| `Ctrl Shift F5` | `<Plug>VimspectorRestart` | Restart debugging with the same configuration.
|
||||||
| `F6` | Pause debuggee. | `vimspector#Pause()` |
|
| `F6` | `<Plug>VimspectorPause` | Pause debuggee.
|
||||||
| `F9` | Toggle line breakpoint on the current line. | `vimspector#ToggleBreakpoint()` |
|
| `F9` | `<Plug>VimspectorToggleBreakpoint` | Toggle line breakpoint on the current line.
|
||||||
| `Shift F9` | Add a function breakpoint for the expression under cursor | `vimspector#AddFunctionBreakpoint( '<cexpr>' )` |
|
| `Shift F9` | `<Plug>VimspectorAddFunctionBreakpoint` | Add a function breakpoint for the expression under cursor
|
||||||
| `F10` | Step Over | `vimspector#StepOver()` |
|
| `F10` | `<Plug>VimspectorStepOver` | Step Over
|
||||||
| `F11` | Step Into | `vimspector#StepInto()` |
|
| `F11` | `<Plug>VimspectorStepInto` | Step Into
|
||||||
| `Shift F11` | Step out of current function scope | `vimspector#StepOut()` |
|
| `Shift F11` | `<Plug>VimspectorStepOut` | Step out of current function scope
|
||||||
|
|
||||||
## Human Mode
|
## Human Mode
|
||||||
|
|
||||||
|
|
@ -720,19 +721,19 @@ loading vimspector**:
|
||||||
let g:vimspector_enable_mappings = 'HUMAN'
|
let g:vimspector_enable_mappings = 'HUMAN'
|
||||||
```
|
```
|
||||||
|
|
||||||
| Key | Function | API |
|
| Key | Mapping | Function
|
||||||
| --- | --- | --- |
|
| --- | --- | ---
|
||||||
| `F5` | When debugging, continue. Otherwise start debugging. | `vimspector#Continue()` |
|
| `F5` | `<Plug>VimspectorContinue` | When debugging, continue. Otherwise start debugging.
|
||||||
| `F3` | Stop debugging. | `vimspector#Stop()` |
|
| `F3` | `<Plug>VimspectorStop` | Stop debugging.
|
||||||
| `F4` | Restart debugging with the same configuration. | `vimspector#Restart()` |
|
| `F4` | `<Plug>VimspectorRestart` | Restart debugging with the same configuration.
|
||||||
| `F6` | Pause debuggee. | `vimspector#Pause()` |
|
| `F6` | `<Plug>VimspectorPause` | Pause debuggee.
|
||||||
| `F9` | Toggle line breakpoint on the current line. | `vimspector#ToggleBreakpoint()` |
|
| `F9` | `<Plug>VimspectorToggleBreakpoint` | Toggle line breakpoint on the current line.
|
||||||
| `<leader>F9` | Toggle conditional line breakpoint on the current line. | `vimspector#ToggleBreakpoint( { trigger expr, hit count expr } )` |
|
| `<leader>F9` | `<Plug>VimspectorToggleConditionalBreakpoint` | Toggle conditional line breakpoint on the current line.
|
||||||
| `F8` | Add a function breakpoint for the expression under cursor | `vimspector#AddFunctionBreakpoint( '<cexpr>' )` |
|
| `F8` | `<Plug>VimspectorAddFunctionBreakpoint` | Add a function breakpoint for the expression under cursor
|
||||||
| `<leader>F8` | Run to Cursor | `vimspector#RunToCursor()` |
|
| `<leader>F8` | `<Plug>VimspectorRunToCursor` | Run to Cursor
|
||||||
| `F10` | Step Over | `vimspector#StepOver()` |
|
| `F10` | `<Plug>VimspectorStepOver` | Step Over
|
||||||
| `F11` | Step Into | `vimspector#StepInto()` |
|
| `F11` | `<Plug>VimspectorStepInto` | Step Into
|
||||||
| `F12` | Step out of current function scope | `vimspector#StepOut()` |
|
| `F12` | `<Plug>VimspectorStepOut` | Step out of current function scope
|
||||||
|
|
||||||
In addition, I recommend adding a mapping to `<Plug>VimspectorBalloonEval`, in
|
In addition, I recommend adding a mapping to `<Plug>VimspectorBalloonEval`, in
|
||||||
normal and visual modes, for example:
|
normal and visual modes, for example:
|
||||||
|
|
@ -746,6 +747,13 @@ nmap <Leader>di <Plug>VimspectorBalloonEval
|
||||||
xmap <Leader>di <Plug>VimspectorBalloonEval
|
xmap <Leader>di <Plug>VimspectorBalloonEval
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You may also wish to add mappings for up/down the stack, for example:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
nmap <LocalLeader><F11> <Plug>VimspectorUpFrame
|
||||||
|
nmap <LocalLeader><F12> <Plug>VimspectorDownFrame
|
||||||
|
```
|
||||||
|
|
||||||
# Usage and API
|
# Usage and API
|
||||||
|
|
||||||
This section defines detailed usage instructions, organised by feature. For most
|
This section defines detailed usage instructions, organised by feature. For most
|
||||||
|
|
@ -1000,6 +1008,8 @@ be changed manually to "switch to" that thread.
|
||||||
to set the "focussed" thread to the currently selected one. If the selected
|
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
|
line is a stack frame, set the focussed thread to the thread of that frame and
|
||||||
jump to that frame in the code window.
|
jump to that frame in the code window.
|
||||||
|
* The current frame when a breakpoint is hit or if manuall jumping is also
|
||||||
|
highlighted.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -1061,6 +1071,8 @@ information when something goes wrong that's not a Vim traceback.
|
||||||
If you just want to see the Vimspector log file, use `:VimspectorToggleLog`,
|
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).
|
which will tail it in a little window (doesn't work on Windows).
|
||||||
|
|
||||||
|
You can see some debugging info with `:VimspectorDebugInfo`
|
||||||
|
|
||||||
## Closing debugger
|
## Closing debugger
|
||||||
|
|
||||||
To close the debugger, use:
|
To close the debugger, use:
|
||||||
|
|
@ -1165,6 +1177,38 @@ 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": "<path to binary>",
|
||||||
|
...
|
||||||
|
"MIMode": "gdb"
|
||||||
|
"setupCommands": [
|
||||||
|
{
|
||||||
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
"text": "-enable-pretty-printing",
|
||||||
|
"ignoreFailures": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### C++ Remote debugging
|
### C++ Remote debugging
|
||||||
|
|
||||||
The cpptools documentation describes how to attach cpptools to gdbserver using
|
The cpptools documentation describes how to attach cpptools to gdbserver using
|
||||||
|
|
@ -1250,10 +1294,6 @@ Rust is supported with any gdb/lldb-based debugger. So it works fine with
|
||||||
headers/libs to build a C python extension for performance.
|
headers/libs to build a C python extension for performance.
|
||||||
* Full options: https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
|
* Full options: https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
|
||||||
|
|
||||||
|
|
||||||
**Migrating from `vscode-python`**: change `"adapter": "vscode-python"` to
|
|
||||||
`"adapter": "debugpy"`.
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"configurations": {
|
"configurations": {
|
||||||
|
|
@ -1320,34 +1360,6 @@ debugpy](https://github.com/microsoft/debugpy/wiki/Debugging-over-SSH).
|
||||||
If you're feeling fancy, checkout the [reference guide][remote-debugging] for
|
If you're feeling fancy, checkout the [reference guide][remote-debugging] for
|
||||||
an example of getting Vimspector to remotely launch and attach.
|
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": {
|
|
||||||
"<name>: Launch": {
|
|
||||||
"adapter": "vscode-python",
|
|
||||||
"configuration": {
|
|
||||||
"name": "<name>: Launch",
|
|
||||||
"type": "python",
|
|
||||||
"request": "launch",
|
|
||||||
"cwd": "<working directory>",
|
|
||||||
"stopOnEntry": true,
|
|
||||||
"console": "externalTerminal",
|
|
||||||
"debugOptions": [],
|
|
||||||
"program": "<path to main python file>"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## TCL
|
## TCL
|
||||||
|
|
||||||
* TCL (TclProDebug)
|
* TCL (TclProDebug)
|
||||||
|
|
@ -1371,35 +1383,8 @@ netcoredbg`
|
||||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
||||||
"args": [],
|
"args": [],
|
||||||
"stopAtEntry": true,
|
"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}",
|
"cwd": "${workspaceRoot}",
|
||||||
"runtimeExecutable": "mono",
|
"env": {}
|
||||||
"runtimeArgs": [],
|
|
||||||
"env": [],
|
|
||||||
"externalConsole": false,
|
|
||||||
"console": "integratedTerminal"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1416,6 +1401,8 @@ Requires:
|
||||||
* [Delve][delve-install] installed, e.g. `go get -u github.com/go-delve/delve/cmd/dlv`
|
* [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
|
* 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
|
```json
|
||||||
{
|
{
|
||||||
"configurations": {
|
"configurations": {
|
||||||
|
|
@ -1433,7 +1420,7 @@ Requires:
|
||||||
```
|
```
|
||||||
|
|
||||||
See the vscode-go docs for
|
See the vscode-go docs for
|
||||||
[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#troubleshooting)
|
[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#troubleshooting)
|
||||||
|
|
||||||
## PHP
|
## PHP
|
||||||
|
|
||||||
|
|
@ -1579,6 +1566,20 @@ 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
|
for jdt.ls, and most importantly a trivial way to load the debug adapter and to
|
||||||
use it with Vimspector.
|
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
|
### Usage with YouCompleteMe
|
||||||
|
|
||||||
* Set up [YCM for java][YcmJava].
|
* Set up [YCM for java][YcmJava].
|
||||||
|
|
@ -1738,22 +1739,26 @@ Vimsector uses them, they will not be replaced. So to customise the signs,
|
||||||
define them in your `vimrc`.
|
define them in your `vimrc`.
|
||||||
|
|
||||||
|
|
||||||
| Sign | Description | Priority |
|
| Sign | Description | Priority |
|
||||||
|------------------------|-------------------------------------|----------|
|
|---------------------------|-----------------------------------------|----------|
|
||||||
| `vimspectorBP` | Line breakpoint | 9 |
|
| `vimspectorBP` | Line breakpoint | 9 |
|
||||||
| `vimspectorBPCond` | Conditional line breakpoint | 9 |
|
| `vimspectorBPCond` | Conditional line breakpoint | 9 |
|
||||||
| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
|
| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
|
||||||
| `vimspectorPC` | Program counter (i.e. current line) | 200 |
|
| `vimspectorPC` | Program counter (i.e. current line) | 200 |
|
||||||
| `vimspectorPCBP` | Program counter and breakpoint | 200 |
|
| `vimspectorPCBP` | Program counter and breakpoint | 200 |
|
||||||
|
| `vimspectorCurrentThread` | Focussed thread in stack trace view | 200 |
|
||||||
|
| `vimspectorCurrentFrame` | Current stack frame in stack trace view | 200 |
|
||||||
|
|
||||||
The default symbols are the equivalent of something like the following:
|
The default symbols are the equivalent of something like the following:
|
||||||
|
|
||||||
```viml
|
```viml
|
||||||
sign define vimspectorBP text=\ ● texthl=WarningMsg
|
sign define vimspectorBP text=\ ● texthl=WarningMsg
|
||||||
sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
|
sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
|
||||||
sign define vimspectorBPDisabled text=\ ● texthl=LineNr
|
sign define vimspectorBPDisabled text=\ ● texthl=LineNr
|
||||||
sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
|
sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
|
||||||
sign define vimspectorPCBP 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
|
||||||
```
|
```
|
||||||
|
|
||||||
If the signs don't display properly, your font probably doesn't contain these
|
If the signs don't display properly, your font probably doesn't contain these
|
||||||
|
|
@ -1761,11 +1766,13 @@ 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:
|
example, you could put this in your `vimrc` to use some simple ASCII symbols:
|
||||||
|
|
||||||
```viml
|
```viml
|
||||||
sign define vimspectorBP text=o texthl=WarningMsg
|
sign define vimspectorBP text=o texthl=WarningMsg
|
||||||
sign define vimspectorBPCond text=o? texthl=WarningMsg
|
sign define vimspectorBPCond text=o? texthl=WarningMsg
|
||||||
sign define vimspectorBPDisabled text=o! texthl=LineNr
|
sign define vimspectorBPDisabled text=o! texthl=LineNr
|
||||||
sign define vimspectorPC text=\ > texthl=MatchParen
|
sign define vimspectorPC text=\ > texthl=MatchParen
|
||||||
sign define vimspectorPCBP text=o> texthl=MatchParen
|
sign define vimspectorPCBP text=o> texthl=MatchParen
|
||||||
|
sign define vimspectorCurrentThread text=> texthl=MatchParen
|
||||||
|
sign define vimspectorCurrentFrame text=> texthl=Special
|
||||||
```
|
```
|
||||||
|
|
||||||
## Sign priority
|
## Sign priority
|
||||||
|
|
@ -2042,6 +2049,10 @@ hi link jsonComment Comment
|
||||||
Debug adapters (for some reason) send telemetry data to clients. Vimspector simply
|
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*
|
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.
|
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
|
[ycmd]: https://github.com/Valloric/ycmd
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,9 @@
|
||||||
" See the License for the specific language governing permissions and
|
" See the License for the specific language governing permissions and
|
||||||
" limitations under the License.
|
" limitations under the License.
|
||||||
|
|
||||||
|
if !has( 'python3' )
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
" Boilerplate {{{
|
" Boilerplate {{{
|
||||||
let s:save_cpo = &cpoptions
|
let s:save_cpo = &cpoptions
|
||||||
|
|
@ -41,11 +44,11 @@ function! s:Enabled() abort
|
||||||
return s:enabled
|
return s:enabled
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! vimspector#Launch() abort
|
function! vimspector#Launch( ... ) abort
|
||||||
if !s:Enabled()
|
if !s:Enabled()
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
py3 _vimspector_session.Start()
|
py3 _vimspector_session.Start( *vim.eval( 'a:000' ) )
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! vimspector#LaunchWithSettings( settings ) abort
|
function! vimspector#LaunchWithSettings( settings ) abort
|
||||||
|
|
@ -234,6 +237,20 @@ function! vimspector#GoToFrame() abort
|
||||||
py3 _vimspector_session.ExpandFrameOrThread()
|
py3 _vimspector_session.ExpandFrameOrThread()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! vimspector#UpFrame() abort
|
||||||
|
if !s:Enabled()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
py3 _vimspector_session.UpFrame()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! vimspector#DownFrame() abort
|
||||||
|
if !s:Enabled()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
py3 _vimspector_session.DownFrame()
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! vimspector#AddWatch( ... ) abort
|
function! vimspector#AddWatch( ... ) abort
|
||||||
if !s:Enabled()
|
if !s:Enabled()
|
||||||
return
|
return
|
||||||
|
|
@ -540,6 +557,14 @@ function! vimspector#ShowEvalBalloon( is_visual ) abort
|
||||||
\ . '", 0 )' )
|
\ . '", 0 )' )
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! vimspector#PrintDebugInfo() abort
|
||||||
|
if !s:Enabled()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
py3 _vimspector_session.PrintDebugInfo()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
" Boilerplate {{{
|
" Boilerplate {{{
|
||||||
let &cpoptions=s:save_cpo
|
let &cpoptions=s:save_cpo
|
||||||
|
|
|
||||||
|
|
@ -69,14 +69,9 @@ function! vimspector#internal#balloon#CreateTooltip( is_hover, ... ) abort
|
||||||
\ 'resize': 1,
|
\ 'resize': 1,
|
||||||
\ 'close': 'button',
|
\ 'close': 'button',
|
||||||
\ 'callback': 'vimspector#internal#balloon#CloseCallback',
|
\ 'callback': 'vimspector#internal#balloon#CloseCallback',
|
||||||
\ 'mapping': 0
|
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
" When ambiwidth is single, use prettier characters for the border. This
|
let config = vimspector#internal#popup#SetBorderChars( config )
|
||||||
" would look silly when ambiwidth is double.
|
|
||||||
if &ambiwidth ==# 'single' && &encoding ==? 'utf-8'
|
|
||||||
let config[ 'borderchars' ] = [ '─', '│', '─', '│', '╭', '╮', '┛', '╰' ]
|
|
||||||
endif
|
|
||||||
|
|
||||||
if a:is_hover
|
if a:is_hover
|
||||||
let config[ 'filter' ] = 'vimspector#internal#balloon#MouseFilter'
|
let config[ 'filter' ] = 'vimspector#internal#balloon#MouseFilter'
|
||||||
|
|
@ -86,6 +81,7 @@ function! vimspector#internal#balloon#CreateTooltip( is_hover, ... ) abort
|
||||||
let config[ 'filter' ] = 'vimspector#internal#balloon#CursorFilter'
|
let config[ 'filter' ] = 'vimspector#internal#balloon#CursorFilter'
|
||||||
let config[ 'moved' ] = 'any'
|
let config[ 'moved' ] = 'any'
|
||||||
let config[ 'cursorline' ] = 1
|
let config[ 'cursorline' ] = 1
|
||||||
|
let config[ 'mapping' ] = 0
|
||||||
let s:popup_win_id = popup_atcursor( body, config )
|
let s:popup_win_id = popup_atcursor( body, config )
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,15 +159,16 @@ function! s:_OnCommandEvent( category, id, data, event ) abort
|
||||||
call setbufvar( buffer, '&modified', 0 )
|
call setbufvar( buffer, '&modified', 0 )
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
" if the buffer is visible, scroll it
|
" if the buffer is visible, scroll it, but don't allow autocommands to fire,
|
||||||
|
" as this may close the current window!
|
||||||
let w = bufwinnr( buffer )
|
let w = bufwinnr( buffer )
|
||||||
if w > 0
|
if w > 0
|
||||||
let cw = winnr()
|
let cw = winnr()
|
||||||
try
|
try
|
||||||
execute w . 'wincmd w'
|
noautocmd execute w . 'wincmd w'
|
||||||
normal! Gz-
|
noautocmd normal! Gz-
|
||||||
finally
|
finally
|
||||||
execute cw . 'wincmd w'
|
noautocmd execute cw . 'wincmd w'
|
||||||
endtry
|
endtry
|
||||||
endif
|
endif
|
||||||
elseif a:event ==# 'exit'
|
elseif a:event ==# 'exit'
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,56 @@ function! vimspector#internal#neopopup#HideSplash( id ) abort
|
||||||
unlet s:db[ a:id ]
|
unlet s:db[ a:id ]
|
||||||
endfunction
|
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 {{{
|
" Boilerplate {{{
|
||||||
let &cpoptions=s:save_cpo
|
let &cpoptions=s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
" See the License for the specific language governing permissions and
|
" See the License for the specific language governing permissions and
|
||||||
" limitations under the License.
|
" limitations under the License.
|
||||||
|
scriptencoding utf-8
|
||||||
|
|
||||||
|
|
||||||
" Boilerplate {{{
|
" Boilerplate {{{
|
||||||
|
|
@ -32,6 +33,113 @@ function! vimspector#internal#popup#HideSplash( id ) abort
|
||||||
call popup_hide( a:id )
|
call popup_hide( a:id )
|
||||||
endfunction
|
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 ==# "\<CR>"
|
||||||
|
call popup_close( a:id, s:current_selection + 1 )
|
||||||
|
return 1
|
||||||
|
elseif index( [ "\<Tab>", "\<Right>" ], a:key ) >= 0
|
||||||
|
let s:current_selection = ( s:current_selection + 1 ) % len( s:selections )
|
||||||
|
call s:UpdatePopup( a:id )
|
||||||
|
return 1
|
||||||
|
elseif index( [ "\<S-Tab>", "\<Left>" ], 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 ==# "\<Esc>" || a:key ==# "\<C-c>"
|
||||||
|
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 {{{
|
" Boilerplate {{{
|
||||||
let &cpoptions=s:save_cpo
|
let &cpoptions=s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
|
||||||
1085
doc/vimspector-ref.txt
Normal file
1085
doc/vimspector-ref.txt
Normal file
File diff suppressed because it is too large
Load diff
2394
doc/vimspector.txt
Normal file
2394
doc/vimspector.txt
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,13 +1,13 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activesupport (6.0.3.4)
|
activesupport (6.0.3.6)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
zeitwerk (~> 2.2, >= 2.2.2)
|
zeitwerk (~> 2.2, >= 2.2.2)
|
||||||
addressable (2.7.0)
|
addressable (2.8.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
coffee-script (2.4.1)
|
coffee-script (2.4.1)
|
||||||
coffee-script-source
|
coffee-script-source
|
||||||
|
|
@ -16,7 +16,7 @@ GEM
|
||||||
colorator (1.1.0)
|
colorator (1.1.0)
|
||||||
commonmarker (0.17.13)
|
commonmarker (0.17.13)
|
||||||
ruby-enum (~> 0.5)
|
ruby-enum (~> 0.5)
|
||||||
concurrent-ruby (1.1.7)
|
concurrent-ruby (1.1.8)
|
||||||
dnsruby (1.61.5)
|
dnsruby (1.61.5)
|
||||||
simpleidn (~> 0.1)
|
simpleidn (~> 0.1)
|
||||||
em-websocket (0.5.2)
|
em-websocket (0.5.2)
|
||||||
|
|
@ -30,12 +30,12 @@ GEM
|
||||||
faraday-net_http (~> 1.0)
|
faraday-net_http (~> 1.0)
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
ruby2_keywords
|
ruby2_keywords
|
||||||
faraday-net_http (1.0.0)
|
faraday-net_http (1.0.1)
|
||||||
ffi (1.14.2)
|
ffi (1.15.0)
|
||||||
forwardable-extended (2.6.0)
|
forwardable-extended (2.6.0)
|
||||||
gemoji (3.0.1)
|
gemoji (3.0.1)
|
||||||
github-pages (209)
|
github-pages (214)
|
||||||
github-pages-health-check (= 1.16.1)
|
github-pages-health-check (= 1.17.0)
|
||||||
jekyll (= 3.9.0)
|
jekyll (= 3.9.0)
|
||||||
jekyll-avatar (= 0.7.0)
|
jekyll-avatar (= 0.7.0)
|
||||||
jekyll-coffeescript (= 1.1.1)
|
jekyll-coffeescript (= 1.1.1)
|
||||||
|
|
@ -50,9 +50,9 @@ GEM
|
||||||
jekyll-readme-index (= 0.3.0)
|
jekyll-readme-index (= 0.3.0)
|
||||||
jekyll-redirect-from (= 0.16.0)
|
jekyll-redirect-from (= 0.16.0)
|
||||||
jekyll-relative-links (= 0.6.1)
|
jekyll-relative-links (= 0.6.1)
|
||||||
jekyll-remote-theme (= 0.4.2)
|
jekyll-remote-theme (= 0.4.3)
|
||||||
jekyll-sass-converter (= 1.5.2)
|
jekyll-sass-converter (= 1.5.2)
|
||||||
jekyll-seo-tag (= 2.6.1)
|
jekyll-seo-tag (= 2.7.1)
|
||||||
jekyll-sitemap (= 1.4.0)
|
jekyll-sitemap (= 1.4.0)
|
||||||
jekyll-swiss (= 1.0.0)
|
jekyll-swiss (= 1.0.0)
|
||||||
jekyll-theme-architect (= 0.1.1)
|
jekyll-theme-architect (= 0.1.1)
|
||||||
|
|
@ -70,19 +70,19 @@ GEM
|
||||||
jekyll-theme-time-machine (= 0.1.1)
|
jekyll-theme-time-machine (= 0.1.1)
|
||||||
jekyll-titles-from-headings (= 0.5.3)
|
jekyll-titles-from-headings (= 0.5.3)
|
||||||
jemoji (= 0.12.0)
|
jemoji (= 0.12.0)
|
||||||
kramdown (= 2.3.0)
|
kramdown (= 2.3.1)
|
||||||
kramdown-parser-gfm (= 1.1.0)
|
kramdown-parser-gfm (= 1.1.0)
|
||||||
liquid (= 4.0.3)
|
liquid (= 4.0.3)
|
||||||
mercenary (~> 0.3)
|
mercenary (~> 0.3)
|
||||||
minima (= 2.5.1)
|
minima (= 2.5.1)
|
||||||
nokogiri (>= 1.10.4, < 2.0)
|
nokogiri (>= 1.10.4, < 2.0)
|
||||||
rouge (= 3.23.0)
|
rouge (= 3.26.0)
|
||||||
terminal-table (~> 1.4)
|
terminal-table (~> 1.4)
|
||||||
github-pages-health-check (1.16.1)
|
github-pages-health-check (1.17.0)
|
||||||
addressable (~> 2.3)
|
addressable (~> 2.3)
|
||||||
dnsruby (~> 1.60)
|
dnsruby (~> 1.60)
|
||||||
octokit (~> 4.0)
|
octokit (~> 4.0)
|
||||||
public_suffix (~> 3.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
typhoeus (~> 1.3)
|
typhoeus (~> 1.3)
|
||||||
html-pipeline (2.14.0)
|
html-pipeline (2.14.0)
|
||||||
activesupport (>= 2)
|
activesupport (>= 2)
|
||||||
|
|
@ -136,15 +136,15 @@ GEM
|
||||||
jekyll (>= 3.3, < 5.0)
|
jekyll (>= 3.3, < 5.0)
|
||||||
jekyll-relative-links (0.6.1)
|
jekyll-relative-links (0.6.1)
|
||||||
jekyll (>= 3.3, < 5.0)
|
jekyll (>= 3.3, < 5.0)
|
||||||
jekyll-remote-theme (0.4.2)
|
jekyll-remote-theme (0.4.3)
|
||||||
addressable (~> 2.0)
|
addressable (~> 2.0)
|
||||||
jekyll (>= 3.5, < 5.0)
|
jekyll (>= 3.5, < 5.0)
|
||||||
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
||||||
rubyzip (>= 1.3.0, < 3.0)
|
rubyzip (>= 1.3.0, < 3.0)
|
||||||
jekyll-sass-converter (1.5.2)
|
jekyll-sass-converter (1.5.2)
|
||||||
sass (~> 3.4)
|
sass (~> 3.4)
|
||||||
jekyll-seo-tag (2.6.1)
|
jekyll-seo-tag (2.7.1)
|
||||||
jekyll (>= 3.3, < 5.0)
|
jekyll (>= 3.8, < 5.0)
|
||||||
jekyll-sitemap (1.4.0)
|
jekyll-sitemap (1.4.0)
|
||||||
jekyll (>= 3.7, < 5.0)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-swiss (1.0.0)
|
jekyll-swiss (1.0.0)
|
||||||
|
|
@ -196,23 +196,23 @@ GEM
|
||||||
gemoji (~> 3.0)
|
gemoji (~> 3.0)
|
||||||
html-pipeline (~> 2.2)
|
html-pipeline (~> 2.2)
|
||||||
jekyll (>= 3.0, < 5.0)
|
jekyll (>= 3.0, < 5.0)
|
||||||
kramdown (2.3.0)
|
kramdown (2.3.1)
|
||||||
rexml
|
rexml
|
||||||
kramdown-parser-gfm (1.1.0)
|
kramdown-parser-gfm (1.1.0)
|
||||||
kramdown (~> 2.0)
|
kramdown (~> 2.0)
|
||||||
liquid (4.0.3)
|
liquid (4.0.3)
|
||||||
listen (3.4.0)
|
listen (3.5.1)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
mercenary (0.3.6)
|
mercenary (0.3.6)
|
||||||
mini_portile2 (2.5.0)
|
mini_portile2 (2.5.1)
|
||||||
minima (2.5.1)
|
minima (2.5.1)
|
||||||
jekyll (>= 3.5, < 5.0)
|
jekyll (>= 3.5, < 5.0)
|
||||||
jekyll-feed (~> 0.9)
|
jekyll-feed (~> 0.9)
|
||||||
jekyll-seo-tag (~> 2.1)
|
jekyll-seo-tag (~> 2.1)
|
||||||
minitest (5.14.3)
|
minitest (5.14.4)
|
||||||
multipart-post (2.1.1)
|
multipart-post (2.1.1)
|
||||||
nokogiri (1.11.1)
|
nokogiri (1.11.5)
|
||||||
mini_portile2 (~> 2.5.0)
|
mini_portile2 (~> 2.5.0)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
octokit (4.20.0)
|
octokit (4.20.0)
|
||||||
|
|
@ -220,16 +220,16 @@ GEM
|
||||||
sawyer (~> 0.8.0, >= 0.5.3)
|
sawyer (~> 0.8.0, >= 0.5.3)
|
||||||
pathutil (0.16.2)
|
pathutil (0.16.2)
|
||||||
forwardable-extended (~> 2.6)
|
forwardable-extended (~> 2.6)
|
||||||
public_suffix (3.1.1)
|
public_suffix (4.0.6)
|
||||||
racc (1.5.2)
|
racc (1.5.2)
|
||||||
rb-fsevent (0.10.4)
|
rb-fsevent (0.10.4)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
rexml (3.2.4)
|
rexml (3.2.5)
|
||||||
rouge (3.23.0)
|
rouge (3.26.0)
|
||||||
ruby-enum (0.8.0)
|
ruby-enum (0.9.0)
|
||||||
i18n
|
i18n
|
||||||
ruby2_keywords (0.0.2)
|
ruby2_keywords (0.0.4)
|
||||||
rubyzip (2.3.0)
|
rubyzip (2.3.0)
|
||||||
safe_yaml (1.0.5)
|
safe_yaml (1.0.5)
|
||||||
sass (3.7.4)
|
sass (3.7.4)
|
||||||
|
|
@ -240,7 +240,7 @@ GEM
|
||||||
sawyer (0.8.2)
|
sawyer (0.8.2)
|
||||||
addressable (>= 2.3.5)
|
addressable (>= 2.3.5)
|
||||||
faraday (> 0.8, < 2.0)
|
faraday (> 0.8, < 2.0)
|
||||||
simpleidn (0.1.1)
|
simpleidn (0.2.1)
|
||||||
unf (~> 0.1.4)
|
unf (~> 0.1.4)
|
||||||
terminal-table (1.8.0)
|
terminal-table (1.8.0)
|
||||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@ JSON value `true`, and the suffix is stripped fom the key, resulting in the
|
||||||
following:
|
following:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"stopOnEntry#json": true
|
"stopOnEntry": true
|
||||||
```
|
```
|
||||||
|
|
||||||
Which is what we need.
|
Which is what we need.
|
||||||
|
|
@ -722,7 +722,7 @@ Vimspector then orchestrates the various tools to set you up.
|
||||||
"variables": {
|
"variables": {
|
||||||
// Just an example of how to specify a variable manually rather than
|
// Just an example of how to specify a variable manually rather than
|
||||||
// vimspector asking for input from the user
|
// vimspector asking for input from the user
|
||||||
"ServiceName": "${fileBasenameNoExtention}"
|
"ServiceName": "${fileBasenameNoExtension}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"adapter": "python-remote",
|
"adapter": "python-remote",
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,13 @@
|
||||||
" See the License for the specific language governing permissions and
|
" See the License for the specific language governing permissions and
|
||||||
" limitations under the License.
|
" limitations under the License.
|
||||||
|
|
||||||
|
if !has( 'python3' )
|
||||||
|
echohl WarningMsg
|
||||||
|
echom 'Vimspector unavailable: Requires Vim compiled with +python3'
|
||||||
|
echohl None
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
" Boilerplate {{{
|
" Boilerplate {{{
|
||||||
let s:save_cpo = &cpoptions
|
let s:save_cpo = &cpoptions
|
||||||
set cpoptions&vim
|
set cpoptions&vim
|
||||||
|
|
@ -35,6 +42,8 @@ let s:mappings = get( g:, 'vimspector_enable_mappings', '' )
|
||||||
|
|
||||||
nnoremap <silent> <Plug>VimspectorContinue
|
nnoremap <silent> <Plug>VimspectorContinue
|
||||||
\ :<c-u>call vimspector#Continue()<CR>
|
\ :<c-u>call vimspector#Continue()<CR>
|
||||||
|
nnoremap <silent> <Plug>VimspectorLaunch
|
||||||
|
\ :<c-u>call vimspector#Launch( v:true )<CR>
|
||||||
nnoremap <silent> <Plug>VimspectorStop
|
nnoremap <silent> <Plug>VimspectorStop
|
||||||
\ :<c-u>call vimspector#Stop()<CR>
|
\ :<c-u>call vimspector#Stop()<CR>
|
||||||
nnoremap <silent> <Plug>VimspectorRestart
|
nnoremap <silent> <Plug>VimspectorRestart
|
||||||
|
|
@ -67,6 +76,11 @@ nnoremap <silent> <Plug>VimspectorBalloonEval
|
||||||
xnoremap <silent> <Plug>VimspectorBalloonEval
|
xnoremap <silent> <Plug>VimspectorBalloonEval
|
||||||
\ :<c-u>call vimspector#ShowEvalBalloon( 1 )<CR>
|
\ :<c-u>call vimspector#ShowEvalBalloon( 1 )<CR>
|
||||||
|
|
||||||
|
nnoremap <silent> <Plug>VimspectorUpFrame
|
||||||
|
\ :<c-u>call vimspector#UpFrame()<CR>
|
||||||
|
nnoremap <silent> <Plug>VimspectorDownFrame
|
||||||
|
\ :<c-u>call vimspector#DownFrame()<CR>
|
||||||
|
|
||||||
if s:mappings ==# 'VISUAL_STUDIO'
|
if s:mappings ==# 'VISUAL_STUDIO'
|
||||||
nmap <F5> <Plug>VimspectorContinue
|
nmap <F5> <Plug>VimspectorContinue
|
||||||
nmap <S-F5> <Plug>VimspectorStop
|
nmap <S-F5> <Plug>VimspectorStop
|
||||||
|
|
@ -79,6 +93,7 @@ if s:mappings ==# 'VISUAL_STUDIO'
|
||||||
nmap <S-F11> <Plug>VimspectorStepOut
|
nmap <S-F11> <Plug>VimspectorStepOut
|
||||||
elseif s:mappings ==# 'HUMAN'
|
elseif s:mappings ==# 'HUMAN'
|
||||||
nmap <F5> <Plug>VimspectorContinue
|
nmap <F5> <Plug>VimspectorContinue
|
||||||
|
nmap <leader><F5> <Plug>VimspectorLaunch
|
||||||
nmap <F3> <Plug>VimspectorStop
|
nmap <F3> <Plug>VimspectorStop
|
||||||
nmap <F4> <Plug>VimspectorRestart
|
nmap <F4> <Plug>VimspectorRestart
|
||||||
nmap <F6> <Plug>VimspectorPause
|
nmap <F6> <Plug>VimspectorPause
|
||||||
|
|
@ -100,6 +115,9 @@ command! -bar -nargs=? -complete=custom,vimspector#CompleteOutput
|
||||||
command! -bar
|
command! -bar
|
||||||
\ VimspectorToggleLog
|
\ VimspectorToggleLog
|
||||||
\ call vimspector#ToggleLog()
|
\ call vimspector#ToggleLog()
|
||||||
|
command! -bar
|
||||||
|
\ VimspectorDebugInfo
|
||||||
|
\ call vimspector#PrintDebugInfo()
|
||||||
command! -nargs=1 -complete=custom,vimspector#CompleteExpr
|
command! -nargs=1 -complete=custom,vimspector#CompleteExpr
|
||||||
\ VimspectorEval
|
\ VimspectorEval
|
||||||
\ call vimspector#Evaluate( <f-args> )
|
\ call vimspector#Evaluate( <f-args> )
|
||||||
|
|
|
||||||
51
python3/vimspector/custom/java.py
Normal file
51
python3/vimspector/custom/java.py
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# 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' ] )
|
||||||
|
|
@ -29,14 +29,14 @@ class PendingRequest( object ):
|
||||||
|
|
||||||
|
|
||||||
class DebugAdapterConnection( object ):
|
class DebugAdapterConnection( object ):
|
||||||
def __init__( self, handler, send_func ):
|
def __init__( self, handlers, send_func ):
|
||||||
self._logger = logging.getLogger( __name__ )
|
self._logger = logging.getLogger( __name__ )
|
||||||
utils.SetUpLogging( self._logger )
|
utils.SetUpLogging( self._logger )
|
||||||
|
|
||||||
self._Write = send_func
|
self._Write = send_func
|
||||||
self._SetState( 'READ_HEADER' )
|
self._SetState( 'READ_HEADER' )
|
||||||
self._buffer = bytes()
|
self._buffer = bytes()
|
||||||
self._handler = handler
|
self._handlers = handlers
|
||||||
self._next_message_id = 0
|
self._next_message_id = 0
|
||||||
self._outstanding_requests = {}
|
self._outstanding_requests = {}
|
||||||
|
|
||||||
|
|
@ -124,7 +124,7 @@ class DebugAdapterConnection( object ):
|
||||||
|
|
||||||
def Reset( self ):
|
def Reset( self ):
|
||||||
self._Write = None
|
self._Write = None
|
||||||
self._handler = None
|
self._handlers = None
|
||||||
|
|
||||||
while self._outstanding_requests:
|
while self._outstanding_requests:
|
||||||
_, request = self._outstanding_requests.popitem()
|
_, request = self._outstanding_requests.popitem()
|
||||||
|
|
@ -226,7 +226,12 @@ class DebugAdapterConnection( object ):
|
||||||
|
|
||||||
# self._logger.debug( 'Message received (raw): %s', payload )
|
# self._logger.debug( 'Message received (raw): %s', payload )
|
||||||
|
|
||||||
message = json.loads( payload )
|
try:
|
||||||
|
message = json.loads( payload, strict = False )
|
||||||
|
except Exception:
|
||||||
|
self._logger.exception( "Invalid message received: %s", payload )
|
||||||
|
self._SetState( 'READ_HEADER' )
|
||||||
|
raise
|
||||||
|
|
||||||
self._logger.debug( 'Message received: {0}'.format( message ) )
|
self._logger.debug( 'Message received: {0}'.format( message ) )
|
||||||
|
|
||||||
|
|
@ -237,7 +242,7 @@ class DebugAdapterConnection( object ):
|
||||||
|
|
||||||
|
|
||||||
def _OnMessageReceived( self, message ):
|
def _OnMessageReceived( self, message ):
|
||||||
if not self._handler:
|
if not self._handlers:
|
||||||
return
|
return
|
||||||
|
|
||||||
if message[ 'type' ] == 'response':
|
if message[ 'type' ] == 'response':
|
||||||
|
|
@ -270,25 +275,21 @@ class DebugAdapterConnection( object ):
|
||||||
self._logger.error( 'Request failed: {0}'.format( reason ) )
|
self._logger.error( 'Request failed: {0}'.format( reason ) )
|
||||||
if request.failure_handler:
|
if request.failure_handler:
|
||||||
request.failure_handler( reason, message )
|
request.failure_handler( reason, message )
|
||||||
elif 'OnFailure' in dir( self._handler ):
|
|
||||||
self._handler.OnFailure( reason, request.msg, message )
|
|
||||||
else:
|
else:
|
||||||
utils.UserMessage( 'Request failed: {0}'.format( reason ) )
|
for h in self._handlers:
|
||||||
|
if 'OnFailure' in dir( h ):
|
||||||
|
h.OnFailure( reason, request.msg, message )
|
||||||
|
|
||||||
elif message[ 'type' ] == 'event':
|
elif message[ 'type' ] == 'event':
|
||||||
method = 'OnEvent_' + message[ 'event' ]
|
method = 'OnEvent_' + message[ 'event' ]
|
||||||
if method in dir( self._handler ):
|
for h in self._handlers:
|
||||||
getattr( self._handler, method )( message )
|
if method in dir( h ):
|
||||||
else:
|
getattr( h, method )( message )
|
||||||
utils.UserMessage( 'Unhandled event: {0}'.format( message[ 'event' ] ),
|
|
||||||
persist = True )
|
|
||||||
elif message[ 'type' ] == 'request':
|
elif message[ 'type' ] == 'request':
|
||||||
method = 'OnRequest_' + message[ 'command' ]
|
method = 'OnRequest_' + message[ 'command' ]
|
||||||
if method in dir( self._handler ):
|
for h in self._handlers:
|
||||||
getattr( self._handler, method )( message )
|
if method in dir( h ):
|
||||||
else:
|
getattr( h, method )( message )
|
||||||
utils.UserMessage(
|
|
||||||
'Unhandled request: {0}'.format( message[ 'command' ] ),
|
|
||||||
persist = True )
|
|
||||||
|
|
||||||
|
|
||||||
def _KillTimer( request ):
|
def _KillTimer( request ):
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import shlex
|
||||||
import subprocess
|
import subprocess
|
||||||
import functools
|
import functools
|
||||||
import vim
|
import vim
|
||||||
|
import importlib
|
||||||
|
|
||||||
from vimspector import ( breakpoints,
|
from vimspector import ( breakpoints,
|
||||||
code,
|
code,
|
||||||
|
|
@ -99,7 +100,7 @@ class DebugSession( object ):
|
||||||
|
|
||||||
return launch_config_file, configurations
|
return launch_config_file, configurations
|
||||||
|
|
||||||
def Start( self, launch_variables = None ):
|
def Start( self, force_choose=False, launch_variables = None ):
|
||||||
# We mutate launch_variables, so don't mutate the default argument.
|
# We mutate launch_variables, so don't mutate the default argument.
|
||||||
# https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments
|
# https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments
|
||||||
if launch_variables is None:
|
if launch_variables is None:
|
||||||
|
|
@ -134,6 +135,11 @@ class DebugSession( object ):
|
||||||
|
|
||||||
if 'configuration' in launch_variables:
|
if 'configuration' in launch_variables:
|
||||||
configuration_name = launch_variables.pop( 'configuration' )
|
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
|
elif ( len( configurations ) == 1 and
|
||||||
next( iter( configurations.values() ) ).get( "autoselect", True ) ):
|
next( iter( configurations.values() ) ).get( "autoselect", True ) ):
|
||||||
configuration_name = next( iter( configurations.keys() ) )
|
configuration_name = next( iter( configurations.keys() ) )
|
||||||
|
|
@ -571,6 +577,14 @@ class DebugSession( object ):
|
||||||
def ExpandFrameOrThread( self ):
|
def ExpandFrameOrThread( self ):
|
||||||
self._stackTraceView.ExpandFrameOrThread()
|
self._stackTraceView.ExpandFrameOrThread()
|
||||||
|
|
||||||
|
@IfConnected()
|
||||||
|
def UpFrame( self ):
|
||||||
|
self._stackTraceView.UpFrame()
|
||||||
|
|
||||||
|
@IfConnected()
|
||||||
|
def DownFrame( self ):
|
||||||
|
self._stackTraceView.DownFrame()
|
||||||
|
|
||||||
def ToggleLog( self ):
|
def ToggleLog( self ):
|
||||||
if self._HasUI():
|
if self._HasUI():
|
||||||
return self.ShowOutput( 'Vimspector' )
|
return self.ShowOutput( 'Vimspector' )
|
||||||
|
|
@ -655,6 +669,45 @@ class DebugSession( object ):
|
||||||
vim.command( 'tab split' )
|
vim.command( 'tab split' )
|
||||||
self._uiTab = vim.current.tabpage
|
self._uiTab = vim.current.tabpage
|
||||||
|
|
||||||
|
mode = settings.Get( 'ui_mode' )
|
||||||
|
|
||||||
|
if mode == 'auto':
|
||||||
|
# Go vertical if there isn't enough horizontal space for at least:
|
||||||
|
# the left bar width
|
||||||
|
# + the code min width
|
||||||
|
# + the terminal min width
|
||||||
|
# + enough space for a sign column and number column?
|
||||||
|
min_width = ( settings.Int( 'sidebar_width' )
|
||||||
|
+ 1 + 2 + 3
|
||||||
|
+ settings.Int( 'code_minwidth' )
|
||||||
|
+ 1 + settings.Int( 'terminal_minwidth' ) )
|
||||||
|
|
||||||
|
min_height = ( settings.Int( 'code_minheight' ) + 1 +
|
||||||
|
settings.Int( 'topbar_height' ) + 1 +
|
||||||
|
settings.Int( 'bottombar_height' ) + 1 +
|
||||||
|
2 )
|
||||||
|
|
||||||
|
mode = ( 'vertical'
|
||||||
|
if vim.options[ 'columns' ] < min_width
|
||||||
|
else 'horizontal' )
|
||||||
|
|
||||||
|
if vim.options[ 'lines' ] < min_height:
|
||||||
|
mode = 'horizontal'
|
||||||
|
|
||||||
|
self._logger.debug( 'min_width/height: %s/%s, actual: %s/%s - result: %s',
|
||||||
|
min_width,
|
||||||
|
min_height,
|
||||||
|
vim.options[ 'columns' ],
|
||||||
|
vim.options[ 'lines' ],
|
||||||
|
mode )
|
||||||
|
|
||||||
|
if mode == 'vertical':
|
||||||
|
self._SetUpUIVertical()
|
||||||
|
else:
|
||||||
|
self._SetUpUIHorizontal()
|
||||||
|
|
||||||
|
|
||||||
|
def _SetUpUIHorizontal( self ):
|
||||||
# Code window
|
# Code window
|
||||||
code_window = vim.current.window
|
code_window = vim.current.window
|
||||||
self._codeView = code.CodeView( code_window, self._api_prefix )
|
self._codeView = code.CodeView( code_window, self._api_prefix )
|
||||||
|
|
@ -695,6 +748,66 @@ class DebugSession( object ):
|
||||||
# TODO: If/when we support multiple sessions, we'll need some way to
|
# TODO: If/when we support multiple sessions, we'll need some way to
|
||||||
# indicate which tab was created and store all the tabs
|
# indicate which tab was created and store all the tabs
|
||||||
vim.vars[ 'vimspector_session_windows' ] = {
|
vim.vars[ 'vimspector_session_windows' ] = {
|
||||||
|
'mode': 'horizontal',
|
||||||
|
'tabpage': self._uiTab.number,
|
||||||
|
'code': utils.WindowID( code_window, self._uiTab ),
|
||||||
|
'stack_trace': utils.WindowID( stack_trace_window, self._uiTab ),
|
||||||
|
'variables': utils.WindowID( vars_window, self._uiTab ),
|
||||||
|
'watches': utils.WindowID( watch_window, self._uiTab ),
|
||||||
|
'output': utils.WindowID( output_window, self._uiTab ),
|
||||||
|
'eval': None # this is going to be updated every time eval popup is opened
|
||||||
|
}
|
||||||
|
with utils.RestoreCursorPosition():
|
||||||
|
with utils.RestoreCurrentWindow():
|
||||||
|
with utils.RestoreCurrentBuffer( vim.current.window ):
|
||||||
|
vim.command( 'doautocmd User VimspectorUICreated' )
|
||||||
|
|
||||||
|
|
||||||
|
def _SetUpUIVertical( self ):
|
||||||
|
# Code window
|
||||||
|
code_window = vim.current.window
|
||||||
|
self._codeView = code.CodeView( code_window, self._api_prefix )
|
||||||
|
|
||||||
|
# Call stack
|
||||||
|
vim.command(
|
||||||
|
f'topleft { settings.Int( "topbar_height" ) }new' )
|
||||||
|
stack_trace_window = vim.current.window
|
||||||
|
one_third = int( vim.eval( 'winwidth( 0 )' ) ) / 3
|
||||||
|
self._stackTraceView = stack_trace.StackTraceView( self,
|
||||||
|
stack_trace_window )
|
||||||
|
|
||||||
|
|
||||||
|
# Watches
|
||||||
|
vim.command( 'leftabove vertical new' )
|
||||||
|
watch_window = vim.current.window
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
vim.command( 'leftabove vertical new' )
|
||||||
|
vars_window = vim.current.window
|
||||||
|
|
||||||
|
|
||||||
|
with utils.LetCurrentWindow( vars_window ):
|
||||||
|
vim.command( f'{ one_third }wincmd |' )
|
||||||
|
with utils.LetCurrentWindow( watch_window ):
|
||||||
|
vim.command( f'{ one_third }wincmd |' )
|
||||||
|
with utils.LetCurrentWindow( stack_trace_window ):
|
||||||
|
vim.command( f'{ one_third }wincmd |' )
|
||||||
|
|
||||||
|
self._variablesView = variables.VariablesView( vars_window,
|
||||||
|
watch_window )
|
||||||
|
|
||||||
|
|
||||||
|
# Output/logging
|
||||||
|
vim.current.window = code_window
|
||||||
|
vim.command( f'rightbelow { settings.Int( "bottombar_height" ) }new' )
|
||||||
|
output_window = vim.current.window
|
||||||
|
self._outputView = output.DAPOutputView( output_window,
|
||||||
|
self._api_prefix )
|
||||||
|
|
||||||
|
# TODO: If/when we support multiple sessions, we'll need some way to
|
||||||
|
# indicate which tab was created and store all the tabs
|
||||||
|
vim.vars[ 'vimspector_session_windows' ] = {
|
||||||
|
'mode': 'vertical',
|
||||||
'tabpage': self._uiTab.number,
|
'tabpage': self._uiTab.number,
|
||||||
'code': utils.WindowID( code_window, self._uiTab ),
|
'code': utils.WindowID( code_window, self._uiTab ),
|
||||||
'stack_trace': utils.WindowID( stack_trace_window, self._uiTab ),
|
'stack_trace': utils.WindowID( stack_trace_window, self._uiTab ),
|
||||||
|
|
@ -781,8 +894,21 @@ class DebugSession( object ):
|
||||||
self._splash_screen,
|
self._splash_screen,
|
||||||
"Unable to start adapter" )
|
"Unable to start adapter" )
|
||||||
else:
|
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(
|
self._connection = debug_adapter_connection.DebugAdapterConnection(
|
||||||
self,
|
handlers,
|
||||||
lambda msg: utils.Call(
|
lambda msg: utils.Call(
|
||||||
"vimspector#internal#{}#Send".format( self._connection_type ),
|
"vimspector#internal#{}#Send".format( self._connection_type ),
|
||||||
msg ) )
|
msg ) )
|
||||||
|
|
@ -790,39 +916,58 @@ class DebugSession( object ):
|
||||||
self._logger.info( 'Debug Adapter Started' )
|
self._logger.info( 'Debug Adapter Started' )
|
||||||
|
|
||||||
def _StopDebugAdapter( self, interactive = False, callback = None ):
|
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 = {}
|
arguments = {}
|
||||||
if ( interactive and
|
|
||||||
self._server_capabilities.get( 'supportTerminateDebuggee' ) ):
|
def disconnect():
|
||||||
if self._stackTraceView.AnyThreadsRunning():
|
self._splash_screen = utils.DisplaySplash(
|
||||||
choice = utils.AskForInput( "Terminate debuggee [Y/N/default]? ", "" )
|
self._api_prefix,
|
||||||
if choice == "Y" or choice == "y":
|
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
|
||||||
arguments[ 'terminateDebuggee' ] = True
|
arguments[ 'terminateDebuggee' ] = True
|
||||||
elif choice == "N" or choice == 'n':
|
elif choice == 2:
|
||||||
|
# no
|
||||||
arguments[ 'terminateDebuggee' ] = False
|
arguments[ 'terminateDebuggee' ] = False
|
||||||
|
elif choice <= 0:
|
||||||
|
# Abort
|
||||||
|
return
|
||||||
|
# Else, use server default
|
||||||
|
|
||||||
self._connection.DoRequest( handler, {
|
disconnect()
|
||||||
'command': 'disconnect',
|
|
||||||
'arguments': arguments,
|
|
||||||
}, failure_handler = handler, timeout = 5000 )
|
|
||||||
|
|
||||||
# TODO: Use the 'tarminate' request if supportsTerminateRequest set
|
utils.Confirm( self._api_prefix,
|
||||||
|
"Terminate debuggee?",
|
||||||
|
handle_choice,
|
||||||
|
default_value = 3,
|
||||||
|
options = [ '(Y)es', '(N)o', '(D)efault' ],
|
||||||
|
keys = [ 'y', 'n', 'd' ] )
|
||||||
|
|
||||||
|
|
||||||
def _PrepareAttach( self, adapter_config, launch_config ):
|
def _PrepareAttach( self, adapter_config, launch_config ):
|
||||||
|
|
@ -1125,6 +1270,37 @@ class DebugSession( object ):
|
||||||
self._stackTraceView.LoadThreads( True )
|
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 ):
|
def OnEvent_loadedSource( self, msg ):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,12 @@ GADGETS = {
|
||||||
root,
|
root,
|
||||||
gadget ),
|
gadget ),
|
||||||
'all': {
|
'all': {
|
||||||
'version': '0.27.0',
|
'version': '1.6.0',
|
||||||
"adapters": {
|
"adapters": {
|
||||||
"vscode-cpptools": {
|
"vscode-cpptools": {
|
||||||
"name": "cppdbg",
|
"name": "cppdbg",
|
||||||
"command": [
|
"command": [
|
||||||
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
|
"${gadgetDir}/vscode-cpptools/debugAdapters/bin/OpenDebugAD7"
|
||||||
],
|
],
|
||||||
"attach": {
|
"attach": {
|
||||||
"pidProperty": "processId",
|
"pidProperty": "processId",
|
||||||
|
|
@ -53,17 +53,17 @@ GADGETS = {
|
||||||
'linux': {
|
'linux': {
|
||||||
'file_name': 'cpptools-linux.vsix',
|
'file_name': 'cpptools-linux.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'3695202e1e75a03de18049323b66d868165123f26151f8c974a480eaf0205435',
|
'c25299bcfb46b22d41aa3f125df7184e6282a35ff9fb69c47def744cb4778f55',
|
||||||
},
|
},
|
||||||
'macos': {
|
'macos': {
|
||||||
'file_name': 'cpptools-osx.vsix',
|
'file_name': 'cpptools-osx-arm64.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'cb061e3acd7559a539e5586f8d3f535101c4ec4e8a48195856d1d39380b5cf3c',
|
'ceb3e8cdaa2b5bb45af50913ddd8402089969748af8d70f5d46480408287ba6f',
|
||||||
},
|
},
|
||||||
'windows': {
|
'windows': {
|
||||||
'file_name': 'cpptools-win32.vsix',
|
'file_name': 'cpptools-win32.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'aa294368ed16d48c59e49c8000e146eae5a19ad07b654efed5db8ec93b24229e',
|
'ef7ac5831874a3c7dbf0feb826bfda2be579aff9b6d990622fff1d0d4ede00d1',
|
||||||
"adapters": {
|
"adapters": {
|
||||||
"vscode-cpptools": {
|
"vscode-cpptools": {
|
||||||
"name": "cppdbg",
|
"name": "cppdbg",
|
||||||
|
|
@ -86,29 +86,6 @@ 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': {
|
'debugpy': {
|
||||||
'language': 'python',
|
'language': 'python',
|
||||||
'download': {
|
'download': {
|
||||||
|
|
@ -159,7 +136,8 @@ GADGETS = {
|
||||||
"port": "${DAPPort}",
|
"port": "${DAPPort}",
|
||||||
"configuration": {
|
"configuration": {
|
||||||
"cwd": "${workspaceRoot}"
|
"cwd": "${workspaceRoot}"
|
||||||
}
|
},
|
||||||
|
'custom_handler': 'vimspector.custom.java.JavaDebugAdapter'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -233,15 +211,15 @@ GADGETS = {
|
||||||
'format': 'tar',
|
'format': 'tar',
|
||||||
},
|
},
|
||||||
'all': {
|
'all': {
|
||||||
'version': '1.2.0-635'
|
'version': '1.2.0-782'
|
||||||
},
|
},
|
||||||
'macos': {
|
'macos': {
|
||||||
'file_name': 'netcoredbg-osx.tar.gz',
|
'file_name': 'netcoredbg-osx.tar.gz',
|
||||||
'checksum':
|
'checksum':
|
||||||
'71c773e34d358950f25119bade7e3081c4c2f9d71847bd49027ca5792e918beb',
|
'',
|
||||||
},
|
},
|
||||||
'linux': {
|
'linux': {
|
||||||
'file_name': 'netcoredbg-linux-bionic.tar.gz',
|
'file_name': 'netcoredbg-linux-bionic-amd64.tar.gz',
|
||||||
'checksum': '',
|
'checksum': '',
|
||||||
},
|
},
|
||||||
'windows': {
|
'windows': {
|
||||||
|
|
@ -268,41 +246,6 @@ 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': {
|
'vscode-bash-debug': {
|
||||||
'language': 'bash',
|
'language': 'bash',
|
||||||
'download': {
|
'download': {
|
||||||
|
|
@ -380,10 +323,10 @@ GADGETS = {
|
||||||
'${version}/${file_name}',
|
'${version}/${file_name}',
|
||||||
},
|
},
|
||||||
'all': {
|
'all': {
|
||||||
'version': 'v1.14.9',
|
'version': 'v1.17.0',
|
||||||
'file_name': 'php-debug.vsix',
|
'file_name': 'php-debug-1.17.0.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'0c5709cbbffe26b12aa63a88142195a9a045a5d8fca7fe63d62c789fe601630d',
|
'd0fff272503414b6696cc737bc2e18e060fdd5e5dc4bcaf38ae7373afd8d8bc9',
|
||||||
},
|
},
|
||||||
'adapters': {
|
'adapters': {
|
||||||
'vscode-php-debug': {
|
'vscode-php-debug': {
|
||||||
|
|
@ -451,12 +394,12 @@ GADGETS = {
|
||||||
'${version}/${file_name}',
|
'${version}/${file_name}',
|
||||||
},
|
},
|
||||||
'all': {
|
'all': {
|
||||||
'version': 'v1.5.3',
|
'version': 'v1.6.6',
|
||||||
},
|
},
|
||||||
'macos': {
|
'macos': {
|
||||||
'file_name': 'codelldb-x86_64-darwin.vsix',
|
'file_name': 'codelldb-aarch64-darwin.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'7505bc1cdfcfd1cb981e2996aec62d63577440709bac31dcadb41a3b4b44631a',
|
'5adc3b9139eabdafd825bd5efc55df4424a203fb2b6087b425cd434956e7ec58',
|
||||||
'make_executable': [
|
'make_executable': [
|
||||||
'adapter/codelldb',
|
'adapter/codelldb',
|
||||||
'lldb/bin/debugserver',
|
'lldb/bin/debugserver',
|
||||||
|
|
@ -467,7 +410,7 @@ GADGETS = {
|
||||||
'linux': {
|
'linux': {
|
||||||
'file_name': 'codelldb-x86_64-linux.vsix',
|
'file_name': 'codelldb-x86_64-linux.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'ce7efc3e94d775368e5942a02bf5c326b6809a0b4c389f79ffa6a8f6f6b72139',
|
'eda2cd9b3089dcc0524c273e91ffb5875fe08c930bf643739a2cd1846e1f98d6',
|
||||||
'make_executable': [
|
'make_executable': [
|
||||||
'adapter/codelldb',
|
'adapter/codelldb',
|
||||||
'lldb/bin/lldb',
|
'lldb/bin/lldb',
|
||||||
|
|
@ -478,7 +421,7 @@ GADGETS = {
|
||||||
'windows': {
|
'windows': {
|
||||||
'file_name': 'codelldb-x86_64-windows.vsix',
|
'file_name': 'codelldb-x86_64-windows.vsix',
|
||||||
'checksum':
|
'checksum':
|
||||||
'',
|
'8ddebe8381a3d22dc3d95139c3797fda06b5cc34aadf300e13b1c516b9da95fe',
|
||||||
'make_executable': []
|
'make_executable': []
|
||||||
},
|
},
|
||||||
'adapters': {
|
'adapters': {
|
||||||
|
|
|
||||||
|
|
@ -358,7 +358,8 @@ def InstallCppTools( name, root, gadget ):
|
||||||
# It's hilarious, but the execute bits aren't set in the vsix. So they
|
# 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
|
# actually have javascript code which does this. It's just a horrible horrible
|
||||||
# hack that really is not funny.
|
# hack that really is not funny.
|
||||||
MakeExecutable( os.path.join( extension, 'debugAdapters', 'OpenDebugAD7' ) )
|
MakeExecutable(
|
||||||
|
os.path.join( extension, 'debugAdapters', 'bin', 'OpenDebugAD7' ) )
|
||||||
with open( os.path.join( extension, 'package.json' ) ) as f:
|
with open( os.path.join( extension, 'package.json' ) ) as f:
|
||||||
package = json.load( f )
|
package = json.load( f )
|
||||||
runtime_dependencies = package[ 'runtimeDependencies' ]
|
runtime_dependencies = package[ 'runtimeDependencies' ]
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class TabBuffer( object ):
|
||||||
BUFFER_MAP = {
|
BUFFER_MAP = {
|
||||||
'console': 'Console',
|
'console': 'Console',
|
||||||
'stdout': 'Console',
|
'stdout': 'Console',
|
||||||
|
'output': 'Console',
|
||||||
'stderr': 'stderr',
|
'stderr': 'stderr',
|
||||||
'telemetry': None,
|
'telemetry': None,
|
||||||
}
|
}
|
||||||
|
|
@ -64,8 +65,11 @@ class OutputView( object ):
|
||||||
self._api_prefix = api_prefix
|
self._api_prefix = api_prefix
|
||||||
VIEWS.add( self )
|
VIEWS.add( self )
|
||||||
|
|
||||||
def Print( self, categroy, text ):
|
def Print( self, category, text: typing.Union[ str, list ] ):
|
||||||
self._Print( 'server', text.splitlines() )
|
if not isinstance( text, list ):
|
||||||
|
text = text.splitlines()
|
||||||
|
|
||||||
|
self._Print( category, text )
|
||||||
|
|
||||||
def OnOutput( self, event ):
|
def OnOutput( self, event ):
|
||||||
category = CategoryToBuffer( event.get( 'category' ) or 'output' )
|
category = CategoryToBuffer( event.get( 'category' ) or 'output' )
|
||||||
|
|
@ -104,13 +108,26 @@ class OutputView( object ):
|
||||||
|
|
||||||
def Clear( self ):
|
def Clear( self ):
|
||||||
for category, tab_buffer in self._buffers.items():
|
for category, tab_buffer in self._buffers.items():
|
||||||
if tab_buffer.is_job:
|
self._CleanUpBuffer( category, tab_buffer )
|
||||||
utils.CleanUpCommand( category, self._api_prefix )
|
|
||||||
utils.CleanUpHiddenBuffer( tab_buffer.buf )
|
|
||||||
|
|
||||||
# FIXME: nunmenu the WinBar ?
|
# FIXME: nunmenu the WinBar ?
|
||||||
self._buffers = {}
|
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 ):
|
def WindowIsValid( self ):
|
||||||
return self._window.valid
|
return self._window.valid
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,20 @@ from vimspector import utils
|
||||||
|
|
||||||
DEFAULTS = {
|
DEFAULTS = {
|
||||||
# UI
|
# UI
|
||||||
'bottombar_height': 10,
|
'ui_mode': 'auto',
|
||||||
'sidebar_width': 50,
|
'bottombar_height': 10,
|
||||||
'code_minwidth': 82,
|
|
||||||
'terminal_maxwidth': 80,
|
# For ui_mode = 'horizontal':
|
||||||
'terminal_minwidth': 10,
|
'sidebar_width': 50,
|
||||||
|
'code_minwidth': 82,
|
||||||
|
'terminal_maxwidth': 80,
|
||||||
|
'terminal_minwidth': 10,
|
||||||
|
|
||||||
|
# For ui_mode = 'vertical':
|
||||||
|
'topbar_height': 15,
|
||||||
|
'code_minheight': 20,
|
||||||
|
'terminal_maxheight': 15,
|
||||||
|
'terminal_minheight': 5,
|
||||||
|
|
||||||
# Signs
|
# Signs
|
||||||
'sign_priority': {
|
'sign_priority': {
|
||||||
|
|
@ -33,7 +42,8 @@ DEFAULTS = {
|
||||||
'vimspectorBP': 9,
|
'vimspectorBP': 9,
|
||||||
'vimspectorBPCond': 9,
|
'vimspectorBPCond': 9,
|
||||||
'vimspectorBPDisabled': 9,
|
'vimspectorBPDisabled': 9,
|
||||||
'vimspectorCurrentThread': 200
|
'vimspectorCurrentThread': 200,
|
||||||
|
'vimspectorCurrentFrame': 200,
|
||||||
},
|
},
|
||||||
|
|
||||||
# Installer
|
# Installer
|
||||||
|
|
@ -50,7 +60,10 @@ DEFAULTS = {
|
||||||
'expand_or_jump': [ '<CR>', '<2-LeftMouse>' ],
|
'expand_or_jump': [ '<CR>', '<2-LeftMouse>' ],
|
||||||
'focus_thread': [ '<leader><CR>' ],
|
'focus_thread': [ '<leader><CR>' ],
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
# Custom
|
||||||
|
'java_hotcodereplace_mode': 'ask',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,8 @@ class StackTraceView( object ):
|
||||||
self._scratch_buffers = []
|
self._scratch_buffers = []
|
||||||
|
|
||||||
# FIXME: This ID is by group, so should be module scope
|
# FIXME: This ID is by group, so should be module scope
|
||||||
self._next_sign_id = 1
|
self._current_thread_sign_id = 0 # 1 when used
|
||||||
|
self._current_frame_sign_id = 0 # 2 when used
|
||||||
|
|
||||||
utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' )
|
utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' )
|
||||||
utils.SetUpUIWindow( win )
|
utils.SetUpUIWindow( win )
|
||||||
|
|
@ -127,6 +128,7 @@ class StackTraceView( object ):
|
||||||
':call vimspector#SetCurrentThread()<CR>' )
|
':call vimspector#SetCurrentThread()<CR>' )
|
||||||
|
|
||||||
win.options[ 'cursorline' ] = False
|
win.options[ 'cursorline' ] = False
|
||||||
|
win.options[ 'signcolumn' ] = 'auto'
|
||||||
|
|
||||||
|
|
||||||
if not signs.SignDefined( 'vimspectorCurrentThread' ):
|
if not signs.SignDefined( 'vimspectorCurrentThread' ):
|
||||||
|
|
@ -136,6 +138,13 @@ class StackTraceView( object ):
|
||||||
texthl = 'MatchParen',
|
texthl = 'MatchParen',
|
||||||
linehl = 'CursorLine' )
|
linehl = 'CursorLine' )
|
||||||
|
|
||||||
|
if not signs.SignDefined( 'vimspectorCurrentFrame' ):
|
||||||
|
signs.DefineSign( 'vimspectorCurrentFrame',
|
||||||
|
text = '▶ ',
|
||||||
|
double_text = '▶',
|
||||||
|
texthl = 'Special',
|
||||||
|
linehl = 'CursorLine' )
|
||||||
|
|
||||||
self._line_to_frame = {}
|
self._line_to_frame = {}
|
||||||
self._line_to_thread = {}
|
self._line_to_thread = {}
|
||||||
|
|
||||||
|
|
@ -157,9 +166,12 @@ class StackTraceView( object ):
|
||||||
self._sources = {}
|
self._sources = {}
|
||||||
self._requesting_threads = StackTraceView.ThreadRequestState.NO
|
self._requesting_threads = StackTraceView.ThreadRequestState.NO
|
||||||
self._pending_thread_request = None
|
self._pending_thread_request = None
|
||||||
if self._next_sign_id:
|
if self._current_thread_sign_id:
|
||||||
signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
|
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
|
||||||
self._next_sign_id = 0
|
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
|
||||||
|
|
||||||
with utils.ModifiableScratchBuffer( self._buf ):
|
with utils.ModifiableScratchBuffer( self._buf ):
|
||||||
utils.ClearBuffer( self._buf )
|
utils.ClearBuffer( self._buf )
|
||||||
|
|
@ -273,10 +285,10 @@ class StackTraceView( object ):
|
||||||
self._line_to_frame.clear()
|
self._line_to_frame.clear()
|
||||||
self._line_to_thread.clear()
|
self._line_to_thread.clear()
|
||||||
|
|
||||||
if self._next_sign_id:
|
if self._current_thread_sign_id:
|
||||||
signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
|
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
|
||||||
else:
|
else:
|
||||||
self._next_sign_id = 1
|
self._current_thread_sign_id = 1
|
||||||
|
|
||||||
with utils.ModifiableScratchBuffer( self._buf ):
|
with utils.ModifiableScratchBuffer( self._buf ):
|
||||||
with utils.RestoreCursorPosition():
|
with utils.RestoreCursorPosition():
|
||||||
|
|
@ -290,7 +302,7 @@ class StackTraceView( object ):
|
||||||
f'({thread.State()})' )
|
f'({thread.State()})' )
|
||||||
|
|
||||||
if self._current_thread == thread.id:
|
if self._current_thread == thread.id:
|
||||||
signs.PlaceSign( self._next_sign_id,
|
signs.PlaceSign( self._current_thread_sign_id,
|
||||||
'VimspectorStackTrace',
|
'VimspectorStackTrace',
|
||||||
'vimspectorCurrentThread',
|
'vimspectorCurrentThread',
|
||||||
self._buf.name,
|
self._buf.name,
|
||||||
|
|
@ -367,6 +379,46 @@ class StackTraceView( object ):
|
||||||
self._JumpToFrame( frame )
|
self._JumpToFrame( frame )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _GetFrameOffset( self, delta ):
|
||||||
|
thread: Thread
|
||||||
|
for thread in self._threads:
|
||||||
|
if thread.id != self._current_thread:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not thread.stacktrace:
|
||||||
|
return
|
||||||
|
|
||||||
|
frame_idx = None
|
||||||
|
for index, frame in enumerate( thread.stacktrace ):
|
||||||
|
if frame == self._current_frame:
|
||||||
|
frame_idx = index
|
||||||
|
break
|
||||||
|
|
||||||
|
if frame_idx is not None:
|
||||||
|
target_idx = frame_idx + delta
|
||||||
|
if target_idx >= 0 and target_idx < len( thread.stacktrace ):
|
||||||
|
return thread.stacktrace[ target_idx ]
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def UpFrame( self ):
|
||||||
|
frame = self._GetFrameOffset( 1 )
|
||||||
|
if not frame:
|
||||||
|
utils.UserMessage( 'Top of stack' )
|
||||||
|
else:
|
||||||
|
self._JumpToFrame( frame, 'up' )
|
||||||
|
|
||||||
|
|
||||||
|
def DownFrame( self ):
|
||||||
|
frame = self._GetFrameOffset( -1 )
|
||||||
|
if not frame:
|
||||||
|
utils.UserMessage( 'Bottom of stack' )
|
||||||
|
else:
|
||||||
|
self._JumpToFrame( frame, 'down' )
|
||||||
|
|
||||||
|
|
||||||
def AnyThreadsRunning( self ):
|
def AnyThreadsRunning( self ):
|
||||||
for thread in self._threads:
|
for thread in self._threads:
|
||||||
if thread.state != Thread.TERMINATED:
|
if thread.state != Thread.TERMINATED:
|
||||||
|
|
@ -381,6 +433,7 @@ class StackTraceView( object ):
|
||||||
# Should this set the current _Thread_ too ? If i jump to a frame in
|
# Should this set the current _Thread_ too ? If i jump to a frame in
|
||||||
# Thread 2, should that become the focussed thread ?
|
# Thread 2, should that become the focussed thread ?
|
||||||
self._current_frame = frame
|
self._current_frame = frame
|
||||||
|
self._DrawThreads()
|
||||||
return self._session.SetCurrentFrame( self._current_frame, reason )
|
return self._session.SetCurrentFrame( self._current_frame, reason )
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
@ -478,6 +531,11 @@ class StackTraceView( object ):
|
||||||
if not thread.IsExpanded():
|
if not thread.IsExpanded():
|
||||||
return
|
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:
|
for frame in thread.stacktrace:
|
||||||
if frame.get( 'source' ):
|
if frame.get( 'source' ):
|
||||||
source = frame[ 'source' ]
|
source = frame[ 'source' ]
|
||||||
|
|
@ -502,6 +560,14 @@ class StackTraceView( object ):
|
||||||
source[ 'name' ],
|
source[ 'name' ],
|
||||||
frame[ 'line' ] ) )
|
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 )
|
self._line_to_frame[ line ] = ( thread, frame )
|
||||||
|
|
||||||
def _ResolveSource( self, source, and_then ):
|
def _ResolveSource( self, source, and_then ):
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,53 @@ def LaunchTerminal( api_prefix,
|
||||||
env = params.get( 'env' ) or {}
|
env = params.get( 'env' ) or {}
|
||||||
|
|
||||||
term_options = {
|
term_options = {
|
||||||
'vertical': 1,
|
|
||||||
'norestore': 1,
|
'norestore': 1,
|
||||||
'cwd': cwd,
|
'cwd': cwd,
|
||||||
'env': env,
|
'env': env,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if settings.Get( 'ui_mode' ) == 'horizontal':
|
||||||
|
# force-horizontal
|
||||||
|
term_options[ 'vertical' ] = 1
|
||||||
|
elif utils.GetVimValue( vim.vars[ 'vimspector_session_windows' ],
|
||||||
|
'mode' ) == 'horizontal':
|
||||||
|
# horizontal, which means that we should have enough space for:
|
||||||
|
# - sidebar
|
||||||
|
# - code min
|
||||||
|
# - term min width
|
||||||
|
# - + 2 vertical spaders
|
||||||
|
# - + 3 columns for signs
|
||||||
|
term_options[ 'vertical' ] = 1
|
||||||
|
|
||||||
|
# if we don't have enough space for terminal_maxwidth, then see if we have
|
||||||
|
# enough vertically for terminal_maxheight, in which case,
|
||||||
|
# that seems a better fit
|
||||||
|
term_horiz_max = ( settings.Int( 'sidebar_width' ) +
|
||||||
|
1 + 2 + 3 +
|
||||||
|
settings.Int( 'code_minwidth' ) +
|
||||||
|
1 + settings.Int( 'terminal_maxwidth' ) )
|
||||||
|
term_vert_max = ( settings.Int( 'bottombar_height' ) + 1 +
|
||||||
|
settings.Int( 'code_minheight' ) + 1 +
|
||||||
|
settings.Int( 'terminal_minheight' ) )
|
||||||
|
|
||||||
|
if ( vim.options[ 'columns' ] < term_horiz_max and
|
||||||
|
vim.options[ 'lines' ] >= term_vert_max ):
|
||||||
|
# Looks like it, let's try that layout
|
||||||
|
term_options[ 'vertical' ] = 0
|
||||||
|
|
||||||
|
|
||||||
|
else:
|
||||||
|
# vertical - we need enough space horizontally for the code+terminal, but we
|
||||||
|
# may fit better with code above terminal
|
||||||
|
term_options[ 'vertical' ] = 0
|
||||||
|
|
||||||
|
term_horiz_max = ( settings.Int( 'code_minwidth' ) + 3 +
|
||||||
|
settings.Int( 'terminal_maxwidth' ) + 1 )
|
||||||
|
|
||||||
|
if vim.options[ 'columns' ] > term_horiz_max:
|
||||||
|
term_options[ 'vertical' ] = 1
|
||||||
|
|
||||||
|
|
||||||
if not window_for_start or not window_for_start.valid:
|
if not window_for_start or not window_for_start.valid:
|
||||||
# TOOD: Where? Maybe we should just use botright vertical ...
|
# TOOD: Where? Maybe we should just use botright vertical ...
|
||||||
window_for_start = vim.current.window
|
window_for_start = vim.current.window
|
||||||
|
|
@ -50,13 +91,23 @@ def LaunchTerminal( api_prefix,
|
||||||
# If we're making a vertical split from the code window, make it no more
|
# If we're making a vertical split from the code window, make it no more
|
||||||
# than 80 columns and no fewer than 10. Also try and keep the code window
|
# than 80 columns and no fewer than 10. Also try and keep the code window
|
||||||
# at least 82 columns
|
# at least 82 columns
|
||||||
if term_options[ 'vertical' ] and not term_options.get( 'curwin', 0 ):
|
if term_options.get( 'curwin', 0 ):
|
||||||
|
pass
|
||||||
|
elif term_options[ 'vertical' ]:
|
||||||
term_options[ 'term_cols' ] = max(
|
term_options[ 'term_cols' ] = max(
|
||||||
min ( int( vim.eval( 'winwidth( 0 )' ) )
|
min ( int( vim.eval( 'winwidth( 0 )' ) )
|
||||||
- settings.Int( 'code_minwidth' ),
|
- settings.Int( 'code_minwidth' ),
|
||||||
settings.Int( 'terminal_maxwidth' ) ),
|
settings.Int( 'terminal_maxwidth' ) ),
|
||||||
settings.Int( 'terminal_minwidth' )
|
settings.Int( 'terminal_minwidth' )
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
term_options[ 'term_rows' ] = max(
|
||||||
|
min ( int( vim.eval( 'winheight( 0 )' ) )
|
||||||
|
- settings.Int( 'code_minheight' ),
|
||||||
|
settings.Int( 'terminal_maxheight' ) ),
|
||||||
|
settings.Int( 'terminal_minheight' )
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
buffer_number = int(
|
buffer_number = int(
|
||||||
utils.Call(
|
utils.Call(
|
||||||
|
|
|
||||||
|
|
@ -375,6 +375,44 @@ def AskForInput( prompt, default_value = None, completion = None ):
|
||||||
return 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 ):
|
def AppendToBuffer( buf, line_or_lines, modified=False ):
|
||||||
line = 1
|
line = 1
|
||||||
try:
|
try:
|
||||||
|
|
@ -403,8 +441,10 @@ def AppendToBuffer( buf, line_or_lines, modified=False ):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def ClearBuffer( buf ):
|
def ClearBuffer( buf, modified = False ):
|
||||||
buf[ : ] = None
|
buf[ : ] = None
|
||||||
|
if not modified:
|
||||||
|
buf.options[ 'modified' ] = False
|
||||||
|
|
||||||
|
|
||||||
def SetBufferContents( buf, lines, modified=False ):
|
def SetBufferContents( buf, lines, modified=False ):
|
||||||
|
|
@ -494,7 +534,6 @@ def _Substitute( template, mapping ):
|
||||||
if mo.group( 'braceddefault' ) is not None:
|
if mo.group( 'braceddefault' ) is not None:
|
||||||
named = mo.group( 'defname' )
|
named = mo.group( 'defname' )
|
||||||
if named not in mapping:
|
if named not in mapping:
|
||||||
''
|
|
||||||
raise MissingSubstitution(
|
raise MissingSubstitution(
|
||||||
named,
|
named,
|
||||||
mo.group( 'default' ).replace( '\\}', '}' ) )
|
mo.group( 'default' ).replace( '\\}', '}' ) )
|
||||||
|
|
@ -536,8 +575,11 @@ def ExpandReferencesInString( orig_s,
|
||||||
if default_value is None and e.default_value is not None:
|
if default_value is None and e.default_value is not None:
|
||||||
try:
|
try:
|
||||||
default_value = _Substitute( e.default_value, mapping )
|
default_value = _Substitute( e.default_value, mapping )
|
||||||
except MissingSubstitution:
|
except MissingSubstitution as e2:
|
||||||
default_value = e.default_value
|
if e2.name in calculus:
|
||||||
|
default_value = calculus[ e2.name ]()
|
||||||
|
else:
|
||||||
|
default_value = e.default_value
|
||||||
|
|
||||||
mapping[ key ] = AskForInput( 'Enter value for {}: '.format( key ),
|
mapping[ key ] = AskForInput( 'Enter value for {}: '.format( key ),
|
||||||
default_value )
|
default_value )
|
||||||
|
|
|
||||||
12
run_tests
12
run_tests
|
|
@ -21,7 +21,7 @@ out_fd=1
|
||||||
|
|
||||||
while [ -n "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"--basedir")
|
"--basedir"|"--base-dir"|"--test-base")
|
||||||
shift
|
shift
|
||||||
SetBaseDir $1
|
SetBaseDir $1
|
||||||
shift
|
shift
|
||||||
|
|
@ -36,7 +36,7 @@ while [ -n "$1" ]; do
|
||||||
INSTALL=$1
|
INSTALL=$1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
"--update")
|
"--update"|"--upgrade")
|
||||||
UPDATE=1
|
UPDATE=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
@ -91,7 +91,8 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "script" ]; then
|
||||||
if ! python3 $(dirname $0)/install_gadget.py \
|
if ! python3 $(dirname $0)/install_gadget.py \
|
||||||
--basedir ${BASEDIR} \
|
--basedir ${BASEDIR} \
|
||||||
${INSTALLER_ARGS} \
|
${INSTALLER_ARGS} \
|
||||||
--all; then
|
--all \
|
||||||
|
--force-enable-csharp; then
|
||||||
echo "Script installation reported errors" >&2
|
echo "Script installation reported errors" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
@ -102,7 +103,7 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "vim" ]; then
|
||||||
--cmd "${BASEDIR_CMD}" \
|
--cmd "${BASEDIR_CMD}" \
|
||||||
-c 'autocmd User VimspectorInstallSuccess qa!' \
|
-c 'autocmd User VimspectorInstallSuccess qa!' \
|
||||||
-c 'autocmd User VimspectorInstallFailed cquit!' \
|
-c 'autocmd User VimspectorInstallFailed cquit!' \
|
||||||
-c "VimspectorInstall --all"; then
|
-c "VimspectorInstall --all netcoredbg"; then
|
||||||
echo "Vim installation reported errors" >&2
|
echo "Vim installation reported errors" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
@ -144,6 +145,9 @@ set -e
|
||||||
pushd tests/testdata/cpp/simple
|
pushd tests/testdata/cpp/simple
|
||||||
make clean all
|
make clean all
|
||||||
popd
|
popd
|
||||||
|
pushd support/test/csharp
|
||||||
|
dotnet build
|
||||||
|
popd
|
||||||
set +e
|
set +e
|
||||||
echo "%DONE - built test programs"
|
echo "%DONE - built test programs"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ function s:SetUpTerminal()
|
||||||
let padding = 4
|
let padding = 4
|
||||||
let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] )
|
let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] )
|
||||||
call win_gotoid( terminal_win )
|
call win_gotoid( terminal_win )
|
||||||
execute cols . 'wincmd |'
|
execute string(cols) . 'wincmd |'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:CustomiseWinBar()
|
function! s:CustomiseWinBar()
|
||||||
|
|
|
||||||
8
support/gadget_upgrade/README.md
Normal file
8
support/gadget_upgrade/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Manually updating shipped gadgets
|
||||||
|
|
||||||
|
Download the gadget files manuall from their official source into this dir.
|
||||||
|
Run `./checksum.py <list of files>` to get the checksums.
|
||||||
|
|
||||||
|
Update ../../python3/vimspector/gadgets.py with the new version and the
|
||||||
|
checksums.
|
||||||
|
|
||||||
13
support/gadget_upgrade/checksum.py
Executable file
13
support/gadget_upgrade/checksum.py
Executable file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/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 ) }" )
|
||||||
15
support/test/bash/.vimspector.json
Normal file
15
support/test/bash/.vimspector.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"$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}" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,6 +15,15 @@
|
||||||
"program": "${workspaceRoot}/test",
|
"program": "${workspaceRoot}/test",
|
||||||
"stopAtEntry": true
|
"stopAtEntry": true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"cpptools": {
|
||||||
|
"adapter": "vscode-cpptools",
|
||||||
|
"configuration": {
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceRoot}/test",
|
||||||
|
"stopOnEntry": true,
|
||||||
|
"MIMode": "lldb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
def Settings( **kwargs ):
|
def Settings( **kwargs ):
|
||||||
return {
|
return {
|
||||||
'flags': [ '-x', 'c++', '-Wall', '-Wextra' ]
|
'flags': [ '-x', 'c++', '-Wall', '-Wextra', '-std=c++17' ]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
support/test/csharp/.gitignore
vendored
1
support/test/csharp/.gitignore
vendored
|
|
@ -1,2 +1,3 @@
|
||||||
bin/
|
bin/
|
||||||
obj/Debug
|
obj/Debug
|
||||||
|
obj/
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,57 @@
|
||||||
{
|
{
|
||||||
"configurations": {
|
"adapters": {
|
||||||
"launch - netcoredbg": {
|
"netcoredbg-debuglog": {
|
||||||
"adapter": "netcoredbg",
|
"attach": {
|
||||||
"configuration": {
|
"pidProperty": "processId",
|
||||||
"request": "launch",
|
"pidSelect": "ask"
|
||||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
|
||||||
"args": [],
|
|
||||||
"stopAtEntry": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"launch - mono": {
|
"command": [
|
||||||
"adapter": "vscode-mono-debug",
|
"${gadgetDir}/netcoredbg/netcoredbg",
|
||||||
"configuration": {
|
"--interpreter=vscode",
|
||||||
"request": "launch",
|
"--engineLogging=${workspaceRoot}/netcoredbg.engine.log",
|
||||||
"program": "${workspaceRoot}/Program.exe",
|
"--log=${workspaceRoot}/netcoredbg.log"
|
||||||
"console": "integratedTerminal",
|
],
|
||||||
"cwd": "${workspaceRoot}",
|
"configuration": {
|
||||||
"args": [],
|
"cwd": "${workspaceRoot}"
|
||||||
"env": {}
|
},
|
||||||
}
|
"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": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26124.0
|
VisualStudioVersion = 15.0.26124.0
|
||||||
MinimumVisualStudioVersion = 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
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|
@ -15,4 +17,18 @@ Global
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
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
|
EndGlobal
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"version": 1,
|
|
||||||
"dgSpecHash": "6/vdr7YprlSIoQecv/nNuLNflFpO0X7eN7jHUinZTsgian9nYpmHMWirsDWMi5l+29TH+Qy8O/QfaB/48QtjRQ==",
|
|
||||||
"success": true
|
|
||||||
}
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
|
||||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
|
||||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
|
||||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/Users/ben/.nuget/packages/</NuGetPackageRoot>
|
|
||||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/Users/ben/.nuget/packages/;/usr/local/share/dotnet/sdk/NuGetFallbackFolder</NuGetPackageFolders>
|
|
||||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
|
||||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.7.0</NuGetToolVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<SourceRoot Include="$([MSBuild]::EnsureTrailingSlash($(NuGetPackageFolders)))" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<Import Project="/usr/local/share/dotnet/sdk/NuGetFallbackFolder/microsoft.netcore.app/2.2.0/build/netcoreapp2.2/Microsoft.NETCore.App.props" Condition="Exists('/usr/local/share/dotnet/sdk/NuGetFallbackFolder/microsoft.netcore.app/2.2.0/build/netcoreapp2.2/Microsoft.NETCore.App.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<Import Project="/usr/local/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.3/build/netstandard2.0/NETStandard.Library.targets" Condition="Exists('/usr/local/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.3/build/netstandard2.0/NETStandard.Library.targets')" />
|
|
||||||
<Import Project="/usr/local/share/dotnet/sdk/NuGetFallbackFolder/microsoft.netcore.app/2.2.0/build/netcoreapp2.2/Microsoft.NETCore.App.targets" Condition="Exists('/usr/local/share/dotnet/sdk/NuGetFallbackFolder/microsoft.netcore.app/2.2.0/build/netcoreapp2.2/Microsoft.NETCore.App.targets')" />
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -1,748 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"adapters": {
|
||||||
|
"dlv-dap": {
|
||||||
|
"variables": {
|
||||||
|
"port": "${unusedLocalPort}"
|
||||||
|
},
|
||||||
|
"command": [
|
||||||
|
"$HOME/go/bin/dlv",
|
||||||
|
"dap",
|
||||||
|
"--listen",
|
||||||
|
"127.0.0.1:${port}"
|
||||||
|
],
|
||||||
|
"port": "${port}"
|
||||||
|
}
|
||||||
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"run": {
|
"run": {
|
||||||
"adapter": "vscode-go",
|
"adapter": "vscode-go",
|
||||||
|
|
@ -12,6 +26,21 @@
|
||||||
"env": { "GO111MODULE": "off" }
|
"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": {
|
"run-exec": {
|
||||||
// NOTE: To use this you _must_ disable optimistaion:
|
// NOTE: To use this you _must_ disable optimistaion:
|
||||||
// go build -o hello_world -gcflags="all=-N -l"
|
// go build -o hello_world -gcflags="all=-N -l"
|
||||||
|
|
|
||||||
29
support/test/go/name-starts-with-vowel/.vimspector.json
Normal file
29
support/test/go/name-starts-with-vowel/.vimspector.json
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"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": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
support/test/go/name-starts-with-vowel/README.md
Normal file
33
support/test/go/name-starts-with-vowel/README.md
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
3
support/test/go/name-starts-with-vowel/go.mod
Normal file
3
support/test/go/name-starts-with-vowel/go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module example.com
|
||||||
|
|
||||||
|
go 1.16
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<artifactId>TestApplication</artifactId>
|
<artifactId>TestApplication</artifactId>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,12 @@ RUN mkdir -p /home/linuxbrew/.linuxbrew &&\
|
||||||
|
|
||||||
RUN /home/linuxbrew/.linuxbrew/bin/brew install golang
|
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
|
# clean up
|
||||||
RUN /home/linuxbrew/.linuxbrew/bin/brew cleanup && \
|
RUN /home/linuxbrew/.linuxbrew/bin/brew cleanup && \
|
||||||
rm -rf ~/.cache && \
|
rm -rf ~/.cache && \
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ function Test_Get_Configurations()
|
||||||
let configs = vimspector#GetConfigurations()
|
let configs = vimspector#GetConfigurations()
|
||||||
call assert_equal([
|
call assert_equal([
|
||||||
\ 'launch - netcoredbg',
|
\ 'launch - netcoredbg',
|
||||||
|
\ 'launch - netcoredbg - with debug log',
|
||||||
\ 'launch - mono',
|
\ 'launch - mono',
|
||||||
\ ], configs)
|
\ ], configs)
|
||||||
|
|
||||||
|
|
|
||||||
65
tests/language_csharp.test.vim
Normal file
65
tests/language_csharp.test.vim
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
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
|
||||||
|
|
||||||
|
|
@ -50,3 +50,59 @@ function! vimspector#test#setup#Reset() abort
|
||||||
call popup_clear()
|
call popup_clear()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
let s:g_stack = {}
|
||||||
|
|
||||||
|
function! vimspector#test#setup#PushGlobal( name, value ) abort
|
||||||
|
if !has_key( s:g_stack, a:name )
|
||||||
|
let s:g_stack[ a:name ] = []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old_value = get( g:, a:name, v:null )
|
||||||
|
call add( s:g_stack[ a:name ], old_value )
|
||||||
|
let g:[ a:name ] = a:value
|
||||||
|
|
||||||
|
return old_value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! vimspector#test#setup#PopGlobal( name ) abort
|
||||||
|
if !has_key( s:g_stack, a:name ) || len( s:g_stack[ a:name ] ) == 0
|
||||||
|
return v:null
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old_value = s:g_stack[ a:name ][ -1 ]
|
||||||
|
call remove( s:g_stack[ a:name ], -1 )
|
||||||
|
|
||||||
|
if old_value is v:null
|
||||||
|
silent! call remove( g:, a:name )
|
||||||
|
else
|
||||||
|
let g:[ a:name ] = old_value
|
||||||
|
endif
|
||||||
|
|
||||||
|
return old_value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:o_stack = {}
|
||||||
|
|
||||||
|
function! vimspector#test#setup#PushOption( name, value ) abort
|
||||||
|
if !has_key( s:o_stack, a:name )
|
||||||
|
let s:o_stack[ a:name ] = []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old_value = v:null
|
||||||
|
execute 'let old_value = &' . a:name
|
||||||
|
call add( s:o_stack[ a:name ], old_value )
|
||||||
|
execute 'set ' . a:name . '=' . a:value
|
||||||
|
return old_value
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! vimspector#test#setup#PopOption( name ) abort
|
||||||
|
if !has_key( s:o_stack, a:name ) || len( s:o_stack[ a:name ] ) == 0
|
||||||
|
return v:null
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old_value = s:o_stack[ a:name ][ -1 ]
|
||||||
|
call remove( s:o_stack[ a:name ], -1 )
|
||||||
|
|
||||||
|
execute 'set ' . a:name . '=' . old_value
|
||||||
|
return old_value
|
||||||
|
endfunction
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ function! ThisTestIsFlaky()
|
||||||
let g:test_is_flaky = v:true
|
let g:test_is_flaky = v:true
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! AssertMatchist( expected, actual ) abort
|
function! AssertMatchList( expected, actual ) abort
|
||||||
let ret = assert_equal( len( a:expected ), len( a:actual ) )
|
let ret = assert_equal( len( a:expected ), len( a:actual ) )
|
||||||
let len = min( [ len( a:expected ), len( a:actual ) ] )
|
let len = min( [ len( a:expected ), len( a:actual ) ] )
|
||||||
let idx = 0
|
let idx = 0
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ class TestExpandReferencesInDict( unittest.TestCase ):
|
||||||
'one': '${one}',
|
'one': '${one}',
|
||||||
'two': '${one} and ${two}',
|
'two': '${one} and ${two}',
|
||||||
'three': '${three}',
|
'three': '${three}',
|
||||||
|
'three_with_default': '${three_with_default:${three\\}}', # uses calculus
|
||||||
'four': '${four}',
|
'four': '${four}',
|
||||||
'five': '${five}',
|
'five': '${five}',
|
||||||
'list': [ '*${words}' ],
|
'list': [ '*${words}' ],
|
||||||
|
|
@ -58,6 +59,7 @@ class TestExpandReferencesInDict( unittest.TestCase ):
|
||||||
'one': 'one',
|
'one': 'one',
|
||||||
'two': 'one and TWO',
|
'two': 'one and TWO',
|
||||||
'three': '3',
|
'three': '3',
|
||||||
|
'three_with_default': '3',
|
||||||
'four': 'typed text',
|
'four': 'typed text',
|
||||||
'five': '5ive!',
|
'five': '5ive!',
|
||||||
'list': [ 'these', 'are', 'some', 'words' ],
|
'list': [ 'these', 'are', 'some', 'words' ],
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call cursor( 1, 1 )
|
call cursor( 1, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@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 vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call cursor( 1, 1 )
|
call cursor( 1, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||||
|
|
@ -56,7 +56,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -70,7 +70,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call cursor( 1, 1 )
|
call cursor( 1, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||||
|
|
@ -81,7 +81,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -95,7 +95,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call cursor( 1, 1 )
|
call cursor( 1, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||||
|
|
@ -106,7 +106,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -121,7 +121,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call cursor( 1, 1 )
|
call cursor( 1, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||||
|
|
@ -132,7 +132,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -146,7 +146,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
" So we break out of the loop
|
" So we break out of the loop
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( notify_l )
|
\ ' .*: .*@threads.cpp:' . string( notify_l )
|
||||||
|
|
@ -157,7 +157,7 @@ function! Test_Multiple_Threads_Continue()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -192,7 +192,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
|
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Thread [0-9]\+: .* (paused)',
|
\ '- Thread [0-9]\+: .* (paused)',
|
||||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||||
|
|
@ -205,7 +205,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -218,7 +218,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
|
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -230,7 +230,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ 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 vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
|
|
@ -257,7 +257,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ 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 vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
|
|
@ -287,7 +287,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ 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 vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
|
|
@ -319,7 +319,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
|
|
@ -338,7 +338,7 @@ function! Test_Multiple_Threads_Step()
|
||||||
" So we break out of the loop
|
" So we break out of the loop
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
\ '+ Thread [0-9]\+: .* (paused)',
|
\ '+ Thread [0-9]\+: .* (paused)',
|
||||||
|
|
@ -352,6 +352,209 @@ function! Test_Multiple_Threads_Step()
|
||||||
\ )
|
\ )
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
|
call vimspector#ClearBreakpoints()
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_UpDownStack()
|
||||||
|
let fn='../support/test/python/simple_python/main.py'
|
||||||
|
exe 'edit ' . fn
|
||||||
|
call setpos( '.', [ 0, 6, 1 ] )
|
||||||
|
|
||||||
|
call vimspector#SetLineBreakpoint( fn, 15 )
|
||||||
|
call vimspector#LaunchWithSettings( { 'configuration': 'run' } )
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
|
||||||
|
call WaitForAssert( {->
|
||||||
|
\ AssertMatchList(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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( "\<Plug>VimspectorUpFrame", 'x' )
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 )
|
||||||
|
call WaitForAssert( {->
|
||||||
|
\ AssertMatchList(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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( "\<Plug>VimspectorDownFrame", 'x' )
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
|
||||||
|
call WaitForAssert( {->
|
||||||
|
\ AssertMatchList(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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(
|
||||||
|
\ [
|
||||||
|
\ '- Thread 1: MainThread (paused)',
|
||||||
|
\ ' 2: DoSomething@main.py:15',
|
||||||
|
\ ' 3: __init__@main.py:8',
|
||||||
|
\ ' 4: Main@main.py:23',
|
||||||
|
\ ' 5: <module>@main.py:29',
|
||||||
|
\ ],
|
||||||
|
\ GetBufLine( winbufnr( g:vimspector_session_windows.stack_trace ),
|
||||||
|
\ 1,
|
||||||
|
\ '$' )
|
||||||
|
\ )
|
||||||
|
\ } )
|
||||||
|
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()
|
call vimspector#ClearBreakpoints()
|
||||||
call vimspector#test#setup#Reset()
|
call vimspector#test#setup#Reset()
|
||||||
%bwipe!
|
%bwipe!
|
||||||
|
|
|
||||||
8
tests/testdata/cpp/simple/.vimspector.json
vendored
8
tests/testdata/cpp/simple/.vimspector.json
vendored
|
|
@ -12,7 +12,7 @@
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"stopAtEntry": true,
|
"stopAtEntry": true,
|
||||||
"stopOnEntry": true,
|
"stopOnEntry": true,
|
||||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||||
},
|
},
|
||||||
"breakpoints": {
|
"breakpoints": {
|
||||||
"exception": {
|
"exception": {
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"stopOnEntry": false,
|
"stopOnEntry": false,
|
||||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||||
},
|
},
|
||||||
"breakpoints": {
|
"breakpoints": {
|
||||||
"exception": {
|
"exception": {
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"stopOnEntry": false,
|
"stopOnEntry": false,
|
||||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||||
},
|
},
|
||||||
"breakpoints": {
|
"breakpoints": {
|
||||||
"exception": {
|
"exception": {
|
||||||
|
|
@ -82,7 +82,7 @@
|
||||||
"configuration": {
|
"configuration": {
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
|
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
|
||||||
"MImode": "${VIMSPECTOR_MIMODE}",
|
"MIMode": "${VIMSPECTOR_MIMODE}",
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"args": [
|
"args": [
|
||||||
"CALCULATED_LIST", "${CALCULATED_LIST}",
|
"CALCULATED_LIST", "${CALCULATED_LIST}",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
let s:fn='../support/test/python/simple_python/main.py'
|
let s:fn='../support/test/python/simple_python/main.py'
|
||||||
|
|
||||||
function! SetUp()
|
function! SetUp()
|
||||||
|
let g:vimspector_ui_mode = get( s:, 'vimspector_ui_mode', 'horizontal' )
|
||||||
call vimspector#test#setup#SetUpWithMappings( 'HUMAN' )
|
call vimspector#test#setup#SetUpWithMappings( 'HUMAN' )
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
@ -16,12 +17,17 @@ function! s:StartDebugging()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 23, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 23, 1 )
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_StandardLayout()
|
||||||
|
call vimspector#test#setup#PushOption( 'columns', 200 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! Test_StandardLayout()
|
function! Test_StandardLayout()
|
||||||
call s:StartDebugging()
|
call s:StartDebugging()
|
||||||
|
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'horizontal', g:vimspector_session_windows.mode )
|
||||||
call assert_equal(
|
call assert_equal(
|
||||||
\ [ 'row', [
|
\ [ 'row', [
|
||||||
\ [ 'col', [
|
\ [ 'col', [
|
||||||
|
|
@ -43,6 +49,247 @@ function! Test_StandardLayout()
|
||||||
%bwipe!
|
%bwipe!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_StandardLayout()
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_NarrowLayout()
|
||||||
|
call vimspector#test#setup#PushOption( 'columns', 100 )
|
||||||
|
let s:vimspector_ui_mode = 'vertical'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_NarrowLayout()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'vertical', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_NarrowLayout()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_AutoLayoutTerminalVert()
|
||||||
|
let s:vimspector_ui_mode = 'auto'
|
||||||
|
call vimspector#test#setup#PushOption( 'columns', 250 )
|
||||||
|
call vimspector#test#setup#PushOption( 'lines', 30 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_AutoLayoutTerminalVert()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'horizontal', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ]
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_AutoLayoutTerminalVert()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'lines' )
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_AutoLayoutTerminalHorizVert()
|
||||||
|
let s:vimspector_ui_mode = 'auto'
|
||||||
|
" Wide enough to be horizontal layout, but not wide enough to fully fit the
|
||||||
|
" terminal, with enough rows to fit the max terminal below
|
||||||
|
call vimspector#test#setup#PushOption( 'columns',
|
||||||
|
\ 50 + 82 + 3 + 2 + 12 )
|
||||||
|
call vimspector#test#setup#PushOption( 'lines', 50 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_AutoLayoutTerminalHorizVert()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'horizontal', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ]
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_AutoLayoutTerminalHorizVert()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'lines' )
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_AutoLayoutTerminalHorizVertButNotEnoughLines()
|
||||||
|
let s:vimspector_ui_mode = 'auto'
|
||||||
|
" Wide enough to be horizontal layout, but not wide enough to fully fit the
|
||||||
|
" terminal, with enough rows to fit the max terminal below, but there are not
|
||||||
|
" enough lines to do this
|
||||||
|
call vimspector#test#setup#PushOption( 'columns',
|
||||||
|
\ 50 + 82 + 3 + 2 + 12 )
|
||||||
|
call vimspector#test#setup#PushOption( 'lines', 20 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_AutoLayoutTerminalHorizVertButNotEnoughLines()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'horizontal', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ],
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_AutoLayoutTerminalHorizVertButNotEnoughLines()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'lines' )
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_AutoLayoutTerminalHoriz()
|
||||||
|
let s:vimspector_ui_mode = 'vertical'
|
||||||
|
" Vertical layout, but we split the terminal horizonally
|
||||||
|
call vimspector#test#setup#PushOption( 'columns', 200 )
|
||||||
|
call vimspector#test#setup#PushOption( 'lines', 50 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_AutoLayoutTerminalHoriz()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'vertical', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_AutoLayoutTerminalHoriz()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'lines' )
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SetUp_Test_AutoLayoutTerminalVertVert()
|
||||||
|
let s:vimspector_ui_mode = 'auto'
|
||||||
|
" Not wide enough to go horizontal, but wide enough to put the terminal and
|
||||||
|
" code vertically split
|
||||||
|
call vimspector#test#setup#PushOption( 'columns', 80 )
|
||||||
|
call vimspector#test#setup#PushOption( 'lines', 50 )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! Test_AutoLayoutTerminalVertVert()
|
||||||
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
call vimspector#StepOver()
|
||||||
|
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 25, 1 )
|
||||||
|
|
||||||
|
call assert_equal( 'vertical', g:vimspector_session_windows.mode )
|
||||||
|
call assert_equal(
|
||||||
|
\ [ 'col', [
|
||||||
|
\ [ 'row', [
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.variables ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.watches ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.stack_trace ],
|
||||||
|
\ ] ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.code ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.terminal ],
|
||||||
|
\ [ 'leaf', g:vimspector_session_windows.output ],
|
||||||
|
\ ] ],
|
||||||
|
\ winlayout( g:vimspector_session_windows.tabpage ) )
|
||||||
|
|
||||||
|
call vimspector#test#setup#Reset()
|
||||||
|
%bwipe!
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! TearDown_Test_AutoLayoutTerminalVertVert()
|
||||||
|
unlet s:vimspector_ui_mode
|
||||||
|
call vimspector#test#setup#PopOption( 'lines' )
|
||||||
|
call vimspector#test#setup#PopOption( 'columns' )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! Test_CloseVariables()
|
function! Test_CloseVariables()
|
||||||
call s:StartDebugging()
|
call s:StartDebugging()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,7 @@ function! Test_ExpandVariables()
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' *+ t (Test): {...}',
|
\ ' *+ t (Test): {...}',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -211,7 +212,7 @@ function! Test_ExpandVariables()
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' \*- t (Test): {...}',
|
\ ' \*- t (Test): {...}',
|
||||||
|
|
@ -219,6 +220,7 @@ function! Test_ExpandVariables()
|
||||||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -229,7 +231,7 @@ function! Test_ExpandVariables()
|
||||||
" Step - stays expanded
|
" Step - stays expanded
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' - t (Test): {...}',
|
\ ' - t (Test): {...}',
|
||||||
|
|
@ -237,6 +239,7 @@ function! Test_ExpandVariables()
|
||||||
\ ' - c (char): 0 ''\\0\{1,3}''',
|
\ ' - c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' - fffff (float): 0',
|
\ ' - fffff (float): 0',
|
||||||
\ ' + another_test (AnotherTest):\( {...}\)\?',
|
\ ' + another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -253,6 +256,7 @@ function! Test_ExpandVariables()
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' + t (Test): {...}',
|
\ ' + t (Test): {...}',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -267,6 +271,7 @@ function! Test_ExpandVariables()
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' + t (Test): {...}',
|
\ ' + t (Test): {...}',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -278,7 +283,7 @@ function! Test_ExpandVariables()
|
||||||
call setpos( '.', [ 0, 2, 1 ] )
|
call setpos( '.', [ 0, 2, 1 ] )
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' - t (Test): {...}',
|
\ ' - t (Test): {...}',
|
||||||
|
|
@ -286,6 +291,7 @@ function! Test_ExpandVariables()
|
||||||
\ ' \*- c (char): 99 ''c''',
|
\ ' \*- c (char): 99 ''c''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -302,6 +308,7 @@ function! Test_ExpandVariables()
|
||||||
\ assert_equal(
|
\ assert_equal(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Scope: Locals',
|
\ '+ Scope: Locals',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -316,6 +323,7 @@ function! Test_ExpandVariables()
|
||||||
\ assert_equal(
|
\ assert_equal(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Scope: Locals',
|
\ '+ Scope: Locals',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -331,6 +339,7 @@ function! Test_ExpandVariables()
|
||||||
\ assert_equal(
|
\ assert_equal(
|
||||||
\ [
|
\ [
|
||||||
\ '+ Scope: Locals',
|
\ '+ Scope: Locals',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -378,7 +387,7 @@ function! Test_ExpandWatch()
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -397,7 +406,7 @@ function! Test_ExpandWatch()
|
||||||
" Step - stays expanded
|
" Step - stays expanded
|
||||||
call vimspector#StepOver()
|
call vimspector#StepOver()
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -449,7 +458,7 @@ function! Test_ExpandWatch()
|
||||||
call setpos( '.', [ 0, 3, 1 ] )
|
call setpos( '.', [ 0, 3, 1 ] )
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -607,7 +616,7 @@ function! Test_EvaluateFailure()
|
||||||
" Add a wtch
|
" Add a wtch
|
||||||
call vimspector#AddWatch( 'test' )
|
call vimspector#AddWatch( 'test' )
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: test',
|
\ 'Expression: test',
|
||||||
|
|
@ -658,7 +667,7 @@ function! Test_VariableEval()
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -690,7 +699,7 @@ function! Test_VariableEval()
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -724,7 +733,7 @@ function! Test_VariableEval()
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Evaluation error',
|
\ 'Evaluation error',
|
||||||
\ ],
|
\ ],
|
||||||
|
|
@ -768,7 +777,7 @@ function! Test_VariableEvalExpand()
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -786,7 +795,7 @@ function! Test_VariableEvalExpand()
|
||||||
call feedkeys( "jjjj\<CR>", 'xt' )
|
call feedkeys( "jjjj\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -806,7 +815,7 @@ function! Test_VariableEvalExpand()
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -846,6 +855,7 @@ function! Test_SetVariableValue_Local()
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' *+ t (Test): {...}',
|
\ ' *+ t (Test): {...}',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -863,7 +873,7 @@ function! Test_SetVariableValue_Local()
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' \*- t (Test): {...}',
|
\ ' \*- t (Test): {...}',
|
||||||
|
|
@ -871,6 +881,7 @@ function! Test_SetVariableValue_Local()
|
||||||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -889,7 +900,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' \*- t (Test): {...}',
|
\ ' \*- t (Test): {...}',
|
||||||
|
|
@ -897,6 +908,7 @@ EOF
|
||||||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -908,7 +920,7 @@ EOF
|
||||||
call vimspector#SetVariableValue( '1234' )
|
call vimspector#SetVariableValue( '1234' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' \*- t (Test): {...}',
|
\ ' \*- t (Test): {...}',
|
||||||
|
|
@ -916,6 +928,7 @@ EOF
|
||||||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -927,7 +940,7 @@ EOF
|
||||||
call vimspector#SetVariableValue( 'this is invalid' )
|
call vimspector#SetVariableValue( 'this is invalid' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '- Scope: Locals',
|
\ '- Scope: Locals',
|
||||||
\ ' \*- t (Test): {...}',
|
\ ' \*- t (Test): {...}',
|
||||||
|
|
@ -935,6 +948,7 @@ EOF
|
||||||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||||
\ ' \*- fffff (float): 0',
|
\ ' \*- fffff (float): 0',
|
||||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||||
|
\ '+ Scope: Registers',
|
||||||
\ ],
|
\ ],
|
||||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
@ -983,7 +997,7 @@ function! Test_SetVariableValue_Watch()
|
||||||
call feedkeys( "\<CR>", 'xt' )
|
call feedkeys( "\<CR>", 'xt' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -1012,7 +1026,7 @@ EOF
|
||||||
|
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -1032,7 +1046,7 @@ EOF
|
||||||
call vimspector#SetVariableValue( '1234' )
|
call vimspector#SetVariableValue( '1234' )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ 'Watches: ----',
|
\ 'Watches: ----',
|
||||||
\ 'Expression: t',
|
\ 'Expression: t',
|
||||||
|
|
@ -1075,7 +1089,7 @@ function! Test_SetVariableValue_Balloon()
|
||||||
\ } )
|
\ } )
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
@ -1102,7 +1116,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
call WaitForAssert( {->
|
call WaitForAssert( {->
|
||||||
\ AssertMatchist(
|
\ AssertMatchList(
|
||||||
\ [
|
\ [
|
||||||
\ '{...}',
|
\ '{...}',
|
||||||
\ ' - i: 0',
|
\ ' - i: 0',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue