From 9be0f43a5fba576124cd194239293d82b3d583f9 Mon Sep 17 00:00:00 2001 From: tinmarino Date: Wed, 15 Jan 2020 10:28:50 -0300 Subject: [PATCH] Feature: Silent Errors if not connected --- python3/vimspector/debug_session.py | 26 ++++++++++++++++++++++---- python3/vimspector/utils.py | 13 +++++++++---- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index 1cf7d52..8eec9f4 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -20,6 +20,7 @@ import os import shlex import subprocess import traceback +import functools import vim from vimspector import ( breakpoints, @@ -252,9 +253,21 @@ class DebugSession( object ): self._StartWithConfiguration( self._configuration, self._adapter ) + def IfConnected( fct ): + """Decorator, call fct if self._connected else echo warning""" + @functools.wraps( fct ) + def wrapper(self, *args, **kwargs): + if not self._connection: + utils.UserMessage( + 'Vimspector not connected, start a debug session first', + persist=True, error=True ) + return + return fct(self, *args, **kwargs) + return wrapper + + @IfConnected def OnChannelData( self, data ): - if self._connection: - self._connection.OnData( data ) + self._connection.OnData( data ) def OnServerStderr( self, data ): @@ -263,14 +276,15 @@ class DebugSession( object ): self._outputView.Print( 'server', data ) + @IfConnected def OnRequestTimeout( self, timer_id ): - if self._connection: - self._connection.OnRequestTimeout( timer_id ) + self._connection.OnRequestTimeout( timer_id ) def OnChannelClosed( self ): # TODO: Not calld self._connection = None + @IfConnected def Stop( self ): self._logger.debug( "Stop debug adapter with no callback" ) self._StopDebugAdapter() @@ -302,6 +316,7 @@ class DebugSession( object ): # make sure that we're displaying signs in any still-open buffers self._breakpoints.UpdateUI() + @IfConnected def StepOver( self ): if self._stackTraceView.GetCurrentThreadId() is None: return @@ -313,6 +328,7 @@ class DebugSession( object ): }, } ) + @IfConnected def StepInto( self ): if self._stackTraceView.GetCurrentThreadId() is None: return @@ -324,6 +340,7 @@ class DebugSession( object ): }, } ) + @IfConnected def StepOut( self ): if self._stackTraceView.GetCurrentThreadId() is None: return @@ -341,6 +358,7 @@ class DebugSession( object ): else: self.Start() + @IfConnected def Pause( self ): self._stackTraceView.Pause() diff --git a/python3/vimspector/utils.py b/python3/vimspector/utils.py index d17492b..ba930ba 100644 --- a/python3/vimspector/utils.py +++ b/python3/vimspector/utils.py @@ -228,16 +228,21 @@ def Escape( msg ): return msg.replace( "'", "''" ) -def UserMessage( msg, persist=False ): +def UserMessage( msg, persist=False, error=False): if persist: _logger.warning( 'User Msg: ' + msg ) else: _logger.info( 'User Msg: ' + msg ) - vim.command( 'redraw' ) cmd = 'echom' if persist else 'echo' - for line in msg.split( '\n' ): - vim.command( "{0} '{1}'".format( cmd, Escape( line ) ) ) + vim.command( 'redraw' ) + try: + if error: + vim.command("echohl WarningMsg") + for line in msg.split( '\n' ): + vim.command( "{0} '{1}'".format( cmd, Escape( line ) ) ) + finally: + vim.command('echohl None') if error else None vim.command( 'redraw' )