Skip to content

Commit

Permalink
feat(linter): add convert-to-inferred migration generator (#23142)
Browse files Browse the repository at this point in the history
  • Loading branch information
Coly010 committed May 3, 2024
1 parent 1d2c843 commit acd0993
Show file tree
Hide file tree
Showing 13 changed files with 919 additions and 8 deletions.
8 changes: 8 additions & 0 deletions docs/generated/manifests/menus.json
Original file line number Diff line number Diff line change
Expand Up @@ -7310,6 +7310,14 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "convert-to-inferred",
"path": "/nx-api/eslint/generators/convert-to-inferred",
"name": "convert-to-inferred",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
Expand Down
9 changes: 9 additions & 0 deletions docs/generated/manifests/nx-api.json
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,15 @@
"originalFilePath": "/packages/eslint/src/generators/convert-to-flat-config/schema.json",
"path": "/nx-api/eslint/generators/convert-to-flat-config",
"type": "generator"
},
"/nx-api/eslint/generators/convert-to-inferred": {
"description": "Convert existing ESLint project(s) using `@nx/eslint:lint` executor to use `@nx/eslint/plugin`.",
"file": "generated/packages/eslint/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/eslint/src/generators/convert-to-inferred/schema.json",
"path": "/nx-api/eslint/generators/convert-to-inferred",
"type": "generator"
}
},
"path": "/nx-api/eslint"
Expand Down
9 changes: 9 additions & 0 deletions docs/generated/packages-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -754,6 +754,15 @@
"originalFilePath": "/packages/eslint/src/generators/convert-to-flat-config/schema.json",
"path": "eslint/generators/convert-to-flat-config",
"type": "generator"
},
{
"description": "Convert existing ESLint project(s) using `@nx/eslint:lint` executor to use `@nx/eslint/plugin`.",
"file": "generated/packages/eslint/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/eslint/src/generators/convert-to-inferred/schema.json",
"path": "eslint/generators/convert-to-inferred",
"type": "generator"
}
],
"githubRoot": "https://github.com/nrwl/nx/blob/master",
Expand Down
30 changes: 30 additions & 0 deletions docs/generated/packages/eslint/generators/convert-to-inferred.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "convert-to-inferred",
"factory": "./src/generators/convert-to-inferred/convert-to-inferred",
"schema": {
"$schema": "https://json-schema.org/schema",
"$id": "NxEslintConvertToInferred",
"description": "Convert existing Eslint project(s) using `@nx/eslint:lint` executor to use `@nx/eslint/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"title": "Convert Eslint project from executor to plugin",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The project to convert from using the `@nx/eslint:lint` executor to use `@nx/eslint/plugin`.",
"x-priority": "important"
},
"skipFormat": {
"type": "boolean",
"description": "Whether to format files at the end of the migration.",
"default": false
}
},
"presets": []
},
"description": "Convert existing ESLint project(s) using `@nx/eslint:lint` executor to use `@nx/eslint/plugin`.",
"implementation": "/packages/eslint/src/generators/convert-to-inferred/convert-to-inferred.ts",
"aliases": [],
"hidden": false,
"path": "/packages/eslint/src/generators/convert-to-inferred/schema.json",
"type": "generator"
}
1 change: 1 addition & 0 deletions docs/shared/reference/sitemap.md
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,7 @@
- [workspace-rules-project](/nx-api/eslint/generators/workspace-rules-project)
- [workspace-rule](/nx-api/eslint/generators/workspace-rule)
- [convert-to-flat-config](/nx-api/eslint/generators/convert-to-flat-config)
- [convert-to-inferred](/nx-api/eslint/generators/convert-to-inferred)
- [eslint-plugin](/nx-api/eslint-plugin)
- [documents](/nx-api/eslint-plugin/documents)
- [Overview](/nx-api/eslint-plugin/documents/overview)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ interface Schema {

export async function convertToInferred(tree: Tree, options: Schema) {
const projectGraph = await createProjectGraphAsync();
let migratedProjects = await migrateExecutorToPlugin(
const migratedProjectsModern = await migrateExecutorToPlugin(
tree,
projectGraph,
'@nx/cypress:cypress',
Expand All @@ -35,7 +35,7 @@ export async function convertToInferred(tree: Tree, options: Schema) {
options.project
);

migratedProjects += await migrateExecutorToPlugin(
const migratedProjectsLegacy = await migrateExecutorToPlugin(
tree,
projectGraph,
'@nrwl/cypress:cypress',
Expand All @@ -49,6 +49,9 @@ export async function convertToInferred(tree: Tree, options: Schema) {
options.project
);

const migratedProjects =
migratedProjectsModern.size + migratedProjectsLegacy.size;

if (migratedProjects === 0) {
throw new Error('Could not find any targets to migrate.');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import type { ConfigurationResult } from 'nx/src/project-graph/utils/project-con
type PluginOptionsBuilder<T> = (targetName: string) => T;
type PostTargetTransformer = (
targetConfiguration: TargetConfiguration,
tree?: Tree
tree?: Tree,
projectDetails?: { projectName: string; root: string }
) => TargetConfiguration;
type SkipTargetFilter = (
targetConfiguration: TargetConfiguration
Expand Down Expand Up @@ -129,7 +130,10 @@ class ExecutorToPluginMigrator<T> {
delete projectTarget.executor;

deleteMatchingProperties(projectTarget, createdTarget);
projectTarget = this.#postTargetTransformer(projectTarget, this.tree);
projectTarget = this.#postTargetTransformer(projectTarget, this.tree, {
projectName,
root: projectFromGraph.data.root,
});

if (
projectTarget.options &&
Expand Down Expand Up @@ -308,7 +312,7 @@ export async function migrateExecutorToPlugin<T>(
createNodes: CreateNodes<T>,
specificProjectToMigrate?: string,
skipTargetFilter?: SkipTargetFilter
): Promise<number> {
): Promise<Map<string, Set<string>>> {
const migrator = new ExecutorToPluginMigrator<T>(
tree,
projectGraph,
Expand All @@ -320,6 +324,5 @@ export async function migrateExecutorToPlugin<T>(
specificProjectToMigrate,
skipTargetFilter
);
const migratedProjectsAndTargets = await migrator.run();
return migratedProjectsAndTargets.size;
return await migrator.run();
}
5 changes: 5 additions & 0 deletions packages/eslint/generators.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@
"factory": "./src/generators/convert-to-flat-config/generator",
"schema": "./src/generators/convert-to-flat-config/schema.json",
"description": "Convert an Nx workspace's ESLint configs to use Flat Config."
},
"convert-to-inferred": {
"factory": "./src/generators/convert-to-inferred/convert-to-inferred",
"schema": "./src/generators/convert-to-inferred/schema.json",
"description": "Convert existing ESLint project(s) using `@nx/eslint:lint` executor to use `@nx/eslint/plugin`."
}
}
}

0 comments on commit acd0993

Please sign in to comment.