xref: /aosp_15_r20/external/perfetto/ui/eslint.config.js (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker//
3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker//
7*6dbdd20aSAndroid Build Coastguard Worker//      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker//
9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerconst {FlatCompat} = require('@eslint/eslintrc');
16*6dbdd20aSAndroid Build Coastguard Workerconst fs = require('fs');
17*6dbdd20aSAndroid Build Coastguard Workerconst globals = require('globals');
18*6dbdd20aSAndroid Build Coastguard Workerconst js = require('@eslint/js');
19*6dbdd20aSAndroid Build Coastguard Workerconst jsdoc = require('eslint-plugin-jsdoc');
20*6dbdd20aSAndroid Build Coastguard Workerconst path = require('node:path');
21*6dbdd20aSAndroid Build Coastguard Workerconst tsParser = require('@typescript-eslint/parser');
22*6dbdd20aSAndroid Build Coastguard Workerconst typescriptEslint = require('@typescript-eslint/eslint-plugin');
23*6dbdd20aSAndroid Build Coastguard Worker
24*6dbdd20aSAndroid Build Coastguard Workerconst compat = new FlatCompat({
25*6dbdd20aSAndroid Build Coastguard Worker  baseDirectory: __dirname,
26*6dbdd20aSAndroid Build Coastguard Worker  recommendedConfig: js.configs.recommended,
27*6dbdd20aSAndroid Build Coastguard Worker  allConfig: js.configs.all,
28*6dbdd20aSAndroid Build Coastguard Worker});
29*6dbdd20aSAndroid Build Coastguard Worker
30*6dbdd20aSAndroid Build Coastguard Worker// The eslint-config-google uses deprecated jsdoc options that break with the
31*6dbdd20aSAndroid Build Coastguard Worker// latest version of eslint. This has been fixed upstram [1] but no npm package
32*6dbdd20aSAndroid Build Coastguard Worker// has been released since then. Hence patching the config manually.
33*6dbdd20aSAndroid Build Coastguard Worker// [1] https://github.com/google/eslint-config-google/pull/72.
34*6dbdd20aSAndroid Build Coastguard Workerconst googleCfg = compat.extends('google');
35*6dbdd20aSAndroid Build Coastguard Workerdelete googleCfg[0].rules['valid-jsdoc'];
36*6dbdd20aSAndroid Build Coastguard Workerdelete googleCfg[0].rules['require-jsdoc'];
37*6dbdd20aSAndroid Build Coastguard Worker
38*6dbdd20aSAndroid Build Coastguard Workerconst ignorePath = path.resolve(__dirname, '.prettierignore');
39*6dbdd20aSAndroid Build Coastguard Workerconst ignores = fs
40*6dbdd20aSAndroid Build Coastguard Worker    .readFileSync(ignorePath, {encoding: 'utf8'})
41*6dbdd20aSAndroid Build Coastguard Worker    .split('\n')
42*6dbdd20aSAndroid Build Coastguard Worker    .filter((l) => l !== '' && !l.startsWith('#'));
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard Workermodule.exports = [
45*6dbdd20aSAndroid Build Coastguard Worker  // `ignores` has to go on a standalone block at the start otherwise gets
46*6dbdd20aSAndroid Build Coastguard Worker  // overridden by the googleCfg and jsdoc.configs, because the new eslint
47*6dbdd20aSAndroid Build Coastguard Worker  // flat config is so clever.
48*6dbdd20aSAndroid Build Coastguard Worker  {ignores: ignores},
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker  ...googleCfg,
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard Worker  jsdoc.configs['flat/recommended'],
53*6dbdd20aSAndroid Build Coastguard Worker
54*6dbdd20aSAndroid Build Coastguard Worker  {
55*6dbdd20aSAndroid Build Coastguard Worker    files: ['src/**/*.ts'],
56*6dbdd20aSAndroid Build Coastguard Worker    plugins: {
57*6dbdd20aSAndroid Build Coastguard Worker      '@typescript-eslint': typescriptEslint,
58*6dbdd20aSAndroid Build Coastguard Worker      jsdoc,
59*6dbdd20aSAndroid Build Coastguard Worker    },
60*6dbdd20aSAndroid Build Coastguard Worker
61*6dbdd20aSAndroid Build Coastguard Worker    languageOptions: {
62*6dbdd20aSAndroid Build Coastguard Worker      globals: {
63*6dbdd20aSAndroid Build Coastguard Worker        ...globals.browser,
64*6dbdd20aSAndroid Build Coastguard Worker        ...globals.node,
65*6dbdd20aSAndroid Build Coastguard Worker      },
66*6dbdd20aSAndroid Build Coastguard Worker      ecmaVersion: 'latest',
67*6dbdd20aSAndroid Build Coastguard Worker      sourceType: 'module',
68*6dbdd20aSAndroid Build Coastguard Worker      parser: tsParser,
69*6dbdd20aSAndroid Build Coastguard Worker      parserOptions: {
70*6dbdd20aSAndroid Build Coastguard Worker        project: './tsconfig.json',
71*6dbdd20aSAndroid Build Coastguard Worker      },
72*6dbdd20aSAndroid Build Coastguard Worker    },
73*6dbdd20aSAndroid Build Coastguard Worker
74*6dbdd20aSAndroid Build Coastguard Worker    rules: {
75*6dbdd20aSAndroid Build Coastguard Worker      'indent': 'off',
76*6dbdd20aSAndroid Build Coastguard Worker      'max-len': 'off',
77*6dbdd20aSAndroid Build Coastguard Worker      'operator-linebreak': 'off',
78*6dbdd20aSAndroid Build Coastguard Worker      'quotes': 'off',
79*6dbdd20aSAndroid Build Coastguard Worker      'brace-style': 'off',
80*6dbdd20aSAndroid Build Coastguard Worker      'space-before-function-paren': 'off',
81*6dbdd20aSAndroid Build Coastguard Worker      'generator-star-spacing': 'off',
82*6dbdd20aSAndroid Build Coastguard Worker      'semi-spacing': 'off',
83*6dbdd20aSAndroid Build Coastguard Worker
84*6dbdd20aSAndroid Build Coastguard Worker      'no-multi-spaces': [
85*6dbdd20aSAndroid Build Coastguard Worker        'error',
86*6dbdd20aSAndroid Build Coastguard Worker        {
87*6dbdd20aSAndroid Build Coastguard Worker          ignoreEOLComments: true,
88*6dbdd20aSAndroid Build Coastguard Worker        },
89*6dbdd20aSAndroid Build Coastguard Worker      ],
90*6dbdd20aSAndroid Build Coastguard Worker
91*6dbdd20aSAndroid Build Coastguard Worker      'no-unused-vars': 'off',
92*6dbdd20aSAndroid Build Coastguard Worker
93*6dbdd20aSAndroid Build Coastguard Worker      '@typescript-eslint/no-unused-vars': [
94*6dbdd20aSAndroid Build Coastguard Worker        'error',
95*6dbdd20aSAndroid Build Coastguard Worker        {
96*6dbdd20aSAndroid Build Coastguard Worker          argsIgnorePattern: '^_.*',
97*6dbdd20aSAndroid Build Coastguard Worker          varsIgnorePattern: '^_.*',
98*6dbdd20aSAndroid Build Coastguard Worker        },
99*6dbdd20aSAndroid Build Coastguard Worker      ],
100*6dbdd20aSAndroid Build Coastguard Worker
101*6dbdd20aSAndroid Build Coastguard Worker      'no-array-constructor': 'off',
102*6dbdd20aSAndroid Build Coastguard Worker      '@typescript-eslint/no-array-constructor': ['error'],
103*6dbdd20aSAndroid Build Coastguard Worker      'prefer-rest-params': 'off',
104*6dbdd20aSAndroid Build Coastguard Worker
105*6dbdd20aSAndroid Build Coastguard Worker      'new-cap': [
106*6dbdd20aSAndroid Build Coastguard Worker        'error',
107*6dbdd20aSAndroid Build Coastguard Worker        {
108*6dbdd20aSAndroid Build Coastguard Worker          capIsNew: false,
109*6dbdd20aSAndroid Build Coastguard Worker          properties: false,
110*6dbdd20aSAndroid Build Coastguard Worker        },
111*6dbdd20aSAndroid Build Coastguard Worker      ],
112*6dbdd20aSAndroid Build Coastguard Worker
113*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/require-jsdoc': 'off',
114*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/require-param': 'off',
115*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/require-param-type': 'off',
116*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/require-returns': 'off',
117*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/require-returns-type': 'off',
118*6dbdd20aSAndroid Build Coastguard Worker      'jsdoc/tag-lines': 'off',
119*6dbdd20aSAndroid Build Coastguard Worker
120*6dbdd20aSAndroid Build Coastguard Worker      '@typescript-eslint/no-explicit-any': 'error',
121*6dbdd20aSAndroid Build Coastguard Worker
122*6dbdd20aSAndroid Build Coastguard Worker      '@typescript-eslint/strict-boolean-expressions': [
123*6dbdd20aSAndroid Build Coastguard Worker        'error',
124*6dbdd20aSAndroid Build Coastguard Worker        {
125*6dbdd20aSAndroid Build Coastguard Worker          allowNullableBoolean: true,
126*6dbdd20aSAndroid Build Coastguard Worker          allowNullableObject: true,
127*6dbdd20aSAndroid Build Coastguard Worker          allowNullableString: true,
128*6dbdd20aSAndroid Build Coastguard Worker        },
129*6dbdd20aSAndroid Build Coastguard Worker      ],
130*6dbdd20aSAndroid Build Coastguard Worker    },
131*6dbdd20aSAndroid Build Coastguard Worker  },
132*6dbdd20aSAndroid Build Coastguard Worker];
133