feat: separate linter category and add ESLint support#74
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a first-class linter project category (single selection) to separate linters from other tooling extras, and adds ESLint 9 flat config support alongside Biome. It updates the CLI flow/flags, template resolution to support stack-suffixed project addon templates, and package.json generation for both single-repo and turborepo outputs.
Changes:
- Add
linterto project metadata/types and wire it through CLI prompts,--linterflag parsing, and the TUI summary output. - Add stack-suffix support for project addon templates and generate per-stack
eslint.config.mjsfiles plus a sharedpackages/eslint-config(turborepo). - Update package.json generation to install/configure Biome/ESLint appropriately across single vs turborepo layouts.
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
apps/cli/src/__meta__.ts |
Adds the new linter category (Biome + ESLint) and moves Biome out of tooling. |
apps/cli/src/types/meta.ts |
Extends MetaProject to include linter. |
apps/cli/src/types/ctx.ts |
Extends ProjectContext to include linter?: string. |
apps/cli/src/lib/handlebars.ts |
Adds has("linter", ...) support for templates. |
apps/cli/src/lib/template-resolver.ts |
Adds stack-suffix project-addon template resolution and linter template collection. |
apps/cli/src/lib/package-json-generator.ts |
Adds linter-aware package.json generation for apps/root/packages. |
apps/cli/src/flags.ts |
Adds --linter flag and validation. |
apps/cli/src/cli.ts |
Wires interactive prompt handling + display output for linter. |
apps/cli/src/tui/summary.ts |
Includes linter in the “recreate command” and summary structure display. |
apps/cli/templates/project/linter/biome/biome.json.hbs |
Updates Biome schema version to match the dependency bump. |
apps/cli/templates/project/linter/eslint/* |
Adds shared ESLint config templates + per-stack eslint.config.mjs templates. |
.claude/CLAUDE.md |
Updates internal documentation to reflect the new linter category and flags. |
docs/plans/2026-02-12-linter-eslint.md |
Adds an implementation plan document for the linter separation + ESLint support work. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Add getPackageManager() to resolve pm version via execSync. Turborepo root and single repo package.json now include the packageManager field. Tighten param type to NonNullable<PackageManager>. Also: update Next.js tsconfig (react-jsx, dev types), delete plan file.
Biome's lint script was overwriting turbo lint in turborepo root. Also scan addon directory once instead of per-app for stack-specific templates.
… root Biome v2 handles monorepos natively from root — lint/format/check scripts should overwrite turbo equivalents since biome doesn't need per-app orchestration like ESLint does.
Replaces hardcoded switch with dynamic ProjectContext lookup so new categories don't require updating the helper.
- Move Biome docs from extras/ to linter/, add `check` script, update schema - Create ESLint docs with stack configs, single/turborepo modes - Split sidebar into LINTERS and EXTRAS sections - Remove project-specific ignores from biome.json template
- Replace old --extras flag with --linter and --tooling - Add TanStack Start to frameworks list - Separate linters from dev tools in features
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
lintercategory with single selectiontoolingtolintercategory (tooling now only has Husky)ESLint architecture
packages/eslint-configpackage with per-stack exports (base,next,react,react-native,server). Per-appeslint.config.mjsfiles use thin imports from the shared package.package.jsoneslint.config.mjs.nextjs.hbs)Changes
MetaProjectandProjectContexttypes: addlinterfieldMETA.project: addlintercategory (biome moved from tooling, eslint added)resolveStackSpecificAddonTemplatesfor stack-suffix project addon templates--linterflag, prompt handling, displayhashelper: addlintercaseTest plan
--linter invalidflag validation: error with available options