simple-icons/scripts/lint.js
Johan Fagerberg 7b69d16efb Add CI step for ensuring alphabetical order of icons (#2334)
* Add a script for the linting that cannot be accomplished by our other linters

Currently this only contains linting for whether our icons are alphabetically sorted

* Add our own linting to Travis

* Fix Let's Encrypt being incorrectly sorted

* Intentionally break sorting to test CI

* Revert "Intentionally break sorting to test CI"

This reverts commit 55e4070b3c3294cff306fcc138ce247843130c35.

* Explain in CONTRIBUTION.md how to sort metadata
2020-01-16 12:40:46 +02:00

44 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
/**
* @fileoverview Lints for the package that can't be implemented in the existing linters (e.g. jsonlint/svglint)
*/
const { icons } = require("../_data/simple-icons.json");
/**
* Contains our tests so they can be isolated from eachother; I don't think each test is worth its own file
* @type {{[k:string]: () => (string|undefined)}}
*/
const TESTS = {
/** Tests whether our icons are in alphabetical order */
alphabetical: function() {
const collector = (invalidEntries, icon, index, array) => {
if (index > 0) {
const prev = array[index - 1];
if (icon.title.localeCompare(prev.title) < 0) {
invalidEntries.push(icon);
}
}
return invalidEntries;
};
const invalids = icons.reduce(collector, []);
if (invalids.length) {
return `Some icons aren't in alphabetical order:
${invalids.map(icon => icon.title).join(", ")}`;
}
}
};
// execute all tests and log potential errors
const errors = Object.keys(TESTS)
.map(k => TESTS[k]())
.filter(Boolean);
if (errors.length) {
errors.forEach(error => {
console.error(`\u001b[31m${error}\u001b[0m`);
});
process.exit(1);
}