vscode/.eslintrc.json
Matt Bierner 5b21c7f28b
Run our custom eslint rules using ts-node (#157532)
* Run our custom eslint rules using ts-node

Use `ts-node` to run our custom eslint rules.  This lets us delete the pre-compiled js. It also means you can don't have to compile the rules while editing them

As part of this change, I've also switched us to using an eslint plugin instead of a rulesDir. This is now the preferred way to ship custom rules

* Fix two more disables

* Move ts-node to project root

* Enable transpileOnly
2022-08-29 09:39:09 -07:00

629 lines
15 KiB
JSON

{
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
"plugins": [
"@typescript-eslint",
"jsdoc",
"header",
"@vscode"
],
"rules": {
"constructor-super": "warn",
"curly": "warn",
"eqeqeq": "warn",
"prefer-const": [
"warn",
{
"destructuring": "all"
}
],
"no-buffer-constructor": "warn",
"no-caller": "warn",
"no-case-declarations": "warn",
"no-debugger": "warn",
"no-duplicate-case": "warn",
"no-duplicate-imports": "warn",
"no-eval": "warn",
"no-async-promise-executor": "warn",
"no-extra-semi": "warn",
"no-new-wrappers": "warn",
"no-redeclare": "off",
"no-sparse-arrays": "warn",
"no-throw-literal": "warn",
"no-unsafe-finally": "warn",
"no-unused-labels": "warn",
"no-restricted-globals": [
"warn",
"name",
"length",
"event",
"closed",
"external",
"status",
"origin",
"orientation",
"context"
], // non-complete list of globals that are easy to access unintentionally
"no-var": "warn",
"jsdoc/no-types": "warn",
"semi": "off",
"@typescript-eslint/semi": "warn",
"@typescript-eslint/member-delimiter-style": "warn",
"@typescript-eslint/naming-convention": [
"warn",
{
"selector": "class",
"format": [
"PascalCase"
]
}
],
"@vscode/code-no-unused-expressions": [
"warn",
{
"allowTernary": true
}
],
"@vscode/code-translation-remind": "warn",
"@vscode/code-no-nls-in-standalone-editor": "warn",
"@vscode/code-no-standalone-editor": "warn",
"@vscode/code-no-unexternalized-strings": "warn",
"@vscode/code-layering": [
"warn",
{
"common": [],
"node": [
"common"
],
"browser": [
"common"
],
"electron-sandbox": [
"common",
"browser"
],
"electron-browser": [
"common",
"browser",
"node",
"electron-sandbox"
],
"electron-main": [
"common",
"node"
]
}
],
"header/header": [
2,
"block",
[
"---------------------------------------------------------------------------------------------",
" * Copyright (c) Microsoft Corporation. All rights reserved.",
" * Licensed under the MIT License. See License.txt in the project root for license information.",
" *--------------------------------------------------------------------------------------------"
]
]
},
"overrides": [
{
"files": [
"*.js"
],
"rules": {
"jsdoc/no-types": "off"
}
},
{
"files": [
"**/*.test.ts"
],
"rules": {
"@vscode/code-no-test-only": "error",
"@vscode/code-no-unexternalized-strings": "off"
}
},
{
"files": [
"**/vscode.d.ts",
"**/vscode.proposed.*.d.ts"
],
"rules": {
"@vscode/vscode-dts-create-func": "warn",
"@vscode/vscode-dts-literal-or-types": "warn",
"@vscode/vscode-dts-interface-naming": "warn",
"@vscode/vscode-dts-cancellation": "warn",
"@vscode/vscode-dts-use-thenable": "warn",
"@vscode/vscode-dts-region-comments": "warn",
"@vscode/vscode-dts-vscode-in-comments": "warn",
"@vscode/vscode-dts-provider-naming": [
"warn",
{
"allowed": [
"FileSystemProvider",
"TreeDataProvider",
"TestProvider",
"CustomEditorProvider",
"CustomReadonlyEditorProvider",
"TerminalLinkProvider",
"AuthenticationProvider",
"NotebookContentProvider"
]
}
],
"@vscode/vscode-dts-event-naming": [
"warn",
{
"allowed": [
"onCancellationRequested",
"event"
],
"verbs": [
"accept",
"change",
"close",
"collapse",
"create",
"delete",
"discover",
"dispose",
"drop",
"edit",
"end",
"expand",
"grant",
"hide",
"invalidate",
"open",
"override",
"receive",
"register",
"remove",
"rename",
"save",
"send",
"start",
"terminate",
"trigger",
"unregister",
"write"
]
}
]
}
},
{
"files": [
"src/**/*.ts"
],
"rules": {
"@vscode/code-no-look-behind-regex": "warn",
"@vscode/code-import-patterns": [
"warn",
{
// imports that are allowed in all files of layers:
// - browser
// - electron-sandbox
// - electron-browser
"when": "hasBrowser",
"allow": [
"vs/css!./**/*"
]
},
{
// imports that are allowed in all files of layers:
// - node
// - electron-browser
// - electron-main
"when": "hasNode",
"allow": [
"@parcel/watcher",
"@vscode/sqlite3",
"@vscode/vscode-languagedetection",
"@vscode/ripgrep",
"@vscode/iconv-lite-umd",
"assert",
"child_process",
"console",
"cookie",
"crypto",
"electron",
"events",
"fs",
"graceful-fs",
"http",
"https",
"minimist",
"native-keymap",
"native-watchdog",
"net",
"node-pty",
"os",
"path",
"perf_hooks",
"spdlog",
"stream",
"string_decoder",
"tas-client-umd",
"tls",
"url",
"util",
"v8-inspect-profiler",
"vscode-policy-watcher",
"vscode-proxy-agent",
"vscode-regexpp",
"vscode-textmate",
"windows-process-tree",
"worker_threads",
"xterm",
"xterm-addon-canvas",
"xterm-addon-search",
"xterm-addon-serialize",
"xterm-addon-unicode11",
"xterm-addon-webgl",
"xterm-headless",
"yauzl",
"yazl",
"zlib"
]
},
{
// imports that are allowed in all /test/ files
"when": "test",
"allow": [
"vs/css.build",
"assert",
"sinon",
"sinon-test"
]
},
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!! Do not relax these rules !!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
// A path ending in /~ has a special meaning. It indicates a template position
// which will be substituted with one or more layers.
//
// When /~ is used in the target, the rule will be expanded to 14 distinct rules.
// e.g. "src/vs/base/~" will be expanded to:
// - src/vs/base/common
// - src/vs/base/worker
// - src/vs/base/browser
// - src/vs/base/electron-sandbox
// - src/vs/base/node
// - src/vs/base/electron-browser
// - src/vs/base/electron-main
// - src/vs/base/test/common
// - src/vs/base/test/worker
// - src/vs/base/test/browser
// - src/vs/base/test/electron-sandbox
// - src/vs/base/test/node
// - src/vs/base/test/electron-browser
// - src/vs/base/test/electron-main
//
// When /~ is used in the restrictions, it will be replaced with the correct
// layers that can be used e.g. "src/vs/base/electron-sandbox" will be able
// to import "{common,browser,electron-sanbox}", etc.
//
// It is possible to use /~ in the restrictions property even without using it in
// the target property by adding a layer property.
{
"target": "src/vs/base/~",
"restrictions": [
"vs/base/~"
]
},
{
"target": "src/vs/base/parts/*/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~"
]
},
{
"target": "src/vs/platform/*/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"tas-client-umd", // node module allowed even in /common/
"@microsoft/1ds-core-js",// node module allowed even in /common/
"@microsoft/1ds-post-js" // node module allowed even in /common/
]
},
{
"target": "src/vs/editor/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~"
]
},
{
"target": "src/vs/editor/contrib/*/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~"
]
},
{
"target": "src/vs/editor/standalone/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/editor/standalone/~"
]
},
{
"target": "src/vs/editor/editor.all.ts",
"layer": "browser",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~"
]
},
{
"target": "src/vs/editor/editor.worker.ts",
"layer": "worker",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~"
]
},
{
"target": "src/vs/editor/{editor.api.ts,editor.main.ts}",
"layer": "browser",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/editor/standalone/~",
"vs/editor/*"
]
},
{
"target": "src/vs/workbench/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/workbench/~",
"vs/workbench/services/*/~",
"assert",
{
"when": "test",
"pattern": "vs/workbench/contrib/*/~"
} // TODO@layers
]
},
{
"target": "src/vs/workbench/api/~",
"restrictions": [
"vscode",
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/workbench/api/~",
"vs/workbench/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~"
]
},
{
"target": "src/vs/workbench/services/*/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/workbench/~",
"vs/workbench/services/*/~",
{
"when": "test",
"pattern": "vs/workbench/contrib/*/~"
}, // TODO@layers
"tas-client-umd", // node module allowed even in /common/
"vscode-textmate", // node module allowed even in /common/
"@vscode/vscode-languagedetection" // node module allowed even in /common/
]
},
{
"target": "src/vs/workbench/contrib/*/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/workbench/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~",
"vscode-notebook-renderer", // Type only import
{
"when": "hasBrowser",
"pattern": "xterm"
}, // node module allowed even in /browser/
{
"when": "hasBrowser",
"pattern": "xterm-addon-*"
}, // node module allowed even in /browser/
{
"when": "hasBrowser",
"pattern": "vscode-textmate"
} // node module allowed even in /browser/
]
},
{
"target": "src/vs/code/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/code/~",
{
"when": "hasBrowser",
"pattern": "vs/workbench/workbench.web.main"
}
]
},
{
"target": "src/vs/server/~",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/workbench/~",
"vs/workbench/api/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~",
"vs/server/~"
]
},
{
"target": "src/vs/workbench/workbench.common.main.ts",
"layer": "browser",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/editor/editor.all",
"vs/workbench/~",
"vs/workbench/api/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~"
]
},
{
"target": "src/vs/workbench/workbench.web.main.ts",
"layer": "browser",
"restrictions": [
"vs/base/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/editor/editor.all",
"vs/workbench/~",
"vs/workbench/api/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~",
"vs/workbench/workbench.common.main"
]
},
{
"target": "src/vs/workbench/workbench.desktop.main.ts",
"layer": "electron-sandbox",
"restrictions": [
"vs/base/*/~",
"vs/base/parts/*/~",
"vs/platform/*/~",
"vs/editor/~",
"vs/editor/contrib/*/~",
"vs/editor/editor.all",
"vs/workbench/~",
"vs/workbench/api/~",
"vs/workbench/services/*/~",
"vs/workbench/contrib/*/~",
"vs/workbench/workbench.common.main"
]
},
{
"target": "src/vs/workbench/{workbench.desktop.main.nls.js,workbench.web.main.nls.js}",
"restrictions": []
},
{
"target": "src/vs/{loader.d.ts,css.ts,css.build.ts,monaco.d.ts,nls.ts,nls.build.ts,nls.mock.ts}",
"restrictions": []
},
{
"target": "src/vscode-dts/**",
"restrictions": []
},
{
"target": "src/{bootstrap-amd.js,bootstrap-fork.js,bootstrap-node.js,bootstrap-window.js,bootstrap.js,cli.js,main.js,server-cli.js,server-main.js}",
"restrictions": []
}
]
}
},
{
"files": [
"test/**/*.ts"
],
"rules": {
"@vscode/code-import-patterns": [
"warn",
{
"target": "test/smoke/**",
"restrictions": [
"test/automation",
"test/smoke/**",
"@vscode/*",
"@parcel/*",
"@playwright/*",
"*" // node modules
]
},
{
"target": "test/automation/**",
"restrictions": [
"test/automation/**",
"@vscode/*",
"@parcel/*",
"playwright-core/**",
"@playwright/*",
"*" // node modules
]
},
{
"target": "test/integration/**",
"restrictions": [
"test/integration/**",
"@vscode/*",
"@parcel/*",
"@playwright/*",
"*" // node modules
]
},
{
"target": "test/monaco/**",
"restrictions": [
"test/monaco/**",
"@vscode/*",
"@parcel/*",
"@playwright/*",
"*" // node modules
]
}
]
}
}
]
}