Skip to content

Commit

Permalink
Replace lint-vars.sh with a Node.js script. (#24860)
Browse files Browse the repository at this point in the history
Also, include it in the `css` npm script since it's instant.
  • Loading branch information
XhmikosR authored Nov 27, 2017
1 parent 671bb27 commit 7629567
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 37 deletions.
83 changes: 83 additions & 0 deletions build/lint-vars.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/usr/bin/env node

/*!
* Script to find unused Sass variables.
*
* Copyright 2017 The Bootstrap Authors
* Copyright 2017 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/

'use strict'

const fs = require('fs')
const path = require('path')
const glob = require('glob')

// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
function regExpQuote(str) {
return str.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&')
}

let globalSuccess = true

function findUnusedVars(dir) {
if (!(fs.existsSync(dir) && fs.statSync(dir).isDirectory())) {
console.log(`"${dir}": Not a valid directory!`)
process.exit(1)
}

console.log(`Finding unused variables in "${dir}"...`)

// A variable to handle success/failure message in this function
let unusedVarsFound = false

// Array of all Sass files' content
const sassFiles = glob.sync(path.join(dir, '**/*.scss'))
// String of all Sass files' content
let sassFilesString = ''

sassFiles.forEach((file) => {
sassFilesString += fs.readFileSync(file, 'utf8')
})

// Array of all Sass variables
const variables = sassFilesString.match(/(^\$[a-zA-Z0-9_-]+[^:])/gm)

console.log(`There's a total of ${variables.length} variables.`)

// Loop through each variable
variables.forEach((variable) => {
const re = new RegExp(regExpQuote(variable), 'g')
const count = (sassFilesString.match(re) || []).length

if (count === 1) {
console.log(`Variable "${variable}" is only used once!`)
unusedVarsFound = true
globalSuccess = false
}
})

if (unusedVarsFound === false) {
console.log(`No unused variables found in "${dir}".`)
}
}

function main(args) {
if (args.length < 1) {
console.log('Wrong arguments!')
console.log('Usage: lint-vars.js folder [, folder2...]')
process.exit(1)
}

args.forEach((arg) => {
findUnusedVars(arg)
})

if (globalSuccess === false) {
process.exit(1)
}
}

// The first and second args are: path/to/node script.js
main(process.argv.slice(2))
28 changes: 0 additions & 28 deletions build/lint-vars.sh

This file was deleted.

18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"css-compile-docs": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 assets/scss/docs.scss assets/css/docs.min.css",
"css-lint": "stylelint --config build/.stylelintrc --syntax scss \"scss/**/*.scss\"",
"css-lint-docs": "stylelint --config build/.stylelintrc --syntax scss \"assets/scss/*.scss\" && stylelint --config docs/4.0/examples/.stylelintrc \"docs/**/*.css\"",
"css-lint-vars": "node build/lint-vars.js scss/ assets/scss/",
"css-prefix": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.min.css\"",
"css-prefix-docs": "postcss --config build/postcss.config.js --replace \"assets/css/docs.min.css\" \"docs/**/*.css\"",
"css-minify": "cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css",
Expand Down Expand Up @@ -94,6 +95,7 @@
"cross-env": "^5.1.1",
"eslint": "^4.11.0",
"eslint-plugin-compat": "^2.1.0",
"glob": "^7.1.2",
"htmllint-cli": "^0.0.6",
"jsunitsaucelabs": "^1.3.0",
"karma": "^1.7.1",
Expand Down

0 comments on commit 7629567

Please sign in to comment.