sass/test/toc-check.ts

55 lines
1.3 KiB
TypeScript
Raw Normal View History

import * as colors from 'colors/safe';
import * as diff from 'diff';
import * as fs from 'fs';
import * as toc from '../tool/toc';
if (process.env.CI) colors.enable();
toc.files.forEach(file => {
const markdown = fs.readFileSync(file).toString();
const currentToc = toc.getCurrent(markdown);
if (currentToc === null) return;
const generatedToc = toc.generate(markdown);
if (currentToc === generatedToc) return;
console.error(colors.red(`${file}'s table of contents is incorrect:`));
const patch = diff.structuredPatch(
file,
file,
currentToc,
generatedToc,
'actual',
'expected'
);
console.error(colors.red('--- actual'));
console.error(colors.green('+++ expected'));
for (const hunk of patch.hunks) {
console.error(
`@@ -${hunk.oldStart},-${hunk.oldLines} ` +
`+${hunk.newStart},${hunk.newLines} @@`
);
for (const line of hunk.lines) {
if (line.startsWith('+')) {
console.error(colors.green(line));
} else if (line.startsWith('-')) {
console.error(colors.red(line));
} else {
console.error(colors.grey(line));
}
}
}
console.error();
process.exitCode = 1;
});
if (process.exitCode === 1) {
console.error(
'To fix tables of contents, run ' +
colors.blue('`npx ts-node tool/update-toc.ts`') +
'.'
);
}