collab/mermaid/scripts/jison/lint.mtsblame
View source
6dd74de1/* eslint-disable no-console */
6dd74de2import { readFile } from 'fs/promises';
6dd74de3import { globby } from 'globby';
6dd74de4import { ESLint } from 'eslint';
6dd74de5// @ts-ignore no typings
6dd74de6import jison from 'jison';
6dd74de7
6dd74de8const linter = new ESLint({
6dd74de9 // @ts-expect-error ESLint types are incorrect
6dd74de10 overrideConfigFile: true,
6dd74de11 overrideConfig: { rules: { 'no-console': 'error' } },
6dd74de12});
6dd74de13
6dd74de14const lint = async (file: string): Promise<boolean> => {
6dd74de15 console.log(`Linting ${file}`);
6dd74de16 const jisonCode = await readFile(file, 'utf8');
6dd74de17 // @ts-ignore no typings
6dd74de18 const generator = new jison.Generator(jisonCode, { moduleType: 'amd' });
6dd74de19 const jsCode = generator.generate();
6dd74de20 const [result] = await linter.lintText(jsCode);
6dd74de21 if (result.errorCount > 0) {
6dd74de22 console.error(`Linting failed for ${file}`);
6dd74de23 console.error(result.messages);
6dd74de24 }
6dd74de25 if (generator.conflicts > 0) {
6dd74de26 console.error(`Linting failed for ${file}. Conflicts found in grammar`);
6dd74de27 return false;
6dd74de28 }
6dd74de29 return result.errorCount === 0;
6dd74de30};
6dd74de31
6dd74de32const main = async () => {
6dd74de33 const jisonFiles = await globby(['./packages/**/*.jison', '!./**/node_modules/**'], {
6dd74de34 dot: true,
6dd74de35 });
6dd74de36 const lintResults = await Promise.all(jisonFiles.map(lint));
6dd74de37 if (lintResults.includes(false)) {
6dd74de38 process.exit(1);
6dd74de39 }
6dd74de40};
6dd74de41
6dd74de42void main();