Files
brainwave/scripts/verify-format.mjs
T

56 lines
1.3 KiB
JavaScript

import path from "node:path";
import {
readTextFileIfSmall,
relative,
walkFiles,
} from "./repository-files.mjs";
const checkedExtensions = new Set([
".css",
".html",
".js",
".json",
".kt",
".kts",
".md",
".mjs",
".properties",
".ps1",
".toml",
".xml",
".yaml",
".yml",
]);
const failures = [];
let checked = 0;
for (const file of await walkFiles()) {
if (!checkedExtensions.has(path.extname(file).toLowerCase())) continue;
const content = await readTextFileIfSmall(file);
if (content === null) continue;
checked += 1;
if (content.length > 0 && !content.endsWith("\n")) {
failures.push(`${relative(file)} must end with a newline`);
}
content.split(/\r?\n/u).forEach((line, index) => {
if (/[ \t]+$/u.test(line)) failures.push(`${relative(file)}:${index + 1} has trailing whitespace`);
});
if (file.endsWith(".json")) {
try {
JSON.parse(content);
} catch (error) {
failures.push(`${relative(file)} is invalid JSON: ${error.message}`);
}
}
}
if (failures.length > 0) {
console.error("Formatting verification failed:");
for (const failure of failures) console.error(`- ${failure}`);
process.exitCode = 1;
} else {
console.log(`Formatting verification passed (${checked} text files).`);
}