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

|
||||
|
||||
|
|
@ -1071,8 +1075,6 @@ information when something goes wrong that's not a Vim traceback.
|
|||
If you just want to see the Vimspector log file, use `:VimspectorToggleLog`,
|
||||
which will tail it in a little window (doesn't work on Windows).
|
||||
|
||||
You can see some debugging info with `:VimspectorDebugInfo`
|
||||
|
||||
## Closing debugger
|
||||
|
||||
To close the debugger, use:
|
||||
|
|
@ -1177,38 +1179,6 @@ licensing.
|
|||
}
|
||||
```
|
||||
|
||||
### Data visualization / pretty printing
|
||||
|
||||
Depending on the backend you need to enable pretty printing of complex types manually.
|
||||
|
||||
* LLDB: Pretty printing is enabled by default
|
||||
|
||||
* GDB: To enable gdb pretty printers, consider the snippet below.
|
||||
It is not enough to have `set print pretty on` in your .gdbinit!
|
||||
|
||||
```
|
||||
{
|
||||
"configurations": {
|
||||
"Launch": {
|
||||
"adapter": "vscode-cpptools",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "<path to binary>",
|
||||
...
|
||||
"MIMode": "gdb"
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### C++ Remote debugging
|
||||
|
||||
The cpptools documentation describes how to attach cpptools to gdbserver using
|
||||
|
|
@ -1294,6 +1264,10 @@ Rust is supported with any gdb/lldb-based debugger. So it works fine with
|
|||
headers/libs to build a C python extension for performance.
|
||||
* Full options: https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
|
||||
|
||||
|
||||
**Migrating from `vscode-python`**: change `"adapter": "vscode-python"` to
|
||||
`"adapter": "debugpy"`.
|
||||
|
||||
```json
|
||||
{
|
||||
"configurations": {
|
||||
|
|
@ -1360,6 +1334,34 @@ debugpy](https://github.com/microsoft/debugpy/wiki/Debugging-over-SSH).
|
|||
If you're feeling fancy, checkout the [reference guide][remote-debugging] for
|
||||
an example of getting Vimspector to remotely launch and attach.
|
||||
|
||||
### Legacy: vscode-python
|
||||
|
||||
* No longer installed by default - please pass `--force-enable-python.legacy` if
|
||||
you just want to continue using your working setup.
|
||||
* [vscode-python](https://github.com/Microsoft/vscode-python)
|
||||
* NOTE: You must be running `node` 10. See [this issue](https://github.com/puremourning/vimspector/issues/105)
|
||||
|
||||
```json
|
||||
{
|
||||
"configurations": {
|
||||
"<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 (TclProDebug)
|
||||
|
|
@ -1383,8 +1385,35 @@ netcoredbg`
|
|||
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
||||
"args": [],
|
||||
"stopAtEntry": true,
|
||||
"cwd": "${workspaceRoot}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
* C# - mono
|
||||
|
||||
Install with `install_gadget.py --force-enable-csharp` or `:VimspectorInstall
|
||||
vscode-mono-debug`.
|
||||
|
||||
***Known not to work.***
|
||||
|
||||
```json
|
||||
{
|
||||
"configurations": {
|
||||
"launch - mono": {
|
||||
"adapter": "vscode-mono-debug",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"env": {}
|
||||
"runtimeExecutable": "mono",
|
||||
"runtimeArgs": [],
|
||||
"env": [],
|
||||
"externalConsole": false,
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1401,8 +1430,6 @@ Requires:
|
|||
* [Delve][delve-install] installed, e.g. `go get -u github.com/go-delve/delve/cmd/dlv`
|
||||
* Delve to be in your PATH, or specify the `dlvToolPath` launch option
|
||||
|
||||
NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md) rather than the "built-in" DAP support in Delve. You can track https://github.com/puremourning/vimspector/issues/186 for that.
|
||||
|
||||
```json
|
||||
{
|
||||
"configurations": {
|
||||
|
|
@ -1420,7 +1447,7 @@ NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/
|
|||
```
|
||||
|
||||
See the vscode-go docs for
|
||||
[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#troubleshooting)
|
||||
[troubleshooting information](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#troubleshooting)
|
||||
|
||||
## PHP
|
||||
|
||||
|
|
@ -1739,26 +1766,22 @@ Vimsector uses them, they will not be replaced. So to customise the signs,
|
|||
define them in your `vimrc`.
|
||||
|
||||
|
||||
| Sign | Description | Priority |
|
||||
|---------------------------|-----------------------------------------|----------|
|
||||
| `vimspectorBP` | Line breakpoint | 9 |
|
||||
| `vimspectorBPCond` | Conditional line breakpoint | 9 |
|
||||
| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
|
||||
| `vimspectorPC` | Program counter (i.e. current line) | 200 |
|
||||
| `vimspectorPCBP` | Program counter and breakpoint | 200 |
|
||||
| `vimspectorCurrentThread` | Focussed thread in stack trace view | 200 |
|
||||
| `vimspectorCurrentFrame` | Current stack frame in stack trace view | 200 |
|
||||
| Sign | Description | Priority |
|
||||
|------------------------|-------------------------------------|----------|
|
||||
| `vimspectorBP` | Line breakpoint | 9 |
|
||||
| `vimspectorBPCond` | Conditional line breakpoint | 9 |
|
||||
| `vimspectorBPDisabled` | Disabled breakpoint | 9 |
|
||||
| `vimspectorPC` | Program counter (i.e. current line) | 200 |
|
||||
| `vimspectorPCBP` | Program counter and breakpoint | 200 |
|
||||
|
||||
The default symbols are the equivalent of something like the following:
|
||||
|
||||
```viml
|
||||
sign define vimspectorBP text=\ ● texthl=WarningMsg
|
||||
sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
|
||||
sign define vimspectorBPDisabled text=\ ● texthl=LineNr
|
||||
sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
|
||||
sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
|
||||
sign define vimspectorCurrentThread text=▶ texthl=MatchParen linehl=CursorLine
|
||||
sign define vimspectorCurrentFrame text=▶ texthl=Special linehl=CursorLine
|
||||
sign define vimspectorBP text=\ ● texthl=WarningMsg
|
||||
sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
|
||||
sign define vimspectorBPDisabled text=\ ● texthl=LineNr
|
||||
sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
|
||||
sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
|
||||
```
|
||||
|
||||
If the signs don't display properly, your font probably doesn't contain these
|
||||
|
|
@ -1766,13 +1789,11 @@ glyphs. You can easily change them by defining the sign in your vimrc. For
|
|||
example, you could put this in your `vimrc` to use some simple ASCII symbols:
|
||||
|
||||
```viml
|
||||
sign define vimspectorBP text=o texthl=WarningMsg
|
||||
sign define vimspectorBPCond text=o? texthl=WarningMsg
|
||||
sign define vimspectorBPDisabled text=o! texthl=LineNr
|
||||
sign define vimspectorPC text=\ > texthl=MatchParen
|
||||
sign define vimspectorPCBP text=o> texthl=MatchParen
|
||||
sign define vimspectorCurrentThread text=> texthl=MatchParen
|
||||
sign define vimspectorCurrentFrame text=> texthl=Special
|
||||
sign define vimspectorBP text=o texthl=WarningMsg
|
||||
sign define vimspectorBPCond text=o? texthl=WarningMsg
|
||||
sign define vimspectorBPDisabled text=o! texthl=LineNr
|
||||
sign define vimspectorPC text=\ > texthl=MatchParen
|
||||
sign define vimspectorPCBP text=o> texthl=MatchParen
|
||||
```
|
||||
|
||||
## Sign priority
|
||||
|
|
@ -2049,10 +2070,6 @@ hi link jsonComment Comment
|
|||
Debug adapters (for some reason) send telemetry data to clients. Vimspector simply
|
||||
displays this information in the output window. It *does not* and *will not ever*
|
||||
collect, use, forward or otherwise share any data with any third parties.
|
||||
10. Do I _have_ to put a `.vimspector.json` in the root of every project? No, you
|
||||
can put all of your adapter and debug configs in a [single directory](https://puremourning.github.io/vimspector/configuration.html#debug-configurations) if you want to, but note
|
||||
the caveat that `${workspaceRoot}` won't be calculated correctly in that case.
|
||||
The vimsepctor author uses this [a lot](https://github.com/puremourning/.vim-mac/tree/master/vimspector-conf).
|
||||
|
||||
|
||||
[ycmd]: https://github.com/Valloric/ycmd
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@
|
|||
" See the License for the specific language governing permissions and
|
||||
" limitations under the License.
|
||||
|
||||
if !has( 'python3' )
|
||||
finish
|
||||
endif
|
||||
|
||||
" Boilerplate {{{
|
||||
let s:save_cpo = &cpoptions
|
||||
|
|
@ -557,14 +554,6 @@ function! vimspector#ShowEvalBalloon( is_visual ) abort
|
|||
\ . '", 0 )' )
|
||||
endfunction
|
||||
|
||||
function! vimspector#PrintDebugInfo() abort
|
||||
if !s:Enabled()
|
||||
return
|
||||
endif
|
||||
|
||||
py3 _vimspector_session.PrintDebugInfo()
|
||||
endfunction
|
||||
|
||||
|
||||
" Boilerplate {{{
|
||||
let &cpoptions=s:save_cpo
|
||||
|
|
|
|||
|
|
@ -19,30 +19,36 @@ let s:save_cpo = &cpoptions
|
|||
set cpoptions&vim
|
||||
" }}}
|
||||
|
||||
function! s:_OnServerData( channel, data ) abort
|
||||
if !exists( 's:ch' ) || s:ch isnot a:channel
|
||||
let s:channels = {}
|
||||
let s:jobs = {}
|
||||
|
||||
function! s:_OnServerData( session_id, channel, data ) abort
|
||||
if !has_key( s:channels, a:session_id ) ||
|
||||
\ s:channels[ a:session_id ] isnot a:channel
|
||||
return
|
||||
endif
|
||||
|
||||
py3 << EOF
|
||||
_vimspector_session.OnChannelData( vim.eval( 'a:data' ) )
|
||||
EOF
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnChannelData(
|
||||
\ vim.eval( 'a:data' ) )
|
||||
endfunction
|
||||
|
||||
function! s:_OnClose( channel ) abort
|
||||
if !exists( 's:ch' ) || s:ch isnot a:channel
|
||||
function! s:_OnClose( session_id, channel ) abort
|
||||
if !has_key( s:channels, a:session_id ) ||
|
||||
\ s:channels[ a:session_id ] isnot a:channel
|
||||
return
|
||||
endif
|
||||
|
||||
echom 'Channel closed'
|
||||
redraw
|
||||
unlet s:ch
|
||||
py3 _vimspector_session.OnServerExit( 0 )
|
||||
unlet s:channels[ a:session_id ]
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnServerExit( 0 )
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#channel#StartDebugSession( config ) abort
|
||||
function! vimspector#internal#channel#StartDebugSession(
|
||||
\ session_id,
|
||||
\ config ) abort
|
||||
|
||||
if exists( 's:ch' )
|
||||
if has_key( s:channels, a:session_id )
|
||||
echo 'Channel is already running'
|
||||
return v:false
|
||||
endif
|
||||
|
|
@ -50,7 +56,7 @@ function! vimspector#internal#channel#StartDebugSession( config ) abort
|
|||
" If we _also_ have a command line, then start the actual job. This allows for
|
||||
" servers which start up and listen on some port
|
||||
if has_key( a:config, 'command' )
|
||||
let s:job = job_start( a:config[ 'command' ],
|
||||
let s:jobs[ a:session_id ] = job_start( a:config[ 'command' ],
|
||||
\ {
|
||||
\ 'in_mode': 'raw',
|
||||
\ 'out_mode': 'raw',
|
||||
|
|
@ -65,16 +71,19 @@ function! vimspector#internal#channel#StartDebugSession( config ) abort
|
|||
let l:addr = get( a:config, 'host', '127.0.0.1' ) . ':' . a:config[ 'port' ]
|
||||
|
||||
echo 'Connecting to ' . l:addr . '... (waiting fo up to 10 seconds)'
|
||||
let s:ch = ch_open( l:addr,
|
||||
" FIXME: This _always_ waits 10s; the neochannel version is quicker
|
||||
let s:channels[ a:session_id ] = ch_open( l:addr,
|
||||
\ {
|
||||
\ 'mode': 'raw',
|
||||
\ 'callback': funcref( 's:_OnServerData' ),
|
||||
\ 'close_cb': funcref( 's:_OnClose' ),
|
||||
\ 'callback': funcref( 's:_OnServerData',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'close_cb': funcref( 's:_OnClose',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'waittime': 10000,
|
||||
\ }
|
||||
\ )
|
||||
|
||||
if ch_status( s:ch ) !=# 'open'
|
||||
if ch_status( s:channels[ a:session_id ] ) !=# 'open'
|
||||
echom 'Unable to connect to' l:addr
|
||||
redraw
|
||||
return v:false
|
||||
|
|
@ -83,62 +92,67 @@ function! vimspector#internal#channel#StartDebugSession( config ) abort
|
|||
return v:true
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#channel#Send( msg ) abort
|
||||
call ch_sendraw( s:ch, a:msg )
|
||||
function! vimspector#internal#channel#Send( session_id, msg ) abort
|
||||
call ch_sendraw( s:channels[ a:session_id ], a:msg )
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#channel#Timeout( id ) abort
|
||||
py3 << EOF
|
||||
_vimspector_session.OnRequestTimeout( vim.eval( 'a:id' ) )
|
||||
EOF
|
||||
function! vimspector#internal#channel#Timeout( session_id, id ) abort
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnRequestTimeout(
|
||||
\ vim.eval( 'a:id' ) )
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#channel#StopDebugSession() abort
|
||||
function! s:_ChannelExists( session_id ) abort
|
||||
return has_key( s:channels, a:session_id ) &&
|
||||
\ count( [ 'closed', 'fail' ],
|
||||
\ ch_status( s:channels[ a:session_id ] ) ) == 0
|
||||
endfunction
|
||||
|
||||
if exists( 's:job' )
|
||||
function! vimspector#internal#channel#StopDebugSession( session_id ) abort
|
||||
|
||||
if has_key( s:jobs, a:session_id )
|
||||
" We started the job, so we need to kill it and wait to read all the data
|
||||
" from the socket
|
||||
|
||||
if job_status( s:job ) ==# 'run'
|
||||
call job_stop( s:job, 'term' )
|
||||
let job = s:jobs[ a:session_id ]
|
||||
if job_status( job ) ==# 'run'
|
||||
call job_stop( job, 'term' )
|
||||
endif
|
||||
|
||||
while job_status( s:job ) ==# 'run'
|
||||
call job_stop( s:job, 'kill' )
|
||||
while job_status( job ) ==# 'run'
|
||||
call job_stop( job, 'kill' )
|
||||
endwhile
|
||||
|
||||
unlet s:job
|
||||
call remove( s:jobs, a:session_id )
|
||||
|
||||
if exists( 's:ch' ) && count( [ 'closed', 'fail' ], ch_status( s:ch ) ) == 0
|
||||
if s:_ChannelExists( a:session_id )
|
||||
" We're going to block on this channel reading, then manually call the
|
||||
" close callback, so remove the automatic close callback to avoid tricky
|
||||
" re-entrancy
|
||||
call ch_setoptions( s:ch, { 'close_cb': '' } )
|
||||
call ch_setoptions( s:channels[ a:session_id ], { 'close_cb': '' } )
|
||||
endif
|
||||
|
||||
elseif exists( 's:ch' ) &&
|
||||
\ count( [ 'closed', 'fail' ], ch_status( s:ch ) ) == 0
|
||||
|
||||
elseif s:_ChannelExists( a:session_id )
|
||||
" channel is open, close it and trigger the callback. The callback is _not_
|
||||
" triggered when manually calling ch_close. if we get here and the channel
|
||||
" is not open, then we there is a _OnClose callback waiting for us, so do
|
||||
" nothing.
|
||||
call ch_close( s:ch )
|
||||
call ch_close( s:channels[ a:session_id ] )
|
||||
endif
|
||||
|
||||
" block until we've read all data from the socket and handled it.
|
||||
while count( [ 'open', 'buffered' ], ch_status( s:ch ) ) == 1
|
||||
let data = ch_read( s:ch, { 'timeout': 10 } )
|
||||
call s:_OnServerData( s:ch, data )
|
||||
while has_key( s:channels, a:session_id ) &&
|
||||
\ count( [ 'open', 'buffered' ],
|
||||
\ ch_status( s:channels[ a:session_id ] ) ) == 1
|
||||
let data = ch_read( s:channels[ a:session_id ], { 'timeout': 10 } )
|
||||
call s:_OnServerData( s:channels[ a:session_id ], data )
|
||||
endwhile
|
||||
call s:_OnClose( s:ch )
|
||||
if has_key( s:channels, a:session_id )
|
||||
call s:_OnClose( a:session_id, s:channels[ a:session_id ] )
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#channel#Reset() abort
|
||||
if exists( 's:ch' ) || exists( 's:job' )
|
||||
call vimspector#internal#channel#StopDebugSession()
|
||||
endif
|
||||
function! vimspector#internal#channel#Reset( session_id ) abort
|
||||
call vimspector#internal#channel#StopDebugSession( a:session_id )
|
||||
endfunction
|
||||
|
||||
" Boilerplate {{{
|
||||
|
|
|
|||
|
|
@ -19,44 +19,54 @@ let s:save_cpo = &cpoptions
|
|||
set cpoptions&vim
|
||||
" }}}
|
||||
|
||||
function! s:_OnServerData( channel, data ) abort
|
||||
if !exists( 's:job' ) || ch_getjob( a:channel ) isnot s:job
|
||||
let s:jobs = {}
|
||||
let s:commands = {}
|
||||
|
||||
function! s:_OnServerData( session_id, channel, data ) abort
|
||||
if !has_key( s:jobs, a:session_id ) ||
|
||||
\ ch_getjob( a:channel ) isnot s:jobs[ a:session_id ]
|
||||
call ch_log( 'Get data after process exit' )
|
||||
return
|
||||
endif
|
||||
|
||||
py3 _vimspector_session.OnChannelData( vim.eval( 'a:data' ) )
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnChannelData(
|
||||
\ vim.eval( 'a:data' ) )
|
||||
endfunction
|
||||
|
||||
function! s:_OnServerError( channel, data ) abort
|
||||
if !exists( 's:job' ) || ch_getjob( a:channel ) isnot s:job
|
||||
function! s:_OnServerError( session_id, channel, data ) abort
|
||||
if !has_key( s:jobs, a:session_id ) ||
|
||||
\ ch_getjob( a:channel ) isnot s:jobs[ a:session_id ]
|
||||
call ch_log( 'Get data after process exit' )
|
||||
return
|
||||
endif
|
||||
|
||||
py3 _vimspector_session.OnServerStderr( vim.eval( 'a:data' ) )
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnServerStderr(
|
||||
\ vim.eval( 'a:data' ) )
|
||||
endfunction
|
||||
|
||||
|
||||
" FIXME: We should wait until both the exit_cb _and_ the channel closed callback
|
||||
" have been received before OnServerExit?
|
||||
|
||||
function! s:_OnExit( channel, status ) abort
|
||||
if !exists( 's:job' ) || ch_getjob( a:channel ) isnot s:job
|
||||
function! s:_OnExit( session_id, channel, status ) abort
|
||||
if !has_key( s:jobs, a:session_id ) ||
|
||||
\ ch_getjob( a:channel ) isnot s:jobs[ a:session_id ]
|
||||
call ch_log( 'Unexpected exit callback' )
|
||||
return
|
||||
endif
|
||||
|
||||
echom 'Channel exit with status ' . a:status
|
||||
redraw
|
||||
if exists( 's:job' )
|
||||
unlet s:job
|
||||
if has_key( s:jobs, a:session_id )
|
||||
unlet s:jobs[ a:session_id ]
|
||||
endif
|
||||
py3 _vimspector_session.OnServerExit( vim.eval( 'a:status' ) )
|
||||
py3 _VimspectorSession( vim.eval( 'a:session_id' ) ).OnServerExit(
|
||||
\ vim.eval( 'a:status' ) )
|
||||
endfunction
|
||||
|
||||
function! s:_OnClose( channel ) abort
|
||||
if !exists( 's:job' ) || job_getchannel( s:job ) != a:channel
|
||||
function! s:_OnClose( session_id, channel ) abort
|
||||
if !has_key( s:jobs, a:session_id ) ||
|
||||
\ ch_getjob( a:channel ) isnot s:jobs[ a:session_id ]
|
||||
call ch_log( 'Channel closed after exit' )
|
||||
return
|
||||
endif
|
||||
|
|
@ -65,34 +75,38 @@ function! s:_OnClose( channel ) abort
|
|||
redraw
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#job#StartDebugSession( config ) abort
|
||||
if exists( 's:job' )
|
||||
function! vimspector#internal#job#StartDebugSession( session_id, config ) abort
|
||||
if has_key( s:jobs, a:session_id )
|
||||
echom 'Not starting: Job is already running'
|
||||
redraw
|
||||
return v:false
|
||||
endif
|
||||
|
||||
let s:job = job_start( a:config[ 'command' ],
|
||||
let s:jobs[ a:session_id ] = job_start( a:config[ 'command' ],
|
||||
\ {
|
||||
\ 'in_mode': 'raw',
|
||||
\ 'out_mode': 'raw',
|
||||
\ 'err_mode': 'raw',
|
||||
\ 'exit_cb': funcref( 's:_OnExit' ),
|
||||
\ 'close_cb': funcref( 's:_OnClose' ),
|
||||
\ 'out_cb': funcref( 's:_OnServerData' ),
|
||||
\ 'err_cb': funcref( 's:_OnServerError' ),
|
||||
\ 'exit_cb': funcref( 's:_OnExit',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'close_cb': funcref( 's:_OnClose',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'out_cb': funcref( 's:_OnServerData',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'err_cb': funcref( 's:_OnServerError',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'stoponexit': 'term',
|
||||
\ 'env': a:config[ 'env' ],
|
||||
\ 'cwd': a:config[ 'cwd' ],
|
||||
\ }
|
||||
\ )
|
||||
|
||||
if !exists( 's:job' )
|
||||
if !has_key( s:jobs, a:session_id )
|
||||
" The job died immediately after starting and we cleaned up
|
||||
return v:false
|
||||
endif
|
||||
|
||||
let status = job_status( s:job )
|
||||
let status = job_status( s:jobs[ a:session_id ] )
|
||||
|
||||
echom 'Started job, status is: ' . status
|
||||
redraw
|
||||
|
|
@ -104,20 +118,22 @@ function! vimspector#internal#job#StartDebugSession( config ) abort
|
|||
return v:true
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#job#Send( msg ) abort
|
||||
if ! exists( 's:job' )
|
||||
function! vimspector#internal#job#Send( session_id, msg ) abort
|
||||
if ! has_key( s:jobs, a:session_id )
|
||||
echom "Can't send message: Job was not initialised correctly"
|
||||
redraw
|
||||
return 0
|
||||
endif
|
||||
|
||||
if job_status( s:job ) !=# 'run'
|
||||
let job = s:jobs[ a:session_id ]
|
||||
|
||||
if job_status( job ) !=# 'run'
|
||||
echom "Can't send message: Job is not running"
|
||||
redraw
|
||||
return 0
|
||||
endif
|
||||
|
||||
let ch = job_getchannel( s:job )
|
||||
let ch = job_getchannel( job )
|
||||
if ch ==# 'channel fail'
|
||||
echom 'Channel was closed unexpectedly!'
|
||||
redraw
|
||||
|
|
@ -128,45 +144,55 @@ function! vimspector#internal#job#Send( msg ) abort
|
|||
return 1
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#job#StopDebugSession() abort
|
||||
if !exists( 's:job' )
|
||||
function! vimspector#internal#job#StopDebugSession( session_id ) abort
|
||||
if ! has_key( s:jobs, a:session_id )
|
||||
echom "Not stopping session: Job doesn't exist"
|
||||
redraw
|
||||
return
|
||||
endif
|
||||
|
||||
if job_status( s:job ) ==# 'run'
|
||||
let job = s:jobs[ a:session_id ]
|
||||
|
||||
if job_status( job ) ==# 'run'
|
||||
echom 'Terminating job'
|
||||
redraw
|
||||
call job_stop( s:job, 'kill' )
|
||||
call job_stop( job, 'kill' )
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#job#Reset() abort
|
||||
call vimspector#internal#job#StopDebugSession()
|
||||
function! vimspector#internal#job#Reset( session_id ) abort
|
||||
call vimspector#internal#job#StopDebugSession( a:session_id )
|
||||
endfunction
|
||||
|
||||
function! s:_OnCommandExit( category, ch, code ) abort
|
||||
function! s:_OnCommandExit( session_id, category, ch, code ) abort
|
||||
py3 __import__( "vimspector",
|
||||
\ fromlist = [ "utils" ] ).utils.OnCommandWithLogComplete(
|
||||
\ vim.eval( 'a:session_id' ),
|
||||
\ vim.eval( 'a:category' ),
|
||||
\ int( vim.eval( 'a:code' ) ) )
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#job#StartCommandWithLog( cmd, category ) abort
|
||||
function! vimspector#internal#job#StartCommandWithLog(
|
||||
\ session_id,
|
||||
\ cmd,
|
||||
\ category ) abort
|
||||
if ! exists( 's:commands' )
|
||||
let s:commands = {}
|
||||
endif
|
||||
|
||||
if ! has_key( s:commands, a:category )
|
||||
let s:commands[ a:category ] = []
|
||||
if ! has_key( s:commands, a:session_id )
|
||||
let s:commands[ a:session_id ] = {}
|
||||
endif
|
||||
|
||||
let l:index = len( s:commands[ a:category ] )
|
||||
if ! has_key( s:commands[ a:session_id ], a:category )
|
||||
let s:commands[ a:session_id ][ a:category ] = []
|
||||
endif
|
||||
|
||||
let buf = '_vimspector_log_' . a:category
|
||||
let l:index = len( s:commands[ a:session_id ][ a:category ] )
|
||||
|
||||
call add( s:commands[ a:category ], job_start(
|
||||
let buf = '_vimspector_log_' . a:session_id . '_' . a:category
|
||||
|
||||
call add( s:commands[ a:session_id ][ a:category ], job_start(
|
||||
\ a:cmd,
|
||||
\ {
|
||||
\ 'out_io': 'buffer',
|
||||
|
|
@ -175,13 +201,14 @@ function! vimspector#internal#job#StartCommandWithLog( cmd, category ) abort
|
|||
\ 'err_msg': 0,
|
||||
\ 'out_name': buf,
|
||||
\ 'err_name': buf,
|
||||
\ 'exit_cb': funcref( 's:_OnCommandExit', [ a:category ] ),
|
||||
\ 'exit_cb': funcref( 's:_OnCommandExit',
|
||||
\ [ a:session_id, a:category ] ),
|
||||
\ 'out_modifiable': 0,
|
||||
\ 'err_modifiable': 0,
|
||||
\ 'stoponexit': 'kill'
|
||||
\ } ) )
|
||||
|
||||
if job_status( s:commands[ a:category ][ index ] ) !=# 'run'
|
||||
if job_status( s:commands[ a:session_id ][ a:category ][ index ] ) !=# 'run'
|
||||
echom 'Unable to start job for ' . string( a:cmd )
|
||||
redraw
|
||||
return v:none
|
||||
|
|
@ -191,19 +218,27 @@ function! vimspector#internal#job#StartCommandWithLog( cmd, category ) abort
|
|||
endfunction
|
||||
|
||||
|
||||
function! vimspector#internal#job#CleanUpCommand( category ) abort
|
||||
function! vimspector#internal#job#CleanUpCommand( session_id, category ) abort
|
||||
if ! exists( 's:commands' )
|
||||
let s:commands = {}
|
||||
endif
|
||||
|
||||
if ! has_key( s:commands, a:category )
|
||||
if ! has_key( s:commands, a:session_id )
|
||||
let s:commands[ a:session_id ] = {}
|
||||
endif
|
||||
|
||||
if ! has_key( s:commands[ a:session_id ], a:category )
|
||||
return
|
||||
endif
|
||||
for j in s:commands[ a:category ]
|
||||
for j in s:commands[ a:session_id ][ a:category ]
|
||||
call job_stop( j, 'kill' )
|
||||
endfor
|
||||
|
||||
unlet s:commands[ a:category ]
|
||||
unlet s:commands[ a:session_id ][ a:category ]
|
||||
|
||||
if len( s:commands[ a:session_id ] ) == 0
|
||||
unlet s:commands[ a:session_id ]
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Boilerplate {{{
|
||||
|
|
|
|||
|
|
@ -20,28 +20,34 @@ set cpoptions&vim
|
|||
" }}}
|
||||
|
||||
|
||||
let s:channels = {}
|
||||
let s:jobs = {}
|
||||
|
||||
function! s:_OnEvent( chan_id, data, event ) abort
|
||||
|
||||
function! s:_OnEvent( session_id, chan_id, data, event ) abort
|
||||
if v:exiting isnot# v:null
|
||||
return
|
||||
endif
|
||||
|
||||
if !exists( 's:ch' ) || a:chan_id != s:ch
|
||||
if !has_key( s:channels, a:session_id ) ||
|
||||
\ a:chan_id != s:channels[ a:session_id ]
|
||||
return
|
||||
endif
|
||||
|
||||
if a:data == ['']
|
||||
echom 'Channel closed'
|
||||
redraw
|
||||
unlet s:ch
|
||||
unlet s:channels[ a:session_id ]
|
||||
py3 _vimspector_session.OnServerExit( 0 )
|
||||
else
|
||||
py3 _vimspector_session.OnChannelData( '\n'.join( vim.eval( 'a:data' ) ) )
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neochannel#StartDebugSession( config ) abort
|
||||
if exists( 's:ch' )
|
||||
function! vimspector#internal#neochannel#StartDebugSession(
|
||||
\ session_id,
|
||||
\ config ) abort
|
||||
if has_key( s:channels, a:session_id )
|
||||
echom 'Not starting: Channel is already running'
|
||||
redraw
|
||||
return v:false
|
||||
|
|
@ -54,12 +60,12 @@ function! vimspector#internal#neochannel#StartDebugSession( config ) abort
|
|||
try
|
||||
let old_env = vimspector#internal#neoterm#PrepareEnvironment(
|
||||
\ a:config[ 'env' ] )
|
||||
let s:job = jobstart( a:config[ 'command' ],
|
||||
\ {
|
||||
\ 'cwd': a:config[ 'cwd' ],
|
||||
\ 'env': a:config[ 'env' ],
|
||||
\ }
|
||||
\ )
|
||||
let s:jobs[ a:session_id ] = jobstart( a:config[ 'command' ],
|
||||
\ {
|
||||
\ 'cwd': a:config[ 'cwd' ],
|
||||
\ 'env': a:config[ 'env' ],
|
||||
\ }
|
||||
\ )
|
||||
finally
|
||||
call vimspector#internal#neoterm#ResetEnvironment( a:config[ 'env' ],
|
||||
\ old_env )
|
||||
|
|
@ -72,9 +78,10 @@ function! vimspector#internal#neochannel#StartDebugSession( config ) abort
|
|||
while attempt <= 10
|
||||
echo 'Connecting to ' . l:addr . '... (attempt' attempt 'of 10)'
|
||||
try
|
||||
let s:ch = sockconnect( 'tcp',
|
||||
\ addr,
|
||||
\ { 'on_data': funcref( 's:_OnEvent' ) } )
|
||||
let s:channels[ a:session_id ] = sockconnect(
|
||||
\ 'tcp',
|
||||
\ addr,
|
||||
\ { 'on_data': funcref( 's:_OnEvent', [ a:session_id ] ) } )
|
||||
redraw
|
||||
return v:true
|
||||
catch /connection refused/
|
||||
|
|
@ -88,30 +95,30 @@ function! vimspector#internal#neochannel#StartDebugSession( config ) abort
|
|||
return v:false
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neochannel#Send( msg ) abort
|
||||
if ! exists( 's:ch' )
|
||||
function! vimspector#internal#neochannel#Send( session_id, msg ) abort
|
||||
if ! has_key( s:channels, a:session_id )
|
||||
echom "Can't send message: Channel was not initialised correctly"
|
||||
redraw
|
||||
return 0
|
||||
endif
|
||||
|
||||
call chansend( s:ch, a:msg )
|
||||
call chansend( s:channels[ a:session_id ], a:msg )
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neochannel#StopDebugSession() abort
|
||||
if exists( 's:ch' )
|
||||
call chanclose( s:ch )
|
||||
function! vimspector#internal#neochannel#StopDebugSession( session_id ) abort
|
||||
if has_key( s:channels, a:session_id )
|
||||
call chanclose( s:channels[ a:session_id ] )
|
||||
" It doesn't look like we get a callback after chanclos. Who knows if we
|
||||
" will subsequently receive data callbacks.
|
||||
call s:_OnEvent( s:ch, [ '' ], 'data' )
|
||||
call s:_OnEvent( a:session_id, s:channels[ a:session_id ], [ '' ], 'data' )
|
||||
endif
|
||||
|
||||
if exists( 's:job' )
|
||||
if vimspector#internal#neojob#JobIsRunning( s:job )
|
||||
call jobstop( s:job )
|
||||
if has_key( s:jobs, a:session_id )
|
||||
if vimspector#internal#neojob#JobIsRunning( s:jobs[ a:session_id ] )
|
||||
call jobstop( s:jobs[ a:session_id ] )
|
||||
endif
|
||||
unlet s:job
|
||||
unlet s:jobs[ a:session_id ]
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
|
|
|||
|
|
@ -19,14 +19,17 @@ let s:save_cpo = &cpoptions
|
|||
set cpoptions&vim
|
||||
" }}}
|
||||
|
||||
let s:jobs = {}
|
||||
let s:commands = {}
|
||||
|
||||
|
||||
function! s:_OnEvent( chan_id, data, event ) abort
|
||||
|
||||
function! s:_OnEvent( session_id, chan_id, data, event ) abort
|
||||
if v:exiting isnot# v:null
|
||||
return
|
||||
endif
|
||||
|
||||
if !exists( 's:job' ) || a:chan_id != s:job
|
||||
if !has_key( s:jobs, a:session_id ) || a:chan_id != s:jobs[ a:session_id ]
|
||||
return
|
||||
endif
|
||||
|
||||
|
|
@ -38,13 +41,15 @@ function! s:_OnEvent( chan_id, data, event ) abort
|
|||
elseif a:event ==# 'exit'
|
||||
echom 'Channel exit with status ' . a:data
|
||||
redraw
|
||||
unlet s:job
|
||||
unlet s:jobs[ a:session_id ]
|
||||
py3 _vimspector_session.OnServerExit( vim.eval( 'a:data' ) )
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neojob#StartDebugSession( config ) abort
|
||||
if exists( 's:job' )
|
||||
function! vimspector#internal#neojob#StartDebugSession(
|
||||
\ session_id,
|
||||
\ config ) abort
|
||||
if has_key( s:jobs, a:session_id )
|
||||
echom 'Not starging: Job is already running'
|
||||
redraw
|
||||
return v:false
|
||||
|
|
@ -57,11 +62,14 @@ function! vimspector#internal#neojob#StartDebugSession( config ) abort
|
|||
try
|
||||
let old_env = vimspector#internal#neoterm#PrepareEnvironment(
|
||||
\ a:config[ 'env' ] )
|
||||
let s:job = jobstart( a:config[ 'command' ],
|
||||
let s:jobs[ a:session_id ] = jobstart( a:config[ 'command' ],
|
||||
\ {
|
||||
\ 'on_stdout': funcref( 's:_OnEvent' ),
|
||||
\ 'on_stderr': funcref( 's:_OnEvent' ),
|
||||
\ 'on_exit': funcref( 's:_OnEvent' ),
|
||||
\ 'on_stdout': funcref( 's:_OnEvent',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'on_stderr': funcref( 's:_OnEvent',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'on_exit': funcref( 's:_OnEvent',
|
||||
\ [ a:session_id ] ),
|
||||
\ 'cwd': a:config[ 'cwd' ],
|
||||
\ 'env': a:config[ 'env' ],
|
||||
\ }
|
||||
|
|
@ -78,40 +86,40 @@ function! vimspector#internal#neojob#JobIsRunning( job ) abort
|
|||
return jobwait( [ a:job ], 0 )[ 0 ] == -1
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neojob#Send( msg ) abort
|
||||
if ! exists( 's:job' )
|
||||
function! vimspector#internal#neojob#Send( session_id, msg ) abort
|
||||
if ! has_key( s:jobs, a:session_id )
|
||||
echom "Can't send message: Job was not initialised correctly"
|
||||
redraw
|
||||
return 0
|
||||
endif
|
||||
|
||||
if !vimspector#internal#neojob#JobIsRunning( s:job )
|
||||
if !vimspector#internal#neojob#JobIsRunning( s:jobs[ a:session_id ] )
|
||||
echom "Can't send message: Job is not running"
|
||||
redraw
|
||||
return 0
|
||||
endif
|
||||
|
||||
call chansend( s:job, a:msg )
|
||||
call chansend( s:jobs[ a:session_id ], a:msg )
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neojob#StopDebugSession() abort
|
||||
if !exists( 's:job' )
|
||||
function! vimspector#internal#neojob#StopDebugSession( session_id ) abort
|
||||
if !has_key( s:jobs, a:session_id )
|
||||
return
|
||||
endif
|
||||
|
||||
if vimspector#internal#neojob#JobIsRunning( s:job )
|
||||
if vimspector#internal#neojob#JobIsRunning( s:jobs[ a:session_id ] )
|
||||
echom 'Terminating job'
|
||||
redraw
|
||||
call jobstop( s:job )
|
||||
call jobstop( s:jobs[ a:session_id ] )
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neojob#Reset() abort
|
||||
call vimspector#internal#neojob#StopDebugSession()
|
||||
function! vimspector#internal#neojob#Reset( session_id ) abort
|
||||
call vimspector#internal#neojob#StopDebugSession( a:session_id )
|
||||
endfunction
|
||||
|
||||
function! s:_OnCommandEvent( category, id, data, event ) abort
|
||||
function! s:_OnCommandEvent( session_id, category, id, data, event ) abort
|
||||
if v:exiting isnot# v:null
|
||||
return
|
||||
endif
|
||||
|
|
@ -121,18 +129,22 @@ function! s:_OnCommandEvent( category, id, data, event ) abort
|
|||
return
|
||||
endif
|
||||
|
||||
if !has_key( s:commands, a:category )
|
||||
if ! has_key( s:commands, a:session_id )
|
||||
return
|
||||
endif
|
||||
|
||||
if !has_key( s:commands[ a:category ], a:id )
|
||||
if !has_key( s:commands[ a:session_id ], a:category )
|
||||
return
|
||||
endif
|
||||
|
||||
if !has_key( s:commands[ a:session_id ][ a:category ], a:id )
|
||||
return
|
||||
endif
|
||||
|
||||
if a:event ==# 'stdout'
|
||||
let buffer = s:commands[ a:category ][ a:id ].stdout
|
||||
let buffer = s:commands[ a:session_id ][ a:category ][ a:id ].stdout
|
||||
elseif a:event ==# 'stderr'
|
||||
let buffer = s:commands[ a:category ][ a:id ].stderr
|
||||
let buffer = s:commands[ a:session_id ][ a:category ][ a:id ].stderr
|
||||
endif
|
||||
|
||||
try
|
||||
|
|
@ -159,21 +171,21 @@ function! s:_OnCommandEvent( category, id, data, event ) abort
|
|||
call setbufvar( buffer, '&modified', 0 )
|
||||
endtry
|
||||
|
||||
" if the buffer is visible, scroll it, but don't allow autocommands to fire,
|
||||
" as this may close the current window!
|
||||
" if the buffer is visible, scroll it
|
||||
let w = bufwinnr( buffer )
|
||||
if w > 0
|
||||
let cw = winnr()
|
||||
try
|
||||
noautocmd execute w . 'wincmd w'
|
||||
noautocmd normal! Gz-
|
||||
execute w . 'wincmd w'
|
||||
normal! Gz-
|
||||
finally
|
||||
noautocmd execute cw . 'wincmd w'
|
||||
execute cw . 'wincmd w'
|
||||
endtry
|
||||
endif
|
||||
elseif a:event ==# 'exit'
|
||||
py3 __import__( "vimspector",
|
||||
\ fromlist = [ "utils" ] ).utils.OnCommandWithLogComplete(
|
||||
\ vim.eval( 'a:session_id' ),
|
||||
\ vim.eval( 'a:category' ),
|
||||
\ int( vim.eval( 'a:data' ) ) )
|
||||
endif
|
||||
|
|
@ -199,11 +211,16 @@ function! s:MakeBufferWritable( buffer ) abort
|
|||
endfunction
|
||||
|
||||
|
||||
let s:commands = {}
|
||||
function! vimspector#internal#neojob#StartCommandWithLog(
|
||||
\ session_id,
|
||||
\ cmd,
|
||||
\ category ) abort
|
||||
if ! has_key( s:commands, a:session_id )
|
||||
let s:commands[ a:session_id ] = {}
|
||||
endif
|
||||
|
||||
function! vimspector#internal#neojob#StartCommandWithLog( cmd, category ) abort
|
||||
if ! has_key( s:commands, a:category )
|
||||
let s:commands[ a:category ] = {}
|
||||
if ! has_key( s:commands[ a:session_id ], a:category )
|
||||
let s:commands[ a:session_id ][ a:category ] = {}
|
||||
endif
|
||||
|
||||
let buf = bufnr( '_vimspector_log_' . a:category, v:true )
|
||||
|
|
@ -216,14 +233,14 @@ function! vimspector#internal#neojob#StartCommandWithLog( cmd, category ) abort
|
|||
let id = jobstart(a:cmd,
|
||||
\ {
|
||||
\ 'on_stdout': funcref( 's:_OnCommandEvent',
|
||||
\ [ a:category ] ),
|
||||
\ [ a:session_id, a:category ] ),
|
||||
\ 'on_stderr': funcref( 's:_OnCommandEvent',
|
||||
\ [ a:category ] ),
|
||||
\ [ a:session_id, a:category ] ),
|
||||
\ 'on_exit': funcref( 's:_OnCommandEvent',
|
||||
\ [ a:category ] ),
|
||||
\ [ a:session_id, a:category ] ),
|
||||
\ } )
|
||||
|
||||
let s:commands[ a:category ][ id ] = {
|
||||
let s:commands[ a:session_id ][ a:category ][ id ] = {
|
||||
\ 'stdout': buf,
|
||||
\ 'stderr': buf
|
||||
\ }
|
||||
|
|
@ -231,19 +248,25 @@ function! vimspector#internal#neojob#StartCommandWithLog( cmd, category ) abort
|
|||
return buf
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#neojob#CleanUpCommand( category ) abort
|
||||
if ! has_key( s:commands, a:category )
|
||||
function! vimspector#internal#neojob#CleanUpCommand(
|
||||
\ session_id,
|
||||
\ category ) abort
|
||||
if ! has_key( s:commands, a:session_id )
|
||||
return
|
||||
endif
|
||||
|
||||
for id in keys( s:commands[ a:category ] )
|
||||
if ! has_key( s:commands[ a:session_id ], a:category )
|
||||
return
|
||||
endif
|
||||
|
||||
for id in keys( s:commands[ a:session_id ][ a:category ] )
|
||||
let id = str2nr( id )
|
||||
if jobwait( [ id ], 0 )[ 0 ] == -1
|
||||
call jobstop( id )
|
||||
endif
|
||||
call jobwait( [ id ], -1 )
|
||||
endfor
|
||||
unlet! s:commands[ a:category ]
|
||||
unlet! s:commands[ a:session_id ][ a:category ]
|
||||
endfunction
|
||||
|
||||
" Boilerplate {{{
|
||||
|
|
|
|||
|
|
@ -26,11 +26,22 @@ endif
|
|||
|
||||
function! vimspector#internal#state#Reset() abort
|
||||
try
|
||||
py3 import vim
|
||||
py3 _vimspector_session = __import__(
|
||||
\ "vimspector",
|
||||
\ fromlist=[ "debug_session" ] ).debug_session.DebugSession(
|
||||
\ vim.eval( 's:prefix' ) )
|
||||
py3 <<EOF
|
||||
|
||||
import vim
|
||||
|
||||
_vimspector_session_man = __import__(
|
||||
"vimspector",
|
||||
fromlist=[ "session_manager" ] ).session_manager.Get()
|
||||
|
||||
# Deprecated
|
||||
_vimspector_session = _vimspector_session_man.NewSession(
|
||||
vim.eval( 's:prefix' ) )
|
||||
|
||||
def _VimspectorSession( session_id ):
|
||||
return _vimspector_session_man.GetSession( int( session_id ) )
|
||||
|
||||
EOF
|
||||
catch /.*/
|
||||
echohl WarningMsg
|
||||
echom 'Exception while loading vimspector:' v:exception
|
||||
|
|
@ -47,6 +58,22 @@ function! vimspector#internal#state#GetAPIPrefix() abort
|
|||
return s:prefix
|
||||
endfunction
|
||||
|
||||
function! vimspector#internal#state#SwitchToSession( id ) abort
|
||||
py3 _vimspector_session = _VimspectorSession( vim.eval( 'a:id' ) )
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimspector#internal#state#OnTabEnter() abort
|
||||
py3 <<EOF
|
||||
session = _vimspector_session_man.SessionForTab(
|
||||
int( vim.eval( 'tabpagenr()' ) ) )
|
||||
|
||||
if session is not None:
|
||||
_vimspector_session = session
|
||||
EOF
|
||||
endfunction
|
||||
|
||||
|
||||
" Boilerplate {{{
|
||||
let &cpoptions=s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.3.6)
|
||||
activesupport (6.0.3.4)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
addressable (2.8.0)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
|
|
@ -16,7 +16,7 @@ GEM
|
|||
colorator (1.1.0)
|
||||
commonmarker (0.17.13)
|
||||
ruby-enum (~> 0.5)
|
||||
concurrent-ruby (1.1.8)
|
||||
concurrent-ruby (1.1.7)
|
||||
dnsruby (1.61.5)
|
||||
simpleidn (~> 0.1)
|
||||
em-websocket (0.5.2)
|
||||
|
|
@ -30,12 +30,12 @@ GEM
|
|||
faraday-net_http (~> 1.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ruby2_keywords
|
||||
faraday-net_http (1.0.1)
|
||||
ffi (1.15.0)
|
||||
faraday-net_http (1.0.0)
|
||||
ffi (1.14.2)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.1)
|
||||
github-pages (214)
|
||||
github-pages-health-check (= 1.17.0)
|
||||
github-pages (209)
|
||||
github-pages-health-check (= 1.16.1)
|
||||
jekyll (= 3.9.0)
|
||||
jekyll-avatar (= 0.7.0)
|
||||
jekyll-coffeescript (= 1.1.1)
|
||||
|
|
@ -50,9 +50,9 @@ GEM
|
|||
jekyll-readme-index (= 0.3.0)
|
||||
jekyll-redirect-from (= 0.16.0)
|
||||
jekyll-relative-links (= 0.6.1)
|
||||
jekyll-remote-theme (= 0.4.3)
|
||||
jekyll-remote-theme (= 0.4.2)
|
||||
jekyll-sass-converter (= 1.5.2)
|
||||
jekyll-seo-tag (= 2.7.1)
|
||||
jekyll-seo-tag (= 2.6.1)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-swiss (= 1.0.0)
|
||||
jekyll-theme-architect (= 0.1.1)
|
||||
|
|
@ -70,19 +70,19 @@ GEM
|
|||
jekyll-theme-time-machine (= 0.1.1)
|
||||
jekyll-titles-from-headings (= 0.5.3)
|
||||
jemoji (= 0.12.0)
|
||||
kramdown (= 2.3.1)
|
||||
kramdown (= 2.3.0)
|
||||
kramdown-parser-gfm (= 1.1.0)
|
||||
liquid (= 4.0.3)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.5.1)
|
||||
nokogiri (>= 1.10.4, < 2.0)
|
||||
rouge (= 3.26.0)
|
||||
rouge (= 3.23.0)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.17.0)
|
||||
github-pages-health-check (1.16.1)
|
||||
addressable (~> 2.3)
|
||||
dnsruby (~> 1.60)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
public_suffix (~> 3.0)
|
||||
typhoeus (~> 1.3)
|
||||
html-pipeline (2.14.0)
|
||||
activesupport (>= 2)
|
||||
|
|
@ -136,15 +136,15 @@ GEM
|
|||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-relative-links (0.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-remote-theme (0.4.3)
|
||||
jekyll-remote-theme (0.4.2)
|
||||
addressable (~> 2.0)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
||||
rubyzip (>= 1.3.0, < 3.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.7.1)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-seo-tag (2.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-swiss (1.0.0)
|
||||
|
|
@ -196,23 +196,23 @@ GEM
|
|||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
kramdown (2.3.1)
|
||||
kramdown (2.3.0)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.5.1)
|
||||
listen (3.4.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.5.1)
|
||||
mini_portile2 (2.5.0)
|
||||
minima (2.5.1)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
minitest (5.14.4)
|
||||
minitest (5.14.3)
|
||||
multipart-post (2.1.1)
|
||||
nokogiri (1.11.5)
|
||||
nokogiri (1.11.1)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
racc (~> 1.4)
|
||||
octokit (4.20.0)
|
||||
|
|
@ -220,16 +220,16 @@ GEM
|
|||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (4.0.6)
|
||||
public_suffix (3.1.1)
|
||||
racc (1.5.2)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.5)
|
||||
rouge (3.26.0)
|
||||
ruby-enum (0.9.0)
|
||||
rexml (3.2.4)
|
||||
rouge (3.23.0)
|
||||
ruby-enum (0.8.0)
|
||||
i18n
|
||||
ruby2_keywords (0.0.4)
|
||||
ruby2_keywords (0.0.2)
|
||||
rubyzip (2.3.0)
|
||||
safe_yaml (1.0.5)
|
||||
sass (3.7.4)
|
||||
|
|
@ -240,7 +240,7 @@ GEM
|
|||
sawyer (0.8.2)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (> 0.8, < 2.0)
|
||||
simpleidn (0.2.1)
|
||||
simpleidn (0.1.1)
|
||||
unf (~> 0.1.4)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ JSON value `true`, and the suffix is stripped fom the key, resulting in the
|
|||
following:
|
||||
|
||||
```json
|
||||
"stopOnEntry": true
|
||||
"stopOnEntry#json": true
|
||||
```
|
||||
|
||||
Which is what we need.
|
||||
|
|
@ -722,7 +722,7 @@ Vimspector then orchestrates the various tools to set you up.
|
|||
"variables": {
|
||||
// Just an example of how to specify a variable manually rather than
|
||||
// vimspector asking for input from the user
|
||||
"ServiceName": "${fileBasenameNoExtension}"
|
||||
"ServiceName": "${fileBasenameNoExtention}"
|
||||
},
|
||||
|
||||
"adapter": "python-remote",
|
||||
|
|
|
|||
|
|
@ -13,13 +13,6 @@
|
|||
" See the License for the specific language governing permissions and
|
||||
" limitations under the License.
|
||||
|
||||
if !has( 'python3' )
|
||||
echohl WarningMsg
|
||||
echom 'Vimspector unavailable: Requires Vim compiled with +python3'
|
||||
echohl None
|
||||
finish
|
||||
endif
|
||||
|
||||
" Boilerplate {{{
|
||||
let s:save_cpo = &cpoptions
|
||||
set cpoptions&vim
|
||||
|
|
@ -115,9 +108,6 @@ command! -bar -nargs=? -complete=custom,vimspector#CompleteOutput
|
|||
command! -bar
|
||||
\ VimspectorToggleLog
|
||||
\ call vimspector#ToggleLog()
|
||||
command! -bar
|
||||
\ VimspectorDebugInfo
|
||||
\ call vimspector#PrintDebugInfo()
|
||||
command! -nargs=1 -complete=custom,vimspector#CompleteExpr
|
||||
\ VimspectorEval
|
||||
\ call vimspector#Evaluate( <f-args> )
|
||||
|
|
@ -151,6 +141,7 @@ augroup END
|
|||
augroup Vimspector
|
||||
autocmd!
|
||||
autocmd BufNew * call vimspector#OnBufferCreated( expand( '<afile>' ) )
|
||||
autocmd TabEnter * call vimspector#internal#state#OnTabEnter()
|
||||
augroup END
|
||||
|
||||
" boilerplate {{{
|
||||
|
|
|
|||
|
|
@ -34,13 +34,24 @@ class ServerBreakpointHandler( object ):
|
|||
pass
|
||||
|
||||
|
||||
# FIXME: THis really should be project scope and not associated with a debug
|
||||
# session. Breakpoints set by the user should be independent and breakpoints for
|
||||
# the current active session should be associated with the session when they are
|
||||
# in use.
|
||||
#
|
||||
# Questions include:
|
||||
# 1. what happens if we set/chnage a breakpiont in session #2 while session #1
|
||||
# is active ? Maybe we re-send the breakpoints to _all_ active sessions?
|
||||
#
|
||||
# More...
|
||||
class ProjectBreakpoints( object ):
|
||||
def __init__( self ):
|
||||
def __init__( self, session_id ):
|
||||
self._connection = None
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
utils.SetUpLogging( self._logger )
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session_id ) )
|
||||
utils.SetUpLogging( self._logger, session_id )
|
||||
|
||||
# These are the user-entered breakpoints.
|
||||
# These are the user-entered breakpoints. NOTE: if updating this, also
|
||||
# update Copy()
|
||||
self._line_breakpoints = defaultdict( list )
|
||||
self._func_breakpoints = []
|
||||
self._exception_breakpoints = None
|
||||
|
|
@ -91,6 +102,12 @@ class ProjectBreakpoints( object ):
|
|||
# FIXME: If the adapter type changes, we should probably forget this ?
|
||||
|
||||
|
||||
def Copy( self, other: 'ProjectBreakpoints' ):
|
||||
self._line_breakpoints = dict( other._line_breakpoints )
|
||||
self._func_breakpoints = list( other._func_breakpoints )
|
||||
if other._exception_breakpoints is not None:
|
||||
self._exception_breakpoints = dict( other._exception_breakpoints )
|
||||
|
||||
def BreakpointsAsQuickFix( self ):
|
||||
# FIXME: Handling of breakpoints is a mess, split between _codeView and this
|
||||
# object. This makes no sense and should be centralised so that we don't
|
||||
|
|
|
|||
|
|
@ -20,20 +20,20 @@ from collections import defaultdict
|
|||
|
||||
from vimspector import utils, terminal, signs
|
||||
|
||||
NEXT_SIGN_ID = 1
|
||||
|
||||
|
||||
class CodeView( object ):
|
||||
def __init__( self, window, api_prefix ):
|
||||
def __init__( self, session_id, window, api_prefix ):
|
||||
self._window = window
|
||||
self._api_prefix = api_prefix
|
||||
|
||||
self._terminal = None
|
||||
self.current_syntax = None
|
||||
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session_id ) )
|
||||
utils.SetUpLogging( self._logger )
|
||||
|
||||
# FIXME: This ID is by group, so should be module scope
|
||||
self._next_sign_id = 1
|
||||
self._breakpoints = defaultdict( list )
|
||||
self._signs = {
|
||||
'vimspectorPC': None,
|
||||
|
|
@ -92,8 +92,9 @@ class CodeView( object ):
|
|||
self._UndisplayPC( clear_pc = False )
|
||||
|
||||
# FIXME: Do we relly need to keep using up IDs ?
|
||||
self._signs[ 'vimspectorPC' ] = self._next_sign_id
|
||||
self._next_sign_id += 1
|
||||
global NEXT_SIGN_ID
|
||||
self._signs[ 'vimspectorPC' ] = NEXT_SIGN_ID
|
||||
NEXT_SIGN_ID += 1
|
||||
|
||||
sign = 'vimspectorPC'
|
||||
# If there's also a breakpoint on this line, use vimspectorPCBP
|
||||
|
|
@ -247,8 +248,9 @@ class CodeView( object ):
|
|||
if 'line' not in breakpoint:
|
||||
continue
|
||||
|
||||
sign_id = self._next_sign_id
|
||||
self._next_sign_id += 1
|
||||
global NEXT_SIGN_ID
|
||||
sign_id = NEXT_SIGN_ID
|
||||
NEXT_SIGN_ID += 1
|
||||
self._signs[ 'breakpoints' ].append( sign_id )
|
||||
if utils.BufferExists( file_name ):
|
||||
signs.PlaceSign( sign_id,
|
||||
|
|
|
|||
77
python3/vimspector/custom/python.py
Normal file
77
python3/vimspector/custom/python.py
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# 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 session_manager, gadgets, utils
|
||||
|
||||
from typing import Sequence
|
||||
|
||||
|
||||
class Debugpy( object ):
|
||||
parent: DebugSession
|
||||
sessions: Sequence[ DebugSession ]
|
||||
|
||||
def __init__( self, debug_session: DebugSession ):
|
||||
self.parent = debug_session
|
||||
self.queue = []
|
||||
|
||||
def LaunchSubprocessDebugSession( self, result ):
|
||||
launch_arguments = self.queue.pop( 0 )
|
||||
|
||||
if result == 1:
|
||||
session = session_manager.Get().NewSession( self.parent._api_prefix )
|
||||
|
||||
# Inject the launch config (HACK!). This will actually mean that the
|
||||
# configuration passed below is ignored.
|
||||
session._launch_config = launch_arguments
|
||||
|
||||
# FIXME: We probably do need to add a StartWithLauncArguments and somehow
|
||||
# tell the new session that it shoud not support "Restart" requests ?
|
||||
#
|
||||
# In fact, what even would Reset do... ?
|
||||
session._breakpoints.Copy( self.parent._breakpoints )
|
||||
session._StartWithConfiguration( { 'configuration': launch_arguments },
|
||||
launch_arguments[ 'connect' ] )
|
||||
|
||||
self.HandleNext()
|
||||
|
||||
|
||||
def OnEvent_debugpyAttach( self, message ):
|
||||
# Debugpy sends us the contents of a launch request that we should use. We
|
||||
# probaly just jave to guess the rest
|
||||
launch_arguments = message[ 'body' ]
|
||||
self.queue.append( launch_arguments )
|
||||
|
||||
# We use a queue because the confirm mechanism is quasi-modal and we can't
|
||||
# do multiple 'confirm' dialogs at once. It's not uncommon for
|
||||
# multiprocessing to create multiple subprocesses all at the same time.
|
||||
if len( self.queue ) == 1:
|
||||
self.HandleNext()
|
||||
|
||||
def HandleNext( self ):
|
||||
if not self.queue:
|
||||
return
|
||||
|
||||
launch_argyments = self.queue[ 0 ]
|
||||
pid = launch_argyments[ 'subProcessId' ]
|
||||
|
||||
utils.Confirm(
|
||||
self.parent._api_prefix,
|
||||
f"Subprocess {pid} was launched.\nAttach to it in a new tab?",
|
||||
self.LaunchSubprocessDebugSession,
|
||||
default_value = 1,
|
||||
options = [ 'Yes', 'No' ],
|
||||
keys = [ 'y', 'n' ] )
|
||||
|
||||
|
|
@ -29,14 +29,15 @@ class PendingRequest( object ):
|
|||
|
||||
|
||||
class DebugAdapterConnection( object ):
|
||||
def __init__( self, handlers, send_func ):
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
utils.SetUpLogging( self._logger )
|
||||
def __init__( self, handlers, session_id, send_func ):
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session_id ) )
|
||||
utils.SetUpLogging( self._logger, session_id )
|
||||
|
||||
self._Write = send_func
|
||||
self._SetState( 'READ_HEADER' )
|
||||
self._buffer = bytes()
|
||||
self._handlers = handlers
|
||||
self._session_id = session_id
|
||||
self._next_message_id = 0
|
||||
self._outstanding_requests = {}
|
||||
|
||||
|
|
@ -51,10 +52,12 @@ class DebugAdapterConnection( object ):
|
|||
msg[ 'seq' ] = this_id
|
||||
msg[ 'type' ] = 'request'
|
||||
|
||||
# TODO/FIXME: This is so messy
|
||||
expiry_id = vim.eval(
|
||||
'timer_start( {}, "vimspector#internal#channel#Timeout" )'.format(
|
||||
timeout ) )
|
||||
'timer_start( {}, '
|
||||
' function( "vimspector#internal#channel#Timeout", '
|
||||
' [ {} ] ) )'.format(
|
||||
timeout,
|
||||
self._session_id ) )
|
||||
|
||||
request = PendingRequest( msg,
|
||||
handler,
|
||||
|
|
@ -226,12 +229,7 @@ class DebugAdapterConnection( object ):
|
|||
|
||||
# self._logger.debug( 'Message received (raw): %s', payload )
|
||||
|
||||
try:
|
||||
message = json.loads( payload, strict = False )
|
||||
except Exception:
|
||||
self._logger.exception( "Invalid message received: %s", payload )
|
||||
self._SetState( 'READ_HEADER' )
|
||||
raise
|
||||
message = json.loads( payload )
|
||||
|
||||
self._logger.debug( 'Message received: {0}'.format( message ) )
|
||||
|
||||
|
|
|
|||
|
|
@ -42,15 +42,17 @@ VIMSPECTOR_HOME = utils.GetVimspectorBase()
|
|||
# cache of what the user entered for any option we ask them
|
||||
USER_CHOICES = {}
|
||||
|
||||
|
||||
class DebugSession( object ):
|
||||
def __init__( self, api_prefix ):
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
utils.SetUpLogging( self._logger )
|
||||
def __init__( self, session_id, session_manager, api_prefix ):
|
||||
self.session_id = session_id
|
||||
self.manager = session_manager
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session_id ) )
|
||||
utils.SetUpLogging( self._logger, session_id )
|
||||
|
||||
self._api_prefix = api_prefix
|
||||
|
||||
self._logger.info( "**** INITIALISING NEW VIMSPECTOR SESSION ****" )
|
||||
self._logger.info( "**** INITIALISING NEW VIMSPECTOR SESSION FOR ID "
|
||||
f"{session_id } ****" )
|
||||
self._logger.info( "API is: {}".format( api_prefix ) )
|
||||
self._logger.info( 'VIMSPECTOR_HOME = %s', VIMSPECTOR_HOME )
|
||||
self._logger.info( 'gadgetDir = %s',
|
||||
|
|
@ -61,7 +63,7 @@ class DebugSession( object ):
|
|||
self._stackTraceView = None
|
||||
self._variablesView = None
|
||||
self._outputView = None
|
||||
self._breakpoints = breakpoints.ProjectBreakpoints()
|
||||
self._breakpoints = breakpoints.ProjectBreakpoints( session_id )
|
||||
self._splash_screen = None
|
||||
self._remote_term = None
|
||||
|
||||
|
|
@ -73,6 +75,11 @@ class DebugSession( object ):
|
|||
|
||||
self._ResetServerState()
|
||||
|
||||
|
||||
def __del__( self ):
|
||||
self.manager.DestroySession( self )
|
||||
|
||||
|
||||
def _ResetServerState( self ):
|
||||
self._connection = None
|
||||
self._init_complete = False
|
||||
|
|
@ -408,7 +415,13 @@ class DebugSession( object ):
|
|||
if self._uiTab:
|
||||
self._logger.debug( "Clearing down UI" )
|
||||
|
||||
del vim.vars[ 'vimspector_session_windows' ]
|
||||
try:
|
||||
# FIXME: vimspector_session_windows is totally buseted with multiple
|
||||
# sessions
|
||||
del vim.vars[ 'vimspector_session_windows' ]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
vim.current.tabpage = self._uiTab
|
||||
|
||||
self._splash_screen = utils.HideSplash( self._api_prefix,
|
||||
|
|
@ -667,6 +680,15 @@ class DebugSession( object ):
|
|||
|
||||
def _SetUpUI( self ):
|
||||
vim.command( 'tab split' )
|
||||
|
||||
# Switch to this session now that we've made it visible. Note that the
|
||||
# TabEnter autocmd does trigger when the above is run, but that's before the
|
||||
# following line assigns the tab to this session, so when we try to find
|
||||
# this session by tab number, it's not found. So we have to manually switch
|
||||
# to it when creating a new tab.
|
||||
utils.Call( 'vimspector#internal#state#SwitchToSession',
|
||||
self.session_id )
|
||||
|
||||
self._uiTab = vim.current.tabpage
|
||||
|
||||
mode = settings.Get( 'ui_mode' )
|
||||
|
|
@ -710,7 +732,9 @@ class DebugSession( object ):
|
|||
def _SetUpUIHorizontal( self ):
|
||||
# Code window
|
||||
code_window = vim.current.window
|
||||
self._codeView = code.CodeView( code_window, self._api_prefix )
|
||||
self._codeView = code.CodeView( self.session_id,
|
||||
code_window,
|
||||
self._api_prefix )
|
||||
|
||||
# Call stack
|
||||
vim.command(
|
||||
|
|
@ -735,7 +759,8 @@ class DebugSession( object ):
|
|||
with utils.LetCurrentWindow( stack_trace_window ):
|
||||
vim.command( f'{ one_third }wincmd _' )
|
||||
|
||||
self._variablesView = variables.VariablesView( vars_window,
|
||||
self._variablesView = variables.VariablesView( self,
|
||||
vars_window,
|
||||
watch_window )
|
||||
|
||||
# Output/logging
|
||||
|
|
@ -743,7 +768,8 @@ class DebugSession( object ):
|
|||
vim.command( f'rightbelow { settings.Int( "bottombar_height" ) }new' )
|
||||
output_window = vim.current.window
|
||||
self._outputView = output.DAPOutputView( output_window,
|
||||
self._api_prefix )
|
||||
self._api_prefix,
|
||||
session_id = self.session_id )
|
||||
|
||||
# TODO: If/when we support multiple sessions, we'll need some way to
|
||||
# indicate which tab was created and store all the tabs
|
||||
|
|
@ -766,7 +792,9 @@ class DebugSession( object ):
|
|||
def _SetUpUIVertical( self ):
|
||||
# Code window
|
||||
code_window = vim.current.window
|
||||
self._codeView = code.CodeView( code_window, self._api_prefix )
|
||||
self._codeView = code.CodeView( self.session_id,
|
||||
code_window,
|
||||
self._api_prefix )
|
||||
|
||||
# Call stack
|
||||
vim.command(
|
||||
|
|
@ -793,7 +821,8 @@ class DebugSession( object ):
|
|||
with utils.LetCurrentWindow( stack_trace_window ):
|
||||
vim.command( f'{ one_third }wincmd |' )
|
||||
|
||||
self._variablesView = variables.VariablesView( vars_window,
|
||||
self._variablesView = variables.VariablesView( self,
|
||||
vars_window,
|
||||
watch_window )
|
||||
|
||||
|
||||
|
|
@ -802,7 +831,8 @@ class DebugSession( object ):
|
|||
vim.command( f'rightbelow { settings.Int( "bottombar_height" ) }new' )
|
||||
output_window = vim.current.window
|
||||
self._outputView = output.DAPOutputView( output_window,
|
||||
self._api_prefix )
|
||||
self._api_prefix,
|
||||
session_id = self.session_id )
|
||||
|
||||
# TODO: If/when we support multiple sessions, we'll need some way to
|
||||
# indicate which tab was created and store all the tabs
|
||||
|
|
@ -887,8 +917,10 @@ class DebugSession( object ):
|
|||
|
||||
vim.vars[ '_vimspector_adapter_spec' ] = self._adapter
|
||||
if not vim.eval( "vimspector#internal#{}#StartDebugSession( "
|
||||
" {},"
|
||||
" g:_vimspector_adapter_spec "
|
||||
")".format( self._connection_type ) ):
|
||||
")".format( self._connection_type,
|
||||
self.session_id ) ):
|
||||
self._logger.error( "Unable to start debug server" )
|
||||
self._splash_screen = utils.DisplaySplash( self._api_prefix,
|
||||
self._splash_screen,
|
||||
|
|
@ -908,9 +940,11 @@ class DebugSession( object ):
|
|||
handlers = [ self ]
|
||||
|
||||
self._connection = debug_adapter_connection.DebugAdapterConnection(
|
||||
handlers,
|
||||
lambda msg: utils.Call(
|
||||
handlers = handlers,
|
||||
session_id = self.session_id,
|
||||
send_func = lambda msg: utils.Call(
|
||||
"vimspector#internal#{}#Send".format( self._connection_type ),
|
||||
self.session_id,
|
||||
msg ) )
|
||||
|
||||
self._logger.info( 'Debug Adapter Started' )
|
||||
|
|
@ -933,8 +967,9 @@ class DebugSession( object ):
|
|||
assert not self._run_on_server_exit
|
||||
self._run_on_server_exit = callback
|
||||
|
||||
vim.eval( 'vimspector#internal#{}#StopDebugSession()'.format(
|
||||
self._connection_type ) )
|
||||
vim.eval( 'vimspector#internal#{}#StopDebugSession( {} )'.format(
|
||||
self._connection_type,
|
||||
self.session_id ) )
|
||||
|
||||
self._connection.DoRequest( handler, {
|
||||
'command': 'disconnect',
|
||||
|
|
@ -1179,9 +1214,10 @@ class DebugSession( object ):
|
|||
self._on_init_complete_handlers = []
|
||||
|
||||
self._logger.debug( "LAUNCH!" )
|
||||
self._launch_config = {}
|
||||
self._launch_config.update( self._adapter.get( 'configuration', {} ) )
|
||||
self._launch_config.update( self._configuration[ 'configuration' ] )
|
||||
if self._launch_config is None:
|
||||
self._launch_config = {}
|
||||
self._launch_config.update( self._adapter.get( 'configuration', {} ) )
|
||||
self._launch_config.update( self._configuration[ 'configuration' ] )
|
||||
|
||||
request = self._configuration.get(
|
||||
'remote-request',
|
||||
|
|
@ -1270,37 +1306,6 @@ class DebugSession( object ):
|
|||
self._stackTraceView.LoadThreads( True )
|
||||
|
||||
|
||||
@IfConnected()
|
||||
@RequiresUI()
|
||||
def PrintDebugInfo( self ):
|
||||
def Line():
|
||||
return ( "--------------------------------------------------------------"
|
||||
"------------------" )
|
||||
|
||||
def Pretty( obj ):
|
||||
if obj is None:
|
||||
return [ "None" ]
|
||||
return [ Line() ] + json.dumps( obj, indent=2 ).splitlines() + [ Line() ]
|
||||
|
||||
|
||||
debugInfo = [
|
||||
"Vimspector Debug Info",
|
||||
Line(),
|
||||
f"ConnectionType: { self._connection_type }",
|
||||
"Adapter: " ] + Pretty( self._adapter ) + [
|
||||
"Configuration: " ] + Pretty( self._configuration ) + [
|
||||
f"API Prefix: { self._api_prefix }",
|
||||
f"Launch/Init: { self._launch_complete } / { self._init_complete }",
|
||||
f"Workspace Root: { self._workspace_root }",
|
||||
"Launch Config: " ] + Pretty( self._launch_config ) + [
|
||||
"Server Capabilities: " ] + Pretty( self._server_capabilities ) + [
|
||||
]
|
||||
|
||||
self._outputView.ClearCategory( 'DebugInfo' )
|
||||
self._outputView.Print( "DebugInfo", debugInfo )
|
||||
self.ShowOutput( "DebugInfo" )
|
||||
|
||||
|
||||
def OnEvent_loadedSource( self, msg ):
|
||||
pass
|
||||
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@ GADGETS = {
|
|||
root,
|
||||
gadget ),
|
||||
'all': {
|
||||
'version': '1.6.0',
|
||||
'version': '0.27.0',
|
||||
"adapters": {
|
||||
"vscode-cpptools": {
|
||||
"name": "cppdbg",
|
||||
"command": [
|
||||
"${gadgetDir}/vscode-cpptools/debugAdapters/bin/OpenDebugAD7"
|
||||
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
|
||||
],
|
||||
"attach": {
|
||||
"pidProperty": "processId",
|
||||
|
|
@ -53,17 +53,17 @@ GADGETS = {
|
|||
'linux': {
|
||||
'file_name': 'cpptools-linux.vsix',
|
||||
'checksum':
|
||||
'c25299bcfb46b22d41aa3f125df7184e6282a35ff9fb69c47def744cb4778f55',
|
||||
'3695202e1e75a03de18049323b66d868165123f26151f8c974a480eaf0205435',
|
||||
},
|
||||
'macos': {
|
||||
'file_name': 'cpptools-osx-arm64.vsix',
|
||||
'file_name': 'cpptools-osx.vsix',
|
||||
'checksum':
|
||||
'ceb3e8cdaa2b5bb45af50913ddd8402089969748af8d70f5d46480408287ba6f',
|
||||
'cb061e3acd7559a539e5586f8d3f535101c4ec4e8a48195856d1d39380b5cf3c',
|
||||
},
|
||||
'windows': {
|
||||
'file_name': 'cpptools-win32.vsix',
|
||||
'checksum':
|
||||
'ef7ac5831874a3c7dbf0feb826bfda2be579aff9b6d990622fff1d0d4ede00d1',
|
||||
'aa294368ed16d48c59e49c8000e146eae5a19ad07b654efed5db8ec93b24229e',
|
||||
"adapters": {
|
||||
"vscode-cpptools": {
|
||||
"name": "cppdbg",
|
||||
|
|
@ -86,6 +86,29 @@ GADGETS = {
|
|||
},
|
||||
},
|
||||
},
|
||||
'vscode-python': {
|
||||
'language': 'python.legacy',
|
||||
'enabled': False,
|
||||
'download': {
|
||||
'url': 'https://github.com/Microsoft/vscode-python/releases/download/'
|
||||
'${version}/${file_name}',
|
||||
},
|
||||
'all': {
|
||||
'version': '2019.11.50794',
|
||||
'file_name': 'ms-python-release.vsix',
|
||||
'checksum':
|
||||
'6a9edf9ecabed14aac424e6007858068204a3638bf3bb4f235bd6035d823acc6',
|
||||
},
|
||||
'adapters': {
|
||||
"vscode-python": {
|
||||
"name": "vscode-python",
|
||||
"command": [
|
||||
"node",
|
||||
"${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js",
|
||||
],
|
||||
}
|
||||
},
|
||||
},
|
||||
'debugpy': {
|
||||
'language': 'python',
|
||||
'download': {
|
||||
|
|
@ -113,7 +136,8 @@ GADGETS = {
|
|||
# doesn't support the custom messages)
|
||||
# https://github.com/puremourning/vimspector/issues/141
|
||||
"subProcess": False,
|
||||
}
|
||||
},
|
||||
'custom_handler': 'vimspector.custom.python.Debugpy'
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
@ -211,12 +235,13 @@ GADGETS = {
|
|||
'format': 'tar',
|
||||
},
|
||||
'all': {
|
||||
'version': '1.2.0-782'
|
||||
'version': '1.2.0-738'
|
||||
},
|
||||
'macos': {
|
||||
'file_name': 'netcoredbg-osx.tar.gz',
|
||||
'version': '1.2.0-635',
|
||||
'checksum':
|
||||
'',
|
||||
'71c773e34d358950f25119bade7e3081c4c2f9d71847bd49027ca5792e918beb',
|
||||
},
|
||||
'linux': {
|
||||
'file_name': 'netcoredbg-linux-bionic-amd64.tar.gz',
|
||||
|
|
@ -246,6 +271,41 @@ GADGETS = {
|
|||
},
|
||||
}
|
||||
},
|
||||
'vscode-mono-debug': {
|
||||
'language': 'csharp',
|
||||
'enabled': False,
|
||||
'download': {
|
||||
'url': 'https://marketplace.visualstudio.com/_apis/public/gallery/'
|
||||
'publishers/ms-vscode/vsextensions/mono-debug/${version}/'
|
||||
'vspackage',
|
||||
'target': 'vscode-mono-debug.vsix.gz',
|
||||
'format': 'zip.gz',
|
||||
},
|
||||
'all': {
|
||||
'file_name': 'vscode-mono-debug.vsix',
|
||||
'version': '0.16.2',
|
||||
'checksum':
|
||||
'121eca297d83daeeb1e6e1d791305d1827998dbd595c330086b3b94d33dba3b9',
|
||||
},
|
||||
'adapters': {
|
||||
'vscode-mono-debug': {
|
||||
"name": "mono-debug",
|
||||
"command": [
|
||||
"mono",
|
||||
"${gadgetDir}/vscode-mono-debug/bin/Release/mono-debug.exe"
|
||||
],
|
||||
"attach": {
|
||||
"pidSelect": "none"
|
||||
},
|
||||
"configuration": {
|
||||
"cwd": "${workspaceRoot}",
|
||||
"console": "integratedTerminal",
|
||||
"args": [],
|
||||
"env": {}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
'vscode-bash-debug': {
|
||||
'language': 'bash',
|
||||
'download': {
|
||||
|
|
@ -323,10 +383,10 @@ GADGETS = {
|
|||
'${version}/${file_name}',
|
||||
},
|
||||
'all': {
|
||||
'version': 'v1.17.0',
|
||||
'file_name': 'php-debug-1.17.0.vsix',
|
||||
'version': 'v1.14.9',
|
||||
'file_name': 'php-debug.vsix',
|
||||
'checksum':
|
||||
'd0fff272503414b6696cc737bc2e18e060fdd5e5dc4bcaf38ae7373afd8d8bc9',
|
||||
'0c5709cbbffe26b12aa63a88142195a9a045a5d8fca7fe63d62c789fe601630d',
|
||||
},
|
||||
'adapters': {
|
||||
'vscode-php-debug': {
|
||||
|
|
@ -394,12 +454,12 @@ GADGETS = {
|
|||
'${version}/${file_name}',
|
||||
},
|
||||
'all': {
|
||||
'version': 'v1.6.6',
|
||||
'version': 'v1.5.3',
|
||||
},
|
||||
'macos': {
|
||||
'file_name': 'codelldb-aarch64-darwin.vsix',
|
||||
'file_name': 'codelldb-x86_64-darwin.vsix',
|
||||
'checksum':
|
||||
'5adc3b9139eabdafd825bd5efc55df4424a203fb2b6087b425cd434956e7ec58',
|
||||
'7505bc1cdfcfd1cb981e2996aec62d63577440709bac31dcadb41a3b4b44631a',
|
||||
'make_executable': [
|
||||
'adapter/codelldb',
|
||||
'lldb/bin/debugserver',
|
||||
|
|
@ -410,7 +470,7 @@ GADGETS = {
|
|||
'linux': {
|
||||
'file_name': 'codelldb-x86_64-linux.vsix',
|
||||
'checksum':
|
||||
'eda2cd9b3089dcc0524c273e91ffb5875fe08c930bf643739a2cd1846e1f98d6',
|
||||
'ce7efc3e94d775368e5942a02bf5c326b6809a0b4c389f79ffa6a8f6f6b72139',
|
||||
'make_executable': [
|
||||
'adapter/codelldb',
|
||||
'lldb/bin/lldb',
|
||||
|
|
@ -421,7 +481,7 @@ GADGETS = {
|
|||
'windows': {
|
||||
'file_name': 'codelldb-x86_64-windows.vsix',
|
||||
'checksum':
|
||||
'8ddebe8381a3d22dc3d95139c3797fda06b5cc34aadf300e13b1c516b9da95fe',
|
||||
'',
|
||||
'make_executable': []
|
||||
},
|
||||
'adapters': {
|
||||
|
|
|
|||
|
|
@ -358,8 +358,7 @@ def InstallCppTools( name, root, gadget ):
|
|||
# It's hilarious, but the execute bits aren't set in the vsix. So they
|
||||
# actually have javascript code which does this. It's just a horrible horrible
|
||||
# hack that really is not funny.
|
||||
MakeExecutable(
|
||||
os.path.join( extension, 'debugAdapters', 'bin', 'OpenDebugAD7' ) )
|
||||
MakeExecutable( os.path.join( extension, 'debugAdapters', 'OpenDebugAD7' ) )
|
||||
with open( os.path.join( extension, 'package.json' ) ) as f:
|
||||
package = json.load( f )
|
||||
runtime_dependencies = package[ 'runtimeDependencies' ]
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ class TabBuffer( object ):
|
|||
BUFFER_MAP = {
|
||||
'console': 'Console',
|
||||
'stdout': 'Console',
|
||||
'output': 'Console',
|
||||
'stderr': 'stderr',
|
||||
'telemetry': None,
|
||||
}
|
||||
|
|
@ -59,17 +58,20 @@ class OutputView( object ):
|
|||
files or the output of commands."""
|
||||
_buffers: typing.Dict[ str, TabBuffer ]
|
||||
|
||||
def __init__( self, window, api_prefix ):
|
||||
def __init__( self, window, api_prefix, session_id = None ):
|
||||
self._window = window
|
||||
self._buffers = {}
|
||||
self._api_prefix = api_prefix
|
||||
VIEWS.add( self )
|
||||
|
||||
def Print( self, category, text: typing.Union[ str, list ] ):
|
||||
if not isinstance( text, list ):
|
||||
text = text.splitlines()
|
||||
if session_id is None:
|
||||
# FIXME: hack?
|
||||
self._session_id = hash( self )
|
||||
else:
|
||||
self._session_id = session_id
|
||||
|
||||
self._Print( category, text )
|
||||
def Print( self, categroy, text ):
|
||||
self._Print( 'server', text.splitlines() )
|
||||
|
||||
def OnOutput( self, event ):
|
||||
category = CategoryToBuffer( event.get( 'category' ) or 'output' )
|
||||
|
|
@ -108,26 +110,13 @@ class OutputView( object ):
|
|||
|
||||
def Clear( self ):
|
||||
for category, tab_buffer in self._buffers.items():
|
||||
self._CleanUpBuffer( category, tab_buffer )
|
||||
if tab_buffer.is_job:
|
||||
utils.CleanUpCommand( self._session_id, category, self._api_prefix )
|
||||
utils.CleanUpHiddenBuffer( tab_buffer.buf )
|
||||
|
||||
# FIXME: nunmenu the WinBar ?
|
||||
self._buffers = {}
|
||||
|
||||
|
||||
def ClearCategory( self, category: str ):
|
||||
if category not in self._buffers:
|
||||
return
|
||||
|
||||
self._CleanUpBuffer( category, self._buffers[ category ] )
|
||||
|
||||
|
||||
def _CleanUpBuffer( self, category: str, tab_buffer: TabBuffer ):
|
||||
if tab_buffer.is_job:
|
||||
utils.CleanUpCommand( category, self._api_prefix )
|
||||
|
||||
utils.CleanUpHiddenBuffer( tab_buffer.buf )
|
||||
|
||||
|
||||
def WindowIsValid( self ):
|
||||
return self._window.valid
|
||||
|
||||
|
|
@ -191,8 +180,9 @@ class OutputView( object ):
|
|||
|
||||
if cmd is not None:
|
||||
out = utils.SetUpCommandBuffer(
|
||||
self._session_id,
|
||||
cmd,
|
||||
category,
|
||||
utils.BufferNameForSession( category, self._session_id ),
|
||||
self._api_prefix,
|
||||
completion_handler = completion_handler )
|
||||
|
||||
|
|
@ -205,6 +195,8 @@ class OutputView( object ):
|
|||
else:
|
||||
name = 'vimspector.Output:{0}'.format( category )
|
||||
|
||||
name = utils.BufferNameForSession( name, self._session_id )
|
||||
|
||||
tab_buffer = TabBuffer( utils.NewEmptyBuffer(), len( self._buffers ) )
|
||||
|
||||
self._buffers[ category ] = tab_buffer
|
||||
|
|
@ -267,8 +259,8 @@ class OutputView( object ):
|
|||
|
||||
class DAPOutputView( OutputView ):
|
||||
"""Specialised OutputView which adds the DAP Console (REPL)"""
|
||||
def __init__( self, *args ):
|
||||
super().__init__( *args )
|
||||
def __init__( self, *args, **kwargs ):
|
||||
super().__init__( *args, **kwargs )
|
||||
|
||||
self._connection = None
|
||||
for b in set( BUFFER_MAP.values() ):
|
||||
|
|
|
|||
58
python3/vimspector/session_manager.py
Normal file
58
python3/vimspector/session_manager.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# vimspector - A multi-language debugging system for Vim
|
||||
# Copyright 2020 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
|
||||
|
||||
# Singleton
|
||||
_session_manager = None
|
||||
|
||||
|
||||
class SessionManager:
|
||||
next_session_id = 0
|
||||
sessions = {}
|
||||
|
||||
|
||||
def NewSession( self, *args, **kwargs ):
|
||||
session_id = self.next_session_id
|
||||
self.next_session_id += 1
|
||||
session = DebugSession( session_id, self, *args, **kwargs )
|
||||
self.sessions[ session_id ] = session
|
||||
|
||||
return session
|
||||
|
||||
|
||||
def DestroySession( self, session: DebugSession ):
|
||||
# TODO: Call this!
|
||||
del self.sessions[ session.session_id ]
|
||||
|
||||
|
||||
def GetSession( self, session_id ):
|
||||
return self.sessions.get( session_id )
|
||||
|
||||
|
||||
def SessionForTab( self, tabnr ):
|
||||
for _, session in self.sessions.items():
|
||||
if session._HasUI() and session._uiTab.number == int( tabnr ):
|
||||
return session
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def Get():
|
||||
global _session_manager
|
||||
if _session_manager is None:
|
||||
_session_manager = SessionManager()
|
||||
|
||||
return _session_manager
|
||||
|
|
@ -42,8 +42,7 @@ DEFAULTS = {
|
|||
'vimspectorBP': 9,
|
||||
'vimspectorBPCond': 9,
|
||||
'vimspectorBPDisabled': 9,
|
||||
'vimspectorCurrentThread': 200,
|
||||
'vimspectorCurrentFrame': 200,
|
||||
'vimspectorCurrentThread': 200
|
||||
},
|
||||
|
||||
# Installer
|
||||
|
|
|
|||
|
|
@ -86,8 +86,8 @@ class StackTraceView( object ):
|
|||
_line_to_thread = typing.Dict[ int, Thread ]
|
||||
|
||||
def __init__( self, session, win ):
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
utils.SetUpLogging( self._logger )
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session.session_id ) )
|
||||
utils.SetUpLogging( self._logger, session.session_id )
|
||||
|
||||
self._buf = win.buffer
|
||||
self._session = session
|
||||
|
|
@ -102,10 +102,12 @@ class StackTraceView( object ):
|
|||
self._scratch_buffers = []
|
||||
|
||||
# FIXME: This ID is by group, so should be module scope
|
||||
self._current_thread_sign_id = 0 # 1 when used
|
||||
self._current_frame_sign_id = 0 # 2 when used
|
||||
self._next_sign_id = 1
|
||||
|
||||
utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' )
|
||||
utils.SetUpHiddenBuffer(
|
||||
self._buf,
|
||||
utils.BufferNameForSession( 'vimspector.StackTrace',
|
||||
self._session.session_id ) )
|
||||
utils.SetUpUIWindow( win )
|
||||
|
||||
mappings = settings.Dict( 'mappings' )[ 'stack_trace' ]
|
||||
|
|
@ -128,7 +130,6 @@ class StackTraceView( object ):
|
|||
':call vimspector#SetCurrentThread()<CR>' )
|
||||
|
||||
win.options[ 'cursorline' ] = False
|
||||
win.options[ 'signcolumn' ] = 'auto'
|
||||
|
||||
|
||||
if not signs.SignDefined( 'vimspectorCurrentThread' ):
|
||||
|
|
@ -138,13 +139,6 @@ class StackTraceView( object ):
|
|||
texthl = 'MatchParen',
|
||||
linehl = 'CursorLine' )
|
||||
|
||||
if not signs.SignDefined( 'vimspectorCurrentFrame' ):
|
||||
signs.DefineSign( 'vimspectorCurrentFrame',
|
||||
text = '▶ ',
|
||||
double_text = '▶',
|
||||
texthl = 'Special',
|
||||
linehl = 'CursorLine' )
|
||||
|
||||
self._line_to_frame = {}
|
||||
self._line_to_thread = {}
|
||||
|
||||
|
|
@ -166,12 +160,9 @@ class StackTraceView( object ):
|
|||
self._sources = {}
|
||||
self._requesting_threads = StackTraceView.ThreadRequestState.NO
|
||||
self._pending_thread_request = None
|
||||
if self._current_thread_sign_id:
|
||||
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
|
||||
self._current_thread_sign_id = 0
|
||||
if self._current_frame_sign_id:
|
||||
signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
|
||||
self._current_frame_sign_id = 0
|
||||
if self._next_sign_id:
|
||||
signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
|
||||
self._next_sign_id = 0
|
||||
|
||||
with utils.ModifiableScratchBuffer( self._buf ):
|
||||
utils.ClearBuffer( self._buf )
|
||||
|
|
@ -285,10 +276,10 @@ class StackTraceView( object ):
|
|||
self._line_to_frame.clear()
|
||||
self._line_to_thread.clear()
|
||||
|
||||
if self._current_thread_sign_id:
|
||||
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' )
|
||||
if self._next_sign_id:
|
||||
signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
|
||||
else:
|
||||
self._current_thread_sign_id = 1
|
||||
self._next_sign_id = 1
|
||||
|
||||
with utils.ModifiableScratchBuffer( self._buf ):
|
||||
with utils.RestoreCursorPosition():
|
||||
|
|
@ -302,7 +293,7 @@ class StackTraceView( object ):
|
|||
f'({thread.State()})' )
|
||||
|
||||
if self._current_thread == thread.id:
|
||||
signs.PlaceSign( self._current_thread_sign_id,
|
||||
signs.PlaceSign( self._next_sign_id,
|
||||
'VimspectorStackTrace',
|
||||
'vimspectorCurrentThread',
|
||||
self._buf.name,
|
||||
|
|
@ -433,7 +424,6 @@ class StackTraceView( object ):
|
|||
# Should this set the current _Thread_ too ? If i jump to a frame in
|
||||
# Thread 2, should that become the focussed thread ?
|
||||
self._current_frame = frame
|
||||
self._DrawThreads()
|
||||
return self._session.SetCurrentFrame( self._current_frame, reason )
|
||||
return False
|
||||
|
||||
|
|
@ -531,11 +521,6 @@ class StackTraceView( object ):
|
|||
if not thread.IsExpanded():
|
||||
return
|
||||
|
||||
if self._current_frame_sign_id:
|
||||
signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
|
||||
else:
|
||||
self._current_frame_sign_id = 2
|
||||
|
||||
for frame in thread.stacktrace:
|
||||
if frame.get( 'source' ):
|
||||
source = frame[ 'source' ]
|
||||
|
|
@ -560,14 +545,6 @@ class StackTraceView( object ):
|
|||
source[ 'name' ],
|
||||
frame[ 'line' ] ) )
|
||||
|
||||
if ( self._current_frame is not None and
|
||||
self._current_frame[ 'id' ] == frame[ 'id' ] ):
|
||||
signs.PlaceSign( self._current_frame_sign_id,
|
||||
'VimspectorStackTrace',
|
||||
'vimspectorCurrentFrame',
|
||||
self._buf.name,
|
||||
line )
|
||||
|
||||
self._line_to_frame[ line ] = ( thread, frame )
|
||||
|
||||
def _ResolveSource( self, source, and_then ):
|
||||
|
|
@ -588,7 +565,10 @@ class StackTraceView( object ):
|
|||
|
||||
buf = utils.BufferForFile( buf_name )
|
||||
self._scratch_buffers.append( buf )
|
||||
utils.SetUpHiddenBuffer( buf, buf_name )
|
||||
utils.SetUpHiddenBuffer( buf,
|
||||
utils.BufferNameForSession(
|
||||
buf_name,
|
||||
self._session.session_id ) )
|
||||
source[ 'path' ] = buf_name
|
||||
with utils.ModifiableScratchBuffer( buf ):
|
||||
utils.SetBufferContents( buf, msg[ 'body' ][ 'content' ] )
|
||||
|
|
|
|||
|
|
@ -32,13 +32,30 @@ LOG_FILE = os.path.expanduser( os.path.join( '~', '.vimspector.log' ) )
|
|||
_log_handler = logging.FileHandler( LOG_FILE, mode = 'w' )
|
||||
|
||||
_log_handler.setFormatter(
|
||||
logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s' ) )
|
||||
logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s:%(lineno)s - '
|
||||
'%(context)s - %(message)s' ) )
|
||||
|
||||
|
||||
def SetUpLogging( logger ):
|
||||
class ContextLogFilter( logging.Filter ):
|
||||
context: str
|
||||
|
||||
def __init__( self, context ):
|
||||
self.context = str( context )
|
||||
|
||||
def filter( self, record: logging.LogRecord ):
|
||||
if self.context is None:
|
||||
record.context = 'UNKNOWN'
|
||||
else:
|
||||
record.context = self.context
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def SetUpLogging( logger, context = None ):
|
||||
logger.setLevel( logging.DEBUG )
|
||||
if _log_handler not in logger.handlers:
|
||||
logger.addHandler( _log_handler )
|
||||
logger.addFilter( ContextLogFilter( context ) )
|
||||
|
||||
|
||||
_logger = logging.getLogger( __name__ )
|
||||
|
|
@ -87,16 +104,21 @@ def OpenFileInCurrentWindow( file_name ):
|
|||
COMMAND_HANDLERS = {}
|
||||
|
||||
|
||||
def OnCommandWithLogComplete( name, exit_code ):
|
||||
cb = COMMAND_HANDLERS.get( name )
|
||||
def OnCommandWithLogComplete( session_id, name, exit_code ):
|
||||
cb = COMMAND_HANDLERS.get( str( session_id ) + '.' + name )
|
||||
if cb:
|
||||
cb( exit_code )
|
||||
|
||||
|
||||
def SetUpCommandBuffer( cmd, name, api_prefix, completion_handler = None ):
|
||||
COMMAND_HANDLERS[ name ] = completion_handler
|
||||
def SetUpCommandBuffer( session_id,
|
||||
cmd,
|
||||
name,
|
||||
api_prefix,
|
||||
completion_handler = None ):
|
||||
COMMAND_HANDLERS[ str( session_id ) + '.' + name ] = completion_handler
|
||||
|
||||
buf = Call( f'vimspector#internal#{api_prefix}job#StartCommandWithLog',
|
||||
session_id,
|
||||
cmd,
|
||||
name )
|
||||
|
||||
|
|
@ -110,10 +132,12 @@ def SetUpCommandBuffer( cmd, name, api_prefix, completion_handler = None ):
|
|||
return vim.buffers[ int( buf ) ]
|
||||
|
||||
|
||||
def CleanUpCommand( name, api_prefix ):
|
||||
return vim.eval( 'vimspector#internal#{}job#CleanUpCommand( "{}" )'.format(
|
||||
api_prefix,
|
||||
name ) )
|
||||
def CleanUpCommand( session_id, name, api_prefix ):
|
||||
return vim.eval(
|
||||
'vimspector#internal#{}job#CleanUpCommand( {}, "{}" )'.format(
|
||||
api_prefix,
|
||||
session_id,
|
||||
name ) )
|
||||
|
||||
|
||||
def CleanUpHiddenBuffer( buf ):
|
||||
|
|
@ -397,6 +421,8 @@ def Confirm( api_prefix,
|
|||
default_value = 2,
|
||||
options: list = None,
|
||||
keys: list = None ):
|
||||
# TODO: Implement a queue here? If calling code calls Confirm (async) multiple
|
||||
# times, we... well what happens?!
|
||||
if not options:
|
||||
options = [ '(Y)es', '(N)o' ]
|
||||
if not keys:
|
||||
|
|
@ -864,3 +890,12 @@ def UseWinBar():
|
|||
# Buggy neovim doesn't render correctly when the WinBar is defined:
|
||||
# https://github.com/neovim/neovim/issues/12689
|
||||
return not int( Call( 'has', 'nvim' ) )
|
||||
|
||||
|
||||
def BufferNameForSession( name, session_id ):
|
||||
if session_id == 0:
|
||||
# Hack for backward compat - don't suffix with the ID for the "first"
|
||||
# session
|
||||
return name
|
||||
|
||||
return f'{name}[{session_id}]'
|
||||
|
|
|
|||
|
|
@ -166,10 +166,11 @@ def AddExpandMappings( mappings = None ):
|
|||
|
||||
|
||||
class VariablesView( object ):
|
||||
def __init__( self, variables_win, watches_win ):
|
||||
self._logger = logging.getLogger( __name__ )
|
||||
utils.SetUpLogging( self._logger )
|
||||
def __init__( self, session, variables_win, watches_win ):
|
||||
self._logger = logging.getLogger( __name__ + '.' + str( session.session_id ) )
|
||||
utils.SetUpLogging( self._logger, session.session_id )
|
||||
|
||||
self._session = session
|
||||
self._connection = None
|
||||
self._current_syntax = ''
|
||||
self._server_capabilities = None
|
||||
|
|
@ -182,7 +183,10 @@ class VariablesView( object ):
|
|||
# Set up the "Variables" buffer in the variables_win
|
||||
self._scopes: typing.List[ Scope ] = []
|
||||
self._vars = View( variables_win, {}, self._DrawScopes )
|
||||
utils.SetUpHiddenBuffer( self._vars.buf, 'vimspector.Variables' )
|
||||
utils.SetUpHiddenBuffer(
|
||||
self._vars.buf,
|
||||
utils.BufferNameForSession( 'vimspector.Variables',
|
||||
self._session.session_id ) )
|
||||
with utils.LetCurrentWindow( variables_win ):
|
||||
if utils.UseWinBar():
|
||||
vim.command( 'nnoremenu <silent> 1.1 WinBar.Set '
|
||||
|
|
@ -193,11 +197,14 @@ class VariablesView( object ):
|
|||
# there)
|
||||
self._watches: typing.List[ Watch ] = []
|
||||
self._watch = View( watches_win, {}, self._DrawWatches )
|
||||
utils.SetUpPromptBuffer( self._watch.buf,
|
||||
'vimspector.Watches',
|
||||
'Expression: ',
|
||||
'vimspector#AddWatchPrompt',
|
||||
'vimspector#OmniFuncWatch' )
|
||||
utils.SetUpPromptBuffer(
|
||||
self._watch.buf,
|
||||
utils.BufferNameForSession( 'vimspector.Watches',
|
||||
self._session.session_id ),
|
||||
'Expression: ',
|
||||
'vimspector#AddWatchPrompt',
|
||||
'vimspector#OmniFuncWatch' )
|
||||
|
||||
with utils.LetCurrentWindow( watches_win ):
|
||||
AddExpandMappings( mappings )
|
||||
for mapping in utils.GetVimList( mappings, 'delete' ):
|
||||
|
|
@ -224,9 +231,12 @@ class VariablesView( object ):
|
|||
'balloonexpr': vim.options[ 'balloonexpr' ],
|
||||
'balloondelay': vim.options[ 'balloondelay' ],
|
||||
}
|
||||
# TODO: How can we make this work. I think we can set ballooneval as a
|
||||
# buffer-local or maybe window-local variable ? We could pass session_id
|
||||
# to the expression here, but still how would it work with 2 concurrent
|
||||
# sessions?
|
||||
vim.options[ 'balloonexpr' ] = ( "vimspector#internal#"
|
||||
"balloon#HoverTooltip()" )
|
||||
|
||||
vim.options[ 'balloondelay' ] = 250
|
||||
|
||||
if has_balloon:
|
||||
|
|
|
|||
12
run_tests
12
run_tests
|
|
@ -21,7 +21,7 @@ out_fd=1
|
|||
|
||||
while [ -n "$1" ]; do
|
||||
case "$1" in
|
||||
"--basedir"|"--base-dir"|"--test-base")
|
||||
"--basedir")
|
||||
shift
|
||||
SetBaseDir $1
|
||||
shift
|
||||
|
|
@ -36,7 +36,7 @@ while [ -n "$1" ]; do
|
|||
INSTALL=$1
|
||||
shift
|
||||
;;
|
||||
"--update"|"--upgrade")
|
||||
"--update")
|
||||
UPDATE=1
|
||||
shift
|
||||
;;
|
||||
|
|
@ -91,8 +91,7 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "script" ]; then
|
|||
if ! python3 $(dirname $0)/install_gadget.py \
|
||||
--basedir ${BASEDIR} \
|
||||
${INSTALLER_ARGS} \
|
||||
--all \
|
||||
--force-enable-csharp; then
|
||||
--all; then
|
||||
echo "Script installation reported errors" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -103,7 +102,7 @@ if [ "$INSTALL" = "1" ] || [ "$INSTALL" = "vim" ]; then
|
|||
--cmd "${BASEDIR_CMD}" \
|
||||
-c 'autocmd User VimspectorInstallSuccess qa!' \
|
||||
-c 'autocmd User VimspectorInstallFailed cquit!' \
|
||||
-c "VimspectorInstall --all netcoredbg"; then
|
||||
-c "VimspectorInstall --all"; then
|
||||
echo "Vim installation reported errors" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -145,9 +144,6 @@ set -e
|
|||
pushd tests/testdata/cpp/simple
|
||||
make clean all
|
||||
popd
|
||||
pushd support/test/csharp
|
||||
dotnet build
|
||||
popd
|
||||
set +e
|
||||
echo "%DONE - built test programs"
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ function s:SetUpTerminal()
|
|||
let padding = 4
|
||||
let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] )
|
||||
call win_gotoid( terminal_win )
|
||||
execute string(cols) . 'wincmd |'
|
||||
execute cols . 'wincmd |'
|
||||
endfunction
|
||||
|
||||
function! s:CustomiseWinBar()
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# 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.
|
||||
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import hashlib
|
||||
import sys
|
||||
|
||||
|
||||
def GetChecksumSHA254( file_path ):
|
||||
with open( file_path, 'rb' ) as existing_file:
|
||||
return hashlib.sha256( existing_file.read() ).hexdigest()
|
||||
|
||||
|
||||
for arg in sys.argv[ 1: ]:
|
||||
print( f"{ arg } = { GetChecksumSHA254( arg ) }" )
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json",
|
||||
"configurations": {
|
||||
"Run Current Script": {
|
||||
"adapter": "vscode-bash",
|
||||
"autoselect": false,
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"cwd": "${fileDirname}",
|
||||
"args": [ "*${args}" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,15 +15,6 @@
|
|||
"program": "${workspaceRoot}/test",
|
||||
"stopAtEntry": true
|
||||
}
|
||||
},
|
||||
"cpptools": {
|
||||
"adapter": "vscode-cpptools",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/test",
|
||||
"stopOnEntry": true,
|
||||
"MIMode": "lldb"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
def Settings( **kwargs ):
|
||||
return {
|
||||
'flags': [ '-x', 'c++', '-Wall', '-Wextra', '-std=c++17' ]
|
||||
'flags': [ '-x', 'c++', '-Wall', '-Wextra' ]
|
||||
}
|
||||
|
|
|
|||
1
support/test/csharp/.gitignore
vendored
1
support/test/csharp/.gitignore
vendored
|
|
@ -1,3 +1,2 @@
|
|||
bin/
|
||||
obj/Debug
|
||||
obj/
|
||||
|
|
|
|||
|
|
@ -1,57 +1,25 @@
|
|||
{
|
||||
"adapters": {
|
||||
"netcoredbg-debuglog": {
|
||||
"attach": {
|
||||
"pidProperty": "processId",
|
||||
"pidSelect": "ask"
|
||||
"configurations": {
|
||||
"launch - netcoredbg": {
|
||||
"adapter": "netcoredbg",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.2/csharp.dll",
|
||||
"args": [],
|
||||
"stopAtEntry": true
|
||||
}
|
||||
},
|
||||
"command": [
|
||||
"${gadgetDir}/netcoredbg/netcoredbg",
|
||||
"--interpreter=vscode",
|
||||
"--engineLogging=${workspaceRoot}/netcoredbg.engine.log",
|
||||
"--log=${workspaceRoot}/netcoredbg.log"
|
||||
],
|
||||
"configuration": {
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
"name": "netcoredbg"
|
||||
}
|
||||
},
|
||||
"configurations": {
|
||||
//
|
||||
// NOTE:
|
||||
// If you add to this, you must update tests/get_configurations.test.vim
|
||||
//
|
||||
|
||||
"launch - netcoredbg": {
|
||||
"adapter": "netcoredbg",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp3.1/csharp.dll",
|
||||
"args": [],
|
||||
"stopAtEntry": false
|
||||
}
|
||||
},
|
||||
"launch - netcoredbg - with debug log": {
|
||||
"adapter": "netcoredbg-debuglog",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/bin/Debug/netcoreapp3.1/csharp.dll",
|
||||
"args": [],
|
||||
"stopAtEntry": false
|
||||
}
|
||||
},
|
||||
"launch - mono": {
|
||||
"adapter": "vscode-mono-debug",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/Program.exe",
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"args": [],
|
||||
"env": {}
|
||||
"launch - mono": {
|
||||
"adapter": "vscode-mono-debug",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/Program.exe",
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"args": [],
|
||||
"env": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26124.0
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp", "csharp.csproj", "{91DB205F-E422-430B-BBB8-955110C7B3B6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -17,18 +15,4 @@ Global
|
|||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{91DB205F-E422-430B-BBB8-955110C7B3B6}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
|||
5
support/test/csharp/obj/csharp.csproj.nuget.cache
Normal file
5
support/test/csharp/obj/csharp.csproj.nuget.cache
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"version": 1,
|
||||
"dgSpecHash": "6/vdr7YprlSIoQecv/nNuLNflFpO0X7eN7jHUinZTsgian9nYpmHMWirsDWMi5l+29TH+Qy8O/QfaB/48QtjRQ==",
|
||||
"success": true
|
||||
}
|
||||
21
support/test/csharp/obj/csharp.csproj.nuget.g.props
Normal file
21
support/test/csharp/obj/csharp.csproj.nuget.g.props
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?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>
|
||||
10
support/test/csharp/obj/csharp.csproj.nuget.g.targets
Normal file
10
support/test/csharp/obj/csharp.csproj.nuget.g.targets
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?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>
|
||||
748
support/test/csharp/obj/project.assets.json
Normal file
748
support/test/csharp/obj/project.assets.json
Normal file
|
|
@ -0,0 +1,748 @@
|
|||
{
|
||||
"version": 3,
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v2.2": {
|
||||
"Microsoft.NETCore.App/2.2.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.DotNetHostPolicy": "2.2.0",
|
||||
"Microsoft.NETCore.Platforms": "2.2.0",
|
||||
"Microsoft.NETCore.Targets": "2.0.0",
|
||||
"NETStandard.Library": "2.0.3"
|
||||
},
|
||||
"compile": {
|
||||
"ref/netcoreapp2.2/Microsoft.CSharp.dll": {},
|
||||
"ref/netcoreapp2.2/Microsoft.VisualBasic.dll": {},
|
||||
"ref/netcoreapp2.2/Microsoft.Win32.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.AppContext.dll": {},
|
||||
"ref/netcoreapp2.2/System.Buffers.dll": {},
|
||||
"ref/netcoreapp2.2/System.Collections.Concurrent.dll": {},
|
||||
"ref/netcoreapp2.2/System.Collections.Immutable.dll": {},
|
||||
"ref/netcoreapp2.2/System.Collections.NonGeneric.dll": {},
|
||||
"ref/netcoreapp2.2/System.Collections.Specialized.dll": {},
|
||||
"ref/netcoreapp2.2/System.Collections.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Annotations.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.DataAnnotations.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.TypeConverter.dll": {},
|
||||
"ref/netcoreapp2.2/System.ComponentModel.dll": {},
|
||||
"ref/netcoreapp2.2/System.Configuration.dll": {},
|
||||
"ref/netcoreapp2.2/System.Console.dll": {},
|
||||
"ref/netcoreapp2.2/System.Core.dll": {},
|
||||
"ref/netcoreapp2.2/System.Data.Common.dll": {},
|
||||
"ref/netcoreapp2.2/System.Data.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Contracts.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Debug.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Process.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.StackTrace.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tools.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TraceSource.dll": {},
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tracing.dll": {},
|
||||
"ref/netcoreapp2.2/System.Drawing.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.Drawing.dll": {},
|
||||
"ref/netcoreapp2.2/System.Dynamic.Runtime.dll": {},
|
||||
"ref/netcoreapp2.2/System.Globalization.Calendars.dll": {},
|
||||
"ref/netcoreapp2.2/System.Globalization.Extensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Globalization.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.Compression.Brotli.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.Compression.FileSystem.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.Compression.ZipFile.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.Compression.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.Watcher.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.IsolatedStorage.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.MemoryMappedFiles.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.Pipes.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.UnmanagedMemoryStream.dll": {},
|
||||
"ref/netcoreapp2.2/System.IO.dll": {},
|
||||
"ref/netcoreapp2.2/System.Linq.Expressions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Linq.Parallel.dll": {},
|
||||
"ref/netcoreapp2.2/System.Linq.Queryable.dll": {},
|
||||
"ref/netcoreapp2.2/System.Linq.dll": {},
|
||||
"ref/netcoreapp2.2/System.Memory.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Http.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.HttpListener.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Mail.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.NameResolution.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.NetworkInformation.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Ping.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Requests.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Security.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.ServicePoint.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.Sockets.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.WebClient.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.WebHeaderCollection.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.WebProxy.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.Client.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.dll": {},
|
||||
"ref/netcoreapp2.2/System.Net.dll": {},
|
||||
"ref/netcoreapp2.2/System.Numerics.Vectors.dll": {},
|
||||
"ref/netcoreapp2.2/System.Numerics.dll": {},
|
||||
"ref/netcoreapp2.2/System.ObjectModel.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.DispatchProxy.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Extensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Metadata.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.TypeExtensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Reflection.dll": {},
|
||||
"ref/netcoreapp2.2/System.Resources.Reader.dll": {},
|
||||
"ref/netcoreapp2.2/System.Resources.ResourceManager.dll": {},
|
||||
"ref/netcoreapp2.2/System.Resources.Writer.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Extensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Handles.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Loader.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Numerics.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Json.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Xml.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.dll": {},
|
||||
"ref/netcoreapp2.2/System.Runtime.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Claims.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Csp.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Encoding.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Primitives.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.Principal.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.SecureString.dll": {},
|
||||
"ref/netcoreapp2.2/System.Security.dll": {},
|
||||
"ref/netcoreapp2.2/System.ServiceModel.Web.dll": {},
|
||||
"ref/netcoreapp2.2/System.ServiceProcess.dll": {},
|
||||
"ref/netcoreapp2.2/System.Text.Encoding.Extensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Text.Encoding.dll": {},
|
||||
"ref/netcoreapp2.2/System.Text.RegularExpressions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Overlapped.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Extensions.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Parallel.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Thread.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.ThreadPool.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.Timer.dll": {},
|
||||
"ref/netcoreapp2.2/System.Threading.dll": {},
|
||||
"ref/netcoreapp2.2/System.Transactions.Local.dll": {},
|
||||
"ref/netcoreapp2.2/System.Transactions.dll": {},
|
||||
"ref/netcoreapp2.2/System.ValueTuple.dll": {},
|
||||
"ref/netcoreapp2.2/System.Web.HttpUtility.dll": {},
|
||||
"ref/netcoreapp2.2/System.Web.dll": {},
|
||||
"ref/netcoreapp2.2/System.Windows.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.Linq.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.ReaderWriter.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.Serialization.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.XDocument.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.XDocument.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.XmlDocument.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.XmlSerializer.dll": {},
|
||||
"ref/netcoreapp2.2/System.Xml.dll": {},
|
||||
"ref/netcoreapp2.2/System.dll": {},
|
||||
"ref/netcoreapp2.2/WindowsBase.dll": {},
|
||||
"ref/netcoreapp2.2/mscorlib.dll": {},
|
||||
"ref/netcoreapp2.2/netstandard.dll": {}
|
||||
},
|
||||
"build": {
|
||||
"build/netcoreapp2.2/Microsoft.NETCore.App.props": {},
|
||||
"build/netcoreapp2.2/Microsoft.NETCore.App.targets": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.DotNetAppHost/2.2.0": {
|
||||
"type": "package"
|
||||
},
|
||||
"Microsoft.NETCore.DotNetHostPolicy/2.2.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.DotNetHostResolver": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.DotNetHostResolver/2.2.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.DotNetAppHost": "2.2.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/2.2.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Targets/2.0.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
}
|
||||
},
|
||||
"NETStandard.Library/2.0.3": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
},
|
||||
"build": {
|
||||
"build/netstandard2.0/NETStandard.Library.targets": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Microsoft.NETCore.App/2.2.0": {
|
||||
"sha512": "7z5l8Jp324S8bU8+yyWeYHXUFYvKyiI5lqS1dXgTzOx1H69Qbf6df12kCKlNX45LpMfCMd4U3M6p7Rl5Zk7SLA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.app/2.2.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"Microsoft.NETCore.App.versions.txt",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"build/netcoreapp2.2/Microsoft.NETCore.App.PlatformManifest.txt",
|
||||
"build/netcoreapp2.2/Microsoft.NETCore.App.props",
|
||||
"build/netcoreapp2.2/Microsoft.NETCore.App.targets",
|
||||
"microsoft.netcore.app.2.2.0.nupkg.sha512",
|
||||
"microsoft.netcore.app.nuspec",
|
||||
"ref/netcoreapp2.2/Microsoft.CSharp.dll",
|
||||
"ref/netcoreapp2.2/Microsoft.CSharp.xml",
|
||||
"ref/netcoreapp2.2/Microsoft.VisualBasic.dll",
|
||||
"ref/netcoreapp2.2/Microsoft.VisualBasic.xml",
|
||||
"ref/netcoreapp2.2/Microsoft.Win32.Primitives.dll",
|
||||
"ref/netcoreapp2.2/Microsoft.Win32.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.AppContext.dll",
|
||||
"ref/netcoreapp2.2/System.Buffers.dll",
|
||||
"ref/netcoreapp2.2/System.Buffers.xml",
|
||||
"ref/netcoreapp2.2/System.Collections.Concurrent.dll",
|
||||
"ref/netcoreapp2.2/System.Collections.Concurrent.xml",
|
||||
"ref/netcoreapp2.2/System.Collections.Immutable.dll",
|
||||
"ref/netcoreapp2.2/System.Collections.Immutable.xml",
|
||||
"ref/netcoreapp2.2/System.Collections.NonGeneric.dll",
|
||||
"ref/netcoreapp2.2/System.Collections.NonGeneric.xml",
|
||||
"ref/netcoreapp2.2/System.Collections.Specialized.dll",
|
||||
"ref/netcoreapp2.2/System.Collections.Specialized.xml",
|
||||
"ref/netcoreapp2.2/System.Collections.dll",
|
||||
"ref/netcoreapp2.2/System.Collections.xml",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Annotations.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Annotations.xml",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.DataAnnotations.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.EventBasedAsync.xml",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.TypeConverter.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.TypeConverter.xml",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.dll",
|
||||
"ref/netcoreapp2.2/System.ComponentModel.xml",
|
||||
"ref/netcoreapp2.2/System.Configuration.dll",
|
||||
"ref/netcoreapp2.2/System.Console.dll",
|
||||
"ref/netcoreapp2.2/System.Console.xml",
|
||||
"ref/netcoreapp2.2/System.Core.dll",
|
||||
"ref/netcoreapp2.2/System.Data.Common.dll",
|
||||
"ref/netcoreapp2.2/System.Data.Common.xml",
|
||||
"ref/netcoreapp2.2/System.Data.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Contracts.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Contracts.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Debug.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Debug.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.DiagnosticSource.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.FileVersionInfo.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Process.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Process.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.StackTrace.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.StackTrace.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TextWriterTraceListener.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tools.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tools.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TraceSource.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.TraceSource.xml",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tracing.dll",
|
||||
"ref/netcoreapp2.2/System.Diagnostics.Tracing.xml",
|
||||
"ref/netcoreapp2.2/System.Drawing.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.Drawing.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.Drawing.dll",
|
||||
"ref/netcoreapp2.2/System.Dynamic.Runtime.dll",
|
||||
"ref/netcoreapp2.2/System.Globalization.Calendars.dll",
|
||||
"ref/netcoreapp2.2/System.Globalization.Extensions.dll",
|
||||
"ref/netcoreapp2.2/System.Globalization.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.Brotli.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.FileSystem.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.ZipFile.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.ZipFile.xml",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Compression.xml",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.dll",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.DriveInfo.xml",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.Watcher.dll",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.Watcher.xml",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.dll",
|
||||
"ref/netcoreapp2.2/System.IO.FileSystem.xml",
|
||||
"ref/netcoreapp2.2/System.IO.IsolatedStorage.dll",
|
||||
"ref/netcoreapp2.2/System.IO.IsolatedStorage.xml",
|
||||
"ref/netcoreapp2.2/System.IO.MemoryMappedFiles.dll",
|
||||
"ref/netcoreapp2.2/System.IO.MemoryMappedFiles.xml",
|
||||
"ref/netcoreapp2.2/System.IO.Pipes.dll",
|
||||
"ref/netcoreapp2.2/System.IO.Pipes.xml",
|
||||
"ref/netcoreapp2.2/System.IO.UnmanagedMemoryStream.dll",
|
||||
"ref/netcoreapp2.2/System.IO.dll",
|
||||
"ref/netcoreapp2.2/System.Linq.Expressions.dll",
|
||||
"ref/netcoreapp2.2/System.Linq.Expressions.xml",
|
||||
"ref/netcoreapp2.2/System.Linq.Parallel.dll",
|
||||
"ref/netcoreapp2.2/System.Linq.Parallel.xml",
|
||||
"ref/netcoreapp2.2/System.Linq.Queryable.dll",
|
||||
"ref/netcoreapp2.2/System.Linq.Queryable.xml",
|
||||
"ref/netcoreapp2.2/System.Linq.dll",
|
||||
"ref/netcoreapp2.2/System.Linq.xml",
|
||||
"ref/netcoreapp2.2/System.Memory.dll",
|
||||
"ref/netcoreapp2.2/System.Memory.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Http.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Http.xml",
|
||||
"ref/netcoreapp2.2/System.Net.HttpListener.dll",
|
||||
"ref/netcoreapp2.2/System.Net.HttpListener.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Mail.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Mail.xml",
|
||||
"ref/netcoreapp2.2/System.Net.NameResolution.dll",
|
||||
"ref/netcoreapp2.2/System.Net.NameResolution.xml",
|
||||
"ref/netcoreapp2.2/System.Net.NetworkInformation.dll",
|
||||
"ref/netcoreapp2.2/System.Net.NetworkInformation.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Ping.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Ping.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Requests.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Requests.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Security.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Security.xml",
|
||||
"ref/netcoreapp2.2/System.Net.ServicePoint.dll",
|
||||
"ref/netcoreapp2.2/System.Net.ServicePoint.xml",
|
||||
"ref/netcoreapp2.2/System.Net.Sockets.dll",
|
||||
"ref/netcoreapp2.2/System.Net.Sockets.xml",
|
||||
"ref/netcoreapp2.2/System.Net.WebClient.dll",
|
||||
"ref/netcoreapp2.2/System.Net.WebClient.xml",
|
||||
"ref/netcoreapp2.2/System.Net.WebHeaderCollection.dll",
|
||||
"ref/netcoreapp2.2/System.Net.WebHeaderCollection.xml",
|
||||
"ref/netcoreapp2.2/System.Net.WebProxy.dll",
|
||||
"ref/netcoreapp2.2/System.Net.WebProxy.xml",
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.Client.dll",
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.Client.xml",
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.dll",
|
||||
"ref/netcoreapp2.2/System.Net.WebSockets.xml",
|
||||
"ref/netcoreapp2.2/System.Net.dll",
|
||||
"ref/netcoreapp2.2/System.Numerics.Vectors.dll",
|
||||
"ref/netcoreapp2.2/System.Numerics.Vectors.xml",
|
||||
"ref/netcoreapp2.2/System.Numerics.dll",
|
||||
"ref/netcoreapp2.2/System.ObjectModel.dll",
|
||||
"ref/netcoreapp2.2/System.ObjectModel.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.DispatchProxy.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.DispatchProxy.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.ILGeneration.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.Lightweight.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Emit.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.Extensions.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Metadata.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Metadata.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.TypeExtensions.dll",
|
||||
"ref/netcoreapp2.2/System.Reflection.TypeExtensions.xml",
|
||||
"ref/netcoreapp2.2/System.Reflection.dll",
|
||||
"ref/netcoreapp2.2/System.Resources.Reader.dll",
|
||||
"ref/netcoreapp2.2/System.Resources.ResourceManager.dll",
|
||||
"ref/netcoreapp2.2/System.Resources.ResourceManager.xml",
|
||||
"ref/netcoreapp2.2/System.Resources.Writer.dll",
|
||||
"ref/netcoreapp2.2/System.Resources.Writer.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.CompilerServices.VisualC.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Extensions.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Extensions.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Handles.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.RuntimeInformation.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.WindowsRuntime.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.InteropServices.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Loader.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Loader.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Numerics.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Numerics.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Formatters.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Json.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Json.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Xml.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.Xml.xml",
|
||||
"ref/netcoreapp2.2/System.Runtime.Serialization.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.dll",
|
||||
"ref/netcoreapp2.2/System.Runtime.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Claims.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Claims.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Algorithms.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Csp.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Csp.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Encoding.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Encoding.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Primitives.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.Primitives.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Cryptography.X509Certificates.xml",
|
||||
"ref/netcoreapp2.2/System.Security.Principal.dll",
|
||||
"ref/netcoreapp2.2/System.Security.Principal.xml",
|
||||
"ref/netcoreapp2.2/System.Security.SecureString.dll",
|
||||
"ref/netcoreapp2.2/System.Security.dll",
|
||||
"ref/netcoreapp2.2/System.ServiceModel.Web.dll",
|
||||
"ref/netcoreapp2.2/System.ServiceProcess.dll",
|
||||
"ref/netcoreapp2.2/System.Text.Encoding.Extensions.dll",
|
||||
"ref/netcoreapp2.2/System.Text.Encoding.Extensions.xml",
|
||||
"ref/netcoreapp2.2/System.Text.Encoding.dll",
|
||||
"ref/netcoreapp2.2/System.Text.RegularExpressions.dll",
|
||||
"ref/netcoreapp2.2/System.Text.RegularExpressions.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Overlapped.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Overlapped.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Dataflow.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Extensions.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Extensions.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Parallel.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.Parallel.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Tasks.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Thread.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Thread.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.ThreadPool.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.ThreadPool.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.Timer.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.Timer.xml",
|
||||
"ref/netcoreapp2.2/System.Threading.dll",
|
||||
"ref/netcoreapp2.2/System.Threading.xml",
|
||||
"ref/netcoreapp2.2/System.Transactions.Local.dll",
|
||||
"ref/netcoreapp2.2/System.Transactions.Local.xml",
|
||||
"ref/netcoreapp2.2/System.Transactions.dll",
|
||||
"ref/netcoreapp2.2/System.ValueTuple.dll",
|
||||
"ref/netcoreapp2.2/System.Web.HttpUtility.dll",
|
||||
"ref/netcoreapp2.2/System.Web.HttpUtility.xml",
|
||||
"ref/netcoreapp2.2/System.Web.dll",
|
||||
"ref/netcoreapp2.2/System.Windows.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.Linq.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.ReaderWriter.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.ReaderWriter.xml",
|
||||
"ref/netcoreapp2.2/System.Xml.Serialization.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XDocument.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XDocument.xml",
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.XDocument.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.XDocument.xml",
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XPath.xml",
|
||||
"ref/netcoreapp2.2/System.Xml.XmlDocument.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XmlSerializer.dll",
|
||||
"ref/netcoreapp2.2/System.Xml.XmlSerializer.xml",
|
||||
"ref/netcoreapp2.2/System.Xml.dll",
|
||||
"ref/netcoreapp2.2/System.dll",
|
||||
"ref/netcoreapp2.2/WindowsBase.dll",
|
||||
"ref/netcoreapp2.2/mscorlib.dll",
|
||||
"ref/netcoreapp2.2/netstandard.dll",
|
||||
"runtime.json"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETCore.DotNetAppHost/2.2.0": {
|
||||
"sha512": "DrhaKInRKKvN6Ns2VNIlC7ZffLOp9THf8cO6X4fytPRJovJUbF49/zzx4WfgX9E44FMsw9hT8hrKiIqDSHvGvA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.dotnetapphost/2.2.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"microsoft.netcore.dotnetapphost.2.2.0.nupkg.sha512",
|
||||
"microsoft.netcore.dotnetapphost.nuspec",
|
||||
"runtime.json"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETCore.DotNetHostPolicy/2.2.0": {
|
||||
"sha512": "FJie7IoPZFaPgNDxhZGmDBQP/Bs5vPdfca/G2Wf9gd6LIvMYkZcibtmJwB4tcf4KXkaOYfIOo4Cl9sEPMsSzkw==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.dotnethostpolicy/2.2.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"microsoft.netcore.dotnethostpolicy.2.2.0.nupkg.sha512",
|
||||
"microsoft.netcore.dotnethostpolicy.nuspec",
|
||||
"runtime.json"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETCore.DotNetHostResolver/2.2.0": {
|
||||
"sha512": "spDm3AJYmebthDNhzY17YLPtvbc+Y1lCLVeiIH1uLJ/hZaM+40pBiPefFR8J1u66Ndkqi8ipR2tEbqPnYnjRhw==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.dotnethostresolver/2.2.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"microsoft.netcore.dotnethostresolver.2.2.0.nupkg.sha512",
|
||||
"microsoft.netcore.dotnethostresolver.nuspec",
|
||||
"runtime.json"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/2.2.0": {
|
||||
"sha512": "T/J+XZo+YheFTJh8/4uoeJDdz5qOmOMkjg6/VL8mHJ9AnP8+fmV/kcbxeXsob0irRNiChf+V0ig1MCRLp/+Kog==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.platforms/2.2.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/netstandard1.0/_._",
|
||||
"microsoft.netcore.platforms.2.2.0.nupkg.sha512",
|
||||
"microsoft.netcore.platforms.nuspec",
|
||||
"runtime.json",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.NETCore.Targets/2.0.0": {
|
||||
"sha512": "odP/tJj1z6GylFpNo7pMtbd/xQgTC3Ex2If63dRTL38bBNMwsBnJ+RceUIyHdRBC0oik/3NehYT+oECwBhIM3Q==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.targets/2.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/netstandard1.0/_._",
|
||||
"microsoft.netcore.targets.2.0.0.nupkg.sha512",
|
||||
"microsoft.netcore.targets.nuspec",
|
||||
"runtime.json",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"NETStandard.Library/2.0.3": {
|
||||
"sha512": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
|
||||
"type": "package",
|
||||
"path": "netstandard.library/2.0.3",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"build/netstandard2.0/NETStandard.Library.targets",
|
||||
"build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.AppContext.dll",
|
||||
"build/netstandard2.0/ref/System.Collections.Concurrent.dll",
|
||||
"build/netstandard2.0/ref/System.Collections.NonGeneric.dll",
|
||||
"build/netstandard2.0/ref/System.Collections.Specialized.dll",
|
||||
"build/netstandard2.0/ref/System.Collections.dll",
|
||||
"build/netstandard2.0/ref/System.ComponentModel.Composition.dll",
|
||||
"build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll",
|
||||
"build/netstandard2.0/ref/System.ComponentModel.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll",
|
||||
"build/netstandard2.0/ref/System.ComponentModel.dll",
|
||||
"build/netstandard2.0/ref/System.Console.dll",
|
||||
"build/netstandard2.0/ref/System.Core.dll",
|
||||
"build/netstandard2.0/ref/System.Data.Common.dll",
|
||||
"build/netstandard2.0/ref/System.Data.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.Contracts.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.Debug.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.Process.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.Tools.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll",
|
||||
"build/netstandard2.0/ref/System.Diagnostics.Tracing.dll",
|
||||
"build/netstandard2.0/ref/System.Drawing.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.Drawing.dll",
|
||||
"build/netstandard2.0/ref/System.Dynamic.Runtime.dll",
|
||||
"build/netstandard2.0/ref/System.Globalization.Calendars.dll",
|
||||
"build/netstandard2.0/ref/System.Globalization.Extensions.dll",
|
||||
"build/netstandard2.0/ref/System.Globalization.dll",
|
||||
"build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll",
|
||||
"build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll",
|
||||
"build/netstandard2.0/ref/System.IO.Compression.dll",
|
||||
"build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll",
|
||||
"build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll",
|
||||
"build/netstandard2.0/ref/System.IO.FileSystem.dll",
|
||||
"build/netstandard2.0/ref/System.IO.IsolatedStorage.dll",
|
||||
"build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll",
|
||||
"build/netstandard2.0/ref/System.IO.Pipes.dll",
|
||||
"build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll",
|
||||
"build/netstandard2.0/ref/System.IO.dll",
|
||||
"build/netstandard2.0/ref/System.Linq.Expressions.dll",
|
||||
"build/netstandard2.0/ref/System.Linq.Parallel.dll",
|
||||
"build/netstandard2.0/ref/System.Linq.Queryable.dll",
|
||||
"build/netstandard2.0/ref/System.Linq.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Http.dll",
|
||||
"build/netstandard2.0/ref/System.Net.NameResolution.dll",
|
||||
"build/netstandard2.0/ref/System.Net.NetworkInformation.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Ping.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Requests.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Security.dll",
|
||||
"build/netstandard2.0/ref/System.Net.Sockets.dll",
|
||||
"build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll",
|
||||
"build/netstandard2.0/ref/System.Net.WebSockets.Client.dll",
|
||||
"build/netstandard2.0/ref/System.Net.WebSockets.dll",
|
||||
"build/netstandard2.0/ref/System.Net.dll",
|
||||
"build/netstandard2.0/ref/System.Numerics.dll",
|
||||
"build/netstandard2.0/ref/System.ObjectModel.dll",
|
||||
"build/netstandard2.0/ref/System.Reflection.Extensions.dll",
|
||||
"build/netstandard2.0/ref/System.Reflection.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.Reflection.dll",
|
||||
"build/netstandard2.0/ref/System.Resources.Reader.dll",
|
||||
"build/netstandard2.0/ref/System.Resources.ResourceManager.dll",
|
||||
"build/netstandard2.0/ref/System.Resources.Writer.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Extensions.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Handles.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.InteropServices.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Numerics.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.Serialization.dll",
|
||||
"build/netstandard2.0/ref/System.Runtime.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Claims.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll",
|
||||
"build/netstandard2.0/ref/System.Security.Principal.dll",
|
||||
"build/netstandard2.0/ref/System.Security.SecureString.dll",
|
||||
"build/netstandard2.0/ref/System.ServiceModel.Web.dll",
|
||||
"build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll",
|
||||
"build/netstandard2.0/ref/System.Text.Encoding.dll",
|
||||
"build/netstandard2.0/ref/System.Text.RegularExpressions.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.Overlapped.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.Tasks.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.Thread.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.ThreadPool.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.Timer.dll",
|
||||
"build/netstandard2.0/ref/System.Threading.dll",
|
||||
"build/netstandard2.0/ref/System.Transactions.dll",
|
||||
"build/netstandard2.0/ref/System.ValueTuple.dll",
|
||||
"build/netstandard2.0/ref/System.Web.dll",
|
||||
"build/netstandard2.0/ref/System.Windows.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.Linq.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.ReaderWriter.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.Serialization.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.XDocument.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.XPath.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.XmlDocument.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.XmlSerializer.dll",
|
||||
"build/netstandard2.0/ref/System.Xml.dll",
|
||||
"build/netstandard2.0/ref/System.dll",
|
||||
"build/netstandard2.0/ref/mscorlib.dll",
|
||||
"build/netstandard2.0/ref/netstandard.dll",
|
||||
"build/netstandard2.0/ref/netstandard.xml",
|
||||
"lib/netstandard1.0/_._",
|
||||
"netstandard.library.2.0.3.nupkg.sha512",
|
||||
"netstandard.library.nuspec"
|
||||
]
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
".NETCoreApp,Version=v2.2": [
|
||||
"Microsoft.NETCore.App >= 2.2.0"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"/Users/ben/.nuget/packages/": {},
|
||||
"/usr/local/share/dotnet/sdk/NuGetFallbackFolder": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/csharp.csproj",
|
||||
"projectName": "csharp",
|
||||
"projectPath": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/csharp.csproj",
|
||||
"packagesPath": "/Users/ben/.nuget/packages/",
|
||||
"outputPath": "/Users/ben/.vim/bundle/vimspector/support/test/csharp/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"/usr/local/share/dotnet/sdk/NuGetFallbackFolder"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"/Users/ben/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"netcoreapp2.2"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"netcoreapp2.2": {
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"netcoreapp2.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[2.2.0, )",
|
||||
"autoReferenced": true
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/3.1.402/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"configurations": {
|
||||
"run-cmd": {
|
||||
"adapter": "vscode-go",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/cmd/namestartswithvowel/main.go",
|
||||
"mode": "debug",
|
||||
"dlvToolPath": "$HOME/go/bin/dlv",
|
||||
"dlvLoadConfig": {
|
||||
"maxArrayValues": 1000,
|
||||
"maxStringLen": 1000
|
||||
}
|
||||
}
|
||||
},
|
||||
"test-current-file": {
|
||||
"adapter": "vscode-go",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"mode": "test",
|
||||
"program": "${fileDirname}",
|
||||
"cwd": "${fileDirname}",
|
||||
"dlvToolPath": "$GOPATH/bin/dlv",
|
||||
"env": {},
|
||||
"args": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
# Purpose
|
||||
|
||||
This example comes with two example vimspector configs for the Go programming language.
|
||||
|
||||
1) `run-cmd` will launch the main programme under `cmd/namestartswithvowel`.
|
||||
1) `test-current-file` will run the tests in the current file in debug mode.
|
||||
|
||||
## Example use-cases
|
||||
|
||||
### run-cmd
|
||||
|
||||
* Open `cmd/namestartswithvowel/main.go`
|
||||
* Add a breakpoint somewhere within the programme
|
||||
* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping)
|
||||
* Select the first launch configuration (`1: run-cmd`)
|
||||
|
||||
### test-current-file
|
||||
|
||||
* Open `internal/vowels/vowels_test.go`
|
||||
* Add a breakpoint somewhere within the test
|
||||
* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping)
|
||||
* Select the second launch configuration (`2: test-current-file`)
|
||||
|
||||
## Additional Configuration
|
||||
|
||||
There are two additional configuration options specified under `run-cmd`; these parameters configure the maximum string/array size to be shown while debugging.
|
||||
|
||||
```
|
||||
"dlvLoadConfig": {
|
||||
"maxArrayValues": 1000,
|
||||
"maxStringLen": 1000
|
||||
}
|
||||
```
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"example.com/internal/vowels"
|
||||
)
|
||||
|
||||
func main() {
|
||||
names := []string{"Simon", "Bob", "Jennifer", "Amy", "Duke", "Elizabeth"}
|
||||
|
||||
for _, n := range names {
|
||||
if vowels.NameStartsWithVowel(n) {
|
||||
fmt.Printf("%s starts with a vowel!\n", n)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("%s does not start with a vowel!\n", n)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module example.com
|
||||
|
||||
go 1.16
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
package vowels
|
||||
|
||||
import "strings"
|
||||
|
||||
func NameStartsWithVowel(name string) bool {
|
||||
s := strings.Split(strings.ToLower(name), "")
|
||||
|
||||
return s[0] == "a" || s[0] == "e" || s[0] == "i" || s[0] == "o" || s[0] == "u"
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
package vowels
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNameStartsWithVowel(t *testing.T) {
|
||||
testCases := []struct {
|
||||
input string
|
||||
expectedOutput bool
|
||||
}{
|
||||
{
|
||||
input: "Simon",
|
||||
expectedOutput: false,
|
||||
},
|
||||
{
|
||||
input: "Andy",
|
||||
expectedOutput: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range testCases {
|
||||
t.Run(fmt.Sprintf("%s should product %t", tt.input, tt.expectedOutput), func(t *testing.T) {
|
||||
out := NameStartsWithVowel(tt.input)
|
||||
if out != tt.expectedOutput {
|
||||
t.Errorf("%s produced %t, when %t was expected", tt.input, out, tt.expectedOutput)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
43
support/test/python/multiprocessing/.vimspector.json
Normal file
43
support/test/python/multiprocessing/.vimspector.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json",
|
||||
"configurations": {
|
||||
"run": {
|
||||
"adapter": "debugpy",
|
||||
"configuration": {
|
||||
"request": "launch",
|
||||
"type": "python",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"program": "${file}",
|
||||
"stopOnEntry": true,
|
||||
"console": "integratedTerminal",
|
||||
"subProcess": true
|
||||
},
|
||||
"breakpoints": {
|
||||
"exception": {
|
||||
"raised": "N",
|
||||
"uncaught": "Y",
|
||||
"userUnhandled": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"attach": {
|
||||
"adapter": "multi-session",
|
||||
"configuration": {
|
||||
"request": "attach",
|
||||
"type": "python",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"program": "${file}",
|
||||
"stopOnEntry": true,
|
||||
"console": "integratedTerminal",
|
||||
"subProcess": true
|
||||
},
|
||||
"breakpoints": {
|
||||
"exception": {
|
||||
"raised": "N",
|
||||
"uncaught": "Y",
|
||||
"userUnhandled": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
support/test/python/multiprocessing/multiprocessing_test.py
Normal file
18
support/test/python/multiprocessing/multiprocessing_test.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import time
|
||||
import multiprocessing as mp
|
||||
|
||||
|
||||
def First():
|
||||
for i in range( 10 ):
|
||||
print( f"in first x {i}" )
|
||||
time.sleep( 0.1 )
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print( "main" )
|
||||
p1 = mp.Process( target=First )
|
||||
|
||||
p1.start()
|
||||
p1.join()
|
||||
|
||||
print( "Done" )
|
||||
|
|
@ -6,8 +6,9 @@ import os
|
|||
def Main():
|
||||
print( os.environ.get( 'Something', 'ERROR' ) )
|
||||
print( os.environ.get( 'SomethingElse', 'ERROR' ) )
|
||||
print( os.environ.get( 'PATH', 'ERROR' ) )
|
||||
|
||||
for k, v in os.environ:
|
||||
for k, v in os.environ.items():
|
||||
print( f'{ k } = "{ v }"' )
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -70,12 +70,6 @@ RUN mkdir -p /home/linuxbrew/.linuxbrew &&\
|
|||
|
||||
RUN /home/linuxbrew/.linuxbrew/bin/brew install golang
|
||||
|
||||
# dotnet
|
||||
RUN curl -sSL https://dot.net/v1/dotnet-install.sh \
|
||||
| bash /dev/stdin --channel LTS --install-dir /usr/share/dotnet && \
|
||||
update-alternatives --install /usr/bin/dotnet dotnet \
|
||||
/usr/share/dotnet/dotnet 1
|
||||
|
||||
# clean up
|
||||
RUN /home/linuxbrew/.linuxbrew/bin/brew cleanup && \
|
||||
rm -rf ~/.cache && \
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ function Test_Get_Configurations()
|
|||
let configs = vimspector#GetConfigurations()
|
||||
call assert_equal([
|
||||
\ 'launch - netcoredbg',
|
||||
\ 'launch - netcoredbg - with debug log',
|
||||
\ 'launch - mono',
|
||||
\ ], configs)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
function! SetUp()
|
||||
call vimspector#test#setup#SetUpWithMappings( v:none )
|
||||
endfunction
|
||||
|
||||
function! ClearDown()
|
||||
call vimspector#test#setup#ClearDown()
|
||||
endfunction
|
||||
|
||||
function! SetUp_Test_Go_Simple()
|
||||
let g:vimspector_enable_mappings = 'HUMAN'
|
||||
endfunction
|
||||
|
||||
function! Test_CSharp_Simple()
|
||||
let fn='Program.cs'
|
||||
lcd ../support/test/csharp
|
||||
exe 'edit ' . fn
|
||||
|
||||
call vimspector#SetLineBreakpoint( fn, 31 )
|
||||
call vimspector#LaunchWithSettings( {
|
||||
\ 'configuration': 'launch - netcoredbg'
|
||||
\ } )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 31, 7 )
|
||||
call WaitForAssert( {->
|
||||
\ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 31 )
|
||||
\ } )
|
||||
|
||||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 32, 12 )
|
||||
call WaitForAssert( {->
|
||||
\ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 32 )
|
||||
\ } )
|
||||
|
||||
call vimspector#test#setup#Reset()
|
||||
|
||||
lcd -
|
||||
%bwipeout!
|
||||
endfunction
|
||||
|
||||
|
||||
function! Test_Run_To_Cursor()
|
||||
let fn='Program.cs'
|
||||
lcd ../support/test/csharp
|
||||
exe 'edit ' . fn
|
||||
|
||||
call vimspector#SetLineBreakpoint( fn, 31 )
|
||||
call vimspector#LaunchWithSettings( {
|
||||
\ 'configuration': 'launch - netcoredbg'
|
||||
\ } )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 31, 7 )
|
||||
call WaitForAssert( {->
|
||||
\ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 31 )
|
||||
\ } )
|
||||
|
||||
call cursor( 33, 1 )
|
||||
call vimspector#RunToCursor()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 33, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 33 )
|
||||
\ } )
|
||||
|
||||
call vimspector#test#setup#Reset()
|
||||
lcd -
|
||||
%bwipeout!
|
||||
endfunction
|
||||
|
||||
|
|
@ -107,3 +107,46 @@ function! Test_Python_Remote_Attach()
|
|||
lcd -
|
||||
%bwipeout!
|
||||
endfunction
|
||||
|
||||
function! SetUp_Test_Python_Remote_Attach_With_Run()
|
||||
let g:vimspector_enable_mappings = 'HUMAN'
|
||||
endfunction
|
||||
|
||||
function! Test_Python_Remote_Attach_With_Run()
|
||||
lcd ../support/test/python/simple_python
|
||||
let fn='main.py'
|
||||
exe 'edit ' . fn
|
||||
|
||||
call setpos( '.', [ 0, 6, 1 ] )
|
||||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 6, 1 )
|
||||
call vimspector#test#signs#AssertSignGroupEmptyAtLine( 'VimspectorBP', 6 )
|
||||
|
||||
" Add the breakpoint
|
||||
call feedkeys( "\<F9>", 'xt' )
|
||||
call vimspector#test#signs#AssertSignGroupSingletonAtLine( 'VimspectorBP',
|
||||
\ 6,
|
||||
\ 'vimspectorBP',
|
||||
\ 9 )
|
||||
|
||||
call setpos( '.', [ 0, 1, 1 ] )
|
||||
|
||||
" Here we go. Start Debugging (note will wait up to 10s for the script to do
|
||||
" its virtualenv thing)
|
||||
call vimspector#LaunchWithSettings( {
|
||||
\ 'configuration': 'attach-run',
|
||||
\ } )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 6, 1 )
|
||||
|
||||
" Step
|
||||
call feedkeys( "\<F10>", 'xt' )
|
||||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 7, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ vimspector#test#signs#AssertPCIsAtLineInBuffer( fn, 7 )
|
||||
\ } )
|
||||
|
||||
call vimspector#test#setup#Reset()
|
||||
lcd -
|
||||
%bwipeout!
|
||||
endfunction
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ function! ThisTestIsFlaky()
|
|||
let g:test_is_flaky = v:true
|
||||
endfunction
|
||||
|
||||
function! AssertMatchList( expected, actual ) abort
|
||||
function! AssertMatchist( expected, actual ) abort
|
||||
let ret = assert_equal( len( a:expected ), len( a:actual ) )
|
||||
let len = min( [ len( a:expected ), len( a:actual ) ] )
|
||||
let idx = 0
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call cursor( 1, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -45,7 +45,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call cursor( 1, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -56,7 +56,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
\ )
|
||||
\ } )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -70,7 +70,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call cursor( 1, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -81,7 +81,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
\ )
|
||||
\ } )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -95,7 +95,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call cursor( 1, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -106,7 +106,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
\ )
|
||||
\ } )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -121,7 +121,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call cursor( 1, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -132,7 +132,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
\ )
|
||||
\ } )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -146,7 +146,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
" So we break out of the loop
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( notify_l )
|
||||
|
|
@ -157,7 +157,7 @@ function! Test_Multiple_Threads_Continue()
|
|||
\ )
|
||||
\ } )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -192,7 +192,7 @@ function! Test_Multiple_Threads_Step()
|
|||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread [0-9]\+: .* (paused)',
|
||||
\ ' .*: .*@threads.cpp:' . string( thread_l )
|
||||
|
|
@ -205,7 +205,7 @@ function! Test_Multiple_Threads_Step()
|
|||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -218,7 +218,7 @@ function! Test_Multiple_Threads_Step()
|
|||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ ],
|
||||
|
|
@ -230,7 +230,7 @@ function! Test_Multiple_Threads_Step()
|
|||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -244,7 +244,7 @@ function! Test_Multiple_Threads_Step()
|
|||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -257,7 +257,7 @@ function! Test_Multiple_Threads_Step()
|
|||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -273,7 +273,7 @@ function! Test_Multiple_Threads_Step()
|
|||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -287,7 +287,7 @@ function! Test_Multiple_Threads_Step()
|
|||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -304,7 +304,7 @@ function! Test_Multiple_Threads_Step()
|
|||
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -319,7 +319,7 @@ function! Test_Multiple_Threads_Step()
|
|||
call vimspector#StepOver()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -338,7 +338,7 @@ function! Test_Multiple_Threads_Step()
|
|||
" So we break out of the loop
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
\ '+ Thread [0-9]\+: .* (paused)',
|
||||
|
|
@ -366,7 +366,7 @@ function! Test_UpDownStack()
|
|||
call vimspector#LaunchWithSettings( { 'configuration': 'run' } )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -379,25 +379,11 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 2,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
call vimspector#DownFrame()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -410,26 +396,11 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 2,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
|
||||
call vimspector#UpFrame()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -442,26 +413,11 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 3,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
|
||||
call feedkeys( "\<Plug>VimspectorUpFrame", 'x' )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -474,26 +430,11 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 4,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
|
||||
call feedkeys( "\<Plug>VimspectorDownFrame", 'x' )
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -506,26 +447,11 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 3,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
|
||||
call vimspector#DownFrame()
|
||||
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Thread 1: MainThread (paused)',
|
||||
\ ' 2: DoSomething@main.py:15',
|
||||
|
|
@ -538,21 +464,6 @@ function! Test_UpDownStack()
|
|||
\ '$' )
|
||||
\ )
|
||||
\ } )
|
||||
call win_gotoid( g:vimspector_session_windows.stack_trace )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 1,
|
||||
\ 'vimspectorCurrentThread',
|
||||
\ 200 ) } )
|
||||
call WaitForAssert( { ->
|
||||
\ vimspector#test#signs#AssertSignGroupSingletonAtLine(
|
||||
\ 'VimspectorStackTrace',
|
||||
\ 2,
|
||||
\ 'vimspectorCurrentFrame',
|
||||
\ 200 ) } )
|
||||
wincmd w
|
||||
|
||||
|
||||
|
||||
call vimspector#ClearBreakpoints()
|
||||
|
|
|
|||
8
tests/testdata/cpp/simple/.vimspector.json
vendored
8
tests/testdata/cpp/simple/.vimspector.json
vendored
|
|
@ -12,7 +12,7 @@
|
|||
"externalConsole": false,
|
||||
"stopAtEntry": true,
|
||||
"stopOnEntry": true,
|
||||
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
||||
},
|
||||
"breakpoints": {
|
||||
"exception": {
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
"externalConsole": false,
|
||||
"stopAtEntry": false,
|
||||
"stopOnEntry": false,
|
||||
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
||||
},
|
||||
"breakpoints": {
|
||||
"exception": {
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
"externalConsole": false,
|
||||
"stopAtEntry": false,
|
||||
"stopOnEntry": false,
|
||||
"MIMode": "${VIMSPECTOR_MIMODE}"
|
||||
"MImode": "${VIMSPECTOR_MIMODE}"
|
||||
},
|
||||
"breakpoints": {
|
||||
"exception": {
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
"configuration": {
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/${fileBasenameNoExtension}",
|
||||
"MIMode": "${VIMSPECTOR_MIMODE}",
|
||||
"MImode": "${VIMSPECTOR_MIMODE}",
|
||||
"externalConsole": false,
|
||||
"args": [
|
||||
"CALCULATED_LIST", "${CALCULATED_LIST}",
|
||||
|
|
|
|||
|
|
@ -194,7 +194,6 @@ function! Test_ExpandVariables()
|
|||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' *+ t (Test): {...}',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -212,7 +211,7 @@ function! Test_ExpandVariables()
|
|||
call feedkeys( "\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' \*- t (Test): {...}',
|
||||
|
|
@ -220,7 +219,6 @@ function! Test_ExpandVariables()
|
|||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -231,7 +229,7 @@ function! Test_ExpandVariables()
|
|||
" Step - stays expanded
|
||||
call vimspector#StepOver()
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' - t (Test): {...}',
|
||||
|
|
@ -239,7 +237,6 @@ function! Test_ExpandVariables()
|
|||
\ ' - c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' - fffff (float): 0',
|
||||
\ ' + another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -256,7 +253,6 @@ function! Test_ExpandVariables()
|
|||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' + t (Test): {...}',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -271,7 +267,6 @@ function! Test_ExpandVariables()
|
|||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' + t (Test): {...}',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -283,7 +278,7 @@ function! Test_ExpandVariables()
|
|||
call setpos( '.', [ 0, 2, 1 ] )
|
||||
call feedkeys( "\<CR>", 'xt' )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' - t (Test): {...}',
|
||||
|
|
@ -291,7 +286,6 @@ function! Test_ExpandVariables()
|
|||
\ ' \*- c (char): 99 ''c''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -308,7 +302,6 @@ function! Test_ExpandVariables()
|
|||
\ assert_equal(
|
||||
\ [
|
||||
\ '+ Scope: Locals',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -323,7 +316,6 @@ function! Test_ExpandVariables()
|
|||
\ assert_equal(
|
||||
\ [
|
||||
\ '+ Scope: Locals',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -339,7 +331,6 @@ function! Test_ExpandVariables()
|
|||
\ assert_equal(
|
||||
\ [
|
||||
\ '+ Scope: Locals',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -387,7 +378,7 @@ function! Test_ExpandWatch()
|
|||
call feedkeys( "\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -406,7 +397,7 @@ function! Test_ExpandWatch()
|
|||
" Step - stays expanded
|
||||
call vimspector#StepOver()
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -458,7 +449,7 @@ function! Test_ExpandWatch()
|
|||
call setpos( '.', [ 0, 3, 1 ] )
|
||||
call feedkeys( "\<CR>", 'xt' )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -616,7 +607,7 @@ function! Test_EvaluateFailure()
|
|||
" Add a wtch
|
||||
call vimspector#AddWatch( 'test' )
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: test',
|
||||
|
|
@ -667,7 +658,7 @@ function! Test_VariableEval()
|
|||
\ } )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -699,7 +690,7 @@ function! Test_VariableEval()
|
|||
\ } )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -733,7 +724,7 @@ function! Test_VariableEval()
|
|||
\ } )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Evaluation error',
|
||||
\ ],
|
||||
|
|
@ -777,7 +768,7 @@ function! Test_VariableEvalExpand()
|
|||
\ } )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -795,7 +786,7 @@ function! Test_VariableEvalExpand()
|
|||
call feedkeys( "jjjj\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -815,7 +806,7 @@ function! Test_VariableEvalExpand()
|
|||
call feedkeys( "\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -855,7 +846,6 @@ function! Test_SetVariableValue_Local()
|
|||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' *+ t (Test): {...}',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -873,7 +863,7 @@ function! Test_SetVariableValue_Local()
|
|||
call feedkeys( "\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' \*- t (Test): {...}',
|
||||
|
|
@ -881,7 +871,6 @@ function! Test_SetVariableValue_Local()
|
|||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -900,7 +889,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
|
|||
EOF
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' \*- t (Test): {...}',
|
||||
|
|
@ -908,7 +897,6 @@ EOF
|
|||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -920,7 +908,7 @@ EOF
|
|||
call vimspector#SetVariableValue( '1234' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' \*- t (Test): {...}',
|
||||
|
|
@ -928,7 +916,6 @@ EOF
|
|||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -940,7 +927,7 @@ EOF
|
|||
call vimspector#SetVariableValue( 'this is invalid' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '- Scope: Locals',
|
||||
\ ' \*- t (Test): {...}',
|
||||
|
|
@ -948,7 +935,6 @@ EOF
|
|||
\ ' \*- c (char): 0 ''\\0\{1,3}''',
|
||||
\ ' \*- fffff (float): 0',
|
||||
\ ' \*+ another_test (AnotherTest):\( {...}\)\?',
|
||||
\ '+ Scope: Registers',
|
||||
\ ],
|
||||
\ getbufline( winbufnr( g:vimspector_session_windows.variables ),
|
||||
\ 1,
|
||||
|
|
@ -997,7 +983,7 @@ function! Test_SetVariableValue_Watch()
|
|||
call feedkeys( "\<CR>", 'xt' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -1026,7 +1012,7 @@ EOF
|
|||
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -1046,7 +1032,7 @@ EOF
|
|||
call vimspector#SetVariableValue( '1234' )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ 'Watches: ----',
|
||||
\ 'Expression: t',
|
||||
|
|
@ -1089,7 +1075,7 @@ function! Test_SetVariableValue_Balloon()
|
|||
\ } )
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
@ -1116,7 +1102,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
|
|||
EOF
|
||||
|
||||
call WaitForAssert( {->
|
||||
\ AssertMatchList(
|
||||
\ AssertMatchist(
|
||||
\ [
|
||||
\ '{...}',
|
||||
\ ' - i: 0',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue