Bug 1808234 - Clean up xpcshell variant scheduling. r=jmaher
[gecko.git] / devtools / .eslintrc.js
blob16c4c3bc71ab55adf9c4056126863fdc7636a0a5
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 module.exports = {
8   plugins: ["react"],
9   globals: {
10     exports: true,
11     isWorker: true,
12     loader: true,
13     module: true,
14     require: true,
15     DebuggerNotificationObserver: true,
16   },
17   overrides: [
18     {
19       files: ["client/framework/**"],
20       rules: {
21         "no-return-assign": "off",
22       },
23     },
24     {
25       files: [
26         // Allow non-camelcase so that run_test doesn't produce a warning.
27         "**/test*/**/*",
28       ],
29       rules: {
30         camelcase: "off",
31       },
32     },
33     {
34       files: ["client/framework/**"],
35       rules: {
36         "max-nested-callbacks": "off",
37       },
38     },
39     {
40       files: ["client/framework/**", "shared/webconsole/test/chrome/*.html"],
41       rules: {
42         "mozilla/no-aArgs": "off",
43       },
44     },
45     {
46       files: ["client/framework/test/**"],
47       rules: {
48         "mozilla/var-only-at-top-level": "off",
49       },
50     },
51     {
52       files: ["client/framework/**"],
53       rules: {
54         "no-shadow": "off",
55       },
56     },
57     {
58       files: ["client/framework/**"],
59       rules: {
60         strict: "off",
61       },
62     },
63     {
64       // For all head*.js files, turn off no-unused-vars at a global level
65       files: ["**/head*.js"],
66       rules: {
67         "no-unused-vars": ["error", { args: "none", vars: "local" }],
68       },
69     },
70     {
71       // For all server and shared files, prevent requiring devtools/client
72       // modules.
73       files: ["server/**", "shared/**"],
74       rules: {
75         "mozilla/reject-some-requires": [
76           "error",
77           "^(resource://)?devtools/client",
78         ],
79       },
80       excludedFiles: [
81         // Tests can always import anything.
82         "**/test*/**/*",
83       ],
84     },
85     {
86       // Cu, Cc etc... are not available in most devtools modules loaded by require.
87       files: ["**"],
88       excludedFiles: [
89         // Enable the rule on JSM, test head files and some specific files.
90         "**/*.jsm",
91         "**/*.sjs",
92         "**/test/**/head.js",
93         "**/test/**/shared-head.js",
94         "client/debugger/test/mochitest/code_frame-script.js",
95         "client/responsive.html/browser/content.js",
96         "server/startup/content-process.js",
97         "server/startup/frame.js",
98         "shared/loader/base-loader.js",
99         "shared/loader/browser-loader.js",
100         "shared/loader/worker-loader.js",
101         "startup/aboutdebugging-registration.js",
102         "startup/aboutdevtoolstoolbox-registration.js",
103         "startup/devtools-startup.js",
104       ],
105       rules: {
106         "mozilla/no-define-cc-etc": "off",
107       },
108     },
109     {
110       // All DevTools files should avoid relative paths.
111       files: ["**"],
112       excludedFiles: [
113         // Debugger modules have a custom bundling logic which relies on relative
114         // paths.
115         "client/debugger/src/**",
116         // `client/shared/build` contains node helpers to build the debugger and
117         // not devtools modules.
118         "client/shared/build/**",
119       ],
120       rules: {
121         "mozilla/reject-relative-requires": "error",
122       },
123     },
124     {
125       // These tests use old React. We should accept deprecated API usages
126       files: [
127         "client/inspector/markup/test/doc_markup_events_react_development_15.4.1.html",
128         "client/inspector/markup/test/doc_markup_events_react_development_15.4.1_jsx.html",
129         "client/inspector/markup/test/doc_markup_events_react_production_15.3.1.html",
130         "client/inspector/markup/test/doc_markup_events_react_production_15.3.1_jsx.html",
131       ],
132       rules: {
133         "react/no-deprecated": "off",
134       },
135     },
136   ],
137   rules: {
138     // These are the rules that have been configured so far to match the
139     // devtools coding style.
141     // Rules from the mozilla plugin
142     "mozilla/balanced-observers": "error",
143     "mozilla/no-aArgs": "error",
144     // See bug 1224289.
145     "mozilla/reject-importGlobalProperties": ["error", "everything"],
146     "mozilla/var-only-at-top-level": "error",
148     // Rules from the React plugin
149     "react/display-name": "error",
150     "react/no-danger": "error",
151     "react/no-deprecated": "error",
152     "react/no-did-mount-set-state": "error",
153     "react/no-did-update-set-state": "error",
154     "react/no-direct-mutation-state": "error",
155     "react/no-unknown-property": "error",
156     "react/prefer-es6-class": ["off", "always"],
157     "react/prop-types": "error",
158     "react/sort-comp": [
159       "error",
160       {
161         order: ["static-methods", "lifecycle", "everything-else", "render"],
162         groups: {
163           lifecycle: [
164             "displayName",
165             "propTypes",
166             "contextTypes",
167             "childContextTypes",
168             "mixins",
169             "statics",
170             "defaultProps",
171             "constructor",
172             "getDefaultProps",
173             "getInitialState",
174             "state",
175             "getChildContext",
176             "UNSAFE_componentWillMount",
177             "componentDidMount",
178             "UNSAFE_componentWillReceiveProps",
179             "shouldComponentUpdate",
180             "UNSAFE_componentWillUpdate",
181             "componentDidUpdate",
182             "componentWillUnmount",
183           ],
184         },
185       },
186     ],
188     // Disallow using variables outside the blocks they are defined (especially
189     // since only let and const are used, see "no-var").
190     "block-scoped-var": "error",
191     // Require camel case names
192     camelcase: ["error", { properties: "never" }],
193     // Warn about cyclomatic complexity in functions.
194     // 20 is ESLint's default, and we want to keep it this way to prevent new highly
195     // complex functions from being introduced. However, because Mozilla's eslintrc has
196     // some other value defined, we need to override it here. See bug 1553449 for more
197     // information on complex DevTools functions that are currently excluded.
198     complexity: ["error", 20],
199     // componentDidUnmount is not a real lifecycle method, use componentWillUnmount.
200     "id-denylist": ["error", "componentDidUnmount"],
201     // Maximum depth callbacks can be nested.
202     "max-nested-callbacks": ["error", 3],
203     // Require a capital letter for constructors, only check if all new
204     // operators are followed by a capital letter. Don't warn when capitalized
205     // functions are used without the new operator.
206     "new-cap": ["error", { capIsNew: false }],
207     // Disallow empty statements. This will report an error for:
208     // try { something(); } catch (e) {}
209     // but will not report it for:
210     // try { something(); } catch (e) { /* Silencing the error because ...*/ }
211     // which is a valid use case.
212     "no-empty": "error",
213     // Disallow adding to native types
214     "no-extend-native": "error",
215     // Disallow fallthrough of case statements, except if there is a comment.
216     "no-fallthrough": "error",
217     // Disallow use of multiline strings (use template strings instead).
218     "no-multi-str": "error",
219     // Disallow usage of __proto__ property.
220     "no-proto": "error",
221     // Prevent using some properties
222     "no-restricted-properties": [
223       "error",
224       {
225         property: "setupInParent",
226         message: "avoid child/parent communication with setupInParent",
227       },
228     ],
229     // Disallow use of assignment in return statement. It is preferable for a
230     // single line of code to have only one easily predictable effect.
231     "no-return-assign": "error",
232     // Warn about declaration of variables already declared in the outer scope.
233     // This isn't an error because it sometimes is useful to use the same name
234     // in a small helper function rather than having to come up with another
235     // random name.
236     // Still, making this a warning can help people avoid being confused.
237     "no-shadow": "error",
238     // Disallow global and local variables that aren't used, but allow unused
239     // function arguments.
240     "no-unused-vars": ["error", { args: "none", vars: "all" }],
241     // Enforce using `let` only when variables are reassigned.
242     "prefer-const": ["error", { destructuring: "all" }],
243     // Require use of the second argument for parseInt().
244     radix: "error",
245     // Require "use strict" to be defined globally in the script.
246     strict: ["error", "global"],
247     // Disallow Yoda conditions (where literal value comes first).
248     yoda: "error",
250     // And these are the rules that haven't been discussed so far, and that are
251     // disabled for now until we introduce them, one at a time.
253     // disallow overwriting functions written as function declarations
254     "no-func-assign": "off",
255     // disallow unnecessary nested blocks
256     "no-lone-blocks": "off",
257     // disallow unnecessary concatenation of literals or template literals
258     "no-useless-concat": "off",
259     // This rule will match any function starting with `use` which aren't
260     // necessarily in a React component. Also DevTools aren't using React hooks
261     // so this sounds unecessary.
262     "react-hooks/rules-of-hooks": "off",
263   },
264   settings: {
265     react: {
266       version: "16.8",
267     },
268   },