Compare commits

..

4 commits

Author SHA1 Message Date
Ben Jackson
d12c0897f2 Udpate remote examples for docker/cpptools 2021-05-04 21:31:42 +01:00
Ben Jackson
e7fb49f03d Start to add a test, but it's hitting deleting buffer that's in use [NULL]... 2021-05-04 21:31:42 +01:00
Ben Jackson
f003d66d35 Don't crash if the custom handler can't be loaded 2021-05-04 21:31:42 +01:00
Ben Jackson
7a8f479f66 Reset when closing the tab
You can now kill vimspector sesssion by closing the vimspector session
tab, rather than this causing an ugly backtrace
2021-05-04 21:31:42 +01:00
33 changed files with 221 additions and 558 deletions

View file

@ -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 * Version of Vimspector: (e.g. output of `git rev-parse HEAD` if cloned or the
name of the tarball used to install otherwise) name of the tarball used to install otherwise)
* Output of `:VimspectorDebugInfo`
```
paste here
```
* Output of `vim --version` or `nvim --version` * Output of `vim --version` or `nvim --version`
``` ```

View file

@ -13,7 +13,7 @@ defaults:
jobs: jobs:
PythonLint: PythonLint:
runs-on: ubuntu-18.04 runs-on: ubuntu-16.04
container: 'puremourning/vimspector:test' container: 'puremourning/vimspector:test'
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -22,7 +22,7 @@ jobs:
- name: 'Run flake8' - name: 'Run flake8'
run: '$HOME/.local/bin/flake8 python3/ *.py' run: '$HOME/.local/bin/flake8 python3/ *.py'
VimscriptLint: VimscriptLint:
runs-on: 'ubuntu-18.04' runs-on: 'ubuntu-16.04'
container: 'puremourning/vimspector:test' container: 'puremourning/vimspector:test'
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -32,7 +32,7 @@ jobs:
run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/ run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/
Linux: Linux:
runs-on: 'ubuntu-18.04' runs-on: 'ubuntu-16.04'
container: container:
image: 'puremourning/vimspector:test' image: 'puremourning/vimspector:test'
options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
@ -156,7 +156,7 @@ jobs:
# SSH_PASS: ${{ secrets.SSH_PASS }} # [V]imspector # SSH_PASS: ${{ secrets.SSH_PASS }} # [V]imspector
PublishRelease: PublishRelease:
runs-on: 'ubuntu-18.04' runs-on: 'ubuntu-16.04'
needs: needs:
- Linux - Linux
- MacOS - MacOS

View file

