From c542abf3df580708286a3f3270ec39ffd6b2c931 Mon Sep 17 00:00:00 2001 From: Paul Sobolik Date: Fri, 11 Feb 2022 19:58:03 -0500 Subject: [PATCH] Node app to find unimplemented games by language --- 00_Utilities/find-unimplemented.js | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 00_Utilities/find-unimplemented.js diff --git a/00_Utilities/find-unimplemented.js b/00_Utilities/find-unimplemented.js new file mode 100644 index 00000000..41641f52 --- /dev/null +++ b/00_Utilities/find-unimplemented.js @@ -0,0 +1,73 @@ +/** + * Program to show unimplemented games by language, optionally filtered by + * language + * + * Usage: node find-unimplemented.js [[[lang1] lang2] ...] + * + * Adapted from find-missing-implementtion.js + */ + +const fs = require("fs"); +const glob = require("glob"); + +// relative path to the repository root +const ROOT_PATH = "../."; + +let languages = [ + { name: "csharp", extension: "cs" }, + { name: "java", extension: "java" }, + { name: "javascript", extension: "html" }, + { name: "pascal", extension: "pas" }, + { name: "perl", extension: "pl" }, + { name: "python", extension: "py" }, + { name: "ruby", extension: "rb" }, + { name: "vbnet", extension: "vb" }, +]; + +const getFilesRecursive = async (path, extension) => { + return new Promise((resolve, reject) => { + glob(`${path}/**/*.${extension}`, (err, matches) => { + if (err) { + reject(err); + } + resolve(matches); + }); + }); +}; + +const getPuzzleFolders = () => { + return fs + .readdirSync(ROOT_PATH, { withFileTypes: true }) + .filter((dirEntry) => dirEntry.isDirectory()) + .filter( + (dirEntry) => + ![".git", "node_modules", "00_Utilities", "buildJvm"].includes(dirEntry.name) + ) + .map((dirEntry) => dirEntry.name); +}; + +(async () => { + const result = {}; + if (process.argv.length > 2) { + languages = languages.filter((language) => process.argv.slice(2).includes(language.name)); + } + for (const { name: language } of languages) { + result[language] = []; + } + + const puzzleFolders = getPuzzleFolders(); + for (const puzzleFolder of puzzleFolders) { + for (const { name: language, extension } of languages) { + const files = await getFilesRecursive( + `${ROOT_PATH}/${puzzleFolder}/${language}`, extension + ); + if (files.length === 0) { + result[language].push(puzzleFolder); + } + } + } + console.log('Unimplementation by language:') + console.dir(result); +})(); + +return;