Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: replace deprecated/removed functions in eslint-plugin-next #64251

Merged
merged 3 commits into from
May 6, 2024

Conversation

z0n
Copy link
Contributor

@z0n z0n commented Apr 9, 2024

Hi everyone, this is my first PR to such a large project so please be gentle. 😄 I'm also new to publishing packages so I'm not sure if I'm missing any steps.

ESLint 9.0.0 came out a few days ago and unfortunately, eslint-plugin-next is not compatible as it uses deprecated (and with ESLint 9.0.0 removed) functions.
In this PR, I replaced the deprecated functions with the suggested replacements (check this out).

Regarding backwards compatibility, everything I used is available since ESLint 8.40 (released May 2023). I'm not sure how far back Next.js support goes but it feels fine to me.

I successfully tested some rules locally with ESLint 9.0.0 and this eslint.config.js (flat config format):

import js from '@eslint/js';
import nextPlugin from '@next/eslint-plugin-next';
import prettierRecommended from 'eslint-plugin-prettier/recommended';
import importSortPlugin from 'eslint-plugin-simple-import-sort';
import globals from 'globals';
import tseslint from 'typescript-eslint';

/**
 * TypeScript config with strict type checking and no type checking for JS files.
 */
const typeScriptConfig = [
  ...tseslint.configs.strictTypeChecked,
  {
    plugins: {
      '@typescript-eslint': tseslint.plugin,
    },
    languageOptions: {
      parser: tseslint.parser,
      parserOptions: {
        project: true,
      },
    },
  },
  {
    // disable type-aware linting on JS files
    files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
    ...tseslint.configs.disableTypeChecked,
  },
];

/**
 * Next.js config with recommended and core web vitals rules.
 */
const nextConfig = {
  plugins: {
    '@next/next': nextPlugin,
  },
  rules: {
    ...nextPlugin.configs.recommended.rules,
    ...nextPlugin.configs['core-web-vitals'].rules,
  },
};

/**
 * Import sort config with simple-import-sort plugin.
 */
const importSortConfig = {
  plugins: {
    'simple-import-sort': importSortPlugin,
  },
  rules: {
    'simple-import-sort/imports': 'error',
    'simple-import-sort/exports': 'error',
  },
};

/**
 * The final ESLint config wrapped with the tseslint.config helper for type hinting.
 */
export default tseslint.config(
  {
    ignores: ['.next', '.yarn', '**/*.d.ts', 'node_modules'],
  },
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
      },
    },
  },
  js.configs.recommended,
  ...typeScriptConfig,
  nextConfig,
  prettierRecommended,
  importSortConfig,
);

It has a few more configs but I'm sure you can remove most of them. The important one is the nextConfig. Also important: Run eslint and not next lint, it's currently not compatible with the new flat config format.

Related discussion: #54238

@ijjk ijjk added Font (next/font) Related to Next.js Font Optimization. type: next labels Apr 9, 2024
@z0n z0n changed the title feat: replace deprecated/removed functions in eslint-plugin-next fix: replace deprecated/removed functions in eslint-plugin-next Apr 9, 2024
Copy link

socket-security bot commented Apr 9, 2024

Removed dependencies detected. Learn more about Socket for GitHub ↗︎

View full report↗︎

@r34son
Copy link
Contributor

r34son commented Apr 10, 2024

@z0n Hi! Here is another migration guide https://eslint.org/docs/latest/extend/plugin-migration-flat-config
Looks like you're missing a bunch of things to migrate to v9

@z0n
Copy link
Contributor Author

z0n commented Apr 12, 2024

@r34son This was meant as a first step, I know there's a few more things to do. This will make the eslint-plugin-next work for now. This PR doesn't include the whole flat config migration 🙂

@henrikvtcodes
Copy link

Is there any progress on this so far? If work still needs to be done I could jump on it.

@z0n
Copy link
Contributor Author

z0n commented Apr 25, 2024

@henrikvtcodes I'm still available but I need some feedback here. 😕

For full ESLint 9 support we also need the stuff @r34son mentioned but I didn't feel confident enough to update the whole plugin system. 😄

This PR makes eslint-plugin-next work with ESLint 9 though so I think it can stand on its own.

