|
1 | 1 | from .css import css as lsp_css
|
2 | 2 | from .protocol import CompletionItem
|
| 3 | +from .protocol import CompletionItemKind |
3 | 4 | from .protocol import CompletionItemTag
|
4 | 5 | from .protocol import Diagnostic
|
5 | 6 | from .protocol import DiagnosticRelatedInformation
|
6 | 7 | from .protocol import DiagnosticSeverity
|
| 8 | +from .protocol import DocumentHighlightKind |
7 | 9 | from .protocol import DocumentUri
|
8 | 10 | from .protocol import ExperimentalTextDocumentRangeParams
|
9 | 11 | from .protocol import Location
|
|
16 | 18 | from .protocol import Range
|
17 | 19 | from .protocol import RangeLsp
|
18 | 20 | from .protocol import Request
|
| 21 | +from .protocol import SymbolKind |
19 | 22 | from .protocol import TextDocumentIdentifier
|
20 | 23 | from .protocol import TextDocumentPositionParams
|
21 | 24 | from .settings import userprefs
|
|
47 | 50 | ("hint", "hints", "region.bluish markup.info.hint.lsp", "Packages/LSP/icons/info.png", _baseflags | sublime.DRAW_STIPPLED_UNDERLINE, sublime.DRAW_NO_FILL), # noqa: E501
|
48 | 51 | ] # type: List[Tuple[str, str, str, str, int, int]]
|
49 | 52 |
|
50 |
| -# The scope names mainly come from http://www.sublimetext.com/docs/3/scope_naming.html |
51 |
| -SYMBOL_KINDS = [ |
52 |
| - # ST Kind Icon Display Name ST Scope |
53 |
| - (sublime.KIND_ID_NAVIGATION, "f", "File", "string"), |
54 |
| - (sublime.KIND_ID_NAMESPACE, "m", "Module", "entity.name.namespace"), |
55 |
| - (sublime.KIND_ID_NAMESPACE, "n", "Namespace", "entity.name.namespace"), |
56 |
| - (sublime.KIND_ID_NAMESPACE, "p", "Package", "entity.name.namespace"), |
57 |
| - (sublime.KIND_ID_TYPE, "c", "Class", "entity.name.class"), |
58 |
| - (sublime.KIND_ID_FUNCTION, "m", "Method", "entity.name.function"), |
59 |
| - (sublime.KIND_ID_VARIABLE, "p", "Property", "variable.other.member"), |
60 |
| - (sublime.KIND_ID_VARIABLE, "f", "Field", "variable.other.member"), |
61 |
| - (sublime.KIND_ID_FUNCTION, "c", "Constructor", "entity.name.function.constructor"), |
62 |
| - (sublime.KIND_ID_TYPE, "e", "Enum", "entity.name.enum"), |
63 |
| - (sublime.KIND_ID_VARIABLE, "i", "Interface", "entity.name.interface"), |
64 |
| - (sublime.KIND_ID_FUNCTION, "f", "Function", "entity.name.function"), |
65 |
| - (sublime.KIND_ID_VARIABLE, "v", "Variable", "variable.other.readwrite"), |
66 |
| - (sublime.KIND_ID_VARIABLE, "c", "Constant", "variable.other.constant"), |
67 |
| - (sublime.KIND_ID_MARKUP, "s", "String", "string"), |
68 |
| - (sublime.KIND_ID_VARIABLE, "n", "Number", "constant.numeric"), |
69 |
| - (sublime.KIND_ID_VARIABLE, "b", "Boolean", "constant.language"), |
70 |
| - (sublime.KIND_ID_TYPE, "a", "Array", "meta.sequence"), # [scope taken from JSON.sublime-syntax] |
71 |
| - (sublime.KIND_ID_TYPE, "o", "Object", "meta.mapping"), # [scope taken from JSON.sublime-syntax] |
72 |
| - (sublime.KIND_ID_NAVIGATION, "k", "Key", "meta.mapping.key string"), # [from JSON.sublime-syntax] |
73 |
| - (sublime.KIND_ID_VARIABLE, "n", "Null", "constant.language"), |
74 |
| - (sublime.KIND_ID_VARIABLE, "e", "Enum Member", "constant.other.enum"), # Based on {Java,C#}.sublime-syntax |
75 |
| - (sublime.KIND_ID_TYPE, "s", "Struct", "entity.name.struct"), |
76 |
| - (sublime.KIND_ID_TYPE, "e", "Event", "storage.modifier"), # [scope taken from C#.sublime-syntax] |
77 |
| - (sublime.KIND_ID_FUNCTION, "o", "Operator", "keyword.operator"), |
78 |
| - (sublime.KIND_ID_TYPE, "t", "Type Parameter", "storage.type"), |
79 |
| -] |
| 53 | +# sublime.Kind tuples for sublime.CompletionItem, sublime.QuickPanelItem, sublime.ListInputItem |
| 54 | +# https://www.sublimetext.com/docs/api_reference.html#sublime.Kind |
| 55 | +KIND_ARRAY = (sublime.KIND_ID_TYPE, "a", "Array") |
| 56 | +KIND_BOOLEAN = (sublime.KIND_ID_VARIABLE, "b", "Boolean") |
| 57 | +KIND_CLASS = (sublime.KIND_ID_TYPE, "c", "Class") |
| 58 | +KIND_COLOR = (sublime.KIND_ID_MARKUP, "c", "Color") |
| 59 | +KIND_CONSTANT = (sublime.KIND_ID_VARIABLE, "c", "Constant") |
| 60 | +KIND_CONSTRUCTOR = (sublime.KIND_ID_FUNCTION, "c", "Constructor") |
| 61 | +KIND_ENUM = (sublime.KIND_ID_TYPE, "e", "Enum") |
| 62 | +KIND_ENUMMEMBER = (sublime.KIND_ID_VARIABLE, "e", "Enum Member") |
| 63 | +KIND_EVENT = (sublime.KIND_ID_FUNCTION, "e", "Event") |
| 64 | +KIND_FIELD = (sublime.KIND_ID_VARIABLE, "f", "Field") |
| 65 | +KIND_FILE = (sublime.KIND_ID_NAVIGATION, "f", "File") |
| 66 | +KIND_FOLDER = (sublime.KIND_ID_NAVIGATION, "f", "Folder") |
| 67 | +KIND_FUNCTION = (sublime.KIND_ID_FUNCTION, "f", "Function") |
| 68 | +KIND_INTERFACE = (sublime.KIND_ID_TYPE, "i", "Interface") |
| 69 | +KIND_KEY = (sublime.KIND_ID_NAVIGATION, "k", "Key") |
| 70 | +KIND_KEYWORD = (sublime.KIND_ID_KEYWORD, "k", "Keyword") |
| 71 | +KIND_METHOD = (sublime.KIND_ID_FUNCTION, "m", "Method") |
| 72 | +KIND_MODULE = (sublime.KIND_ID_NAMESPACE, "m", "Module") |
| 73 | +KIND_NAMESPACE = (sublime.KIND_ID_NAMESPACE, "n", "Namespace") |
| 74 | +KIND_NULL = (sublime.KIND_ID_VARIABLE, "n", "Null") |
| 75 | +KIND_NUMBER = (sublime.KIND_ID_VARIABLE, "n", "Number") |
| 76 | +KIND_OBJECT = (sublime.KIND_ID_TYPE, "o", "Object") |
| 77 | +KIND_OPERATOR = (sublime.KIND_ID_KEYWORD, "o", "Operator") |
| 78 | +KIND_PACKAGE = (sublime.KIND_ID_NAMESPACE, "p", "Package") |
| 79 | +KIND_PROPERTY = (sublime.KIND_ID_VARIABLE, "p", "Property") |
| 80 | +KIND_REFERENCE = (sublime.KIND_ID_NAVIGATION, "r", "Reference") |
| 81 | +KIND_SNIPPET = (sublime.KIND_ID_SNIPPET, "s", "Snippet") |
| 82 | +KIND_STRING = (sublime.KIND_ID_VARIABLE, "s", "String") |
| 83 | +KIND_STRUCT = (sublime.KIND_ID_TYPE, "s", "Struct") |
| 84 | +KIND_TEXT = (sublime.KIND_ID_MARKUP, "t", "Text") |
| 85 | +KIND_TYPEPARAMETER = (sublime.KIND_ID_TYPE, "t", "Type Parameter") |
| 86 | +KIND_UNIT = (sublime.KIND_ID_VARIABLE, "u", "Unit") |
| 87 | +KIND_VALUE = (sublime.KIND_ID_VARIABLE, "v", "Value") |
| 88 | +KIND_VARIABLE = (sublime.KIND_ID_VARIABLE, "v", "Variable") |
| 89 | + |
| 90 | +KIND_UNSPECIFIED = (sublime.KIND_ID_AMBIGUOUS, "?", "???") |
| 91 | + |
| 92 | +COMPLETION_KINDS = { |
| 93 | + CompletionItemKind.Text: KIND_TEXT, |
| 94 | + CompletionItemKind.Method: KIND_METHOD, |
| 95 | + CompletionItemKind.Function: KIND_FUNCTION, |
| 96 | + CompletionItemKind.Constructor: KIND_CONSTRUCTOR, |
| 97 | + CompletionItemKind.Field: KIND_FIELD, |
| 98 | + CompletionItemKind.Variable: KIND_VARIABLE, |
| 99 | + CompletionItemKind.Class: KIND_CLASS, |
| 100 | + CompletionItemKind.Interface: KIND_INTERFACE, |
| 101 | + CompletionItemKind.Module: KIND_MODULE, |
| 102 | + CompletionItemKind.Property: KIND_PROPERTY, |
| 103 | + CompletionItemKind.Unit: KIND_UNIT, |
| 104 | + CompletionItemKind.Value: KIND_VALUE, |
| 105 | + CompletionItemKind.Enum: KIND_ENUM, |
| 106 | + CompletionItemKind.Keyword: KIND_KEYWORD, |
| 107 | + CompletionItemKind.Snippet: KIND_SNIPPET, |
| 108 | + CompletionItemKind.Color: KIND_COLOR, |
| 109 | + CompletionItemKind.File: KIND_FILE, |
| 110 | + CompletionItemKind.Reference: KIND_REFERENCE, |
| 111 | + CompletionItemKind.Folder: KIND_FOLDER, |
| 112 | + CompletionItemKind.EnumMember: KIND_ENUMMEMBER, |
| 113 | + CompletionItemKind.Constant: KIND_CONSTANT, |
| 114 | + CompletionItemKind.Struct: KIND_STRUCT, |
| 115 | + CompletionItemKind.Event: KIND_EVENT, |
| 116 | + CompletionItemKind.Operator: KIND_OPERATOR, |
| 117 | + CompletionItemKind.TypeParameter: KIND_TYPEPARAMETER |
| 118 | +} |
80 | 119 |
|
81 |
| -COMPLETION_KINDS = [ |
82 |
| - # ST Kind Icon Display Name |
83 |
| - (sublime.KIND_ID_MARKUP, "t", "Text"), |
84 |
| - (sublime.KIND_ID_FUNCTION, "m", "Method"), |
85 |
| - (sublime.KIND_ID_FUNCTION, "f", "Function"), |
86 |
| - (sublime.KIND_ID_FUNCTION, "c", "Constructor"), |
87 |
| - (sublime.KIND_ID_VARIABLE, "f", "Field"), |
88 |
| - (sublime.KIND_ID_VARIABLE, "v", "Variable"), |
89 |
| - (sublime.KIND_ID_TYPE, "c", "Class"), |
90 |
| - (sublime.KIND_ID_TYPE, "i", "Interface"), |
91 |
| - (sublime.KIND_ID_NAMESPACE, "m", "Module"), |
92 |
| - (sublime.KIND_ID_VARIABLE, "p", "Property"), |
93 |
| - (sublime.KIND_ID_VARIABLE, "u", "Unit"), |
94 |
| - (sublime.KIND_ID_VARIABLE, "v", "Value"), |
95 |
| - (sublime.KIND_ID_TYPE, "e", "Enum"), |
96 |
| - (sublime.KIND_ID_KEYWORD, "k", "Keyword"), |
97 |
| - (sublime.KIND_ID_SNIPPET, "s", "Snippet"), |
98 |
| - (sublime.KIND_ID_MARKUP, "c", "Color"), |
99 |
| - (sublime.KIND_ID_NAVIGATION, "f", "File"), |
100 |
| - (sublime.KIND_ID_NAVIGATION, "r", "Reference"), |
101 |
| - (sublime.KIND_ID_NAMESPACE, "f", "Folder"), |
102 |
| - (sublime.KIND_ID_VARIABLE, "e", "Enum Member"), |
103 |
| - (sublime.KIND_ID_VARIABLE, "c", "Constant"), |
104 |
| - (sublime.KIND_ID_TYPE, "s", "Struct"), |
105 |
| - (sublime.KIND_ID_TYPE, "e", "Event"), |
106 |
| - (sublime.KIND_ID_KEYWORD, "o", "Operator"), |
107 |
| - (sublime.KIND_ID_TYPE, "t", "Type Parameter"), |
108 |
| -] |
| 120 | +SYMBOL_KINDS = { |
| 121 | + SymbolKind.File: KIND_FILE, |
| 122 | + SymbolKind.Module: KIND_MODULE, |
| 123 | + SymbolKind.Namespace: KIND_NAMESPACE, |
| 124 | + SymbolKind.Package: KIND_PACKAGE, |
| 125 | + SymbolKind.Class: KIND_CLASS, |
| 126 | + SymbolKind.Method: KIND_METHOD, |
| 127 | + SymbolKind.Property: KIND_PROPERTY, |
| 128 | + SymbolKind.Field: KIND_FIELD, |
| 129 | + SymbolKind.Constructor: KIND_CONSTRUCTOR, |
| 130 | + SymbolKind.Enum: KIND_ENUM, |
| 131 | + SymbolKind.Interface: KIND_INTERFACE, |
| 132 | + SymbolKind.Function: KIND_FUNCTION, |
| 133 | + SymbolKind.Variable: KIND_VARIABLE, |
| 134 | + SymbolKind.Constant: KIND_CONSTANT, |
| 135 | + SymbolKind.String: KIND_STRING, |
| 136 | + SymbolKind.Number: KIND_NUMBER, |
| 137 | + SymbolKind.Boolean: KIND_BOOLEAN, |
| 138 | + SymbolKind.Array: KIND_ARRAY, |
| 139 | + SymbolKind.Object: KIND_OBJECT, |
| 140 | + SymbolKind.Key: KIND_KEY, |
| 141 | + SymbolKind.Null: KIND_NULL, |
| 142 | + SymbolKind.EnumMember: KIND_ENUMMEMBER, |
| 143 | + SymbolKind.Struct: KIND_STRUCT, |
| 144 | + SymbolKind.Event: KIND_EVENT, |
| 145 | + SymbolKind.Operator: KIND_OPERATOR, |
| 146 | + SymbolKind.TypeParameter: KIND_TYPEPARAMETER |
| 147 | +} |
| 148 | + |
| 149 | +SYMBOL_KIND_SCOPES = { |
| 150 | + SymbolKind.File: "string", |
| 151 | + SymbolKind.Module: "entity.name.namespace", |
| 152 | + SymbolKind.Namespace: "entity.name.namespace", |
| 153 | + SymbolKind.Package: "entity.name.namespace", |
| 154 | + SymbolKind.Class: "entity.name.class", |
| 155 | + SymbolKind.Method: "entity.name.function", |
| 156 | + SymbolKind.Property: "variable.other.member", |
| 157 | + SymbolKind.Field: "variable.other.member", |
| 158 | + SymbolKind.Constructor: "entity.name.function.constructor", |
| 159 | + SymbolKind.Enum: "entity.name.enum", |
| 160 | + SymbolKind.Interface: "entity.name.interface", |
| 161 | + SymbolKind.Function: "entity.name.function", |
| 162 | + SymbolKind.Variable: "variable.other", |
| 163 | + SymbolKind.Constant: "variable.other.constant", |
| 164 | + SymbolKind.String: "string", |
| 165 | + SymbolKind.Number: "constant.numeric", |
| 166 | + SymbolKind.Boolean: "constant.language.boolean", |
| 167 | + SymbolKind.Array: "meta.sequence", |
| 168 | + SymbolKind.Object: "meta.mapping", |
| 169 | + SymbolKind.Key: "meta.mapping.key string", |
| 170 | + SymbolKind.Null: "constant.language.null", |
| 171 | + SymbolKind.EnumMember: "constant.other.enum", |
| 172 | + SymbolKind.Struct: "entity.name.struct", |
| 173 | + SymbolKind.Event: "entity.name.function", |
| 174 | + SymbolKind.Operator: "keyword.operator", |
| 175 | + SymbolKind.TypeParameter: "variable.parameter.type" |
| 176 | +} |
| 177 | + |
| 178 | +DOCUMENT_HIGHLIGHT_KINDS = { |
| 179 | + DocumentHighlightKind.Text: "text", |
| 180 | + DocumentHighlightKind.Read: "read", |
| 181 | + DocumentHighlightKind.Write: "write" |
| 182 | +} |
| 183 | + |
| 184 | +DOCUMENT_HIGHLIGHT_KIND_SCOPES = { |
| 185 | + DocumentHighlightKind.Text: "region.bluish markup.highlight.text.lsp", |
| 186 | + DocumentHighlightKind.Read: "region.greenish markup.highlight.read.lsp", |
| 187 | + DocumentHighlightKind.Write: "region.yellowish markup.highlight.write.lsp" |
| 188 | +} |
109 | 189 |
|
110 | 190 | SEMANTIC_TOKENS_MAP = {
|
111 | 191 | "namespace": "variable.other.namespace.lsp",
|
@@ -877,10 +957,7 @@ def format_completion(
|
877 | 957 | ) -> sublime.CompletionItem:
|
878 | 958 | # This is a hot function. Don't do heavy computations or IO in this function.
|
879 | 959 | item_kind = item.get("kind")
|
880 |
| - if isinstance(item_kind, int) and 1 <= item_kind <= len(COMPLETION_KINDS): |
881 |
| - kind = COMPLETION_KINDS[item_kind - 1] |
882 |
| - else: |
883 |
| - kind = sublime.KIND_AMBIGUOUS |
| 960 | + kind = COMPLETION_KINDS.get(item_kind, KIND_UNSPECIFIED) if item_kind else KIND_UNSPECIFIED |
884 | 961 |
|
885 | 962 | if _is_completion_item_deprecated(item):
|
886 | 963 | kind = (kind[0], '!', "⚠ {} - Deprecated".format(kind[2]))
|
|
0 commit comments