fix(linter): ensure config manipulations are run only if config is supported (#19035)

This commit is contained in:
Miroslav Jonaš 2023-09-07 13:17:22 +02:00 committed by GitHub
parent f994f54c52
commit aa223621f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 14 deletions

View File

@ -267,18 +267,21 @@ export async function addLint(
// nx-ignore-next-line
} = require('@nx/linter/src/generators/utils/eslint-file');
// if config is not supported, we don't need to do anything
if (!isEslintConfigSupported(tree)) {
return task;
}
// Also update the root ESLint config. The lintProjectGenerator will not generate it for root projects.
// But we need to set the package.json checks.
if (options.rootProject) {
if (isEslintConfigSupported(tree)) {
addOverrideToLintConfig(tree, '', {
files: ['*.json'],
parser: 'jsonc-eslint-parser',
rules: {
'@nx/dependency-checks': 'error',
},
});
}
addOverrideToLintConfig(tree, '', {
files: ['*.json'],
parser: 'jsonc-eslint-parser',
rules: {
'@nx/dependency-checks': 'error',
},
});
}
// If project lints package.json with @nx/dependency-checks, then add ignore files for

View File

@ -55,7 +55,7 @@ export function findEslintFile(tree: Tree, projectRoot = ''): string | null {
export function isEslintConfigSupported(tree: Tree, projectRoot = ''): boolean {
const eslintFile = findEslintFile(tree, projectRoot);
if (!eslintFile) {
return;
return false;
}
return eslintFile.endsWith('.json') || eslintFile.endsWith('.config.js');
}
@ -233,6 +233,9 @@ export function lintConfigHasOverride(
lookup: (override: Linter.ConfigOverride<Linter.RulesRecord>) => boolean,
checkBaseConfig = false
): boolean {
if (!isEslintConfigSupported(tree, root)) {
return false;
}
const isBase =
checkBaseConfig && findEslintFile(tree, root).includes('.base');
if (useFlatConfig(tree)) {
@ -248,9 +251,7 @@ export function lintConfigHasOverride(
isBase ? baseEsLintConfigFile : '.eslintrc.json'
);
return tree.exists(fileName)
? readJson(tree, fileName).overrides?.some(lookup) || false
: false;
return readJson(tree, fileName).overrides?.some(lookup) || false;
}
}

View File

@ -8,6 +8,7 @@ describe('update-16-8-0-add-ignored-files migration', () => {
beforeEach(() => {
tree = createTreeWithEmptyWorkspace();
tree.write('.eslintrc.json', '{}');
});
it('should run successfully when eslint config is not present', async () => {

View File

@ -2,6 +2,7 @@ import { getProjects, Tree } from '@nx/devkit';
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
import {
findEslintFile,
isEslintConfigSupported,
lintConfigHasOverride,
updateOverrideInLintConfig,
} from '../../generators/utils/eslint-file';
@ -16,7 +17,12 @@ export default function update(tree: Tree) {
const addIgnorePattern =
(ignorePattern: string) => (_options: unknown, projectName: string) => {
const project = projects.get(projectName);
if (!findEslintFile(tree, project.root)) return;
if (
!findEslintFile(tree, project.root) ||
!isEslintConfigSupported(tree)
) {
return;
}
if (
lintConfigHasOverride(
tree,