Skip to content

Conversation

@TheCodeDestroyer
Copy link
Owner

@TheCodeDestroyer TheCodeDestroyer commented Nov 9, 2025

Summary by CodeRabbit

Bug Fixes

  • Fixed an issue with NextJS ESLint configuration handling.

@changeset-bot
Copy link

changeset-bot bot commented Nov 9, 2025

🦋 Changeset detected

Latest commit: 56a9728

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@tcd-devkit/eslint-config-next Patch
@tcd-devkit/eslint-preset-next Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link

coderabbitai bot commented Nov 9, 2025

📝 Walkthrough

Walkthrough

This PR introduces a changeset for a patch release of @tcd-devkit/eslint-config-next and refactors the import pattern in the Next.js ESLint configuration module from named imports to a default import of the plugin object.

Changes

Cohort / File(s) Summary
Changeset Release
.changeset/fuzzy-worlds-stop.md
Adds changeset entry documenting a patch fix for NextJS ESLint config
ESLint Config Import Refactor
packages/eslint/eslint-config-next/src/next.linter.ts
Changes import of configs from named import to default plugin import; updates config access from nextPluginConfigs['core-web-vitals'] to eslintPluginNext.configs['core-web-vitals']

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

  • Simple import pattern refactor with consistent usage update
  • Public API and control flow remain unchanged
  • Straightforward import style conversion

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Title check ⚠️ Warning The title '@coderabbitai' is not a descriptive summary of the pull request changes; it appears to be a mention/tag rather than describing the fix to NextJS ESLint config. Replace the title with a clear summary of the main change, such as 'Fix NextJS ESLint config by updating plugin import pattern' or similar descriptive title.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix-eslint-next-config

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai bot changed the title @coderabbitai Add changeset and refactor Next.js ESLint config imports Nov 9, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.changeset/fuzzy-worlds-stop.md (1)

5-5: Consider a more descriptive changeset message.

The description "Fix an issue with NextJS ESLint config" is quite vague. Consider being more specific about what was fixed, for example: "Fix import pattern for @next/eslint-plugin-next to use default export" or "Correct plugin configuration access method."

This helps users understand what changed and why when reviewing release notes.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5b090e8 and 56a9728.

📒 Files selected for processing (2)
  • .changeset/fuzzy-worlds-stop.md (1 hunks)
  • packages/eslint/eslint-config-next/src/next.linter.ts (1 hunks)
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-next/package.json:68-68
Timestamp: 2025-05-23T19:29:58.142Z
Learning: In packages/eslint/eslint-config-next/package.json, the dependency "next/eslint-plugin-next": "15.4.0-canary.45" is intentionally using a canary version for enhanced types support that isn't available in stable versions yet. The maintainer plans to switch to stable once these features are officially released.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 32
File: eslint.config.mjs:5-10
Timestamp: 2025-05-31T20:36:11.700Z
Learning: The NextJS ESLint plugin (next/eslint-plugin-next) exports a default named plugin that requires importing as a default export and then destructuring the needed configuration (e.g., flatConfig). This pattern triggers the `import-x/no-rename-default` rule, necessitating a global disable of this rule when using NextJS ESLint configurations.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-react/src/react.linter.ts:20-20
Timestamp: 2025-05-23T17:50:17.181Z
Learning: ESLint configuration packages in the tcd-devkit ecosystem are designed to be consumed by external projects, so they may include file patterns and extensions (like mjsx, mtsx) that aren't used in the current monorepo but might be needed by consuming projects.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-react/package.json:80-80
Timestamp: 2025-05-23T18:25:39.851Z
Learning: The tcd-devkit ESLint configuration packages (like eslint-config-react) are built from scratch specifically for ESLint v9+ using the flat config format, not migrated from older ESLint versions.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/internal-utils/package.json:55-55
Timestamp: 2025-05-23T19:27:10.314Z
Learning: Each individual ESLint config package in the tcd-devkit monorepo has its own "imports" field that maps "#*" to their source files, enabling alias imports like #react.linter within their own package scope. The internal-utils package doesn't need an "imports" field when it only contains one source file.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint-presets/eslint-preset-node/src/node-preset.linter.ts:14-20
Timestamp: 2025-05-23T17:49:36.376Z
Learning: The tcd-devkit preset packages (like eslint-preset-node) are designed to be combinations of existing tcd-devkit config packages rather than introducing new external plugins or rules. They serve as "plug n play" bundles for convenience.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/internal-utils/src/test.utils.ts:0-0
Timestamp: 2025-05-23T18:45:38.179Z
Learning: TheCodeDestroyer prefers consistent API design and likes to use unified interface names when functions share similar option patterns, even if some properties aren't used by all functions.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-import-ts/package.json:65-67
Timestamp: 2025-05-23T19:34:31.271Z
Learning: TheCodeDestroyer prefers to use Renovate for automated dependency management rather than manual dependency version updates in package.json files.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 7
File: renovate.json:2-4
Timestamp: 2025-05-25T09:20:16.838Z
Learning: TheCodeDestroyer prefers using local Renovate presets with the "local>" syntax to avoid external fetches, rather than GitHub-based presets.
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: package.json:13-16
Timestamp: 2025-05-23T18:52:37.598Z
Learning: TheCodeDestroyer uses Turbo for all development task orchestration in the monorepo, with proper commands defined in turbo.json rather than npm scripts. They prefer `turbo run` commands over direct npm script execution for development workflows.
📚 Learning: 2025-05-23T18:25:39.851Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-react/package.json:80-80
Timestamp: 2025-05-23T18:25:39.851Z
Learning: The tcd-devkit ESLint configuration packages (like eslint-config-react) are built from scratch specifically for ESLint v9+ using the flat config format, not migrated from older ESLint versions.

