Browse Source

fix(eslint-config): disable unsafe catalog autofixes (#8341)

* fix(eslint-config): disable unsafe catalog autofixes

* test(eslint-config): cover non-mutating catalog lint
pull/8343/head
俞可 · YU KE 1 month ago
committed by GitHub
parent
commit
244254167e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 70
      internal/lint-configs/eslint-config/src/configs/pnpm.test.ts
  2. 2
      internal/lint-configs/eslint-config/src/configs/pnpm.ts

70
internal/lint-configs/eslint-config/src/configs/pnpm.test.ts

@ -0,0 +1,70 @@
import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { ESLint } from 'eslint';
import { describe, expect, it } from 'vitest';
import { jsonc } from './jsonc';
import { pnpm } from './pnpm';
describe('pnpm eslint config', () => {
it('reports invalid catalog entries without applying autofixes', async () => {
const [packageJsonConfig] = await pnpm();
expect(packageJsonConfig?.rules?.['pnpm/json-valid-catalog']).toEqual([
'error',
{ autofix: false },
]);
});
it('does not change an invalid catalog during an ESLint autofix run', async () => {
const fixtureDirectory = await mkdtemp(
join(tmpdir(), 'vben-pnpm-catalog-'),
);
const packageJsonPath = join(fixtureDirectory, 'package.json');
const workspacePath = join(fixtureDirectory, 'pnpm-workspace.yaml');
const packageJson = `${JSON.stringify(
{
name: 'catalog-fixture',
private: true,
dependencies: {
'missing-catalog-package': 'catalog:missing',
},
},
null,
)}\n`;
const workspace = 'packages: []\ncatalog:\n existing-package: ^1.0.0\n';
try {
await writeFile(packageJsonPath, packageJson);
await writeFile(workspacePath, workspace);
const eslint = new ESLint({
cwd: fixtureDirectory,
fix: true,
overrideConfig: [...(await jsonc()), ...(await pnpm())],
overrideConfigFile: true,
});
const [result] = await eslint.lintFiles(['package.json']);
expect(result?.messages).toEqual(
expect.arrayContaining([
expect.objectContaining({
ruleId: 'pnpm/json-valid-catalog',
}),
]),
);
expect(result?.output).toBeUndefined();
// The rule queues workspace writes asynchronously when autofixes are enabled.
await new Promise((resolve) => setTimeout(resolve, 1100));
await expect(readFile(packageJsonPath, 'utf8')).resolves.toBe(
packageJson,
);
await expect(readFile(workspacePath, 'utf8')).resolves.toBe(workspace);
} finally {
await rm(fixtureDirectory, { force: true, recursive: true });
}
});
});

2
internal/lint-configs/eslint-config/src/configs/pnpm.ts

@ -18,7 +18,7 @@ export async function pnpm(): Promise<Linter.Config[]> {
rules: { rules: {
'pnpm/json-enforce-catalog': 'error', 'pnpm/json-enforce-catalog': 'error',
'pnpm/json-prefer-workspace-settings': 'error', 'pnpm/json-prefer-workspace-settings': 'error',
'pnpm/json-valid-catalog': 'error', 'pnpm/json-valid-catalog': ['error', { autofix: false }],
}, },
}, },
{ {

Loading…
Cancel
Save