Skip to content

Took 2 minutes to respond to on_hover(), from 15:56:14 until 15:58:38 #257

Open

Description

@evandrocoan

Originally posted on: sublimelsp/LSP#255 python-language-server hanged Sublime Text by several seconds on file close event

@tomv564 sublimelsp/LSP#255 (comment) If it is the linter causing the slowness, I also don't believe that should stop pyls from responding to other requests.

This caused the LSP plugin for Sublime Text to hang completely for the 2 minutes the server did not responded to the on_hover request. I do not think there is an issue here if that is what does take to compute everything. Unless it doesn't.

This was the LSP for Sublime Text log. Sadly it does not have the timestamp. I am going to open a feature request for:

LSP: initialize on open 2 F:\SublimeText\Data\Packages\LSP\plugin\core\clients.py
LSP: initialize on open 2 F:\SublimeText\Data\Packages\LSP\plugin\core\clients.py
LSP:  --> textDocument/hover
LSP:  --> textDocument/didChange
LSP:  --> textDocument/signatureHelp
LSP:  --> textDocument/didChange
LSP: <--  textDocument/publishDiagnostics
LSP:  --> textDocument/didChange
LSP: <--  textDocument/publishDiagnostics
LSP:  --> textDocument/hover
LSP: initialize on open 2 F:\SublimeText\Data\Packages\LSP\plugin\core\clients.py
LSP: initialize on open 2 F:\SublimeText\Data\Packages\LSP\plugin\core\clients.py
LSP:  --> textDocument/didChange
LSP: <--  textDocument/publishDiagnostics
LSP:  --> textDocument/hover
LSP:  --> textDocument/hover
LSP:  --> textDocument/completion
LSP:  --> textDocument/didChange
LSP:  --> textDocument/hover
LSP: <--  textDocument/publishDiagnostics
LSP: initialize on open 2 F:\SublimeText\Data\Packages\LSP\plugin\core\clients.py

Log:

Details

2018-02-04 15:56:14,325 DEBUG pyls.config.config:processmessage:137   pyls_completions [hook]
      config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): []
      workspace: Workspace. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _root_uri_scheme: file, _lang_server: PythonLanguageServer. config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): [], _dispatchers: [], __rope: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}, _docs(file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py): Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 4, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}
      document: Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 4, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}
      position: {'line': 49, 'character': 20}

2018-02-04 15:58:37,344 DEBUG pyls.config.config:processmessage:137   finish pyls_completions --> [[{'label': 'self', 'kind': 18, 'detail': 'local self', 'documentation': '', 'sortText': 'aself'}, {'label': 'set_config_ready', 'kind': 3, 'detail': 'global set_config_ready', 'documentation': '', 'sortText': 'aset_config_ready'}, {'label': 'set_config_starting', 'kind': 3, 'detail': 'global set_config_starting', 'documentation': '', 'sortText': 'aset_config_starting'}, {'label': 'set_config_stopping', 'kind': 3, 'detail': 'global set_config_stopping', 'documentation': '', 'sortText': 'aset_config_stopping'}, {'label': 'sublime', 'kind': 9, 'detail': 'imported sublime', 'documentation': '', 'sortText': 'asublime'}, {'label': 'set', 'kind': 7, 'detail': 'builtin set', 'documentation': 'set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.', 'sortText': 'yset'}, {'label': 'slice', 'kind': 7, 'detail': 'builtin slice', 'documentation': 'slice(stop)\nslice(start, stop[, step])\n\nCreate a slice object.  This is used for extended slicing (e.g. a[0:10:2]).', 'sortText': 'yslice'}, {'label': 'staticmethod', 'kind': 7, 'detail': 'builtin staticmethod', 'documentation': 'staticmethod(function) -> method\n\nConvert a function to be a static method.\n\nA static method does not receive an implicit first argument.\nTo declare a static method, use this idiom:\n\n     class C:\n         @staticmethod\n         def f(arg1, arg2, ...):\n             ...\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()).  The instance is ignored except for its class.\n\nStatic methods in Python are similar to those found in Java or C++.\nFor a more advanced concept, see the classmethod builtin.', 'sortText': 'ystaticmethod'}, {'label': 'str', 'kind': 7, 'detail': 'builtin str', 'documentation': "str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.", 'sortText': 'ystr'}, {'label': 'setattr', 'kind': 3, 'detail': 'builtin setattr', 'documentation': "Sets the named attribute on the given object to the specified value.\n\nsetattr(x, 'y', v) is equivalent to ``x.y = v''", 'sortText': 'ysetattr'}, {'label': 'sorted', 'kind': 3, 'detail': 'builtin sorted', 'documentation': 'Return a new list containing all items from the iterable in ascending order.\n\nA custom key function can be supplied to customize the sort order, and the\nreverse flag can be set to request the result in descending order.', 'sortText': 'ysorted'}, {'label': 'sum', 'kind': 3, 'detail': 'builtin sum', 'documentation': "Return the sum of a 'start' value (default: 0) plus an iterable of numbers\n\nWhen the iterable is empty, return the start value.\nThis function is intended specifically for use with numeric values and may\nreject non-numeric types.", 'sortText': 'ysum'}, {'label': 'super', 'kind': 3, 'detail': 'builtin super', 'documentation': 'super() -> same as super(__class__, <first argument>)\nsuper(type) -> unbound super object\nsuper(type, obj) -> bound super object; requires isinstance(obj, type)\nsuper(type, type2) -> bound super object; requires issubclass(type2, type)\nTypical use to call a cooperative superclass method:\nclass C(B):\n    def meth(self, arg):\n        super().meth(arg)\nThis works for class methods too:\nclass C(B):\n    @classmethod\n    def cmeth(cls, arg):\n        super().cmeth(arg)\n', 'sortText': 'ysuper'}], [{'label': 'self', 'kind': 6, 'detail': '__main__.has_client_with_capability', 'documentation': "LspTextCommand(self, view, capability='')\n\n", 'sortText': 'aself', 'insertText': 'self'}, {'label': 'Set', 'kind': 7, 'detail': '__main__', 'documentation': '', 'sortText': 'aSet', 'insertText': 'Set'}, {'label': 'set', 'kind': 7, 'detail': '', 'documentation': 'set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.', 'sortText': 'aset', 'insertText': 'set'}, {'label': 'set_config_ready(window, config_name, client)', 'kind': 3, 'detail': '__main__', 'documentation': "set_config_ready(window: sublime.Window, config_name: str, client:\n'Client')\n\n", 'sortText': 'aset_config_ready', 'insertText': 'set_config_ready'}, {'label': 'set_config_starting(window, config_name)', 'kind': 3, 'detail': '__main__', 'documentation': 'set_config_starting(window: sublime.Window, config_name: str)\n\n', 'sortText': 'aset_config_starting', 'insertText': 'set_config_starting'}, {'label': 'set_config_stopping(window, config_name)', 'kind': 3, 'detail': '__main__', 'documentation': 'set_config_stopping(window: sublime.Window, config_name: str)\n\n', 'sortText': 'aset_config_stopping', 'insertText': 'set_config_stopping'}, {'label': 'setattr(obj, name, value)', 'kind': 3, 'detail': '', 'documentation': "Sets the named attribute on the given object to the specified value.\n\nsetattr(x, 'y', v) is equivalent to ``x.y = v''", 'sortText': 'asetattr', 'insertText': 'setattr'}, {'label': 'slice', 'kind': 7, 'detail': '', 'documentation': 'slice(stop)\nslice(start, stop[, step])\n\nCreate a slice object.\xa0\xa0This is used for extended slicing (e.g. a[0:10:2]).', 'sortText': 'aslice', 'insertText': 'slice'}, {'label': 'sorted(iterable, cmp, key, reverse)', 'kind': 3, 'detail': '', 'documentation': "sorted(iterable, cmp=None, key=None, reverse=False)\n\nBuilt-in functions, exceptions, and other objects.\n\nNoteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", 'sortText': 'asorted', 'insertText': 'sorted'}, {'label': 'staticmethod', 'kind': 7, 'detail': '', 'documentation': 'staticmethod(function) -> method\n\nConvert a function to be a static method.\n\nA static method does not receive an implicit first argument.\nTo declare a static method, use this idiom:\n\n\xa0\xa0\xa0\xa0 class C:\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0 @staticmethod\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0 def f(arg1, arg2, ...):\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0 ...\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()).\xa0\xa0The instance is ignored except for its class.\n\nStatic methods in Python are similar to those found in Java or C++.\nFor a more advanced concept, see the classmethod builtin.', 'sortText': 'astaticmethod', 'insertText': 'staticmethod'}, {'label': 'StopAsyncIteration', 'kind': 7, 'detail': '', 'documentation': 'Signal the end from iterator.__anext__().', 'sortText': 'aStopAsyncIteration', 'insertText': 'StopAsyncIteration'}, {'label': 'StopIteration', 'kind': 7, 'detail': '', 'documentation': 'Signal the end from iterator.__next__().', 'sortText': 'aStopIteration', 'insertText': 'StopIteration'}, {'label': 'str', 'kind': 7, 'detail': '', 'documentation': "str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.", 'sortText': 'astr', 'insertText': 'str'}, {'label': 'sublime', 'kind': 9, 'detail': '__main__', 'documentation': '', 'sortText': 'asublime', 'insertText': 'sublime'}, {'label': 'sum(iterable, start)', 'kind': 3, 'detail': '', 'documentation': "Return the sum of a 'start' value (default: 0) plus an iterable of numbers\n\nWhen the iterable is empty, return the start value.\nThis function is intended specifically for use with numeric values and may\nreject non-numeric types.", 'sortText': 'asum', 'insertText': 'sum'}, {'label': 'super', 'kind': 7, 'detail': '', 'documentation': 'super() -> same as super(__class__, <first argument>)\nsuper(type) -> unbound super object\nsuper(type, obj) -> bound super object; requires isinstance(obj, type)\nsuper(type, type2) -> bound super object; requires issubclass(type2, type)\nTypical use to call a cooperative superclass method:\nclass C(B):\n\xa0\xa0\xa0\xa0def meth(self, arg):\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0super().meth(arg)\nThis works for class methods too:\nclass C(B):\n\xa0\xa0\xa0\xa0@classmethod\n\xa0\xa0\xa0\xa0def cmeth(cls, arg):\n\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0super().cmeth(arg)', 'sortText': 'asuper', 'insertText': 'super'}, {'label': 'SyntaxError', 'kind': 7, 'detail': '', 'documentation': 'Invalid syntax.', 'sortText': 'aSyntaxError', 'insertText': 'SyntaxError'}, {'label': 'SyntaxWarning', 'kind': 7, 'detail': '', 'documentation': 'Base class for warnings about dubious syntax.', 'sortText': 'aSyntaxWarning', 'insertText': 'SyntaxWarning'}, {'label': 'SystemError', 'kind': 7, 'detail': '', 'documentation': 'Internal error in the Python interpreter.\n\nPlease report this to the Python maintainer, along with the traceback,\nthe Python version, and the hardware/OS platform and version.', 'sortText': 'aSystemError', 'insertText': 'SystemError'}, {'label': 'SystemExit', 'kind': 7, 'detail': '', 'documentation': 'Request to exit from the interpreter.', 'sortText': 'aSystemExit', 'insertText': 'SystemExit'}]] [hook]