Applied to files:

  • .changeset/fuzzy-worlds-stop.md
  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-23T17:50:17.181Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-react/src/react.linter.ts:20-20
Timestamp: 2025-05-23T17:50:17.181Z
Learning: ESLint configuration packages in the tcd-devkit ecosystem are designed to be consumed by external projects, so they may include file patterns and extensions (like mjsx, mtsx) that aren't used in the current monorepo but might be needed by consuming projects.

Applied to files:

  • .changeset/fuzzy-worlds-stop.md
  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-31T20:36:11.700Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 32
File: eslint.config.mjs:5-10
Timestamp: 2025-05-31T20:36:11.700Z
Learning: The NextJS ESLint plugin (next/eslint-plugin-next) exports a default named plugin that requires importing as a default export and then destructuring the needed configuration (e.g., flatConfig). This pattern triggers the `import-x/no-rename-default` rule, necessitating a global disable of this rule when using NextJS ESLint configurations.

Applied to files:

  • .changeset/fuzzy-worlds-stop.md
  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-23T19:29:58.142Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-next/package.json:68-68
Timestamp: 2025-05-23T19:29:58.142Z
Learning: In packages/eslint/eslint-config-next/package.json, the dependency "next/eslint-plugin-next": "15.4.0-canary.45" is intentionally using a canary version for enhanced types support that isn't available in stable versions yet. The maintainer plans to switch to stable once these features are officially released.

Applied to files:

  • .changeset/fuzzy-worlds-stop.md
  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-23T17:49:36.376Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint-presets/eslint-preset-node/src/node-preset.linter.ts:14-20
Timestamp: 2025-05-23T17:49:36.376Z
Learning: The tcd-devkit preset packages (like eslint-preset-node) are designed to be combinations of existing tcd-devkit config packages rather than introducing new external plugins or rules. They serve as "plug n play" bundles for convenience.

Applied to files:

  • .changeset/fuzzy-worlds-stop.md
  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-23T19:27:10.314Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/internal-utils/package.json:55-55
Timestamp: 2025-05-23T19:27:10.314Z
Learning: Each individual ESLint config package in the tcd-devkit monorepo has its own "imports" field that maps "#*" to their source files, enabling alias imports like #react.linter within their own package scope. The internal-utils package doesn't need an "imports" field when it only contains one source file.

Applied to files:

  • packages/eslint/eslint-config-next/src/next.linter.ts
📚 Learning: 2025-05-23T19:25:15.891Z
Learnt from: TheCodeDestroyer
Repo: TheCodeDestroyer/devkit PR: 5
File: packages/eslint/eslint-config-a11y/src/typings/eslint-plugin-jsx-a11y.d.ts:1-14
Timestamp: 2025-05-23T19:25:15.891Z
Learning: In TypeScript module declaration files (.d.ts) using `declare module`, adding explicit import statements for types can cause TypeScript compilation crashes and prevent module declarations from being detected. Types like Linter.Config and Linter.LegacyConfig from ESLint are typically available as ambient types without explicit imports in this context.

Applied to files:

  • packages/eslint/eslint-config-next/src/next.linter.ts
🔇 Additional comments (1)
packages/eslint/eslint-config-next/src/next.linter.ts (1)

1-4: Import pattern is correct and aligns with NextJS ESLint plugin's export structure.

The default import of eslintPluginNext and access via .configs['core-web-vitals'] correctly follows the plugin's export pattern, as confirmed by the actual file content. The dependency is properly declared in package.json.

@TheCodeDestroyer TheCodeDestroyer merged commit 56bd592 into main Nov 9, 2025
3 checks passed
@TheCodeDestroyer TheCodeDestroyer deleted the fix-eslint-next-config branch November 9, 2025 18:40
@github-actions github-actions bot mentioned this pull request Nov 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants