From ab9be7dc7d4ccb7bcb65da331a742b34ddaf6c43 Mon Sep 17 00:00:00 2001 From: Benjamin Schaaf Date: Wed, 28 Feb 2024 15:42:19 +1100 Subject: [PATCH 1/2] Fix usage of sublime.score_selector ST 4173 tweaks how selector scoring works resulting in LSP no longer functioning. As per the comment there seems to be a misunderstanding of how `sublime.score_selector` works. The entire selector must always match for a non-zero score, so if the goal is to check if it's not empty and matches then checking for `>= 8` is simply wrong. --- plugin/core/types.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugin/core/types.py b/plugin/core/types.py index 91b7d16df..4b230a45a 100644 --- a/plugin/core/types.py +++ b/plugin/core/types.py @@ -840,11 +840,10 @@ def match_view(self, view: sublime.View, scheme: str) -> bool: syntax = view.syntax() if not syntax: return False - # Every part of a x.y.z scope seems to contribute 8. - # An empty selector result in a score of 1. - # A non-matching non-empty selector results in a score of 0. - # We want to match at least one part of an x.y.z, and we don't want to match on empty selectors. - return scheme in self.schemes and sublime.score_selector(syntax.scope, self.selector) >= 8 + # We don't want to match on empty selectors. + if len(self.selector.strip()) == 0: + return False + return scheme in self.schemes and sublime.score_selector(syntax.scope, self.selector) def map_client_path_to_server_uri(self, path: str) -> str: if self.path_maps: From 4ef4de9cbd16785afd3a3d9ff3e691bb3aebe12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Ch=C5=82odnicki?= Date: Wed, 28 Feb 2024 08:15:53 +0100 Subject: [PATCH 2/2] Update plugin/core/types.py --- plugin/core/types.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/core/types.py b/plugin/core/types.py index 4b230a45a..8ae09bfb1 100644 --- a/plugin/core/types.py +++ b/plugin/core/types.py @@ -840,10 +840,10 @@ def match_view(self, view: sublime.View, scheme: str) -> bool: syntax = view.syntax() if not syntax: return False - # We don't want to match on empty selectors. - if len(self.selector.strip()) == 0: + selector = self.selector.strip() + if not selector: return False - return scheme in self.schemes and sublime.score_selector(syntax.scope, self.selector) + return scheme in self.schemes and sublime.score_selector(syntax.scope, selector) > 0 def map_client_path_to_server_uri(self, path: str) -> str: if self.path_maps: