From 1b34793d0e9a85c92315c53b5b5e77343a2636ab Mon Sep 17 00:00:00 2001 From: Houssein Djirdeh Date: Wed, 20 Oct 2021 14:42:05 -0400 Subject: [PATCH] adds temporary eslint v8 error --- packages/next/lib/eslint/runLintCheck.ts | 17 ++++++-- .../invalid-newer-eslint-version/.eslintrc | 4 ++ .../node_modules/eslint/lib/api.js | 1 + .../node_modules/eslint/package.json | 5 +++ .../pages/index.js | 8 ++++ test/integration/eslint/test/index.test.js | 41 ++++++++++++++++--- 6 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 test/integration/eslint/invalid-newer-eslint-version/.eslintrc create mode 100644 test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/lib/api.js create mode 100644 test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/package.json create mode 100644 test/integration/eslint/invalid-newer-eslint-version/pages/index.js diff --git a/packages/next/lib/eslint/runLintCheck.ts b/packages/next/lib/eslint/runLintCheck.ts index 232c3d4f04c6..d85dc184a5d7 100644 --- a/packages/next/lib/eslint/runLintCheck.ts +++ b/packages/next/lib/eslint/runLintCheck.ts @@ -26,7 +26,7 @@ type Config = { } const requiredPackages = [ - { file: 'eslint/lib/api.js', pkg: 'eslint' }, + { file: 'eslint', pkg: 'eslint' }, { file: 'eslint-config-next', pkg: 'eslint-config-next' }, ] @@ -94,8 +94,8 @@ async function lint( lintDuringBuild ? ' in order to run during builds:' : ':' } ${chalk.bold.cyan( (await isYarn(baseDir)) - ? 'yarn add --dev eslint' - : 'npm install --save-dev eslint' + ? 'yarn add --dev eslint@"<8.0.0"' // TODO: Remove @"<8.0.0" when ESLint v8 is supported https://github.com/vercel/next.js/pull/29865 + : 'npm install --save-dev eslint@"<8.0.0"' // TODO: Remove @"<8.0.0" when ESLint v8 is supported https://github.com/vercel/next.js/pull/29865 )}` ) return null @@ -111,7 +111,16 @@ async function lint( 'error' )} - Your project has an older version of ESLint installed${ eslintVersion ? ' (' + eslintVersion + ')' : '' - }. Please upgrade to ESLint version 7 or later` + }. Please upgrade to ESLint version 7` + } else if (semver.gte(eslintVersion, '8.0.0')) { + // TODO: Remove this check when ESLint v8 is supported https://github.com/vercel/next.js/pull/29865 + return `${chalk.red('error')} - ESLint version ${ + eslintVersion ? eslintVersion : '8' + } is not yet supported. Please downgrade to version 7 for the meantime: ${chalk.bold.cyan( + (await isYarn(baseDir)) + ? 'yarn remove eslint && yarn add --dev eslint@"<8.0.0"' + : 'npm uninstall eslint && npm install --save-dev eslint@"<8.0.0"' + )}` } let options: any = { diff --git a/test/integration/eslint/invalid-newer-eslint-version/.eslintrc b/test/integration/eslint/invalid-newer-eslint-version/.eslintrc new file mode 100644 index 000000000000..abd5579b49c1 --- /dev/null +++ b/test/integration/eslint/invalid-newer-eslint-version/.eslintrc @@ -0,0 +1,4 @@ +{ + "extends": "next", + "root": true +} diff --git a/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/lib/api.js b/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/lib/api.js new file mode 100644 index 000000000000..91f7ee938f1b --- /dev/null +++ b/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/lib/api.js @@ -0,0 +1 @@ +module.exports = { ESLint: { version: '8.0.1' } } diff --git a/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/package.json b/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/package.json new file mode 100644 index 000000000000..ee66bf9b0cf0 --- /dev/null +++ b/test/integration/eslint/invalid-newer-eslint-version/node_modules/eslint/package.json @@ -0,0 +1,5 @@ +{ + "name": "eslint", + "main": "./lib/api.js", + "version": "8.0.1" +} diff --git a/test/integration/eslint/invalid-newer-eslint-version/pages/index.js b/test/integration/eslint/invalid-newer-eslint-version/pages/index.js new file mode 100644 index 000000000000..ca1cd577585d --- /dev/null +++ b/test/integration/eslint/invalid-newer-eslint-version/pages/index.js @@ -0,0 +1,8 @@ +const Home = () => ( +
+

Home

+ /* Badly formatted comment */ +
+) + +export default Home diff --git a/test/integration/eslint/test/index.test.js b/test/integration/eslint/test/index.test.js index 715f9f4a9dd5..e9b499ab3d19 100644 --- a/test/integration/eslint/test/index.test.js +++ b/test/integration/eslint/test/index.test.js @@ -21,7 +21,14 @@ const dirPluginCoreWebVitalsConfig = join( const dirIgnoreDuringBuilds = join(__dirname, '../ignore-during-builds') const dirCustomDirectories = join(__dirname, '../custom-directories') const dirConfigInPackageJson = join(__dirname, '../config-in-package-json') -const dirInvalidEslintVersion = join(__dirname, '../invalid-eslint-version') +const dirInvalidOlderEslintVersion = join( + __dirname, + '../invalid-eslint-version' +) +const dirInvalidNewerEslintVersion = join( + __dirname, + '../invalid-newer-eslint-version' +) const dirMaxWarnings = join(__dirname, '../max-warnings') const dirEmptyDirectory = join(__dirname, '../empty-directory') const dirEslintIgnore = join(__dirname, '../eslint-ignore') @@ -92,11 +99,15 @@ describe('ESLint', () => { ) }) - test('invalid eslint version', async () => { - const { stdout, stderr } = await nextBuild(dirInvalidEslintVersion, [], { - stdout: true, - stderr: true, - }) + test('invalid older eslint version', async () => { + const { stdout, stderr } = await nextBuild( + dirInvalidOlderEslintVersion, + [], + { + stdout: true, + stderr: true, + } + ) const output = stdout + stderr expect(output).toContain( @@ -104,6 +115,24 @@ describe('ESLint', () => { ) }) + // TODO: Remove this test when ESLint v8 is supported https://github.com/vercel/next.js/pull/29865 + test('invalid newer eslint version', async () => { + const { stdout, stderr } = await nextBuild( + dirInvalidNewerEslintVersion, + [], + { + stdout: true, + stderr: true, + } + ) + + const output = stdout + stderr + console.log(output) + expect(output).toContain( + 'ESLint version 8.0.1 is not yet supported. Please downgrade to version 7 for the meantime' + ) + }) + test('empty directories do not fail the build', async () => { const { stdout, stderr } = await nextBuild(dirEmptyDirectory, [], { stdout: true,