2018-02-04 15:58:37,349 DEBUG pyls.server:handle:35 Got message: b'{"jsonrpc": "2.0", "method": "textDocument/didChange", "params": {"textDocument": {"uri": "file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py", "version": 5}, "contentChanges": [{"text": "import sublime\\n\\nfrom sublime_plugin import TextCommand\\n\\nfrom .logging import debug, exception_log\\nfrom .configurations import config_for_scope, is_supported_view\\nfrom .protocol import Request\\nfrom .workspace import get_project_path\\n\\n# typing only\\nfrom .rpc import Client\\nfrom .settings import ClientConfig\\nassert Client and ClientConfig\\n\\n\\ntry:\\n    from typing import Any, List, Dict, Tuple, Callable, Optional, Set\\n    assert Any and List and Dict and Tuple and Callable and Optional and Set\\nexcept ImportError:\\n    pass\\n\\n\\nclients_by_window = {}  # type: Dict[int, Dict[str, ConfigState]]\\n\\n\\nclass ClientStates(object):\\n    STARTING = 0\\n    READY = 1\\n    STOPPING = 2\\n\\n\\nclass ConfigState(object):\\n\\n    def __init__(self, state=ClientStates.STARTING, client=None):\\n        self.state = state\\n        self.client = client\\n\\n\\nclass LspTextCommand(TextCommand):\\n    def __init__(self, view, capability=\'\'):\\n        super().__init__(view)\\n        self.capability = capability\\n\\n    def is_visible(self):\\n        return is_supported_view(self.view)\\n\\n    def has_client_with_capability(self):\\n        client = client_for_view(self.view)\\n        if client and client.has_capability(self.capability):\\n            return tr\\n        return False\\n\\n\\ndef window_configs(window: sublime.Window) -> \'Dict[str, ConfigState]\':\\n    if window.id() in clients_by_window:\\n        return clients_by_window[window.id()]\\n    else:\\n        # debug(\\"no configs found for window\\", window.id())\\n        return {}\\n\\n\\ndef is_ready_window_config(window: sublime.Window, config_name: str):\\n    configs = window_configs(window)\\n\\n    if config_name not in configs:\\n        return False\\n\\n    if configs[config_name].state == ClientStates.READY:\\n        return True\\n\\n    return False\\n\\n\\n# Startup\\n\\ndef can_start_config(window: sublime.Window, config_name: str):\\n    return config_name not in window_configs(window)\\n\\n\\ndef set_config_starting(window: sublime.Window, config_name: str):\\n    clients_by_window.setdefault(window.id(), {})[config_name] = ConfigState()\\n\\n\\ndef clear_config_state(window: sublime.Window, config_name: str):\\n    configs = window_configs(window)\\n    del configs[config_name]\\n\\n\\ndef set_config_ready(window: sublime.Window, config_name: str, client: \'Client\'):\\n    window_configs(window)[config_name] = ConfigState(ClientStates.READY, client)\\n    debug(\\"{} client registered for window {}\\".format(config_name, window.id()))\\n\\n\\ndef set_config_stopping(window: sublime.Window, config_name: str):\\n    window_configs(window)[config_name].state = ClientStates.STOPPING\\n\\n\\ndef client_for_closed_view(view: sublime.View) -> \'Optional[Client]\':\\n    return _client_for_view_and_window(view, sublime.active_window())\\n\\n\\ndef client_for_view(view: sublime.View) -> \'Optional[Client]\':\\n    return _client_for_view_and_window(view, view.window())\\n\\n\\ndef _client_for_view_and_window(view: sublime.View, window: \'Optional[sublime.Window]\') -> \'Optional[Client]\':\\n    if not window:\\n        debug(\\"no window for view\\", view.file_name())\\n        return None\\n\\n    config = config_for_scope(view)\\n    if not config:\\n        debug(\\"config not available for view\\", view.file_name())\\n        return None\\n\\n    window_config_states = window_configs(window)\\n    if config.name not in window_config_states:\\n        debug(config.name, \\"not available for view\\",\\n              view.file_name(), \\"in window\\", window.id())\\n        return None\\n    else:\\n        config_state = window_config_states[config.name]\\n        if config_state.client:\\n            return config_state.client\\n        else:\\n            debug(config.name, \\"in state\\", config_state.state, \\" for view\\",\\n                  view.file_name(), \\"in window\\", window.id())\\n            return None\\n\\n\\n# Shutdown\\n\\ndef remove_window_client(window: sublime.Window, config_name: str):\\n    del clients_by_window[window.id()][config_name]\\n\\n\\ndef unload_all_clients():\\n    for window in sublime.windows():\\n        for config_name, config_state in window_configs(window).items():\\n            if config_state.client:\\n                if config_state.state == ClientStates.STARTING:\\n                    unload_client(config_state.client, window.id(), config_name)\\n                else:\\n                    debug(\'ignoring unload of config in state\', config_state.state)\\n            else:\\n                debug(\'ignoring unload of config without client\')\\n\\n\\nclosing_window_ids = set()  # type: Set[int]\\n\\n\\ndef check_window_unloaded():\\n    global clients_by_window\\n    open_window_ids = list(window.id() for window in sublime.windows())\\n    iterable_clients_by_window = clients_by_window.copy()\\n    for id, window_clients in iterable_clients_by_window.items():\\n        if id not in open_window_ids and window_clients:\\n            if id not in closing_window_ids:\\n                closing_window_ids.add(id)\\n                debug(\\"window closed\\", id)\\n    for closed_window_id in closing_window_ids:\\n        unload_window_clients(closed_window_id)\\n    closing_window_ids.clear()\\n\\n\\ndef unload_window_clients(window_id: int):\\n    if window_id in clients_by_window:\\n        window_configs = clients_by_window[window_id]\\n        for config_name, state in window_configs.items():\\n            window_configs[config_name].state = ClientStates.STOPPING\\n            debug(\\"unloading client\\", config_name, state.client)\\n            unload_client(state.client, window_id, config_name)\\n\\n\\ndef unload_old_clients(window: sublime.Window):\\n    project_path = get_project_path(window)\\n    configs = window_configs(window)\\n    clients_to_unload = {}\\n    for config_name, state in configs.items():\\n        if state.client and state.state == ClientStates.READY and state.client.get_project_path() != project_path:\\n            debug(\'unload\', config_name, \'project path changed from\',\\n                  state.client.get_project_path(), \'to\', project_path)\\n            clients_to_unload[config_name] = state.client\\n\\n    for config_name, client in clients_to_unload.items():\\n        set_config_stopping(window, config_name)\\n        unload_client(client, window.id(), config_name)\\n\\n\\nclients_unloaded_handler = None  # type: Optional[Callable]\\n\\n\\ndef register_clients_unloaded_handler(handler: \'Callable\'):\\n    global clients_unloaded_handler\\n    clients_unloaded_handler = handler\\n\\n\\ndef on_shutdown(client: Client, window_id: int, config_name: str, response):\\n    try:\\n        client.exit()\\n        del clients_by_window[window_id][config_name]\\n\\n        if not clients_by_window[window_id]:\\n            debug(\\"all clients unloaded\\")\\n            if clients_unloaded_handler:\\n                clients_unloaded_handler(window_id)\\n\\n    except Exception as err:\\n        exception_log(\\"Error exiting server\\", err)\\n\\n\\ndef unload_client(client: Client, window_id: int, config_name: str):\\n    client.send_request(Request.shutdown(), lambda response: on_shutdown(client, window_id, config_name, response))\\n"}]}}'
2018-02-04 15:58:37,364 DEBUG pyls.server:handle:35 Got message: b'{"jsonrpc": "2.0", "id": 25, "method": "textDocument/hover", "params": {"textDocument": {"uri": "file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py"}, "position": {"line": 48, "character": 11}}}'
2018-02-04 15:58:37,368 DEBUG pyls.python_ls:_hook:48 PythonLanguageServer, self.config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): []
2018-02-04 15:58:37,376 DEBUG pyls.config.config:processmessage:137   pyls_hover [hook]
      config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): []
      workspace: Workspace. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _root_uri_scheme: file, _lang_server: PythonLanguageServer. config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): [], _dispatchers: [], __rope: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}, _docs(file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py): Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 5, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}
      document: Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 5, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}
      position: {'line': 48, 'character': 11}

