@lvce-editor/extension-host-worker 8.19.0 → 8.20.0

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 (45) hide show
  1. package/dist/extension-api/index.js +90 -26
  2. package/dist/extension-api/parts/Diagnostic/Diagnostic.js +10 -0
  3. package/dist/extension-api/parts/DiagnosticProvider/DiagnosticProvider.js +0 -0
  4. package/dist/extension-api/parts/DiagnosticProviderRegistry/DiagnosticProviderRegistry.js +66 -0
  5. package/dist/extension-api/parts/DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.js +0 -0
  6. package/dist/extension-api/parts/DiagnosticResult/DiagnosticResult.js +0 -0
  7. package/dist/extension-api/parts/DiagnosticTextDocument/DiagnosticTextDocument.js +0 -0
  8. package/dist/extension-api/parts/ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.js +4 -0
  9. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +3 -0
  10. package/dist/extension-api/parts/GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.js +4 -0
  11. package/dist/extension-api/parts/RegisterDiagnosticProvider/RegisterDiagnosticProvider.js +4 -0
  12. package/dist/extension-api/parts/RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.js +0 -0
  13. package/dist/extension-api/parts/ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.js +4 -0
  14. package/dist/extensionHostWorkerMain.js +30 -4
  15. package/extension-api/dist/index.d.ts +2 -0
  16. package/extension-api/dist/index.js +1 -0
  17. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +2 -0
  18. package/extension-api/dist/parts/Diagnostic/Diagnostic.d.ts +9 -0
  19. package/extension-api/dist/parts/Diagnostic/Diagnostic.js +4 -0
  20. package/extension-api/dist/parts/DiagnosticProvider/DiagnosticProvider.d.ts +7 -0
  21. package/extension-api/dist/parts/DiagnosticProvider/DiagnosticProvider.js +1 -0
  22. package/extension-api/dist/parts/DiagnosticProviderRegistry/DiagnosticProviderRegistry.d.ts +12 -0
  23. package/extension-api/dist/parts/DiagnosticProviderRegistry/DiagnosticProviderRegistry.js +58 -0
  24. package/extension-api/dist/parts/DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.d.ts +4 -0
  25. package/extension-api/dist/parts/DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.js +1 -0
  26. package/extension-api/dist/parts/DiagnosticResult/DiagnosticResult.d.ts +11 -0
  27. package/extension-api/dist/parts/DiagnosticResult/DiagnosticResult.js +1 -0
  28. package/extension-api/dist/parts/DiagnosticTextDocument/DiagnosticTextDocument.d.ts +6 -0
  29. package/extension-api/dist/parts/DiagnosticTextDocument/DiagnosticTextDocument.js +1 -0
  30. package/extension-api/dist/parts/ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.d.ts +1 -0
  31. package/extension-api/dist/parts/ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.js +1 -0
  32. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +2 -0
  33. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +3 -0
  34. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +2 -0
  35. package/extension-api/dist/parts/GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.d.ts +1 -0
  36. package/extension-api/dist/parts/GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.js +1 -0
  37. package/extension-api/dist/parts/RegisterDiagnosticProvider/RegisterDiagnosticProvider.d.ts +1 -0
  38. package/extension-api/dist/parts/RegisterDiagnosticProvider/RegisterDiagnosticProvider.js +1 -0
  39. package/extension-api/dist/parts/RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.d.ts +7 -0
  40. package/extension-api/dist/parts/RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.js +1 -0
  41. package/extension-api/dist/parts/ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.d.ts +1 -0
  42. package/extension-api/dist/parts/ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.js +1 -0
  43. package/extension-api/package.json +1 -1
  44. package/extension-api/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +1 -1
@@ -1148,8 +1148,66 @@ var getCompletionProviderRegistrySnapshot = () => {
1148
1148
  };
1149
1149
  var resetCompletionProviderRegistry = registry.reset;
1150
1150
 
