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