2018-02-04 15:58:37,392 DEBUG parso.python.diff:update:121 diff parser start
2018-02-04 15:58:37,397 DEBUG parso.python.diff:update:132 diff parser calculated
2018-02-04 15:58:37,410 DEBUG parso.python.diff:update:133 diff: line_lengths old: 214, new: 214
2018-02-04 15:58:37,414 DEBUG parso.python.diff:update:137 diff equal old[1:49] new[1:49]
2018-02-04 15:58:37,418 DEBUG parso.python.diff:_copy_from_old_parser:208 diff actually copy 1 to 48
2018-02-04 15:58:37,441 DEBUG parso.python.diff:_parse:257 parse_part from 49 to 51 (to 51 in part parser)
2018-02-04 15:58:37,445 DEBUG parso.python.diff:update:137 diff replace old[50:50] new[50:50]
2018-02-04 15:58:37,447 DEBUG parso.python.diff:update:137 diff equal old[51:214] new[51:214]
2018-02-04 15:58:37,459 DEBUG parso.python.diff:_copy_from_old_parser:208 diff actually copy 52 to 213
2018-02-04 15:58:37,463 DEBUG parso.python.diff:update:166 diff parser end
2018-02-04 15:58:37,874 DEBUG pyls.python_ls:_hook:48 PythonLanguageServer, self.config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): []
2018-02-04 15:58:37,883 DEBUG pyls.config.config:processmessage:137     pyls_lint [hook]
        config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): []
        workspace: Workspace. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _root_uri_scheme: file, _lang_server: PythonLanguageServer. config: Config. _root_path: f:\SublimeText\Data, _root_uri: file:///F:/SublimeText/Data, _init_opts: None, _settings: {'plugins': {'pydocstyle': {'enabled': True, 'ignore': ['D202', 'D208']}, 'rope': {'create_folder': False}, 'pycodestyle': {'enabled': False}}}, _plugin_settings: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}, _disabled_plugins: [<module 'pyls.plugins.pycodestyle_lint' from 'd:\\user\\dropbox\\softwareversioning\\python-language-server\\pyls\\plugins\\pycodestyle_lint.py'>], _config_sources(flake8): Flake8Config. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {}, _config_sources(pycodestyle): PyCodeStyleConfig. root_path: f:\SublimeText\Data, is_windows: True, xdg_home: C:\Users\Professional/.config, _modified_times: {(): ()}, _configs_cache(()): [], _dispatchers: [], __rope: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}, _docs(file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py): Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 5, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}
        document: Document. uri: file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py, version: 5, path: f:\SublimeText\Data\Packages\LSP\plugin\core\clients.py, filename: clients.py, _local: True, _extra_sys_path: [], _rope_project: Project. _address: f:\SublimeText\Data, _ropefolder_name: None, ignored: _ResourceMatcher. patterns: [], file_list: None, prefs: Prefs. {'extension_modules': ['numpy', 'os', 'array', 'audioop', 'binascii', 'cmath', 'collections', 'datetime', 'errno', 'gc', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'sys', 'time', 'xxsubtype', 'zipimport', 'zlib']}, callbacks: {'ignored_resources': <bound method _ResourceMatcher.set_patterns of <rope.base.resources._ResourceMatcher object at 0x00000208BD610A90>>}

2018-02-04 15:58:38,271 DEBUG pyls.config.config:processmessage:137     finish pyls_hover --> [hook]
        contents: 

