[go: nahoru, domu]

blob: 0e5a61344c95e675bdf626402c812069a9d6e357 [file] [log] [blame]
Avi Drissman24976592022-09-12 15:24:311// Copyright 2017 The Chromium Authors
dpapadff82d512017-05-25 18:40:152// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5module.exports = {
6 'root': true,
7 'env': {
8 'browser': true,
dpapada06173092020-10-17 03:06:169 'es2020': true,
Christopher Lama5f2ad02018-12-05 10:05:5810 },
11 'parserOptions': {
dpapada06173092020-10-17 03:06:1612 'ecmaVersion': 2020,
dpapad12b3c472019-05-29 02:16:0513 'sourceType': 'module',
dpapadff82d512017-05-25 18:40:1514 },
15 'rules': {
16 // Enabled checks.
Dan Beam1a0d9dcb2019-01-08 09:05:3517 'brace-style': ['error', '1tbs'],
dpapadf4d855722022-07-19 01:28:1818
19 // https://google.github.io/styleguide/jsguide.html#features-arrays-trailing-comma
20 // https://google.github.io/styleguide/jsguide.html#features-objects-use-trailing-comma
21 'comma-dangle': ['error', 'always-multiline'],
22
Dan Beam1a0d9dcb2019-01-08 09:05:3523 'curly': ['error', 'multi-line', 'consistent'],
dpapadc21c6fb2022-04-01 07:12:1324 'new-parens': 'error',
dpapadb2b0d6c2022-06-27 19:45:1125 'no-array-constructor': 'error',
dpapadc7570be2022-03-28 08:28:2326 'no-console': ['error', {allow: ['info', 'warn', 'error', 'assert']}],
Dan Beamb1536652019-02-26 07:36:2527 'no-extra-boolean-cast': 'error',
dpapadff82d512017-05-25 18:40:1528 'no-extra-semi': 'error',
dpapad728cff02017-06-01 01:06:4229 'no-new-wrappers': 'error',
dpapadd6fe5df2023-04-11 16:55:1330 'no-restricted-imports': ['error', {
31 'paths': [{
32 'name': 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js',
33 'importNames': ['Polymer'],
34 'message': 'Use PolymerElement instead.',
35 },
36 {
37 'name': '//resources/polymer/v3_0/polymer/polymer_bundled.min.js',
38 'importNames': ['Polymer'],
39 'message': 'Use PolymerElement instead.',
40 }],
41 }],
Christopher Lama5f2ad02018-12-05 10:05:5842 'no-restricted-properties': [
43 'error',
44 {
dpapad7b493a42019-06-22 02:07:0945 'property': '__lookupGetter__',
46 'message': 'Use Object.getOwnPropertyDescriptor',
47 },
48 {
49 'property': '__lookupSetter__',
50 'message': 'Use Object.getOwnPropertyDescriptor',
51 },
52 {
53 'property': '__defineGetter__',
54 'message': 'Use Object.defineProperty',
55 },
56 {
57 'property': '__defineSetter__',
58 'message': 'Use Object.defineProperty',
59 },
Dan Beam1aa00a122020-01-16 00:40:4160 {
61 'object': 'cr',
62 'property': 'exportPath',
63 'message': 'Use ES modules or cr.define() instead',
64 },
dpapad2674f9282017-05-31 19:40:3965 ],
dpapadb9eb38f12023-11-06 21:42:0666 'no-restricted-syntax': ['error', {
67 'selector': 'CallExpression[callee.object.name=JSON][callee.property.name=parse] > CallExpression[callee.object.name=JSON][callee.property.name=stringify]',
68 'message': 'Don\'t use JSON.parse(JSON.stringify(...)) to clone objects. Use structuredClone() instead.',
dpapade4b476d2024-01-25 21:56:2169 },
70 {
71 // https://google.github.io/styleguide/tsguide.html#return-type-only-generics
72 'selector': 'TSAsExpression > CallExpression > MemberExpression[property.name=/^querySelector$/]',
73 'message': 'Don\'t use \'querySelector(...) as Type\'. Use the type parameter, \'querySelector<Type>(...)\' instead',
74 },
75 {
76 // https://google.github.io/styleguide/tsguide.html#return-type-only-generics
77 'selector': 'TSAsExpression > CallExpression > MemberExpression[property.name=/^querySelectorAll$/]',
78 'message': 'Don\'t use \'querySelectorAll(...) as Type\'. Use the type parameter, \'querySelectorAll<Type>(...)\' instead',
dpapade5ef86752024-01-31 00:15:1979 },
80 {
81 // Prevent a common misuse of "!" operator.
82 "selector": "TSNonNullExpression > CallExpression > MemberExpression[property.name=/^querySelectorAll$/]",
83 "message": "Remove unnecessary \"!\" non-null operator after querySelectorAll(). It always returns a non-null result",
dpapadb9eb38f12023-11-06 21:42:0684 }],
dpapadbea253c32022-04-01 08:52:5785 'no-throw-literal': 'error',
dpapad2d023f92022-03-29 21:11:2386 'no-trailing-spaces': 'error',
Demetrios Papadopouloscf870bde2019-11-26 19:14:3487 'no-var': 'error',
88 'prefer-const': 'error',
dpapadab656922022-04-01 00:01:1189 'quotes': ['error', 'single', {allowTemplateLiterals: true}],
dpapad1e511b12017-05-31 03:31:2690 'semi': ['error', 'always'],
dpapad2674f9282017-05-31 19:40:3991
dpapadd631d172022-07-20 17:29:0192 // https://google.github.io/styleguide/jsguide.html#features-one-variable-per-declaration
93 'one-var': ['error', {
94 let: 'never',
95 const: 'never',
96 }],
97
dpapadff82d512017-05-25 18:40:1598 // TODO(dpapad): Add more checks according to our styleguide.
99 },
dpapadac97d7b2021-06-14 07:20:26100
101 'overrides': [{
102 'files': ['**/*.ts'],
dpapad1c17e502023-10-04 20:31:12103 'parser': './third_party/node/node_modules/@typescript-eslint/parser/dist/index.js',
dpapadfa76653e2022-02-24 09:08:40104 'plugins': [
105 '@typescript-eslint',
106 ],
107 'rules': {
108 'no-unused-vars': 'off',
109 '@typescript-eslint/no-unused-vars': [
110 'error', {
111 argsIgnorePattern: '^_',
112 varsIgnorePattern: '^_',
113 }
dpapad5df23042022-03-21 19:22:37114 ],
115
dpapad39be89f62023-10-10 20:35:05116 // https://google.github.io/styleguide/tsguide.html#array-constructor
117 // Note: The rule below only partially enforces the styleguide, since it
118 // it does not flag invocations of the constructor with a single
119 // parameter.
120 'no-array-constructor': 'off',
121 '@typescript-eslint/no-array-constructor': 'error',
122
123 // https://google.github.io/styleguide/tsguide.html#automatic-semicolon-insertion
dpapad5df23042022-03-21 19:22:37124 'semi': 'off',
125 '@typescript-eslint/semi': ['error'],
dpapada2eca912022-03-28 09:36:44126
dpapad09279162022-07-07 18:34:06127 // https://google.github.io/styleguide/tsguide.html#arrayt-type
128 '@typescript-eslint/array-type': ['error', {
129 default: 'array-simple',
130 }],
131
dpapadd5332792022-07-11 21:15:14132 // https://google.github.io/styleguide/tsguide.html#type-assertions-syntax
133 '@typescript-eslint/consistent-type-assertions': ['error', {
134 assertionStyle: 'as',
135 }],
136
dpapadb1a935f2022-07-27 16:49:06137 // https://google.github.io/styleguide/tsguide.html#interfaces-vs-type-aliases
dpapaddc88a092023-10-04 00:19:04138 '@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
139
rbpotter38a7f0c2024-02-12 19:01:40140 // https://google.github.io/styleguide/tsguide.html#import-type
141 '@typescript-eslint/consistent-type-imports': 'error',
142
dpapaddc88a092023-10-04 00:19:04143 // https://google.github.io/styleguide/tsguide.html#visibility
144 '@typescript-eslint/explicit-member-accessibility': ['error', {
145 accessibility: 'no-public',
146 overrides: {
147 parameterProperties: 'off',
148 },
149 }],
dpapadb1a935f2022-07-27 16:49:06150
dpapad684f427b2022-05-10 05:47:02151 // https://google.github.io/styleguide/jsguide.html#naming
dpapad50adcde2022-05-07 00:05:52152 '@typescript-eslint/naming-convention': [
153 'error',
154 {
dpapad684f427b2022-05-10 05:47:02155 selector: ['class', 'interface', 'typeAlias', 'enum', 'typeParameter'],
dpapad978c1da2022-10-19 18:12:09156 format: ['StrictPascalCase'],
157 filter: {
158 regex: '^(' +
159 // Exclude TypeScript defined interfaces HTMLElementTagNameMap
160 // and HTMLElementEventMap.
161 'HTMLElementTagNameMap|HTMLElementEventMap|' +
162 // Exclude native DOM types which are always named like HTML<Foo>Element.
163 'HTML[A-Za-z]{0,}Element|' +
164 // Exclude native DOM interfaces.
165 'UIEvent|UIEventInit|DOMError|' +
166 // Exclude the deprecated WebUIListenerBehavior interface.
167 'WebUIListenerBehavior)$',
168 match: false,
169 },
dpapad50adcde2022-05-07 00:05:52170 },
171 {
dpapad50adcde2022-05-07 00:05:52172 selector: 'enumMember',
173 format: ['UPPER_CASE'],
174 },
dpapad684f427b2022-05-10 05:47:02175 {
176 selector: 'classMethod',
dpapade9ae77d2022-12-12 17:02:00177 format: ['strictCamelCase'],
dpapadb7286e82022-06-16 01:33:27178 modifiers: ['public'],
179 },
180 {
181 selector: 'classMethod',
dpapade9ae77d2022-12-12 17:02:00182 format: ['strictCamelCase'],
dpapadb7286e82022-06-16 01:33:27183 modifiers: ['private'],
dpapad684f427b2022-05-10 05:47:02184 trailingUnderscore: 'allow',
dpapadd5da00a92023-05-26 17:58:23185
186 // Disallow the 'Tap_' suffix, in favor of 'Click_' in event handlers.
187 // Note: Unfortunately this ESLint rule does not provide a way to
188 // customize the error message to better inform developers.
189 custom: {
190 regex: '^on[a-zA-Z0-9]+Tap$',
191 match: false,
192 },
dpapad684f427b2022-05-10 05:47:02193 },
194 {
dpapade9d1fa72022-06-09 17:42:50195 selector: 'classProperty',
196 format: ['UPPER_CASE'],
dpapad588bb912022-06-15 05:35:33197 modifiers: ['private', 'static', 'readonly'],
198 },
199 {
200 selector: 'classProperty',
201 format: ['UPPER_CASE'],
202 modifiers: ['public', 'static', 'readonly'],
dpapade9d1fa72022-06-09 17:42:50203 },
204 {
205 selector: 'classProperty',
206 format: ['camelCase'],
dpapad588bb912022-06-15 05:35:33207 modifiers: ['public'],
208 },
209 {
210 selector: 'classProperty',
211 format: ['camelCase'],
212 modifiers: ['private'],
dpapade9d1fa72022-06-09 17:42:50213 trailingUnderscore: 'allow',
214 },
215 {
dpapad684f427b2022-05-10 05:47:02216 selector: 'parameter',
217 format: ['camelCase'],
218 leadingUnderscore: 'allow',
219 },
dpapadb17f3beb2022-05-10 21:34:13220 {
221 selector: 'function',
222 format: ['camelCase'],
223 },
dpapad50adcde2022-05-07 00:05:52224 ],
225
dpapad39be89f62023-10-10 20:35:05226 // https://google.github.io/styleguide/tsguide.html#member-property-declarations
dpapada2eca912022-03-28 09:36:44227 '@typescript-eslint/member-delimiter-style': ['error', {
228 multiline: {
229 delimiter: 'comma',
230 requireLast: true,
231 },
232 singleline: {
233 delimiter: 'comma',
234 requireLast: false,
235 },
236 overrides: {
237 interface: {
238 multiline: {
239 delimiter: 'semi',
240 requireLast: true,
241 },
242 singleline: {
243 delimiter: 'semi',
244 requireLast: false,
245 },
246 },
247 },
dpapadb5aaf1a2022-07-11 18:00:41248 }],
249
250 // https://google.github.io/styleguide/tsguide.html#wrapper-types
251 '@typescript-eslint/ban-types': ['error', {
252 extendDefaults: false,
253 types: {
254 String: {
255 message: 'Use string instead',
256 fixWith: 'string',
257 },
258 Boolean: {
259 message: 'Use boolean instead',
260 fixWith: 'boolean',
261 },
262 Number: {
263 message: 'Use number instead',
264 fixWith: 'number',
265 },
266 Symbol: {
267 message: 'Use symbol instead',
268 fixWith: 'symbol',
269 },
270 BigInt: {
271 message: 'Use bigint instead',
272 fixWith: 'bigint',
273 },
274 }
275 }],
dpapadfa76653e2022-02-24 09:08:40276 }
dpapadac97d7b2021-06-14 07:20:26277 }]
dpapadff82d512017-05-25 18:40:15278};