@z0n z0n force-pushed the feat/eslint-plugin-next-9-support branch from 31f5d9b to 599b7d1 Compare April 26, 2024 14:05
@ijjk
Copy link
Member

ijjk commented Apr 26, 2024

Allow CI Workflow Run

  • approve CI run for commit: 599b7d1

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

@ijjk
Copy link
Member

ijjk commented May 3, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
buildDuration 22.5s 19.7s N/A
buildDurationCached 11.1s 9.5s N/A
nodeModulesSize 360 MB 360 MB
nextStartRea..uration (ms) 497ms 493ms N/A
Client Bundles (main, webpack)
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
1103-HASH.js gzip 31.9 kB 31.9 kB N/A
1a9f679d-HASH.js gzip 53.5 kB 53.5 kB N/A
335-HASH.js gzip 5.05 kB 5.05 kB
7953.HASH.js gzip 169 B 169 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 230 B 228 B N/A
main-HASH.js gzip 31.6 kB 31.6 kB N/A
webpack-HASH.js gzip 1.65 kB 1.65 kB N/A
Overall change 50.4 kB 50.4 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
_app-HASH.js gzip 192 B 193 B N/A
_error-HASH.js gzip 192 B 193 B N/A
amp-HASH.js gzip 507 B 511 B N/A
css-HASH.js gzip 341 B 343 B N/A
dynamic-HASH.js gzip 2.52 kB 2.52 kB
edge-ssr-HASH.js gzip 266 B 265 B N/A
head-HASH.js gzip 362 B 365 B N/A
hooks-HASH.js gzip 392 B 392 B
image-HASH.js gzip 4.27 kB 4.27 kB
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.69 kB 2.7 kB N/A
routerDirect..HASH.js gzip 329 B 328 B N/A
script-HASH.js gzip 397 B 397 B
withRouter-HASH.js gzip 324 B 324 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
index.html gzip 528 B 529 B N/A
link.html gzip 541 B 540 B N/A
withRouter.html gzip 524 B 523 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
edge-ssr.js gzip 94.8 kB 94.8 kB N/A
page.js gzip 182 kB 182 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
middleware-b..fest.js gzip 621 B 625 B N/A
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 25.7 kB 25.7 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 995 B 995 B
Next Runtimes
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
app-page-exp...dev.js gzip 171 kB 171 kB
app-page-exp..prod.js gzip 98.8 kB 98.8 kB
app-page-tur..prod.js gzip 100 kB 100 kB
app-page-tur..prod.js gzip 94.6 kB 94.6 kB
app-page.run...dev.js gzip 157 kB 157 kB
app-page.run..prod.js gzip 93.3 kB 93.3 kB
app-route-ex...dev.js gzip 21.5 kB 21.5 kB
app-route-ex..prod.js gzip 15.3 kB 15.3 kB
app-route-tu..prod.js gzip 15.3 kB 15.3 kB
app-route-tu..prod.js gzip 15 kB 15 kB
app-route.ru...dev.js gzip 21.3 kB 21.3 kB
app-route.ru..prod.js gzip 15 kB 15 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 21.5 kB 21.5 kB
pages.runtim...dev.js gzip 22.1 kB 22.1 kB
pages.runtim..prod.js gzip 21.5 kB 21.5 kB
server.runti..prod.js gzip 51.7 kB 51.7 kB
Overall change 964 kB 964 kB
build cache Overall increase ⚠️
vercel/next.js canary z0n/next.js feat/eslint-plugin-next-9-support Change
0.pack gzip 1.62 MB 1.62 MB ⚠️ +3.3 kB
index.pack gzip 113 kB 114 kB ⚠️ +1.18 kB
Overall change 1.73 MB 1.74 MB ⚠️ +4.47 kB
Diff details
Diff for edge-ssr.js

Diff too large to display

Commit: 3eddbc1

@ijjk ijjk merged commit d8e8666 into vercel:canary May 6, 2024
75 checks passed
@zemd zemd mentioned this pull request May 12, 2024
26 tasks
@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 21, 2024
@z0n z0n deleted the feat/eslint-plugin-next-9-support branch November 5, 2024 15:46
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Font (next/font) Related to Next.js Font Optimization. locked type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants