Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/eslint.config.js
5236 views
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
// @ts-check
6
import fs from 'fs';
7
import path from 'path';
8
import tseslint from 'typescript-eslint';
9
10
import stylisticTs from '@stylistic/eslint-plugin-ts';
11
import * as pluginLocal from './.eslint-plugin-local/index.ts';
12
import pluginJsdoc from 'eslint-plugin-jsdoc';
13
14
import pluginHeader from 'eslint-plugin-header';
15
pluginHeader.rules.header.meta.schema = false;
16
17
const ignores = fs.readFileSync(path.join(import.meta.dirname, '.eslint-ignore'), 'utf8')
18
.toString()
19
.split(/\r\n|\n/)
20
.filter(line => line && !line.startsWith('#'));
21
22
export default tseslint.config(
23
// Global ignores
24
{
25
ignores: [
26
...ignores,
27
'!**/.eslint-plugin-local/**/*'
28
],
29
},
30
// All files (JS and TS)
31
{
32
languageOptions: {
33
parser: tseslint.parser,
34
},
35
plugins: {
36
'local': pluginLocal,
37
'header': pluginHeader,
38
},
39
rules: {
40
'constructor-super': 'warn',
41
'curly': 'warn',
42
'eqeqeq': 'warn',
43
'prefer-const': [
44
'warn',
45
{
46
'destructuring': 'all'
47
}
48
],
49
'no-buffer-constructor': 'warn',
50
'no-caller': 'warn',
51
'no-case-declarations': 'warn',
52
'no-debugger': 'warn',
53
'no-duplicate-case': 'warn',
54
'no-duplicate-imports': 'warn',
55
'no-eval': 'warn',
56
'no-async-promise-executor': 'warn',
57
'no-extra-semi': 'warn',
58
'no-new-wrappers': 'warn',
59
'no-redeclare': 'off',
60
'no-sparse-arrays': 'warn',
61
'no-throw-literal': 'warn',
62
'no-unsafe-finally': 'warn',
63
'no-unused-labels': 'warn',
64
'no-misleading-character-class': 'warn',
65
'no-restricted-globals': [
66
'warn',
67
'name',
68
'length',
69
'event',
70
'closed',
71
'external',
72
'status',
73
'origin',
74
'orientation',
75
'context'
76
], // non-complete list of globals that are easy to access unintentionally
77
'no-var': 'warn',
78
'semi': 'warn',
79
'local/code-translation-remind': 'warn',
80
'local/code-no-native-private': 'warn',
81
'local/code-parameter-properties-must-have-explicit-accessibility': 'warn',
82
'local/code-no-nls-in-standalone-editor': 'warn',
83
'local/code-no-potentially-unsafe-disposables': 'warn',
84
'local/code-no-dangerous-type-assertions': 'warn',
85
'local/code-no-any-casts': 'warn',
86
'local/code-no-standalone-editor': 'warn',
87
'local/code-no-unexternalized-strings': 'warn',
88
'local/code-must-use-super-dispose': 'warn',
89
'local/code-declare-service-brand': 'warn',
90
'local/code-no-reader-after-await': 'warn',
91
'local/code-no-observable-get-in-reactive-context': 'warn',
92
'local/code-no-localized-model-description': 'warn',
93
'local/code-policy-localization-key-match': 'warn',
94
'local/code-no-localization-template-literals': 'error',
95
'local/code-no-deep-import-of-internal': ['error', { '.*Internal': true, 'searchExtTypesInternal': false }],
96
'local/code-layering': [
97
'warn',
98
{
99
'common': [],
100
'node': [
101
'common'
102
],
103
'browser': [
104
'common'
105
],
106
'electron-browser': [
107
'common',
108
'browser'
109
],
110
'electron-utility': [
111
'common',
112
'node'
113
],
114
'electron-main': [
115
'common',
116
'node',
117
'electron-utility'
118
]
119
}
120
],
121
'header/header': [
122
2,
123
'block',
124
[
125
'---------------------------------------------------------------------------------------------',
126
' * Copyright (c) Microsoft Corporation. All rights reserved.',
127
' * Licensed under the MIT License. See License.txt in the project root for license information.',
128
' *--------------------------------------------------------------------------------------------'
129
]
130
]
131
},
132
},
133
// TS
134
{
135
files: [
136
'**/*.{ts,tsx,mts,cts}',
137
],
138
languageOptions: {
139
parser: tseslint.parser,
140
},
141
plugins: {
142
'@stylistic/ts': stylisticTs,
143
'@typescript-eslint': tseslint.plugin,
144
'local': pluginLocal,
145
'jsdoc': pluginJsdoc,
146
},
147
rules: {
148
// Disable built-in semi rules in favor of stylistic
149
'semi': 'off',
150
'@stylistic/ts/semi': 'warn',
151
'@stylistic/ts/member-delimiter-style': 'warn',
152
'local/code-no-unused-expressions': [
153
'warn',
154
{
155
'allowTernary': true
156
}
157
],
158
'jsdoc/no-types': 'warn',
159
'local/code-no-static-self-ref': 'warn'
160
}
161
},
162
// vscode TS
163
{
164
files: [
165
'src/**/*.ts',
166
],
167
languageOptions: {
168
parser: tseslint.parser,
169
},
170
plugins: {
171
'@typescript-eslint': tseslint.plugin,
172
},
173
rules: {
174
'@typescript-eslint/naming-convention': [
175
'warn',
176
{
177
'selector': 'class',
178
'format': [
179
'PascalCase'
180
]
181
}
182
]
183
}
184
},
185
// Disallow 'in' operator except in type predicates
186
{
187
files: [
188
'**/*.ts',
189
'.eslint-plugin-local/**/*.ts', // Explicitly include files under dot directories
190
],
191
ignores: [
192
'src/bootstrap-node.ts',
193
'build/lib/extensions.ts',
194
'build/lib/test/render.test.ts',
195
'extensions/debug-auto-launch/src/extension.ts',
196
'extensions/emmet/src/updateImageSize.ts',
197
'extensions/emmet/src/util.ts',
198
'extensions/github-authentication/src/node/fetch.ts',
199
'extensions/tunnel-forwarding/src/extension.ts',
200
'extensions/typescript-language-features/src/utils/platform.ts',
201
'extensions/typescript-language-features/web/src/webServer.ts',
202
'src/vs/base/browser/broadcast.ts',
203
'src/vs/base/browser/canIUse.ts',
204
'src/vs/base/browser/dom.ts',
205
'src/vs/base/browser/markdownRenderer.ts',
206
'src/vs/base/browser/touch.ts',
207
'src/vs/base/common/async.ts',
208
'src/vs/base/common/desktopEnvironmentInfo.ts',
209
'src/vs/base/common/objects.ts',
210
'src/vs/base/common/observableInternal/logging/consoleObservableLogger.ts',
211
'src/vs/base/common/observableInternal/logging/debugger/devToolsLogger.ts',
212
'src/vs/base/test/common/snapshot.ts',
213
'src/vs/base/test/common/timeTravelScheduler.ts',
214
'src/vs/editor/browser/controller/editContext/native/debugEditContext.ts',
215
'src/vs/editor/browser/gpu/gpuUtils.ts',
216
'src/vs/editor/browser/gpu/taskQueue.ts',
217
'src/vs/editor/browser/view.ts',
218
'src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts',
219
'src/vs/editor/browser/widget/diffEditor/utils.ts',
220
'src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts',
221
'src/vs/editor/common/config/editorOptions.ts',
222
'src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.ts',
223
'src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.ts',
224
'src/vs/editor/contrib/dropOrPasteInto/browser/edit.ts',
225
'src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts',
226
'src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts',
227
'src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.ts',
228
'src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.ts',
229
'src/vs/platform/configuration/common/configuration.ts',
230
'src/vs/platform/configuration/common/configurationModels.ts',
231
'src/vs/platform/contextkey/browser/contextKeyService.ts',
232
'src/vs/platform/contextkey/test/common/scanner.test.ts',
233
'src/vs/platform/dataChannel/browser/forwardingTelemetryService.ts',
234
'src/vs/platform/hover/browser/hoverService.ts',
235
'src/vs/platform/hover/browser/hoverWidget.ts',
236
'src/vs/platform/instantiation/common/instantiationService.ts',
237
'src/vs/platform/mcp/common/mcpManagementCli.ts',
238
'src/vs/workbench/api/browser/mainThreadChatSessions.ts',
239
'src/vs/workbench/api/browser/mainThreadDebugService.ts',
240
'src/vs/workbench/api/browser/mainThreadTesting.ts',
241
'src/vs/workbench/api/common/extHost.api.impl.ts',
242
'src/vs/workbench/api/common/extHostChatAgents2.ts',
243
'src/vs/workbench/api/common/extHostChatSessions.ts',
244
'src/vs/workbench/api/common/extHostDebugService.ts',
245
'src/vs/workbench/api/common/extHostNotebookKernels.ts',
246
'src/vs/workbench/api/common/extHostQuickOpen.ts',
247
'src/vs/workbench/api/common/extHostRequireInterceptor.ts',
248
'src/vs/workbench/api/common/extHostTypeConverters.ts',
249
'src/vs/workbench/api/common/extHostTypes.ts',
250
'src/vs/workbench/api/node/loopbackServer.ts',
251
'src/vs/workbench/api/node/proxyResolver.ts',
252
'src/vs/workbench/api/test/common/extHostTypeConverters.test.ts',
253
'src/vs/workbench/api/test/common/testRPCProtocol.ts',
254
'src/vs/workbench/api/worker/extHostExtensionService.ts',
255
'src/vs/workbench/browser/parts/paneCompositeBar.ts',
256
'src/vs/workbench/browser/parts/titlebar/titlebarPart.ts',
257
'src/vs/workbench/browser/workbench.ts',
258
'src/vs/workbench/common/notifications.ts',
259
'src/vs/workbench/contrib/accessibility/browser/accessibleView.ts',
260
'src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.ts',
261
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.ts',
262
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.ts',
263
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatElicitationContentPart.ts',
264
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.ts',
265
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.ts',
266
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.ts',
267
'src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts',
268
'src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.ts',
269
'src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.ts',
270
'src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.ts',
271
'src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.ts',
272
'src/vs/workbench/contrib/chat/common/model/chatModel.ts',
273
'src/vs/workbench/contrib/chat/test/common/promptSyntax/testUtils/mockFilesystem.test.ts',
274
'src/vs/workbench/contrib/chat/test/common/promptSyntax/testUtils/mockFilesystem.ts',
275
'src/vs/workbench/contrib/chat/test/common/tools/builtinTools/manageTodoListTool.test.ts',
276
'src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts',
277
'src/vs/workbench/contrib/debug/browser/variablesView.ts',
278
'src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts',
279
'src/vs/workbench/contrib/debug/common/debugModel.ts',
280
'src/vs/workbench/contrib/debug/common/debugger.ts',
281
'src/vs/workbench/contrib/debug/common/replAccessibilityAnnouncer.ts',
282
'src/vs/workbench/contrib/editSessions/browser/editSessionsStorageService.ts',
283
'src/vs/workbench/contrib/editTelemetry/browser/helpers/documentWithAnnotatedEdits.ts',
284
'src/vs/workbench/contrib/extensions/common/extensionQuery.ts',
285
'src/vs/workbench/contrib/interactive/browser/interactiveEditorInput.ts',
286
'src/vs/workbench/contrib/issue/browser/issueFormService.ts',
287
'src/vs/workbench/contrib/issue/browser/issueQuickAccess.ts',
288
'src/vs/workbench/contrib/markers/browser/markersView.ts',
289
'src/vs/workbench/contrib/mcp/browser/mcpElicitationService.ts',
290
'src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts',
291
'src/vs/workbench/contrib/mcp/common/mcpResourceFilesystem.ts',
292
'src/vs/workbench/contrib/mcp/common/mcpSamplingLog.ts',
293
'src/vs/workbench/contrib/mcp/common/mcpServer.ts',
294
'src/vs/workbench/contrib/mcp/common/mcpServerRequestHandler.ts',
295
'src/vs/workbench/contrib/mcp/test/common/mcpRegistryTypes.ts',
296
'src/vs/workbench/contrib/mcp/test/common/mcpServerRequestHandler.test.ts',
297
'src/vs/workbench/contrib/notebook/browser/controller/cellOutputActions.ts',
298
'src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.ts',
299
'src/vs/workbench/contrib/notebook/browser/controller/coreActions.ts',
300
'src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts',
301
'src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelView.ts',
302
'src/vs/workbench/contrib/output/browser/outputView.ts',
303
'src/vs/workbench/contrib/preferences/browser/settingsTree.ts',
304
'src/vs/workbench/contrib/remoteTunnel/electron-browser/remoteTunnel.contribution.ts',
305
'src/vs/workbench/contrib/testing/browser/explorerProjections/listProjection.ts',
306
'src/vs/workbench/contrib/testing/browser/explorerProjections/treeProjection.ts',
307
'src/vs/workbench/contrib/testing/browser/testCoverageBars.ts',
308
'src/vs/workbench/contrib/testing/browser/testExplorerActions.ts',
309
'src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts',
310
'src/vs/workbench/contrib/testing/browser/testingProgressUiService.ts',
311
'src/vs/workbench/contrib/testing/browser/testResultsView/testResultsTree.ts',
312
'src/vs/workbench/contrib/testing/common/testCoverageService.ts',
313
'src/vs/workbench/contrib/testing/common/testResultService.ts',
314
'src/vs/workbench/contrib/testing/common/testingChatAgentTool.ts',
315
'src/vs/workbench/contrib/testing/test/browser/testObjectTree.ts',
316
'src/vs/workbench/contrib/themes/browser/themes.contribution.ts',
317
'src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts',
318
'src/vs/workbench/services/environment/electron-browser/environmentService.ts',
319
'src/vs/workbench/services/keybinding/common/keybindingIO.ts',
320
'src/vs/workbench/services/preferences/common/preferencesValidation.ts',
321
'src/vs/workbench/services/remote/common/tunnelModel.ts',
322
'src/vs/workbench/services/search/common/textSearchManager.ts',
323
'src/vs/workbench/test/browser/workbenchTestServices.ts',
324
'test/automation/src/playwrightDriver.ts',
325
'.eslint-plugin-local/**/*',
326
],
327
plugins: {
328
'local': pluginLocal,
329
},
330
rules: {
331
'local/code-no-in-operator': 'warn',
332
}
333
},
334
// Strict no explicit `any`
335
{
336
files: [
337
// Extensions
338
'extensions/git/src/**/*.ts',
339
'extensions/git-base/src/**/*.ts',
340
'extensions/github/src/**/*.ts',
341
// vscode
342
'src/**/*.ts',
343
],
344
ignores: [
345
// Extensions
346
'extensions/git/src/commands.ts',
347
'extensions/git/src/decorators.ts',
348
'extensions/git/src/git.ts',
349
'extensions/git/src/util.ts',
350
'extensions/git-base/src/decorators.ts',
351
'extensions/github/src/util.ts',
352
// vscode d.ts
353
'src/vs/amdX.ts',
354
'src/vs/monaco.d.ts',
355
'src/vscode-dts/**',
356
// Base
357
'src/vs/base/browser/dom.ts',
358
'src/vs/base/browser/mouseEvent.ts',
359
'src/vs/base/node/processes.ts',
360
'src/vs/base/common/arrays.ts',
361
'src/vs/base/common/async.ts',
362
'src/vs/base/common/console.ts',
363
'src/vs/base/common/decorators.ts',
364
'src/vs/base/common/errorMessage.ts',
365
'src/vs/base/common/errors.ts',
366
'src/vs/base/common/event.ts',
367
'src/vs/base/common/hotReload.ts',
368
'src/vs/base/common/hotReloadHelpers.ts',
369
'src/vs/base/common/json.ts',
370
'src/vs/base/common/jsonSchema.ts',
371
'src/vs/base/common/lifecycle.ts',
372
'src/vs/base/common/map.ts',
373
'src/vs/base/common/marshalling.ts',
374
'src/vs/base/common/objects.ts',
375
'src/vs/base/common/performance.ts',
376
'src/vs/base/common/platform.ts',
377
'src/vs/base/common/processes.ts',
378
'src/vs/base/common/types.ts',
379
'src/vs/base/common/uriIpc.ts',
380
'src/vs/base/common/verifier.ts',
381
'src/vs/base/common/observableInternal/base.ts',
382
'src/vs/base/common/observableInternal/changeTracker.ts',
383
'src/vs/base/common/observableInternal/set.ts',
384
'src/vs/base/common/observableInternal/transaction.ts',
385
'src/vs/base/common/worker/webWorkerBootstrap.ts',
386
'src/vs/base/test/common/mock.ts',
387
'src/vs/base/test/common/snapshot.ts',
388
'src/vs/base/test/common/timeTravelScheduler.ts',
389
'src/vs/base/test/common/troubleshooting.ts',
390
'src/vs/base/test/common/utils.ts',
391
'src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts',
392
'src/vs/base/browser/ui/grid/grid.ts',
393
'src/vs/base/browser/ui/grid/gridview.ts',
394
'src/vs/base/browser/ui/list/listPaging.ts',
395
'src/vs/base/browser/ui/list/listView.ts',
396
'src/vs/base/browser/ui/list/listWidget.ts',
397
'src/vs/base/browser/ui/list/rowCache.ts',
398
'src/vs/base/browser/ui/sash/sash.ts',
399
'src/vs/base/browser/ui/table/tableWidget.ts',
400
'src/vs/base/parts/ipc/common/ipc.net.ts',
401
'src/vs/base/parts/ipc/common/ipc.ts',
402
'src/vs/base/parts/ipc/electron-main/ipcMain.ts',
403
'src/vs/base/parts/ipc/node/ipc.cp.ts',
404
'src/vs/base/common/observableInternal/experimental/reducer.ts',
405
'src/vs/base/common/observableInternal/experimental/utils.ts',
406
'src/vs/base/common/observableInternal/logging/consoleObservableLogger.ts',
407
'src/vs/base/common/observableInternal/logging/debugGetDependencyGraph.ts',
408
'src/vs/base/common/observableInternal/logging/logging.ts',
409
'src/vs/base/common/observableInternal/observables/baseObservable.ts',
410
'src/vs/base/common/observableInternal/observables/derived.ts',
411
'src/vs/base/common/observableInternal/observables/derivedImpl.ts',
412
'src/vs/base/common/observableInternal/observables/observableFromEvent.ts',
413
'src/vs/base/common/observableInternal/observables/observableSignalFromEvent.ts',
414
'src/vs/base/common/observableInternal/reactions/autorunImpl.ts',
415
'src/vs/base/common/observableInternal/utils/utils.ts',
416
'src/vs/base/common/observableInternal/utils/utilsCancellation.ts',
417
'src/vs/base/parts/ipc/test/node/testService.ts',
418
'src/vs/base/common/observableInternal/logging/debugger/debuggerRpc.ts',
419
'src/vs/base/common/observableInternal/logging/debugger/devToolsLogger.ts',
420
'src/vs/base/common/observableInternal/logging/debugger/rpc.ts',
421
'src/vs/base/test/browser/ui/grid/util.ts',
422
// Platform
423
'src/vs/platform/commands/common/commands.ts',
424
'src/vs/platform/contextkey/browser/contextKeyService.ts',
425
'src/vs/platform/contextkey/common/contextkey.ts',
426
'src/vs/platform/contextview/browser/contextView.ts',
427
'src/vs/platform/debug/common/extensionHostDebugIpc.ts',
428
'src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts',
429
'src/vs/platform/diagnostics/common/diagnostics.ts',
430
'src/vs/platform/download/common/downloadIpc.ts',
431
'src/vs/platform/extensions/common/extensions.ts',
432
'src/vs/platform/instantiation/common/descriptors.ts',
433
'src/vs/platform/instantiation/common/extensions.ts',
434
'src/vs/platform/instantiation/common/instantiation.ts',
435
'src/vs/platform/instantiation/common/instantiationService.ts',
436
'src/vs/platform/instantiation/common/serviceCollection.ts',
437
'src/vs/platform/keybinding/common/keybinding.ts',
438
'src/vs/platform/keybinding/common/keybindingResolver.ts',
439
'src/vs/platform/keybinding/common/keybindingsRegistry.ts',
440
'src/vs/platform/keybinding/common/resolvedKeybindingItem.ts',
441
'src/vs/platform/languagePacks/node/languagePacks.ts',
442
'src/vs/platform/list/browser/listService.ts',
443
'src/vs/platform/log/browser/log.ts',
444
'src/vs/platform/log/common/log.ts',
445
'src/vs/platform/log/common/logIpc.ts',
446
'src/vs/platform/log/electron-main/logIpc.ts',
447
'src/vs/platform/meteredConnection/electron-main/meteredConnectionChannel.ts',
448
'src/vs/platform/observable/common/wrapInHotClass.ts',
449
'src/vs/platform/observable/common/wrapInReloadableClass.ts',
450
'src/vs/platform/policy/common/policyIpc.ts',
451
'src/vs/platform/profiling/common/profilingTelemetrySpec.ts',
452
'src/vs/platform/quickinput/browser/quickInputActions.ts',
453
'src/vs/platform/quickinput/common/quickInput.ts',
454
'src/vs/platform/registry/common/platform.ts',
455
'src/vs/platform/remote/browser/browserSocketFactory.ts',
456
'src/vs/platform/remote/browser/remoteAuthorityResolverService.ts',
457
'src/vs/platform/remote/common/remoteAgentConnection.ts',
458
'src/vs/platform/remote/common/remoteAuthorityResolver.ts',
459
'src/vs/platform/remote/electron-browser/electronRemoteResourceLoader.ts',
460
'src/vs/platform/remote/electron-browser/remoteAuthorityResolverService.ts',
461
'src/vs/platform/remoteTunnel/node/remoteTunnelService.ts',
462
'src/vs/platform/request/common/request.ts',
463
'src/vs/platform/request/common/requestIpc.ts',
464
'src/vs/platform/request/electron-utility/requestService.ts',
465
'src/vs/platform/request/node/proxy.ts',
466
'src/vs/platform/telemetry/browser/errorTelemetry.ts',
467
'src/vs/platform/telemetry/common/errorTelemetry.ts',
468
'src/vs/platform/telemetry/common/remoteTelemetryChannel.ts',
469
'src/vs/platform/telemetry/node/errorTelemetry.ts',
470
'src/vs/platform/theme/common/iconRegistry.ts',
471
'src/vs/platform/theme/common/tokenClassificationRegistry.ts',
472
'src/vs/platform/update/common/updateIpc.ts',
473
'src/vs/platform/update/electron-main/updateService.snap.ts',
474
'src/vs/platform/url/common/urlIpc.ts',
475
'src/vs/platform/userDataProfile/common/userDataProfileIpc.ts',
476
'src/vs/platform/userDataProfile/electron-main/userDataProfileStorageIpc.ts',
477
'src/vs/platform/userDataSync/common/abstractSynchronizer.ts',
478
'src/vs/platform/userDataSync/common/extensionsMerge.ts',
479
'src/vs/platform/userDataSync/common/extensionsSync.ts',
480
'src/vs/platform/userDataSync/common/globalStateMerge.ts',
481
'src/vs/platform/userDataSync/common/globalStateSync.ts',
482
'src/vs/platform/userDataSync/common/settingsMerge.ts',
483
'src/vs/platform/userDataSync/common/settingsSync.ts',
484
'src/vs/platform/userDataSync/common/userDataSync.ts',
485
'src/vs/platform/userDataSync/common/userDataSyncIpc.ts',
486
'src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts',
487
'src/vs/platform/webview/common/webviewManagerService.ts',
488
'src/vs/platform/instantiation/test/common/instantiationServiceMock.ts',
489
'src/vs/platform/keybinding/test/common/mockKeybindingService.ts',
490
// Editor
491
'src/vs/editor/standalone/browser/standaloneEditor.ts',
492
'src/vs/editor/standalone/browser/standaloneLanguages.ts',
493
'src/vs/editor/standalone/browser/standaloneServices.ts',
494
'src/vs/editor/test/browser/testCodeEditor.ts',
495
'src/vs/editor/test/common/testTextModel.ts',
496
'src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts',
497
'src/vs/editor/contrib/codeAction/browser/codeAction.ts',
498
'src/vs/editor/contrib/codeAction/browser/codeActionCommands.ts',
499
'src/vs/editor/contrib/codeAction/common/types.ts',
500
'src/vs/editor/contrib/colorPicker/browser/colorDetector.ts',
501
'src/vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution.ts',
502
'src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.ts',
503
'src/vs/editor/contrib/find/browser/findController.ts',
504
'src/vs/editor/contrib/find/browser/findModel.ts',
505
'src/vs/editor/contrib/gotoSymbol/browser/goToCommands.ts',
506
'src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.ts',
507
'src/vs/editor/contrib/hover/browser/hoverActions.ts',
508
'src/vs/editor/contrib/inlineCompletions/browser/structuredLogger.ts',
509
'src/vs/editor/contrib/inlineCompletions/browser/utils.ts',
510
'src/vs/editor/contrib/smartSelect/browser/smartSelect.ts',
511
'src/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.ts',
512
'src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts',
513
'src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts',
514
'src/vs/editor/standalone/common/monarch/monarchCommon.ts',
515
'src/vs/editor/standalone/common/monarch/monarchCompile.ts',
516
'src/vs/editor/standalone/common/monarch/monarchLexer.ts',
517
'src/vs/editor/standalone/common/monarch/monarchTypes.ts',
518
'src/vs/editor/contrib/inlineCompletions/browser/controller/commands.ts',
519
'src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts',
520
'src/vs/editor/contrib/inlineCompletions/browser/model/typingSpeed.ts',
521
'src/vs/editor/contrib/inlineCompletions/test/browser/utils.ts',
522
'src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts',
523
'src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts',
524
'src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.ts',
525
'src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.ts',
526
// Workbench
527
'src/vs/workbench/api/browser/mainThreadChatSessions.ts',
528
'src/vs/workbench/api/common/extHost.api.impl.ts',
529
'src/vs/workbench/api/common/extHost.protocol.ts',
530
'src/vs/workbench/api/common/extHostChatSessions.ts',
531
'src/vs/workbench/api/common/extHostCodeInsets.ts',
532
'src/vs/workbench/api/common/extHostCommands.ts',
533
'src/vs/workbench/api/common/extHostConsoleForwarder.ts',
534
'src/vs/workbench/api/common/extHostDataChannels.ts',
535
'src/vs/workbench/api/common/extHostDebugService.ts',
536
'src/vs/workbench/api/common/extHostExtensionActivator.ts',
537
'src/vs/workbench/api/common/extHostExtensionService.ts',
538
'src/vs/workbench/api/common/extHostFileSystemConsumer.ts',
539
'src/vs/workbench/api/common/extHostFileSystemEventService.ts',
540
'src/vs/workbench/api/common/extHostLanguageFeatures.ts',
541
'src/vs/workbench/api/common/extHostLanguageModelTools.ts',
542
'src/vs/workbench/api/common/extHostMcp.ts',
543
'src/vs/workbench/api/common/extHostMemento.ts',
544
'src/vs/workbench/api/common/extHostMessageService.ts',
545
'src/vs/workbench/api/common/extHostNotebookDocument.ts',
546
'src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts',
547
'src/vs/workbench/api/common/extHostRequireInterceptor.ts',
548
'src/vs/workbench/api/common/extHostRpcService.ts',
549
'src/vs/workbench/api/common/extHostSCM.ts',
550
'src/vs/workbench/api/common/extHostSearch.ts',
551
'src/vs/workbench/api/common/extHostStatusBar.ts',
552
'src/vs/workbench/api/common/extHostStoragePaths.ts',
553
'src/vs/workbench/api/common/extHostTelemetry.ts',
554
'src/vs/workbench/api/common/extHostTesting.ts',
555
'src/vs/workbench/api/common/extHostTextEditor.ts',
556
'src/vs/workbench/api/common/extHostTimeline.ts',
557
'src/vs/workbench/api/common/extHostTreeViews.ts',
558
'src/vs/workbench/api/common/extHostTypeConverters.ts',
559
'src/vs/workbench/api/common/extHostTypes.ts',
560
'src/vs/workbench/api/common/extHostTypes/es5ClassCompat.ts',
561
'src/vs/workbench/api/common/extHostTypes/location.ts',
562
'src/vs/workbench/api/common/extHostWebview.ts',
563
'src/vs/workbench/api/common/extHostWebviewMessaging.ts',
564
'src/vs/workbench/api/common/extHostWebviewPanels.ts',
565
'src/vs/workbench/api/common/extHostWebviewView.ts',
566
'src/vs/workbench/api/common/extHostWorkspace.ts',
567
'src/vs/workbench/api/common/extensionHostMain.ts',
568
'src/vs/workbench/api/node/extHostAuthentication.ts',
569
'src/vs/workbench/api/node/extHostCLIServer.ts',
570
'src/vs/workbench/api/node/extHostConsoleForwarder.ts',
571
'src/vs/workbench/api/node/extHostDownloadService.ts',
572
'src/vs/workbench/api/node/extHostExtensionService.ts',
573
'src/vs/workbench/api/node/extHostMcpNode.ts',
574
'src/vs/workbench/api/node/extensionHostProcess.ts',
575
'src/vs/workbench/api/node/proxyResolver.ts',
576
'src/vs/workbench/api/test/common/testRPCProtocol.ts',
577
'src/vs/workbench/api/worker/extHostConsoleForwarder.ts',
578
'src/vs/workbench/api/worker/extHostExtensionService.ts',
579
'src/vs/workbench/api/worker/extensionHostWorker.ts',
580
'src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.ts',
581
'src/vs/workbench/contrib/accessibilitySignals/browser/commands.ts',
582
'src/vs/workbench/contrib/authentication/browser/actions/manageTrustedMcpServersForAccountAction.ts',
583
'src/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.ts',
584
'src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts',
585
'src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPreview.ts',
586
'src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts',
587
'src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsOutline.ts',
588
'src/vs/workbench/contrib/codeEditor/electron-browser/selectionClipboard.ts',
589
'src/vs/workbench/contrib/commands/common/commands.contribution.ts',
590
'src/vs/workbench/contrib/comments/browser/commentsTreeViewer.ts',
591
'src/vs/workbench/contrib/comments/browser/commentsView.ts',
592
'src/vs/workbench/contrib/comments/browser/reactionsAction.ts',
593
'src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts',
594
'src/vs/workbench/contrib/customEditor/browser/customEditors.ts',
595
'src/vs/workbench/contrib/customEditor/common/customEditor.ts',
596
'src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts',
597
'src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts',
598
'src/vs/workbench/contrib/debug/browser/debugCommands.ts',
599
'src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts',
600
'src/vs/workbench/contrib/debug/browser/debugEditorActions.ts',
601
'src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts',
602
'src/vs/workbench/contrib/debug/browser/debugHover.ts',
603
'src/vs/workbench/contrib/debug/browser/debugService.ts',
604
'src/vs/workbench/contrib/debug/browser/debugSession.ts',
605
'src/vs/workbench/contrib/debug/browser/rawDebugSession.ts',
606
'src/vs/workbench/contrib/debug/browser/repl.ts',
607
'src/vs/workbench/contrib/debug/browser/replViewer.ts',
608
'src/vs/workbench/contrib/debug/browser/variablesView.ts',
609
'src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts',
610
'src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts',
611
'src/vs/workbench/contrib/debug/common/debugger.ts',
612
'src/vs/workbench/contrib/debug/common/replModel.ts',
613
'src/vs/workbench/contrib/debug/test/common/mockDebug.ts',
614
'src/vs/workbench/contrib/editSessions/common/workspaceStateSync.ts',
615
'src/vs/workbench/contrib/editTelemetry/browser/helpers/documentWithAnnotatedEdits.ts',
616
'src/vs/workbench/contrib/editTelemetry/browser/helpers/utils.ts',
617
'src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.ts',
618
'src/vs/workbench/contrib/extensions/browser/extensionEditor.ts',
619
'src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts',
620
'src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts',
621
'src/vs/workbench/contrib/extensions/browser/extensionsActions.ts',
622
'src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.ts',
623
'src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts',
624
'src/vs/workbench/contrib/extensions/browser/extensionsViews.ts',
625
'src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts',
626
'src/vs/workbench/contrib/extensions/common/extensions.ts',
627
'src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts',
628
'src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts',
629
'src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts',
630
'src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts',
631
'src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.ts',
632
'src/vs/workbench/contrib/markers/browser/markers.contribution.ts',
633
'src/vs/workbench/contrib/markers/browser/markersView.ts',
634
'src/vs/workbench/contrib/mergeEditor/browser/commands/commands.ts',
635
'src/vs/workbench/contrib/mergeEditor/browser/utils.ts',
636
'src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts',
637
'src/vs/workbench/contrib/mergeEditor/browser/view/mergeEditor.ts',
638
'src/vs/workbench/contrib/notebook/browser/contrib/clipboard/notebookClipboard.ts',
639
'src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFind.ts',
640
'src/vs/workbench/contrib/notebook/browser/contrib/layout/layoutActions.ts',
641
'src/vs/workbench/contrib/notebook/browser/contrib/profile/notebookProfile.ts',
642
'src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts',
643
'src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.ts',
644
'src/vs/workbench/contrib/notebook/browser/controller/coreActions.ts',
645
'src/vs/workbench/contrib/notebook/browser/controller/editActions.ts',
646
'src/vs/workbench/contrib/notebook/browser/controller/notebookIndentationActions.ts',
647
'src/vs/workbench/contrib/notebook/browser/controller/sectionActions.ts',
648
'src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts',
649
'src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookDeletedCellDecorator.ts',
650
'src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts',
651
'src/vs/workbench/contrib/notebook/browser/outputEditor/notebookOutputEditor.ts',
652
'src/vs/workbench/contrib/notebook/browser/services/notebookEditorServiceImpl.ts',
653
'src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts',
654
'src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts',
655
'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewMessages.ts',
656
'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts',
657
'src/vs/workbench/contrib/notebook/browser/viewModel/markupCellViewModel.ts',
658
'src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorStickyScroll.ts',
659
'src/vs/workbench/contrib/notebook/browser/viewParts/notebookHorizontalTracker.ts',
660
'src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelQuickPickStrategy.ts',
661
'src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.ts',
662
'src/vs/workbench/contrib/notebook/common/model/notebookMetadataTextModel.ts',
663
'src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts',
664
'src/vs/workbench/contrib/notebook/common/notebookCommon.ts',
665
'src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts',
666
'src/vs/workbench/contrib/notebook/test/browser/testNotebookEditor.ts',
667
'src/vs/workbench/contrib/performance/electron-browser/startupProfiler.ts',
668
'src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts',
669
'src/vs/workbench/contrib/preferences/browser/preferencesRenderers.ts',
670
'src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts',
671
'src/vs/workbench/contrib/preferences/browser/settingsTree.ts',
672
'src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts',
673
'src/vs/workbench/contrib/remote/browser/tunnelView.ts',
674
'src/vs/workbench/contrib/search/browser/AISearch/aiSearchModel.ts',
675
'src/vs/workbench/contrib/search/browser/AISearch/aiSearchModelBase.ts',
676
'src/vs/workbench/contrib/search/browser/notebookSearch/notebookSearchModel.ts',
677
'src/vs/workbench/contrib/search/browser/notebookSearch/notebookSearchModelBase.ts',
678
'src/vs/workbench/contrib/search/browser/notebookSearch/searchNotebookHelpers.ts',
679
'src/vs/workbench/contrib/search/browser/replace.ts',
680
'src/vs/workbench/contrib/search/browser/replaceService.ts',
681
'src/vs/workbench/contrib/search/browser/searchActionsCopy.ts',
682
'src/vs/workbench/contrib/search/browser/searchActionsFind.ts',
683
'src/vs/workbench/contrib/search/browser/searchActionsNav.ts',
684
'src/vs/workbench/contrib/search/browser/searchActionsRemoveReplace.ts',
685
'src/vs/workbench/contrib/search/browser/searchActionsTextQuickAccess.ts',
686
'src/vs/workbench/contrib/search/browser/searchActionsTopBar.ts',
687
'src/vs/workbench/contrib/search/browser/searchMessage.ts',
688
'src/vs/workbench/contrib/search/browser/searchResultsView.ts',
689
'src/vs/workbench/contrib/search/browser/searchTreeModel/fileMatch.ts',
690
'src/vs/workbench/contrib/search/browser/searchTreeModel/folderMatch.ts',
691
'src/vs/workbench/contrib/search/browser/searchTreeModel/searchModel.ts',
692
'src/vs/workbench/contrib/search/browser/searchTreeModel/searchResult.ts',
693
'src/vs/workbench/contrib/search/browser/searchTreeModel/searchTreeCommon.ts',
694
'src/vs/workbench/contrib/search/browser/searchTreeModel/textSearchHeading.ts',
695
'src/vs/workbench/contrib/search/browser/searchView.ts',
696
'src/vs/workbench/contrib/search/test/browser/mockSearchTree.ts',
697
'src/vs/workbench/contrib/searchEditor/browser/searchEditor.contribution.ts',
698
'src/vs/workbench/contrib/searchEditor/browser/searchEditorActions.ts',
699
'src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.ts',
700
'src/vs/workbench/contrib/snippets/browser/commands/configureSnippets.ts',
701
'src/vs/workbench/contrib/snippets/browser/commands/insertSnippet.ts',
702
'src/vs/workbench/contrib/snippets/browser/snippetsService.ts',
703
'src/vs/workbench/contrib/testing/common/storedValue.ts',
704
'src/vs/workbench/contrib/testing/test/browser/testObjectTree.ts',
705
'src/vs/workbench/contrib/typeHierarchy/browser/typeHierarchy.contribution.ts',
706
'src/vs/workbench/contrib/typeHierarchy/common/typeHierarchy.ts',
707
'src/vs/workbench/contrib/webview/browser/overlayWebview.ts',
708
'src/vs/workbench/contrib/webview/browser/webview.ts',
709
'src/vs/workbench/contrib/webview/browser/webviewElement.ts',
710
'src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts',
711
'src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInputSerializer.ts',
712
'src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts',
713
'src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts',
714
'src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThroughPart.ts',
715
'src/vs/workbench/services/authentication/common/authentication.ts',
716
'src/vs/workbench/services/authentication/test/browser/authenticationQueryServiceMocks.ts',
717
'src/vs/workbench/services/commands/common/commandService.ts',
718
'src/vs/workbench/services/configurationResolver/common/configurationResolver.ts',
719
'src/vs/workbench/services/configurationResolver/common/configurationResolverExpression.ts',
720
'src/vs/workbench/services/extensions/common/extensionHostManager.ts',
721
'src/vs/workbench/services/extensions/common/extensionsRegistry.ts',
722
'src/vs/workbench/services/extensions/common/lazyPromise.ts',
723
'src/vs/workbench/services/extensions/common/polyfillNestedWorker.protocol.ts',
724
'src/vs/workbench/services/extensions/common/rpcProtocol.ts',
725
'src/vs/workbench/services/extensions/worker/polyfillNestedWorker.ts',
726
'src/vs/workbench/services/keybinding/browser/keybindingService.ts',
727
'src/vs/workbench/services/keybinding/browser/keyboardLayoutService.ts',
728
'src/vs/workbench/services/keybinding/common/keybindingEditing.ts',
729
'src/vs/workbench/services/keybinding/common/keymapInfo.ts',
730
'src/vs/workbench/services/language/common/languageService.ts',
731
'src/vs/workbench/services/outline/browser/outline.ts',
732
'src/vs/workbench/services/outline/browser/outlineService.ts',
733
'src/vs/workbench/services/preferences/common/preferences.ts',
734
'src/vs/workbench/services/preferences/common/preferencesModels.ts',
735
'src/vs/workbench/services/preferences/common/preferencesValidation.ts',
736
'src/vs/workbench/services/remote/common/tunnelModel.ts',
737
'src/vs/workbench/services/search/common/replace.ts',
738
'src/vs/workbench/services/search/common/search.ts',
739
'src/vs/workbench/services/search/common/searchExtConversionTypes.ts',
740
'src/vs/workbench/services/search/common/searchExtTypes.ts',
741
'src/vs/workbench/services/search/node/fileSearch.ts',
742
'src/vs/workbench/services/search/node/rawSearchService.ts',
743
'src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts',
744
'src/vs/workbench/services/textMate/common/TMGrammarFactory.ts',
745
'src/vs/workbench/services/themes/browser/fileIconThemeData.ts',
746
'src/vs/workbench/services/themes/browser/productIconThemeData.ts',
747
'src/vs/workbench/services/themes/common/colorThemeData.ts',
748
'src/vs/workbench/services/themes/common/plistParser.ts',
749
'src/vs/workbench/services/themes/common/themeExtensionPoints.ts',
750
'src/vs/workbench/services/themes/common/workbenchThemeService.ts',
751
'src/vs/workbench/test/browser/workbenchTestServices.ts',
752
'src/vs/workbench/test/common/workbenchTestServices.ts',
753
'src/vs/workbench/test/electron-browser/workbenchTestServices.ts',
754
// Server
755
'src/vs/server/node/remoteAgentEnvironmentImpl.ts',
756
'src/vs/server/node/remoteExtensionHostAgentServer.ts',
757
'src/vs/server/node/remoteExtensionsScanner.ts',
758
// Tests
759
'**/*.test.ts',
760
'**/*.integrationTest.ts'
761
],
762
languageOptions: {
763
parser: tseslint.parser,
764
},
765
plugins: {
766
'@typescript-eslint': tseslint.plugin,
767
},
768
rules: {
769
'@typescript-eslint/no-explicit-any': [
770
'warn',
771
{
772
'fixToUnknown': false
773
}
774
]
775
}
776
},
777
// Tests
778
{
779
files: [
780
'**/*.test.ts'
781
],
782
languageOptions: {
783
parser: tseslint.parser,
784
},
785
plugins: {
786
'local': pluginLocal,
787
},
788
rules: {
789
'local/code-no-dangerous-type-assertions': 'off',
790
'local/code-must-use-super-dispose': 'off',
791
'local/code-no-test-only': 'error',
792
'local/code-no-test-async-suite': 'warn',
793
'local/code-must-use-result': [
794
'warn',
795
[
796
{
797
'message': 'Expression must be awaited',
798
'functions': [
799
'assertSnapshot',
800
'assertHeap'
801
]
802
}
803
]
804
]
805
}
806
},
807
// vscode tests specific rules
808
{
809
files: [
810
'src/vs/**/*.test.ts'
811
],
812
languageOptions: {
813
parser: tseslint.parser,
814
},
815
plugins: {
816
'local': pluginLocal,
817
},
818
rules: {
819
'local/code-ensure-no-disposables-leak-in-test': [
820
'warn',
821
{
822
// Files should (only) be removed from the list they adopt the leak detector
823
'exclude': [
824
'src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts',
825
]
826
}
827
]
828
}
829
},
830
// vscode API
831
{
832
files: [
833
'**/vscode.d.ts',
834
'**/vscode.proposed.*.d.ts'
835
],
836
languageOptions: {
837
parser: tseslint.parser,
838
},
839
plugins: {
840
'local': pluginLocal,
841
},
842
rules: {
843
'no-restricted-syntax': [
844
'warn',
845
{
846
'selector': `TSArrayType > TSUnionType`,
847
'message': 'Use Array<...> for arrays of union types.'
848
},
849
],
850
'local/vscode-dts-create-func': 'warn',
851
'local/vscode-dts-literal-or-types': 'warn',
852
'local/vscode-dts-string-type-literals': 'warn',
853
'local/vscode-dts-interface-naming': 'warn',
854
'local/vscode-dts-cancellation': 'warn',
855
'local/vscode-dts-use-export': 'warn',
856
'local/vscode-dts-use-thenable': 'warn',
857
'local/vscode-dts-vscode-in-comments': 'warn',
858
'local/vscode-dts-provider-naming': [
859
'warn',
860
{
861
'allowed': [
862
'FileSystemProvider',
863
'TreeDataProvider',
864
'TestProvider',
865
'CustomEditorProvider',
866
'CustomReadonlyEditorProvider',
867
'TerminalLinkProvider',
868
'AuthenticationProvider',
869
'NotebookContentProvider'
870
]
871
}
872
],
873
'local/vscode-dts-event-naming': [
874
'warn',
875
{
876
'allowed': [
877
'onCancellationRequested',
878
'event'
879
],
880
'verbs': [
881
'accept',
882
'archive',
883
'change',
884
'close',
885
'collapse',
886
'create',
887
'delete',
888
'lock',
889
'resume',
890
'shutdown',
891
'suspend',
892
'unlock',
893
'discover',
894
'dispose',
895
'drop',
896
'edit',
897
'end',
898
'execute',
899
'expand',
900
'grant',
901
'hide',
902
'invalidate',
903
'open',
904
'override',
905
'perform',
906
'receive',
907
'register',
908
'remove',
909
'rename',
910
'save',
911
'send',
912
'start',
913
'terminate',
914
'trigger',
915
'unregister',
916
'write',
917
'commit'
918
]
919
}
920
]
921
}
922
},
923
// vscode.d.ts
924
{
925
files: [
926
'**/vscode.d.ts'
927
],
928
languageOptions: {
929
parser: tseslint.parser,
930
},
931
rules: {
932
'jsdoc/tag-lines': 'off',
933
'jsdoc/valid-types': 'off',
934
'jsdoc/no-multi-asterisks': [
935
'warn',
936
{
937
'allowWhitespace': true
938
}
939
],
940
'jsdoc/require-jsdoc': [
941
'warn',
942
{
943
'enableFixer': false,
944
'contexts': [
945
'TSInterfaceDeclaration',
946
'TSPropertySignature',
947
'TSMethodSignature',
948
'TSDeclareFunction',
949
'ClassDeclaration',
950
'MethodDefinition',
951
'PropertyDeclaration',
952
'TSEnumDeclaration',
953
'TSEnumMember',
954
'ExportNamedDeclaration'
955
]
956
}
957
],
958
'jsdoc/check-param-names': [
959
'warn',
960
{
961
'enableFixer': false,
962
'checkDestructured': false
963
}
964
],
965
'jsdoc/require-returns': 'warn'
966
}
967
},
968
// common/browser layer
969
{
970
files: [
971
'src/**/{common,browser}/**/*.ts'
972
],
973
languageOptions: {
974
parser: tseslint.parser,
975
},
976
plugins: {
977
'local': pluginLocal,
978
},
979
rules: {
980
'local/code-amd-node-module': 'warn'
981
}
982
},
983
// node/electron layer
984
{
985
files: [
986
'src/*.ts',
987
'src/**/{node,electron-main,electron-utility}/**/*.ts'
988
],
989
languageOptions: {
990
parser: tseslint.parser,
991
},
992
plugins: {
993
'local': pluginLocal,
994
},
995
rules: {
996
'no-restricted-globals': [
997
'warn',
998
'name',
999
'length',
1000
'event',
1001
'closed',
1002
'external',
1003
'status',
1004
'origin',
1005
'orientation',
1006
'context',
1007
// Below are globals that are unsupported in ESM
1008
'__dirname',
1009
'__filename',
1010
'require'
1011
]
1012
}
1013
},
1014
// browser/electron-browser layer
1015
{
1016
files: [
1017
'src/**/{browser,electron-browser}/**/*.ts'
1018
],
1019
languageOptions: {
1020
parser: tseslint.parser,
1021
},
1022
plugins: {
1023
'local': pluginLocal,
1024
},
1025
rules: {
1026
'local/code-no-global-document-listener': 'warn',
1027
'no-restricted-syntax': [
1028
'warn',
1029
{
1030
'selector': `NewExpression[callee.object.name='Intl']`,
1031
'message': 'Use safeIntl helper instead for safe and lazy use of potentially expensive Intl methods.'
1032
},
1033
{
1034
'selector': `BinaryExpression[operator='instanceof'][right.name='MouseEvent']`,
1035
'message': 'Use DOM.isMouseEvent() to support multi-window scenarios.'
1036
},
1037
{
1038
'selector': `BinaryExpression[operator='instanceof'][right.name=/^HTML\\w+/]`,
1039
'message': 'Use DOM.isHTMLElement() and related methods to support multi-window scenarios.'
1040
},
1041
{
1042
'selector': `BinaryExpression[operator='instanceof'][right.name=/^SVG\\w+/]`,
1043
'message': 'Use DOM.isSVGElement() and related methods to support multi-window scenarios.'
1044
},
1045
{
1046
'selector': `BinaryExpression[operator='instanceof'][right.name='KeyboardEvent']`,
1047
'message': 'Use DOM.isKeyboardEvent() to support multi-window scenarios.'
1048
},
1049
{
1050
'selector': `BinaryExpression[operator='instanceof'][right.name='PointerEvent']`,
1051
'message': 'Use DOM.isPointerEvent() to support multi-window scenarios.'
1052
},
1053
{
1054
'selector': `BinaryExpression[operator='instanceof'][right.name='DragEvent']`,
1055
'message': 'Use DOM.isDragEvent() to support multi-window scenarios.'
1056
},
1057
{
1058
'selector': `MemberExpression[object.name='document'][property.name='activeElement']`,
1059
'message': 'Use <targetWindow>.document.activeElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1060
},
1061
{
1062
'selector': `MemberExpression[object.name='document'][property.name='contains']`,
1063
'message': 'Use <targetWindow>.document.contains to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1064
},
1065
{
1066
'selector': `MemberExpression[object.name='document'][property.name='styleSheets']`,
1067
'message': 'Use <targetWindow>.document.styleSheets to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1068
},
1069
{
1070
'selector': `MemberExpression[object.name='document'][property.name='fullscreenElement']`,
1071
'message': 'Use <targetWindow>.document.fullscreenElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1072
},
1073
{
1074
'selector': `MemberExpression[object.name='document'][property.name='body']`,
1075
'message': 'Use <targetWindow>.document.body to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1076
},
1077
{
1078
'selector': `MemberExpression[object.name='document'][property.name='addEventListener']`,
1079
'message': 'Use <targetWindow>.document.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1080
},
1081
{
1082
'selector': `MemberExpression[object.name='document'][property.name='removeEventListener']`,
1083
'message': 'Use <targetWindow>.document.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1084
},
1085
{
1086
'selector': `MemberExpression[object.name='document'][property.name='hasFocus']`,
1087
'message': 'Use <targetWindow>.document.hasFocus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1088
},
1089
{
1090
'selector': `MemberExpression[object.name='document'][property.name='head']`,
1091
'message': 'Use <targetWindow>.document.head to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1092
},
1093
{
1094
'selector': `MemberExpression[object.name='document'][property.name='exitFullscreen']`,
1095
'message': 'Use <targetWindow>.document.exitFullscreen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1096
},
1097
{
1098
'selector': `MemberExpression[object.name='document'][property.name='getElementById']`,
1099
'message': 'Use <targetWindow>.document.getElementById to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1100
},
1101
{
1102
'selector': `MemberExpression[object.name='document'][property.name='getElementsByClassName']`,
1103
'message': 'Use <targetWindow>.document.getElementsByClassName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1104
},
1105
{
1106
'selector': `MemberExpression[object.name='document'][property.name='getElementsByName']`,
1107
'message': 'Use <targetWindow>.document.getElementsByName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1108
},
1109
{
1110
'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagName']`,
1111
'message': 'Use <targetWindow>.document.getElementsByTagName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1112
},
1113
{
1114
'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagNameNS']`,
1115
'message': 'Use <targetWindow>.document.getElementsByTagNameNS to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1116
},
1117
{
1118
'selector': `MemberExpression[object.name='document'][property.name='getSelection']`,
1119
'message': 'Use <targetWindow>.document.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1120
},
1121
{
1122
'selector': `MemberExpression[object.name='document'][property.name='open']`,
1123
'message': 'Use <targetWindow>.document.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1124
},
1125
{
1126
'selector': `MemberExpression[object.name='document'][property.name='close']`,
1127
'message': 'Use <targetWindow>.document.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1128
},
1129
{
1130
'selector': `MemberExpression[object.name='document'][property.name='documentElement']`,
1131
'message': 'Use <targetWindow>.document.documentElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1132
},
1133
{
1134
'selector': `MemberExpression[object.name='document'][property.name='visibilityState']`,
1135
'message': 'Use <targetWindow>.document.visibilityState to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1136
},
1137
{
1138
'selector': `MemberExpression[object.name='document'][property.name='querySelector']`,
1139
'message': 'Use <targetWindow>.document.querySelector to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1140
},
1141
{
1142
'selector': `MemberExpression[object.name='document'][property.name='querySelectorAll']`,
1143
'message': 'Use <targetWindow>.document.querySelectorAll to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1144
},
1145
{
1146
'selector': `MemberExpression[object.name='document'][property.name='elementFromPoint']`,
1147
'message': 'Use <targetWindow>.document.elementFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1148
},
1149
{
1150
'selector': `MemberExpression[object.name='document'][property.name='elementsFromPoint']`,
1151
'message': 'Use <targetWindow>.document.elementsFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1152
},
1153
{
1154
'selector': `MemberExpression[object.name='document'][property.name='onkeydown']`,
1155
'message': 'Use <targetWindow>.document.onkeydown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1156
},
1157
{
1158
'selector': `MemberExpression[object.name='document'][property.name='onkeyup']`,
1159
'message': 'Use <targetWindow>.document.onkeyup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1160
},
1161
{
1162
'selector': `MemberExpression[object.name='document'][property.name='onmousedown']`,
1163
'message': 'Use <targetWindow>.document.onmousedown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1164
},
1165
{
1166
'selector': `MemberExpression[object.name='document'][property.name='onmouseup']`,
1167
'message': 'Use <targetWindow>.document.onmouseup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1168
},
1169
{
1170
'selector': `MemberExpression[object.name='document'][property.name='execCommand']`,
1171
'message': 'Use <targetWindow>.document.execCommand to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1172
},
1173
{
1174
'selector': 'CallExpression[callee.property.name=\'querySelector\']',
1175
'message': 'querySelector should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1176
},
1177
{
1178
'selector': 'CallExpression[callee.property.name=\'querySelectorAll\']',
1179
'message': 'querySelectorAll should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1180
},
1181
{
1182
'selector': 'CallExpression[callee.property.name=\'getElementById\']',
1183
'message': 'getElementById should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1184
},
1185
{
1186
'selector': 'CallExpression[callee.property.name=\'getElementsByClassName\']',
1187
'message': 'getElementsByClassName should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1188
},
1189
{
1190
'selector': 'CallExpression[callee.property.name=\'getElementsByTagName\']',
1191
'message': 'getElementsByTagName should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1192
},
1193
{
1194
'selector': 'CallExpression[callee.property.name=\'getElementsByName\']',
1195
'message': 'getElementsByName should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1196
},
1197
{
1198
'selector': 'CallExpression[callee.property.name=\'getElementsByTagNameNS\']',
1199
'message': 'getElementsByTagNameNS should not be used as relying on selectors is very fragile. Use dom.ts h() to build your elements and access them directly.'
1200
}
1201
],
1202
'no-restricted-globals': [
1203
'warn',
1204
'name',
1205
'length',
1206
'event',
1207
'closed',
1208
'external',
1209
'status',
1210
'origin',
1211
'orientation',
1212
'context',
1213
{
1214
'name': 'setInterval',
1215
'message': 'Use <targetWindow>.setInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1216
},
1217
{
1218
'name': 'clearInterval',
1219
'message': 'Use <targetWindow>.clearInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1220
},
1221
{
1222
'name': 'requestAnimationFrame',
1223
'message': 'Use <targetWindow>.requestAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1224
},
1225
{
1226
'name': 'cancelAnimationFrame',
1227
'message': 'Use <targetWindow>.cancelAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1228
},
1229
{
1230
'name': 'requestIdleCallback',
1231
'message': 'Use <targetWindow>.requestIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1232
},
1233
{
1234
'name': 'cancelIdleCallback',
1235
'message': 'Use <targetWindow>.cancelIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1236
},
1237
{
1238
'name': 'window',
1239
'message': 'Use <targetWindow> to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1240
},
1241
{
1242
'name': 'addEventListener',
1243
'message': 'Use <targetWindow>.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1244
},
1245
{
1246
'name': 'removeEventListener',
1247
'message': 'Use <targetWindow>.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1248
},
1249
{
1250
'name': 'getComputedStyle',
1251
'message': 'Use <targetWindow>.getComputedStyle to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1252
},
1253
{
1254
'name': 'focus',
1255
'message': 'Use <targetWindow>.focus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1256
},
1257
{
1258
'name': 'blur',
1259
'message': 'Use <targetWindow>.blur to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1260
},
1261
{
1262
'name': 'close',
1263
'message': 'Use <targetWindow>.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1264
},
1265
{
1266
'name': 'dispatchEvent',
1267
'message': 'Use <targetWindow>.dispatchEvent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1268
},
1269
{
1270
'name': 'getSelection',
1271
'message': 'Use <targetWindow>.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1272
},
1273
{
1274
'name': 'matchMedia',
1275
'message': 'Use <targetWindow>.matchMedia to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1276
},
1277
{
1278
'name': 'open',
1279
'message': 'Use <targetWindow>.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1280
},
1281
{
1282
'name': 'parent',
1283
'message': 'Use <targetWindow>.parent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1284
},
1285
{
1286
'name': 'postMessage',
1287
'message': 'Use <targetWindow>.postMessage to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1288
},
1289
{
1290
'name': 'devicePixelRatio',
1291
'message': 'Use <targetWindow>.devicePixelRatio to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1292
},
1293
{
1294
'name': 'frames',
1295
'message': 'Use <targetWindow>.frames to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1296
},
1297
{
1298
'name': 'frameElement',
1299
'message': 'Use <targetWindow>.frameElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1300
},
1301
{
1302
'name': 'innerHeight',
1303
'message': 'Use <targetWindow>.innerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1304
},
1305
{
1306
'name': 'innerWidth',
1307
'message': 'Use <targetWindow>.innerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1308
},
1309
{
1310
'name': 'outerHeight',
1311
'message': 'Use <targetWindow>.outerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1312
},
1313
{
1314
'name': 'outerWidth',
1315
'message': 'Use <targetWindow>.outerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1316
},
1317
{
1318
'name': 'opener',
1319
'message': 'Use <targetWindow>.opener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1320
},
1321
{
1322
'name': 'origin',
1323
'message': 'Use <targetWindow>.origin to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1324
},
1325
{
1326
'name': 'screen',
1327
'message': 'Use <targetWindow>.screen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1328
},
1329
{
1330
'name': 'screenLeft',
1331
'message': 'Use <targetWindow>.screenLeft to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1332
},
1333
{
1334
'name': 'screenTop',
1335
'message': 'Use <targetWindow>.screenTop to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1336
},
1337
{
1338
'name': 'screenX',
1339
'message': 'Use <targetWindow>.screenX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1340
},
1341
{
1342
'name': 'screenY',
1343
'message': 'Use <targetWindow>.screenY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1344
},
1345
{
1346
'name': 'scrollX',
1347
'message': 'Use <targetWindow>.scrollX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1348
},
1349
{
1350
'name': 'scrollY',
1351
'message': 'Use <targetWindow>.scrollY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1352
},
1353
{
1354
'name': 'top',
1355
'message': 'Use <targetWindow>.top to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1356
},
1357
{
1358
'name': 'visualViewport',
1359
'message': 'Use <targetWindow>.visualViewport to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
1360
}
1361
]
1362
}
1363
},
1364
// electron-utility layer
1365
{
1366
files: [
1367
'src/**/electron-utility/**/*.ts'
1368
],
1369
languageOptions: {
1370
parser: tseslint.parser,
1371
},
1372
rules: {
1373
'no-restricted-imports': [
1374
'warn',
1375
{
1376
'paths': [
1377
{
1378
'name': 'electron',
1379
'allowImportNames': [
1380
'net',
1381
'system-preferences',
1382
],
1383
'message': 'Only net and system-preferences are allowed to be imported from electron'
1384
}
1385
]
1386
}
1387
]
1388
}
1389
},
1390
{
1391
files: [
1392
'src/**/*.ts'
1393
],
1394
languageOptions: {
1395
parser: tseslint.parser,
1396
},
1397
plugins: {
1398
'local': pluginLocal,
1399
},
1400
rules: {
1401
'no-restricted-imports': [
1402
'warn',
1403
{
1404
'patterns': [
1405
{
1406
'group': ['dompurify*'],
1407
'message': 'Use domSanitize instead of dompurify directly'
1408
},
1409
]
1410
}
1411
],
1412
'local/code-import-patterns': [
1413
'warn',
1414
{
1415
// imports that are allowed in all files of layers:
1416
// - browser
1417
// - electron-browser
1418
'when': 'hasBrowser',
1419
'allow': []
1420
},
1421
{
1422
// imports that are allowed in all files of layers:
1423
// - node
1424
// - electron-utility
1425
// - electron-main
1426
'when': 'hasNode',
1427
'allow': [
1428
'@parcel/watcher',
1429
'@vscode/sqlite3',
1430
'@vscode/vscode-languagedetection',
1431
'@vscode/ripgrep',
1432
'@vscode/iconv-lite-umd',
1433
'@vscode/native-watchdog',
1434
'@vscode/policy-watcher',
1435
'@vscode/proxy-agent',
1436
'@vscode/spdlog',
1437
'@vscode/windows-process-tree',
1438
'assert',
1439
'child_process',
1440
'console',
1441
'cookie',
1442
'crypto',
1443
'dns',
1444
'events',
1445
'fs',
1446
'fs/promises',
1447
'http',
1448
'https',
1449
'minimist',
1450
'node:module',
1451
'native-keymap',
1452
'net',
1453
'node-pty',
1454
'os',
1455
// 'path', NOT allowed: use src/vs/base/common/path.ts instead
1456
'perf_hooks',
1457
'readline',
1458
'stream',
1459
'string_decoder',
1460
'tas-client',
1461
'tls',
1462
'undici',
1463
'undici-types',
1464
'url',
1465
'util',
1466
'v8-inspect-profiler',
1467
'vscode-regexpp',
1468
'vscode-textmate',
1469
'worker_threads',
1470
'@xterm/addon-clipboard',
1471
'@xterm/addon-image',
1472
'@xterm/addon-ligatures',
1473
'@xterm/addon-search',
1474
'@xterm/addon-serialize',
1475
'@xterm/addon-unicode11',
1476
'@xterm/addon-webgl',
1477
'@xterm/headless',
1478
'@xterm/xterm',
1479
'yauzl',
1480
'yazl',
1481
'zlib'
1482
]
1483
},
1484
{
1485
// imports that are allowed in all files of layers:
1486
// - electron-utility
1487
// - electron-main
1488
'when': 'hasElectron',
1489
'allow': [
1490
'electron'
1491
]
1492
},
1493
{
1494
// imports that are allowed in all /test/ files
1495
'when': 'test',
1496
'allow': [
1497
'assert',
1498
'sinon',
1499
'sinon-test'
1500
]
1501
},
1502
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1503
// !!! Do not relax these rules !!!
1504
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1505
//
1506
// A path ending in /~ has a special meaning. It indicates a template position
1507
// which will be substituted with one or more layers.
1508
//
1509
// When /~ is used in the target, the rule will be expanded to 14 distinct rules.
1510
// e.g. 'src/vs/base/~' will be expanded to:
1511
// - src/vs/base/common
1512
// - src/vs/base/worker
1513
// - src/vs/base/browser
1514
// - src/vs/base/electron-browser
1515
// - src/vs/base/node
1516
// - src/vs/base/electron-main
1517
// - src/vs/base/test/common
1518
// - src/vs/base/test/worker
1519
// - src/vs/base/test/browser
1520
// - src/vs/base/test/electron-browser
1521
// - src/vs/base/test/node
1522
// - src/vs/base/test/electron-main
1523
//
1524
// When /~ is used in the restrictions, it will be replaced with the correct
1525
// layers that can be used e.g. 'src/vs/base/electron-browser' will be able
1526
// to import '{common,browser,electron-sanbox}', etc.
1527
//
1528
// It is possible to use /~ in the restrictions property even without using it in
1529
// the target property by adding a layer property.
1530
{
1531
'target': 'src/vs/base/~',
1532
'restrictions': [
1533
'vs/base/~'
1534
]
1535
},
1536
{
1537
'target': 'src/vs/base/parts/*/~',
1538
'restrictions': [
1539
'vs/base/~',
1540
'vs/base/parts/*/~'
1541
]
1542
},
1543
{
1544
'target': 'src/vs/platform/*/~',
1545
'restrictions': [
1546
'vs/base/~',
1547
'vs/base/parts/*/~',
1548
'vs/platform/*/~',
1549
'tas-client', // node module allowed even in /common/
1550
'@microsoft/1ds-core-js', // node module allowed even in /common/
1551
'@microsoft/1ds-post-js', // node module allowed even in /common/
1552
'@xterm/headless' // node module allowed even in /common/
1553
]
1554
},
1555
{
1556
'target': 'src/vs/editor/~',
1557
'restrictions': [
1558
'vs/base/~',
1559
'vs/base/parts/*/~',
1560
'vs/platform/*/~',
1561
'vs/editor/~',
1562
'@vscode/tree-sitter-wasm' // node module allowed even in /common/
1563
]
1564
},
1565
{
1566
'target': 'src/vs/editor/contrib/*/~',
1567
'restrictions': [
1568
'vs/base/~',
1569
'vs/base/parts/*/~',
1570
'vs/platform/*/~',
1571
'vs/editor/~',
1572
'vs/editor/contrib/*/~'
1573
]
1574
},
1575
{
1576
'target': 'src/vs/editor/standalone/~',
1577
'restrictions': [
1578
'vs/base/~',
1579
'vs/base/parts/*/~',
1580
'vs/platform/*/~',
1581
'vs/editor/~',
1582
'vs/editor/contrib/*/~',
1583
'vs/editor/standalone/~',
1584
'@vscode/tree-sitter-wasm' // type import
1585
]
1586
},
1587
{
1588
'target': 'src/vs/editor/editor.all.ts',
1589
'layer': 'browser',
1590
'restrictions': [
1591
'vs/base/~',
1592
'vs/base/parts/*/~',
1593
'vs/platform/*/~',
1594
'vs/editor/~',
1595
'vs/editor/contrib/*/~'
1596
]
1597
},
1598
{
1599
'target': 'src/vs/editor/editor.worker.start.ts',
1600
'layer': 'worker',
1601
'restrictions': [
1602
'vs/base/~',
1603
'vs/base/parts/*/~',
1604
'vs/platform/*/~',
1605
'vs/editor/~'
1606
]
1607
},
1608
{
1609
'target': 'src/vs/editor/{editor.api.ts,editor.main.ts}',
1610
'layer': 'browser',
1611
'restrictions': [
1612
'vs/base/~',
1613
'vs/base/parts/*/~',
1614
'vs/editor/~',
1615
'vs/editor/contrib/*/~',
1616
'vs/editor/standalone/~',
1617
'vs/editor/*'
1618
]
1619
},
1620
{
1621
'target': 'src/vs/workbench/~',
1622
'restrictions': [
1623
'vs/base/~',
1624
'vs/base/parts/*/~',
1625
'vs/platform/*/~',
1626
'vs/editor/~',
1627
'vs/editor/contrib/*/~',
1628
'vs/workbench/~',
1629
'vs/workbench/services/*/~',
1630
'assert',
1631
{
1632
'when': 'test',
1633
'pattern': 'vs/workbench/contrib/*/~'
1634
} // TODO@layers
1635
]
1636
},
1637
{
1638
'target': 'src/vs/workbench/api/~',
1639
'restrictions': [
1640
'vscode',
1641
'vs/base/~',
1642
'vs/base/parts/*/~',
1643
'vs/platform/*/~',
1644
'vs/editor/~',
1645
'vs/editor/contrib/*/~',
1646
'vs/workbench/api/~',
1647
'vs/workbench/~',
1648
'vs/workbench/services/*/~',
1649
'vs/workbench/contrib/*/~',
1650
'vs/workbench/contrib/terminalContrib/*/~'
1651
]
1652
},
1653
{
1654
'target': 'src/vs/workbench/services/*/~',
1655
'restrictions': [
1656
'vs/base/~',
1657
'vs/base/parts/*/~',
1658
'vs/platform/*/~',
1659
'vs/editor/~',
1660
'vs/editor/contrib/*/~',
1661
'vs/workbench/~',
1662
'vs/workbench/services/*/~',
1663
{
1664
'when': 'test',
1665
'pattern': 'vs/workbench/contrib/*/~'
1666
}, // TODO@layers
1667
'tas-client', // node module allowed even in /common/
1668
'vscode-textmate', // node module allowed even in /common/
1669
'@vscode/vscode-languagedetection', // node module allowed even in /common/
1670
'@vscode/tree-sitter-wasm', // type import
1671
{
1672
'when': 'hasBrowser',
1673
'pattern': '@xterm/xterm'
1674
} // node module allowed even in /browser/
1675
]
1676
},
1677
{
1678
'target': 'src/vs/workbench/contrib/*/~',
1679
'restrictions': [
1680
'vs/base/~',
1681
'vs/base/parts/*/~',
1682
'vs/platform/*/~',
1683
'vs/editor/~',
1684
'vs/editor/contrib/*/~',
1685
'vs/workbench/~',
1686
'vs/workbench/services/*/~',
1687
'vs/workbench/contrib/*/~',
1688
'vs/workbench/contrib/terminal/terminalContribChatExports*',
1689
'vs/workbench/contrib/terminal/terminalContribExports*',
1690
'vscode-notebook-renderer', // Type only import
1691
'@vscode/tree-sitter-wasm', // type import
1692
{
1693
'when': 'hasBrowser',
1694
'pattern': '@xterm/xterm'
1695
}, // node module allowed even in /browser/
1696
{
1697
'when': 'hasBrowser',
1698
'pattern': '@xterm/addon-*'
1699
}, // node module allowed even in /browser/
1700
{
1701
'when': 'hasBrowser',
1702
'pattern': 'vscode-textmate'
1703
} // node module allowed even in /browser/
1704
]
1705
},
1706
{
1707
'target': 'src/vs/workbench/contrib/terminalContrib/*/~',
1708
'restrictions': [
1709
'vs/base/~',
1710
'vs/base/parts/*/~',
1711
'vs/platform/*/~',
1712
'vs/editor/~',
1713
'vs/editor/contrib/*/~',
1714
'vs/workbench/~',
1715
'vs/workbench/services/*/~',
1716
'vs/workbench/contrib/*/~',
1717
// Only allow terminalContrib to import from itself, this works because
1718
// terminalContrib is one extra folder deep
1719
'vs/workbench/contrib/terminalContrib/*/~',
1720
'vscode-notebook-renderer', // Type only import
1721
'@vscode/tree-sitter-wasm', // type import
1722
{
1723
'when': 'hasBrowser',
1724
'pattern': '@xterm/xterm'
1725
}, // node module allowed even in /browser/
1726
{
1727
'when': 'hasBrowser',
1728
'pattern': '@xterm/addon-*'
1729
}, // node module allowed even in /browser/
1730
{
1731
'when': 'hasBrowser',
1732
'pattern': 'vscode-textmate'
1733
}, // node module allowed even in /browser/
1734
'@xterm/headless' // node module allowed even in /common/ and /browser/
1735
]
1736
},
1737
{
1738
'target': 'src/vs/code/~',
1739
'restrictions': [
1740
'vs/base/~',
1741
'vs/base/parts/*/~',
1742
'vs/platform/*/~',
1743
'vs/editor/~',
1744
'vs/editor/contrib/*/~',
1745
'vs/code/~',
1746
{
1747
'when': 'hasBrowser',
1748
'pattern': 'vs/workbench/workbench.web.main.js'
1749
},
1750
{
1751
'when': 'hasBrowser',
1752
'pattern': 'vs/workbench/workbench.web.main.internal.js'
1753
},
1754
{
1755
'when': 'hasBrowser',
1756
'pattern': 'vs/workbench/~'
1757
},
1758
{
1759
'when': 'hasBrowser',
1760
'pattern': 'vs/workbench/services/*/~'
1761
}
1762
]
1763
},
1764
{
1765
'target': 'src/vs/server/~',
1766
'restrictions': [
1767
'vs/base/~',
1768
'vs/base/parts/*/~',
1769
'vs/platform/*/~',
1770
'vs/workbench/~',
1771
'vs/workbench/api/~',
1772
'vs/workbench/services/*/~',
1773
'vs/workbench/contrib/*/~',
1774
'vs/server/~'
1775
]
1776
},
1777
{
1778
'target': 'src/vs/workbench/contrib/terminal/terminal.all.ts',
1779
'layer': 'browser',
1780
'restrictions': [
1781
'vs/workbench/contrib/**'
1782
]
1783
},
1784
{
1785
'target': 'src/vs/workbench/contrib/terminal/terminalContribChatExports.ts',
1786
'layer': 'browser',
1787
'restrictions': [
1788
'vs/workbench/contrib/terminalContrib/*/~'
1789
]
1790
},
1791
{
1792
'target': 'src/vs/workbench/contrib/terminal/terminalContribExports.ts',
1793
'layer': 'browser',
1794
'restrictions': [
1795
'vs/platform/*/~',
1796
'vs/workbench/contrib/terminalContrib/*/~'
1797
]
1798
},
1799
{
1800
'target': 'src/vs/workbench/workbench.common.main.ts',
1801
'layer': 'browser',
1802
'restrictions': [
1803
'vs/base/~',
1804
'vs/base/parts/*/~',
1805
'vs/platform/*/~',
1806
'vs/editor/~',
1807
'vs/editor/contrib/*/~',
1808
'vs/editor/editor.all.js',
1809
'vs/workbench/~',
1810
'vs/workbench/api/~',
1811
'vs/workbench/services/*/~',
1812
'vs/workbench/contrib/*/~',
1813
'vs/workbench/contrib/terminal/terminal.all.js'
1814
]
1815
},
1816
{
1817
'target': 'src/vs/workbench/workbench.web.main.ts',
1818
'layer': 'browser',
1819
'restrictions': [
1820
'vs/base/~',
1821
'vs/base/parts/*/~',
1822
'vs/platform/*/~',
1823
'vs/editor/~',
1824
'vs/editor/contrib/*/~',
1825
'vs/editor/editor.all.js',
1826
'vs/workbench/~',
1827
'vs/workbench/api/~',
1828
'vs/workbench/services/*/~',
1829
'vs/workbench/contrib/*/~',
1830
'vs/workbench/workbench.common.main.js'
1831
]
1832
},
1833
{
1834
'target': 'src/vs/workbench/workbench.web.main.internal.ts',
1835
'layer': 'browser',
1836
'restrictions': [
1837
'vs/base/~',
1838
'vs/base/parts/*/~',
1839
'vs/platform/*/~',
1840
'vs/editor/~',
1841
'vs/editor/contrib/*/~',
1842
'vs/editor/editor.all.js',
1843
'vs/workbench/~',
1844
'vs/workbench/api/~',
1845
'vs/workbench/services/*/~',
1846
'vs/workbench/contrib/*/~',
1847
'vs/workbench/workbench.web.main.js'
1848
]
1849
},
1850
{
1851
'target': 'src/vs/workbench/workbench.desktop.main.ts',
1852
'layer': 'electron-browser',
1853
'restrictions': [
1854
'vs/base/*/~',
1855
'vs/base/parts/*/~',
1856
'vs/platform/*/~',
1857
'vs/editor/~',
1858
'vs/editor/contrib/*/~',
1859
'vs/editor/editor.all.js',
1860
'vs/workbench/~',
1861
'vs/workbench/api/~',
1862
'vs/workbench/services/*/~',
1863
'vs/workbench/contrib/*/~',
1864
'vs/workbench/workbench.common.main.js'
1865
]
1866
},
1867
{
1868
'target': 'src/vs/amdX.ts',
1869
'restrictions': [
1870
'vs/base/common/*'
1871
]
1872
},
1873
{
1874
'target': 'src/vs/{monaco.d.ts,nls.ts}',
1875
'restrictions': []
1876
},
1877
{
1878
'target': 'src/vscode-dts/**',
1879
'restrictions': []
1880
},
1881
{
1882
'target': 'src/vs/nls.ts',
1883
'restrictions': [
1884
'vs/*'
1885
]
1886
},
1887
{
1888
'target': 'src/{bootstrap-cli.ts,bootstrap-esm.ts,bootstrap-fork.ts,bootstrap-import.ts,bootstrap-meta.ts,bootstrap-node.ts,bootstrap-server.ts,cli.ts,main.ts,server-cli.ts,server-main.ts}',
1889
'restrictions': [
1890
'vs/**/common/*',
1891
'vs/**/node/*',
1892
'vs/nls.js',
1893
'src/*.js',
1894
'*' // node.js
1895
]
1896
}
1897
]
1898
}
1899
},
1900
{
1901
files: [
1902
'test/**/*.ts'
1903
],
1904
languageOptions: {
1905
parser: tseslint.parser,
1906
},
1907
plugins: {
1908
'local': pluginLocal,
1909
},
1910
rules: {
1911
'local/code-import-patterns': [
1912
'warn',
1913
{
1914
'target': 'test/smoke/**',
1915
'restrictions': [
1916
'test/automation',
1917
'test/smoke/**',
1918
'@vscode/*',
1919
'@parcel/*',
1920
'@playwright/*',
1921
'*' // node modules
1922
]
1923
},
1924
{
1925
'target': 'test/sanity/**',
1926
'restrictions': [
1927
'test/sanity/**',
1928
'*' // node modules
1929
]
1930
},
1931
{
1932
'target': 'test/automation/**',
1933
'restrictions': [
1934
'test/automation/**',
1935
'@vscode/*',
1936
'@parcel/*',
1937
'playwright-core/**',
1938
'@playwright/*',
1939
'*' // node modules
1940
]
1941
},
1942
{
1943
'target': 'test/integration/**',
1944
'restrictions': [
1945
'test/integration/**',
1946
'@vscode/*',
1947
'@parcel/*',
1948
'@playwright/*',
1949
'*' // node modules
1950
]
1951
},
1952
{
1953
'target': 'test/monaco/**',
1954
'restrictions': [
1955
'test/monaco/**',
1956
'@vscode/*',
1957
'@parcel/*',
1958
'@playwright/*',
1959
'*' // node modules
1960
]
1961
},
1962
{
1963
'target': 'test/mcp/**',
1964
'restrictions': [
1965
'test/automation',
1966
'test/mcp/**',
1967
'@vscode/*',
1968
'@parcel/*',
1969
'@playwright/*',
1970
'@modelcontextprotocol/sdk/**/*',
1971
'*' // node modules
1972
]
1973
}
1974
]
1975
}
1976
},
1977
{
1978
files: [
1979
'src/vs/workbench/contrib/notebook/browser/view/renderers/*.ts'
1980
],
1981
languageOptions: {
1982
parser: tseslint.parser,
1983
},
1984
plugins: {
1985
'local': pluginLocal,
1986
},
1987
rules: {
1988
'local/code-no-runtime-import': [
1989
'error',
1990
{
1991
'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [
1992
'**/*'
1993
]
1994
}
1995
],
1996
'local/code-limited-top-functions': [
1997
'error',
1998
{
1999
'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [
2000
'webviewPreloads',
2001
'preloadsScriptStr'
2002
]
2003
}
2004
]
2005
}
2006
},
2007
// Terminal
2008
{
2009
files: [
2010
'src/vs/workbench/contrib/terminal/**/*.ts',
2011
'src/vs/workbench/contrib/terminalContrib/**/*.ts',
2012
],
2013
languageOptions: {
2014
parser: tseslint.parser,
2015
},
2016
rules: {
2017
'@typescript-eslint/naming-convention': [
2018
'warn',
2019
// variableLike
2020
{ 'selector': 'variable', 'format': ['camelCase', 'UPPER_CASE', 'PascalCase'] },
2021
{ 'selector': 'variable', 'filter': '^I.+Service$', 'format': ['PascalCase'], 'prefix': ['I'] },
2022
// memberLike
2023
{ 'selector': 'memberLike', 'modifiers': ['private'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },
2024
{ 'selector': 'memberLike', 'modifiers': ['protected'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },
2025
{ 'selector': 'enumMember', 'format': ['PascalCase'] },
2026
// memberLike - Allow enum-like objects to use UPPER_CASE
2027
{ 'selector': 'method', 'modifiers': ['public'], 'format': ['camelCase', 'UPPER_CASE'] },
2028
// typeLike
2029
{ 'selector': 'typeLike', 'format': ['PascalCase'] },
2030
{ 'selector': 'interface', 'format': ['PascalCase'] }
2031
],
2032
'comma-dangle': ['warn', 'only-multiline']
2033
}
2034
},
2035
// markdown-language-features
2036
{
2037
files: [
2038
'extensions/markdown-language-features/**/*.ts',
2039
],
2040
languageOptions: {
2041
parser: tseslint.parser,
2042
},
2043
plugins: {
2044
'@typescript-eslint': tseslint.plugin,
2045
},
2046
rules: {
2047
'@typescript-eslint/naming-convention': [
2048
'warn',
2049
{
2050
'selector': 'default',
2051
'modifiers': ['private'],
2052
'format': null,
2053
'leadingUnderscore': 'require'
2054
},
2055
{
2056
'selector': 'default',
2057
'modifiers': ['public'],
2058
'format': null,
2059
'leadingUnderscore': 'forbid'
2060
}
2061
]
2062
}
2063
},
2064
// Additional extension strictness rules
2065
{
2066
files: [
2067
'extensions/markdown-language-features/**/*.ts',
2068
'extensions/mermaid-chat-features/**/*.ts',
2069
'extensions/media-preview/**/*.ts',
2070
'extensions/simple-browser/**/*.ts',
2071
'extensions/typescript-language-features/**/*.ts',
2072
],
2073
languageOptions: {
2074
parser: tseslint.parser,
2075
parserOptions: {
2076
project: [
2077
// Markdown
2078
'extensions/markdown-language-features/tsconfig.json',
2079
'extensions/markdown-language-features/notebook/tsconfig.json',
2080
'extensions/markdown-language-features/preview-src/tsconfig.json',
2081
2082
// Media preview
2083
'extensions/media-preview/tsconfig.json',
2084
2085
// Media preview
2086
'extensions/simple-browser/tsconfig.json',
2087
'extensions/simple-browser/preview-src/tsconfig.json',
2088
2089
// Mermaid chat features
2090
'extensions/mermaid-chat-features/tsconfig.json',
2091
'extensions/mermaid-chat-features/chat-webview-src/tsconfig.json',
2092
2093
// TypeScript
2094
'extensions/typescript-language-features/tsconfig.json',
2095
'extensions/typescript-language-features/web/tsconfig.json',
2096
],
2097
}
2098
},
2099
plugins: {
2100
'@typescript-eslint': tseslint.plugin,
2101
},
2102
rules: {
2103
'@typescript-eslint/prefer-optional-chain': 'warn',
2104
'@typescript-eslint/prefer-readonly': 'warn',
2105
'@typescript-eslint/consistent-generic-constructors': ['warn', 'constructor'],
2106
}
2107
},
2108
// Allow querySelector/querySelectorAll in test files - it's acceptable for test assertions
2109
{
2110
files: [
2111
'src/**/test/**/*.ts',
2112
'extensions/**/test/**/*.ts',
2113
],
2114
rules: {
2115
'no-restricted-syntax': [
2116
'warn',
2117
// Keep the Intl helper restriction even in tests
2118
{
2119
'selector': `NewExpression[callee.object.name='Intl']`,
2120
'message': 'Use safeIntl helper instead for safe and lazy use of potentially expensive Intl methods.'
2121
},
2122
],
2123
}
2124
},
2125
);
2126
2127