Skip to content

Commit

Permalink
use session-unique region keys for semantic tokens (#2517)
Browse files Browse the repository at this point in the history
  • Loading branch information
rchl authored Sep 22, 2024
1 parent 8ae2729 commit 9b6ecb6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
9 changes: 6 additions & 3 deletions plugin/session_buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -677,16 +677,18 @@ def _draw_semantic_tokens_async(self) -> None:
# don't update regions if there were additional changes to the buffer in the meantime
if self.semantic_tokens.view_change_count != view.change_count():
return
session_name = self.session.config.name
for region_key in self.semantic_tokens.active_region_keys.copy():
if region_key not in scope_regions.keys():
self.semantic_tokens.active_region_keys.remove(region_key)
for sv in self.session_views:
sv.view.erase_regions(f"lsp_semantic_{region_key}")
sv.view.erase_regions(f"lsp_semantic_{session_name}_{region_key}")
for region_key, (scope, regions) in scope_regions.items():
if region_key not in self.semantic_tokens.active_region_keys:
self.semantic_tokens.active_region_keys.add(region_key)
for sv in self.session_views:
sv.view.add_regions(f"lsp_semantic_{region_key}", regions, scope, flags=SEMANTIC_TOKEN_FLAGS)
sv.view.add_regions(
f"lsp_semantic_{session_name}_{region_key}", regions, scope, flags=SEMANTIC_TOKEN_FLAGS)

def _get_semantic_region_key_for_scope(self, scope: str) -> int:
if scope not in self._semantic_region_keys:
Expand All @@ -695,8 +697,9 @@ def _get_semantic_region_key_for_scope(self, scope: str) -> int:
return self._semantic_region_keys[scope]

def _clear_semantic_token_regions(self, view: sublime.View) -> None:
session_name = self.session.config.name
for region_key in self.semantic_tokens.active_region_keys:
view.erase_regions(f"lsp_semantic_{region_key}")
view.erase_regions(f"lsp_semantic_{session_name}_{region_key}")

def set_semantic_tokens_pending_refresh(self, needs_refresh: bool = True) -> None:
self.semantic_tokens.needs_refresh = needs_refresh
Expand Down
9 changes: 5 additions & 4 deletions plugin/session_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,9 @@ def _initialize_region_keys(self) -> None:
hover_highlight_style = userprefs().hover_highlight_style
line_modes = ["m", "s"]
self.view.add_regions(self.CODE_ACTIONS_KEY, r) # code actions lightbulb icon should always be on top
session_name = self.session.config.name
for key in range(1, 100):
keys.append(f"lsp_semantic_{key}")
keys.append(f"lsp_semantic_{session_name}_{key}")
if document_highlight_style in ("background", "fill"):
for kind in DOCUMENT_HIGHLIGHT_KIND_NAMES.values():
for mode in line_modes:
Expand All @@ -151,14 +152,14 @@ def _initialize_region_keys(self) -> None:
for severity in range(1, 5):
for mode in line_modes:
for tag in range(1, 3):
keys.append(f"lsp{self.session.config.name}d{mode}{severity}_tags_{tag}")
keys.append(f"lsp{session_name}d{mode}{severity}_tags_{tag}")
keys.append("lsp_document_link")
for severity in range(1, 5):
for mode in line_modes:
keys.append(f"lsp{self.session.config.name}d{mode}{severity}_icon")
keys.append(f"lsp{session_name}d{mode}{severity}_icon")
for severity in range(4, 0, -1):
for mode in line_modes:
keys.append(f"lsp{self.session.config.name}d{mode}{severity}_underline")
keys.append(f"lsp{session_name}d{mode}{severity}_underline")
if document_highlight_style in ("underline", "stippled"):
for kind in DOCUMENT_HIGHLIGHT_KIND_NAMES.values():
for mode in line_modes:
Expand Down

0 comments on commit 9b6ecb6

Please sign in to comment.