2018-02-04 15:58:38,375 DEBUG pyls.plugins.pydocstyle_lint:pyls_lint:46 Got pydocstyle errors: [{'source': 'pydocstyle', 'code': 'D100', 'message': 'D100: Missing docstring in public module', 'severity': 2, 'range': {'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 25, 'character': 0}, 'end': {'line': 25, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 31, 'character': 0}, 'end': {'line': 31, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 33, 'character': 0}, 'end': {'line': 33, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 38, 'character': 0}, 'end': {'line': 38, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 39, 'character': 0}, 'end': {'line': 39, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 43, 'character': 0}, 'end': {'line': 43, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 46, 'character': 0}, 'end': {'line': 46, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 53, 'character': 0}, 'end': {'line': 53, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 61, 'character': 0}, 'end': {'line': 61, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 75, 'character': 0}, 'end': {'line': 75, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 79, 'character': 0}, 'end': {'line': 79, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 83, 'character': 0}, 'end': {'line': 83, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 88, 'character': 0}, 'end': {'line': 88, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 93, 'character': 0}, 'end': {'line': 93, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 97, 'character': 0}, 'end': {'line': 97, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 101, 'character': 0}, 'end': {'line': 101, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 132, 'character': 0}, 'end': {'line': 132, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 136, 'character': 0}, 'end': {'line': 136, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 151, 'character': 0}, 'end': {'line': 151, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 165, 'character': 0}, 'end': {'line': 165, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 174, 'character': 0}, 'end': {'line': 174, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 192, 'character': 0}, 'end': {'line': 192, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 197, 'character': 0}, 'end': {'line': 197, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 211, 'character': 0}, 'end': {'line': 211, 'character': 15}}}]
2018-02-04 15:58:38,381 DEBUG pyls.config.source:read_config_from_files:52 Using cached configuration for ()
2018-02-04 15:58:38,409 DEBUG pyls.config.config:settings:87 Got user config from PyCodeStyleConfig: {}
2018-02-04 15:58:38,412 DEBUG pyls.config.config:settings:89 With user configuration: {}
2018-02-04 15:58:38,423 DEBUG pyls.config.config:settings:92 With plugin configuration: {'plugins': {'rope_completion': {'enabled': False}, 'pydocstyle': {'enabled': False}}}
2018-02-04 15:58:38,427 DEBUG pyls.config.config:settings:95 With lsp configuration: {'plugins': {'rope': {'create_folder': False}, 'rope_completion': {'enabled': False}, 'pycodestyle': {'enabled': False}, 'pydocstyle': {'ignore': ['D202', 'D208'], 'enabled': True}}}
2018-02-04 15:58:38,440 DEBUG pyls.config.source:read_config_from_files:52 Using cached configuration for ()
2018-02-04 15:58:38,447 DEBUG pyls.config.config:settings:100 Got project config from PyCodeStyleConfig: {}
2018-02-04 15:58:38,460 DEBUG pyls.config.config:settings:102 With project configuration: {'plugins': {'rope': {'create_folder': False}, 'rope_completion': {'enabled': False}, 'pycodestyle': {'enabled': False}, 'pydocstyle': {'ignore': ['D202', 'D208'], 'enabled': True}}}
2018-02-04 15:58:38,466 DEBUG pyls.plugins.mccabe_lint:pyls_lint:16 Running mccabe lint with threshold: 15
2018-02-04 15:58:38,508 DEBUG pyls.config.config:processmessage:137   finish pyls_lint --> [[{'source': 'pyflakes', 'range': {'start': {'line': 49, 'character': 19}, 'end': {'line': 49, 'character': 22}}, 'message': "undefined name 'tr'", 'severity': 2}], [{'source': 'pydocstyle', 'code': 'D100', 'message': 'D100: Missing docstring in public module', 'severity': 2, 'range': {'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 25, 'character': 0}, 'end': {'line': 25, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 31, 'character': 0}, 'end': {'line': 31, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 33, 'character': 0}, 'end': {'line': 33, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 38, 'character': 0}, 'end': {'line': 38, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 39, 'character': 0}, 'end': {'line': 39, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 43, 'character': 0}, 'end': {'line': 43, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 46, 'character': 0}, 'end': {'line': 46, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 53, 'character': 0}, 'end': {'line': 53, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 61, 'character': 0}, 'end': {'line': 61, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 75, 'character': 0}, 'end': {'line': 75, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 79, 'character': 0}, 'end': {'line': 79, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 83, 'character': 0}, 'end': {'line': 83, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 88, 'character': 0}, 'end': {'line': 88, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 93, 'character': 0}, 'end': {'line': 93, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 97, 'character': 0}, 'end': {'line': 97, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 101, 'character': 0}, 'end': {'line': 101, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 132, 'character': 0}, 'end': {'line': 132, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 136, 'character': 0}, 'end': {'line': 136, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 151, 'character': 0}, 'end': {'line': 151, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 165, 'character': 0}, 'end': {'line': 165, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 174, 'character': 0}, 'end': {'line': 174, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 192, 'character': 0}, 'end': {'line': 192, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 197, 'character': 0}, 'end': {'line': 197, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 211, 'character': 0}, 'end': {'line': 211, 'character': 15}}}], []] [hook]

2018-02-04 15:58:38,512 DEBUG pyls.server:notify:81 Sending notification textDocument/publishDiagnostics: {'uri': 'file:///F:/SublimeText/Data/Packages/LSP/plugin/core/clients.py', 'diagnostics': [{'source': 'pyflakes', 'range': {'start': {'line': 49, 'character': 19}, 'end': {'line': 49, 'character': 22}}, 'message': "undefined name 'tr'", 'severity': 2}, {'source': 'pydocstyle', 'code': 'D100', 'message': 'D100: Missing docstring in public module', 'severity': 2, 'range': {'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 25, 'character': 0}, 'end': {'line': 25, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 31, 'character': 0}, 'end': {'line': 31, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 33, 'character': 0}, 'end': {'line': 33, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D101', 'message': 'D101: Missing docstring in public class', 'severity': 2, 'range': {'start': {'line': 38, 'character': 0}, 'end': {'line': 38, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D107', 'message': 'D107: Missing docstring in __init__', 'severity': 2, 'range': {'start': {'line': 39, 'character': 0}, 'end': {'line': 39, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 43, 'character': 0}, 'end': {'line': 43, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D102', 'message': 'D102: Missing docstring in public method', 'severity': 2, 'range': {'start': {'line': 46, 'character': 0}, 'end': {'line': 46, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 53, 'character': 0}, 'end': {'line': 53, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 61, 'character': 0}, 'end': {'line': 61, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 75, 'character': 0}, 'end': {'line': 75, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 79, 'character': 0}, 'end': {'line': 79, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 83, 'character': 0}, 'end': {'line': 83, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 88, 'character': 0}, 'end': {'line': 88, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 93, 'character': 0}, 'end': {'line': 93, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 97, 'character': 0}, 'end': {'line': 97, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 101, 'character': 0}, 'end': {'line': 101, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 132, 'character': 0}, 'end': {'line': 132, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 136, 'character': 0}, 'end': {'line': 136, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 151, 'character': 0}, 'end': {'line': 151, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 165, 'character': 0}, 'end': {'line': 165, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 174, 'character': 0}, 'end': {'line': 174, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 192, 'character': 0}, 'end': {'line': 192, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 197, 'character': 0}, 'end': {'line': 197, 'character': 15}}}, {'source': 'pydocstyle', 'code': 'D103', 'message': 'D103: Missing docstring in public function', 'severity': 2, 'range': {'start': {'line': 211, 'character': 0}, 'end': {'line': 211, 'character': 15}}}]}


Activity

  1. changed the title [-]Took 2 minutes to respond to on_hover()[/-] [+]Took 2 minutes to respond to on_hover(), from 15:56:14 until 15:58:38[/+] on Feb 4, 2018
  2. ferozco commented on Feb 22, 2018

    @ferozco
    Contributor

    @evandrocoan are you still seeing this issue?

  3. evandrocoan commented on Feb 22, 2018

    @evandrocoan
    ContributorAuthor

    Yes. But now it is so frequently that I just kill the language server process and do not start it anymore. I cannot have my work stopping randomly and frequently for such long periods.

    In my opinion the worst part of this issue is the LSP plugin for Sublime Text completely freeze the Sublime Text Graphical User Interface (other times not the User Interface but all Sublime Text Async Tasks running in the background) until the language server respond.

  4. ferozco commented on Feb 22, 2018

    @ferozco
    Contributor

    i'm sorry to hear that! I think theres two problems to address here.

    1. Blocking behaviour in pyls: We can solve this somewhat easily by augmenting the hover endpoint to support async callbacks and by changing https://github.com/palantir/python-language-server/blob/develop/pyls/plugins/hover.py#L9 to be an async handler

    2. Blocking behaviour in Sublime: Need to get the client to support asynchronous, out of order delivery of responses. I don't know the solution to that. Honestly, this hinders any performance improvements you would see from async pyls and it might make it worse in some cases

    What are your thoughts? Would you be interested in tackling either of those?

  5. evandrocoan commented on Feb 23, 2018

    @evandrocoan
    ContributorAuthor

    My first though would be to understand: why pyls would take so long to respond to a request?

    I do not think it is a big problem taking long as 2 minutes to answer a request, as long as pyls is performing useful work, instead of being locked in some kind of while True performing nothing useful.

    My first approach to solve this will be updating my fork of LSP to time out the requests after something like 0.1 seconds, perhaps 0.3 seconds. Just because it is unacceptable to block my work because something could go wrong or take a big time. If pyls or any other language server do not respond after this timeout, consider the answer as not found or inexistente.

    After solving this on the LSP plugin, I would dig in into what the pyls is doing and taking so long.

    Blocking behaviour in pyls: We can solve this somewhat easily by augmenting the hover endpoint to support async callbacks and by changing https://github.com/palantir/python-language-server/blob/develop/pyls/plugins/hover.py#L9 to be an async handler

    I am not sure about what are the implications of an async hover call backs. How would they respond accordingly to the time out I am implementing on the LSP plugin? If I understand correctly, currently pyls will not accept any other hover calls until the first one have been answered. This have some fallbacks on the LSP timeout because:

    1. If LSP is dropping the answer, then when the pyls server respond, the answer will be invalid and rejected by LSP due the timeout.
    2. If the pyls is accepting async hover calls, LSP can start doing several hover requests and:
      i. If each one of these requests take 2 minutes long.
      ii. Or if several of these requests are the same request and take 2 minutes long.
      All requests are going to be invalid due the LSP timeout of 0.3, and they will exhaust the server CPU by creating several different threads into doing the same thing. Or by just by doing discarded work by the LSP plugin timeout of 0.3.

    However, it can be actually required by the pyls server to take 2 minutes long to process the first hover request. Therefore, we cannot implement async hover request because this will only cause the LSP plugin into creating several hovers requests, which will take 2 minutes long, i.e., several thread eating my computer CPU doing the same thing.

    This is very similar to this problem on the languagetool server:

    1. Exhaust system CPU with big text file input languagetool-org/languagetool#904 Exhaust system CPU with big text file input
    2. Stop timing out while the server still working you the add-on request languagetool-org/languagetool-browser-addon#212 Stop timing out while the server still working you the add-on request

    I would suggest to not implement async hover requests, before investigate what is causing or can cause to a request take so long to be finished. After learning this, we can correctly think about a implementation strategy to correctly create async hover requests, without:

    1. Redoing work, i.e., several threads doing the same thing for some kind of initialization hover request, i.e., the initial request will always take longer because the server just find out it need to do some big work before being ready to promptly respond to hover request bellow the time out of 0.3 seconds.
    2. Exhaust the use CPU with several requests which are going to take long and their results are going to be discarded by the LSP plugin, because they timed out after 0.3 seconds.

    Hence, if the server implements async hover requests:

    1. It needs to stop processing they if they timed out about the limit of 0.3 seconds. Unless the server need to do some extra job before, like caching the hover results. Then, only then the server can continue working.
    2. It needs to reject repeated requests, to avoid doing the same work several times. If some request is already being processed, then it should just wait. If not, then it can start processing this new request.

    Blocking behaviour in Sublime: Need to get the client to support asynchronous, out of order delivery of responses. I don't know the solution to that. Honestly, this hinders any performance improvements you would see from async pyls and it might make it worse in some cases

    The solution to this, is to implement async requests on the LSP plugin. But first, fix it blocking the Sublime Text interface. Adding support to async requests is also on the way of fixing LSP. If the LSP plugin is doing and receiving async requests, it should be able to not block Sublime Text until some request being completed after they being created.

    Even with an async LSP plugin, there will be still existing discarded requests after the time out. For example, the LSP plugin does the request A, and do not wait for its answer, it starts doing other stuff. Then when the requests A timeout comes, and the request A have not yet being fulfilled, then it considers it invalid or not found and display to the user this result.

  6. ferozco commented on Mar 14, 2018

    @ferozco
    Contributor

    Hey sorry for the slow response!

    With regards to the LSP changes: As a quick fix to get things running it seems reasonable. But as a long term solution I don't think the approach is correct. Clients should not drop requests. The approach I would recommend is to do something similar to what I did for pyls and make the message handling async. This would make the client robust to slow networks and misbehaving servers. I'm not familiar with the implementation of LSP, but in an async world you could enforce your timeout through the use of cancel messages,

    pyls hover: Sure, perhaps making it async isn't a complete solution to your problem but I do think that it is the correct thing to do long term. Since a client can cancel a hover request we are basically using users patience as an upper bound on computation time. Furthermore, it adds overall responsiveness to the server. Also important to note, the async requests may operate on multiple threads within the python interpreter but the entire language server will only execute on a single OS level thread.

  7. gatesn commented on Mar 25, 2018

    @gatesn
    Contributor

    @evandrocoan can you paste the output of pip list? I've seen similar slow behaviour when using jedi-vim (not pyls) when importing large modules. Albeit never as long as 2 minutes.

    I agree that async might not be the correct answer here, as we'll very quickly just end up starving the executor pool and blocking all requests! Let's try and find the root cause.

    Would be happy to add some log lines into the hover provider to help with timings.

  8. evandrocoan commented on Mar 25, 2018

    @evandrocoan
    ContributorAuthor

    Albeit never as long as 2 minutes.

    My computer is like 5 times slower than the usual, then we could recude these 2 minutes to 24 seconds on today's machines.

    Details

    asn1crypto (0.22.0)
    astroid (1.6.1)
    beautifulsoup4 (4.6.0)
    bs4 (0.0.1)
    CacheControl (0.12.3)
    certifi (2017.7.27.1)
    cffi (1.10.0)
    chardet (3.0.4)
    click (6.7)
    colorama (0.3.9)
    concurrent-log-handler (0.9.7)
    conda (4.4.8)
    configparser (3.5.0)
    cryptography (2.0.3)
    debug-tools (3.0.0, f:\sublimetext\data\packages\debugtools\all)
    decorator (4.2.1)
    distlib (0.2.5)
    dnspython (1.15.0)
    ecdsa (0.13)
    electrum (3.0.1)
    future (0.16.0)
    html5lib (0.999999999)
    idna (2.6)
    isort (4.3.3)
    jedi (0.11.1)
    Jinja2 (2.10)
    json-rpc (1.10.8)
    jsonrpclib-pelix (0.3.1)
    keyboard (0.11.0)
    lazy-object-proxy (1.3.1)
    libnacl (1.6.1)
    livereload (2.5.1)
    lockfile (0.12.2)
    Markdown (2.6.11)
    MarkupSafe (1.0)
    mccabe (0.6.1)
    menuinst (1.4.10)
    mkdocs (0.17.2)
    msgpack-python (0.4.8)
    mutagen (1.39)
    mypy (0.560)
    numpy (1.13.3)
    packaging (16.8)
    parso (0.1.1)
    pbkdf2 (1.3)
    picard (2.0.0.dev2)
    pip (9.0.1)
    pluggy (0.6.0)
    portalocker (1.1.0)
    progress (1.3)
    protobuf (3.4.0)
    psutil (5.4.3)
    py (1.5.2)
    py2exe (0.9.2.2)
    pyaes (1.6.1)
    PyAudio (0.2.11)
    pycodestyle (2.3.1, d:\pycodestyle)
    pycosat (0.6.3)
    pycparser (2.18)
    pydoc-markdown (2.0.1)
    pydocstyle (2.1.1)
    pyflakes (1.6.0)
    pylint (1.8.2)
    pyOpenSSL (17.2.0)
    pyparsing (2.2.0)
    pypiwin32 (220)
    PyQt5 (5.9.2)
    PySocks (1.6.7)
    python-language-server (0.13.0+9.g7337e37, d:\python-language-server)
    pywin32 (222)
    PyYAML (3.12)
    qrcode (5.3)
    requests (2.18.4)
    rope (0.10.7, d:\python-rope)
    ruamel-yaml (0.11.14)
    Send2Trash (1.5.0)
    setuptools (36.5.0.post20170921)
    sip (4.19.8)
    six (1.11.0)
    snowballstemmer (1.2.1)
    tornado (4.5.3)
    tox (2.9.1)
    typed-ast (1.1.0)
    urllib3 (1.22)
    virtualenv (15.1.0)
    webencodings (0.5.1)
    wheel (0.29.0)
    win-inet-pton (1.0.1)
    wincertstore (0.2)
    wrapt (1.10.11)
    yapf (0.20.1)
    


    But my pyls has a large data base beyond these default modules, because I include on it all my Sublime Text packages which are about 200

    Details

    reloading plugin Default.arithmetic
    reloading plugin Default.auto_indent_tag
    reloading plugin Default.block
    reloading plugin Default.colors
    reloading plugin Default.comment
    reloading plugin Default.convert_color_scheme
    reloading plugin Default.convert_syntax
    reloading plugin Default.copy_path
    reloading plugin Default.delete_word
    reloading plugin Default.detect_indentation
    reloading plugin Default.duplicate_line
    reloading plugin Default.echo
    reloading plugin Default.exec
    reloading plugin Default.fold
    reloading plugin Default.font
    reloading plugin Default.goto_line
    reloading plugin Default.history_list
    reloading plugin Default.indentation
    reloading plugin Default.install_package_control
    reloading plugin Default.kill_ring
    reloading plugin Default.mark
    reloading plugin Default.new_templates
    reloading plugin Default.open_context_url
    reloading plugin Default.open_in_browser
    reloading plugin Default.pane
    reloading plugin Default.paragraph
    reloading plugin Default.paste_from_history
    reloading plugin Default.profile
    reloading plugin Default.quick_panel
    reloading plugin Default.rename
    reloading plugin Default.run_syntax_tests
    reloading plugin Default.save_on_focus_lost
    reloading plugin Default.scroll
    reloading plugin Default.set_unsaved_view_name
    reloading plugin Default.settings
    reloading plugin Default.show_scope_name
    reloading plugin Default.side_bar
    reloading plugin Default.sort
    reloading plugin Default.swap_line
    reloading plugin Default.switch_file
    reloading plugin Default.symbol
    reloading plugin Default.transform
    reloading plugin Default.transpose
    reloading plugin Default.trim_trailing_white_space
    reloading plugin Default.ui
    reloading plugin CSS.css_completions
    reloading plugin Diff.diff
    reloading plugin HTML.encode_html_entities
    reloading plugin HTML.html_completions
    reloading plugin ShellScript.ShellScript
    reloading plugin 0_packages_manager_loader.00-package_control
    reloading plugin 0_packages_manager_loader.01-package_setting_context
    reloading plugin 0_packages_manager_loader.01-pygments
    reloading plugin 0_packages_manager_loader.08-PortalockerFiles
    reloading plugin 0_packages_manager_loader.09-ConcurrentLogHandler
    reloading plugin 0_packages_manager_loader.10-DebugTools
    reloading plugin 0_packages_manager_loader.15-coverage
    reloading plugin 0_packages_manager_loader.20-EstimatedTimeLeft
    reloading plugin 0_packages_manager_loader.30-ChannelManager
    reloading plugin 0_packages_manager_loader.50-backrefs
    reloading plugin 0_packages_manager_loader.50-markupsafe
    reloading plugin 0_packages_manager_loader.50-PlantUmlConnection
    reloading plugin 0_packages_manager_loader.50-pymdownx
    reloading plugin 0_packages_manager_loader.50-python-markdown
    reloading plugin 0_packages_manager_loader.50-python-pywin32
    reloading plugin win32com
    reloading plugin win32
    reloading plugin win32/lib
    reloading plugin win32comext
    reloading plugin 0_packages_manager_loader.50-pyyaml
    reloading plugin 0_packages_manager_loader.50-regex
    reloading plugin 0_packages_manager_loader.51-python-jinja2
    reloading plugin 0_packages_manager_loader.55-jsonschema
    reloading plugin 0_packages_manager_loader.55-mdpopups
    reloading plugin tests
    reloading plugin 0_settings_loader.install_package_control_extended
    reloading plugin 0_settings_loader.synced_side_bar_watcher
    reloading plugin A File Icon.A File Icon
    reloading plugin AceJump.ace_jump
    reloading plugin ActiveViewJumpBack.active_view_jump_back
    reloading plugin AddFolderToProject.AddFolderToProject
    reloading plugin AdvancedCSV.csvplugin
    reloading plugin Alignment.Alignment
    reloading plugin AlignTab.aligner
    reloading plugin AlignTab.aligntab
    reloading plugin AlignTab.hist
    reloading plugin AlignTab.parser
    reloading plugin AlignTab.table
    reloading plugin AlignTab.utils
    reloading plugin AlignTab.wclen
    reloading plugin AllAutocomplete.all_views_completions
    reloading plugin AltUp.run_multiple_commands
    reloading plugin Amxmodx.Amxmodx
    reloading plugin AmxxChannel.commands
    reloading plugin AmxxChannel.fix_main_menus
    reloading plugin AmxxChannel.settings
    reloading plugin ANSIescape.ansi
    reloading plugin AutomaticPackageReloader.package_reloader
    reloading plugin AutoRefresh.AutoRefresh
    reloading plugin AutoWrap.autowrap
    reloading plugin BetterCoffeeScript.CoffeeScript
    reloading plugin BetterFindBuffer.find_results
    reloading plugin BufferScroll.BufferScroll
    reloading plugin CaseConversion.case_conversion
    reloading plugin CaseConversion.case_parse
    reloading plugin CaseConversion.ToggleTitleCase
    reloading plugin ChainOfCommand.chain
    reloading plugin ChangeQuotes.change_quotes
    reloading plugin ChannelRepositoryTools.ordereddict
    reloading plugin ChannelRepositoryTools.tests
    reloading plugin ChannelRepositoryTools.upgrade
    reloading plugin ClearCursorsCarets.clear_cursors_carets
    reloading plugin ClickableURLs.clickable_urls
    reloading plugin ClipboardScopeCopy.clipboard_scope_copy
    reloading plugin Color Highlighter.color_converter
    reloading plugin Color Highlighter.color_highlighter
    reloading plugin Color Highlighter.color_hover_listener
    reloading plugin Color Highlighter.color_scheme
    reloading plugin Color Highlighter.color_scheme_color_highlighter
    reloading plugin Color Highlighter.color_searcher
    reloading plugin Color Highlighter.color_selection_listener
    reloading plugin Color Highlighter.colors
    reloading plugin Color Highlighter.content_listener
    reloading plugin Color Highlighter.convert_color_command
    reloading plugin Color Highlighter.css_colors
    reloading plugin Color Highlighter.dummy_event_listener
    reloading plugin Color Highlighter.gutter_icons_color_highlighter
    reloading plugin Color Highlighter.load_resource
    reloading plugin Color Highlighter.main
    reloading plugin Color Highlighter.path
    reloading plugin Color Highlighter.phantoms_color_highlighter
    reloading plugin Color Highlighter.pick_color_command
    reloading plugin Color Highlighter.regex_compiler
    reloading plugin Color Highlighter.regions
    reloading plugin Color Highlighter.set_setting_command
    reloading plugin Color Highlighter.settings
    reloading plugin Color Highlighter.st_helper
    reloading plugin Color Highlighter.topsort
    reloading plugin ColorSchemeEditor.ColorSchemeEditor-ST2
    reloading plugin ColorSchemeUnit.plugin
    reloading plugin ColumnSelect.column_select
    reloading plugin ConcurrentLogHandler.setup
    reloading plugin ConvertToUTF8.ConvertToUTF8
    reloading plugin CopyFilepathWithLineNumbers.CopyFilepathWithLineNumbers
    reloading plugin CopyWithLineNumbersReloaded.copy_with_line_numbers
    reloading plugin DebugTools.setup
    reloading plugin DefaultSyntax.default_syntax
    reloading plugin DeleteCurrentFile.DeleteCurrentFile
    reloading plugin DistractionFreeWindow.distraction_free_window
    reloading plugin DocBlockr.jsdocs
    reloading plugin DocBlockr.test_runner
    reloading plugin DuplicateSelections.duplicate_selections
    reloading plugin EditPreferences.__init__
    reloading plugin EditPreferences.commands_base
    reloading plugin EditPreferences.edit_package_files
    reloading plugin EditPreferences.extract_snippets
    reloading plugin EditPreferences.helper_commands
    reloading plugin EditPreferences.helpers
    reloading plugin EditPreferences.insert_binding_repr
    reloading plugin EditPreferences.jsonix
    reloading plugin EditPreferences.list_commands
    reloading plugin EditPreferences.list_menu_bindings
    reloading plugin EditPreferences.list_settings
    reloading plugin EditPreferences.list_shortcut_keys
    reloading plugin EditPreferences.list_theme_selectors
    reloading plugin EditPreferences.package_resources
    reloading plugin EditPreferences.quick_panel_cols
    reloading plugin EditPreferences.scheduler
    reloading plugin Emmet.emmet-plugin
    reloading plugin EvaluateInlinePython.inline_python
    reloading plugin EvaluatePrinter.EvalPrinter
    reloading plugin EvaluatePrinter.KillableCmd
    reloading plugin EvaluateShell.evaluate
    reloading plugin ExpandRegion.__init__
    reloading plugin ExpandRegion.expand_region_handler
    reloading plugin ExpandRegion.expand_to_indent
    reloading plugin ExpandRegion.expand_to_line
    reloading plugin ExpandRegion.expand_to_quotes
    reloading plugin ExpandRegion.expand_to_regex_set
    reloading plugin ExpandRegion.expand_to_semantic_unit
    reloading plugin ExpandRegion.expand_to_subword
    reloading plugin ExpandRegion.expand_to_symbols
    reloading plugin ExpandRegion.expand_to_word
    reloading plugin ExpandRegion.expand_to_word_with_dots
    reloading plugin ExpandRegion.expand_to_xml_node
    reloading plugin ExpandRegion.ExpandRegion
    reloading plugin ExpandRegion.html
    reloading plugin ExpandRegion.javascript
    reloading plugin ExpandRegion.latex
    reloading plugin ExpandRegion.python
    reloading plugin ExpandRegion.utils
    reloading plugin ExportHtml.ExportBbcode
    reloading plugin ExportHtml.ExportHtml
    reloading plugin ExportHtml.HtmlAnnotations
    reloading plugin ExportHtml.support
    reloading plugin ExtendedTabSwitcher.ExtendedSwitcher
    reloading plugin ExtractText.clean_save_file_modifications
    reloading plugin ExtractText.extract_to_file
    reloading plugin FileDiffs.file_diffs
    reloading plugin FileHistory.file_history
    reloading plugin FileRename.file_rename
    reloading plugin FindKeyConflicts.find_key_conflicts
    reloading plugin FixProjectSwitchRestartBug.fix_project_switch_restart_bug
    reloading plugin FixSelectionAfterIndent.fix_selection_after_indent
    reloading plugin ForceRewriteSublimeSettings.force_rewrite_sublime_settings
    reloading plugin FuzzyFileNav.fuzzy_file_nav
    reloading plugin FuzzyFileNav.multiconf
    reloading plugin FuzzyFileNav.notify
    reloading plugin Glue.__init__
    reloading plugin Glue.Glue
    reloading plugin Glue.GlueBrowser
    reloading plugin Glue.GlueCmds
    reloading plugin Glue.GlueIO
    reloading plugin Glue.GlueSidebarOpener
    reloading plugin GoogleSpellCheck.google-spell-check
    reloading plugin HighlightBuildErrors.HighlightBuildErrors
    reloading plugin HighlightWords.HighlightWords
    reloading plugin HorizontalScroll.scroll_width
    reloading plugin HungryBackspace.hungry_backspace
    reloading plugin Incrementor.incrementor
    reloading plugin IncrementSelection.IncrementSelection
    reloading plugin IndentAndBraces.indent-and-braces
    reloading plugin IndentSize.IndentSizeCommand
    reloading plugin InsertNums.InsertNums
    reloading plugin InvertSelection.invertselection
    reloading plugin JumpAlongIndent.file_scanner
    reloading plugin JumpAlongIndent.jump_along_indent
    reloading plugin JumpAlongIndent.view_helper
    reloading plugin KeepPastedTextSelected.keep_pasted_text_selected
    reloading plugin LanguageTool.LanguageList
    reloading plugin LanguageTool.LanguageTool
    reloading plugin LanguageTool.LTServer
    reloading plugin LaTeXSmartQuotes.getTeXRoot
    reloading plugin LaTeXSmartQuotes.smartquotes
    reloading plugin LaTeXTools.01_reload_submodules
    reloading plugin LaTeXTools.02_temp_file_cleanup
    reloading plugin LaTeXTools.03_reset_phantoms
    reloading plugin LaTeXTools.auto_label
    reloading plugin LaTeXTools.biblatex_crossref_completions
    reloading plugin LaTeXTools.biblatex_field_name_completions
    reloading plugin LaTeXTools.biblatex_name_completions
    reloading plugin LaTeXTools.biblatex_snippet_completions
    reloading plugin LaTeXTools.biblatex_syntax_listener
    reloading plugin LaTeXTools.change_environment
    reloading plugin LaTeXTools.context_provider
    reloading plugin LaTeXTools.create_mousemap
    reloading plugin LaTeXTools.delete_temp_files
    reloading plugin LaTeXTools.detect_spellcheck
    reloading plugin LaTeXTools.getTeXRoot
    reloading plugin LaTeXTools.jumpto_anywhere
    reloading plugin LaTeXTools.jumpto_tex_file
    reloading plugin LaTeXTools.jumpToPDF
    reloading plugin LaTeXTools.kpsewhich
    reloading plugin LaTeXTools.latex_cite_completions
    reloading plugin LaTeXTools.latex_cwl_completions
    reloading plugin LaTeXTools.latex_directive_completions
    reloading plugin LaTeXTools.latex_env_completions
    reloading plugin LaTeXTools.latex_fill_all
    reloading plugin LaTeXTools.latex_glossary_completions
    reloading plugin LaTeXTools.latex_input_completions
    reloading plugin LaTeXTools.latex_installed_packages
    reloading plugin LaTeXTools.latex_own_command_completions
    reloading plugin LaTeXTools.latex_ref_completions
    reloading plugin LaTeXTools.latexCommand
    reloading plugin LaTeXTools.latexDocumentationViewer
    reloading plugin LaTeXTools.latexEnvCloser
    reloading plugin LaTeXTools.latexEnvironment
    reloading plugin LaTeXTools.latextools_cache_listener
    reloading plugin LaTeXTools.latextools_default_settings
    reloading plugin LaTeXTools.latextools_plugin
    reloading plugin LaTeXTools.makePDF
    reloading plugin LaTeXTools.migrate
    reloading plugin LaTeXTools.open_detexify
    reloading plugin LaTeXTools.parseTeXlog
    reloading plugin LaTeXTools.reveal_folders
    reloading plugin LaTeXTools.search_commands
    reloading plugin LaTeXTools.smart_paste
    reloading plugin LaTeXTools.system_check
    reloading plugin LaTeXTools.texcount
    reloading plugin LaTeXTools.texMacro
    reloading plugin LaTeXTools.texSections
    reloading plugin LaTeXTools.texSyntaxListener
    reloading plugin LaTeXTools.toc_quickpanel
    reloading plugin LaTeXTools.toggle_settings
    reloading plugin LaTeXWordCount.WordCount
    reloading plugin LESS.less_completions
    reloading plugin LineEndingsUnify.LineEndingsUnify
    reloading plugin LinesMultisets.choose_view
    reloading plugin LinesMultisets.execute_operation
    reloading plugin LSP.boot
    reloading plugin MarkdownPreview.helper
    reloading plugin MarkdownPreview.markdown_settings
    reloading plugin MarkdownPreview.markdown_wrapper
    reloading plugin MarkdownPreview.MarkdownPreview
    reloading plugin MarkdownToBBCode.MarkdownToBBCode
    reloading plugin Maven.config_generator
    reloading plugin Maven.import
    reloading plugin Maven.maven
    reloading plugin MaxPane.layouts_doc
    reloading plugin MaxPane.max_pane
    reloading plugin MoveText.move_text
    reloading plugin MultiEditUtils.MultiEditUtils
    reloading plugin MultiEditUtils.selection_fields
    reloading plugin NumberKing.king
    reloading plugin Origami.origami
    reloading plugin OverrideAudit.override_audit
    reloading plugin OverrideCommitCompletion.overwrite_commit_completion
    reloading plugin OverrideEditSettingsDefaultContents.override_edit_settings_default_contents
    reloading plugin OverrideUnpackedPackages.override_unpacked_packages
    reloading plugin package_setting_context.__init__
    reloading plugin PackageDev._logging
    reloading plugin PackageDev.main
    reloading plugin PackageResourceViewer.package_resource_viewer
    reloading plugin PackageResourceViewer.package_resources
    reloading plugin PackagesManager.1_reloader
    reloading plugin PackagesManager.2_bootstrap
    reloading plugin PackagesManager.PackagesManager
    reloading plugin PanelManager.main
    reloading plugin PathTranslator.PathTranslator
    reloading plugin PlantUmlConnection.setup
    reloading plugin PlantUmlDiagrams.diagram_plugin
    Removing all handlers from PlantUmlDiagrams.diagram.plantuml...
    Removing all handlers from PlantUmlDiagrams.diagram.base...
    Removing all handlers from PlantUmlDiagrams.diagram...
    Removing all handlers from PlantUmlDiagrams.diagram.plantuml...
    Removing all handlers from PlantUmlDiagrams.diagram.base...
    reloading plugin PowerCursors.power_cursors
    reloading plugin PrettyJSON.PrettyJson
    reloading plugin PrettyJSON.PrettyJsonListeners
    reloading plugin QuickSettings.quick_settings
    reloading plugin RandomEverything.__init__
    reloading plugin RandomEverything.random
    reloading plugin REG.jumptoregkey
    reloading plugin ReIndent.ReIndent
    reloading plugin RememberCommandPaletteInput.fixed_command_palette_input_history
    reloading plugin REPL.__init__
    reloading plugin REPL.completions
    reloading plugin REPL.lang_integration
    reloading plugin REPL.run_existing_command
    reloading plugin REPL.sublimerepl
    reloading plugin REPL.sublimerepl_build_system_hack
    reloading plugin REPL.text_transfer
    reloading plugin ScopeHunter.scope_hunter
    reloading plugin ScopeHunter.scope_hunter_notify
    reloading plugin ScopeHunter.support
    reloading plugin SelectAll.select_all_by_current_scope
    reloading plugin SelectAllSpellingErrors.select_all_spelling_errors
    reloading plugin SelectUntil.edit
    reloading plugin SelectUntil.select-until
    reloading plugin SemanticLineWrap.semantic_wrap
    reloading plugin SideBarEnhancements.SideBar
    reloading plugin SideBarEnhancements.SideBarAPI
    reloading plugin SideBarEnhancements.SideBarDefaultDisable
    reloading plugin SideBySideCompare.sbs_compare
    reloading plugin SideBySideSettings.sxs_settings
    reloading plugin SQLExec.SQLExec
    reloading plugin SQLKeywordUppercase.sql_keyword_uppercase
    reloading plugin SQLTools.SQLTools
    reloading plugin StickySearch.StickySearch
    reloading plugin StudioChannel.commands
    reloading plugin StudioChannel.settings
    reloading plugin SublimeLinter.__init__
    reloading plugin SublimeLinter.busy_indicator_view
    reloading plugin SublimeLinter.commands
    reloading plugin SublimeLinter.goto_commands
    reloading plugin SublimeLinter.highlight_view
    reloading plugin SublimeLinter.log_handler
    reloading plugin SublimeLinter.message_view
    reloading plugin SublimeLinter.panel_view
    reloading plugin SublimeLinter.status_bar_view
    reloading plugin SublimeLinter.sublime_linter
    reloading plugin SublimeLinter.tooltips_view
    reloading plugin SublimeTutorial.sublime_tutor
    reloading plugin SyncViewScroll.syncscroll
    reloading plugin SyntaxManager.syntaxmgr
    reloading plugin TabsExtra.support
    reloading plugin TabsExtra.tab_menu
    reloading plugin TabsExtra.tab_sort_helper
    reloading plugin TabsExtra.tabs_extra
    reloading plugin TerminalShortcuts.Terminal
    reloading plugin TextPastry.text_pastry
    reloading plugin TextPastry.text_pastry_addons
    reloading plugin TextPastry.text_pastry_clipboard
    reloading plugin TextPastry.text_pastry_selection
    reloading plugin ToggleWords.ToggleWords
    reloading plugin Trimmer.Trimmer
    reloading plugin TypeScript.main
    reloading plugin UnitTesting.ut
    reloading plugin ViewSettingsFreely.view_settings_freely
    reloading plugin Whitespace.Whitespace
    reloading plugin WordCount.WordCount
    reloading plugin WordHighlight.word_highlight
    reloading plugin WrapPlus.wrap_plus
    plugins loaded
    


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions