eslint-plugin-comment-length
Version:
An ESLint plugin that provides rules that limit the line length of your comments
61 lines (51 loc) • 1.48 kB
text/typescript
import fs from "fs";
import type {
InvalidTestCase,
ValidTestCase,
} from "@typescript-eslint/rule-tester";
import resolve from "enhanced-resolve";
const resolver = resolve.create.sync({
extensions: [".ts", ".tsx", ".js", ".jsx"],
});
export function getCode<TOpts extends readonly unknown[]>(
dirname: string,
name: string,
options: TOpts,
): ValidTestCase<TOpts>;
export function getCode<TIds extends string, TOpts extends readonly unknown[]>(
dirname: string,
name: string,
options: TOpts,
expectedError: TIds,
repeat?: number,
): InvalidTestCase<TIds, TOpts>;
export function getCode<TIds extends string, TOpts extends readonly unknown[]>(
dirname: string,
name: string,
options: TOpts,
expectedError?: TIds,
repeat?: number,
): ValidTestCase<TOpts> | InvalidTestCase<TIds, TOpts> {
const resolvedPath = resolver(dirname, `./${name}`);
if (!resolvedPath) {
throw new Error("getCode(): Unable to resolve path");
}
const base = {
name,
code: fs.readFileSync(resolvedPath, "utf-8"),
filename: resolvedPath,
options: options,
};
if (!expectedError) {
return base;
}
const expectedValuePath = resolver(dirname, `./${name}.expected`);
if (!expectedValuePath) {
throw new Error("getCode(): Unable to resolve expected value path");
}
return {
...base,
errors: new Array(repeat ?? 1).fill({ messageId: expectedError }),
output: fs.readFileSync(expectedValuePath, "utf-8"),
};
}