Add linting
parent
34aedce094
commit
5aac3fe9f9
@ -0,0 +1,61 @@
|
||||
import { readFile, readdir, stat } from "fs/promises";
|
||||
import * as path from "path";
|
||||
import * as marked from "marked";
|
||||
|
||||
const files = await readdir(".", { withFileTypes: true });
|
||||
const dirs = files.filter(
|
||||
(f) => f.isDirectory() && !f.name.startsWith(".") && f.name !== "node_modules"
|
||||
);
|
||||
|
||||
let badExit = false
|
||||
|
||||
// Ensures that each README has the proper format.
|
||||
// Exits with 0 if all is good!
|
||||
for (const dir of dirs) {
|
||||
const readme = path.join(dir.name, "README.md");
|
||||
// Ensure exists
|
||||
try {
|
||||
await stat(readme);
|
||||
} catch (ex) {
|
||||
throw new Error(`Missing README.md in ${dir.name}`);
|
||||
}
|
||||
const content = await readFile(readme, "utf8");
|
||||
const tokens = marked.lexer(content);
|
||||
// Ensure there is an h1 and some text, then a code block
|
||||
|
||||
let h1 = false;
|
||||
let code = false;
|
||||
let paragraph = false;
|
||||
|
||||
for (const token of tokens) {
|
||||
if (token.type === "heading" && token.depth === 1) {
|
||||
h1 = true;
|
||||
continue;
|
||||
}
|
||||
if (h1 && token.type === "heading") {
|
||||
break;
|
||||
}
|
||||
if (token.type === "paragraph") {
|
||||
paragraph = true;
|
||||
continue;
|
||||
}
|
||||
if (token.type === "code") {
|
||||
code = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!h1) {
|
||||
console.error(dir.name, "missing h1")
|
||||
}
|
||||
if (!paragraph) {
|
||||
console.error(dir.name, "missing paragraph after h1")
|
||||
}
|
||||
if (!code) {
|
||||
console.error(dir.name, "missing example code block after paragraph")
|
||||
}
|
||||
badExit = true
|
||||
}
|
||||
|
||||
if (badExit) {
|
||||
process.exit(1)
|
||||
}
|
Loading…
Reference in New Issue