Minor improvements to console usage

Display failures and stop adding random text which makes the (very
useful) CodeLLDB interface look messy
This commit is contained in:
Ben Jackson 2020-10-10 16:04:55 +01:00
commit 1b9763a4fc
4 changed files with 63 additions and 10 deletions

View file

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

View file

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

View file

@ -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 = '<no 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 )

View file

@ -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\<CR>", '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