@git-validator/eslint-config
Version:
A strict eslint config for better code quality.
53 lines (47 loc) • 1.61 kB
text/typescript
import assert from "node:assert";
import fs from "node:fs/promises";
import { describe, it } from "node:test";
import prettier from "prettier";
import jsConfig from "../dist/js-config.js";
import tsConfig from "../dist/ts-config.js";
function count(content: string, substring: string) {
return (content.match(new RegExp(`"${substring}"`, "g")) ?? []).length;
}
await describe("no duplicated", async () => {
await it("no duplicated js rules is defined", async () => {
const configContent = await prettier.format(
(await fs.readFile("./src/js-config.ts", "utf-8")).replace(
"// prettier-ignore",
"",
),
{ parser: "typescript", quoteProps: "consistent" },
);
Object.keys(jsConfig.rules).forEach((rule) => {
assert.strictEqual(count(configContent, rule), 1);
});
});
await it("no duplicated ts rules is defined", async () => {
const configContent = await prettier.format(
(await fs.readFile("./src/ts-config.ts", "utf-8")).replace(
"// prettier-ignore",
"",
),
{ parser: "typescript", quoteProps: "consistent" },
);
tsConfig
.flatMap((c) => Object.keys(c.rules))
.forEach((rule) => {
if (
[
"@typescript-eslint/consistent-type-assertions",
"@typescript-eslint/no-non-null-assertion",
"@typescript-eslint/unbound-method",
].includes(rule)
) {
assert.strictEqual(count(configContent, rule), 2);
} else {
assert.strictEqual(count(configContent, rule) <= 1, true);
}
});
});
});