-
Couldn't load subscription status.
- Fork 0
Add changeset, globals dep, and Node globals to React ESLint preset #208
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
Conversation
🦋 Changeset detectedLatest commit: e8fde55 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
📝 WalkthroughWalkthroughAdds a changeset for a patch release, adds the "globals" dependency to the React ESLint preset package, and updates the React preset to include Node globals via languageOptions.globals. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Dev as Developer
participant CLI as ESLint CLI
participant Loader as Config Loader
participant ReactPreset as React ESLint Preset
participant G as globals (package)
participant Engine as Lint Engine
Dev->>CLI: run eslint
CLI->>Loader: resolve config
Loader->>ReactPreset: load preset
ReactPreset->>G: import node globals
ReactPreset-->>Loader: config with languageOptions.globals (Node)
Loader-->>Engine: finalized config
Engine->>Engine: lint with Node globals recognized
Engine-->>Dev: report results
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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 (2)
packages/eslint-presets/eslint-preset-react/package.json (1)
65-66: Confirm versioning policy for new runtime dep and Renovate alignment.Adding "globals" as a runtime dependency is correct for config-time import. Please confirm:
- Pinning vs caret matches repo policy so Renovate can handle bumps.
- This external dep in a preset (intended as a bundle of internal configs) is acceptable per your preset design principles.
packages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts (1)
21-25: Avoid enabling Node-only globals across all React source — prefer shared browser+node or scope to non-browser files.Enabling only
globals.nodeat the preset root can mask accidental Node-only identifiers in client code. Two safer options:
- Option A (broad, safe): merge browser + node.
languageOptions: { globals: { - ...globals.node, + ...globals.browser, + ...globals.node, }, },
- Option B (strict): keep browser globals at the root, and add a separate config item with
filesglobs for config/test/build scripts that applies Node globals only (I can draft the override if you share your typical file globs).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (3)
.changeset/slick-geese-yawn.md(1 hunks)packages/eslint-presets/eslint-preset-react/package.json(1 hunks)packages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts(2 hunks)
🧰 Additional context used
🧠 Learnings (9)
📓 Common learnings
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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
PR: TheCodeDestroyer/devkit#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
PR: TheCodeDestroyer/devkit#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.
📚 Learning: 2025-05-23T17:49:36.376Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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/slick-geese-yawn.mdpackages/eslint-presets/eslint-preset-react/package.jsonpackages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-23T18:25:39.851Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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/slick-geese-yawn.mdpackages/eslint-presets/eslint-preset-react/package.jsonpackages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-23T19:29:58.142Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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:
packages/eslint-presets/eslint-preset-react/package.json
📚 Learning: 2025-05-23T17:50:17.181Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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:
packages/eslint-presets/eslint-preset-react/package.jsonpackages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-23T19:27:10.314Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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-presets/eslint-preset-react/package.jsonpackages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-23T19:30:46.588Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#5
File: packages/eslint/eslint-config-ts/src/ts.linter.ts:19-19
Timestamp: 2025-05-23T19:30:46.588Z
Learning: In the tcd-devkit codebase, TypeScript ESLint configurations use double type assertion `as unknown as Linter.Config[]` to convert from typescript-eslint's ConfigArray type to standard ESLint Linter.Config[] type for maintaining type consistency across all ESLint configurations.
Applied to files:
packages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-23T19:25:15.891Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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-presets/eslint-preset-react/src/react-preset.linter.ts
📚 Learning: 2025-05-31T20:36:11.700Z
Learnt from: TheCodeDestroyer
PR: TheCodeDestroyer/devkit#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:
packages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts
🔇 Additional comments (2)
.changeset/slick-geese-yawn.md (1)
1-6: Changeset reads well and matches the code changes.Patch note is clear and scoped.
packages/eslint-presets/eslint-preset-react/src/react-preset.linter.ts (1)
4-4: LGTM on importingglobals.Usage matches the ESM default export.
Summary by CodeRabbit
Bug Fixes
Chores