UNPKG

find-unused-sass-variables

Version:
73 lines (59 loc) 2.55 kB
#!/usr/bin/env node import fs from 'node:fs/promises'; import process from 'node:process'; import path from 'node:path'; import { program } from 'commander'; import picocolors from 'picocolors'; import { findAsync } from '../index.js'; const pkg = new URL('../package.json', import.meta.url); const { name, version, description } = JSON.parse(await fs.readFile(pkg)); program .name(name) .argument('<folders...>', 'one or more folders to scan') .description(description) .version(version, '-v, --version') .option('-i, --ignore <variables>', 'ignore variables, comma separated', '') .option('-if, --ignoreFiles <files>', 'ignore files, comma separated', '') .option('-e, --extension [types...]', 'file extensions to search', ['scss']) .action((folders, options) => { console.log('Looking for unused variables'); for (const option of ['ignore', 'ignoreFiles']) { options[option] = options[option] ? options[option].split(',').filter(Boolean) : []; } return main(folders, { ignore: options.ignore, ignoreFiles: options.ignoreFiles, fileExtensions: options.extension }); }) .showHelpAfterError() .parse(); async function main(folders, options) { let status = 0; const results = await Promise.allSettled( folders.map(folder => executeForPath(folder, options)) ); for (const result of results) { if (result.status === 'rejected') { // TODO: switch to console.error and result.reason.message in the next major version console.log(picocolors.red(result.reason)); status = 1; } } process.exit(status); } async function executeForPath(folder, options) { const dir = path.resolve(folder); const unusedVars = await findAsync(dir, options); const unusedCount = unusedVars.unused.length; console.log(`\nSearching for unused variables in "${picocolors.cyan(dir)}" folder, ${picocolors.cyan(options.fileExtensions.join(', '))} files...`); if (unusedCount > 0) { console.log(`${picocolors.cyan(unusedVars.total)} total variables, ${picocolors.red(unusedCount)} unused:`); for (const { name, file, line } of unusedVars.unused) { console.log(` - ${picocolors.red(name)} ${picocolors.gray(file)}:${picocolors.cyan(line)}`); } throw new Error(`Found ${unusedCount} unused variable${unusedCount > 1 ? 's' : ''} in "${picocolors.cyan(dir)}" folder`); } console.log(`${picocolors.cyan(unusedVars.total)} total variables`); console.log(picocolors.green(`No unused variables found in "${picocolors.cyan(dir)}"!`)); }