"use strict"; const xpcshellTestConfig = require("eslint-plugin-mozilla/lib/configs/xpcshell-test.js"); const browserTestConfig = require("eslint-plugin-mozilla/lib/configs/browser-test.js"); const mochitestTestConfig = require("eslint-plugin-mozilla/lib/configs/mochitest-test.js"); const chromeTestConfig = require("eslint-plugin-mozilla/lib/configs/chrome-test.js"); /** * Some configurations have overrides, which can't be specified within overrides, * so we need to remove them. */ function removeOverrides(config) { config = {...config}; delete config.overrides; return config; } const xpcshellTestPaths = [ "**/test*/unit*/", "**/test*/xpcshell/", ]; const browserTestPaths = [ "**/test*/**/browser/", ]; const mochitestTestPaths = [ "**/test*/mochitest/", ]; const chromeTestPaths = [ "**/test*/chrome/", ]; module.exports = { // New rules and configurations should generally be added in // tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js to // allow external repositories that use the plugin to pick them up as well. "extends": [ "plugin:mozilla/recommended" ], "plugins": [ "mozilla" ], // The html plugin is enabled via a command line option on eslint. To avoid // bad interactions with the xml preprocessor in eslint-plugin-mozilla, we // turn off processing of the html plugin for .xml files. "settings": { "html/xml-extensions": [ ".xhtml" ] }, "overrides": [{ // eslint-plugin-html handles eol-last slightly different - it applies to // each set of script tags, so we turn it off here. "files": "**/*.*html", "rules": { "eol-last": "off", } }, { // These xbl bindings are assumed to be in the browser-window environment, // we would mark it in the files, but ESLint made this more difficult with // our xml processor, so we list them here. Bug 1397874 & co are working // towards removing these files completely. "files": [ "browser/base/content/tabbrowser.xml", "browser/base/content/urlbarBindings.xml", "browser/components/search/content/search.xml", "browser/components/translation/translation-infobar.xml", "toolkit/components/prompts/content/tabprompts.xml" ], "env": { "mozilla/browser-window": true } }, { // TODO: Bug 1513639. Temporarily turn off reject-importGlobalProperties // due to other ESLint enabling happening in DOM. "files": "dom/**", "rules": { "mozilla/reject-importGlobalProperties": "off", } }, { // TODO: Bug 1515949. Enable no-undef for gfx/ "files": "gfx/layers/apz/test/mochitest/**", "rules": { "no-undef": "off", } }, { // TODO: Bug 1246594. Empty this list once the rule has landed for all dirs "files": [ "toolkit/components/aboutmemory/content/aboutMemory.js", "toolkit/components/captivedetect/test/unit/test_multiple_requests.js", "toolkit/components/cleardata/ServiceWorkerCleanUp.jsm", "toolkit/components/ctypes/**", "toolkit/components/downloads/**", "toolkit/components/places/tests/**", "toolkit/components/processsingleton/MainProcessSingleton.jsm", "toolkit/components/prompts/**", "toolkit/components/search/SearchService.jsm", "toolkit/components/telemetry/app/TelemetryEnvironment.jsm", "toolkit/content/**", "toolkit/modules/**", "toolkit/mozapps/**", "tools/leak-gauge/leak-gauge.html", "xpcom/tests/unit/test_iniParser.js", ], "rules": { "no-throw-literal": "off", } }, { ...removeOverrides(xpcshellTestConfig), "files": xpcshellTestPaths.map(path => `${path}**`), "excludedFiles": "devtools/**" }, { // If it is an xpcshell head file, we turn off global unused variable checks, as it // would require searching the other test files to know if they are used or not. // This would be expensive and slow, and it isn't worth it for head files. // We could get developers to declare as exported, but that doesn't seem worth it. "files": xpcshellTestPaths.map(path => `${path}head*.js`), "rules": { "no-unused-vars": ["error", { "args": "none", "vars": "local", }], }, }, { ...browserTestConfig, "files": browserTestPaths.map(path => `${path}**`), "excludedFiles": "devtools/**" }, { ...removeOverrides(mochitestTestConfig), "files": mochitestTestPaths.map(path => `${path}**`), "excludedFiles": [ "devtools/**", "security/manager/ssl/tests/mochitest/browser/**", "testing/mochitest/**", ], }, { ...removeOverrides(chromeTestConfig), "files": chromeTestPaths.map(path => `${path}**`), "excludedFiles": [ "devtools/**", ], }, { "env": { // Ideally we wouldn't be using the simpletest env here, but our uses of // js files mean we pick up everything from the global scope, which could // be any one of a number of html files. So we just allow the basics... "mozilla/simpletest": true, }, "files": [ ...mochitestTestPaths.map(path => `${path}/**/*.js`), ...chromeTestPaths.map(path => `${path}/**/*.js`), ], }] };