HowToCook/.github/manual_lint.js
2022-03-21 03:26:23 +08:00

76 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const util = require("util");
const glob = util.promisify(require('glob'));
const fs = require("fs").promises;
const path = require('path');
async function main() {
var errors = [];
var directories = await glob(__dirname + '../../dishes/**/*.md');
for (var filePath of directories) {
var data = await fs.readFile(filePath, 'utf8');
var filename = path.parse(filePath).base.replace(".md","");
dataLines = data.split('\n').map(t => t.trim());
titles = dataLines.filter(t => t.startsWith('#'));
secondTitles = titles.filter(t => t.startsWith('## '));
if (dataLines.filter(line => line.includes('勺')).length >
dataLines.filter(line => line.includes('勺子')).length +
dataLines.filter(line => line.includes('炒勺')).length +
dataLines.filter(line => line.includes('漏勺')).length +
dataLines.filter(line => line.includes('吧勺')).length) {
errors.push(`文件 ${filePath} 不符合仓库的规范!勺 不是一个精准的单位!`);
}
if (dataLines.filter(line => line.includes('适量')).length > 0) {
errors.push(`文件 ${filePath} 不符合仓库的规范!适量 不是一个精准的描述!请给出克 g 或毫升 ml。`);
}
if (dataLines.filter(line => line.includes('min')).length > 0) {
errors.push(`文件 ${filePath} 不符合仓库的规范min 这个词汇有多重含义。建议改成中文"分钟"。`);
}
if (dataLines.filter(line => line.includes('左右')).length > 0) {
errors.push(`文件 ${filePath} 不符合仓库的规范!左右 不是一个能够明确定量的标准! 如果是在描述一个模糊物体的特征,请使用 '大约'。例如大约1kg`);
}
if (dataLines.filter(line => line.includes('你')).length > 0) {
errors.push(`文件 ${filePath} 不符合仓库的规范!请不要出现人称代词。`);
}
if (titles[0].trim() != "# " + filename + "的做法") {
errors.push(`文件 ${filePath} 不符合仓库的规范!它的大标题应该是: ${"# " + filename + "的做法"}! 而它现在是 ${titles[0].trim()}!`);
continue;
}
if (secondTitles.length != 4) {
errors.push(`文件 ${filePath} 不符合仓库的规范!它并不是四个标题的格式。请参考示例菜模板!`);
continue;
}
if (secondTitles[0].trim() != "## 必备原料和工具") {
errors.push(`文件 ${filePath} 不符合仓库的规范!第一个标题不是 必备原料和工具!`);
}
if (secondTitles[1].trim() != "## 计算") {
errors.push(`文件 ${filePath} 不符合仓库的规范!第二个标题不是 计算!`);
}
if (secondTitles[2].trim() != "## 操作") {
errors.push(`文件 ${filePath} 不符合仓库的规范!第三个标题不是 操作`);
}
if (secondTitles[3].trim() != "## 附加内容") {
errors.push(`文件 ${filePath} 不符合仓库的规范!第四个标题不是 附加内容`);
}
var mustHave = '如果您遵循本指南的制作流程而发现有问题或可以改进的流程,请提出 Issue 或 Pull request 。';
var mustHaveIndex = dataLines.indexOf(mustHave);
if (mustHaveIndex < 0) {
errors.push(`文件 ${filePath} 不符合仓库的规范! 它没有包含必需的附加内容!`);
}
}
if (errors.length > 0) {
for (var error of errors) {
console.error(error + "\n");
}
var message = `Found ${errors.length} errors! Please fix!`;
throw new Error(message);
}
}
main();