diff --git a/autoload/vimspector.vim b/autoload/vimspector.vim index c1f3640..68c49b4 100644 --- a/autoload/vimspector.vim +++ b/autoload/vimspector.vim @@ -183,7 +183,7 @@ function! vimspector#Evaluate( expr ) abort return endif py3 _vimspector_session.ShowOutput( 'Console' ) - py3 _vimspector_session.EvaluateConsole( vim.eval( 'a:expr' ) ) + py3 _vimspector_session.EvaluateConsole( vim.eval( 'a:expr' ), True ) endfunction function! vimspector#EvaluateConsole( expr ) abort @@ -192,7 +192,7 @@ function! vimspector#EvaluateConsole( expr ) abort endif stopinsert setlocal nomodified - py3 _vimspector_session.EvaluateConsole( vim.eval( 'a:expr' ) ) + py3 _vimspector_session.EvaluateConsole( vim.eval( 'a:expr' ), False ) endfunction function! vimspector#ShowOutput( ... ) abort diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index 2c9a3c8..ccec07b 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -467,9 +467,10 @@ class DebugSession( object ): expression ) @IfConnected() - def EvaluateConsole( self, expression ): + def EvaluateConsole( self, expression, verbose ): self._outputView.Evaluate( self._stackTraceView.GetCurrentFrame(), - expression ) + expression, + verbose ) @IfConnected() def DeleteWatch( self ): diff --git a/python3/vimspector/output.py b/python3/vimspector/output.py index 71c81e9..eedefc1 100644 --- a/python3/vimspector/output.py +++ b/python3/vimspector/output.py @@ -260,14 +260,18 @@ class DAPOutputView( OutputView ): # Don't clear because output is probably still useful self._connection = None - def Evaluate( self, frame, expression ): - self._Print( 'Console', [ 'Evaluating: ' + expression ] ) + def Evaluate( self, frame, expression, verbose ): + if verbose: + self._Print( 'Console', f"Evaluating: { expression }" ) def print_result( message ): result = message[ 'body' ][ 'result' ] if result is None: result = '' - self._Print( 'Console', f' Result: { result }' ) + self._Print( 'Console', result.splitlines() ) + + def print_failure( reason, msg ): + self._Print( 'Console', reason.splitlines() ) request = { 'command': 'evaluate', @@ -280,4 +284,6 @@ class DAPOutputView( OutputView ): if frame: request[ 'arguments' ][ 'frameId' ] = frame[ 'id' ] - self._connection.DoRequest( print_result, request ) + self._connection.DoRequest( print_result, + request, + print_failure ) diff --git a/tests/variables.test.vim b/tests/variables.test.vim index 733061f..d710864 100644 --- a/tests/variables.test.vim +++ b/tests/variables.test.vim @@ -499,7 +499,7 @@ function Test_EvaluateConsole() call WaitForAssert( {-> \ assert_equal( \ [ - \ ' Result: 1' + \ '1' \ ], \ getbufline( bufnr( 'vimspector.Console' ), '$', '$' ) \ ) @@ -511,7 +511,7 @@ function Test_EvaluateConsole() \ assert_equal( \ [ \ 'Evaluating: t.i', - \ ' Result: 1' + \ '1' \ ], \ getbufline( bufnr( 'vimspector.Console' ), len-1, '$' ) \ ) @@ -522,3 +522,49 @@ function Test_EvaluateConsole() call vimspector#test#setup#Reset() %bwipe! endfunction + + +function Test_EvaluatePromptConsole() + let fn = 'testdata/cpp/simple/struct.cpp' + call s:StartDebugging( #{ fn: fn, line: 24, col: 1, launch: #{ + \ configuration: 'run-to-breakpoint' + \ } } ) + + " Make sure the Test t is initialised + call vimspector#StepOver() + call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 26, 1 ) + call vimspector#StepOver() + call vimspector#test#signs#AssertCursorIsAtLineInBuffer( fn, 27, 1 ) + + VimspectorShowOutput + call assert_equal( bufnr( 'vimspector.Console' ), + \ winbufnr( g:vimspector_session_windows.output ) ) + + call feedkeys( "it.i\", 'xt' ) + call WaitForAssert( {-> + \ assert_equal( + \ [ + \ '1' + \ ], + \ getbufline( bufnr( 'vimspector.Console' ), '$', '$' ) + \ ) + \ } ) + + let len = getbufinfo( 'vimspector.Console' )[ 0 ].linecount + + call WaitForAssert( {-> + \ assert_equal( + \ [ + \ '> t.i', + \ '', + \ '1' + \ ], + \ getbufline( bufnr( 'vimspector.Console' ), len-2, '$' ) + \ ) + \ } ) + call vimspector#test#signs#AssertCursorIsAtLineInBuffer( + \ 'vimspector.Console', len, v:null ) + + call vimspector#test#setup#Reset() + %bwipe! +endfunction