From 7cd668dd3b13beae68a539b8c3560bb91014fa78 Mon Sep 17 00:00:00 2001 From: Janos Wortmann Date: Fri, 12 Aug 2022 00:59:21 +0200 Subject: [PATCH 1/4] Follow global settings more accurately whether to show snippet completions --- plugin/documents.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugin/documents.py b/plugin/documents.py index f3d8fd78a..10eca6c1a 100644 --- a/plugin/documents.py +++ b/plugin/documents.py @@ -152,6 +152,7 @@ def on_change() -> None: self._uri = existing_uri else: self.set_uri(view_to_uri(view)) + self._auto_complete_triggered_manually = False self._registration = SettingsRegistration(view.settings(), on_change=on_change) self._setup() @@ -429,6 +430,8 @@ def on_text_command(self, command_name: str, args: Optional[dict]) -> Optional[T session = self.session_async("semanticTokensProvider") if session: return ("lsp_show_scope_name", {}) + elif command_name == "auto_complete": + self._auto_complete_triggered_manually = True return None def on_post_text_command(self, command_name: str, args: Optional[Dict[str, Any]]) -> None: @@ -683,6 +686,7 @@ def _on_query_completions_async(self, resolve_completion_list: ResolveCompletion sessions = list(self.sessions_async('completionProvider')) if not sessions or not self.view.is_valid(): resolve_completion_list([], 0) + self._auto_complete_triggered_manually = False # reset state for next completion popup return self.purge_changes_async() completion_promises = [] # type: List[Promise[ResolvedCompletions]] @@ -713,7 +717,10 @@ def _on_all_settled( flags |= sublime.INHIBIT_EXPLICIT_COMPLETIONS if prefs.inhibit_word_completions: flags |= sublime.INHIBIT_WORD_COMPLETIONS - include_snippets = self.view.settings().get("auto_complete_include_snippets") + view_settings = self.view.settings() + include_snippets = view_settings.get("auto_complete_include_snippets") and \ + (self._auto_complete_triggered_manually or view_settings.get("auto_complete_include_snippets_when_typing")) + self._auto_complete_triggered_manually = False for response, session_name in responses: if isinstance(response, Error): errors.append(response) From 02b51d31b381b304a48ae8b2e44d8a8fb5f2a5f1 Mon Sep 17 00:00:00 2001 From: Janos Wortmann Date: Fri, 12 Aug 2022 11:08:14 +0200 Subject: [PATCH 2/4] Immediately reset --- plugin/documents.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugin/documents.py b/plugin/documents.py index 10eca6c1a..06e89674e 100644 --- a/plugin/documents.py +++ b/plugin/documents.py @@ -683,10 +683,11 @@ def render_highlights_on_main_thread() -> None: # --- textDocument/complete ---------------------------------------------------------------------------------------- def _on_query_completions_async(self, resolve_completion_list: ResolveCompletionsFn, location: int) -> None: + triggerd_manually = self._auto_complete_triggered_manually + self._auto_complete_triggered_manually = False # reset state for next completion popup sessions = list(self.sessions_async('completionProvider')) if not sessions or not self.view.is_valid(): resolve_completion_list([], 0) - self._auto_complete_triggered_manually = False # reset state for next completion popup return self.purge_changes_async() completion_promises = [] # type: List[Promise[ResolvedCompletions]] @@ -701,12 +702,13 @@ def completion_request() -> Promise[ResolvedCompletions]: completion_promises.append(completion_request()) Promise.all(completion_promises).then( - lambda responses: self._on_all_settled(responses, resolve_completion_list)) + lambda responses: self._on_all_settled(responses, resolve_completion_list, triggerd_manually)) def _on_all_settled( self, responses: List[ResolvedCompletions], - resolve_completion_list: ResolveCompletionsFn + resolve_completion_list: ResolveCompletionsFn, + triggered_manually: bool ) -> None: LspResolveDocsCommand.completions = {} items = [] # type: List[sublime.CompletionItem] @@ -719,8 +721,7 @@ def _on_all_settled( flags |= sublime.INHIBIT_WORD_COMPLETIONS view_settings = self.view.settings() include_snippets = view_settings.get("auto_complete_include_snippets") and \ - (self._auto_complete_triggered_manually or view_settings.get("auto_complete_include_snippets_when_typing")) - self._auto_complete_triggered_manually = False + (triggered_manually or view_settings.get("auto_complete_include_snippets_when_typing")) for response, session_name in responses: if isinstance(response, Error): errors.append(response) From adc8e9b54ad02a66848a8f26c60ed8d5f2bce30b Mon Sep 17 00:00:00 2001 From: Janos Wortmann Date: Fri, 12 Aug 2022 11:09:55 +0200 Subject: [PATCH 3/4] Order by expected frequency --- plugin/documents.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/documents.py b/plugin/documents.py index 06e89674e..96ab0aed1 100644 --- a/plugin/documents.py +++ b/plugin/documents.py @@ -426,12 +426,12 @@ def on_hover(self, point: int, hover_zone: int) -> None: on_navigate=lambda href: self._on_navigate(href, point)) def on_text_command(self, command_name: str, args: Optional[dict]) -> Optional[Tuple[str, dict]]: - if command_name == "show_scope_name" and userprefs().semantic_highlighting: + if command_name == "auto_complete": + self._auto_complete_triggered_manually = True + elif command_name == "show_scope_name" and userprefs().semantic_highlighting: session = self.session_async("semanticTokensProvider") if session: return ("lsp_show_scope_name", {}) - elif command_name == "auto_complete": - self._auto_complete_triggered_manually = True return None def on_post_text_command(self, command_name: str, args: Optional[Dict[str, Any]]) -> None: From 40bcf5cacddd95129e204532592263da7ba82463 Mon Sep 17 00:00:00 2001 From: Janos Wortmann Date: Fri, 12 Aug 2022 11:16:37 +0200 Subject: [PATCH 4/4] Typo --- plugin/documents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/documents.py b/plugin/documents.py index 96ab0aed1..40992f239 100644 --- a/plugin/documents.py +++ b/plugin/documents.py @@ -683,7 +683,7 @@ def render_highlights_on_main_thread() -> None: # --- textDocument/complete ---------------------------------------------------------------------------------------- def _on_query_completions_async(self, resolve_completion_list: ResolveCompletionsFn, location: int) -> None: - triggerd_manually = self._auto_complete_triggered_manually + triggered_manually = self._auto_complete_triggered_manually self._auto_complete_triggered_manually = False # reset state for next completion popup sessions = list(self.sessions_async('completionProvider')) if not sessions or not self.view.is_valid(): @@ -702,7 +702,7 @@ def completion_request() -> Promise[ResolvedCompletions]: completion_promises.append(completion_request()) Promise.all(completion_promises).then( - lambda responses: self._on_all_settled(responses, resolve_completion_list, triggerd_manually)) + lambda responses: self._on_all_settled(responses, resolve_completion_list, triggered_manually)) def _on_all_settled( self,