@ -61,10 +61,9 @@ For detailed explanation of the `.vimspector.json` format, see the
* [Closing debugger](#closing-debugger) * [Closing debugger](#closing-debugger)
* [Terminate debuggee](#terminate-debuggee) * [Terminate debuggee](#terminate-debuggee)
* [Debug profile configuration](#debug-profile-configuration) * [Debug profile configuration](#debug-profile-configuration)
* [C, C++, Rust, etc.](#c-c-rust-etc) * [C, C , Rust, etc.](#c-c-rust-etc)
* [Data visualization / pretty printing](#data-visualization--pretty-printing) * [C Remote debugging](#c-remote-debugging)
* [C++ Remote debugging](#c-remote-debugging) * [C Remote launch and attach](#c-remote-launch-and-attach)
* [C++ Remote launch and attach](#c-remote-launch-and-attach)
* [Rust](#rust) * [Rust](#rust)
* [Python](#python) * [Python](#python)
* [Python Remote Debugging](#python-remote-debugging) * [Python Remote Debugging](#python-remote-debugging)
@ -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: are example projects for a number of languages in `support/test`, including:
* Python (`support/test/python/simple_python`) * Python (`support/test/python/simple_python`)
* Go (`support/test/go/hello_world` and `support/test/go/name-starts-with-vowel`) * Go (`support/test/go/hello_world`)
* Nodejs (`support/test/node/simple`) * Nodejs (`support/test/node/simple`)
* Chrome (`support/test/chrome/`) * Chrome (`support/test/chrome/`)
* etc. * etc.
@ -1008,8 +1007,6 @@ be changed manually to "switch to" that thread.
to set the "focussed" thread to the currently selected one. If the selected to set the "focussed" thread to the currently selected one. If the selected
line is a stack frame, set the focussed thread to the thread of that frame and line is a stack frame, set the focussed thread to the thread of that frame and
jump to that frame in the code window. jump to that frame in the code window.
* The current frame when a breakpoint is hit or if manuall jumping is also
highlighted.
![stack trace](https://puremourning.github.io/vimspector-web/img/vimspector-callstack-window.png) ![stack trace](https://puremourning.github.io/vimspector-web/img/vimspector-callstack-window.png)
@ -1071,8 +1068,6 @@ information when something goes wrong that's not a Vim traceback.
If you just want to see the Vimspector log file, use `:VimspectorToggleLog`, If you just want to see the Vimspector log file, use `:VimspectorToggleLog`,
which will tail it in a little window (doesn't work on Windows). which will tail it in a little window (doesn't work on Windows).
You can see some debugging info with `:VimspectorDebugInfo`
## Closing debugger ## Closing debugger
To close the debugger, use: To close the debugger, use:
@ -1177,38 +1172,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 ### C++ Remote debugging
The cpptools documentation describes how to attach cpptools to gdbserver using The cpptools documentation describes how to attach cpptools to gdbserver using
@ -1401,8 +1364,6 @@ Requires:
* [Delve][delve-install] installed, e.g. `go get -u github.com/go-delve/delve/cmd/dlv` * [Delve][delve-install] installed, e.g. `go get -u github.com/go-delve/delve/cmd/dlv`
* Delve to be in your PATH, or specify the `dlvToolPath` launch option * Delve to be in your PATH, or specify the `dlvToolPath` launch option
NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md) rather than the "built-in" DAP support in Delve. You can track https://github.com/puremourning/vimspector/issues/186 for that.
```json ```json
{ {
"configurations": { "configurations": {
@ -1420,7 +1381,7 @@ NOTE: Vimspector uses the ["legacy" vscode-go debug adapter](https://github.com/
``` ```
See the vscode-go docs for 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 ## PHP
@ -1739,26 +1700,22 @@ Vimsector uses them, they will not be replaced. So to customise the signs,
define them in your `vimrc`. define them in your `vimrc`.
| Sign | Description | Priority | | Sign | Description | Priority |
|---------------------------|-----------------------------------------|----------| |------------------------|-------------------------------------|----------|
| `vimspectorBP` | Line breakpoint | 9 | | `vimspectorBP` | Line breakpoint | 9 |
| `vimspectorBPCond` | Conditional line breakpoint | 9 | | `vimspectorBPCond` | Conditional line breakpoint | 9 |
| `vimspectorBPDisabled` | Disabled breakpoint | 9 | | `vimspectorBPDisabled` | Disabled breakpoint | 9 |
| `vimspectorPC` | Program counter (i.e. current line) | 200 | | `vimspectorPC` | Program counter (i.e. current line) | 200 |
| `vimspectorPCBP` | Program counter and breakpoint | 200 | | `vimspectorPCBP` | Program counter and breakpoint | 200 |
| `vimspectorCurrentThread` | Focussed thread in stack trace view | 200 |
| `vimspectorCurrentFrame` | Current stack frame in stack trace view | 200 |
The default symbols are the equivalent of something like the following: The default symbols are the equivalent of something like the following:
```viml ```viml
sign define vimspectorBP text=\ ● texthl=WarningMsg sign define vimspectorBP text=\ ● texthl=WarningMsg
sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg sign define vimspectorBPCond text=\ ◆ texthl=WarningMsg
sign define vimspectorBPDisabled text=\ ● texthl=LineNr sign define vimspectorBPDisabled text=\ ● texthl=LineNr
sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine sign define vimspectorPC text=\ ▶ texthl=MatchParen linehl=CursorLine
sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine sign define vimspectorPCBP text=●▶ texthl=MatchParen linehl=CursorLine
sign define vimspectorCurrentThread text=▶ texthl=MatchParen linehl=CursorLine
sign define vimspectorCurrentFrame text=▶ texthl=Special linehl=CursorLine
``` ```
If the signs don't display properly, your font probably doesn't contain these If the signs don't display properly, your font probably doesn't contain these
@ -1766,13 +1723,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: example, you could put this in your `vimrc` to use some simple ASCII symbols:
```viml ```viml
sign define vimspectorBP text=o texthl=WarningMsg sign define vimspectorBP text=o texthl=WarningMsg
sign define vimspectorBPCond text=o? texthl=WarningMsg sign define vimspectorBPCond text=o? texthl=WarningMsg
sign define vimspectorBPDisabled text=o! texthl=LineNr sign define vimspectorBPDisabled text=o! texthl=LineNr
sign define vimspectorPC text=\ > texthl=MatchParen sign define vimspectorPC text=\ > texthl=MatchParen
sign define vimspectorPCBP text=o> texthl=MatchParen sign define vimspectorPCBP text=o> texthl=MatchParen
sign define vimspectorCurrentThread text=> texthl=MatchParen
sign define vimspectorCurrentFrame text=> texthl=Special
``` ```
## Sign priority ## Sign priority

View file

@ -557,14 +557,6 @@ function! vimspector#ShowEvalBalloon( is_visual ) abort
\ . '", 0 )' ) \ . '", 0 )' )
endfunction endfunction
function! vimspector#PrintDebugInfo() abort
if !s:Enabled()
return
endif
py3 _vimspector_session.PrintDebugInfo()
endfunction
" Boilerplate {{{ " Boilerplate {{{
let &cpoptions=s:save_cpo let &cpoptions=s:save_cpo

View file

@ -47,6 +47,16 @@ function! vimspector#internal#state#GetAPIPrefix() abort
return s:prefix return s:prefix
endfunction endfunction
function! vimspector#internal#state#TabClosed() abort
py3 << EOF
if ( '_vimspector_session' in globals() and _vimspector_session
and not _vimspector_session._HasUI() ):
_vimspector_session.Reset( interactive = False )
EOF
endfunction
" Boilerplate {{{ " Boilerplate {{{
let &cpoptions=s:save_cpo let &cpoptions=s:save_cpo
unlet s:save_cpo unlet s:save_cpo

View file

@ -155,7 +155,9 @@ if ! has( 'gui_running' )
" å is the right-option+q " å is the right-option+q
nnoremap <buffer> å :cfirst<CR> nnoremap <buffer> å :cfirst<CR>
" å is the right-option+a " å is the right-option+a
nnoremap <buffer> œ :FuncLine<CR> nnoremap <buffer> œ :cnext<CR>
" å is the right-option+f
nnoremap <buffer> ƒ :FuncLine<CR>
" Ω is the right-option+z " Ω is the right-option+z
nnoremap <buffer> Ω :cprevious<CR> nnoremap <buffer> Ω :cprevious<CR>
endif endif

View file

@ -7,7 +7,7 @@ GEM
minitest (~> 5.1) minitest (~> 5.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2) zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.0) addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0) public_suffix (>= 2.0.2, < 5.0)
coffee-script (2.4.1) coffee-script (2.4.1)
coffee-script-source coffee-script-source
@ -205,14 +205,14 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6) mercenary (0.3.6)
mini_portile2 (2.5.1) mini_portile2 (2.5.0)
minima (2.5.1) minima (2.5.1)
jekyll (>= 3.5, < 5.0) jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9) jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1) jekyll-seo-tag (~> 2.1)
minitest (5.14.4) minitest (5.14.4)
multipart-post (2.1.1) multipart-post (2.1.1)
nokogiri (1.11.5) nokogiri (1.11.3)
mini_portile2 (~> 2.5.0) mini_portile2 (~> 2.5.0)
racc (~> 1.4) racc (~> 1.4)
octokit (4.20.0) octokit (4.20.0)

View file

@ -722,7 +722,7 @@ Vimspector then orchestrates the various tools to set you up.
"variables": { "variables": {
// Just an example of how to specify a variable manually rather than // Just an example of how to specify a variable manually rather than
// vimspector asking for input from the user // vimspector asking for input from the user
"ServiceName": "${fileBasenameNoExtension}" "ServiceName": "${fileBasenameNoExtention}"
}, },
"adapter": "python-remote", "adapter": "python-remote",
@ -765,6 +765,8 @@ and have to tell cpptools a few more options.
"remote": { "remote": {
"host": "${host}", "host": "${host}",
"account": "${account}", "account": "${account}",
// or, alternatively "container": "${ContainerID}"
"runCommand": [ "runCommand": [
"gdbserver", "gdbserver",
"--once", "--once",
@ -772,14 +774,19 @@ and have to tell cpptools a few more options.
"--disable-randomisation", "--disable-randomisation",
"0.0.0.0:${port}", "0.0.0.0:${port}",
"%CMD%" "%CMD%"
} },
"delay": "1000m" // optional
}, },
"attach": { "attach": {
"remote": { "remote": {
"host": "${host}", "host": "${host}",
"account": "${account}", "account": "${account}",
// or, alternatively "container": "${ContainerID}"
"pidCommand": [ "pidCommand": [
"/path/to/secret/script/GetPIDForService", "${ServiceName}" // e.g. "/path/to/secret/script/GetPIDForService", "${ServiceName}"
// or...
"pgrep", "executable"
], ],
"attachCommand": [ "attachCommand": [
"gdbserver", "gdbserver",
@ -796,12 +803,13 @@ and have to tell cpptools a few more options.
// application never attaches, try using the following to manually // application never attaches, try using the following to manually
// force the trap signal. // force the trap signal.
// //
"initCompleteCommand": [ // "initCompleteCommand": [
"kill", // "kill",
"-TRAP", // "-TRAP",
"%PID%" // "%PID%"
] // ]
} },
"delay": "1000m" // optional
} }
} }
}, },
@ -811,22 +819,27 @@ and have to tell cpptools a few more options.
"remote-cmdLine": [ "/path/to/the/remote/executable", "args..." ], "remote-cmdLine": [ "/path/to/the/remote/executable", "args..." ],
"remote-request": "launch", "remote-request": "launch",
"configuration": { "configuration": {
"request": "attach", // yes, attach! "request": "launch",
"program": "/path/to/the/local/executable", "program": "/path/to/the/local/executable",
"cwd": "${workspaceRoot},
"MIMode": "gdb", "MIMode": "gdb",
"miDebuggerAddress": "${host}:${port}" "miDebuggerServerAddress": "${host}:${port}",
"sourceFileMap#json": "{\"${RemoteRoot}\": \"${workspaceRoot}\"}"
} }
}, },
"remote attach": { "remote attach": {
"adapter": "cpptools-remote", "adapter": "cpptools-remote",
"remote-request": "attach", "remote-request": "attach",
"configuration": { "configuration": {
"request": "attach", "request": "launch",
"program": "/path/to/the/local/executable", "program": "/path/to/the/local/executable",
"cwd": "${workspaceRoot},
"MIMode": "gdb", "MIMode": "gdb",
"miDebuggerAddress": "${host}:${port}" "miDebuggerServerAddress": "${host}:${port}",
"sourceFileMap#json": "{\"${RemoteRoot}\": \"${workspaceRoot}\"}"
}
} }
} }
} }

View file

@ -115,9 +115,6 @@ command! -bar -nargs=? -complete=custom,vimspector#CompleteOutput
command! -bar command! -bar
\ VimspectorToggleLog \ VimspectorToggleLog
\ call vimspector#ToggleLog() \ call vimspector#ToggleLog()
command! -bar
\ VimspectorDebugInfo
\ call vimspector#PrintDebugInfo()
command! -nargs=1 -complete=custom,vimspector#CompleteExpr command! -nargs=1 -complete=custom,vimspector#CompleteExpr
\ VimspectorEval \ VimspectorEval
\ call vimspector#Evaluate( <f-args> ) \ call vimspector#Evaluate( <f-args> )
@ -148,9 +145,14 @@ augroup VimspectorUserAutoCmds
augroup END augroup END
" FIXME: Only register this _while_ debugging is active " FIXME: Only register this _while_ debugging is active
let g:vimspector_resetting = 0
augroup Vimspector augroup Vimspector
autocmd! autocmd!
autocmd BufNew * call vimspector#OnBufferCreated( expand( '<afile>' ) ) autocmd BufNew * call vimspector#OnBufferCreated( expand( '<afile>' ) )
autocmd TabClosed *
\ if !g:vimspector_resetting
\ | call vimspector#internal#state#TabClosed()
\ | endif
augroup END augroup END
" boilerplate {{{ " boilerplate {{{

View file

@ -61,6 +61,7 @@ class DebugSession( object ):
self._stackTraceView = None self._stackTraceView = None
self._variablesView = None self._variablesView = None
self._outputView = None self._outputView = None
self._codeView = None
self._breakpoints = breakpoints.ProjectBreakpoints() self._breakpoints = breakpoints.ProjectBreakpoints()
self._splash_screen = None self._splash_screen = None
self._remote_term = None self._remote_term = None
@ -404,22 +405,19 @@ class DebugSession( object ):
self._Reset() self._Reset()
def _Reset( self ): def _Reset( self ):
vim.vars[ 'vimspector_resetting' ] = 1
self._logger.info( "Debugging complete." ) self._logger.info( "Debugging complete." )
if self._uiTab:
self._logger.debug( "Clearing down UI" )
del vim.vars[ 'vimspector_session_windows' ] def ResetUI():
vim.current.tabpage = self._uiTab if self._stackTraceView:
self._stackTraceView.Reset()
if self._variablesView:
self._variablesView.Reset()
if self._outputView:
self._outputView.Reset()
if self._codeView:
self._codeView.Reset()
self._splash_screen = utils.HideSplash( self._api_prefix,
self._splash_screen )
self._stackTraceView.Reset()
self._variablesView.Reset()
self._outputView.Reset()
self._codeView.Reset()
vim.command( 'tabclose!' )
vim.command( 'doautocmd <nomodeline> User VimspectorDebugEnded' )
self._stackTraceView = None self._stackTraceView = None
self._variablesView = None self._variablesView = None
self._outputView = None self._outputView = None
@ -427,6 +425,24 @@ class DebugSession( object ):
self._remote_term = None self._remote_term = None
self._uiTab = None self._uiTab = None
if self._HasUI():
self._logger.debug( "Clearing down UI" )
vim.current.tabpage = self._uiTab
self._splash_screen = utils.HideSplash( self._api_prefix,
self._splash_screen )
ResetUI()
vim.command( 'tabclose!' )
else:
ResetUI()
try:
del vim.vars[ 'vimspector_session_windows' ]
except KeyError:
pass
vim.command( 'doautocmd <nomodeline> User VimspectorDebugEnded' )
vim.vars[ 'vimspector_resetting' ] = 0
# make sure that we're displaying signs in any still-open buffers # make sure that we're displaying signs in any still-open buffers
self._breakpoints.UpdateUI() self._breakpoints.UpdateUI()
@ -894,6 +910,7 @@ class DebugSession( object ):
self._splash_screen, self._splash_screen,
"Unable to start adapter" ) "Unable to start adapter" )
else: else:
handlers = [ self ]
if 'custom_handler' in self._adapter: if 'custom_handler' in self._adapter:
spec = self._adapter[ 'custom_handler' ] spec = self._adapter[ 'custom_handler' ]
if isinstance( spec, dict ): if isinstance( spec, dict ):
@ -902,10 +919,12 @@ class DebugSession( object ):
else: else:
module, cls = spec.rsplit( '.', 1 ) module, cls = spec.rsplit( '.', 1 )
CustomHandler = getattr( importlib.import_module( module ), cls ) try:
handlers = [ CustomHandler( self ), self ] CustomHandler = getattr( importlib.import_module( module ), cls )
else: handlers = [ CustomHandler( self ), self ]
handlers = [ self ] except ImportError:
self._logger.exception( "Unable to load custom adapter %s",
spec )
self._connection = debug_adapter_connection.DebugAdapterConnection( self._connection = debug_adapter_connection.DebugAdapterConnection(
handlers, handlers,
@ -1270,37 +1289,6 @@ class DebugSession( object ):
self._stackTraceView.LoadThreads( True ) self._stackTraceView.LoadThreads( True )
@IfConnected()
@RequiresUI()
def PrintDebugInfo( self ):
def Line():
return ( "--------------------------------------------------------------"
"------------------" )
def Pretty( obj ):
if obj is None:
return [ "None" ]
return [ Line() ] + json.dumps( obj, indent=2 ).splitlines() + [ Line() ]
debugInfo = [
"Vimspector Debug Info",
Line(),
f"ConnectionType: { self._connection_type }",
"Adapter: " ] + Pretty( self._adapter ) + [
"Configuration: " ] + Pretty( self._configuration ) + [
f"API Prefix: { self._api_prefix }",
f"Launch/Init: { self._launch_complete } / { self._init_complete }",
f"Workspace Root: { self._workspace_root }",
"Launch Config: " ] + Pretty( self._launch_config ) + [
"Server Capabilities: " ] + Pretty( self._server_capabilities ) + [
]
self._outputView.ClearCategory( 'DebugInfo' )
self._outputView.Print( "DebugInfo", debugInfo )
self.ShowOutput( "DebugInfo" )
def OnEvent_loadedSource( self, msg ): def OnEvent_loadedSource( self, msg ):
pass pass

View file

@ -30,12 +30,12 @@ GADGETS = {
root, root,
gadget ), gadget ),
'all': { 'all': {
'version': '1.6.0', 'version': '0.27.0',
"adapters": { "adapters": {
"vscode-cpptools": { "vscode-cpptools": {
"name": "cppdbg", "name": "cppdbg",
"command": [ "command": [
"${gadgetDir}/vscode-cpptools/debugAdapters/bin/OpenDebugAD7" "${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
], ],
"attach": { "attach": {
"pidProperty": "processId", "pidProperty": "processId",
@ -53,17 +53,17 @@ GADGETS = {
'linux': { 'linux': {
'file_name': 'cpptools-linux.vsix', 'file_name': 'cpptools-linux.vsix',
'checksum': 'checksum':
'c25299bcfb46b22d41aa3f125df7184e6282a35ff9fb69c47def744cb4778f55', '3695202e1e75a03de18049323b66d868165123f26151f8c974a480eaf0205435',
}, },
'macos': { 'macos': {
'file_name': 'cpptools-osx-arm64.vsix', 'file_name': 'cpptools-osx.vsix',
'checksum': 'checksum':
'ceb3e8cdaa2b5bb45af50913ddd8402089969748af8d70f5d46480408287ba6f', 'cb061e3acd7559a539e5586f8d3f535101c4ec4e8a48195856d1d39380b5cf3c',
}, },
'windows': { 'windows': {
'file_name': 'cpptools-win32.vsix', 'file_name': 'cpptools-win32.vsix',
'checksum': 'checksum':
'ef7ac5831874a3c7dbf0feb826bfda2be579aff9b6d990622fff1d0d4ede00d1', 'aa294368ed16d48c59e49c8000e146eae5a19ad07b654efed5db8ec93b24229e',
"adapters": { "adapters": {
"vscode-cpptools": { "vscode-cpptools": {
"name": "cppdbg", "name": "cppdbg",
@ -323,10 +323,10 @@ GADGETS = {
'${version}/${file_name}', '${version}/${file_name}',
}, },
'all': { 'all': {
'version': 'v1.17.0', 'version': 'v1.14.9',
'file_name': 'php-debug-1.17.0.vsix', 'file_name': 'php-debug.vsix',
'checksum': 'checksum':
'd0fff272503414b6696cc737bc2e18e060fdd5e5dc4bcaf38ae7373afd8d8bc9', '0c5709cbbffe26b12aa63a88142195a9a045a5d8fca7fe63d62c789fe601630d',
}, },
'adapters': { 'adapters': {
'vscode-php-debug': { 'vscode-php-debug': {
@ -394,12 +394,12 @@ GADGETS = {
'${version}/${file_name}', '${version}/${file_name}',
}, },
'all': { 'all': {
'version': 'v1.6.6', 'version': 'v1.6.1',
}, },
'macos': { 'macos': {
'file_name': 'codelldb-aarch64-darwin.vsix', 'file_name': 'codelldb-x86_64-darwin.vsix',
'checksum': 'checksum':
'5adc3b9139eabdafd825bd5efc55df4424a203fb2b6087b425cd434956e7ec58', 'b1c998e7421beea9f3ba21aa5706210bb2249eba93c99b809247ee831075262f',
'make_executable': [ 'make_executable': [
'adapter/codelldb', 'adapter/codelldb',
'lldb/bin/debugserver', 'lldb/bin/debugserver',
@ -410,7 +410,7 @@ GADGETS = {
'linux': { 'linux': {
'file_name': 'codelldb-x86_64-linux.vsix', 'file_name': 'codelldb-x86_64-linux.vsix',
'checksum': 'checksum':
'eda2cd9b3089dcc0524c273e91ffb5875fe08c930bf643739a2cd1846e1f98d6', 'f2a36cb6971fd95a467cf1a7620e160914e8f11bf82929932ee0aa5afbf6ae6a',
'make_executable': [ 'make_executable': [
'adapter/codelldb', 'adapter/codelldb',
'lldb/bin/lldb', 'lldb/bin/lldb',
@ -421,7 +421,7 @@ GADGETS = {
'windows': { 'windows': {
'file_name': 'codelldb-x86_64-windows.vsix', 'file_name': 'codelldb-x86_64-windows.vsix',
'checksum': 'checksum':
'8ddebe8381a3d22dc3d95139c3797fda06b5cc34aadf300e13b1c516b9da95fe', 'ca6a6525bf7719dc95265dc630b3cc817a8c0393b756fd242b710805ffdfb940',
'make_executable': [] 'make_executable': []
}, },
'adapters': { 'adapters': {

View file

@ -358,8 +358,7 @@ def InstallCppTools( name, root, gadget ):
# It's hilarious, but the execute bits aren't set in the vsix. So they # It's hilarious, but the execute bits aren't set in the vsix. So they
# actually have javascript code which does this. It's just a horrible horrible # actually have javascript code which does this. It's just a horrible horrible
# hack that really is not funny. # hack that really is not funny.
MakeExecutable( MakeExecutable( os.path.join( extension, 'debugAdapters', 'OpenDebugAD7' ) )
os.path.join( extension, 'debugAdapters', 'bin', 'OpenDebugAD7' ) )
with open( os.path.join( extension, 'package.json' ) ) as f: with open( os.path.join( extension, 'package.json' ) ) as f:
package = json.load( f ) package = json.load( f )
runtime_dependencies = package[ 'runtimeDependencies' ] runtime_dependencies = package[ 'runtimeDependencies' ]

View file

@ -32,7 +32,6 @@ class TabBuffer( object ):
BUFFER_MAP = { BUFFER_MAP = {
'console': 'Console', 'console': 'Console',
'stdout': 'Console', 'stdout': 'Console',
'output': 'Console',
'stderr': 'stderr', 'stderr': 'stderr',
'telemetry': None, 'telemetry': None,
} }
@ -65,11 +64,8 @@ class OutputView( object ):
self._api_prefix = api_prefix self._api_prefix = api_prefix
VIEWS.add( self ) VIEWS.add( self )
def Print( self, category, text: typing.Union[ str, list ] ): def Print( self, categroy, text ):
if not isinstance( text, list ): self._Print( 'server', text.splitlines() )
text = text.splitlines()
self._Print( category, text )
def OnOutput( self, event ): def OnOutput( self, event ):
category = CategoryToBuffer( event.get( 'category' ) or 'output' ) category = CategoryToBuffer( event.get( 'category' ) or 'output' )
@ -108,26 +104,13 @@ class OutputView( object ):
def Clear( self ): def Clear( self ):
for category, tab_buffer in self._buffers.items(): for category, tab_buffer in self._buffers.items():
self._CleanUpBuffer( category, tab_buffer ) if tab_buffer.is_job:
utils.CleanUpCommand( category, self._api_prefix )
utils.CleanUpHiddenBuffer( tab_buffer.buf )
# FIXME: nunmenu the WinBar ? # FIXME: nunmenu the WinBar ?
self._buffers = {} self._buffers = {}
def ClearCategory( self, category: str ):
if category not in self._buffers:
return
self._CleanUpBuffer( category, self._buffers[ category ] )
def _CleanUpBuffer( self, category: str, tab_buffer: TabBuffer ):
if tab_buffer.is_job:
utils.CleanUpCommand( category, self._api_prefix )
utils.CleanUpHiddenBuffer( tab_buffer.buf )
def WindowIsValid( self ): def WindowIsValid( self ):
return self._window.valid return self._window.valid

View file

@ -42,8 +42,7 @@ DEFAULTS = {
'vimspectorBP': 9, 'vimspectorBP': 9,
'vimspectorBPCond': 9, 'vimspectorBPCond': 9,
'vimspectorBPDisabled': 9, 'vimspectorBPDisabled': 9,
'vimspectorCurrentThread': 200, 'vimspectorCurrentThread': 200
'vimspectorCurrentFrame': 200,
}, },
# Installer # Installer

View file

@ -102,8 +102,7 @@ class StackTraceView( object ):
self._scratch_buffers = [] self._scratch_buffers = []
# FIXME: This ID is by group, so should be module scope # FIXME: This ID is by group, so should be module scope
self._current_thread_sign_id = 0 # 1 when used self._next_sign_id = 1
self._current_frame_sign_id = 0 # 2 when used
utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' ) utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' )
utils.SetUpUIWindow( win ) utils.SetUpUIWindow( win )
@ -128,7 +127,6 @@ class StackTraceView( object ):
':call vimspector#SetCurrentThread()<CR>' ) ':call vimspector#SetCurrentThread()<CR>' )
win.options[ 'cursorline' ] = False win.options[ 'cursorline' ] = False
win.options[ 'signcolumn' ] = 'auto'
if not signs.SignDefined( 'vimspectorCurrentThread' ): if not signs.SignDefined( 'vimspectorCurrentThread' ):
@ -138,13 +136,6 @@ class StackTraceView( object ):
texthl = 'MatchParen', texthl = 'MatchParen',
linehl = 'CursorLine' ) linehl = 'CursorLine' )
if not signs.SignDefined( 'vimspectorCurrentFrame' ):
signs.DefineSign( 'vimspectorCurrentFrame',
text = '',
double_text = '',
texthl = 'Special',
linehl = 'CursorLine' )
self._line_to_frame = {} self._line_to_frame = {}
self._line_to_thread = {} self._line_to_thread = {}
@ -166,12 +157,9 @@ class StackTraceView( object ):
self._sources = {} self._sources = {}
self._requesting_threads = StackTraceView.ThreadRequestState.NO self._requesting_threads = StackTraceView.ThreadRequestState.NO
self._pending_thread_request = None self._pending_thread_request = None
if self._current_thread_sign_id: if self._next_sign_id:
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' ) signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
self._current_thread_sign_id = 0 self._next_sign_id = 0
if self._current_frame_sign_id:
signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
self._current_frame_sign_id = 0
with utils.ModifiableScratchBuffer( self._buf ): with utils.ModifiableScratchBuffer( self._buf ):
utils.ClearBuffer( self._buf ) utils.ClearBuffer( self._buf )
@ -285,10 +273,10 @@ class StackTraceView( object ):
self._line_to_frame.clear() self._line_to_frame.clear()
self._line_to_thread.clear() self._line_to_thread.clear()
if self._current_thread_sign_id: if self._next_sign_id:
signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' ) signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' )
else: else:
self._current_thread_sign_id = 1 self._next_sign_id = 1
with utils.ModifiableScratchBuffer( self._buf ): with utils.ModifiableScratchBuffer( self._buf ):
with utils.RestoreCursorPosition(): with utils.RestoreCursorPosition():
@ -302,7 +290,7 @@ class StackTraceView( object ):
f'({thread.State()})' ) f'({thread.State()})' )
if self._current_thread == thread.id: if self._current_thread == thread.id:
signs.PlaceSign( self._current_thread_sign_id, signs.PlaceSign( self._next_sign_id,
'VimspectorStackTrace', 'VimspectorStackTrace',
'vimspectorCurrentThread', 'vimspectorCurrentThread',
self._buf.name, self._buf.name,
@ -433,7 +421,6 @@ class StackTraceView( object ):
# Should this set the current _Thread_ too ? If i jump to a frame in # Should this set the current _Thread_ too ? If i jump to a frame in
# Thread 2, should that become the focussed thread ? # Thread 2, should that become the focussed thread ?
self._current_frame = frame self._current_frame = frame
self._DrawThreads()
return self._session.SetCurrentFrame( self._current_frame, reason ) return self._session.SetCurrentFrame( self._current_frame, reason )
return False return False
@ -531,11 +518,6 @@ class StackTraceView( object ):
if not thread.IsExpanded(): if not thread.IsExpanded():
return return
if self._current_frame_sign_id:
signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' )
else:
self._current_frame_sign_id = 2
for frame in thread.stacktrace: for frame in thread.stacktrace:
if frame.get( 'source' ): if frame.get( 'source' ):
source = frame[ 'source' ] source = frame[ 'source' ]
@ -560,14 +542,6 @@ class StackTraceView( object ):
source[ 'name' ], source[ 'name' ],
frame[ 'line' ] ) ) frame[ 'line' ] ) )
if ( self._current_frame is not None and
self._current_frame[ 'id' ] == frame[ 'id' ] ):
signs.PlaceSign( self._current_frame_sign_id,
'VimspectorStackTrace',
'vimspectorCurrentFrame',
self._buf.name,
line )
self._line_to_frame[ line ] = ( thread, frame ) self._line_to_frame[ line ] = ( thread, frame )
def _ResolveSource( self, source, and_then ): def _ResolveSource( self, source, and_then ):

View file

@ -21,7 +21,7 @@ out_fd=1
while [ -n "$1" ]; do while [ -n "$1" ]; do
case "$1" in case "$1" in
"--basedir"|"--base-dir"|"--test-base") "--basedir")
shift shift
SetBaseDir $1 SetBaseDir $1
shift shift
@ -36,7 +36,7 @@ while [ -n "$1" ]; do
INSTALL=$1 INSTALL=$1
shift shift
;; ;;
"--update"|"--upgrade") "--update")
UPDATE=1 UPDATE=1
shift shift
;; ;;

View file

@ -54,7 +54,7 @@ function s:SetUpTerminal()
let padding = 4 let padding = 4
let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] ) let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] )
call win_gotoid( terminal_win ) call win_gotoid( terminal_win )
execute string(cols) . 'wincmd |' execute cols . 'wincmd |'
endfunction endfunction
function! s:CustomiseWinBar() function! s:CustomiseWinBar()

View file

@ -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.

View file

@ -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 ) }" )

View file

@ -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}" ]
}
}
}
}

View file

@ -15,15 +15,6 @@
"program": "${workspaceRoot}/test", "program": "${workspaceRoot}/test",
"stopAtEntry": true "stopAtEntry": true
} }
},
"cpptools": {
"adapter": "vscode-cpptools",
"configuration": {
"request": "launch",
"program": "${workspaceRoot}/test",
"stopOnEntry": true,
"MIMode": "lldb"
}
} }
} }
} }

View file

@ -1,4 +1,4 @@
def Settings( **kwargs ): def Settings( **kwargs ):
return { return {
'flags': [ '-x', 'c++', '-Wall', '-Wextra', '-std=c++17' ] 'flags': [ '-x', 'c++', '-Wall', '-Wextra' ]
} }

View file

@ -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": []
}
}
}
}

