@difizen/libro-language-client 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/es/common/api.d.ts +38 -0
  4. package/es/common/api.d.ts.map +1 -0
  5. package/es/common/api.js +9 -0
  6. package/es/common/callHierarchy.d.ts +39 -0
  7. package/es/common/callHierarchy.d.ts.map +1 -0
  8. package/es/common/callHierarchy.js +139 -0
  9. package/es/common/client.d.ts +482 -0
  10. package/es/common/client.d.ts.map +1 -0
  11. package/es/common/client.js +2731 -0
  12. package/es/common/codeAction.d.ts +22 -0
  13. package/es/common/codeAction.d.ts.map +1 -0
  14. package/es/common/codeAction.js +149 -0
  15. package/es/common/codeConverter.d.ts +81 -0
  16. package/es/common/codeConverter.d.ts.map +1 -0
  17. package/es/common/codeConverter.js +1040 -0
  18. package/es/common/codeLens.d.ts +26 -0
  19. package/es/common/codeLens.d.ts.map +1 -0
  20. package/es/common/codeLens.js +125 -0
  21. package/es/common/colorProvider.d.ts +27 -0
  22. package/es/common/colorProvider.d.ts.map +1 -0
  23. package/es/common/colorProvider.js +104 -0
  24. package/es/common/completion.d.ts +22 -0
  25. package/es/common/completion.d.ts.map +1 -0
  26. package/es/common/completion.js +130 -0
  27. package/es/common/configuration.d.ts +71 -0
  28. package/es/common/configuration.d.ts.map +1 -0
  29. package/es/common/configuration.js +292 -0
  30. package/es/common/declaration.d.ts +18 -0
  31. package/es/common/declaration.d.ts.map +1 -0
  32. package/es/common/declaration.js +88 -0
  33. package/es/common/definition.d.ts +18 -0
  34. package/es/common/definition.d.ts.map +1 -0
  35. package/es/common/definition.js +80 -0
  36. package/es/common/diagnostic.d.ts +125 -0
  37. package/es/common/diagnostic.d.ts.map +1 -0
  38. package/es/common/diagnostic.js +1442 -0
  39. package/es/common/documentHighlight.d.ts +17 -0
  40. package/es/common/documentHighlight.d.ts.map +1 -0
  41. package/es/common/documentHighlight.js +73 -0
  42. package/es/common/documentLink.d.ts +21 -0
  43. package/es/common/documentLink.d.ts.map +1 -0
  44. package/es/common/documentLink.js +90 -0
  45. package/es/common/documentSymbol.d.ts +20 -0
  46. package/es/common/documentSymbol.d.ts.map +1 -0
  47. package/es/common/documentSymbol.js +134 -0
  48. package/es/common/executeCommand.d.ts +22 -0
  49. package/es/common/executeCommand.d.ts.map +1 -0
  50. package/es/common/executeCommand.js +117 -0
  51. package/es/common/features.d.ts +421 -0
  52. package/es/common/features.d.ts.map +1 -0
  53. package/es/common/features.js +576 -0
  54. package/es/common/fileOperations.d.ts +118 -0
  55. package/es/common/fileOperations.d.ts.map +1 -0
  56. package/es/common/fileOperations.js +705 -0
  57. package/es/common/fileSystemWatcher.d.ts +19 -0
  58. package/es/common/fileSystemWatcher.d.ts.map +1 -0
  59. package/es/common/fileSystemWatcher.js +173 -0
  60. package/es/common/foldingRange.d.ts +22 -0
  61. package/es/common/foldingRange.d.ts.map +1 -0
  62. package/es/common/foldingRange.js +127 -0
  63. package/es/common/formatting.d.ts +41 -0
  64. package/es/common/formatting.d.ts.map +1 -0
  65. package/es/common/formatting.js +233 -0
  66. package/es/common/hover.d.ts +18 -0
  67. package/es/common/hover.d.ts.map +1 -0
  68. package/es/common/hover.js +80 -0
  69. package/es/common/implementation.d.ts +18 -0
  70. package/es/common/implementation.d.ts.map +1 -0
  71. package/es/common/implementation.js +88 -0
  72. package/es/common/inlayHint.d.ts +23 -0
  73. package/es/common/inlayHint.d.ts.map +1 -0
  74. package/es/common/inlayHint.js +187 -0
  75. package/es/common/inlineCompletion.d.ts +20 -0
  76. package/es/common/inlineCompletion.d.ts.map +1 -0
  77. package/es/common/inlineCompletion.js +74 -0
  78. package/es/common/inlineValue.d.ts +21 -0
  79. package/es/common/inlineValue.d.ts.map +1 -0
  80. package/es/common/inlineValue.js +124 -0
  81. package/es/common/linkedEditingRange.d.ts +23 -0
  82. package/es/common/linkedEditingRange.d.ts.map +1 -0
  83. package/es/common/linkedEditingRange.js +94 -0
  84. package/es/common/notebook.d.ts +97 -0
  85. package/es/common/notebook.d.ts.map +1 -0
  86. package/es/common/notebook.js +1444 -0
  87. package/es/common/progress.d.ts +12 -0
  88. package/es/common/progress.d.ts.map +1 -0
  89. package/es/common/progress.js +75 -0
  90. package/es/common/progressPart.d.ts +25 -0
  91. package/es/common/progressPart.d.ts.map +1 -0
  92. package/es/common/progressPart.js +147 -0
  93. package/es/common/protocolCallHierarchyItem.d.ts +9 -0
  94. package/es/common/protocolCallHierarchyItem.d.ts.map +1 -0
  95. package/es/common/protocolCallHierarchyItem.js +34 -0
  96. package/es/common/protocolCodeAction.d.ts +7 -0
  97. package/es/common/protocolCodeAction.d.ts.map +1 -0
  98. package/es/common/protocolCodeAction.js +32 -0
  99. package/es/common/protocolCodeLens.d.ts +7 -0
  100. package/es/common/protocolCodeLens.d.ts.map +1 -0
  101. package/es/common/protocolCodeLens.js +29 -0
  102. package/es/common/protocolCompletionItem.d.ts +13 -0
  103. package/es/common/protocolCompletionItem.d.ts.map +1 -0
  104. package/es/common/protocolCompletionItem.js +29 -0
  105. package/es/common/protocolConverter.d.ts +174 -0
  106. package/es/common/protocolConverter.d.ts.map +1 -0
  107. package/es/common/protocolConverter.js +1982 -0
  108. package/es/common/protocolDiagnostic.d.ts +20 -0
  109. package/es/common/protocolDiagnostic.d.ts.map +1 -0
  110. package/es/common/protocolDiagnostic.js +46 -0
  111. package/es/common/protocolDocumentLink.d.ts +8 -0
  112. package/es/common/protocolDocumentLink.d.ts.map +1 -0
  113. package/es/common/protocolDocumentLink.js +29 -0
  114. package/es/common/protocolInlayHint.d.ts +8 -0
  115. package/es/common/protocolInlayHint.d.ts.map +1 -0
  116. package/es/common/protocolInlayHint.js +29 -0
  117. package/es/common/protocolTypeHierarchyItem.d.ts +9 -0
  118. package/es/common/protocolTypeHierarchyItem.d.ts.map +1 -0
  119. package/es/common/protocolTypeHierarchyItem.js +34 -0
  120. package/es/common/protocolWorkspaceSymbol.d.ts +9 -0
  121. package/es/common/protocolWorkspaceSymbol.d.ts.map +1 -0
  122. package/es/common/protocolWorkspaceSymbol.js +36 -0
  123. package/es/common/reference.d.ts +22 -0
  124. package/es/common/reference.d.ts.map +1 -0
  125. package/es/common/reference.js +78 -0
  126. package/es/common/rename.d.ts +29 -0
  127. package/es/common/rename.d.ts.map +1 -0
  128. package/es/common/rename.js +132 -0
  129. package/es/common/selectionRange.d.ts +18 -0
  130. package/es/common/selectionRange.d.ts.map +1 -0
  131. package/es/common/selectionRange.js +108 -0
  132. package/es/common/semanticTokens.d.ts +36 -0
  133. package/es/common/semanticTokens.d.ts.map +1 -0
  134. package/es/common/semanticTokens.js +226 -0
  135. package/es/common/signatureHelp.d.ts +18 -0
  136. package/es/common/signatureHelp.d.ts.map +1 -0
  137. package/es/common/signatureHelp.js +103 -0
  138. package/es/common/textSynchronization.d.ts +104 -0
  139. package/es/common/textSynchronization.d.ts.map +1 -0
  140. package/es/common/textSynchronization.js +771 -0
  141. package/es/common/typeDefinition.d.ts +18 -0
  142. package/es/common/typeDefinition.d.ts.map +1 -0
  143. package/es/common/typeDefinition.js +89 -0
  144. package/es/common/typeHierarchy.d.ts +33 -0
  145. package/es/common/typeHierarchy.d.ts.map +1 -0
  146. package/es/common/typeHierarchy.js +138 -0
  147. package/es/common/utils/async.d.ts +42 -0
  148. package/es/common/utils/async.d.ts.map +1 -0
  149. package/es/common/utils/async.js +441 -0
  150. package/es/common/utils/is.d.ts +13 -0
  151. package/es/common/utils/is.d.ts.map +1 -0
  152. package/es/common/utils/is.js +52 -0
  153. package/es/common/utils/uuid.d.ts +23 -0
  154. package/es/common/utils/uuid.d.ts.map +1 -0
  155. package/es/common/utils/uuid.js +85 -0
  156. package/es/common/vscodeAdaptor/convertor.d.ts +7 -0
  157. package/es/common/vscodeAdaptor/convertor.d.ts.map +1 -0
  158. package/es/common/vscodeAdaptor/convertor.js +66 -0
  159. package/es/common/vscodeAdaptor/diagnosticCollection.d.ts +33 -0
  160. package/es/common/vscodeAdaptor/diagnosticCollection.d.ts.map +1 -0
  161. package/es/common/vscodeAdaptor/diagnosticCollection.js +310 -0
  162. package/es/common/vscodeAdaptor/extHostTypes.d.ts +1496 -0
  163. package/es/common/vscodeAdaptor/extHostTypes.d.ts.map +1 -0
  164. package/es/common/vscodeAdaptor/extHostTypes.js +3825 -0
  165. package/es/common/vscodeAdaptor/fileWatcher.d.ts +19 -0
  166. package/es/common/vscodeAdaptor/fileWatcher.d.ts.map +1 -0
  167. package/es/common/vscodeAdaptor/fileWatcher.js +45 -0
  168. package/es/common/vscodeAdaptor/hostTypeUtil.d.ts +192 -0
  169. package/es/common/vscodeAdaptor/hostTypeUtil.d.ts.map +1 -0
  170. package/es/common/vscodeAdaptor/hostTypeUtil.js +566 -0
  171. package/es/common/vscodeAdaptor/libro-fs.d.ts +21 -0
  172. package/es/common/vscodeAdaptor/libro-fs.d.ts.map +1 -0
  173. package/es/common/vscodeAdaptor/libro-fs.js +64 -0
  174. package/es/common/vscodeAdaptor/libroWindow.d.ts +21 -0
  175. package/es/common/vscodeAdaptor/libroWindow.d.ts.map +1 -0
  176. package/es/common/vscodeAdaptor/libroWindow.js +75 -0
  177. package/es/common/vscodeAdaptor/libroWorkspace.d.ts +33 -0
  178. package/es/common/vscodeAdaptor/libroWorkspace.d.ts.map +1 -0
  179. package/es/common/vscodeAdaptor/libroWorkspace.js +250 -0
  180. package/es/common/vscodeAdaptor/lspEnv.d.ts +8 -0
  181. package/es/common/vscodeAdaptor/lspEnv.d.ts.map +1 -0
  182. package/es/common/vscodeAdaptor/lspEnv.js +31 -0
  183. package/es/common/vscodeAdaptor/monaco-converter.d.ts +229 -0
  184. package/es/common/vscodeAdaptor/monaco-converter.d.ts.map +1 -0
  185. package/es/common/vscodeAdaptor/monaco-converter.js +1613 -0
  186. package/es/common/vscodeAdaptor/monacoLanguages.d.ts +48 -0
  187. package/es/common/vscodeAdaptor/monacoLanguages.d.ts.map +1 -0
  188. package/es/common/vscodeAdaptor/monacoLanguages.js +484 -0
  189. package/es/common/vscodeAdaptor/services.d.ts +85 -0
  190. package/es/common/vscodeAdaptor/services.d.ts.map +1 -0
  191. package/es/common/vscodeAdaptor/services.js +3 -0
  192. package/es/common/vscodeAdaptor/typings.d.ts +10 -0
  193. package/es/common/vscodeAdaptor/util.d.ts +3 -0
  194. package/es/common/vscodeAdaptor/util.d.ts.map +1 -0
  195. package/es/common/vscodeAdaptor/util.js +6 -0
  196. package/es/common/vscodeAdaptor/vscodeAdaptor.d.ts +77 -0
  197. package/es/common/vscodeAdaptor/vscodeAdaptor.d.ts.map +1 -0
  198. package/es/common/vscodeAdaptor/vscodeAdaptor.js +124 -0
  199. package/es/common/workspaceFolder.d.ts +32 -0
  200. package/es/common/workspaceFolder.d.ts.map +1 -0
  201. package/es/common/workspaceFolder.js +204 -0
  202. package/es/common/workspaceSymbol.d.ts +21 -0
  203. package/es/common/workspaceSymbol.d.ts.map +1 -0
  204. package/es/common/workspaceSymbol.js +101 -0
  205. package/es/constants.d.ts +2 -0
  206. package/es/constants.d.ts.map +1 -0
  207. package/es/constants.js +1 -0
  208. package/es/index.d.ts +6 -0
  209. package/es/index.d.ts.map +1 -0
  210. package/es/index.js +5 -0
  211. package/es/libro-language-client-contribution.d.ts +10 -0
  212. package/es/libro-language-client-contribution.d.ts.map +1 -0
  213. package/es/libro-language-client-contribution.js +143 -0
  214. package/es/libro-language-client-manager.d.ts +34 -0
  215. package/es/libro-language-client-manager.d.ts.map +1 -0
  216. package/es/libro-language-client-manager.js +277 -0
  217. package/es/libro-language-client.d.ts +27 -0
  218. package/es/libro-language-client.d.ts.map +1 -0
  219. package/es/libro-language-client.js +141 -0
  220. package/es/module.d.ts +3 -0
  221. package/es/module.d.ts.map +1 -0
  222. package/es/module.js +13 -0
  223. package/package.json +69 -0
  224. package/src/common/api.ts +155 -0
  225. package/src/common/callHierarchy.ts +269 -0
  226. package/src/common/client.ts +3192 -0
  227. package/src/common/codeAction.ts +237 -0
  228. package/src/common/codeConverter.ts +1409 -0
  229. package/src/common/codeLens.ts +188 -0
  230. package/src/common/colorProvider.ts +192 -0
  231. package/src/common/completion.ts +281 -0
  232. package/src/common/configuration.ts +338 -0
  233. package/src/common/declaration.ts +140 -0
  234. package/src/common/definition.ts +138 -0
  235. package/src/common/diagnostic.ts +1408 -0
  236. package/src/common/documentHighlight.ts +140 -0
  237. package/src/common/documentLink.ts +180 -0
  238. package/src/common/documentSymbol.ts +186 -0
  239. package/src/common/executeCommand.ts +129 -0
  240. package/src/common/features.ts +1157 -0
  241. package/src/common/fileOperations.ts +635 -0
  242. package/src/common/fileSystemWatcher.ts +184 -0
  243. package/src/common/foldingRange.ts +160 -0
  244. package/src/common/formatting.ts +465 -0
  245. package/src/common/hover.ts +133 -0
  246. package/src/common/implementation.ts +142 -0
  247. package/src/common/inlayHint.ts +201 -0
  248. package/src/common/inlineCompletion.ts +160 -0
  249. package/src/common/inlineValue.ts +158 -0
  250. package/src/common/linkedEditingRange.ts +141 -0
  251. package/src/common/notebook.ts +1443 -0
  252. package/src/common/progress.ts +61 -0
  253. package/src/common/progressPart.ts +151 -0
  254. package/src/common/protocolCallHierarchyItem.ts +29 -0
  255. package/src/common/protocolCodeAction.ts +17 -0
  256. package/src/common/protocolCodeLens.ts +15 -0
  257. package/src/common/protocolCompletionItem.ts +22 -0
  258. package/src/common/protocolConverter.ts +2627 -0
  259. package/src/common/protocolDiagnostic.ts +47 -0
  260. package/src/common/protocolDocumentLink.ts +17 -0
  261. package/src/common/protocolInlayHint.ts +21 -0
  262. package/src/common/protocolTypeHierarchyItem.ts +29 -0
  263. package/src/common/protocolWorkspaceSymbol.ts +39 -0
  264. package/src/common/reference.ts +144 -0
  265. package/src/common/rename.ts +230 -0
  266. package/src/common/selectionRange.ts +136 -0
  267. package/src/common/semanticTokens.ts +383 -0
  268. package/src/common/signatureHelp.ts +170 -0
  269. package/src/common/textSynchronization.ts +819 -0
  270. package/src/common/typeDefinition.ts +146 -0
  271. package/src/common/typeHierarchy.ts +248 -0
  272. package/src/common/utils/async.ts +354 -0
  273. package/src/common/utils/is.ts +63 -0
  274. package/src/common/utils/uuid.ts +136 -0
  275. package/src/common/vscodeAdaptor/convertor.ts +73 -0
  276. package/src/common/vscodeAdaptor/diagnosticCollection.ts +238 -0
  277. package/src/common/vscodeAdaptor/extHostTypes.ts +4498 -0
  278. package/src/common/vscodeAdaptor/fileWatcher.ts +36 -0
  279. package/src/common/vscodeAdaptor/hostTypeUtil.ts +539 -0
  280. package/src/common/vscodeAdaptor/libro-fs.ts +51 -0
  281. package/src/common/vscodeAdaptor/libroWindow.ts +85 -0
  282. package/src/common/vscodeAdaptor/libroWorkspace.ts +261 -0
  283. package/src/common/vscodeAdaptor/lspEnv.ts +16 -0
  284. package/src/common/vscodeAdaptor/monaco-converter.ts +1800 -0
  285. package/src/common/vscodeAdaptor/monacoLanguages.ts +511 -0
  286. package/src/common/vscodeAdaptor/services.ts +278 -0
  287. package/src/common/vscodeAdaptor/typings.d.ts +10 -0
  288. package/src/common/vscodeAdaptor/util.ts +7 -0
  289. package/src/common/vscodeAdaptor/vscodeAdaptor.ts +122 -0
  290. package/src/common/workspaceFolder.ts +236 -0
  291. package/src/common/workspaceSymbol.ts +166 -0
  292. package/src/constants.ts +1 -0
  293. package/src/index.spec.ts +7 -0
  294. package/src/index.ts +5 -0
  295. package/src/libro-language-client-contribution.ts +49 -0
  296. package/src/libro-language-client-manager.ts +131 -0
  297. package/src/libro-language-client.ts +100 -0
  298. package/src/module.ts +19 -0
