Skip to content

Commit c4cb96c

Browse files
fix(linter): handle the flat config in workspace rule generators (nrwl#29253)
Closes nrwl#29252 ## Current Behavior See nrwl#29252 ## Expected Behavior See nrwl#29252 ## Related Issue(s) See nrwl#29252 Fixes # See nrwl#29252 --------- Co-authored-by: Miroslav Jonaš <[email protected]>
1 parent 7db44a8 commit c4cb96c

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

packages/eslint/src/generators/workspace-rule/files/__name__.spec.ts__tmpl__

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
1+
<% if (flatConfig) { %>import { RuleTester } from '@typescript-eslint/rule-tester';
2+
import type { RuleTesterConfig } from '@typescript-eslint/rule-tester';
3+
import { rule, RULE_NAME } from './<%= name %>';
4+
5+
const ruleTester = new RuleTester({
6+
languageOptions: {
7+
parser: require('@typescript-eslint/parser'),
8+
},
9+
} as RuleTesterConfig);
10+
<% } else { %>import { TSESLint } from '@typescript-eslint/utils';
211
import { rule, RULE_NAME } from './<%= name %>';
312

413
const ruleTester = new TSESLint.RuleTester({
514
parser: require.resolve('@typescript-eslint/parser'),
615
});
7-
16+
<% } %>
817
ruleTester.run(RULE_NAME, rule, {
918
valid: [`const example = true;`],
1019
invalid: [],

packages/eslint/src/generators/workspace-rule/workspace-rule.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
import {
2+
addDependenciesToPackageJson,
23
applyChangesToString,
34
ChangeType,
45
formatFiles,
56
generateFiles,
7+
GeneratorCallback,
68
joinPathFragments,
79
logger,
810
readNxJson,
11+
runTasksInSerial,
912
Tree,
1013
} from '@nx/devkit';
1114
import { camelize } from '@nx/devkit/src/utils/string-utils';
1215
import { join } from 'path';
1316
import * as ts from 'typescript';
1417
import { workspaceLintPluginDir } from '../../utils/workspace-lint-rules';
1518
import { lintWorkspaceRulesProjectGenerator } from '../workspace-rules-project/workspace-rules-project';
19+
import { useFlatConfig } from '../../utils/flat-config';
20+
import { eslint9__typescriptESLintVersion } from '../../utils/versions';
1621

1722
export interface LintWorkspaceRuleGeneratorOptions {
1823
name: string;
@@ -23,18 +28,31 @@ export async function lintWorkspaceRuleGenerator(
2328
tree: Tree,
2429
options: LintWorkspaceRuleGeneratorOptions
2530
) {
31+
const tasks: GeneratorCallback[] = [];
32+
33+
const flatConfig = useFlatConfig(tree);
34+
2635
const nxJson = readNxJson(tree);
2736
// Ensure that the workspace rules project has been created
28-
const projectGeneratorCallback = await lintWorkspaceRulesProjectGenerator(
29-
tree,
30-
{
37+
tasks.push(
38+
await lintWorkspaceRulesProjectGenerator(tree, {
3139
skipFormat: true,
3240
addPlugin:
3341
process.env.NX_ADD_PLUGINS !== 'false' &&
3442
nxJson.useInferencePlugins !== false,
35-
}
43+
})
3644
);
3745

46+
if (flatConfig) {
47+
tasks.push(
48+
addDependenciesToPackageJson(
49+
tree,
50+
{},
51+
{ '@typescript-eslint/rule-tester': eslint9__typescriptESLintVersion }
52+
)
53+
);
54+
}
55+
3856
const ruleDir = joinPathFragments(
3957
workspaceLintPluginDir,
4058
options.directory ?? ''
@@ -44,6 +62,7 @@ export async function lintWorkspaceRuleGenerator(
4462
generateFiles(tree, join(__dirname, 'files'), ruleDir, {
4563
tmpl: '',
4664
name: options.name,
65+
flatConfig,
4766
});
4867

4968
const nameCamelCase = camelize(options.name);
@@ -119,5 +138,5 @@ export async function lintWorkspaceRuleGenerator(
119138
}
120139
`);
121140

122-
return projectGeneratorCallback;
141+
return runTasksInSerial(...tasks);
123142
}

packages/eslint/src/generators/workspace-rules-project/__snapshots__/workspace-rules-project.spec.ts.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ exports[`@nx/eslint:workspace-rules-project should generate the required files 5
8181
"export default {
8282
displayName: 'eslint-rules',
8383
preset: '../../jest.preset.js',
84+
testEnvironment: 'node',
8485
transform: {
8586
'^.+\\\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
8687
},

packages/eslint/src/generators/workspace-rules-project/workspace-rules-project.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ describe('@nx/eslint:workspace-rules-project', () => {
8080
"export default {
8181
displayName: 'eslint-rules',
8282
preset: '../../jest.preset.js',
83+
testEnvironment: 'node',
8384
transform: {
8485
'^.+\\\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
8586
},
@@ -157,6 +158,7 @@ describe('@nx/eslint:workspace-rules-project', () => {
157158
export default {
158159
displayName: 'eslint-rules',
159160
preset: '../../jest.preset.js',
161+
testEnvironment: 'node',
160162
transform: {
161163
'^.+\\\\.[tj]s$': ['@swc/jest', swcJestConfig],
162164
},

packages/eslint/src/generators/workspace-rules-project/workspace-rules-project.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export async function lintWorkspaceRulesProjectGenerator(
8383
setupFile: 'none',
8484
compiler: isUsingTsSolutionSetup(tree) ? 'swc' : 'tsc',
8585
skipFormat: true,
86+
testEnvironment: 'node',
8687
})
8788
);
8889

0 commit comments

Comments
 (0)