diff --git a/.eslintrc.js b/.eslintrc.js index 1fc00bbd78..37125d1535 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -33,6 +33,7 @@ module.exports = { // Disabled checks '@typescript-eslint/no-explicit-any': 0, '@typescript-eslint/no-use-before-define': 0, + '@typescript-eslint/no-unused-vars': 0, // Required checks 'indent': ['error', 2], @@ -46,5 +47,12 @@ module.exports = { 'allowHigherOrderFunctions': true } ], - } + '@typescript-eslint/no-unused-vars-experimental': 2, + }, + // Required by the @typescript-eslint/no-unused-vars-experimental rule. + // We use a separate tsconfig file for linting to reduce the time complexity of the operation. + // See github.com/typescript-eslint/typescript-eslint/issues/1320 + parserOptions: { + project: './tsconfig.eslint.json', + }, }; diff --git a/src/database.d.ts b/src/database.d.ts index 3046e25f21..40ca71ea73 100644 --- a/src/database.d.ts +++ b/src/database.d.ts @@ -1631,11 +1631,9 @@ export namespace admin.database { */ interface ThenableReference extends admin.database.Reference, Promise { } - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ function enableLogging(logger?: boolean | ((message: string) => any), persistent?: boolean): any; } -/* eslint-disable @typescript-eslint/no-unused-vars */ export namespace admin.database.ServerValue { /** diff --git a/src/instance-id.d.ts b/src/instance-id.d.ts index 616d0d193e..34269be5b0 100644 --- a/src/instance-id.d.ts +++ b/src/instance-id.d.ts @@ -1,6 +1,5 @@ import * as _admin from './index.d'; -/* eslint-disable-next-line @typescript-eslint/no-unused-vars */ export namespace admin.instanceId { /** * Gets the {@link InstanceId `InstanceId`} service for the diff --git a/src/machine-learning/machine-learning.ts b/src/machine-learning/machine-learning.ts index 9d2330aa92..3b09d07c23 100644 --- a/src/machine-learning/machine-learning.ts +++ b/src/machine-learning/machine-learning.ts @@ -285,8 +285,7 @@ export class Model { return false; } - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - public waitForUnlocked(maxTimeSeconds?: number): Promise { + public waitForUnlocked(_maxTimeSeconds?: number): Promise { // Backend does not currently return locked models. // This will likely change in future. return Promise.resolve(); diff --git a/src/remote-config.d.ts b/src/remote-config.d.ts index c3897a2dd2..2da1d28336 100644 --- a/src/remote-config.d.ts +++ b/src/remote-config.d.ts @@ -1,6 +1,5 @@ import * as _admin from './index.d'; -/* eslint-disable-next-line @typescript-eslint/no-unused-vars */ export namespace admin.remoteConfig { /** diff --git a/test/integration/database.spec.ts b/test/integration/database.spec.ts index e8d0a746a4..708c3a153a 100644 --- a/test/integration/database.spec.ts +++ b/test/integration/database.spec.ts @@ -173,8 +173,6 @@ describe('admin.database', () => { // Check for type compilation. This method is not invoked by any tests. But it // will trigger a TS compilation failure if the RTDB typings were not loaded // correctly. (Marked as export to avoid compilation warning.) -// -// eslint-disable-next-line @typescript-eslint/no-unused-vars export function addValueEventListener( db: admin.database.Database, callback: (s: admin.database.DataSnapshot | null) => any): void { diff --git a/test/resources/mocks.ts b/test/resources/mocks.ts index cb2be41a8f..28884b30d2 100644 --- a/test/resources/mocks.ts +++ b/test/resources/mocks.ts @@ -221,7 +221,7 @@ export function generateSessionCookie(overrides?: object, expiresIn?: number): s export function firebaseServiceFactory( firebaseApp: FirebaseApp, - extendApp?: (props: object) => void, // eslint-disable-line @typescript-eslint/no-unused-vars + _extendApp?: (props: object) => void, ): FirebaseServiceInterface { const result = { app: firebaseApp, diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000000..fdb5ad2719 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,12 @@ +// Used for @typescript-eslint/no-unused-vars-experimental to glob the entire +// source. An alternative is createDefaultProgram: true but it has exponential +// complexity. See: github.com/typescript-eslint/typescript-eslint/issues/967 +{ + "compilerOptions": { + "strict": true, + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts", + ], +}