@@ -0,0 +1,383 @@
1
+ /* --------------------------------------------------------------------------------------------
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ * ------------------------------------------------------------------------------------------ */
5
+
6
+ import type {
7
+ ClientCapabilities,
8
+ ServerCapabilities,
9
+ DocumentSelector,
10
+ SemanticTokensOptions,
11
+ SemanticTokensRegistrationOptions,
12
+ SemanticTokensParams,
13
+ SemanticTokensDeltaParams,
14
+ SemanticTokensRangeParams,
15
+ } from '@difizen/vscode-languageserver-protocol';
16
+ import {
17
+ SemanticTokenTypes,
18
+ SemanticTokenModifiers,
19
+ SemanticTokens,
20
+ TokenFormat,
21
+ SemanticTokensRequest,
22
+ SemanticTokensDeltaRequest,
23
+ SemanticTokensRangeRequest,
24
+ SemanticTokensRefreshRequest,
25
+ SemanticTokensRegistrationType,
26
+ } from '@difizen/vscode-languageserver-protocol';
27
+ import type {
28
+ SemanticTokens as VSemanticTokens,
29
+ CancellationToken,
30
+ DocumentRangeSemanticTokensProvider,
31
+ DocumentSemanticTokensProvider,
32
+ ProviderResult,
33
+ SemanticTokensEdits,
34
+ TextDocument,
35
+ SemanticTokensLegend,
36
+ Range,
37
+ } from 'vscode';
38
+
39
+ import type { FeatureClient } from './features.js';
40
+ import { TextDocumentLanguageFeature, ensure } from './features.js';
41
+ import * as Is from './utils/is.js';
42
+ import { languages, Disposable, EventEmitter } from './vscodeAdaptor/vscodeAdaptor.js';
43
+
44
+ export interface DocumentSemanticsTokensSignature {
45
+ (
46
+ this: void,
47
+ document: TextDocument,
48
+ token: CancellationToken,
49
+ ): ProviderResult<VSemanticTokens>;
50
+ }
51
+
52
+ export interface DocumentSemanticsTokensEditsSignature {
53
+ (
54
+ this: void,
55
+ document: TextDocument,
56
+ previousResultId: string,
57
+ token: CancellationToken,
58
+ ): ProviderResult<SemanticTokensEdits | VSemanticTokens>;
59
+ }
60
+
61
+ export interface DocumentRangeSemanticTokensSignature {
62
+ (
63
+ this: void,
64
+ document: TextDocument,
65
+ range: Range,
66
+ token: CancellationToken,
67
+ ): ProviderResult<VSemanticTokens>;
68
+ }
69
+
70
+ /**
71
+ * The semantic token middleware
72
+ *
73
+ * @since 3.16.0
74
+ */
75
+ export interface SemanticTokensMiddleware {
76
+ provideDocumentSemanticTokens?: (
77
+ this: void,
78
+ document: TextDocument,
79
+ token: CancellationToken,
80
+ next: DocumentSemanticsTokensSignature,
81
+ ) => ProviderResult<VSemanticTokens>;
82
+ provideDocumentSemanticTokensEdits?: (
83
+ this: void,
84
+ document: TextDocument,
85
+ previousResultId: string,
86
+ token: CancellationToken,
87
+ next: DocumentSemanticsTokensEditsSignature,
88
+ ) => ProviderResult<SemanticTokensEdits | VSemanticTokens>;
89
+ provideDocumentRangeSemanticTokens?: (
90
+ this: void,
91
+ document: TextDocument,
92
+ range: Range,
93
+ token: CancellationToken,
94
+ next: DocumentRangeSemanticTokensSignature,
95
+ ) => ProviderResult<VSemanticTokens>;
96
+ }
97
+
98
+ export interface SemanticTokensProviderShape {
99
+ range?: DocumentRangeSemanticTokensProvider;
100
+ full?: DocumentSemanticTokensProvider;
101
+ onDidChangeSemanticTokensEmitter: EventEmitter<void>;
102
+ }
103
+
104
+ export class SemanticTokensFeature extends TextDocumentLanguageFeature<
105
+ boolean | SemanticTokensOptions,
106
+ SemanticTokensRegistrationOptions,
107
+ SemanticTokensProviderShape,
108
+ SemanticTokensMiddleware
109
+ > {
110
+ constructor(client: FeatureClient<SemanticTokensMiddleware>) {
111
+ super(client, SemanticTokensRegistrationType.type);
112
+ }
113
+
114
+ public fillClientCapabilities(capabilities: ClientCapabilities): void {
115
+ const capability = ensure(ensure(capabilities, 'textDocument')!, 'semanticTokens')!;
116
+ capability.dynamicRegistration = true;
117
+ capability.tokenTypes = [
118
+ SemanticTokenTypes.namespace,
119
+ SemanticTokenTypes.type,
120
+ SemanticTokenTypes.class,
121
+ SemanticTokenTypes.enum,
122
+ SemanticTokenTypes.interface,
123
+ SemanticTokenTypes.struct,
124
+ SemanticTokenTypes.typeParameter,
125
+ SemanticTokenTypes.parameter,
126
+ SemanticTokenTypes.variable,
127
+ SemanticTokenTypes.property,
128
+ SemanticTokenTypes.enumMember,
129
+ SemanticTokenTypes.event,
130
+ SemanticTokenTypes.function,
131
+ SemanticTokenTypes.method,
132
+ SemanticTokenTypes.macro,
133
+ SemanticTokenTypes.keyword,
134
+ SemanticTokenTypes.modifier,
135
+ SemanticTokenTypes.comment,
136
+ SemanticTokenTypes.string,
137
+ SemanticTokenTypes.number,
138
+ SemanticTokenTypes.regexp,
139
+ SemanticTokenTypes.operator,
140
+ SemanticTokenTypes.decorator,
141
+ ];
142
+ capability.tokenModifiers = [
143
+ SemanticTokenModifiers.declaration,
144
+ SemanticTokenModifiers.definition,
145
+ SemanticTokenModifiers.readonly,
146
+ SemanticTokenModifiers.static,
147
+ SemanticTokenModifiers.deprecated,
148
+ SemanticTokenModifiers.abstract,
149
+ SemanticTokenModifiers.async,
150
+ SemanticTokenModifiers.modification,
151
+ SemanticTokenModifiers.documentation,
152
+ SemanticTokenModifiers.defaultLibrary,
153
+ ];
154
+ capability.formats = [TokenFormat.Relative];
155
+ capability.requests = {
156
+ range: true,
157
+ full: {
158
+ delta: true,
159
+ },
160
+ };
161
+ capability.multilineTokenSupport = false;
162
+ capability.overlappingTokenSupport = false;
163
+ capability.serverCancelSupport = true;
164
+ capability.augmentsSyntaxTokens = true;
165
+ ensure(ensure(capabilities, 'workspace')!, 'semanticTokens')!.refreshSupport = true;
166
+ }
167
+
168
+ public initialize(
169
+ capabilities: ServerCapabilities,
170
+ documentSelector: DocumentSelector,
171
+ ): void {
172
+ const client = this._client;
173
+ client.onRequest(SemanticTokensRefreshRequest.type, async () => {
174
+ for (const provider of this.getAllProviders()) {
175
+ provider.onDidChangeSemanticTokensEmitter.fire();
176
+ }
177
+ });
178
+ const [id, options] = this.getRegistration(
179
+ documentSelector,
180
+ capabilities.semanticTokensProvider,
181
+ );
182
+ if (!id || !options) {
183
+ return;
184
+ }
185
+ this.register({ id: id, registerOptions: options });
186
+ }
187
+
188
+ protected registerLanguageProvider(
189
+ options: SemanticTokensRegistrationOptions,
190
+ ): [Disposable, SemanticTokensProviderShape] {
191
+ const selector = options.documentSelector!;
192
+ const fullProvider = Is.boolean(options.full)
193
+ ? options.full
194
+ : options.full !== undefined;
195
+ const hasEditProvider =
196
+ options.full !== undefined &&
197
+ typeof options.full !== 'boolean' &&
198
+ options.full.delta === true;
199
+ const eventEmitter: EventEmitter<void> = new EventEmitter<void>();
200
+ const documentProvider: DocumentSemanticTokensProvider | undefined = fullProvider
201
+ ? {
202
+ onDidChangeSemanticTokens: eventEmitter.event,
203
+ provideDocumentSemanticTokens: (document, token) => {
204
+ const client = this._client;
205
+ const middleware = client.middleware;
206
+ const provideDocumentSemanticTokens: DocumentSemanticsTokensSignature = (
207
+ document,
208
+ token,
209
+ ) => {
210
+ const params: SemanticTokensParams = {
211
+ textDocument:
212
+ client.code2ProtocolConverter.asTextDocumentIdentifier(document),
213
+ };
214
+ return client.sendRequest(SemanticTokensRequest.type, params, token).then(
215
+ (result) => {
216
+ if (token.isCancellationRequested) {
217
+ return null;
218
+ }
219
+ return client.protocol2CodeConverter.asSemanticTokens(result, token);
220
+ },
221
+ (error: any) => {
222
+ return client.handleFailedRequest(
223
+ SemanticTokensRequest.type,
224
+ token,
225
+ error,
226
+ null,
227
+ );
228
+ },
229
+ );
230
+ };
231
+ return middleware.provideDocumentSemanticTokens
232
+ ? middleware.provideDocumentSemanticTokens(
233
+ document,
234
+ token,
235
+ provideDocumentSemanticTokens,
236
+ )
237
+ : provideDocumentSemanticTokens(document, token);
238
+ },
239
+ provideDocumentSemanticTokensEdits: hasEditProvider
240
+ ? (document, previousResultId, token) => {
241
+ const client = this._client;
242
+ const middleware = client.middleware;
243
+ const provideDocumentSemanticTokensEdits: DocumentSemanticsTokensEditsSignature =
244
+ (document, previousResultId, token) => {
245
+ const params: SemanticTokensDeltaParams = {
246
+ textDocument:
247
+ client.code2ProtocolConverter.asTextDocumentIdentifier(
248
+ document,
249
+ ),
250
+ previousResultId,
251
+ };
252
+ return client
253
+ .sendRequest(SemanticTokensDeltaRequest.type, params, token)
254
+ .then(
255
+ async (result) => {
256
+ if (token.isCancellationRequested) {
257
+ return null;
258
+ }
259
+ if (SemanticTokens.is(result)) {
260
+ return await client.protocol2CodeConverter.asSemanticTokens(
261
+ result,
262
+ token,
263
+ );
264
+ } else {
265
+ return await client.protocol2CodeConverter.asSemanticTokensEdits(
266
+ result,
267
+ token,
268
+ );
269
+ }
270
+ },
271
+ (error: any) => {
272
+ return client.handleFailedRequest(
273
+ SemanticTokensDeltaRequest.type,
274
+ token,
275
+ error,
276
+ null,
277
+ );
278
+ },
279
+ );
280
+ };
281
+ return middleware.provideDocumentSemanticTokensEdits
282
+ ? middleware.provideDocumentSemanticTokensEdits(
283
+ document,
284
+ previousResultId,
285
+ token,
286
+ provideDocumentSemanticTokensEdits,
287
+ )
288
+ : provideDocumentSemanticTokensEdits(
289
+ document,
290
+ previousResultId,
291
+ token,
292
+ );
293
+ }
294
+ : undefined,
295
+ }
296
+ : undefined;
297
+
298
+ const hasRangeProvider: boolean = options.range === true;
299
+ const rangeProvider: DocumentRangeSemanticTokensProvider | undefined =
300
+ hasRangeProvider
301
+ ? {
302
+ provideDocumentRangeSemanticTokens: (
303
+ document: TextDocument,
304
+ range: Range,
305
+ token: CancellationToken,
306
+ ) => {
307
+ const client = this._client;
308
+ const middleware = client.middleware;
309
+ const provideDocumentRangeSemanticTokens: DocumentRangeSemanticTokensSignature =
310
+ (document, range, token) => {
311
+ const params: SemanticTokensRangeParams = {
312
+ textDocument:
313
+ client.code2ProtocolConverter.asTextDocumentIdentifier(document),
314
+ range: client.code2ProtocolConverter.asRange(range),
315
+ };
316
+ return client
317
+ .sendRequest(SemanticTokensRangeRequest.type, params, token)
318
+ .then(
319
+ (result) => {
320
+ if (token.isCancellationRequested) {
321
+ return null;
322
+ }
323
+ return client.protocol2CodeConverter.asSemanticTokens(
324
+ result,
325
+ token,
326
+ );
327
+ },
328
+ (error: any) => {
329
+ return client.handleFailedRequest(
330
+ SemanticTokensRangeRequest.type,
331
+ token,
332
+ error,
333
+ null,
334
+ );
335
+ },
336
+ );
337
+ };
338
+ return middleware.provideDocumentRangeSemanticTokens
339
+ ? middleware.provideDocumentRangeSemanticTokens(
340
+ document,
341
+ range,
342
+ token,
343
+ provideDocumentRangeSemanticTokens,
344
+ )
345
+ : provideDocumentRangeSemanticTokens(document, range, token);
346
+ },
347
+ }
348
+ : undefined;
349
+
350
+ const disposables: Disposable[] = [];
351
+ const client = this._client;
352
+ const legend: SemanticTokensLegend =
353
+ client.protocol2CodeConverter.asSemanticTokensLegend(options.legend);
354
+ const documentSelector = client.protocol2CodeConverter.asDocumentSelector(selector);
355
+ if (documentProvider !== undefined) {
356
+ disposables.push(
357
+ languages.registerDocumentSemanticTokensProvider(
358
+ documentSelector,
359
+ documentProvider,
360
+ legend,
361
+ ),
362
+ );
363
+ }
364
+ if (rangeProvider !== undefined) {
365
+ disposables.push(
366
+ languages.registerDocumentRangeSemanticTokensProvider(
367
+ documentSelector,
368
+ rangeProvider,
369
+ legend,
370
+ ),
371
+ );
372
+ }
373
+
374
+ return [
375
+ new Disposable(() => disposables.forEach((item) => item.dispose())),
376
+ {
377
+ range: rangeProvider,
378
+ full: documentProvider,
379
+ onDidChangeSemanticTokensEmitter: eventEmitter,
380
+ },
381
+ ];
382
+ }
383
+ }
@@ -0,0 +1,170 @@
1
+ /* --------------------------------------------------------------------------------------------
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ * ------------------------------------------------------------------------------------------ */
5
+
6
+ import type {
7
+ ClientCapabilities,
8
+ DocumentSelector,
9
+ ServerCapabilities,
10
+ SignatureHelpOptions,
11
+ SignatureHelpRegistrationOptions,
12
+ } from '@difizen/vscode-languageserver-protocol';
13
+ import {
14
+ MarkupKind,
15
+ SignatureHelpRequest,
16
+ } from '@difizen/vscode-languageserver-protocol';
17
+ import type {
18
+ TextDocument,
19
+ Disposable,
20
+ Position as VPosition,
21
+ CancellationToken,
22
+ ProviderResult,
23
+ SignatureHelpProvider,
24
+ SignatureHelpContext as VSignatureHelpContext,
25
+ SignatureHelp as VSignatureHelp,
26
+ SignatureHelpProviderMetadata as VSignatureHelpProviderMetadata,
27
+ } from 'vscode';
28
+
29
+ import type { FeatureClient, DocumentSelectorOptions } from './features.js';
30
+ import { ensure, TextDocumentLanguageFeature } from './features.js';
31
+ import * as UUID from './utils/uuid.js';
32
+ import { languages as Languages } from './vscodeAdaptor/vscodeAdaptor.js';
33
+
34
+ export interface ProvideSignatureHelpSignature {
35
+ (
36
+ this: void,
37
+ document: TextDocument,
38
+ position: VPosition,
39
+ context: VSignatureHelpContext,
40
+ token: CancellationToken,
41
+ ): ProviderResult<VSignatureHelp>;
42
+ }
43
+
44
+ export interface SignatureHelpMiddleware {
45
+ provideSignatureHelp?: (
46
+ this: void,
47
+ document: TextDocument,
48
+ position: VPosition,
49
+ context: VSignatureHelpContext,
50
+ token: CancellationToken,
51
+ next: ProvideSignatureHelpSignature,
52
+ ) => ProviderResult<VSignatureHelp>;
53
+ }
54
+
55
+ export class SignatureHelpFeature extends TextDocumentLanguageFeature<
56
+ SignatureHelpOptions,
57
+ SignatureHelpRegistrationOptions,
58
+ SignatureHelpProvider,
59
+ SignatureHelpMiddleware
60
+ > {
61
+ constructor(client: FeatureClient<SignatureHelpMiddleware>) {
62
+ super(client, SignatureHelpRequest.type);
63
+ }
64
+
65
+ public fillClientCapabilities(capabilities: ClientCapabilities): void {
66
+ const config = ensure(ensure(capabilities, 'textDocument')!, 'signatureHelp')!;
67
+ config.dynamicRegistration = true;
68
+ config.signatureInformation = {
69
+ documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText],
70
+ };
71
+ config.signatureInformation.parameterInformation = { labelOffsetSupport: true };
72
+ config.signatureInformation.activeParameterSupport = true;
73
+ config.signatureInformation.noActiveParameterSupport = true;
74
+ config.contextSupport = true;
75
+ }
76
+
77
+ public initialize(
78
+ capabilities: ServerCapabilities,
79
+ documentSelector: DocumentSelector,
80
+ ): void {
81
+ const options = this.getRegistrationOptions(
82
+ documentSelector,
83
+ capabilities.signatureHelpProvider,
84
+ );
85
+ if (!options) {
86
+ return;
87
+ }
88
+ this.register({
89
+ id: UUID.generateUuid(),
90
+ registerOptions: options,
91
+ });
92
+ }
93
+
94
+ protected registerLanguageProvider(
95
+ options: SignatureHelpRegistrationOptions & DocumentSelectorOptions,
96
+ ): [Disposable, SignatureHelpProvider] {
97
+ const provider: SignatureHelpProvider = {
98
+ provideSignatureHelp: (document, position, token, context) => {
99
+ const client = this._client;
100
+ const providerSignatureHelp: ProvideSignatureHelpSignature = (
101
+ document,
102
+ position,
103
+ context,
104
+ token,
105
+ ) => {
106
+ return client
107
+ .sendRequest(
108
+ SignatureHelpRequest.type,
109
+ client.code2ProtocolConverter.asSignatureHelpParams(
110
+ document,
111
+ position,
112
+ context,
113
+ ),
114
+ token,
115
+ )
116
+ .then(
117
+ (result) => {
118
+ if (token.isCancellationRequested) {
119
+ return null;
120
+ }
121
+ return client.protocol2CodeConverter.asSignatureHelp(result, token);
122
+ },
123
+ (error) => {
124
+ return client.handleFailedRequest(
125
+ SignatureHelpRequest.type,
126
+ token,
127
+ error,
128
+ null,
129
+ );
130
+ },
131
+ );
132
+ };
133
+ const middleware = client.middleware;
134
+ return middleware.provideSignatureHelp
135
+ ? middleware.provideSignatureHelp(
136
+ document,
137
+ position,
138
+ context,
139
+ token,
140
+ providerSignatureHelp,
141
+ )
142
+ : providerSignatureHelp(document, position, context, token);
143
+ },
144
+ };
145
+ return [this.registerProvider(options, provider), provider];
146
+ }
147
+
148
+ private registerProvider(
149
+ options: DocumentSelectorOptions & SignatureHelpOptions,
150
+ provider: SignatureHelpProvider,
151
+ ): Disposable {
152
+ const selector = this._client.protocol2CodeConverter.asDocumentSelector(
153
+ options.documentSelector,
154
+ );
155
+ if (options.retriggerCharacters === undefined) {
156
+ const triggerCharacters = options.triggerCharacters || [];
157
+ return Languages.registerSignatureHelpProvider(
158
+ selector,
159
+ provider,
160
+ ...triggerCharacters,
161
+ );
162
+ } else {
163
+ const metaData: VSignatureHelpProviderMetadata = {
164
+ triggerCharacters: options.triggerCharacters || [],
165
+ retriggerCharacters: options.retriggerCharacters || [],
166
+ };
167
+ return Languages.registerSignatureHelpProvider(selector, provider, metaData);
168
+ }
169
+ }
170
+ }