We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
hover regression
After the latest commits hover popups produce errors, I suspect c9a73907f00972a415e8e979d5dcc96c11ec3f09 is responsible for this
* OS: Windows 10
* language server: pyls
* How you installed LSP: git
* Minimal reproduction steps
    1. open a .py file
    2. hover over an function name
* Log
```
LSP:  --> textDocument/hover
LSP:      {'contents': "is_supported_syntax(syntax: str, configs: 'List[ClientConfig]') -> bool"}
Parse Error: #x27;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: 27;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: 7;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: #x27; code: Unknown entity
Parse Error: #x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: 27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: 7;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character
Parse Error: #x27; code: Unknown entity
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `plugin/hover.py`
Content:
```
1 import mdpopups
2 import sublime
3 import sublime_plugin
4 import webbrowser
5 from html import escape
6 try:
7     from typing import List, Optional, Any, Dict
8     assert List and Optional and Any and Dict
9 except ImportError:
10     pass
11 
12 from .core.configurations import is_supported_syntax
13 from .diagnostics import get_point_diagnostics
14 from .core.registry import session_for_view, LspTextCommand
15 from .core.protocol import Request, DiagnosticSeverity
16 from .core.documents import get_document_position
17 from .core.popups import popup_css, popup_class
18 from .core.settings import client_configs
19 
20 SUBLIME_WORD_MASK = 515
21 NO_HOVER_SCOPES = 'comment, string'
22 
23 
24 class HoverHandler(sublime_plugin.ViewEventListener):
25     def __init__(self, view):
26         self.view = view
27 
28     @classmethod
29     def is_applicable(cls, settings):
30         syntax = settings.get('syntax')
31         return syntax and is_supported_syntax(syntax, client_configs.all)
32 
33     def on_hover(self, point, hover_zone):
34         if hover_zone != sublime.HOVER_TEXT or self.view.is_popup_visible():
35             return
36         self.view.run_command("lsp_hover", {"point": point})
37 
38 
39 _test_contents = []  # type: List[str]
40 
41 
42 class_for_severity = {
43     DiagnosticSeverity.Error: 'errors',
44     DiagnosticSeverity.Warning: 'warnings',
45     DiagnosticSeverity.Information: 'info',
46     DiagnosticSeverity.Hint: 'hints'
47 }
48 
49 
50 class LspHoverCommand(LspTextCommand):
51     def __init__(self, view):
52         super().__init__(view)
53 
54     def is_likely_at_symbol(self, point):
55         word_at_sel = self.view.classify(point)
56         return word_at_sel & SUBLIME_WORD_MASK and not self.view.match_selector(point, NO_HOVER_SCOPES)
57 
58     def run(self, edit, point=None):
59         if point is None:
60             point = self.view.sel()[0].begin()
61         if self.is_likely_at_symbol(point):
62             self.request_symbol_hover(point)
63         point_diagnostics = get_point_diagnostics(self.view, point)
64         if point_diagnostics:
65             self.show_hover(point, self.diagnostics_content(point_diagnostics))
66 
67     def request_symbol_hover(self, point) -> None:
68         session = session_for_view(self.view, point)
69         if session:
70             if session.has_capability('hoverProvider'):
71                 document_position = get_document_position(self.view, point)
72                 if document_position:
73                     if session.client:
74                         session.client.send_request(
75                             Request.hover(document_position),
76                             lambda response: self.handle_response(response, point))
77 
78     def handle_response(self, response: 'Optional[Any]', point) -> None:
79         all_content = ""
80 
81         point_diagnostics = get_point_diagnostics(self.view, point)
82         if point_diagnostics:
83             all_content += self.diagnostics_content(point_diagnostics)
84 
85         all_content += self.hover_content(point, response)
86         all_content += self.symbol_actions_content()
87 
88         _test_contents.clear()
89         _test_contents.append(all_content)  # for testing only
90         self.show_hover(point, all_content)
91 
92     def symbol_actions_content(self):
93         actions = []
94         if self.has_client_with_capability('definitionProvider'):
95             actions.append("<a href='{}'>{}</a>".format('definition', 'Definition'))
96 
97         if self.has_client_with_capability('referencesProvider'):
98             actions.append("<a href='{}'>{}</a>".format('references', 'References'))
99 
100         if self.has_client_with_capability('renameProvider'):
101             actions.append("<a href='{}'>{}</a>".format('rename', 'Rename'))
102 
103         return "<p>" + " | ".join(actions) + "</p>"
104 
105     def format_diagnostic(self, diagnostic):
106         if diagnostic.source:
107             return "<pre>[{}] {}</pre>".format(diagnostic.source, escape(diagnostic.message, False))
108         else:
109             return "<pre>{}</pre>".format(escape(diagnostic.message, False))
110 
111     def diagnostics_content(self, diagnostics):
112         by_severity = {}  # type: Dict[int, List[str]]
113         for diagnostic in diagnostics:
114             by_severity.setdefault(diagnostic.severity, []).append(self.format_diagnostic(diagnostic))
115         formatted = []
116         for severity, items in by_severity.items():
117             formatted.append("<div class='{}'>".format(class_for_severity[severity]))
118             formatted.extend(items)
119             formatted.append("<a href='{}'>{}</a>".format('code-actions',
120                                                           'Code Actions'))
121             formatted.append("</div>")
122 
123         return "".join(formatted)
124 
125     def hover_content(self, point, response: 'Optional[Any]') -> str:
126         contents = ["No description available."]
127         if isinstance(response, dict):
128             # Flow returns None sometimes
129             # See: https://github.com/flowtype/flow-language-server/issues/51
130             response_content = response.get('contents')
131             if response_content:
132                 if isinstance(response_content, list):
133                     contents = response_content
134                 else:
135                     contents = [response_content]
136 
137         formatted = []
138         for item in contents:
139             value = ""
140             language = None
141             if isinstance(item, str):
142                 value = escape(item)
143             else:
144                 value = escape(item.get("value"))
145                 language = item.get("language")
146             if language:
147                 formatted.append("```{}\n{}\n```\n".format(language, value))
148             else:
149                 formatted.append(value)
150 
151         return mdpopups.md2html(self.view, "\n".join(formatted))
152 
153     def show_hover(self, point, contents):
154         mdpopups.show_popup(
155             self.view,
156             contents,
157             css=popup_css,
158             md=False,
159             flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY,
160             location=point,
161             wrapper_class=popup_class,
162             max_width=800,
163             on_navigate=lambda href: self.on_hover_navigate(href, point))
164 
165     def on_hover_navigate(self, href, point):
166         if href == 'definition':
167             self.run_command_from_point(point, "lsp_symbol_definition")
168         elif href == 'references':
169             self.run_command_from_point(point, "lsp_symbol_references")
170         elif href == 'rename':
171             self.run_command_from_point(point, "lsp_symbol_rename")
172         elif href == 'code-actions':
173             self.run_command_from_point(point, "lsp_code_actions")
174         else:
175             webbrowser.open_new_tab(href)
176 
177     def run_command_from_point(self, point, command_name):
178         sel = self.view.sel()
179         sel.clear()
180         sel.add(sublime.Region(point, point))
181         self.view.run_command(command_name)
182
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/plugin/hover.py b/plugin/hover.py
--- a/plugin/hover.py
+++ b/plugin/hover.py
@@ -139,9 +139,9 @@
             value = ""
             language = None
             if isinstance(item, str):