1151
- // packages/extension-api/src/parts/FormattingProviderRegistry/FormattingProviderRegistry.ts
1151
+ // packages/extension-api/src/parts/DiagnosticProviderRegistry/DiagnosticProviderRegistry.ts
1152
+ var getType2 = (value) => {
1153
+ if (value === null) {
1154
+ return "null";
1155
+ }
1156
+ if (typeof value === "string") {
1157
+ return JSON.stringify(value);
1158
+ }
1159
+ if (Array.isArray(value)) {
1160
+ return "array";
1161
+ }
1162
+ return typeof value;
1163
+ };
1164
+ var validateDiagnosticResult = (diagnostics) => {
1165
+ if (!Array.isArray(diagnostics)) {
1166
+ throw new ExtensionApiError(`invalid diagnostic result: diagnostic must be of type array but is ${getType2(diagnostics)}`);
1167
+ }
1168
+ for (const item of diagnostics) {
1169
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
1170
+ throw new ExtensionApiError(`invalid diagnostic result: expected diagnostic item to be of type object but was of type ${getType2(item)}`);
1171
+ }
1172
+ }
1173
+ return diagnostics;
1174
+ };
1152
1175
  var registry2 = createProviderRegistry({
1176
+ mapProvider(provider) {
1177
+ return {
1178
+ id: provider.id,
1179
+ languageId: provider.languageId,
1180
+ provideDiagnostics(textDocument, ...args) {
1181
+ return provider.provideDiagnostics(textDocument, ...args);
1182
+ }
1183
+ };
1184
+ },
1185
+ providerName: "diagnostic provider",
1186
+ requiredMethods: ["provideDiagnostics"],
1187
+ requireLanguageId: true
1188
+ });
1189
+ var hasDiagnosticProvider = registry2.hasProvider;
1190
+ var registerDiagnosticProvider = (provider) => {
1191
+ const registeredProvider = registry2.registerProvider(provider);
1192
+ return {
1193
+ dispose() {
1194
+ registry2.deleteProvider(registeredProvider.id);
1195
+ }
1196
+ };
1197
+ };
1198
+ var executeDiagnosticProvider = async (textDocument, ...args) => {
1199
+ return registry2.executeProviderByLanguageId(textDocument.languageId, "provideDiagnostics", [textDocument, ...args], validateDiagnosticResult);
1200
+ };
1201
+ var getDiagnosticProviders = registry2.getProviders;
1202
+ var getDiagnosticProviderRegistrySnapshot = () => {
1203
+ return {
1204
+ providers: registry2.getProviders()
1205
+ };
1206
+ };
1207
+ var resetDiagnosticProviderRegistry = registry2.reset;
1208
+
1209
+ // packages/extension-api/src/parts/FormattingProviderRegistry/FormattingProviderRegistry.ts
1210
+ var registry3 = createProviderRegistry({
1153
1211
  mapProvider(provider) {
1154
1212
  return {
1155
1213
  format(textDocument, ...args) {
@@ -1163,25 +1221,25 @@ var registry2 = createProviderRegistry({
1163
1221
  requiredMethods: ["format"],
1164
1222
  requireLanguageId: true
1165
1223
  });
1166
- var hasFormattingProvider = registry2.hasProvider;
1224
+ var hasFormattingProvider = registry3.hasProvider;
1167
1225
  var registerFormattingProvider = (provider) => {
1168
- const registeredProvider = registry2.registerProvider(provider);
1226
+ const registeredProvider = registry3.registerProvider(provider);
1169
1227
  return {
1170
1228
  dispose() {
1171
- registry2.deleteProvider(registeredProvider.id);
1229
+ registry3.deleteProvider(registeredProvider.id);
1172
1230
  }
1173
1231
  };
1174
1232
  };
1175
1233
  var executeFormattingProvider = async (textDocument, ...args) => {
1176
- return registry2.executeProviderByLanguageId(textDocument.languageId, "format", [textDocument, ...args]);
1234
+ return registry3.executeProviderByLanguageId(textDocument.languageId, "format", [textDocument, ...args]);
1177
1235
  };
1178
- var getFormattingProviders = registry2.getProviders;
1236
+ var getFormattingProviders = registry3.getProviders;
1179
1237
  var getFormattingProviderRegistrySnapshot = () => {
1180
1238
  return {
1181
- providers: registry2.getProviders()
1239
+ providers: registry3.getProviders()
1182
1240
  };
1183
1241
  };
1184
- var resetFormattingProviderRegistry = registry2.reset;
1242
+ var resetFormattingProviderRegistry = registry3.reset;
1185
1243
 
1186
1244
  // packages/extension-api/src/parts/Rpc/Rpc.ts
1187
1245
  var rpc;
@@ -1201,7 +1259,7 @@ var notifyStatusBarChange = async (id2) => {
1201
1259
  };
1202
1260
 
1203
1261
  // packages/extension-api/src/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.ts
1204
- var registry3 = createProviderRegistry({
1262
+ var registry4 = createProviderRegistry({
1205
1263
  mapProvider(provider) {
1206
1264
  return {
1207
1265
  getStatusBarItem() {
@@ -1219,13 +1277,13 @@ var getStatusBarItem = (provider) => {
1219
1277
  var isStatusBarItem = (item) => {
1220
1278
  return item !== void 0;
1221
1279
  };
1222
- var hasStatusBarItemProvider = registry3.hasProvider;
1280
+ var hasStatusBarItemProvider = registry4.hasProvider;
1223
1281
  var registerStatusBarItemProvider = (provider) => {
1224
- const registeredProvider = registry3.registerProvider(provider);
1282
+ const registeredProvider = registry4.registerProvider(provider);
1225
1283
  void notifyStatusBarChange(registeredProvider.id);
1226
1284
  return {
1227
1285
  dispose() {
1228
- registry3.deleteProvider(registeredProvider.id);
1286
+ registry4.deleteProvider(registeredProvider.id);
1229
1287
  void notifyStatusBarChange(registeredProvider.id);
1230
1288
  },
1231
1289
  async refresh() {
@@ -1233,19 +1291,19 @@ var registerStatusBarItemProvider = (provider) => {
1233
1291
  }
1234
1292
  };
1235
1293
  };
1236
- var getStatusBarItemProviders = registry3.getProviders;
1294
+ var getStatusBarItemProviders = registry4.getProviders;
1237
1295
  var getStatusBarItems = () => {
1238
- return registry3.getProviders().map(getStatusBarItem).filter(isStatusBarItem);
1296
+ return registry4.getProviders().map(getStatusBarItem).filter(isStatusBarItem);
1239
1297
  };
1240
1298
  var getStatusBarItemProviderRegistrySnapshot = () => {
1241
1299
  return {
1242
- providers: registry3.getProviders()
1300
+ providers: registry4.getProviders()
1243
1301
  };
1244
1302
  };
1245
- var resetStatusBarItemProviderRegistry = registry3.reset;
1303
+ var resetStatusBarItemProviderRegistry = registry4.reset;
1246
1304
 
1247
1305
  // packages/extension-api/src/parts/HoverProviderRegistry/HoverProviderRegistry.ts
1248
- var getType2 = (value) => {
1306
+ var getType3 = (value) => {
1249
1307
  if (value === null) {
1250
1308
  return "null";
1251
1309
  }
@@ -1262,11 +1320,11 @@ var validateHoverResult = (hover) => {
1262
1320
  return void 0;
1263
1321
  }
1264
1322
  if (!hover || typeof hover !== "object" || Array.isArray(hover)) {
1265
- throw new ExtensionApiError(`invalid hover result: hover must be of type object or undefined but is ${getType2(hover)}`);
1323
+ throw new ExtensionApiError(`invalid hover result: hover must be of type object or undefined but is ${getType3(hover)}`);
1266
1324
  }
1267
1325
  return hover;
1268
1326
  };
1269
- var registry4 = createProviderRegistry({
1327
+ var registry5 = createProviderRegistry({
1270
1328
  mapProvider(provider) {
1271
1329
  return {
1272
1330
  id: provider.id,
@@ -1280,35 +1338,37 @@ var registry4 = createProviderRegistry({
1280
1338
  requiredMethods: ["provideHover"],
1281
1339
  requireLanguageId: true
1282
1340
  });
1283
- var hasHoverProvider = registry4.hasProvider;
1341
+ var hasHoverProvider = registry5.hasProvider;
1284
1342
  var registerHoverProvider = (provider) => {
1285
- const registeredProvider = registry4.registerProvider(provider);
1343
+ const registeredProvider = registry5.registerProvider(provider);
1286
1344
  return {
1287
1345
  dispose() {
1288
- registry4.deleteProvider(registeredProvider.id);
1346
+ registry5.deleteProvider(registeredProvider.id);
1289
1347
  }
1290
1348
  };
1291
1349
  };
1292
1350
  var executeHoverProvider = async (textDocument, offset, ...args) => {
1293
- return registry4.executeProviderByLanguageId(textDocument.languageId, "provideHover", [textDocument, offset, ...args], validateHoverResult);
1351
+ return registry5.executeProviderByLanguageId(textDocument.languageId, "provideHover", [textDocument, offset, ...args], validateHoverResult);
1294
1352
  };
1295
- var getHoverProviders = registry4.getProviders;
1353
+ var getHoverProviders = registry5.getProviders;
1296
1354
  var getHoverProviderRegistrySnapshot = () => {
1297
1355
  return {
1298
- providers: registry4.getProviders()
1356
+ providers: registry5.getProviders()
1299
1357
  };
1300
1358
  };
1301
- var resetHoverProviderRegistry = registry4.reset;
1359
+ var resetHoverProviderRegistry = registry5.reset;
1302
1360
 
1303
1361
  // packages/extension-api/src/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.ts
1304
1362
  var commandMap = {
1305
1363
  "ExtensionApi.executeCommand": executeCommand,
1306
1364
  "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
1365
+ "ExtensionApi.executeDiagnosticProvider": executeDiagnosticProvider,
1307
1366
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
1308
1367
  "ExtensionApi.executeHoverProvider": executeHoverProvider,
1309
1368
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
1310
1369
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
1311
1370
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
1371
+ "ExtensionApi.getDiagnosticProviderRegistrySnapshot": getDiagnosticProviderRegistrySnapshot,
1312
1372
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
1313
1373
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
1314
1374
  "ExtensionApi.getStatusBarItems": getStatusBarItems
@@ -1401,20 +1461,24 @@ export {
1401
1461
  activate,
1402
1462
  executeCommand2 as executeCommand,
1403
1463
  executeCompletionProvider,
1464
+ executeDiagnosticProvider,
1404
1465
  executeFormattingProvider,
1405
1466
  executeHoverProvider,
1406
1467
  executeResolveCompletionItemProvider,
1407
1468
  getCompletionProviderRegistrySnapshot,
1469
+ getDiagnosticProviderRegistrySnapshot,
1408
1470
  getFormattingProviderRegistrySnapshot,
1409
1471
  getHoverProviderRegistrySnapshot,
1410
1472
  getStatusBarItemProviderRegistrySnapshot,
1411
1473
  handleExtensionManagementMessagePort2 as handleExtensionManagementMessagePort,
1412
1474
  registerCommand,
1413
1475
  registerCompletionProvider,
1476
+ registerDiagnosticProvider,
1414
1477
  registerFormattingProvider,
1415
1478
  registerHoverProvider,
1416
1479
  registerStatusBarItemProvider,
1417
1480
  resetCompletionProviderRegistry,
1481
+ resetDiagnosticProviderRegistry,
1418
1482
  resetFormattingProviderRegistry,
1419
1483
  resetHoverProviderRegistry,
1420
1484
  resetStatusBarItemProviderRegistry,
@@ -0,0 +1,10 @@
1
+ import { executeDiagnosticProvider } from "../ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.js";
2
+ import { getDiagnosticProviderRegistrySnapshot } from "../GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.js";
3
+ import { registerDiagnosticProvider } from "../RegisterDiagnosticProvider/RegisterDiagnosticProvider.js";
4
+ import { resetDiagnosticProviderRegistry } from "../ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.js";
5
+ export {
6
+ executeDiagnosticProvider,
7
+ getDiagnosticProviderRegistrySnapshot,
8
+ registerDiagnosticProvider,
9
+ resetDiagnosticProviderRegistry
10
+ };
@@ -0,0 +1,66 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { createProviderRegistry } from "../ProviderRegistry/ProviderRegistry.js";
3
+ const getType = (value) => {
4
+ if (value === null) {
5
+ return "null";
6
+ }
7
+ if (typeof value === "string") {
8
+ return JSON.stringify(value);
9
+ }
10
+ if (Array.isArray(value)) {
11
+ return "array";
12
+ }
13
+ return typeof value;
14
+ };
15
+ const validateDiagnosticResult = (diagnostics) => {
16
+ if (!Array.isArray(diagnostics)) {
17
+ throw new ExtensionApiError(`invalid diagnostic result: diagnostic must be of type array but is ${getType(diagnostics)}`);
18
+ }
19
+ for (const item of diagnostics) {
20
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
21
+ throw new ExtensionApiError(`invalid diagnostic result: expected diagnostic item to be of type object but was of type ${getType(item)}`);
22
+ }
23
+ }
24
+ return diagnostics;
25
+ };
26
+ const registry = createProviderRegistry({
27
+ mapProvider(provider) {
28
+ return {
29
+ id: provider.id,
30
+ languageId: provider.languageId,
31
+ provideDiagnostics(textDocument, ...args) {
32
+ return provider.provideDiagnostics(textDocument, ...args);
33
+ }
34
+ };
35
+ },
36
+ providerName: "diagnostic provider",
37
+ requiredMethods: ["provideDiagnostics"],
38
+ requireLanguageId: true
39
+ });
40
+ const hasDiagnosticProvider = registry.hasProvider;
41
+ const registerDiagnosticProvider = (provider) => {
42
+ const registeredProvider = registry.registerProvider(provider);
43
+ return {
44
+ dispose() {
45
+ registry.deleteProvider(registeredProvider.id);
46
+ }
47
+ };
48
+ };
49
+ const executeDiagnosticProvider = async (textDocument, ...args) => {
50
+ return registry.executeProviderByLanguageId(textDocument.languageId, "provideDiagnostics", [textDocument, ...args], validateDiagnosticResult);
51
+ };
52
+ const getDiagnosticProviders = registry.getProviders;
53
+ const getDiagnosticProviderRegistrySnapshot = () => {
54
+ return {
55
+ providers: registry.getProviders()
56
+ };
57
+ };
58
+ const resetDiagnosticProviderRegistry = registry.reset;
59
+ export {
60
+ executeDiagnosticProvider,
61
+ getDiagnosticProviderRegistrySnapshot,
62
+ getDiagnosticProviders,
63
+ hasDiagnosticProvider,
64
+ registerDiagnosticProvider,
65
+ resetDiagnosticProviderRegistry
66
+ };
@@ -0,0 +1,4 @@
1
+ import { executeDiagnosticProvider } from "../DiagnosticProviderRegistry/DiagnosticProviderRegistry.js";
2
+ export {
3
+ executeDiagnosticProvider
4
+ };
@@ -1,16 +1,19 @@
1
1
  import { executeCommand, getCommandRegistrySnapshot } from "../CommandRegistry/CommandRegistry.js";
2
2
  import { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot } from "../Completion/Completion.js";
3
+ import { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot } from "../Diagnostic/Diagnostic.js";
3
4
  import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from "../Formatting/Formatting.js";
4
5
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
5
6
  import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
6
7
  const commandMap = {
7
8
  "ExtensionApi.executeCommand": executeCommand,
8
9
  "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
10
+ "ExtensionApi.executeDiagnosticProvider": executeDiagnosticProvider,
9
11
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
10
12
  "ExtensionApi.executeHoverProvider": executeHoverProvider,
11
13
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
12
14
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
13
15
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
16
+ "ExtensionApi.getDiagnosticProviderRegistrySnapshot": getDiagnosticProviderRegistrySnapshot,
14
17
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
15
18
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
16
19
  "ExtensionApi.getStatusBarItems": getStatusBarItems
@@ -0,0 +1,4 @@
1
+ import { getDiagnosticProviderRegistrySnapshot } from "../DiagnosticProviderRegistry/DiagnosticProviderRegistry.js";
2
+ export {
3
+ getDiagnosticProviderRegistrySnapshot
4
+ };
@@ -0,0 +1,4 @@
1
+ import { registerDiagnosticProvider } from "../DiagnosticProviderRegistry/DiagnosticProviderRegistry.js";
2
+ export {
3
+ registerDiagnosticProvider
4
+ };
@@ -0,0 +1,4 @@
1
+ import { resetDiagnosticProviderRegistry } from "../DiagnosticProviderRegistry/DiagnosticProviderRegistry.js";
2
+ export {
3
+ resetDiagnosticProviderRegistry
4
+ };
@@ -1991,7 +1991,7 @@ const {
1991
1991
  const {
1992
1992
  executeCompletionProvider,
1993
1993
  executeresolveCompletionItemProvider,
1994
- getProviders: getProviders$2,
1994
+ getProviders: getProviders$3,
1995
1995
  registerCompletionProvider} = create$6({
1996
1996
  additionalMethodNames: [
1997
1997
  // @ts-ignore
@@ -2012,7 +2012,7 @@ const {
2012
2012
  }
2013
2013
  });
2014
2014
  const getRegisteredCompletionProviderIds$1 = () => {
2015
- return getProviders$2().map(provider => provider.id);
2015
+ return getProviders$3().map(provider => provider.id);
2016
2016
  };
2017
2017
 
2018
2018
  const state$9 = {
@@ -2236,8 +2236,8 @@ const {
2236
2236
 
2237
2237
  const {
2238
2238
  executeDiagnosticProvider,
2239
- registerDiagnosticProvider
2240
- } = create$6({
2239
+ getProviders: getProviders$2,
2240
+ registerDiagnosticProvider} = create$6({
2241
2241
  name: 'Diagnostic',
2242
2242
  resultShape: {
2243
2243
  items: {
@@ -2246,6 +2246,9 @@ const {
2246
2246
  type: Array$1
2247
2247
  }
2248
2248
  });
2249
+ const getRegisteredDiagnosticProviderIds$1 = () => {
2250
+ return getProviders$2().map(provider => provider.id);
2251
+ };
2249
2252
 
2250
2253
  const RendererWorker = 1;
2251
2254
 
@@ -4255,6 +4258,12 @@ const getManifestHoverProviderIds = extension => {
4255
4258
  }
4256
4259
  return extension.hoverProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4257
4260
  };
4261
+ const getManifestDiagnosticProviderIds = extension => {
4262
+ if (!Array.isArray(extension.diagnosticProviders)) {
4263
+ return [];
4264
+ }
4265
+ return extension.diagnosticProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4266
+ };
4258
4267
  const assertUniqueIds = (ids, label) => {
4259
4268
  const seen = new Set();
4260
4269
  for (const id of ids) {
@@ -4280,6 +4289,10 @@ const getNewRegisteredHoverProviderIds = beforeHoverProviderIds => {
4280
4289
  const before = new Set(beforeHoverProviderIds);
4281
4290
  return getRegisteredHoverProviderIds$1().filter(providerId => !before.has(providerId));
4282
4291
  };
4292
+ const getNewRegisteredDiagnosticProviderIds = beforeDiagnosticProviderIds => {
4293
+ const before = new Set(beforeDiagnosticProviderIds);
4294
+ return getRegisteredDiagnosticProviderIds$1().filter(providerId => !before.has(providerId));
4295
+ };
4283
4296
  const getRegisteredCommandIds = () => {
4284
4297
  return getRegisteredCommandIds$1();
4285
4298
  };
@@ -4292,6 +4305,9 @@ const getRegisteredFormattingProviderIds = () => {
4292
4305
  const getRegisteredHoverProviderIds = () => {
4293
4306
  return getRegisteredHoverProviderIds$1();
4294
4307
  };
4308
+ const getRegisteredDiagnosticProviderIds = () => {
4309
+ return getRegisteredDiagnosticProviderIds$1();
4310
+ };
4295
4311
  const validateIsolatedExtensionContribution = (label, manifestIds, registeredIds) => {
4296
4312
  assertUniqueIds(manifestIds, label);
4297
4313
  const manifestIdSet = new Set(manifestIds);
@@ -4339,6 +4355,14 @@ const validateIsolatedExtensionHoverProviders = (extension, beforeHoverProviderI
4339
4355
  const registeredHoverProviderIds = getNewRegisteredHoverProviderIds(beforeHoverProviderIds);
4340
4356
  validateIsolatedExtensionContribution('hover provider', manifestHoverProviderIds, registeredHoverProviderIds);
4341
4357
  };
4358
+ const validateIsolatedExtensionDiagnosticProviders = (extension, beforeDiagnosticProviderIds) => {
4359
+ if (!extension.isolated) {
4360
+ return;
4361
+ }
4362
+ const manifestDiagnosticProviderIds = getManifestDiagnosticProviderIds(extension);
4363
+ const registeredDiagnosticProviderIds = getNewRegisteredDiagnosticProviderIds(beforeDiagnosticProviderIds);
4364
+ validateIsolatedExtensionContribution('diagnostic provider', manifestDiagnosticProviderIds, registeredDiagnosticProviderIds);
4365
+ };
4342
4366
 
4343
4367
  // TODO make activation timeout configurable or remove it.
4344
4368
  // some extension might do workspace indexing which could take some time
@@ -4362,11 +4386,13 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
4362
4386
  const activate = module.main || module.activate;
4363
4387
  const beforeCommandIds = getRegisteredCommandIds();
4364
4388
  const beforeCompletionProviderIds = getRegisteredCompletionProviderIds();
4389
+ const beforeDiagnosticProviderIds = getRegisteredDiagnosticProviderIds();
4365
4390
  const beforeFormattingProviderIds = getRegisteredFormattingProviderIds();
4366
4391
  const beforeHoverProviderIds = getRegisteredHoverProviderIds();
4367
4392
  await Promise.race([activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
4368
4393
  validateIsolatedExtensionCommands(extension, beforeCommandIds);
4369
4394
  validateIsolatedExtensionCompletionProviders(extension, beforeCompletionProviderIds);
4395
+ validateIsolatedExtensionDiagnosticProviders(extension, beforeDiagnosticProviderIds);
4370
4396
  validateIsolatedExtensionFormattingProviders(extension, beforeFormattingProviderIds);
4371
4397
  validateIsolatedExtensionHoverProviders(extension, beforeHoverProviderIds);
4372
4398
  const endTime = performance.now();
@@ -3,6 +3,7 @@ export { executeCommand } from './parts/ExecuteCommand/ExecuteCommand.ts';
3
3
  export { showQuickPick } from './parts/QuickPick/QuickPick.ts';
4
4
  export { registerCommand } from './parts/CommandRegistry/CommandRegistry.ts';
5
5
  export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from './parts/Completion/Completion.ts';
6
+ export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from './parts/Diagnostic/Diagnostic.ts';
6
7
  export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
7
8
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
8
9
  export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from './parts/StatusBar/StatusBar.ts';
@@ -11,6 +12,7 @@ export type { Command } from './parts/Command/Command.ts';
11
12
  export type { CommandCallback } from './parts/CommandCallback/CommandCallback.ts';
12
13
  export type { CommandRegistrySnapshot } from './parts/CommandRegistrySnapshot/CommandRegistrySnapshot.ts';
13
14
  export type { CompletionItem, CompletionProvider, CompletionProviderRegistrySnapshot, RegisteredCompletionProvider, } from './parts/Completion/Completion.ts';
15
+ export type { Diagnostic, DiagnosticProvider, DiagnosticProviderRegistrySnapshot, RegisteredDiagnosticProvider, } from './parts/Diagnostic/Diagnostic.ts';
14
16
  export type { Disposable } from './parts/Disposable/Disposable.ts';
15
17
  export type { FormattingEdit, FormattingProvider, FormattingProviderRegistrySnapshot, RegisteredFormattingProvider, } from './parts/Formatting/Formatting.ts';
16
18
  export type { HandleExtensionManagementMessagePortOptions } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
@@ -3,6 +3,7 @@ export { executeCommand } from "./parts/ExecuteCommand/ExecuteCommand.js";
3
3
  export { showQuickPick } from "./parts/QuickPick/QuickPick.js";
4
4
  export { registerCommand } from "./parts/CommandRegistry/CommandRegistry.js";
5
5
  export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from "./parts/Completion/Completion.js";
6
+ export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from "./parts/Diagnostic/Diagnostic.js";
6
7
  export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
7
8
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
8
9
  export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from "./parts/StatusBar/StatusBar.js";
@@ -2,11 +2,13 @@ export declare const commandMap: {
2
2
  initialize(type: string, port: MessagePort): Promise<void>;
3
3
  'ExtensionApi.executeCommand': (id: string, ...args: readonly unknown[]) => Promise<unknown>;
4
4
  'ExtensionApi.executeCompletionProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<readonly import("../CompletionItem/CompletionItem.ts").CompletionItem[]>;
5
+ 'ExtensionApi.executeDiagnosticProvider': (textDocument: import("../DiagnosticTextDocument/DiagnosticTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../DiagnosticResult/DiagnosticResult.ts").Diagnostic[]>;
5
6
  'ExtensionApi.executeFormattingProvider': (textDocument: import("../FormattingTextDocument/FormattingTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../FormattingEdit/FormattingEdit.ts").FormattingEdit[]>;
6
7
  'ExtensionApi.executeHoverProvider': (textDocument: import("../HoverTextDocument/HoverTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<import("../HoverResult/HoverResult.ts").HoverResult | undefined>;
7
8
  'ExtensionApi.executeResolveCompletionItemProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, name: string, completionItem: import("../CompletionItem/CompletionItem.ts").CompletionItem, ...args: readonly unknown[]) => Promise<import("../CompletionItem/CompletionItem.ts").CompletionItem | undefined>;
8
9
  'ExtensionApi.getCommandRegistrySnapshot': () => import("../CommandRegistrySnapshot/CommandRegistrySnapshot.ts").CommandRegistrySnapshot;
9
10
  'ExtensionApi.getCompletionProviderRegistrySnapshot': () => import("../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts").CompletionProviderRegistrySnapshot;
11
+ 'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
10
12
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
11
13
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
12
14
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
@@ -0,0 +1,9 @@
1
+ export { executeDiagnosticProvider } from '../ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.ts';
2
+ export { getDiagnosticProviderRegistrySnapshot } from '../GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.ts';
3
+ export { registerDiagnosticProvider } from '../RegisterDiagnosticProvider/RegisterDiagnosticProvider.ts';
4
+ export { resetDiagnosticProviderRegistry } from '../ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.ts';
5
+ export type { Diagnostic } from '../DiagnosticResult/DiagnosticResult.ts';
6
+ export type { DiagnosticProvider } from '../DiagnosticProvider/DiagnosticProvider.ts';
7
+ export type { DiagnosticProviderRegistrySnapshot } from '../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts';
8
+ export type { RegisteredDiagnosticProvider } from '../RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.ts';
9
+ export type { TextDocument } from '../DiagnosticTextDocument/DiagnosticTextDocument.ts';
@@ -0,0 +1,4 @@
1
+ export { executeDiagnosticProvider } from "../ExecuteDiagnosticProvider/ExecuteDiagnosticProvider.js";
2
+ export { getDiagnosticProviderRegistrySnapshot } from "../GetDiagnosticProviderRegistrySnapshot/GetDiagnosticProviderRegistrySnapshot.js";
3
+ export { registerDiagnosticProvider } from "../RegisterDiagnosticProvider/RegisterDiagnosticProvider.js";
4
+ export { resetDiagnosticProviderRegistry } from "../ResetDiagnosticProviderRegistry/ResetDiagnosticProviderRegistry.js";
@@ -0,0 +1,7 @@
1
+ import type { Diagnostic } from '../DiagnosticResult/DiagnosticResult.ts';
2
+ import type { TextDocument } from '../DiagnosticTextDocument/DiagnosticTextDocument.ts';
3
+ export interface DiagnosticProvider {
4
+ readonly id: string;
5
+ readonly languageId: string;
6
+ readonly provideDiagnostics: (textDocument: TextDocument, ...args: readonly unknown[]) => readonly Diagnostic[] | Promise<readonly Diagnostic[]>;
7
+ }
@@ -0,0 +1,12 @@
1
+ import type { DiagnosticProvider } from '../DiagnosticProvider/DiagnosticProvider.ts';
2
+ import type { DiagnosticProviderRegistrySnapshot } from '../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts';
3
+ import type { Diagnostic } from '../DiagnosticResult/DiagnosticResult.ts';
4
+ import type { TextDocument } from '../DiagnosticTextDocument/DiagnosticTextDocument.ts';
5
+ import type { Disposable } from '../Disposable/Disposable.ts';
6
+ import type { RegisteredDiagnosticProvider } from '../RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.ts';
7
+ export declare const hasDiagnosticProvider: (id: string) => boolean;
8
+ export declare const registerDiagnosticProvider: (provider: DiagnosticProvider) => Disposable;
9
+ export declare const executeDiagnosticProvider: (textDocument: TextDocument, ...args: readonly unknown[]) => Promise<readonly Diagnostic[]>;
10
+ export declare const getDiagnosticProviders: () => RegisteredDiagnosticProvider[];
11
+ export declare const getDiagnosticProviderRegistrySnapshot: () => DiagnosticProviderRegistrySnapshot;
12
+ export declare const resetDiagnosticProviderRegistry: () => void;
@@ -0,0 +1,58 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { createProviderRegistry } from "../ProviderRegistry/ProviderRegistry.js";
3
+ const getType = (value) => {
4
+ if (value === null) {
5
+ return 'null';
6
+ }
7
+ if (typeof value === 'string') {
8
+ return JSON.stringify(value);
9
+ }
10
+ if (Array.isArray(value)) {
11
+ return 'array';
12
+ }
13
+ return typeof value;
14
+ };
15
+ const validateDiagnosticResult = (diagnostics) => {
16
+ if (!Array.isArray(diagnostics)) {
17
+ throw new ExtensionApiError(`invalid diagnostic result: diagnostic must be of type array but is ${getType(diagnostics)}`);
18
+ }
19
+ for (const item of diagnostics) {
20
+ if (!item || typeof item !== 'object' || Array.isArray(item)) {
21
+ throw new ExtensionApiError(`invalid diagnostic result: expected diagnostic item to be of type object but was of type ${getType(item)}`);
22
+ }
23
+ }
24
+ return diagnostics;
25
+ };
26
+ const registry = createProviderRegistry({
27
+ mapProvider(provider) {
28
+ return {
29
+ id: provider.id,
30
+ languageId: provider.languageId,
31
+ provideDiagnostics(textDocument, ...args) {
32
+ return provider.provideDiagnostics(textDocument, ...args);
33
+ },
34
+ };
35
+ },
36
+ providerName: 'diagnostic provider',
37
+ requiredMethods: ['provideDiagnostics'],
38
+ requireLanguageId: true,
39
+ });
40
+ export const hasDiagnosticProvider = registry.hasProvider;
41
+ export const registerDiagnosticProvider = (provider) => {
42
+ const registeredProvider = registry.registerProvider(provider);
43
+ return {
44
+ dispose() {
45
+ registry.deleteProvider(registeredProvider.id);
46
+ },
47
+ };
48
+ };
49
+ export const executeDiagnosticProvider = async (textDocument, ...args) => {
50
+ return registry.executeProviderByLanguageId(textDocument.languageId, 'provideDiagnostics', [textDocument, ...args], validateDiagnosticResult);
51
+ };
52
+ export const getDiagnosticProviders = registry.getProviders;
53
+ export const getDiagnosticProviderRegistrySnapshot = () => {
54
+ return {
55
+ providers: registry.getProviders(),
56
+ };
57
+ };
58
+ export const resetDiagnosticProviderRegistry = registry.reset;
@@ -0,0 +1,4 @@
1
+ import type { RegisteredDiagnosticProvider } from '../RegisteredDiagnosticProvider/RegisteredDiagnosticProvider.ts';
2
+ export interface DiagnosticProviderRegistrySnapshot {
3
+ readonly providers: readonly RegisteredDiagnosticProvider[];
4
+ }
@@ -0,0 +1,11 @@
1
+ export interface Diagnostic {
2
+ readonly code?: number | string;
3
+ readonly columnIndex: number;
4
+ readonly endColumnIndex: number;
5
+ readonly endRowIndex: number;
6
+ readonly message: string;
7
+ readonly rowIndex: number;
8
+ readonly source?: string;
9
+ readonly type: string;
10
+ readonly uri?: string;
11
+ }