prettylint
Version:
Run Prettier as a linter
43 lines (42 loc) • 1.73 kB
JavaScript
// modified from https://github.com/prettier/prettier/blob/3.0.0/src/cli/format.js
import fs from "node:fs/promises";
import { format } from "prettier";
import { createIsIgnoredFunction } from "./ignore.js";
import { expandPatterns } from "./expand-patterns.js";
import { getOptionsForFile } from "./get-options-for-file.js";
async function createIsIgnoredFromContextOrDie(context) {
return await createIsIgnoredFunction(context.argv.ignorePath, context.argv.withNodeModules);
}
export async function* formatFiles(context) {
// This will be used to filter file paths after the glob is checked,
// before any files are actually written
const isIgnored = await createIsIgnoredFromContextOrDie(context);
for await (const pathOrError of expandPatterns(context)) {
if (typeof pathOrError === "object") {
throw new Error(pathOrError.error);
}
const filename = pathOrError;
let input = "";
try {
const isFileIgnored = isIgnored(filename);
if (isFileIgnored) {
continue;
}
const options = {
...(await getOptionsForFile(context, filename)),
filepath: filename,
};
input = await fs.readFile(filename, "utf8");
const output = await format(input, options);
const isDifferent = output !== input;
if (!isDifferent || !context.argv.write) {
yield { type: "success", filename, input, output };
continue;
}
await fs.writeFile(filename, output);
}
catch (error) {
yield { type: "failure", filename, input, error };
}
}
}