Skip to content

Commit ed70eb2

Browse files
committed
Refactor complicated logic in get_initialize_params to a function
1 parent 80d4cbe commit ed70eb2

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

plugin/core/sessions.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,27 @@ def on_post_exit_async(self, session: 'Session', exit_code: int, exception: Opti
185185
pass
186186

187187

188+
def _sequence_to_lsp_indices(sequence: Sequence[Any]) -> List[int]:
189+
return list(range(1, len(sequence) + 1))
190+
191+
192+
def _enum_like_class_to_list(c: Type[object]) -> List[str]:
193+
return [v for k, v in c.__dict__.items() if not k.startswith('_')]
194+
195+
188196
def get_initialize_params(variables: Dict[str, str], workspace_folders: List[WorkspaceFolder],
189197
config: ClientConfig) -> dict:
190-
completion_kinds = list(range(1, len(COMPLETION_KINDS) + 1))
191-
symbol_kinds = list(range(1, len(SYMBOL_KINDS) + 1))
192-
diagnostic_tag_value_set = [v for k, v in DiagnosticTag.__dict__.items() if not k.startswith('_')]
193-
completion_tag_value_set = [v for k, v in CompletionItemTag.__dict__.items() if not k.startswith('_')]
194-
symbol_tag_value_set = [v for k, v in SymbolTag.__dict__.items() if not k.startswith('_')]
195-
semantic_token_types = [v for k, v in SemanticTokenTypes.__dict__.items() if not k.startswith('_')]
198+
completion_kinds = _sequence_to_lsp_indices(COMPLETION_KINDS)
199+
symbol_kinds = _sequence_to_lsp_indices(SYMBOL_KINDS)
200+
diagnostic_tag_value_set = _enum_like_class_to_list(DiagnosticTag)
201+
completion_tag_value_set = _enum_like_class_to_list(CompletionItemTag)
202+
symbol_tag_value_set = _enum_like_class_to_list(SymbolTag)
203+
semantic_token_types = _enum_like_class_to_list(SemanticTokenTypes)
196204
if config.semantic_tokens is not None:
197205
for token_type in config.semantic_tokens.keys():
198206
if token_type not in semantic_token_types:
199207
semantic_token_types.append(token_type)
200-
semantic_token_modifiers = [v for k, v in SemanticTokenModifiers.__dict__.items() if not k.startswith('_')]
208+
semantic_token_modifiers = _enum_like_class_to_list(SemanticTokenModifiers)
201209
first_folder = workspace_folders[0] if workspace_folders else None
202210
general_capabilities = {
203211
# https://microsoft.github.io/language-server-protocol/specification#regExp

0 commit comments

Comments
 (0)