diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 828ec18..f01a833 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -57,12 +57,6 @@ discussing on Gitter rather than raising an issue. * Version of Vimspector: (e.g. output of `git rev-parse HEAD` if cloned or the name of the tarball used to install otherwise) -* Output of `:VimspectorDebugInfo` - -``` -paste here -``` - * Output of `vim --version` or `nvim --version` ``` diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f186f5d..14f5979 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -13,7 +13,7 @@ defaults: jobs: PythonLint: - runs-on: ubuntu-18.04 + runs-on: ubuntu-16.04 container: 'puremourning/vimspector:test' steps: - uses: actions/checkout@v2 @@ -22,7 +22,7 @@ jobs: - name: 'Run flake8' run: '$HOME/.local/bin/flake8 python3/ *.py' VimscriptLint: - runs-on: 'ubuntu-18.04' + runs-on: 'ubuntu-16.04' container: 'puremourning/vimspector:test' steps: - uses: actions/checkout@v2 @@ -32,7 +32,7 @@ jobs: run: $HOME/.local/bin/vint autoload/ compiler/ plugin/ tests/ syntax/ Linux: - runs-on: 'ubuntu-18.04' + runs-on: 'ubuntu-16.04' container: image: 'puremourning/vimspector:test' options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined @@ -156,7 +156,7 @@ jobs: # SSH_PASS: ${{ secrets.SSH_PASS }} # [V]imspector PublishRelease: - runs-on: 'ubuntu-18.04' + runs-on: 'ubuntu-16.04' needs: - Linux - MacOS diff --git a/README.md b/README.md index d198292..e3a5ad5 100644 --- a/README.md +++ b/README.md @@ -61,10 +61,9 @@ 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) @@ -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. @@ -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 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. ![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`, 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 +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": "", - ... - "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 @@ -1401,8 +1364,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 +1381,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 +1700,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 +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: ```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 diff --git a/autoload/vimspector.vim b/autoload/vimspector.vim index 78c7c1b..1219661 100644 --- a/autoload/vimspector.vim +++ b/autoload/vimspector.vim @@ -557,14 +557,6 @@ function! vimspector#ShowEvalBalloon( is_visual ) abort \ . '", 0 )' ) endfunction -function! vimspector#PrintDebugInfo() abort - if !s:Enabled() - return - endif - - py3 _vimspector_session.PrintDebugInfo() -endfunction - " Boilerplate {{{ let &cpoptions=s:save_cpo diff --git a/autoload/vimspector/internal/state.vim b/autoload/vimspector/internal/state.vim index f1e690a..1c78a52 100644 --- a/autoload/vimspector/internal/state.vim +++ b/autoload/vimspector/internal/state.vim @@ -47,6 +47,16 @@ function! vimspector#internal#state#GetAPIPrefix() abort return s:prefix 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 {{{ let &cpoptions=s:save_cpo unlet s:save_cpo diff --git a/compiler/vimspector_test.vim b/compiler/vimspector_test.vim index d0c6def..8910506 100644 --- a/compiler/vimspector_test.vim +++ b/compiler/vimspector_test.vim @@ -155,7 +155,9 @@ if ! has( 'gui_running' ) " å is the right-option+q nnoremap å :cfirst " å is the right-option+a - nnoremap œ :FuncLine + nnoremap œ :cnext + " å is the right-option+f + nnoremap ƒ :FuncLine " Ω is the right-option+z nnoremap Ω :cprevious endif diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index acf20f2..6a18520 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -7,7 +7,7 @@ GEM 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 @@ -205,14 +205,14 @@ GEM 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) multipart-post (2.1.1) - nokogiri (1.11.5) + nokogiri (1.11.3) mini_portile2 (~> 2.5.0) racc (~> 1.4) octokit (4.20.0) diff --git a/docs/configuration.md b/docs/configuration.md index 3d524bf..a734a49 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -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", @@ -765,6 +765,8 @@ and have to tell cpptools a few more options. "remote": { "host": "${host}", "account": "${account}", + // or, alternatively "container": "${ContainerID}" + "runCommand": [ "gdbserver", "--once", @@ -772,14 +774,19 @@ and have to tell cpptools a few more options. "--disable-randomisation", "0.0.0.0:${port}", "%CMD%" - } + }, + "delay": "1000m" // optional }, "attach": { "remote": { "host": "${host}", "account": "${account}", + // or, alternatively "container": "${ContainerID}" + "pidCommand": [ - "/path/to/secret/script/GetPIDForService", "${ServiceName}" + // e.g. "/path/to/secret/script/GetPIDForService", "${ServiceName}" + // or... + "pgrep", "executable" ], "attachCommand": [ "gdbserver", @@ -796,12 +803,13 @@ and have to tell cpptools a few more options. // application never attaches, try using the following to manually // force the trap signal. // - "initCompleteCommand": [ - "kill", - "-TRAP", - "%PID%" - ] - } + // "initCompleteCommand": [ + // "kill", + // "-TRAP", + // "%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-request": "launch", "configuration": { - "request": "attach", // yes, attach! + "request": "launch", "program": "/path/to/the/local/executable", + "cwd": "${workspaceRoot}, "MIMode": "gdb", - "miDebuggerAddress": "${host}:${port}" + "miDebuggerServerAddress": "${host}:${port}", + "sourceFileMap#json": "{\"${RemoteRoot}\": \"${workspaceRoot}\"}" } }, "remote attach": { "adapter": "cpptools-remote", "remote-request": "attach", "configuration": { - "request": "attach", + "request": "launch", "program": "/path/to/the/local/executable", + "cwd": "${workspaceRoot}, "MIMode": "gdb", - "miDebuggerAddress": "${host}:${port}" + "miDebuggerServerAddress": "${host}:${port}", + "sourceFileMap#json": "{\"${RemoteRoot}\": \"${workspaceRoot}\"}" + } } } } diff --git a/plugin/vimspector.vim b/plugin/vimspector.vim index 2668bf1..5a6b556 100644 --- a/plugin/vimspector.vim +++ b/plugin/vimspector.vim @@ -115,9 +115,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( ) @@ -148,9 +145,14 @@ augroup VimspectorUserAutoCmds augroup END " FIXME: Only register this _while_ debugging is active +let g:vimspector_resetting = 0 augroup Vimspector autocmd! autocmd BufNew * call vimspector#OnBufferCreated( expand( '' ) ) + autocmd TabClosed * + \ if !g:vimspector_resetting + \ | call vimspector#internal#state#TabClosed() + \ | endif augroup END " boilerplate {{{ diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index 36ad62b..0d6e76a 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -61,6 +61,7 @@ class DebugSession( object ): self._stackTraceView = None self._variablesView = None self._outputView = None + self._codeView = None self._breakpoints = breakpoints.ProjectBreakpoints() self._splash_screen = None self._remote_term = None @@ -404,22 +405,19 @@ class DebugSession( object ): self._Reset() def _Reset( self ): + vim.vars[ 'vimspector_resetting' ] = 1 self._logger.info( "Debugging complete." ) - if self._uiTab: - self._logger.debug( "Clearing down UI" ) - del vim.vars[ 'vimspector_session_windows' ] - vim.current.tabpage = self._uiTab + def ResetUI(): + 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 User VimspectorDebugEnded' ) self._stackTraceView = None self._variablesView = None self._outputView = None @@ -427,6 +425,24 @@ class DebugSession( object ): self._remote_term = 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 User VimspectorDebugEnded' ) + vim.vars[ 'vimspector_resetting' ] = 0 + # make sure that we're displaying signs in any still-open buffers self._breakpoints.UpdateUI() @@ -894,6 +910,7 @@ class DebugSession( object ): self._splash_screen, "Unable to start adapter" ) else: + handlers = [ self ] if 'custom_handler' in self._adapter: spec = self._adapter[ 'custom_handler' ] if isinstance( spec, dict ): @@ -902,10 +919,12 @@ class DebugSession( object ): else: module, cls = spec.rsplit( '.', 1 ) - CustomHandler = getattr( importlib.import_module( module ), cls ) - handlers = [ CustomHandler( self ), self ] - else: - handlers = [ self ] + try: + CustomHandler = getattr( importlib.import_module( module ), cls ) + handlers = [ CustomHandler( self ), self ] + except ImportError: + self._logger.exception( "Unable to load custom adapter %s", + spec ) self._connection = debug_adapter_connection.DebugAdapterConnection( handlers, @@ -1270,37 +1289,6 @@ class DebugSession( object ): self._stackTraceView.LoadThreads( True ) - @IfConnected() - @RequiresUI() - def PrintDebugInfo( self ): - def Line(): - return ( "--------------------------------------------------------------" - "------------------" ) - - def Pretty( obj ): - if obj is None: - return [ "None" ] - return [ Line() ] + json.dumps( obj, indent=2 ).splitlines() + [ Line() ] - - - debugInfo = [ - "Vimspector Debug Info", - Line(), - f"ConnectionType: { self._connection_type }", - "Adapter: " ] + Pretty( self._adapter ) + [ - "Configuration: " ] + Pretty( self._configuration ) + [ - f"API Prefix: { self._api_prefix }", - f"Launch/Init: { self._launch_complete } / { self._init_complete }", - f"Workspace Root: { self._workspace_root }", - "Launch Config: " ] + Pretty( self._launch_config ) + [ - "Server Capabilities: " ] + Pretty( self._server_capabilities ) + [ - ] - - self._outputView.ClearCategory( 'DebugInfo' ) - self._outputView.Print( "DebugInfo", debugInfo ) - self.ShowOutput( "DebugInfo" ) - - def OnEvent_loadedSource( self, msg ): pass diff --git a/python3/vimspector/gadgets.py b/python3/vimspector/gadgets.py index 02eb0e7..2c60a1a 100644 --- a/python3/vimspector/gadgets.py +++ b/python3/vimspector/gadgets.py @@ -30,12 +30,12 @@ GADGETS = { root, gadget ), 'all': { - 'version': '1.6.0', + 'version': '0.27.0', "adapters": { "vscode-cpptools": { "name": "cppdbg", "command": [ - "${gadgetDir}/vscode-cpptools/debugAdapters/bin/OpenDebugAD7" + "${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7" ], "attach": { "pidProperty": "processId", @@ -53,17 +53,17 @@ GADGETS = { 'linux': { 'file_name': 'cpptools-linux.vsix', 'checksum': - 'c25299bcfb46b22d41aa3f125df7184e6282a35ff9fb69c47def744cb4778f55', + '3695202e1e75a03de18049323b66d868165123f26151f8c974a480eaf0205435', }, 'macos': { - 'file_name': 'cpptools-osx-arm64.vsix', + 'file_name': 'cpptools-osx.vsix', 'checksum': - 'ceb3e8cdaa2b5bb45af50913ddd8402089969748af8d70f5d46480408287ba6f', + 'cb061e3acd7559a539e5586f8d3f535101c4ec4e8a48195856d1d39380b5cf3c', }, 'windows': { 'file_name': 'cpptools-win32.vsix', 'checksum': - 'ef7ac5831874a3c7dbf0feb826bfda2be579aff9b6d990622fff1d0d4ede00d1', + 'aa294368ed16d48c59e49c8000e146eae5a19ad07b654efed5db8ec93b24229e', "adapters": { "vscode-cpptools": { "name": "cppdbg", @@ -323,10 +323,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 +394,12 @@ GADGETS = { '${version}/${file_name}', }, 'all': { - 'version': 'v1.6.6', + 'version': 'v1.6.1', }, 'macos': { - 'file_name': 'codelldb-aarch64-darwin.vsix', + 'file_name': 'codelldb-x86_64-darwin.vsix', 'checksum': - '5adc3b9139eabdafd825bd5efc55df4424a203fb2b6087b425cd434956e7ec58', + 'b1c998e7421beea9f3ba21aa5706210bb2249eba93c99b809247ee831075262f', 'make_executable': [ 'adapter/codelldb', 'lldb/bin/debugserver', @@ -410,7 +410,7 @@ GADGETS = { 'linux': { 'file_name': 'codelldb-x86_64-linux.vsix', 'checksum': - 'eda2cd9b3089dcc0524c273e91ffb5875fe08c930bf643739a2cd1846e1f98d6', + 'f2a36cb6971fd95a467cf1a7620e160914e8f11bf82929932ee0aa5afbf6ae6a', 'make_executable': [ 'adapter/codelldb', 'lldb/bin/lldb', @@ -421,7 +421,7 @@ GADGETS = { 'windows': { 'file_name': 'codelldb-x86_64-windows.vsix', 'checksum': - '8ddebe8381a3d22dc3d95139c3797fda06b5cc34aadf300e13b1c516b9da95fe', + 'ca6a6525bf7719dc95265dc630b3cc817a8c0393b756fd242b710805ffdfb940', 'make_executable': [] }, 'adapters': { diff --git a/python3/vimspector/installer.py b/python3/vimspector/installer.py index a81db8f..f0f85a4 100644 --- a/python3/vimspector/installer.py +++ b/python3/vimspector/installer.py @@ -358,8 +358,7 @@ def InstallCppTools( name, root, gadget ): # It's hilarious, but the execute bits aren't set in the vsix. So they # actually have javascript code which does this. It's just a horrible horrible # hack that really is not funny. - MakeExecutable( - os.path.join( extension, 'debugAdapters', 'bin', 'OpenDebugAD7' ) ) + MakeExecutable( os.path.join( extension, 'debugAdapters', 'OpenDebugAD7' ) ) with open( os.path.join( extension, 'package.json' ) ) as f: package = json.load( f ) runtime_dependencies = package[ 'runtimeDependencies' ] diff --git a/python3/vimspector/output.py b/python3/vimspector/output.py index 3f0da1e..c453417 100644 --- a/python3/vimspector/output.py +++ b/python3/vimspector/output.py @@ -32,7 +32,6 @@ class TabBuffer( object ): BUFFER_MAP = { 'console': 'Console', 'stdout': 'Console', - 'output': 'Console', 'stderr': 'stderr', 'telemetry': None, } @@ -65,11 +64,8 @@ class OutputView( object ): self._api_prefix = api_prefix VIEWS.add( self ) - def Print( self, category, text: typing.Union[ str, list ] ): - if not isinstance( text, list ): - text = text.splitlines() - - self._Print( category, text ) + def Print( self, categroy, text ): + self._Print( 'server', text.splitlines() ) def OnOutput( self, event ): category = CategoryToBuffer( event.get( 'category' ) or 'output' ) @@ -108,26 +104,13 @@ class OutputView( object ): def Clear( self ): for category, tab_buffer in self._buffers.items(): - self._CleanUpBuffer( category, tab_buffer ) + if tab_buffer.is_job: + utils.CleanUpCommand( category, self._api_prefix ) + utils.CleanUpHiddenBuffer( tab_buffer.buf ) # FIXME: nunmenu the WinBar ? self._buffers = {} - - def ClearCategory( self, category: str ): - if category not in self._buffers: - return - - self._CleanUpBuffer( category, self._buffers[ category ] ) - - - def _CleanUpBuffer( self, category: str, tab_buffer: TabBuffer ): - if tab_buffer.is_job: - utils.CleanUpCommand( category, self._api_prefix ) - - utils.CleanUpHiddenBuffer( tab_buffer.buf ) - - def WindowIsValid( self ): return self._window.valid diff --git a/python3/vimspector/settings.py b/python3/vimspector/settings.py index 89378af..a060543 100644 --- a/python3/vimspector/settings.py +++ b/python3/vimspector/settings.py @@ -42,8 +42,7 @@ DEFAULTS = { 'vimspectorBP': 9, 'vimspectorBPCond': 9, 'vimspectorBPDisabled': 9, - 'vimspectorCurrentThread': 200, - 'vimspectorCurrentFrame': 200, + 'vimspectorCurrentThread': 200 }, # Installer diff --git a/python3/vimspector/stack_trace.py b/python3/vimspector/stack_trace.py index 8b1d848..ae14e68 100644 --- a/python3/vimspector/stack_trace.py +++ b/python3/vimspector/stack_trace.py @@ -102,8 +102,7 @@ class StackTraceView( object ): self._scratch_buffers = [] # FIXME: This ID is by group, so should be module scope - self._current_thread_sign_id = 0 # 1 when used - self._current_frame_sign_id = 0 # 2 when used + self._next_sign_id = 1 utils.SetUpHiddenBuffer( self._buf, 'vimspector.StackTrace' ) utils.SetUpUIWindow( win ) @@ -128,7 +127,6 @@ class StackTraceView( object ): ':call vimspector#SetCurrentThread()' ) win.options[ 'cursorline' ] = False - win.options[ 'signcolumn' ] = 'auto' if not signs.SignDefined( 'vimspectorCurrentThread' ): @@ -138,13 +136,6 @@ class StackTraceView( object ): texthl = 'MatchParen', linehl = 'CursorLine' ) - if not signs.SignDefined( 'vimspectorCurrentFrame' ): - signs.DefineSign( 'vimspectorCurrentFrame', - text = '▶ ', - double_text = '▶', - texthl = 'Special', - linehl = 'CursorLine' ) - self._line_to_frame = {} self._line_to_thread = {} @@ -166,12 +157,9 @@ class StackTraceView( object ): self._sources = {} self._requesting_threads = StackTraceView.ThreadRequestState.NO self._pending_thread_request = None - if self._current_thread_sign_id: - signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' ) - self._current_thread_sign_id = 0 - if self._current_frame_sign_id: - signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' ) - self._current_frame_sign_id = 0 + if self._next_sign_id: + signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' ) + self._next_sign_id = 0 with utils.ModifiableScratchBuffer( self._buf ): utils.ClearBuffer( self._buf ) @@ -285,10 +273,10 @@ class StackTraceView( object ): self._line_to_frame.clear() self._line_to_thread.clear() - if self._current_thread_sign_id: - signs.UnplaceSign( self._current_thread_sign_id, 'VimspectorStackTrace' ) + if self._next_sign_id: + signs.UnplaceSign( self._next_sign_id, 'VimspectorStackTrace' ) else: - self._current_thread_sign_id = 1 + self._next_sign_id = 1 with utils.ModifiableScratchBuffer( self._buf ): with utils.RestoreCursorPosition(): @@ -302,7 +290,7 @@ class StackTraceView( object ): f'({thread.State()})' ) if self._current_thread == thread.id: - signs.PlaceSign( self._current_thread_sign_id, + signs.PlaceSign( self._next_sign_id, 'VimspectorStackTrace', 'vimspectorCurrentThread', self._buf.name, @@ -433,7 +421,6 @@ class StackTraceView( object ): # Should this set the current _Thread_ too ? If i jump to a frame in # Thread 2, should that become the focussed thread ? self._current_frame = frame - self._DrawThreads() return self._session.SetCurrentFrame( self._current_frame, reason ) return False @@ -531,11 +518,6 @@ class StackTraceView( object ): if not thread.IsExpanded(): return - if self._current_frame_sign_id: - signs.UnplaceSign( self._current_frame_sign_id, 'VimspectorStackTrace' ) - else: - self._current_frame_sign_id = 2 - for frame in thread.stacktrace: if frame.get( 'source' ): source = frame[ 'source' ] @@ -560,14 +542,6 @@ class StackTraceView( object ): source[ 'name' ], frame[ 'line' ] ) ) - if ( self._current_frame is not None and - self._current_frame[ 'id' ] == frame[ 'id' ] ): - signs.PlaceSign( self._current_frame_sign_id, - 'VimspectorStackTrace', - 'vimspectorCurrentFrame', - self._buf.name, - line ) - self._line_to_frame[ line ] = ( thread, frame ) def _ResolveSource( self, source, and_then ): diff --git a/run_tests b/run_tests index 201ec1b..441acb0 100755 --- a/run_tests +++ b/run_tests @@ -21,7 +21,7 @@ out_fd=1 while [ -n "$1" ]; do case "$1" in - "--basedir"|"--base-dir"|"--test-base") + "--basedir") shift SetBaseDir $1 shift @@ -36,7 +36,7 @@ while [ -n "$1" ]; do INSTALL=$1 shift ;; - "--update"|"--upgrade") + "--update") UPDATE=1 shift ;; diff --git a/support/custom_ui_vimrc b/support/custom_ui_vimrc index e76c6ee..a8812cb 100644 --- a/support/custom_ui_vimrc +++ b/support/custom_ui_vimrc @@ -54,7 +54,7 @@ function s:SetUpTerminal() let padding = 4 let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] ) call win_gotoid( terminal_win ) - execute string(cols) . 'wincmd |' + execute cols . 'wincmd |' endfunction function! s:CustomiseWinBar() diff --git a/support/gadget_upgrade/README.md b/support/gadget_upgrade/README.md deleted file mode 100644 index 9ae3d7f..0000000 --- a/support/gadget_upgrade/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Manually updating shipped gadgets - -Download the gadget files manuall from their official source into this dir. -Run `./checksum.py ` to get the checksums. - -Update ../../python3/vimspector/gadgets.py with the new version and the -checksums. - diff --git a/support/gadget_upgrade/checksum.py b/support/gadget_upgrade/checksum.py deleted file mode 100755 index d0c1404..0000000 --- a/support/gadget_upgrade/checksum.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python3 - -import hashlib -import sys - - -def GetChecksumSHA254( file_path ): - with open( file_path, 'rb' ) as existing_file: - return hashlib.sha256( existing_file.read() ).hexdigest() - - -for arg in sys.argv[ 1: ]: - print( f"{ arg } = { GetChecksumSHA254( arg ) }" ) diff --git a/support/test/bash/.vimspector.json b/support/test/bash/.vimspector.json deleted file mode 100644 index a1be1b9..0000000 --- a/support/test/bash/.vimspector.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json", - "configurations": { - "Run Current Script": { - "adapter": "vscode-bash", - "autoselect": false, - "configuration": { - "request": "launch", - "program": "${file}", - "cwd": "${fileDirname}", - "args": [ "*${args}" ] - } - } - } -} diff --git a/support/test/cpp/simple_c_program/.vimspector.json b/support/test/cpp/simple_c_program/.vimspector.json index fb4c958..7b8c53a 100644 --- a/support/test/cpp/simple_c_program/.vimspector.json +++ b/support/test/cpp/simple_c_program/.vimspector.json @@ -15,15 +15,6 @@ "program": "${workspaceRoot}/test", "stopAtEntry": true } - }, - "cpptools": { - "adapter": "vscode-cpptools", - "configuration": { - "request": "launch", - "program": "${workspaceRoot}/test", - "stopOnEntry": true, - "MIMode": "lldb" - } } } } diff --git a/support/test/cpp/simple_c_program/.ycm_extra_conf.py b/support/test/cpp/simple_c_program/.ycm_extra_conf.py index 4203b36..0d17586 100644 --- a/support/test/cpp/simple_c_program/.ycm_extra_conf.py +++ b/support/test/cpp/simple_c_program/.ycm_extra_conf.py @@ -1,4 +1,4 @@ def Settings( **kwargs ): return { - 'flags': [ '-x', 'c++', '-Wall', '-Wextra', '-std=c++17' ] + 'flags': [ '-x', 'c++', '-Wall', '-Wextra' ] } diff --git a/support/test/go/name-starts-with-vowel/.vimspector.json b/support/test/go/name-starts-with-vowel/.vimspector.json deleted file mode 100644 index ffcfc93..0000000 --- a/support/test/go/name-starts-with-vowel/.vimspector.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "configurations": { - "run-cmd": { - "adapter": "vscode-go", - "configuration": { - "request": "launch", - "program": "${workspaceRoot}/cmd/namestartswithvowel/main.go", - "mode": "debug", - "dlvToolPath": "$HOME/go/bin/dlv", - "dlvLoadConfig": { - "maxArrayValues": 1000, - "maxStringLen": 1000 - } - } - }, - "test-current-file": { - "adapter": "vscode-go", - "configuration": { - "request": "launch", - "mode": "test", - "program": "${fileDirname}", - "cwd": "${fileDirname}", - "dlvToolPath": "$GOPATH/bin/dlv", - "env": {}, - "args": [] - } - } - } -} diff --git a/support/test/go/name-starts-with-vowel/README.md b/support/test/go/name-starts-with-vowel/README.md deleted file mode 100644 index fec967e..0000000 --- a/support/test/go/name-starts-with-vowel/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Purpose - -This example comes with two example vimspector configs for the Go programming language. - -1) `run-cmd` will launch the main programme under `cmd/namestartswithvowel`. -1) `test-current-file` will run the tests in the current file in debug mode. - -## Example use-cases - -### run-cmd - -* Open `cmd/namestartswithvowel/main.go` -* Add a breakpoint somewhere within the programme -* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping) -* Select the first launch configuration (`1: run-cmd`) - -### test-current-file - -* Open `internal/vowels/vowels_test.go` -* Add a breakpoint somewhere within the test -* Start the debugger (`:call vimspector#Continue()` or your relevant keymapping) -* Select the second launch configuration (`2: test-current-file`) - -## Additional Configuration - -There are two additional configuration options specified under `run-cmd`; these parameters configure the maximum string/array size to be shown while debugging. - -``` -"dlvLoadConfig": { - "maxArrayValues": 1000, - "maxStringLen": 1000 -} -``` diff --git a/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go b/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go deleted file mode 100644 index c160aea..0000000 --- a/support/test/go/name-starts-with-vowel/cmd/namestartswithvowel/main.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "fmt" - - "example.com/internal/vowels" -) - -func main() { - names := []string{"Simon", "Bob", "Jennifer", "Amy", "Duke", "Elizabeth"} - - for _, n := range names { - if vowels.NameStartsWithVowel(n) { - fmt.Printf("%s starts with a vowel!\n", n) - continue - } - - fmt.Printf("%s does not start with a vowel!\n", n) - } -} diff --git a/support/test/go/name-starts-with-vowel/go.mod b/support/test/go/name-starts-with-vowel/go.mod deleted file mode 100644 index 3070734..0000000 --- a/support/test/go/name-starts-with-vowel/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module example.com - -go 1.16 diff --git a/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go b/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go deleted file mode 100644 index 4e76480..0000000 --- a/support/test/go/name-starts-with-vowel/internal/vowels/vowels.go +++ /dev/null @@ -1,9 +0,0 @@ -package vowels - -import "strings" - -func NameStartsWithVowel(name string) bool { - s := strings.Split(strings.ToLower(name), "") - - return s[0] == "a" || s[0] == "e" || s[0] == "i" || s[0] == "o" || s[0] == "u" -} diff --git a/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go b/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go deleted file mode 100644 index e0d5773..0000000 --- a/support/test/go/name-starts-with-vowel/internal/vowels/vowels_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package vowels - -import ( - "fmt" - "testing" -) - -func TestNameStartsWithVowel(t *testing.T) { - testCases := []struct { - input string - expectedOutput bool - }{ - { - input: "Simon", - expectedOutput: false, - }, - { - input: "Andy", - expectedOutput: true, - }, - } - for _, tt := range testCases { - t.Run(fmt.Sprintf("%s should product %t", tt.input, tt.expectedOutput), func(t *testing.T) { - out := NameStartsWithVowel(tt.input) - if out != tt.expectedOutput { - t.Errorf("%s produced %t, when %t was expected", tt.input, out, tt.expectedOutput) - } - }) - } -} diff --git a/tests/lib/plugin/shared.vim b/tests/lib/plugin/shared.vim index f98b8e9..70e297e 100644 --- a/tests/lib/plugin/shared.vim +++ b/tests/lib/plugin/shared.vim @@ -99,7 +99,7 @@ function! ThisTestIsFlaky() let g:test_is_flaky = v:true endfunction -function! AssertMatchList( expected, actual ) abort +function! AssertMatchist( expected, actual ) abort let ret = assert_equal( len( a:expected ), len( a:actual ) ) let len = min( [ len( a:expected ), len( a:actual ) ] ) let idx = 0 diff --git a/tests/stack_trace.test.vim b/tests/stack_trace.test.vim index b5ed795..a65ea5e 100644 --- a/tests/stack_trace.test.vim +++ b/tests/stack_trace.test.vim @@ -30,7 +30,7 @@ function! Test_Multiple_Threads_Continue() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call cursor( 1, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -45,7 +45,7 @@ function! Test_Multiple_Threads_Continue() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call cursor( 1, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -56,7 +56,7 @@ function! Test_Multiple_Threads_Continue() \ ) \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -70,7 +70,7 @@ function! Test_Multiple_Threads_Continue() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call cursor( 1, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -81,7 +81,7 @@ function! Test_Multiple_Threads_Continue() \ ) \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -95,7 +95,7 @@ function! Test_Multiple_Threads_Continue() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call cursor( 1, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -106,7 +106,7 @@ function! Test_Multiple_Threads_Continue() \ ) \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -121,7 +121,7 @@ function! Test_Multiple_Threads_Continue() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call cursor( 1, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -132,7 +132,7 @@ function! Test_Multiple_Threads_Continue() \ ) \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -146,7 +146,7 @@ function! Test_Multiple_Threads_Continue() " So we break out of the loop call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( notify_l ) @@ -157,7 +157,7 @@ function! Test_Multiple_Threads_Continue() \ ) \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -192,7 +192,7 @@ function! Test_Multiple_Threads_Step() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread [0-9]\+: .* (paused)', \ ' .*: .*@threads.cpp:' . string( thread_l ) @@ -205,7 +205,7 @@ function! Test_Multiple_Threads_Step() call vimspector#StepOver() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -218,7 +218,7 @@ function! Test_Multiple_Threads_Step() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ ], @@ -230,7 +230,7 @@ function! Test_Multiple_Threads_Step() call vimspector#StepOver() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -244,7 +244,7 @@ function! Test_Multiple_Threads_Step() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -257,7 +257,7 @@ function! Test_Multiple_Threads_Step() call vimspector#StepOver() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -273,7 +273,7 @@ function! Test_Multiple_Threads_Step() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -287,7 +287,7 @@ function! Test_Multiple_Threads_Step() call vimspector#StepOver() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -304,7 +304,7 @@ function! Test_Multiple_Threads_Step() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -319,7 +319,7 @@ function! Test_Multiple_Threads_Step() call vimspector#StepOver() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, thread_n, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -338,7 +338,7 @@ function! Test_Multiple_Threads_Step() " So we break out of the loop call vimspector#test#signs#AssertCursorIsAtLineInBuffer( s:fn, notify_l, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '+ Thread [0-9]\+: .* (paused)', \ '+ Thread [0-9]\+: .* (paused)', @@ -366,7 +366,7 @@ function! Test_UpDownStack() call vimspector#LaunchWithSettings( { 'configuration': 'run' } ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -379,25 +379,11 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 2, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w call vimspector#DownFrame() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -410,26 +396,11 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 2, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w - call vimspector#UpFrame() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -442,26 +413,11 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 3, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w - call feedkeys( "\VimspectorUpFrame", 'x' ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 23, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -474,26 +430,11 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 4, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w - call feedkeys( "\VimspectorDownFrame", 'x' ) call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 8, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -506,26 +447,11 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 3, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w - call vimspector#DownFrame() call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 15, 1 ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Thread 1: MainThread (paused)', \ ' 2: DoSomething@main.py:15', @@ -538,21 +464,6 @@ function! Test_UpDownStack() \ '$' ) \ ) \ } ) - call win_gotoid( g:vimspector_session_windows.stack_trace ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 1, - \ 'vimspectorCurrentThread', - \ 200 ) } ) - call WaitForAssert( { -> - \ vimspector#test#signs#AssertSignGroupSingletonAtLine( - \ 'VimspectorStackTrace', - \ 2, - \ 'vimspectorCurrentFrame', - \ 200 ) } ) - wincmd w - call vimspector#ClearBreakpoints() diff --git a/tests/tabpage.test.vim b/tests/tabpage.test.vim index 92b57e8..21d832e 100644 --- a/tests/tabpage.test.vim +++ b/tests/tabpage.test.vim @@ -6,6 +6,17 @@ function! ClearDown() call vimspector#test#setup#ClearDown() 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() lcd testdata/cpp/simple edit simple.cpp @@ -154,3 +165,16 @@ function! Test_All_Buffers_Deleted_Installer() au! Test_All_Buffers_Deleted_Installer %bwipe! 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 diff --git a/tests/testdata/cpp/simple/.vimspector.json b/tests/testdata/cpp/simple/.vimspector.json index 48ce801..0dca061 100644 --- a/tests/testdata/cpp/simple/.vimspector.json +++ b/tests/testdata/cpp/simple/.vimspector.json @@ -12,7 +12,7 @@ "externalConsole": false, "stopAtEntry": true, "stopOnEntry": true, - "MIMode": "${VIMSPECTOR_MIMODE}" + "MImode": "${VIMSPECTOR_MIMODE}" }, "breakpoints": { "exception": { @@ -33,7 +33,7 @@ "externalConsole": false, "stopAtEntry": false, "stopOnEntry": false, - "MIMode": "${VIMSPECTOR_MIMODE}" + "MImode": "${VIMSPECTOR_MIMODE}" }, "breakpoints": { "exception": { @@ -55,7 +55,7 @@ "externalConsole": false, "stopAtEntry": false, "stopOnEntry": false, - "MIMode": "${VIMSPECTOR_MIMODE}" + "MImode": "${VIMSPECTOR_MIMODE}" }, "breakpoints": { "exception": { @@ -82,7 +82,7 @@ "configuration": { "request": "launch", "program": "${workspaceRoot}/${fileBasenameNoExtension}", - "MIMode": "${VIMSPECTOR_MIMODE}", + "MImode": "${VIMSPECTOR_MIMODE}", "externalConsole": false, "args": [ "CALCULATED_LIST", "${CALCULATED_LIST}", diff --git a/tests/variables.test.vim b/tests/variables.test.vim index c00fb7f..c7d373b 100644 --- a/tests/variables.test.vim +++ b/tests/variables.test.vim @@ -194,7 +194,6 @@ function! Test_ExpandVariables() \ [ \ '- Scope: Locals', \ ' *+ t (Test): {...}', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -212,7 +211,7 @@ function! Test_ExpandVariables() call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' \*- t (Test): {...}', @@ -220,7 +219,6 @@ function! Test_ExpandVariables() \ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -231,7 +229,7 @@ function! Test_ExpandVariables() " Step - stays expanded call vimspector#StepOver() call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' - t (Test): {...}', @@ -239,7 +237,6 @@ function! Test_ExpandVariables() \ ' - c (char): 0 ''\\0\{1,3}''', \ ' - fffff (float): 0', \ ' + another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -256,7 +253,6 @@ function! Test_ExpandVariables() \ [ \ '- Scope: Locals', \ ' + t (Test): {...}', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -271,7 +267,6 @@ function! Test_ExpandVariables() \ [ \ '- Scope: Locals', \ ' + t (Test): {...}', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -283,7 +278,7 @@ function! Test_ExpandVariables() call setpos( '.', [ 0, 2, 1 ] ) call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' - t (Test): {...}', @@ -291,7 +286,6 @@ function! Test_ExpandVariables() \ ' \*- c (char): 99 ''c''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -308,7 +302,6 @@ function! Test_ExpandVariables() \ assert_equal( \ [ \ '+ Scope: Locals', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -323,7 +316,6 @@ function! Test_ExpandVariables() \ assert_equal( \ [ \ '+ Scope: Locals', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -339,7 +331,6 @@ function! Test_ExpandVariables() \ assert_equal( \ [ \ '+ Scope: Locals', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -387,7 +378,7 @@ function! Test_ExpandWatch() call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -406,7 +397,7 @@ function! Test_ExpandWatch() " Step - stays expanded call vimspector#StepOver() call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -458,7 +449,7 @@ function! Test_ExpandWatch() call setpos( '.', [ 0, 3, 1 ] ) call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -616,7 +607,7 @@ function! Test_EvaluateFailure() " Add a wtch call vimspector#AddWatch( 'test' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: test', @@ -667,7 +658,7 @@ function! Test_VariableEval() \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -699,7 +690,7 @@ function! Test_VariableEval() \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -733,7 +724,7 @@ function! Test_VariableEval() \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Evaluation error', \ ], @@ -777,7 +768,7 @@ function! Test_VariableEvalExpand() \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -795,7 +786,7 @@ function! Test_VariableEvalExpand() call feedkeys( "jjjj\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -815,7 +806,7 @@ function! Test_VariableEvalExpand() call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -855,7 +846,6 @@ function! Test_SetVariableValue_Local() \ [ \ '- Scope: Locals', \ ' *+ t (Test): {...}', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -873,7 +863,7 @@ function! Test_SetVariableValue_Local() call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' \*- t (Test): {...}', @@ -881,7 +871,6 @@ function! Test_SetVariableValue_Local() \ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -900,7 +889,7 @@ with mock.patch( 'vimspector.utils.InputSave' ): EOF call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' \*- t (Test): {...}', @@ -908,7 +897,6 @@ EOF \ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -920,7 +908,7 @@ EOF call vimspector#SetVariableValue( '1234' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' \*- t (Test): {...}', @@ -928,7 +916,6 @@ EOF \ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -940,7 +927,7 @@ EOF call vimspector#SetVariableValue( 'this is invalid' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '- Scope: Locals', \ ' \*- t (Test): {...}', @@ -948,7 +935,6 @@ EOF \ ' \*- c (char): 0 ''\\0\{1,3}''', \ ' \*- fffff (float): 0', \ ' \*+ another_test (AnotherTest):\( {...}\)\?', - \ '+ Scope: Registers', \ ], \ getbufline( winbufnr( g:vimspector_session_windows.variables ), \ 1, @@ -997,7 +983,7 @@ function! Test_SetVariableValue_Watch() call feedkeys( "\", 'xt' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -1026,7 +1012,7 @@ EOF call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -1046,7 +1032,7 @@ EOF call vimspector#SetVariableValue( '1234' ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ 'Watches: ----', \ 'Expression: t', @@ -1089,7 +1075,7 @@ function! Test_SetVariableValue_Balloon() \ } ) call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0', @@ -1116,7 +1102,7 @@ with mock.patch( 'vimspector.utils.InputSave' ): EOF call WaitForAssert( {-> - \ AssertMatchList( + \ AssertMatchist( \ [ \ '{...}', \ ' - i: 0',