'use strict' const path = require('path') const {spawn} = require('child_process') const process = require('process') const CONFIG = require('../config') module.exports = async function () { return new Promise((resolve, reject) => { const eslintArgs = ['--cache', '--format', 'json'] if (process.argv.includes('--fix')) { eslintArgs.push('--fix') } const eslintBinary = process.platform === 'win32' ? 'eslint.cmd' : 'eslint' const eslint = spawn( path.join('script', 'node_modules', '.bin', eslintBinary), [...eslintArgs, '.'], { cwd: CONFIG.repositoryRootPath } ) let output = '' let errorOutput = '' eslint.stdout.on('data', data => { output += data.toString() }) eslint.stderr.on('data', data => { errorOutput += data.toString() }) eslint.on('error', error => reject(error)) eslint.on('close', exitCode => { const errors = [] let files try { files = JSON.parse(output) } catch (_) { reject(errorOutput) return } for (const file of files) { for (const error of file.messages) { errors.push({ path: file.filePath, message: error.message, lineNumber: error.line, rule: error.ruleId }) } } resolve(errors) }) }) }