mirror of
https://github.com/jgthms/bulma
synced 2026-03-15 10:14:29 -07:00
87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
module.exports = plugin;
|
|
|
|
const utils = require('./utils');
|
|
const fs = require('fs');
|
|
const regexAssign = /--[a-z-]*:/g;
|
|
const regexUsage = /var\(--[a-z-]*(\, \#|\))/g;
|
|
const LOG_EVERYTHING = false;
|
|
|
|
function logThis(message) {
|
|
if (LOG_EVERYTHING) {
|
|
console.log(message);
|
|
}
|
|
}
|
|
|
|
function plugin() {
|
|
return (files, metalsmith, done) => {
|
|
setImmediate(done);
|
|
|
|
let hasErrors = false;
|
|
|
|
const cssvars = fs.readFileSync(`../sass/themes/default.sass`, "utf8");
|
|
let defaultAssignments = cssvars.match(regexAssign);
|
|
defaultAssignments = defaultAssignments.map(assignment => assignment.replace(':', ''));
|
|
|
|
Object.keys(files).forEach(filePath => {
|
|
const {fileName, lines} = utils.getLines(files, filePath);
|
|
const file = files[filePath];
|
|
const contents = file.contents.toString();
|
|
const assignments = contents.match(regexAssign);
|
|
let fileAssignments = [];
|
|
let allAssignments = [];
|
|
let errorCount = 0;
|
|
|
|
if (assignments) {
|
|
// --foobar: ==> --foobar
|
|
fileAssignments = assignments.map(assignment => assignment.replace(':', ''));
|
|
allAssignments = [...defaultAssignments, ...fileAssignments];
|
|
} else {
|
|
logThis(`${filePath} has no CSS var assignments`);
|
|
allAssignments = [...defaultAssignments];
|
|
}
|
|
|
|
let usages = contents.match(regexUsage);
|
|
|
|
if (!usages) {
|
|
logThis(`${filePath} has no CSS var usages`);
|
|
return;
|
|
}
|
|
|
|
// var(--foobar) ==> --foobar
|
|
usages = usages.map(usage => {
|
|
usage = usage.replace('var(', '');
|
|
usage = usage.replace(')', '');
|
|
usage = usage.replace(', #', '');
|
|
return usage;
|
|
});
|
|
|
|
usages.forEach(usage => {
|
|
if (!allAssignments.includes(usage)) {
|
|
console.log(`${usage} is not assigned`);
|
|
errorCount++;
|
|
}
|
|
});
|
|
|
|
fileAssignments.forEach(assignment => {
|
|
if (!usages.includes(assignment)) {
|
|
console.log(`${assignment} is not used`);
|
|
errorCount++;
|
|
}
|
|
});
|
|
|
|
if (errorCount) {
|
|
console.log(`There are some errors in ${filePath}.`);
|
|
hasErrors = true;
|
|
} else {
|
|
logThis(`${filePath} is all good!`);
|
|
}
|
|
});
|
|
|
|
if (hasErrors) {
|
|
console.log(`There are some errors.`);
|
|
} else {
|
|
console.log(`All CSS variables are used and assigned correctly!`);
|
|
}
|
|
};
|
|
}
|