Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@gmail.com>2017-11-27 20:41:48 +0300
committerGitHub <noreply@github.com>2017-11-27 20:41:48 +0300
commit76295676a1c073f6d2cd15f5c54b0edcbbbc14c6 (patch)
tree21396fd8f59ef114485dc2c7f3205f39498c1edf /build
parent671bb278bb0619160a8baa109c530fc68bb4ccc8 (diff)
Replace lint-vars.sh with a Node.js script. (#24860)
Also, include it in the `css` npm script since it's instant.
Diffstat (limited to 'build')
-rw-r--r--build/lint-vars.js83
-rwxr-xr-xbuild/lint-vars.sh28
2 files changed, 83 insertions, 28 deletions
diff --git a/build/lint-vars.js b/build/lint-vars.js
new file mode 100644
index 0000000000..909f5293d7
--- /dev/null
+++ b/build/lint-vars.js
@@ -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))
diff --git a/build/lint-vars.sh b/build/lint-vars.sh
deleted file mode 100755
index ae7f716c1f..0000000000
--- a/build/lint-vars.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env bash
-#
-# Approach:
-# 1. Find variable declaration in the form of "$my-var: anyvalue"
-# 2. Loop through found variables and find occurrences of each variable in all sass files
-# 3. Filter out vars that occurred only once
-#
-# Run from command line with `build/lint-vars.sh scss`.
-#
-# Source: https://gist.github.com/badsyntax/6193491
-
-if [ -z "$1" ]; then
- echo "Please specify a directory as the first argument."
- exit 1
-fi
-if [ ! -d "$1" ]; then
- echo "Not a valid directory."
- exit 1
-fi
-
-echo "Finding unused variables. This might take some time..."
-
-vars=$(find "$1" -type f -name "*.scss" -exec grep --color=never -h '^$[a-zA-Z0-9_-][^:]*' {} \; | sed 's/$\([a-zA-Z0-9_-][^:]*\).*/\1/')
-
-for var in $vars; do
- echo -n "Occurrences of \"\$$var\":"
- find "$1" -type f -name "*.scss" -exec grep --color=never -h "$var" "{}" \; | wc -l
-done | grep ' 1$'