Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tracking information for unused variables #162

Merged
merged 3 commits into from
Sep 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,32 @@ fusv folder [, folder2...]

```js
const fusv = require('find-unused-sass-variables')
// 'scss' is a folder
let unused = fusv.find('scss')
// 'directory' is a folder
let unused = fusv.find('directory')
// Array of unused variables
console.log(unused.unused);
// ['$foo', '$bar', '$imunused']
// Array<{ name: string, line: string, file: string }>
/*
* [
* {
* name = '$foo';
* file = 'file where this variable can be found';
* line = 'line of file';
* },
* {
* ....
* }
* ]
*/
console.log(unused.total);
// Total number of variables in the files

// ignoring variables
const ignoredVars = ['$my-var', '$my-second-var']
unused = fusv.find('scss', { ignore: ignoredVars })
unused = fusv.find('directory', { ignore: ignoredVars })

// specifing file extensions
unused = fusv.find('scss', { fileExtensions: ['css','scss']})
unused = fusv.find('directory', { fileExtensions: ['css','scss']})

// asynchornous usage
let unused = await fusv.findAsync('directory')
Expand Down
4 changes: 2 additions & 2 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ const executeForPath = async(arg, options) => {

if (unusedVars.unused.length > 0) {
console.log(`${chalk.yellowBright.bold(unusedVars.unused.length)} are not used!`);
for (const unusedVar of unusedVars.unused) {
console.log(`Variable ${chalk.red(unusedVar)} is not being used!`);
for (const { name, file, line } of unusedVars.unused) {
console.log(`Variable ${chalk.red(name)} is not being used! ${chalk.gray(file)}:${chalk.yellowBright(line)}`);
}
} else {
console.log(chalk.greenBright(`No unused variables found in "${dir}!`));
Expand Down
10 changes: 5 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,21 @@ function makeResults(sassFilesAsStrings) {

const parseFileAsync = async(file, options) => {
const sassFileString = await fs.promises.readFile(file, 'utf8');
return parseData(sassFileString, options);
return parseData(file, sassFileString, options);
};

const parseFileSync = (file, options) => {
const sassFileString = fs.readFileSync(file, 'utf8');
return parseData(sassFileString, options);
return parseData(file, sassFileString, options);
};

const parseData = (sassFileString, options) => {
const parseData = (fileName, sassFileString, options) => {
// Remove jekyll comments
if (sassFileString.includes('---')) {
sassFileString = sassFileString.replace(/---/g, '');
}

const variables = parse(sassFileString, options.ignore);
const variables = parse(fileName, sassFileString, options.ignore);

return {
sassFileString,
Expand All @@ -74,7 +74,7 @@ const parseData = (sassFileString, options) => {
const filterVariables = (sassFilesString, variables) => {
// Store unused vars from all files and loop through each variable
const unusedVars = variables.filter(variable => {
const re = new RegExp(`(${escapeRegex(variable)})\\b(?!-)`, 'g');
const re = new RegExp(`(${escapeRegex(variable.name)})\\b(?!-)`, 'g');

return sassFilesString.match(re).length === 1;
});
Expand Down
12 changes: 10 additions & 2 deletions lib/parse-variable.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,15 @@ import Declaration from 'postcss/lib/declaration';
import Comment from 'postcss/lib/comment';
/* eslint-enable node/file-extension-in-import */

let file = '';
let fusvEnabled = true;

const UnusedInfo = function(node) {
this.name = node.prop;
this.line = node.source.start.line;
this.file = file;
};

const parseNodes = (nodes, variables, ignoreList) => {
for (const node of nodes) {
findVars(node, variables, ignoreList);
Expand All @@ -20,7 +27,7 @@ const findVars = (node, result, ignoreList) => {
}

if (node instanceof Declaration && node.prop.startsWith('$') && !ignoreList.includes(node.prop) && fusvEnabled) {
result.push(node.prop);
result.push(new UnusedInfo(node));

return;
}
Expand All @@ -38,7 +45,8 @@ const parseComment = node => {
}
};

const parse = (scssString, ignoreList) => {
const parse = (fileName, scssString, ignoreList) => {
file = fileName;
const parsedScss = scssParse(scssString);
const variables = [];

Expand Down