mirror of
https://github.com/cypress-io/cypress.git
synced 2026-02-25 01:09:52 -06:00
114 lines
2.4 KiB
JavaScript
114 lines
2.4 KiB
JavaScript
const _ = require('lodash')
|
|
const EE = require('events')
|
|
const sh = require('shelljs')
|
|
// const chalk = require('chalk')
|
|
const Promise = require('bluebird')
|
|
const debug = require('debug')('lint/util')
|
|
|
|
const filesRegex = /\.(js|jsx|ts|tsx|coffee|json|eslintrc)$/
|
|
|
|
Promise.config({
|
|
warnings: true,
|
|
longStackTraces: true,
|
|
})
|
|
|
|
module.exports = {
|
|
lintFilesByText: (options) => {
|
|
sh.config.silent = true
|
|
EE.defaultMaxListeners = 100
|
|
|
|
const opts = _.defaults(options, {
|
|
getFilenames: null,
|
|
getFileText: null,
|
|
})
|
|
|
|
const filenames = opts.getFilenames().filter((v) => filesRegex.test(v))
|
|
|
|
debug(`linting:
|
|
${filenames.join('\n\t')}
|
|
`)
|
|
|
|
return Promise.map(filenames, (f) => {
|
|
|
|
debug('started linting', f)
|
|
|
|
const fileText = opts.getFileText(f)
|
|
|
|
debugTerse('file text:', fileText)
|
|
|
|
if (!fileText.toString()) return
|
|
|
|
const lintCommand = `./node_modules/.bin/eslint --stdin --stdin-filename ${sh.ShellString(f)} --color=true`
|
|
|
|
return Promise.promisify(fileText.exec)(
|
|
lintCommand,
|
|
{ silent: false, async: true }
|
|
)
|
|
.tapCatch(debugTerse)
|
|
.return(false)
|
|
.catchReturn(true)
|
|
.finally(() => {
|
|
debug('finished linting ', f)
|
|
})
|
|
}, { concurrency: 0 })
|
|
.then((results) => {
|
|
const failCount = _.filter(results).length
|
|
|
|
debug({ failCount })
|
|
|
|
return { failCount, filenames }
|
|
})
|
|
|
|
},
|
|
lintFilesByName: (options) => {
|
|
sh.config.silent = true
|
|
|
|
const opts = _.defaults(options, {
|
|
getFilenames: null,
|
|
fix: false,
|
|
})
|
|
|
|
const filenames = opts.getFilenames().filter((v) => filesRegex.test(v))
|
|
|
|
debug(`linting:
|
|
${filenames.join('\n\t')}
|
|
`)
|
|
|
|
const filenamesString = sh.ShellString(filenames.join(' '))
|
|
|
|
const lintCommand = opts.fix ?
|
|
`./node_modules/.bin/eslint --color=true --fix '' ${filenamesString}`
|
|
: `./node_modules/.bin/eslint --color=true '' ${filenamesString}`
|
|
|
|
return Promise.promisify(sh.exec)(
|
|
lintCommand,
|
|
{ silent: false, async: true }
|
|
)
|
|
.tapCatch(debugTerse)
|
|
.return(false)
|
|
.catchReturn(true)
|
|
.then((failed) => {
|
|
return {
|
|
failed,
|
|
filenames,
|
|
}
|
|
})
|
|
|
|
},
|
|
|
|
}
|
|
|
|
const debugTerse = (...args) => {
|
|
args = args.map((arg) => {
|
|
let truncated = arg.toString().slice(0, 15)
|
|
|
|
if (truncated !== arg.toString()) {
|
|
truncated = `${truncated}...`
|
|
}
|
|
|
|
return truncated
|
|
})
|
|
|
|
debug(...args)
|
|
}
|