View file

@ -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
}
```

View file

@ -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)
}
}

View file

@ -1,3 +0,0 @@
module example.com
go 1.16

View file

@ -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"
}

View file

@ -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)
}
})
}
}

View file

@ -99,7 +99,7 @@ function! ThisTestIsFlaky()
let g:test_is_flaky = v:true let g:test_is_flaky = v:true
endfunction endfunction
function! AssertMatchList( expected, actual ) abort function! AssertMatchist( expected, actual ) abort
let ret = assert_equal( len( a:expected ), len( a:actual ) ) let ret = assert_equal( len( a:expected ), len( a:actual ) )
let len = min( [ len( a:expected ), len( a:actual ) ] ) let len = min( [ len( a:expected ), len( a:actual ) ] )
let idx = 0 let idx = 0

View file

@ -30,7 +30,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 ) call cursor( 1, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -45,7 +45,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 ) call cursor( 1, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -56,7 +56,7 @@ function! Test_Multiple_Threads_Continue()
\ ) \ )
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -70,7 +70,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 ) call cursor( 1, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -81,7 +81,7 @@ function! Test_Multiple_Threads_Continue()
\ ) \ )
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -95,7 +95,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 ) call cursor( 1, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -106,7 +106,7 @@ function! Test_Multiple_Threads_Continue()
\ ) \ )
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -121,7 +121,7 @@ function! Test_Multiple_Threads_Continue()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call cursor( 1, 1 ) call cursor( 1, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -132,7 +132,7 @@ function! Test_Multiple_Threads_Continue()
\ ) \ )
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -146,7 +146,7 @@ function! Test_Multiple_Threads_Continue()
" So we break out of the loop " So we break out of the loop
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( notify_l ) \ ' .*: .*@threads.cpp:' . string( notify_l )
@ -157,7 +157,7 @@ function! Test_Multiple_Threads_Continue()
\ ) \ )
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -192,7 +192,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread [0-9]\+: .* (paused)', \ '- Thread [0-9]\+: .* (paused)',
\ ' .*: .*@threads.cpp:' . string( thread_l ) \ ' .*: .*@threads.cpp:' . string( thread_l )
@ -205,7 +205,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver() call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -218,7 +218,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ ], \ ],
@ -230,7 +230,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver() call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -244,7 +244,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -257,7 +257,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver() call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -273,7 +273,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -287,7 +287,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver() call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -304,7 +304,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -319,7 +319,7 @@ function! Test_Multiple_Threads_Step()
call vimspector#StepOver() call vimspector#StepOver()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -338,7 +338,7 @@ function! Test_Multiple_Threads_Step()
" So we break out of the loop " So we break out of the loop
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
\ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)',
@ -366,7 +366,7 @@ function! Test_UpDownStack()
call vimspector#LaunchWithSettings( { 'configuration': 'run' } ) call vimspector#LaunchWithSettings( { 'configuration': 'run' } )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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#DownFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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#UpFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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 feedkeys( "\<Plug>VimspectorUpFrame", 'x' )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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 feedkeys( "\<Plug>VimspectorDownFrame", 'x' )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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#DownFrame()
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Thread 1: MainThread (paused)', \ '- Thread 1: MainThread (paused)',
\ ' 2: DoSomething@main.py:15', \ ' 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() call vimspector#ClearBreakpoints()

View file

@ -6,6 +6,17 @@ function! ClearDown()
call vimspector#test#setup#ClearDown() call vimspector#test#setup#ClearDown()
endfunction endfunction
let s:fn='../support/test/python/simple_python/main.py'
function! s:StartDebugging()
exe 'edit ' . s:fn
call setpos( '.', [ 0, 23, 1 ] )
call vimspector#ToggleBreakpoint()
call vimspector#LaunchWithSettings( { 'configuration': 'run' } )
call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, 23, 1 )
endfunction
function! Test_Step_With_Different_Tabpage() function! Test_Step_With_Different_Tabpage()
lcd testdata/cpp/simple lcd testdata/cpp/simple
edit simple.cpp edit simple.cpp
@ -154,3 +165,16 @@ function! Test_All_Buffers_Deleted_Installer()
au! Test_All_Buffers_Deleted_Installer au! Test_All_Buffers_Deleted_Installer
%bwipe! %bwipe!
endfunction endfunction
function! Test_Close_Tab_No_Vimspector()
tabnew
q
%bwipe!
endfunction
function! Test_Close_Tab_With_Vimspector()
call s:StartDebugging()
tabclose!
call vimspector#test#setup#WaitForReset()
%bwipe!
endfunction

View file

@ -12,7 +12,7 @@
"externalConsole": false, "externalConsole": false,
"stopAtEntry": true, "stopAtEntry": true,
"stopOnEntry": true, "stopOnEntry": true,
"MIMode": "${VIMSPECTOR_MIMODE}" "MImode": "${VIMSPECTOR_MIMODE}"
}, },
"breakpoints": { "breakpoints": {
"exception": { "exception": {
@ -33,7 +33,7 @@
"externalConsole": false, "externalConsole": false,
"stopAtEntry": false, "stopAtEntry": false,
"stopOnEntry": false, "stopOnEntry": false,
"MIMode": "${VIMSPECTOR_MIMODE}" "MImode": "${VIMSPECTOR_MIMODE}"
}, },
"breakpoints": { "breakpoints": {
"exception": { "exception": {
@ -55,7 +55,7 @@
"externalConsole": false, "externalConsole": false,
"stopAtEntry": false, "stopAtEntry": false,
"stopOnEntry": false, "stopOnEntry": false,
"MIMode": "${VIMSPECTOR_MIMODE}" "MImode": "${VIMSPECTOR_MIMODE}"
}, },
"breakpoints": { "breakpoints": {
"exception": { "exception": {
@ -82,7 +82,7 @@
"configuration": { "configuration": {
"request": "launch", "request": "launch",
"program": "${workspaceRoot}/${fileBasenameNoExtension}", "program": "${workspaceRoot}/${fileBasenameNoExtension}",
"MIMode": "${VIMSPECTOR_MIMODE}", "MImode": "${VIMSPECTOR_MIMODE}",
"externalConsole": false, "externalConsole": false,
"args": [ "args": [
"CALCULATED_LIST", "${CALCULATED_LIST}", "CALCULATED_LIST", "${CALCULATED_LIST}",

View file

@ -194,7 +194,6 @@ function! Test_ExpandVariables()
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' *+ t (Test): {...}', \ ' *+ t (Test): {...}',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -212,7 +211,7 @@ function! Test_ExpandVariables()
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' \*- t (Test): {...}', \ ' \*- t (Test): {...}',
@ -220,7 +219,6 @@ function! Test_ExpandVariables()
\ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -231,7 +229,7 @@ function! Test_ExpandVariables()
" Step - stays expanded " Step - stays expanded
call vimspector#StepOver() call vimspector#StepOver()
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' - t (Test): {...}', \ ' - t (Test): {...}',
@ -239,7 +237,6 @@ function! Test_ExpandVariables()
\ ' - c (char): 0 ''\\0\{1,3}''', \ ' - c (char): 0 ''\\0\{1,3}''',
\ ' - fffff (float): 0', \ ' - fffff (float): 0',
\ ' + another_test (AnotherTest):\( {...}\)\?', \ ' + another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -256,7 +253,6 @@ function! Test_ExpandVariables()
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' + t (Test): {...}', \ ' + t (Test): {...}',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -271,7 +267,6 @@ function! Test_ExpandVariables()
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' + t (Test): {...}', \ ' + t (Test): {...}',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -283,7 +278,7 @@ function! Test_ExpandVariables()
call setpos( '.', [ 0, 2, 1 ] ) call setpos( '.', [ 0, 2, 1 ] )
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' - t (Test): {...}', \ ' - t (Test): {...}',
@ -291,7 +286,6 @@ function! Test_ExpandVariables()
\ ' \*- c (char): 99 ''c''', \ ' \*- c (char): 99 ''c''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -308,7 +302,6 @@ function! Test_ExpandVariables()
\ assert_equal( \ assert_equal(
\ [ \ [
\ '+ Scope: Locals', \ '+ Scope: Locals',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -323,7 +316,6 @@ function! Test_ExpandVariables()
\ assert_equal( \ assert_equal(
\ [ \ [
\ '+ Scope: Locals', \ '+ Scope: Locals',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -339,7 +331,6 @@ function! Test_ExpandVariables()
\ assert_equal( \ assert_equal(
\ [ \ [
\ '+ Scope: Locals', \ '+ Scope: Locals',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -387,7 +378,7 @@ function! Test_ExpandWatch()
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -406,7 +397,7 @@ function! Test_ExpandWatch()
" Step - stays expanded " Step - stays expanded
call vimspector#StepOver() call vimspector#StepOver()
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -458,7 +449,7 @@ function! Test_ExpandWatch()
call setpos( '.', [ 0, 3, 1 ] ) call setpos( '.', [ 0, 3, 1 ] )
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -616,7 +607,7 @@ function! Test_EvaluateFailure()
" Add a wtch " Add a wtch
call vimspector#AddWatch( 'test' ) call vimspector#AddWatch( 'test' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: test', \ 'Expression: test',
@ -667,7 +658,7 @@ function! Test_VariableEval()
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -699,7 +690,7 @@ function! Test_VariableEval()
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -733,7 +724,7 @@ function! Test_VariableEval()
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Evaluation error', \ 'Evaluation error',
\ ], \ ],
@ -777,7 +768,7 @@ function! Test_VariableEvalExpand()
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -795,7 +786,7 @@ function! Test_VariableEvalExpand()
call feedkeys( "jjjj\<CR>", 'xt' ) call feedkeys( "jjjj\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -815,7 +806,7 @@ function! Test_VariableEvalExpand()
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -855,7 +846,6 @@ function! Test_SetVariableValue_Local()
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' *+ t (Test): {...}', \ ' *+ t (Test): {...}',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -873,7 +863,7 @@ function! Test_SetVariableValue_Local()
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' \*- t (Test): {...}', \ ' \*- t (Test): {...}',
@ -881,7 +871,6 @@ function! Test_SetVariableValue_Local()
\ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -900,7 +889,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
EOF EOF
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' \*- t (Test): {...}', \ ' \*- t (Test): {...}',
@ -908,7 +897,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -920,7 +908,7 @@ EOF
call vimspector#SetVariableValue( '1234' ) call vimspector#SetVariableValue( '1234' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' \*- t (Test): {...}', \ ' \*- t (Test): {...}',
@ -928,7 +916,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -940,7 +927,7 @@ EOF
call vimspector#SetVariableValue( 'this is invalid' ) call vimspector#SetVariableValue( 'this is invalid' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '- Scope: Locals', \ '- Scope: Locals',
\ ' \*- t (Test): {...}', \ ' \*- t (Test): {...}',
@ -948,7 +935,6 @@ EOF
\ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- c (char): 0 ''\\0\{1,3}''',
\ ' \*- fffff (float): 0', \ ' \*- fffff (float): 0',
\ ' \*+ another_test (AnotherTest):\( {...}\)\?', \ ' \*+ another_test (AnotherTest):\( {...}\)\?',
\ '+ Scope: Registers',
\ ], \ ],
\ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ getbufline( winbufnr( g:vimspector_session_windows.variables ),
\ 1, \ 1,
@ -997,7 +983,7 @@ function! Test_SetVariableValue_Watch()
call feedkeys( "\<CR>", 'xt' ) call feedkeys( "\<CR>", 'xt' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -1026,7 +1012,7 @@ EOF
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -1046,7 +1032,7 @@ EOF
call vimspector#SetVariableValue( '1234' ) call vimspector#SetVariableValue( '1234' )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ 'Watches: ----', \ 'Watches: ----',
\ 'Expression: t', \ 'Expression: t',
@ -1089,7 +1075,7 @@ function! Test_SetVariableValue_Balloon()
\ } ) \ } )
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',
@ -1116,7 +1102,7 @@ with mock.patch( 'vimspector.utils.InputSave' ):
EOF EOF
call WaitForAssert( {-> call WaitForAssert( {->
\ AssertMatchList( \ AssertMatchist(
\ [ \ [
\ '{...}', \ '{...}',
\ ' - i: 0', \ ' - i: 0',