{ "root": true, "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 6, "sourceType": "module" }, "plugins": [ "@typescript-eslint", "jsdoc", "header" ], "rules": { "constructor-super": "warn", "curly": "warn", "eqeqeq": "warn", "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" ] } ], "code-no-unused-expressions": [ "warn", { "allowTernary": true } ], "code-translation-remind": "warn", "code-no-nls-in-standalone-editor": "warn", "code-no-standalone-editor": "warn", "code-no-unexternalized-strings": "warn", "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": { "code-no-test-only": "error", "code-no-unexternalized-strings": "off" } }, { "files": [ "**/vscode.d.ts", "**/vscode.proposed.*.d.ts" ], "rules": { "vscode-dts-create-func": "warn", "vscode-dts-literal-or-types": "warn", "vscode-dts-interface-naming": "warn", "vscode-dts-cancellation": "warn", "vscode-dts-use-thenable": "warn", "vscode-dts-region-comments": "warn", "vscode-dts-vscode-in-comments": "warn", "vscode-dts-provider-naming": [ "warn", { "allowed": [ "FileSystemProvider", "TreeDataProvider", "TestProvider", "CustomEditorProvider", "CustomReadonlyEditorProvider", "TerminalLinkProvider", "AuthenticationProvider", "NotebookContentProvider" ] } ], "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": { "code-no-look-behind-regex": "warn", "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": [ "@microsoft/applicationinsights-web", "@parcel/watcher", "@vscode/sqlite3", "@vscode/vscode-languagedetection", "@vscode/ripgrep", "@vscode/iconv-lite-umd", "applicationinsights", "assert", "child_process", "console", "cookie", "crypto", "dns", "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": [ "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/ ] }, { "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/ "@microsoft/applicationinsights-web" // 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.sandbox.main.ts,workbench.desktop.sandbox.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", "vs/workbench/workbench.sandbox.main" ] }, { "target": "src/vs/workbench/workbench.desktop.main.ts", "layer": "electron-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", "vs/workbench/workbench.sandbox.main" ] }, { "target": "src/vs/workbench/{workbench.desktop.main.nls.js,workbench.web.main.nls.js}", "restrictions": [] }, { "target": "src/vs/{css.d.ts,monaco.d.ts,nls.d.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": { "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 ] } ] } } ] }