-                value = escape(item)
+                value = item
             else:
-                value = escape(item.get("value"))
+                value = item.get("value")
                 language = item.get("language")
             if language:
                 formatted.append("```{}\n{}\n```\n".format(language, value))

{"golden_diff": "diff --git a/plugin/hover.py b/plugin/hover.py\n--- a/plugin/hover.py\n+++ b/plugin/hover.py\n@@ -139,9 +139,9 @@\n             value = \"\"\n             language = None\n             if isinstance(item, str):\n-                value = escape(item)\n+                value = item\n             else:\n-                value = escape(item.get(\"value\"))\n+                value = item.get(\"value\")\n                 language = item.get(\"language\")\n             if language:\n                 formatted.append(\"```{}\\n{}\\n```\\n\".format(language, value))\n", "issue": "hover regression\nAfter the latest commits hover popups produce errors, I suspect c9a73907f00972a415e8e979d5dcc96c11ec3f09 is responsible for this\r\n* OS: Windows 10\r\n* language server: pyls\r\n* How you installed LSP: git\r\n* Minimal reproduction steps\r\n    1. open a .py file\r\n    2. hover over an function name\r\n* Log\r\n```\r\nLSP:  --> textDocument/hover\r\nLSP:      {'contents': \"is_supported_syntax(syntax: str, configs: 'List[ClientConfig]') -> bool\"}\r\nParse Error: #x27;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: 27;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: 7;List[ClientConfig]&#x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: #x27; code: Unknown entity\r\nParse Error: #x27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: 27;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: 7;) -&gt; bool</p><p><a href='definition'>Definition</a> | <a href='references'>References</a> | <a href='rename'>Rename</a></p></div></div> code: Unexpected character\r\nParse Error: #x27; code: Unknown entity\r\n```\n", "before_files": [{"content": "import mdpopups\nimport sublime\nimport sublime_plugin\nimport webbrowser\nfrom html import escape\ntry:\n    from typing import List, Optional, Any, Dict\n    assert List and Optional and Any and Dict\nexcept ImportError:\n    pass\n\nfrom .core.configurations import is_supported_syntax\nfrom .diagnostics import get_point_diagnostics\nfrom .core.registry import session_for_view, LspTextCommand\nfrom .core.protocol import Request, DiagnosticSeverity\nfrom .core.documents import get_document_position\nfrom .core.popups import popup_css, popup_class\nfrom .core.settings import client_configs\n\nSUBLIME_WORD_MASK = 515\nNO_HOVER_SCOPES = 'comment, string'\n\n\nclass HoverHandler(sublime_plugin.ViewEventListener):\n    def __init__(self, view):\n        self.view = view\n\n    @classmethod\n    def is_applicable(cls, settings):\n        syntax = settings.get('syntax')\n        return syntax and is_supported_syntax(syntax, client_configs.all)\n\n    def on_hover(self, point, hover_zone):\n        if hover_zone != sublime.HOVER_TEXT or self.view.is_popup_visible():\n            return\n        self.view.run_command(\"lsp_hover\", {\"point\": point})\n\n\n_test_contents = []  # type: List[str]\n\n\nclass_for_severity = {\n    DiagnosticSeverity.Error: 'errors',\n    DiagnosticSeverity.Warning: 'warnings',\n    DiagnosticSeverity.Information: 'info',\n    DiagnosticSeverity.Hint: 'hints'\n}\n\n\nclass LspHoverCommand(LspTextCommand):\n    def __init__(self, view):\n        super().__init__(view)\n\n    def is_likely_at_symbol(self, point):\n        word_at_sel = self.view.classify(point)\n        return word_at_sel & SUBLIME_WORD_MASK and not self.view.match_selector(point, NO_HOVER_SCOPES)\n\n    def run(self, edit, point=None):\n        if point is None:\n            point = self.view.sel()[0].begin()\n        if self.is_likely_at_symbol(point):\n            self.request_symbol_hover(point)\n        point_diagnostics = get_point_diagnostics(self.view, point)\n        if point_diagnostics:\n            self.show_hover(point, self.diagnostics_content(point_diagnostics))\n\n    def request_symbol_hover(self, point) -> None:\n        session = session_for_view(self.view, point)\n        if session:\n            if session.has_capability('hoverProvider'):\n                document_position = get_document_position(self.view, point)\n                if document_position:\n                    if session.client:\n                        session.client.send_request(\n                            Request.hover(document_position),\n                            lambda response: self.handle_response(response, point))\n\n    def handle_response(self, response: 'Optional[Any]', point) -> None:\n        all_content = \"\"\n\n        point_diagnostics = get_point_diagnostics(self.view, point)\n        if point_diagnostics:\n            all_content += self.diagnostics_content(point_diagnostics)\n\n        all_content += self.hover_content(point, response)\n        all_content += self.symbol_actions_content()\n\n        _test_contents.clear()\n        _test_contents.append(all_content)  # for testing only\n        self.show_hover(point, all_content)\n\n    def symbol_actions_content(self):\n        actions = []\n        if self.has_client_with_capability('definitionProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('definition', 'Definition'))\n\n        if self.has_client_with_capability('referencesProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('references', 'References'))\n\n        if self.has_client_with_capability('renameProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('rename', 'Rename'))\n\n        return \"<p>\" + \" | \".join(actions) + \"</p>\"\n\n    def format_diagnostic(self, diagnostic):\n        if diagnostic.source:\n            return \"<pre>[{}] {}</pre>\".format(diagnostic.source, escape(diagnostic.message, False))\n        else:\n            return \"<pre>{}</pre>\".format(escape(diagnostic.message, False))\n\n    def diagnostics_content(self, diagnostics):\n        by_severity = {}  # type: Dict[int, List[str]]\n        for diagnostic in diagnostics:\n            by_severity.setdefault(diagnostic.severity, []).append(self.format_diagnostic(diagnostic))\n        formatted = []\n        for severity, items in by_severity.items():\n            formatted.append(\"<div class='{}'>\".format(class_for_severity[severity]))\n            formatted.extend(items)\n            formatted.append(\"<a href='{}'>{}</a>\".format('code-actions',\n                                                          'Code Actions'))\n            formatted.append(\"</div>\")\n\n        return \"\".join(formatted)\n\n    def hover_content(self, point, response: 'Optional[Any]') -> str:\n        contents = [\"No description available.\"]\n        if isinstance(response, dict):\n            # Flow returns None sometimes\n            # See: https://github.com/flowtype/flow-language-server/issues/51\n            response_content = response.get('contents')\n            if response_content:\n                if isinstance(response_content, list):\n                    contents = response_content\n                else:\n                    contents = [response_content]\n\n        formatted = []\n        for item in contents:\n            value = \"\"\n            language = None\n            if isinstance(item, str):\n                value = escape(item)\n            else:\n                value = escape(item.get(\"value\"))\n                language = item.get(\"language\")\n            if language:\n                formatted.append(\"```{}\\n{}\\n```\\n\".format(language, value))\n            else:\n                formatted.append(value)\n\n        return mdpopups.md2html(self.view, \"\\n\".join(formatted))\n\n    def show_hover(self, point, contents):\n        mdpopups.show_popup(\n            self.view,\n            contents,\n            css=popup_css,\n            md=False,\n            flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY,\n            location=point,\n            wrapper_class=popup_class,\n            max_width=800,\n            on_navigate=lambda href: self.on_hover_navigate(href, point))\n\n    def on_hover_navigate(self, href, point):\n        if href == 'definition':\n            self.run_command_from_point(point, \"lsp_symbol_definition\")\n        elif href == 'references':\n            self.run_command_from_point(point, \"lsp_symbol_references\")\n        elif href == 'rename':\n            self.run_command_from_point(point, \"lsp_symbol_rename\")\n        elif href == 'code-actions':\n            self.run_command_from_point(point, \"lsp_code_actions\")\n        else:\n            webbrowser.open_new_tab(href)\n\n    def run_command_from_point(self, point, command_name):\n        sel = self.view.sel()\n        sel.clear()\n        sel.add(sublime.Region(point, point))\n        self.view.run_command(command_name)\n", "path": "plugin/hover.py"}], "after_files": [{"content": "import mdpopups\nimport sublime\nimport sublime_plugin\nimport webbrowser\nfrom html import escape\ntry:\n    from typing import List, Optional, Any, Dict\n    assert List and Optional and Any and Dict\nexcept ImportError:\n    pass\n\nfrom .core.configurations import is_supported_syntax\nfrom .diagnostics import get_point_diagnostics\nfrom .core.registry import session_for_view, LspTextCommand\nfrom .core.protocol import Request, DiagnosticSeverity\nfrom .core.documents import get_document_position\nfrom .core.popups import popup_css, popup_class\nfrom .core.settings import client_configs\n\nSUBLIME_WORD_MASK = 515\nNO_HOVER_SCOPES = 'comment, string'\n\n\nclass HoverHandler(sublime_plugin.ViewEventListener):\n    def __init__(self, view):\n        self.view = view\n\n    @classmethod\n    def is_applicable(cls, settings):\n        syntax = settings.get('syntax')\n        return syntax and is_supported_syntax(syntax, client_configs.all)\n\n    def on_hover(self, point, hover_zone):\n        if hover_zone != sublime.HOVER_TEXT or self.view.is_popup_visible():\n            return\n        self.view.run_command(\"lsp_hover\", {\"point\": point})\n\n\n_test_contents = []  # type: List[str]\n\n\nclass_for_severity = {\n    DiagnosticSeverity.Error: 'errors',\n    DiagnosticSeverity.Warning: 'warnings',\n    DiagnosticSeverity.Information: 'info',\n    DiagnosticSeverity.Hint: 'hints'\n}\n\n\nclass LspHoverCommand(LspTextCommand):\n    def __init__(self, view):\n        super().__init__(view)\n\n    def is_likely_at_symbol(self, point):\n        word_at_sel = self.view.classify(point)\n        return word_at_sel & SUBLIME_WORD_MASK and not self.view.match_selector(point, NO_HOVER_SCOPES)\n\n    def run(self, edit, point=None):\n        if point is None:\n            point = self.view.sel()[0].begin()\n        if self.is_likely_at_symbol(point):\n            self.request_symbol_hover(point)\n        point_diagnostics = get_point_diagnostics(self.view, point)\n        if point_diagnostics:\n            self.show_hover(point, self.diagnostics_content(point_diagnostics))\n\n    def request_symbol_hover(self, point) -> None:\n        session = session_for_view(self.view, point)\n        if session:\n            if session.has_capability('hoverProvider'):\n                document_position = get_document_position(self.view, point)\n                if document_position:\n                    if session.client:\n                        session.client.send_request(\n                            Request.hover(document_position),\n                            lambda response: self.handle_response(response, point))\n\n    def handle_response(self, response: 'Optional[Any]', point) -> None:\n        all_content = \"\"\n\n        point_diagnostics = get_point_diagnostics(self.view, point)\n        if point_diagnostics:\n            all_content += self.diagnostics_content(point_diagnostics)\n\n        all_content += self.hover_content(point, response)\n        all_content += self.symbol_actions_content()\n\n        _test_contents.clear()\n        _test_contents.append(all_content)  # for testing only\n        self.show_hover(point, all_content)\n\n    def symbol_actions_content(self):\n        actions = []\n        if self.has_client_with_capability('definitionProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('definition', 'Definition'))\n\n        if self.has_client_with_capability('referencesProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('references', 'References'))\n\n        if self.has_client_with_capability('renameProvider'):\n            actions.append(\"<a href='{}'>{}</a>\".format('rename', 'Rename'))\n\n        return \"<p>\" + \" | \".join(actions) + \"</p>\"\n\n    def format_diagnostic(self, diagnostic):\n        if diagnostic.source:\n            return \"<pre>[{}] {}</pre>\".format(diagnostic.source, escape(diagnostic.message, False))\n        else:\n            return \"<pre>{}</pre>\".format(escape(diagnostic.message, False))\n\n    def diagnostics_content(self, diagnostics):\n        by_severity = {}  # type: Dict[int, List[str]]\n        for diagnostic in diagnostics:\n            by_severity.setdefault(diagnostic.severity, []).append(self.format_diagnostic(diagnostic))\n        formatted = []\n        for severity, items in by_severity.items():\n            formatted.append(\"<div class='{}'>\".format(class_for_severity[severity]))\n            formatted.extend(items)\n            formatted.append(\"<a href='{}'>{}</a>\".format('code-actions',\n                                                          'Code Actions'))\n            formatted.append(\"</div>\")\n\n        return \"\".join(formatted)\n\n    def hover_content(self, point, response: 'Optional[Any]') -> str:\n        contents = [\"No description available.\"]\n        if isinstance(response, dict):\n            # Flow returns None sometimes\n            # See: https://github.com/flowtype/flow-language-server/issues/51\n            response_content = response.get('contents')\n            if response_content:\n                if isinstance(response_content, list):\n                    contents = response_content\n                else:\n                    contents = [response_content]\n\n        formatted = []\n        for item in contents:\n            value = \"\"\n            language = None\n            if isinstance(item, str):\n                value = item\n            else:\n                value = item.get(\"value\")\n                language = item.get(\"language\")\n            if language:\n                formatted.append(\"```{}\\n{}\\n```\\n\".format(language, value))\n            else:\n                formatted.append(value)\n\n        return mdpopups.md2html(self.view, \"\\n\".join(formatted))\n\n    def show_hover(self, point, contents):\n        mdpopups.show_popup(\n            self.view,\n            contents,\n            css=popup_css,\n            md=False,\n            flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY,\n            location=point,\n            wrapper_class=popup_class,\n            max_width=800,\n            on_navigate=lambda href: self.on_hover_navigate(href, point))\n\n    def on_hover_navigate(self, href, point):\n        if href == 'definition':\n            self.run_command_from_point(point, \"lsp_symbol_definition\")\n        elif href == 'references':\n            self.run_command_from_point(point, \"lsp_symbol_references\")\n        elif href == 'rename':\n            self.run_command_from_point(point, \"lsp_symbol_rename\")\n        elif href == 'code-actions':\n            self.run_command_from_point(point, \"lsp_code_actions\")\n        else:\n            webbrowser.open_new_tab(href)\n\n    def run_command_from_point(self, point, command_name):\n        sel = self.view.sel()\n        sel.clear()\n        sel.add(sublime.Region(point, point))\n        self.view.run_command(command_name)\n", "path": "plugin/hover.py"}]}