Repository: microsoft/ptvsd

Issue:
KeyError: 'context' on hover
I placed the mouse on a pandas data frame variable, and I got this error displayed in the console.

Visual Studio is showing the "A debugger operation is taking a long time to complete." and I had to hit cancel.

```
warning: Debugger speedups using cython not found. Run '"C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\Scripts\python.exe" "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\pydevd\setup_cython.py" build_ext --inplace' to build.
pydev debugger: starting

Backend TkAgg is interactive backend. Turning interactive mode on.
Downloading data from http://mlr.cs.umass.edu/ml/machine-learning-databases/spambase/spambase.data
Traceback (most recent call last):
  File "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\wrapper.py", line 505, in done
    fut.result()
  File "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\futures.py", line 39, in result
    reraise(self._exc_info)
  File "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\reraise3.py", line 11, in reraise
    raise exc_info[1].with_traceback(exc_info[2])
  File "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\futures.py", line 154, in callback
    x = it.send(fut.result())
  File "C:\Users\huvalo\source\repos\python-sklearn-classifier-cookiecutter11\env\lib\site-packages\ptvsd\wrapper.py", line 784, in on_evaluate
    if args['context'] == 'hover' and xvar['isErrorOnEval'] == 'True':
KeyError: 'context'
```



Discussion:
```
 1> DebugAdapterHost version: 15.7.20222.2 commit:14b9b7a72cfaa4eeaadbe629b1b02155d924f94b
 1> [DebugAdapter] --> C (initialize-1): {"command":"initialize","arguments":{"clientID":"visualstudio","adapterID":null,"locale":"en-US","linesStartAt1":true,"columnsStartAt1":true,"pathFormat":"path","supportsVariableType":true,"supportsRunInTerminalRequest":true,"supportsHandshakeRequest":true},"seq":1,"type":"request"}
 1> [DebugAdapter] <--   R (initialize-1): {"type": "response", "seq": 0, "request_seq": 1, "success": true, "command": "initialize", "message": "", "body": {"supportsExceptionInfoRequest": true, "supportsConfigurationDoneRequest": true, "supportsConditionalBreakpoints": true, "supportsSetVariable": true, "supportsExceptionOptions": true, "supportsEvaluateForHovers": true, "exceptionBreakpointFilters": [{"filter": "raised", "label": "Raised Exceptions", "default": "false"}, {"filter": "uncaught", "label": "Uncaught Exceptions", "default": "true"}]}}
 1> WARNING: Debug adapter does not support value formatting - user-configurable stack trace formatting will be unavailable.
 1> [DebugAdapter] <--   E (initialized): {"type": "event", "seq": 1, "event": "initialized", "body": {}}
 
 1> [DebugAdapter] <--   R (launch-2): {"type": "response", "seq": 2, "request_seq": 2, "success": true, "command": "launch", "message": "", "body": {}}
 1> [DebugAdapter] --> C (setBreakpoints-3): {"command":"setBreakpoints","arguments":{"source":{"path":"c:\\Users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py","sources":[],"checksums":[]},"breakpoints":[{"line":40,"column":1},{"line":42,"column":1},{"line":107,"column":1}],"lines":[40,42,107]},"seq":3,"type":"request"}
 1> [DebugAdapter] --> C (setExceptionBreakpoints-4): {"command":"setExceptionBreakpoints","arguments":{"filters":[],"exceptionOptions":[{"path":[{"names":["Python Exceptions"]}],"breakMode":"userUnhandled"},{"path":[{"names":["Python Exceptions"]},{"names":["KeyError","AttributeError","IndexError","StopIteration","GeneratorExit"]}],"breakMode":"unhandled"}]},"seq":4,"type":"request"}
 1> [DebugAdapter] <--   R (setBreakpoints-3): {"type": "response", "seq": 3, "request_seq": 3, "success": true, "command": "setBreakpoints", "message": "", "body": {"breakpoints": [{"id": 1, "verified": true, "line": 40}, {"id": 2, "verified": true, "line": 42}, {"id": 3, "verified": true, "line": 107}]}}
 1> [DebugAdapter] <--   R (setExceptionBreakpoints-4): {"type": "response", "seq": 4, "request_seq": 4, "success": true, "command": "setExceptionBreakpoints", "message": "", "body": {}}
 1> [DebugAdapter] --> C (configurationDone-5): {"command":"configurationDone","arguments":{},"seq":5,"type":"request"}
 1> [DebugAdapter] <--   R (configurationDone-5): {"type": "response", "seq": 5, "request_seq": 5, "success": true, "command": "configurationDone", "message": "", "body": {}}
 1> [DebugAdapter] <--   E (process): {"type": "event", "seq": 6, "event": "process", "body": {"name": "C:\\Users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py", "systemProcessId": 21432, "isLocalProcess": true, "startMethod": "launch"}}
 1> [DebugAdapter] <--   E (thread): {"type": "event", "seq": 7, "event": "thread", "body": {"reason": "started", "threadId": 1}}
 1> [DebugAdapter] <--   E (stopped): {"type": "event", "seq": 8, "event": "stopped", "body": {"reason": "breakpoint", "threadId": 1, "text": null, "description": null}}
 1> [DebugAdapter] --> C (threads-6): {"command":"threads","arguments":{},"seq":6,"type":"request"}
 1> [DebugAdapter] <--   R (threads-6): {"type": "response", "seq": 9, "request_seq": 6, "success": true, "command": "threads", "message": "", "body": {"threads": [{"id": 1, "name": "MainThread"}]}}
 1> [DebugAdapter] --> C (stackTrace-7): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1},"seq":7,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-7): {"type": "response", "seq": 10, "request_seq": 7, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 1, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 40, "column": 1}], "totalFrames": 6}}
 1> [DebugAdapter] --> C (stackTrace-8): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1000},"seq":8,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-8): {"type": "response", "seq": 11, "request_seq": 8, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 1, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 40, "column": 1}, {"id": 2, "name": "execfile", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\_pydev_imps\\_pydev_execfile.py"}, "line": 25, "column": 1}, {"id": 3, "name": "run", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1035, "column": 1}, {"id": 4, "name": "main", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1628, "column": 1}, {"id": 5, "name": "debug", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\debugger.py"}, "line": 33, "column": 1}, {"id": 6, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\appdata\\local\\microsoft\\visualstudio\\15.0_fcc7f51cexp\\extensions\\microsoft corporation\\python\\3.0\\ptvsd_launcher.py"}, "line": 96, "column": 1}], "totalFrames": 6}}
 1> [DebugAdapter] --> C (scopes-9): {"command":"scopes","arguments":{"frameId":1},"seq":9,"type":"request"}
 1> [DebugAdapter] <--   R (scopes-9): {"type": "response", "seq": 12, "request_seq": 9, "success": true, "command": "scopes", "message": "", "body": {"scopes": [{"name": "Locals", "expensive": false, "variablesReference": 1}]}}
 1> [DebugAdapter] --> C (variables-10): {"command":"variables","arguments":{"variablesReference":1,"timeout":1000},"seq":10,"type":"request"}
 1> [DebugAdapter] <--   R (variables-10): {"type": "response", "seq": 13, "request_seq": 10, "success": true, "command": "variables", "message": "", "body": {"variables": [{"name": "URL", "type": "str", "value": "'http://mlr.cs.umass.edu/ml/machine-learning-databases/spambase/spambase.data'"}, {"name": "__builtins__", "type": "dict", "value": "{'ArithmeticError': <class 'ArithmeticError'>, 'AssertionError': <class 'AssertionError'>, 'AttributeError': <class 'AttributeError'>, 'BaseException': <class 'BaseException'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'BufferError': <class 'BufferError'>, 'BytesWarning': <class 'BytesWarning'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAb...tedError'>, 'ConnectionError': <class 'ConnectionError'>, 'ConnectionRefusedError': <class 'ConnectionRe...sedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'DeprecationWarning': <class 'DeprecationWarning'>, ...}", "variablesReference": 2}, {"name": "__doc__", "type": "str", "value": "\"\\nThis script performs the basic process for applying a machine learning\\nalgorithm to a dataset using Python libraries.\\n\\nThe four steps are:\\n   1. Download a dataset (using pandas)\\n   2. Process the numeric data (using numpy)\\n   3. Train and evaluate learners (using scikit-learn)\\n   4. Plot and compare results (using matplotlib)\\n\\n\\nThe data is downloaded from URL, which is defined below. As is normal\\nfor machine learning problems, the nature of the source data affects\\nthe entire solution. When you change URL to refer to your own data, you\\nwill need to review the data processing steps to ensure they remain\\ncorrect.\\n\\n============\\nExample Data\\n============\\nThe example is from http://mlr.cs.umass.edu/ml/datasets/Spambase\\nIt contains pre-processed metrics, such as the frequency of certain\\nwords and letters, from a collection of emails. A classification for\\neach one indicating 'spam' or 'not spam' is in the final column.\\nSee the linked page for full details of the data..."}, {"name": "__file__", "type": "str", "value": "'C:\\\\Users\\\\huvalo\\\\source\\\\repos\\\\python-sklearn-classifier-cookiecutter11\\\\classifier.py'"}, {"name": "__loader__", "type": "SourceFileLoader", "value": "<_frozen_importlib_external.SourceFileLoader object at 0x000002126F6AF470>", "variablesReference": 3}, {"name": "__name__", "type": "str", "value": "'__main__'"}, {"name": "__package__", "type": "NoneType", "value": "None"}, {"name": "__spec__", "type": "NoneType", "value": "None"}]}}
 1> [DebugAdapter] --> C (continue-11): {"command":"continue","arguments":{"threadId":1},"seq":11,"type":"request"}
 1> [DebugAdapter] <--   R (continue-11): {"type": "response", "seq": 14, "request_seq": 11, "success": true, "command": "continue", "message": "", "body": {}}
 1> [DebugAdapter] <--   E (continued): {"type": "event", "seq": 15, "event": "continued", "body": {"threadId": 1}}
 1> [DebugAdapter] <--   E (stopped): {"type": "event", "seq": 16, "event": "stopped", "body": {"reason": "breakpoint", "threadId": 1, "text": null, "description": null}}
 1> [DebugAdapter] --> C (threads-12): {"command":"threads","arguments":{},"seq":12,"type":"request"}
 1> [DebugAdapter] <--   R (threads-12): {"type": "response", "seq": 17, "request_seq": 12, "success": true, "command": "threads", "message": "", "body": {"threads": [{"id": 1, "name": "MainThread"}]}}
 1> [DebugAdapter] --> C (stackTrace-13): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1},"seq":13,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-13): {"type": "response", "seq": 18, "request_seq": 13, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 7, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 42, "column": 1}], "totalFrames": 6}}
 1> [DebugAdapter] --> C (stackTrace-14): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1000},"seq":14,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-14): {"type": "response", "seq": 19, "request_seq": 14, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 7, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 42, "column": 1}, {"id": 8, "name": "execfile", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\_pydev_imps\\_pydev_execfile.py"}, "line": 25, "column": 1}, {"id": 9, "name": "run", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1035, "column": 1}, {"id": 10, "name": "main", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1628, "column": 1}, {"id": 11, "name": "debug", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\debugger.py"}, "line": 33, "column": 1}, {"id": 12, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\appdata\\local\\microsoft\\visualstudio\\15.0_fcc7f51cexp\\extensions\\microsoft corporation\\python\\3.0\\ptvsd_launcher.py"}, "line": 96, "column": 1}], "totalFrames": 6}}
 1> [DebugAdapter] --> C (scopes-15): {"command":"scopes","arguments":{"frameId":7},"seq":15,"type":"request"}
 1> [DebugAdapter] <--   R (scopes-15): {"type": "response", "seq": 20, "request_seq": 15, "success": true, "command": "scopes", "message": "", "body": {"scopes": [{"name": "Locals", "expensive": false, "variablesReference": 4}]}}
 1> [DebugAdapter] --> C (variables-16): {"command":"variables","arguments":{"variablesReference":4,"timeout":1000},"seq":16,"type":"request"}
 1> [DebugAdapter] <--   R (variables-16): {"type": "response", "seq": 21, "request_seq": 16, "success": true, "command": "variables", "message": "", "body": {"variables": [{"name": "URL", "type": "str", "value": "'http://mlr.cs.umass.edu/ml/machine-learning-databases/spambase/spambase.data'"}, {"name": "__builtins__", "type": "dict", "value": "{'ArithmeticError': <class 'ArithmeticError'>, 'AssertionError': <class 'AssertionError'>, 'AttributeError': <class 'AttributeError'>, 'BaseException': <class 'BaseException'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'BufferError': <class 'BufferError'>, 'BytesWarning': <class 'BytesWarning'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAb...tedError'>, 'ConnectionError': <class 'ConnectionError'>, 'ConnectionRefusedError': <class 'ConnectionRe...sedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'DeprecationWarning': <class 'DeprecationWarning'>, ...}", "variablesReference": 5}, {"name": "__doc__", "type": "str", "value": "\"\\nThis script performs the basic process for applying a machine learning\\nalgorithm to a dataset using Python libraries.\\n\\nThe four steps are:\\n   1. Download a dataset (using pandas)\\n   2. Process the numeric data (using numpy)\\n   3. Train and evaluate learners (using scikit-learn)\\n   4. Plot and compare results (using matplotlib)\\n\\n\\nThe data is downloaded from URL, which is defined below. As is normal\\nfor machine learning problems, the nature of the source data affects\\nthe entire solution. When you change URL to refer to your own data, you\\nwill need to review the data processing steps to ensure they remain\\ncorrect.\\n\\n============\\nExample Data\\n============\\nThe example is from http://mlr.cs.umass.edu/ml/datasets/Spambase\\nIt contains pre-processed metrics, such as the frequency of certain\\nwords and letters, from a collection of emails. A classification for\\neach one indicating 'spam' or 'not spam' is in the final column.\\nSee the linked page for full details of the data..."}, {"name": "__file__", "type": "str", "value": "'C:\\\\Users\\\\huvalo\\\\source\\\\repos\\\\python-sklearn-classifier-cookiecutter11\\\\classifier.py'"}, {"name": "__loader__", "type": "SourceFileLoader", "value": "<_frozen_importlib_external.SourceFileLoader object at 0x000002126F6AF470>", "variablesReference": 6}, {"name": "__name__", "type": "str", "value": "'__main__'"}, {"name": "__package__", "type": "NoneType", "value": "None"}, {"name": "__spec__", "type": "NoneType", "value": "None"}, {"name": "np", "type": "module", "value": "<module 'numpy' from 'C:\\\\Users\\\\huvalo\\\\source\\\\repos\\\\python-sklearn-classifier-cookiecutter11\\\\env\\\\lib\\\\site-packages\\\\numpy\\\\__init__.py'>", "variablesReference": 7}, {"name": "read_table", "type": "function", "value": "<function _make_parser_function.<locals>.parser_f at 0x0000021278090598>", "variablesReference": 8}]}}
 1> [DebugAdapter] --> C (continue-17): {"command":"continue","arguments":{"threadId":1},"seq":17,"type":"request"}
 1> [DebugAdapter] <--   R (continue-17): {"type": "response", "seq": 22, "request_seq": 17, "success": true, "command": "continue", "message": "", "body": {}}
 1> [DebugAdapter] <--   E (continued): {"type": "event", "seq": 23, "event": "continued", "body": {"threadId": 1}}
 1> [DebugAdapter] <--   E (stopped): {"type": "event", "seq": 24, "event": "stopped", "body": {"reason": "breakpoint", "threadId": 1, "text": null, "description": null}}
 1> [DebugAdapter] --> C (threads-18): {"command":"threads","arguments":{},"seq":18,"type":"request"}
 1> [DebugAdapter] <--   R (threads-18): {"type": "response", "seq": 25, "request_seq": 18, "success": true, "command": "threads", "message": "", "body": {"threads": [{"id": 1, "name": "MainThread"}]}}
 1> [DebugAdapter] --> C (stackTrace-19): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1},"seq":19,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-19): {"type": "response", "seq": 26, "request_seq": 19, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 13, "name": "download_data", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 107, "column": 1}], "totalFrames": 7}}
 1> [DebugAdapter] --> C (stackTrace-20): {"command":"stackTrace","arguments":{"threadId":1,"startFrame":0,"levels":1000},"seq":20,"type":"request"}
 1> [DebugAdapter] <--   R (stackTrace-20): {"type": "response", "seq": 27, "request_seq": 20, "success": true, "command": "stackTrace", "message": "", "body": {"stackFrames": [{"id": 13, "name": "download_data", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 107, "column": 1}, {"id": 14, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\classifier.py"}, "line": 278, "column": 1}, {"id": 15, "name": "execfile", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\_pydev_imps\\_pydev_execfile.py"}, "line": 25, "column": 1}, {"id": 16, "name": "run", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1035, "column": 1}, {"id": 17, "name": "main", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\pydevd\\pydevd.py"}, "line": 1628, "column": 1}, {"id": 18, "name": "debug", "source": {"path": "c:\\users\\huvalo\\source\\repos\\python-sklearn-classifier-cookiecutter11\\env\\lib\\site-packages\\ptvsd\\debugger.py"}, "line": 33, "column": 1}, {"id": 19, "name": "<module>", "source": {"path": "c:\\users\\huvalo\\appdata\\local\\microsoft\\visualstudio\\15.0_fcc7f51cexp\\extensions\\microsoft corporation\\python\\3.0\\ptvsd_launcher.py"}, "line": 96, "column": 1}], "totalFrames": 7}}
 1> [DebugAdapter] --> C (scopes-21): {"command":"scopes","arguments":{"frameId":13},"seq":21,"type":"request"}
 1> [DebugAdapter] <--   R (scopes-21): {"type": "response", "seq": 28, "request_seq": 21, "success": true, "command": "scopes", "message": "", "body": {"scopes": [{"name": "Locals", "expensive": false, "variablesReference": 9}]}}
 1> [DebugAdapter] --> C (variables-22): {"command":"variables","arguments":{"variablesReference":9,"timeout":1000},"seq":22,"type":"request"}
 1> [DebugAdapter] <--   R (variables-22): {"type": "response", "seq": 29, "request_seq": 22, "success": true, "command": "variables", "message": "", "body": {"variables": [{"name": "frame", "type": "DataFrame", "value": "<DataFrame, len() = 4601>", "variablesReference": 10}]}}
 1> [DebugAdapter] --> C (evaluate-23): {"command":"evaluate","arguments":{"expression":"frame","frameId":13,"timeout":1500},"seq":23,"type":"request"}
```

I'm using the cookiecutter python-sklearn-classifier-cookiecutter and I put a breakpoint on line 107 `return frame` and I put the mouse on `frame`.

Resolving patch:
diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py
--- a/ptvsd/wrapper.py
+++ b/ptvsd/wrapper.py
@@ -781,7 +781,9 @@ def on_evaluate(self, request, args):
         xml = untangle.parse(resp_args).xml
         xvar = xml.var
 
-        if args['context'] == 'hover' and xvar['isErrorOnEval'] == 'True':
+        context = args.get('context', '')
+        is_eval_error = xvar.get('isErrorOnEval', '')
+        if context == 'hover' and is_eval_error =='True':
             self.send_response(
                 request,
                 result=None,


Test patch: