@theia/plugin-metrics 1.34.3 → 1.34.4

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 (48) hide show
  1. package/LICENSE +641 -641
  2. package/README.md +63 -63
  3. package/lib/browser/plugin-metrics-creator.d.ts +67 -67
  4. package/lib/browser/plugin-metrics-creator.js +185 -185
  5. package/lib/browser/plugin-metrics-frontend-module.d.ts +3 -3
  6. package/lib/browser/plugin-metrics-frontend-module.js +36 -36
  7. package/lib/browser/plugin-metrics-languages-main.d.ts +58 -58
  8. package/lib/browser/plugin-metrics-languages-main.js +211 -211
  9. package/lib/browser/plugin-metrics-output-registry.d.ts +7 -7
  10. package/lib/browser/plugin-metrics-output-registry.js +48 -48
  11. package/lib/browser/plugin-metrics-resolver.d.ts +17 -17
  12. package/lib/browser/plugin-metrics-resolver.js +69 -69
  13. package/lib/common/metrics-protocol.d.ts +10 -10
  14. package/lib/common/metrics-protocol.js +24 -24
  15. package/lib/common/plugin-metrics-types.d.ts +27 -27
  16. package/lib/common/plugin-metrics-types.js +56 -56
  17. package/lib/node/metric-output/plugin-metrics-time-count.d.ts +5 -5
  18. package/lib/node/metric-output/plugin-metrics-time-count.js +43 -43
  19. package/lib/node/metric-output/plugin-metrics-time-sum.d.ts +5 -5
  20. package/lib/node/metric-output/plugin-metrics-time-sum.js +41 -41
  21. package/lib/node/metric-string-generator.d.ts +6 -6
  22. package/lib/node/metric-string-generator.js +78 -78
  23. package/lib/node/metrics-contributor.d.ts +6 -6
  24. package/lib/node/metrics-contributor.js +76 -76
  25. package/lib/node/metrics-contributor.spec.d.ts +1 -1
  26. package/lib/node/metrics-contributor.spec.js +203 -203
  27. package/lib/node/plugin-metrics-backend-module.d.ts +3 -3
  28. package/lib/node/plugin-metrics-backend-module.js +47 -47
  29. package/lib/node/plugin-metrics-impl.d.ts +10 -10
  30. package/lib/node/plugin-metrics-impl.js +45 -45
  31. package/lib/node/plugin-metrics.d.ts +10 -10
  32. package/lib/node/plugin-metrics.js +54 -54
  33. package/package.json +7 -7
  34. package/src/browser/plugin-metrics-creator.ts +189 -189
  35. package/src/browser/plugin-metrics-frontend-module.ts +38 -38
  36. package/src/browser/plugin-metrics-languages-main.ts +325 -325
  37. package/src/browser/plugin-metrics-output-registry.ts +37 -37
  38. package/src/browser/plugin-metrics-resolver.ts +57 -57
  39. package/src/common/metrics-protocol.ts +27 -27
  40. package/src/common/plugin-metrics-types.ts +80 -80
  41. package/src/node/metric-output/plugin-metrics-time-count.ts +36 -36
  42. package/src/node/metric-output/plugin-metrics-time-sum.ts +35 -35
  43. package/src/node/metric-string-generator.ts +70 -70
  44. package/src/node/metrics-contributor.spec.ts +234 -234
  45. package/src/node/metrics-contributor.ts +70 -70
  46. package/src/node/plugin-metrics-backend-module.ts +49 -49
  47. package/src/node/plugin-metrics-impl.ts +38 -38
  48. package/src/node/plugin-metrics.ts +44 -44
@@ -1,325 +1,325 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2019 Red Hat and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { CodeActionProviderDocumentation, Range, SerializedDocumentFilter, WorkspaceSymbolParams } from '@theia/plugin-ext/lib/common/plugin-api-rpc-model';
18
- import { PluginMetricsResolver } from './plugin-metrics-resolver';
19
- import { LanguagesMainImpl } from '@theia/plugin-ext/lib/main/browser/languages-main';
20
- import { SymbolInformation } from '@theia/core/shared/vscode-languageserver-protocol';
21
- import { injectable, inject } from '@theia/core/shared/inversify';
22
- import * as vst from '@theia/core/shared/vscode-languageserver-protocol';
23
- import { PluginInfo } from '@theia/plugin-ext/lib/common/plugin-api-rpc';
24
- import * as theia from '@theia/plugin';
25
- import * as monaco from '@theia/monaco-editor-core';
26
-
27
- @injectable()
28
- export class LanguagesMainPluginMetrics extends LanguagesMainImpl {
29
-
30
- @inject(PluginMetricsResolver)
31
- private pluginMetricsResolver: PluginMetricsResolver;
32
-
33
- // Map of handle to extension id
34
- protected readonly handleToExtensionID = new Map<number, string>();
35
-
36
- override $unregister(handle: number): void {
37
- this.handleToExtensionID.delete(handle);
38
- super.$unregister(handle);
39
- }
40
-
41
- protected override provideCompletionItems(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
42
- context: monaco.languages.CompletionContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionList> {
43
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
44
- vst.CompletionRequest.type.method,
45
- super.provideCompletionItems(handle, model, position, context, token));
46
- }
47
-
48
- protected override resolveCompletionItem(handle: number,
49
- item: monaco.languages.CompletionItem, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionItem> {
50
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
51
- vst.CompletionRequest.type.method,
52
- super.resolveCompletionItem(handle, item, token));
53
- }
54
-
55
- protected override provideReferences(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
56
- context: monaco.languages.ReferenceContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Location[]> {
57
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
58
- vst.ReferencesRequest.type.method,
59
- super.provideReferences(handle, model, position, context, token));
60
- }
61
-
62
- protected override provideImplementation(handle: number, model: monaco.editor.ITextModel,
63
- position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
64
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
65
- vst.ImplementationRequest.type.method,
66
- super.provideImplementation(handle, model, position, token));
67
- }
68
-
69
- protected override provideTypeDefinition(handle: number, model: monaco.editor.ITextModel,
70
- position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
71
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
72
- vst.TypeDefinitionRequest.type.method,
73
- super.provideTypeDefinition(handle, model, position, token));
74
- }
75
-
76
- protected override provideHover(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
77
- token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Hover> {
78
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
79
- vst.HoverRequest.type.method,
80
- super.provideHover(handle, model, position, token));
81
- }
82
-
83
- protected override provideDocumentHighlights(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
84
- token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentHighlight[]> {
85
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
86
- vst.DocumentHighlightRequest.type.method,
87
- super.provideDocumentHighlights(handle, model, position, token));
88
- }
89
-
90
- protected override provideWorkspaceSymbols(handle: number, params: WorkspaceSymbolParams, token: monaco.CancellationToken): Thenable<SymbolInformation[]> {
91
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
92
- vst.WorkspaceSymbolRequest.type.method,
93
- super.provideWorkspaceSymbols(handle, params, token));
94
- }
95
-
96
- protected override resolveWorkspaceSymbol(handle: number, symbol: SymbolInformation, token: monaco.CancellationToken): Thenable<SymbolInformation> {
97
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
98
- vst.WorkspaceSymbolRequest.type.method,
99
- super.resolveWorkspaceSymbol(handle, symbol, token));
100
- }
101
-
102
- protected override async provideLinks(handle: number, model: monaco.editor.ITextModel,
103
- token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILinksList>> {
104
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
105
- vst.DocumentLinkRequest.type.method,
106
- super.provideLinks(handle, model, token));
107
- }
108
-
109
- protected override async resolveLink(handle: number, link: monaco.languages.ILink,
110
- token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILink>> {
111
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
112
- vst.DocumentLinkRequest.type.method,
113
- super.resolveLink(handle, link, token));
114
- }
115
-
116
- protected override async provideCodeLenses(handle: number, model: monaco.editor.ITextModel,
117
- token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.CodeLensList>> {
118
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
119
- vst.CodeLensRequest.type.method,
120
- super.provideCodeLenses(handle, model, token));
121
- }
122
-
123
- protected override resolveCodeLens(handle: number, model: monaco.editor.ITextModel,
124
- codeLens: monaco.languages.CodeLens, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CodeLens> {
125
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
126
- vst.CodeLensResolveRequest.type.method,
127
- super.resolveCodeLens(handle, model, codeLens, token));
128
- }
129
-
130
- protected override provideDocumentSymbols(handle: number, model: monaco.editor.ITextModel,
131
- token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentSymbol[]> {
132
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
133
- vst.DocumentSymbolRequest.type.method,
134
- super.provideDocumentSymbols(handle, model, token));
135
- }
136
-
137
- protected override provideDefinition(handle: number, model: monaco.editor.ITextModel,
138
- position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
139
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
140
- vst.DefinitionRequest.type.method,
141
- super.provideDefinition(handle, model, position, token));
142
- }
143
-
144
- protected override async provideSignatureHelp(handle: number, model: monaco.editor.ITextModel,
145
- position: monaco.Position, token: monaco.CancellationToken,
146
- context: monaco.languages.SignatureHelpContext): Promise<monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult>> {
147
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
148
- vst.SignatureHelpRequest.type.method,
149
- super.provideSignatureHelp(handle, model, position, token, context));
150
- }
151
-
152
- protected override provideDocumentFormattingEdits(handle: number, model: monaco.editor.ITextModel,
153
- options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
154
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
155
- vst.DocumentFormattingRequest.type.method,
156
- super.provideDocumentFormattingEdits(handle, model, options, token));
157
- }
158
-
159
- protected override provideDocumentRangeFormattingEdits(handle: number, model: monaco.editor.ITextModel,
160
- range: Range, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
161
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
162
- vst.DocumentRangeFormattingRequest.type.method,
163
- super.provideDocumentRangeFormattingEdits(handle, model, range, options, token));
164
- }
165
-
166
- protected override provideOnTypeFormattingEdits(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
167
- ch: string, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
168
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
169
- vst.DocumentOnTypeFormattingRequest.type.method,
170
- super.provideOnTypeFormattingEdits(handle, model, position, ch, options, token));
171
- }
172
-
173
- protected override provideFoldingRanges(handle: number, model: monaco.editor.ITextModel,
174
- context: monaco.languages.FoldingContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.FoldingRange[]> {
175
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
176
- vst.FoldingRangeRequest.type.method,
177
- super.provideFoldingRanges(handle, model, context, token));
178
- }
179
-
180
- protected override provideDocumentColors(handle: number, model: monaco.editor.ITextModel,
181
- token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorInformation[]> {
182
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
183
- vst.DocumentColorRequest.type.method,
184
- super.provideDocumentColors(handle, model, token));
185
- }
186
-
187
- protected override provideColorPresentations(handle: number, model: monaco.editor.ITextModel,
188
- colorInfo: monaco.languages.IColorInformation, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorPresentation[]> {
189
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
190
- vst.ColorPresentationRequest.type.method,
191
- super.provideColorPresentations(handle, model, colorInfo, token));
192
- }
193
-
194
- protected override async provideCodeActions(handle: number, model: monaco.editor.ITextModel,
195
- rangeOrSelection: Range, context: monaco.languages.CodeActionContext,
196
- token: monaco.CancellationToken): Promise<monaco.languages.CodeActionList | monaco.languages.CodeActionList> {
197
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
198
- vst.CodeActionRequest.type.method,
199
- super.provideCodeActions(handle, model, rangeOrSelection, context, token));
200
- }
201
-
202
- protected override provideRenameEdits(handle: number, model: monaco.editor.ITextModel,
203
- position: monaco.Position, newName: string, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.WorkspaceEdit & monaco.languages.Rejection> {
204
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
205
- vst.RenameRequest.type.method,
206
- super.provideRenameEdits(handle, model, position, newName, token));
207
- }
208
-
209
- protected override resolveRenameLocation(handle: number, model: monaco.editor.ITextModel,
210
- position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.RenameLocation> {
211
- return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
212
- vst.RenameRequest.type.method,
213
- super.resolveRenameLocation(handle, model, position, token));
214
- }
215
-
216
- override $registerCompletionSupport(handle: number, pluginInfo: PluginInfo,
217
- selector: SerializedDocumentFilter[], triggerCharacters: string[], supportsResolveDetails: boolean): void {
218
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
219
- super.$registerCompletionSupport(handle, pluginInfo, selector, triggerCharacters, supportsResolveDetails);
220
- }
221
-
222
- override $registerDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
223
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
224
- super.$registerDefinitionProvider(handle, pluginInfo, selector);
225
- }
226
-
227
- override $registerDeclarationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
228
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
229
- super.$registerDeclarationProvider(handle, pluginInfo, selector);
230
- }
231
-
232
- override $registerReferenceProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
233
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
234
- super.$registerReferenceProvider(handle, pluginInfo, selector);
235
- }
236
-
237
- override $registerSignatureHelpProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], metadata: theia.SignatureHelpProviderMetadata): void {
238
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
239
- super.$registerSignatureHelpProvider(handle, pluginInfo, selector, metadata);
240
- }
241
-
242
- override $registerImplementationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
243
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
244
- super.$registerImplementationProvider(handle, pluginInfo, selector);
245
- }
246
-
247
- override $registerTypeDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
248
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
249
- super.$registerTypeDefinitionProvider(handle, pluginInfo, selector);
250
- }
251
-
252
- override $registerHoverProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
253
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
254
- super.$registerHoverProvider(handle, pluginInfo, selector);
255
- }
256
-
257
- override $registerDocumentHighlightProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
258
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
259
- super.$registerDocumentHighlightProvider(handle, pluginInfo, selector);
260
- }
261
-
262
- override $registerWorkspaceSymbolProvider(handle: number, pluginInfo: PluginInfo): void {
263
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
264
- super.$registerWorkspaceSymbolProvider(handle, pluginInfo);
265
- }
266
-
267
- override $registerDocumentLinkProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
268
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
269
- super.$registerDocumentLinkProvider(handle, pluginInfo, selector);
270
- }
271
-
272
- override $registerCodeLensSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
273
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
274
- super.$registerCodeLensSupport(handle, pluginInfo, selector, eventHandle);
275
- }
276
-
277
- override $registerOutlineSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string): void {
278
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
279
- super.$registerOutlineSupport(handle, pluginInfo, selector, displayName);
280
- }
281
-
282
- override $registerDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
283
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
284
- super.$registerDocumentFormattingSupport(handle, pluginInfo, selector);
285
- }
286
-
287
- override $registerRangeFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
288
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
289
- super.$registerRangeFormattingSupport(handle, pluginInfo, selector);
290
- }
291
-
292
- override $registerOnTypeFormattingProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], autoFormatTriggerCharacters: string[]): void {
293
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
294
- super.$registerOnTypeFormattingProvider(handle, pluginInfo, selector, autoFormatTriggerCharacters);
295
- }
296
-
297
- override $registerFoldingRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
298
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
299
- super.$registerFoldingRangeProvider(handle, pluginInfo, selector, eventHandle);
300
- }
301
-
302
- override $registerDocumentColorProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
303
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
304
- super.$registerDocumentColorProvider(handle, pluginInfo, selector);
305
- }
306
-
307
- override $registerQuickFixProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], codeActionKinds?: string[],
308
- documentation?: CodeActionProviderDocumentation): void {
309
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
310
- super.$registerQuickFixProvider(handle, pluginInfo, selector, codeActionKinds, documentation);
311
- }
312
-
313
- override $registerRenameProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], supportsResolveLocation: boolean): void {
314
- this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
315
- super.$registerRenameProvider(handle, pluginInfo, selector, supportsResolveLocation);
316
- }
317
-
318
- private registerPluginWithFeatureHandle(handle: number, pluginID: string): void {
319
- this.handleToExtensionID.set(handle, pluginID);
320
- }
321
-
322
- private handleToExtensionName(handle: number): string {
323
- return this.handleToExtensionID.get(handle) as string;
324
- }
325
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2019 Red Hat and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { CodeActionProviderDocumentation, Range, SerializedDocumentFilter, WorkspaceSymbolParams } from '@theia/plugin-ext/lib/common/plugin-api-rpc-model';
18
+ import { PluginMetricsResolver } from './plugin-metrics-resolver';
19
+ import { LanguagesMainImpl } from '@theia/plugin-ext/lib/main/browser/languages-main';
20
+ import { SymbolInformation } from '@theia/core/shared/vscode-languageserver-protocol';
21
+ import { injectable, inject } from '@theia/core/shared/inversify';
22
+ import * as vst from '@theia/core/shared/vscode-languageserver-protocol';
23
+ import { PluginInfo } from '@theia/plugin-ext/lib/common/plugin-api-rpc';
24
+ import * as theia from '@theia/plugin';
25
+ import * as monaco from '@theia/monaco-editor-core';
26
+
27
+ @injectable()
28
+ export class LanguagesMainPluginMetrics extends LanguagesMainImpl {
29
+
30
+ @inject(PluginMetricsResolver)
31
+ private pluginMetricsResolver: PluginMetricsResolver;
32
+
33
+ // Map of handle to extension id
34
+ protected readonly handleToExtensionID = new Map<number, string>();
35
+
36
+ override $unregister(handle: number): void {
37
+ this.handleToExtensionID.delete(handle);
38
+ super.$unregister(handle);
39
+ }
40
+
41
+ protected override provideCompletionItems(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
42
+ context: monaco.languages.CompletionContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionList> {
43
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
44
+ vst.CompletionRequest.type.method,
45
+ super.provideCompletionItems(handle, model, position, context, token));
46
+ }
47
+
48
+ protected override resolveCompletionItem(handle: number,
49
+ item: monaco.languages.CompletionItem, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CompletionItem> {
50
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
51
+ vst.CompletionRequest.type.method,
52
+ super.resolveCompletionItem(handle, item, token));
53
+ }
54
+
55
+ protected override provideReferences(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
56
+ context: monaco.languages.ReferenceContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Location[]> {
57
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
58
+ vst.ReferencesRequest.type.method,
59
+ super.provideReferences(handle, model, position, context, token));
60
+ }
61
+
62
+ protected override provideImplementation(handle: number, model: monaco.editor.ITextModel,
63
+ position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
64
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
65
+ vst.ImplementationRequest.type.method,
66
+ super.provideImplementation(handle, model, position, token));
67
+ }
68
+
69
+ protected override provideTypeDefinition(handle: number, model: monaco.editor.ITextModel,
70
+ position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
71
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
72
+ vst.TypeDefinitionRequest.type.method,
73
+ super.provideTypeDefinition(handle, model, position, token));
74
+ }
75
+
76
+ protected override provideHover(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
77
+ token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Hover> {
78
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
79
+ vst.HoverRequest.type.method,
80
+ super.provideHover(handle, model, position, token));
81
+ }
82
+
83
+ protected override provideDocumentHighlights(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
84
+ token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentHighlight[]> {
85
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
86
+ vst.DocumentHighlightRequest.type.method,
87
+ super.provideDocumentHighlights(handle, model, position, token));
88
+ }
89
+
90
+ protected override provideWorkspaceSymbols(handle: number, params: WorkspaceSymbolParams, token: monaco.CancellationToken): Thenable<SymbolInformation[]> {
91
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
92
+ vst.WorkspaceSymbolRequest.type.method,
93
+ super.provideWorkspaceSymbols(handle, params, token));
94
+ }
95
+
96
+ protected override resolveWorkspaceSymbol(handle: number, symbol: SymbolInformation, token: monaco.CancellationToken): Thenable<SymbolInformation> {
97
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
98
+ vst.WorkspaceSymbolRequest.type.method,
99
+ super.resolveWorkspaceSymbol(handle, symbol, token));
100
+ }
101
+
102
+ protected override async provideLinks(handle: number, model: monaco.editor.ITextModel,
103
+ token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILinksList>> {
104
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
105
+ vst.DocumentLinkRequest.type.method,
106
+ super.provideLinks(handle, model, token));
107
+ }
108
+
109
+ protected override async resolveLink(handle: number, link: monaco.languages.ILink,
110
+ token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.ILink>> {
111
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
112
+ vst.DocumentLinkRequest.type.method,
113
+ super.resolveLink(handle, link, token));
114
+ }
115
+
116
+ protected override async provideCodeLenses(handle: number, model: monaco.editor.ITextModel,
117
+ token: monaco.CancellationToken): Promise<monaco.languages.ProviderResult<monaco.languages.CodeLensList>> {
118
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
119
+ vst.CodeLensRequest.type.method,
120
+ super.provideCodeLenses(handle, model, token));
121
+ }
122
+
123
+ protected override resolveCodeLens(handle: number, model: monaco.editor.ITextModel,
124
+ codeLens: monaco.languages.CodeLens, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.CodeLens> {
125
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
126
+ vst.CodeLensResolveRequest.type.method,
127
+ super.resolveCodeLens(handle, model, codeLens, token));
128
+ }
129
+
130
+ protected override provideDocumentSymbols(handle: number, model: monaco.editor.ITextModel,
131
+ token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.DocumentSymbol[]> {
132
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
133
+ vst.DocumentSymbolRequest.type.method,
134
+ super.provideDocumentSymbols(handle, model, token));
135
+ }
136
+
137
+ protected override provideDefinition(handle: number, model: monaco.editor.ITextModel,
138
+ position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.Definition> {
139
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
140
+ vst.DefinitionRequest.type.method,
141
+ super.provideDefinition(handle, model, position, token));
142
+ }
143
+
144
+ protected override async provideSignatureHelp(handle: number, model: monaco.editor.ITextModel,
145
+ position: monaco.Position, token: monaco.CancellationToken,
146
+ context: monaco.languages.SignatureHelpContext): Promise<monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult>> {
147
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
148
+ vst.SignatureHelpRequest.type.method,
149
+ super.provideSignatureHelp(handle, model, position, token, context));
150
+ }
151
+
152
+ protected override provideDocumentFormattingEdits(handle: number, model: monaco.editor.ITextModel,
153
+ options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
154
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
155
+ vst.DocumentFormattingRequest.type.method,
156
+ super.provideDocumentFormattingEdits(handle, model, options, token));
157
+ }
158
+
159
+ protected override provideDocumentRangeFormattingEdits(handle: number, model: monaco.editor.ITextModel,
160
+ range: Range, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
161
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
162
+ vst.DocumentRangeFormattingRequest.type.method,
163
+ super.provideDocumentRangeFormattingEdits(handle, model, range, options, token));
164
+ }
165
+
166
+ protected override provideOnTypeFormattingEdits(handle: number, model: monaco.editor.ITextModel, position: monaco.Position,
167
+ ch: string, options: monaco.languages.FormattingOptions, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> {
168
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
169
+ vst.DocumentOnTypeFormattingRequest.type.method,
170
+ super.provideOnTypeFormattingEdits(handle, model, position, ch, options, token));
171
+ }
172
+
173
+ protected override provideFoldingRanges(handle: number, model: monaco.editor.ITextModel,
174
+ context: monaco.languages.FoldingContext, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.FoldingRange[]> {
175
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
176
+ vst.FoldingRangeRequest.type.method,
177
+ super.provideFoldingRanges(handle, model, context, token));
178
+ }
179
+
180
+ protected override provideDocumentColors(handle: number, model: monaco.editor.ITextModel,
181
+ token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorInformation[]> {
182
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
183
+ vst.DocumentColorRequest.type.method,
184
+ super.provideDocumentColors(handle, model, token));
185
+ }
186
+
187
+ protected override provideColorPresentations(handle: number, model: monaco.editor.ITextModel,
188
+ colorInfo: monaco.languages.IColorInformation, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.IColorPresentation[]> {
189
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
190
+ vst.ColorPresentationRequest.type.method,
191
+ super.provideColorPresentations(handle, model, colorInfo, token));
192
+ }
193
+
194
+ protected override async provideCodeActions(handle: number, model: monaco.editor.ITextModel,
195
+ rangeOrSelection: Range, context: monaco.languages.CodeActionContext,
196
+ token: monaco.CancellationToken): Promise<monaco.languages.CodeActionList | monaco.languages.CodeActionList> {
197
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
198
+ vst.CodeActionRequest.type.method,
199
+ super.provideCodeActions(handle, model, rangeOrSelection, context, token));
200
+ }
201
+
202
+ protected override provideRenameEdits(handle: number, model: monaco.editor.ITextModel,
203
+ position: monaco.Position, newName: string, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.WorkspaceEdit & monaco.languages.Rejection> {
204
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
205
+ vst.RenameRequest.type.method,
206
+ super.provideRenameEdits(handle, model, position, newName, token));
207
+ }
208
+
209
+ protected override resolveRenameLocation(handle: number, model: monaco.editor.ITextModel,
210
+ position: monaco.Position, token: monaco.CancellationToken): monaco.languages.ProviderResult<monaco.languages.RenameLocation> {
211
+ return this.pluginMetricsResolver.resolveRequest(this.handleToExtensionName(handle),
212
+ vst.RenameRequest.type.method,
213
+ super.resolveRenameLocation(handle, model, position, token));
214
+ }
215
+
216
+ override $registerCompletionSupport(handle: number, pluginInfo: PluginInfo,
217
+ selector: SerializedDocumentFilter[], triggerCharacters: string[], supportsResolveDetails: boolean): void {
218
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
219
+ super.$registerCompletionSupport(handle, pluginInfo, selector, triggerCharacters, supportsResolveDetails);
220
+ }
221
+
222
+ override $registerDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
223
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
224
+ super.$registerDefinitionProvider(handle, pluginInfo, selector);
225
+ }
226
+
227
+ override $registerDeclarationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
228
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
229
+ super.$registerDeclarationProvider(handle, pluginInfo, selector);
230
+ }
231
+
232
+ override $registerReferenceProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
233
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
234
+ super.$registerReferenceProvider(handle, pluginInfo, selector);
235
+ }
236
+
237
+ override $registerSignatureHelpProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], metadata: theia.SignatureHelpProviderMetadata): void {
238
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
239
+ super.$registerSignatureHelpProvider(handle, pluginInfo, selector, metadata);
240
+ }
241
+
242
+ override $registerImplementationProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
243
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
244
+ super.$registerImplementationProvider(handle, pluginInfo, selector);
245
+ }
246
+
247
+ override $registerTypeDefinitionProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
248
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
249
+ super.$registerTypeDefinitionProvider(handle, pluginInfo, selector);
250
+ }
251
+
252
+ override $registerHoverProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
253
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
254
+ super.$registerHoverProvider(handle, pluginInfo, selector);
255
+ }
256
+
257
+ override $registerDocumentHighlightProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
258
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
259
+ super.$registerDocumentHighlightProvider(handle, pluginInfo, selector);
260
+ }
261
+
262
+ override $registerWorkspaceSymbolProvider(handle: number, pluginInfo: PluginInfo): void {
263
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
264
+ super.$registerWorkspaceSymbolProvider(handle, pluginInfo);
265
+ }
266
+
267
+ override $registerDocumentLinkProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
268
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
269
+ super.$registerDocumentLinkProvider(handle, pluginInfo, selector);
270
+ }
271
+
272
+ override $registerCodeLensSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
273
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
274
+ super.$registerCodeLensSupport(handle, pluginInfo, selector, eventHandle);
275
+ }
276
+
277
+ override $registerOutlineSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], displayName?: string): void {
278
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
279
+ super.$registerOutlineSupport(handle, pluginInfo, selector, displayName);
280
+ }
281
+
282
+ override $registerDocumentFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
283
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
284
+ super.$registerDocumentFormattingSupport(handle, pluginInfo, selector);
285
+ }
286
+
287
+ override $registerRangeFormattingSupport(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
288
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
289
+ super.$registerRangeFormattingSupport(handle, pluginInfo, selector);
290
+ }
291
+
292
+ override $registerOnTypeFormattingProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], autoFormatTriggerCharacters: string[]): void {
293
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
294
+ super.$registerOnTypeFormattingProvider(handle, pluginInfo, selector, autoFormatTriggerCharacters);
295
+ }
296
+
297
+ override $registerFoldingRangeProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], eventHandle: number): void {
298
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
299
+ super.$registerFoldingRangeProvider(handle, pluginInfo, selector, eventHandle);
300
+ }
301
+
302
+ override $registerDocumentColorProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[]): void {
303
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
304
+ super.$registerDocumentColorProvider(handle, pluginInfo, selector);
305
+ }
306
+
307
+ override $registerQuickFixProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], codeActionKinds?: string[],
308
+ documentation?: CodeActionProviderDocumentation): void {
309
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
310
+ super.$registerQuickFixProvider(handle, pluginInfo, selector, codeActionKinds, documentation);
311
+ }
312
+
313
+ override $registerRenameProvider(handle: number, pluginInfo: PluginInfo, selector: SerializedDocumentFilter[], supportsResolveLocation: boolean): void {
314
+ this.registerPluginWithFeatureHandle(handle, pluginInfo.id);
315
+ super.$registerRenameProvider(handle, pluginInfo, selector, supportsResolveLocation);
316
+ }
317
+
318
+ private registerPluginWithFeatureHandle(handle: number, pluginID: string): void {
319
+ this.handleToExtensionID.set(handle, pluginID);
320
+ }
321
+
322
+ private handleToExtensionName(handle: number): string {
323
+ return this.handleToExtensionID.get(handle) as string;
324
+ }
325
+ }