From d0027a30b457f062dbdeef12ec8d5d2f56489a50 Mon Sep 17 00:00:00 2001 From: Kyle Bebak Date: Tue, 2 Jul 2019 09:27:53 -0500 Subject: [PATCH 1/4] All type and error info messages can be copied from popup --- typescript/commands/quick_info.py | 23 ++++++++++++++++++++--- typescript/libs/popup_manager.py | 6 +++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/typescript/commands/quick_info.py b/typescript/commands/quick_info.py index 3c999559..fc3aab49 100644 --- a/typescript/commands/quick_info.py +++ b/typescript/commands/quick_info.py @@ -1,3 +1,5 @@ +import sublime + from ..libs.view_helpers import * from ..libs.text_helpers import escape_html from .base_command import TypeScriptBaseTextCommand @@ -40,6 +42,7 @@ class TypescriptQuickInfoDoc(TypeScriptBaseTextCommand): def handle_quick_info(self, quick_info_resp_dict, display_point): info_str = "" doc_str = "" + status_info_str = "" if quick_info_resp_dict["success"]: info_str = self.format_display_parts_html(quick_info_resp_dict["body"]["displayParts"]) @@ -65,14 +68,28 @@ def handle_quick_info(self, quick_info_resp_dict, display_point): self.view.erase_status("typescript_info") # process tooltips - error_html = self.get_error_text_html(display_point) + error_str = self.get_error_text_html(display_point) + error_html = escape_html(error_str) if TOOLTIP_SUPPORT and (info_str != "" or doc_str != "" or error_html != ""): if self.template is None: self.template = Template(load_quickinfo_and_error_popup_template()) html = self.get_popup_html(error_html, info_str, doc_str) + def on_navigate(href: str) -> None: + if href == "copy": + sublime.set_clipboard("\n\n".join(s for s in [error_str, status_info_str] if s)) + sublime.active_window().status_message("TypeScript: info copied to clipboard") + self.view.hide_popup() + settings = sublime.load_settings("TypeScript.sublime-settings") - self.view.show_popup(html, flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY, location=display_point, max_height=300, max_width=settings.get("quick_info_popup_max_width") or self.view.viewport_extent()[0]) + self.view.show_popup( + html + "Copy", + flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY, + location=display_point, + max_height=300, + max_width=settings.get("quick_info_popup_max_width") or self.view.viewport_extent()[0], + on_navigate=on_navigate, + ) def get_popup_html(self, error, info, doc): theme_styles = get_theme_styles(self.view) @@ -108,7 +125,7 @@ def get_error_text_html(self, pt): if region.contains(pt): error_text = text break - return escape_html(error_text) + return error_text def run(self, text, hover_point=None): check_update_view(self.view) diff --git a/typescript/libs/popup_manager.py b/typescript/libs/popup_manager.py index b0e7d422..1805dac7 100644 --- a/typescript/libs/popup_manager.py +++ b/typescript/libs/popup_manager.py @@ -65,7 +65,7 @@ def get_signature_data(on_done): if last_command == "insert": if len(args['characters']) > 1 and '\n' in args['characters']: reload_buffer(view) - + # Send a signagure_help request to server self.proxy.async_signature_help(filename, point, '', on_done) @@ -240,7 +240,7 @@ def concat_display_parts(parts, underline_name=False): def get_current_signature_parts(self): def encode(str, kind): return '
' if kind == "lineBreak" else str - + if self.signature_index == -1: return "" if self.signature_index >= len(self.signature_help["items"]): @@ -259,7 +259,7 @@ def encode(str, kind): param = item["parameters"][self.current_parameter] activeParam = '{0}: {1}'.format( param["name"], - ''.join([encode(doc["text"], doc["kind"]) for doc in param["documentation"]]) + ''.join([encode(doc["text"], doc["kind"]) for doc in param["documentation"]]) if param["documentation"] else "") else: activeParam = '' From c68f05dfba7e742d91f599969215a31bf7b0cb46 Mon Sep 17 00:00:00 2001 From: Kyle Bebak Date: Sun, 9 Jun 2019 10:56:56 -0500 Subject: [PATCH 2/4] Removes default snippets --- snippets/Constructor.sublime-snippet | 9 --------- snippets/class-{-}.sublime-snippet | 13 ------------- snippets/do-while(-).sublime-snippet | 8 -------- snippets/for-()-{[]}.sublime-snippet | 8 -------- snippets/for-()-{}-(faster).sublime-snippet | 8 -------- snippets/for-()-{}.sublime-snippet | 8 -------- snippets/for-(in)-{}.sublime-snippet | 8 -------- snippets/function-(fun).sublime-snippet | 8 -------- snippets/get-()-{}.sublime-snippet | 10 ---------- snippets/if-___-else.sublime-snippet | 10 ---------- snippets/if.sublime-snippet | 8 -------- snippets/import-require.sublime-snippet | 7 ------- snippets/log.sublime-snippet | 7 ------- snippets/method-(fun).sublime-snippet | 8 -------- snippets/namespace.sublime-snippet | 7 ------- snippets/property.sublime-snippet | 14 -------------- snippets/reference.sublime-snippet | 7 ------- snippets/return-FALSE.sublime-snippet | 6 ------ snippets/return-TRUE.sublime-snippet | 6 ------ snippets/return.sublime-snippet | 6 ------ snippets/set-()-{}.sublime-snippet | 10 ---------- snippets/setTimeout.sublime-snippet | 6 ------ snippets/switch(-).sublime-snippet | 14 -------------- snippets/throw.sublime-snippet | 7 ------- 24 files changed, 203 deletions(-) delete mode 100644 snippets/Constructor.sublime-snippet delete mode 100644 snippets/class-{-}.sublime-snippet delete mode 100644 snippets/do-while(-).sublime-snippet delete mode 100644 snippets/for-()-{[]}.sublime-snippet delete mode 100644 snippets/for-()-{}-(faster).sublime-snippet delete mode 100644 snippets/for-()-{}.sublime-snippet delete mode 100644 snippets/for-(in)-{}.sublime-snippet delete mode 100644 snippets/function-(fun).sublime-snippet delete mode 100644 snippets/get-()-{}.sublime-snippet delete mode 100644 snippets/if-___-else.sublime-snippet delete mode 100644 snippets/if.sublime-snippet delete mode 100644 snippets/import-require.sublime-snippet delete mode 100644 snippets/log.sublime-snippet delete mode 100644 snippets/method-(fun).sublime-snippet delete mode 100644 snippets/namespace.sublime-snippet delete mode 100644 snippets/property.sublime-snippet delete mode 100644 snippets/reference.sublime-snippet delete mode 100644 snippets/return-FALSE.sublime-snippet delete mode 100644 snippets/return-TRUE.sublime-snippet delete mode 100644 snippets/return.sublime-snippet delete mode 100644 snippets/set-()-{}.sublime-snippet delete mode 100644 snippets/setTimeout.sublime-snippet delete mode 100644 snippets/switch(-).sublime-snippet delete mode 100644 snippets/throw.sublime-snippet diff --git a/snippets/Constructor.sublime-snippet b/snippets/Constructor.sublime-snippet deleted file mode 100644 index 3450d52b..00000000 --- a/snippets/Constructor.sublime-snippet +++ /dev/null @@ -1,9 +0,0 @@ - - - ctor - source.ts, source.tsx - constructor … - \ No newline at end of file diff --git a/snippets/class-{-}.sublime-snippet b/snippets/class-{-}.sublime-snippet deleted file mode 100644 index c4d759ad..00000000 --- a/snippets/class-{-}.sublime-snippet +++ /dev/null @@ -1,13 +0,0 @@ - - - class - source.ts, source.tsx - class … - \ No newline at end of file diff --git a/snippets/do-while(-).sublime-snippet b/snippets/do-while(-).sublime-snippet deleted file mode 100644 index 0f56dacc..00000000 --- a/snippets/do-while(-).sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - do - source.ts, source.tsx - do … while … - \ No newline at end of file diff --git a/snippets/for-()-{[]}.sublime-snippet b/snippets/for-()-{[]}.sublime-snippet deleted file mode 100644 index 776937c7..00000000 --- a/snippets/for-()-{[]}.sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - fori - source.ts, source.tsx - for (…) {…} - diff --git a/snippets/for-()-{}-(faster).sublime-snippet b/snippets/for-()-{}-(faster).sublime-snippet deleted file mode 100644 index 9a0e7e9a..00000000 --- a/snippets/for-()-{}-(faster).sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - = 0; ${20:i}--) { - ${100:${1:Things}[${20:i}]}$0 -}]]> - for - source.ts, source.tsx - for (…) {…} (Improved Native For-Loop) - diff --git a/snippets/for-()-{}.sublime-snippet b/snippets/for-()-{}.sublime-snippet deleted file mode 100644 index 09e918c4..00000000 --- a/snippets/for-()-{}.sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - for - source.ts, source.tsx - for (…) {…} - diff --git a/snippets/for-(in)-{}.sublime-snippet b/snippets/for-(in)-{}.sublime-snippet deleted file mode 100644 index 5589a4b0..00000000 --- a/snippets/for-(in)-{}.sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - forobj - source.ts, source.tsx - for … in … loop - diff --git a/snippets/function-(fun).sublime-snippet b/snippets/function-(fun).sublime-snippet deleted file mode 100644 index 52ba7ec6..00000000 --- a/snippets/function-(fun).sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - func - source.ts, source.tsx - Function - \ No newline at end of file diff --git a/snippets/get-()-{}.sublime-snippet b/snippets/get-()-{}.sublime-snippet deleted file mode 100644 index 73c70be6..00000000 --- a/snippets/get-()-{}.sublime-snippet +++ /dev/null @@ -1,10 +0,0 @@ - - - getter - source.ts, source.tsx - get-property … - \ No newline at end of file diff --git a/snippets/if-___-else.sublime-snippet b/snippets/if-___-else.sublime-snippet deleted file mode 100644 index 7ea039dd..00000000 --- a/snippets/if-___-else.sublime-snippet +++ /dev/null @@ -1,10 +0,0 @@ - - - ifelse - source.ts, source.tsx - if … else … - \ No newline at end of file diff --git a/snippets/if.sublime-snippet b/snippets/if.sublime-snippet deleted file mode 100644 index d24c5e52..00000000 --- a/snippets/if.sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - if - source.ts, source.tsx - if … - \ No newline at end of file diff --git a/snippets/import-require.sublime-snippet b/snippets/import-require.sublime-snippet deleted file mode 100644 index ebbfd9a1..00000000 --- a/snippets/import-require.sublime-snippet +++ /dev/null @@ -1,7 +0,0 @@ - - - import - source.ts, source.tsx - imports a module … - \ No newline at end of file diff --git a/snippets/log.sublime-snippet b/snippets/log.sublime-snippet deleted file mode 100644 index 9fb2658d..00000000 --- a/snippets/log.sublime-snippet +++ /dev/null @@ -1,7 +0,0 @@ - - - clog - source.ts, source.tsx - console log - \ No newline at end of file diff --git a/snippets/method-(fun).sublime-snippet b/snippets/method-(fun).sublime-snippet deleted file mode 100644 index 44a44b2f..00000000 --- a/snippets/method-(fun).sublime-snippet +++ /dev/null @@ -1,8 +0,0 @@ - - - meth - source.ts, source.tsx - class method - \ No newline at end of file diff --git a/snippets/namespace.sublime-snippet b/snippets/namespace.sublime-snippet deleted file mode 100644 index 7defde5c..00000000 --- a/snippets/namespace.sublime-snippet +++ /dev/null @@ -1,7 +0,0 @@ - - - nam - source.ts, source.tsx - \ No newline at end of file diff --git a/snippets/property.sublime-snippet b/snippets/property.sublime-snippet deleted file mode 100644 index f3850090..00000000 --- a/snippets/property.sublime-snippet +++ /dev/null @@ -1,14 +0,0 @@ - - - prop - source.ts, source.tsx - full property … - \ No newline at end of file diff --git a/snippets/reference.sublime-snippet b/snippets/reference.sublime-snippet deleted file mode 100644 index 88ded2e9..00000000 --- a/snippets/reference.sublime-snippet +++ /dev/null @@ -1,7 +0,0 @@ - - -$0]]> - ref - source.ts, source.tsx - does a triple-slash reference - \ No newline at end of file diff --git a/snippets/return-FALSE.sublime-snippet b/snippets/return-FALSE.sublime-snippet deleted file mode 100644 index 28d7c555..00000000 --- a/snippets/return-FALSE.sublime-snippet +++ /dev/null @@ -1,6 +0,0 @@ - - - ret0 - source.ts, source.tsx - return false - \ No newline at end of file diff --git a/snippets/return-TRUE.sublime-snippet b/snippets/return-TRUE.sublime-snippet deleted file mode 100644 index 3c0acf3a..00000000 --- a/snippets/return-TRUE.sublime-snippet +++ /dev/null @@ -1,6 +0,0 @@ - - - ret1 - source.ts, source.tsx - return true - \ No newline at end of file diff --git a/snippets/return.sublime-snippet b/snippets/return.sublime-snippet deleted file mode 100644 index 5fb48292..00000000 --- a/snippets/return.sublime-snippet +++ /dev/null @@ -1,6 +0,0 @@ - - - ret - source.ts, source.tsx - return statement - \ No newline at end of file diff --git a/snippets/set-()-{}.sublime-snippet b/snippets/set-()-{}.sublime-snippet deleted file mode 100644 index c376f257..00000000 --- a/snippets/set-()-{}.sublime-snippet +++ /dev/null @@ -1,10 +0,0 @@ - - - setter - source.ts, source.tsx - set-property … - \ No newline at end of file diff --git a/snippets/setTimeout.sublime-snippet b/snippets/setTimeout.sublime-snippet deleted file mode 100644 index 5c91f1e7..00000000 --- a/snippets/setTimeout.sublime-snippet +++ /dev/null @@ -1,6 +0,0 @@ - - {$0}${2:}, ${1:500});]]> - tout - source.ts, source.tsx - setTimeout function - \ No newline at end of file diff --git a/snippets/switch(-).sublime-snippet b/snippets/switch(-).sublime-snippet deleted file mode 100644 index d852840c..00000000 --- a/snippets/switch(-).sublime-snippet +++ /dev/null @@ -1,14 +0,0 @@ - - - switch - source.ts, source.tsx - switch statement … - \ No newline at end of file diff --git a/snippets/throw.sublime-snippet b/snippets/throw.sublime-snippet deleted file mode 100644 index 2b2d4c6c..00000000 --- a/snippets/throw.sublime-snippet +++ /dev/null @@ -1,7 +0,0 @@ - - - throw - source.ts, source.tsx - Throw Exception - \ No newline at end of file From 4ddf3da9bbd247aa18aaeb90bab4e2834c29f360 Mon Sep 17 00:00:00 2001 From: Kyle Bebak Date: Fri, 20 Dec 2019 09:16:26 -0600 Subject: [PATCH 3/4] Revert "Removes default snippets" This reverts commit c68f05dfba7e742d91f599969215a31bf7b0cb46. --- snippets/Constructor.sublime-snippet | 9 +++++++++ snippets/class-{-}.sublime-snippet | 13 +++++++++++++ snippets/do-while(-).sublime-snippet | 8 ++++++++ snippets/for-()-{[]}.sublime-snippet | 8 ++++++++ snippets/for-()-{}-(faster).sublime-snippet | 8 ++++++++ snippets/for-()-{}.sublime-snippet | 8 ++++++++ snippets/for-(in)-{}.sublime-snippet | 8 ++++++++ snippets/function-(fun).sublime-snippet | 8 ++++++++ snippets/get-()-{}.sublime-snippet | 10 ++++++++++ snippets/if-___-else.sublime-snippet | 10 ++++++++++ snippets/if.sublime-snippet | 8 ++++++++ snippets/import-require.sublime-snippet | 7 +++++++ snippets/log.sublime-snippet | 7 +++++++ snippets/method-(fun).sublime-snippet | 8 ++++++++ snippets/namespace.sublime-snippet | 7 +++++++ snippets/property.sublime-snippet | 14 ++++++++++++++ snippets/reference.sublime-snippet | 7 +++++++ snippets/return-FALSE.sublime-snippet | 6 ++++++ snippets/return-TRUE.sublime-snippet | 6 ++++++ snippets/return.sublime-snippet | 6 ++++++ snippets/set-()-{}.sublime-snippet | 10 ++++++++++ snippets/setTimeout.sublime-snippet | 6 ++++++ snippets/switch(-).sublime-snippet | 14 ++++++++++++++ snippets/throw.sublime-snippet | 7 +++++++ 24 files changed, 203 insertions(+) create mode 100644 snippets/Constructor.sublime-snippet create mode 100644 snippets/class-{-}.sublime-snippet create mode 100644 snippets/do-while(-).sublime-snippet create mode 100644 snippets/for-()-{[]}.sublime-snippet create mode 100644 snippets/for-()-{}-(faster).sublime-snippet create mode 100644 snippets/for-()-{}.sublime-snippet create mode 100644 snippets/for-(in)-{}.sublime-snippet create mode 100644 snippets/function-(fun).sublime-snippet create mode 100644 snippets/get-()-{}.sublime-snippet create mode 100644 snippets/if-___-else.sublime-snippet create mode 100644 snippets/if.sublime-snippet create mode 100644 snippets/import-require.sublime-snippet create mode 100644 snippets/log.sublime-snippet create mode 100644 snippets/method-(fun).sublime-snippet create mode 100644 snippets/namespace.sublime-snippet create mode 100644 snippets/property.sublime-snippet create mode 100644 snippets/reference.sublime-snippet create mode 100644 snippets/return-FALSE.sublime-snippet create mode 100644 snippets/return-TRUE.sublime-snippet create mode 100644 snippets/return.sublime-snippet create mode 100644 snippets/set-()-{}.sublime-snippet create mode 100644 snippets/setTimeout.sublime-snippet create mode 100644 snippets/switch(-).sublime-snippet create mode 100644 snippets/throw.sublime-snippet diff --git a/snippets/Constructor.sublime-snippet b/snippets/Constructor.sublime-snippet new file mode 100644 index 00000000..3450d52b --- /dev/null +++ b/snippets/Constructor.sublime-snippet @@ -0,0 +1,9 @@ + + + ctor + source.ts, source.tsx + constructor … + \ No newline at end of file diff --git a/snippets/class-{-}.sublime-snippet b/snippets/class-{-}.sublime-snippet new file mode 100644 index 00000000..c4d759ad --- /dev/null +++ b/snippets/class-{-}.sublime-snippet @@ -0,0 +1,13 @@ + + + class + source.ts, source.tsx + class … + \ No newline at end of file diff --git a/snippets/do-while(-).sublime-snippet b/snippets/do-while(-).sublime-snippet new file mode 100644 index 00000000..0f56dacc --- /dev/null +++ b/snippets/do-while(-).sublime-snippet @@ -0,0 +1,8 @@ + + + do + source.ts, source.tsx + do … while … + \ No newline at end of file diff --git a/snippets/for-()-{[]}.sublime-snippet b/snippets/for-()-{[]}.sublime-snippet new file mode 100644 index 00000000..776937c7 --- /dev/null +++ b/snippets/for-()-{[]}.sublime-snippet @@ -0,0 +1,8 @@ + + + fori + source.ts, source.tsx + for (…) {…} + diff --git a/snippets/for-()-{}-(faster).sublime-snippet b/snippets/for-()-{}-(faster).sublime-snippet new file mode 100644 index 00000000..9a0e7e9a --- /dev/null +++ b/snippets/for-()-{}-(faster).sublime-snippet @@ -0,0 +1,8 @@ + + = 0; ${20:i}--) { + ${100:${1:Things}[${20:i}]}$0 +}]]> + for + source.ts, source.tsx + for (…) {…} (Improved Native For-Loop) + diff --git a/snippets/for-()-{}.sublime-snippet b/snippets/for-()-{}.sublime-snippet new file mode 100644 index 00000000..09e918c4 --- /dev/null +++ b/snippets/for-()-{}.sublime-snippet @@ -0,0 +1,8 @@ + + + for + source.ts, source.tsx + for (…) {…} + diff --git a/snippets/for-(in)-{}.sublime-snippet b/snippets/for-(in)-{}.sublime-snippet new file mode 100644 index 00000000..5589a4b0 --- /dev/null +++ b/snippets/for-(in)-{}.sublime-snippet @@ -0,0 +1,8 @@ + + + forobj + source.ts, source.tsx + for … in … loop + diff --git a/snippets/function-(fun).sublime-snippet b/snippets/function-(fun).sublime-snippet new file mode 100644 index 00000000..52ba7ec6 --- /dev/null +++ b/snippets/function-(fun).sublime-snippet @@ -0,0 +1,8 @@ + + + func + source.ts, source.tsx + Function + \ No newline at end of file diff --git a/snippets/get-()-{}.sublime-snippet b/snippets/get-()-{}.sublime-snippet new file mode 100644 index 00000000..73c70be6 --- /dev/null +++ b/snippets/get-()-{}.sublime-snippet @@ -0,0 +1,10 @@ + + + getter + source.ts, source.tsx + get-property … + \ No newline at end of file diff --git a/snippets/if-___-else.sublime-snippet b/snippets/if-___-else.sublime-snippet new file mode 100644 index 00000000..7ea039dd --- /dev/null +++ b/snippets/if-___-else.sublime-snippet @@ -0,0 +1,10 @@ + + + ifelse + source.ts, source.tsx + if … else … + \ No newline at end of file diff --git a/snippets/if.sublime-snippet b/snippets/if.sublime-snippet new file mode 100644 index 00000000..d24c5e52 --- /dev/null +++ b/snippets/if.sublime-snippet @@ -0,0 +1,8 @@ + + + if + source.ts, source.tsx + if … + \ No newline at end of file diff --git a/snippets/import-require.sublime-snippet b/snippets/import-require.sublime-snippet new file mode 100644 index 00000000..ebbfd9a1 --- /dev/null +++ b/snippets/import-require.sublime-snippet @@ -0,0 +1,7 @@ + + + import + source.ts, source.tsx + imports a module … + \ No newline at end of file diff --git a/snippets/log.sublime-snippet b/snippets/log.sublime-snippet new file mode 100644 index 00000000..9fb2658d --- /dev/null +++ b/snippets/log.sublime-snippet @@ -0,0 +1,7 @@ + + + clog + source.ts, source.tsx + console log + \ No newline at end of file diff --git a/snippets/method-(fun).sublime-snippet b/snippets/method-(fun).sublime-snippet new file mode 100644 index 00000000..44a44b2f --- /dev/null +++ b/snippets/method-(fun).sublime-snippet @@ -0,0 +1,8 @@ + + + meth + source.ts, source.tsx + class method + \ No newline at end of file diff --git a/snippets/namespace.sublime-snippet b/snippets/namespace.sublime-snippet new file mode 100644 index 00000000..7defde5c --- /dev/null +++ b/snippets/namespace.sublime-snippet @@ -0,0 +1,7 @@ + + + nam + source.ts, source.tsx + \ No newline at end of file diff --git a/snippets/property.sublime-snippet b/snippets/property.sublime-snippet new file mode 100644 index 00000000..f3850090 --- /dev/null +++ b/snippets/property.sublime-snippet @@ -0,0 +1,14 @@ + + + prop + source.ts, source.tsx + full property … + \ No newline at end of file diff --git a/snippets/reference.sublime-snippet b/snippets/reference.sublime-snippet new file mode 100644 index 00000000..88ded2e9 --- /dev/null +++ b/snippets/reference.sublime-snippet @@ -0,0 +1,7 @@ + + +$0]]> + ref + source.ts, source.tsx + does a triple-slash reference + \ No newline at end of file diff --git a/snippets/return-FALSE.sublime-snippet b/snippets/return-FALSE.sublime-snippet new file mode 100644 index 00000000..28d7c555 --- /dev/null +++ b/snippets/return-FALSE.sublime-snippet @@ -0,0 +1,6 @@ + + + ret0 + source.ts, source.tsx + return false + \ No newline at end of file diff --git a/snippets/return-TRUE.sublime-snippet b/snippets/return-TRUE.sublime-snippet new file mode 100644 index 00000000..3c0acf3a --- /dev/null +++ b/snippets/return-TRUE.sublime-snippet @@ -0,0 +1,6 @@ + + + ret1 + source.ts, source.tsx + return true + \ No newline at end of file diff --git a/snippets/return.sublime-snippet b/snippets/return.sublime-snippet new file mode 100644 index 00000000..5fb48292 --- /dev/null +++ b/snippets/return.sublime-snippet @@ -0,0 +1,6 @@ + + + ret + source.ts, source.tsx + return statement + \ No newline at end of file diff --git a/snippets/set-()-{}.sublime-snippet b/snippets/set-()-{}.sublime-snippet new file mode 100644 index 00000000..c376f257 --- /dev/null +++ b/snippets/set-()-{}.sublime-snippet @@ -0,0 +1,10 @@ + + + setter + source.ts, source.tsx + set-property … + \ No newline at end of file diff --git a/snippets/setTimeout.sublime-snippet b/snippets/setTimeout.sublime-snippet new file mode 100644 index 00000000..5c91f1e7 --- /dev/null +++ b/snippets/setTimeout.sublime-snippet @@ -0,0 +1,6 @@ + + {$0}${2:}, ${1:500});]]> + tout + source.ts, source.tsx + setTimeout function + \ No newline at end of file diff --git a/snippets/switch(-).sublime-snippet b/snippets/switch(-).sublime-snippet new file mode 100644 index 00000000..d852840c --- /dev/null +++ b/snippets/switch(-).sublime-snippet @@ -0,0 +1,14 @@ + + + switch + source.ts, source.tsx + switch statement … + \ No newline at end of file diff --git a/snippets/throw.sublime-snippet b/snippets/throw.sublime-snippet new file mode 100644 index 00000000..2b2d4c6c --- /dev/null +++ b/snippets/throw.sublime-snippet @@ -0,0 +1,7 @@ + + + throw + source.ts, source.tsx + Throw Exception + \ No newline at end of file From ccc4cb95e8528d0d27957703775cd0c6ded84ea5 Mon Sep 17 00:00:00 2001 From: Kyle Bebak Date: Fri, 20 Dec 2019 10:09:36 -0600 Subject: [PATCH 4/4] Reimplements copy content from tooltip function --- typescript/commands/quick_info.py | 41 +++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/typescript/commands/quick_info.py b/typescript/commands/quick_info.py index 1e2e7131..bdf66c86 100644 --- a/typescript/commands/quick_info.py +++ b/typescript/commands/quick_info.py @@ -42,11 +42,11 @@ class TypescriptQuickInfoDoc(TypeScriptBaseTextCommand): def handle_quick_info(self, quick_info_resp_dict, display_point): info_str = "" doc_str = "" - status_info_str = "" + info_text = "" if quick_info_resp_dict["success"]: info_str = self.format_display_parts_html(quick_info_resp_dict["body"]["displayParts"]) - status_info_str = self.format_display_parts_plain(quick_info_resp_dict["body"]["displayParts"]) + info_text = self.format_display_parts_plain(quick_info_resp_dict["body"]["displayParts"]) if "documentation" in quick_info_resp_dict["body"]: doc_str = self.format_display_parts_html(quick_info_resp_dict["body"]["documentation"]) @@ -61,26 +61,27 @@ def handle_quick_info(self, quick_info_resp_dict, display_point): ) doc_panel.settings().set('color_scheme', "Packages/Color Scheme - Default/Blackboard.tmTheme") sublime.active_window().run_command('show_panel', {'panel': 'output.doc'}) - status_info_str = info_str + " (^T^Q for more)" - self.view.set_status("typescript_info", status_info_str) + info_text = info_str + " (^T^Q for more)" + self.view.set_status("typescript_info", info_text) else: self.view.erase_status("typescript_info") # Fetch any errors and show tooltips if available + errors = self.get_errors(sublime.Region(display_point, display_point)) error_html = self.get_error_text_html(sublime.Region(display_point, display_point)) if info_str != "" or doc_str != "" or error_html != "": - self.show_tooltip_popup(display_point, error_html, info_str, doc_str) + self.show_tooltip_popup(display_point, errors, error_html, info_text, info_str, doc_str) - def show_tooltip_popup(self, display_point, error, info, doc): + def show_tooltip_popup(self, display_point, errors, error_html: str, info_text: str, info_html: str, doc): if not TOOLTIP_SUPPORT: return theme_styles = get_theme_styles(self.view) parameters = { - "error": error or '', - "info_str": info or '', + "error": error_html or '', + "info_str": info_html or '', "doc_str": doc or '', "typeStyles": theme_styles["type"], "keywordStyles": theme_styles["keyword"], @@ -100,25 +101,39 @@ def show_tooltip_popup(self, display_point, error, info, doc): self.template = Template(load_quickinfo_and_error_popup_template()) html = self.template.substitute(parameters) + def on_navigate(href: str) -> None: + if href == "copy": + copy_text = "\n\n".join(s for s in errors if s) + if info_text: + copy_text = copy_text + "\n\n" + info_text + sublime.set_clipboard(copy_text) + sublime.active_window().status_message("TypeScript: info copied to clipboard") + self.view.hide_popup() + settings = sublime.load_settings("TypeScript.sublime-settings") self.view.show_popup( - html, + html + "Copy", flags=sublime.HIDE_ON_MOUSE_MOVE_AWAY, location=display_point, max_height=300, - max_width=settings.get("quick_info_popup_max_width") or self.view.viewport_extent()[0] + max_width=settings.get("quick_info_popup_max_width") or self.view.viewport_extent()[0], + on_navigate=on_navigate, ) - def get_error_text_html(self, span): + def get_errors(self, span): client_info = cli.get_or_add_file(self.view.file_name()) all_errors = client_info.errors['syntacticDiag'] + client_info.errors['semanticDiag'] errors = [] for (region, text) in all_errors: if region.intersects(span): - errors.append(escape_html(text)) + errors.append(text) - return '
'.join(errors) + return errors + + def get_error_text_html(self, span): + errors = self.get_errors(span) + return '
'.join(escape_html(error) for error in errors) def run(self, text, hover_point=None, hover_zone=None): check_update_view(self.view)