Skip to content

Commit

Permalink
fix(linter): ensure config manipulations are run only if config is su…
Browse files Browse the repository at this point in the history
…pported (#19035)
  • Loading branch information
meeroslav authored Sep 7, 2023
1 parent f994f54 commit aa22362
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 14 deletions.
21 changes: 12 additions & 9 deletions packages/js/src/generators/library/library.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions packages/linter/src/generators/utils/eslint-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
}
Expand Down Expand Up @@ -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)) {
Expand All @@ -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;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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,
Expand Down

0 comments on commit aa22362

Please sign in to comment.