Skip to content

Commit

Permalink
Sort symbol before send to Emacs.
Browse files Browse the repository at this point in the history
  • Loading branch information
manateelazycat committed Oct 7, 2024
1 parent 58d53c1 commit f726a34
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions core/handler/completion_workspace_symbol.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from core.handler import Handler
from core.utils import *
from functools import cmp_to_key


class CompletionWorkspaceSymbol(Handler):
Expand All @@ -8,11 +9,24 @@ class CompletionWorkspaceSymbol(Handler):
provider = "workspace_symbol_provider"

def process_request(self, lsp_server, query) -> dict:
self.prefix = query
self.lsp_server = lsp_server
self.lsp_server_name = self.lsp_server.server_info["name"]
query = ''.join(query.split())
return dict(query=query)

def compare_candidates(self, x, y):
prefix = self.prefix.lower()
x_label, y_label = x["label"].lower(), y["label"].lower()
x_include_prefix, y_include_prefix = x_label.startswith(prefix), y_label.startswith(prefix)

# Sort by prefix.
if x_include_prefix != y_include_prefix:
return -1 if x_include_prefix else 1

# Sort by length.
return -1 if len(x_label) < len(y_label) else (1 if len(x_label) > len(y_label) else 0)

def process_response(self, response: dict) -> None:
if response is not None:
completion_symbols = []
Expand All @@ -32,6 +46,8 @@ def process_response(self, response: dict) -> None:

completion_symbols.append(symbol)

completion_symbols = sorted(completion_symbols, key=cmp_to_key(self.compare_candidates))

if len(completion_symbols) > 0:
eval_in_emacs("lsp-bridge-completion-workspace-symbol--record-items",
self.file_action.filepath,
Expand Down

0 comments on commit f726a34

Please sign in to comment.