138 lines
3.8 KiB
JavaScript
138 lines
3.8 KiB
JavaScript
/*
|
||
* @Author: your name
|
||
* @Date: 2022-02-10 10:20:44
|
||
* @LastEditTime: 2022-02-10 15:47:03
|
||
* @LastEditors: Please set LastEditors
|
||
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
* @FilePath: /low_code_designer_eslint/config/lint.js
|
||
*/
|
||
const configJSON = require('../config.json');
|
||
const fs = require('fs');
|
||
const { resolve } = require('path');
|
||
const { spawn } = require('child_process');
|
||
const consoleStyles = {
|
||
// 亮色
|
||
'bright': '\x1B[1m',
|
||
// 灰色
|
||
'grey': '\x1B[2m',
|
||
// 斜体
|
||
'italic': '\x1B[3m',
|
||
// 下划线
|
||
'underline': '\x1B[4m',
|
||
// 反向
|
||
'reverse': '\x1B[7m',
|
||
// 隐藏
|
||
'hidden': '\x1B[8m',
|
||
// 黑色
|
||
'black': '\x1B[30m',
|
||
// 红色
|
||
'red': '\x1B[31m',
|
||
// 绿色
|
||
'green': '\x1B[32m',
|
||
// 黄色
|
||
'yellow': '\x1B[33m',
|
||
// 蓝色
|
||
'blue': '\x1B[34m',
|
||
// 品红色
|
||
'magenta': '\x1B[35m',
|
||
// 青色
|
||
'cyan': '\x1B[36m',
|
||
// 白色
|
||
'white': '\x1B[37m',
|
||
// 背景黑色
|
||
'blackBG': '\x1B[40m',
|
||
// 红色
|
||
'redBG': '\x1B[41m',
|
||
// 绿色
|
||
'greenBG': '\x1B[42m',
|
||
// 黄色
|
||
'yellowBG': '\x1B[43m',
|
||
// 蓝色
|
||
'blueBG': '\x1B[44m',
|
||
// 品红色
|
||
'magentaBG': '\x1B[45m',
|
||
// 青色
|
||
'cyanBG': '\x1B[46m',
|
||
// 白色
|
||
'whiteBG': '\x1B[47m'
|
||
};
|
||
let lintConfig = configJSON.eslint || {};
|
||
let cmd = resolve('./node_modules/.bin/eslint');
|
||
let lintPaths = getLintPaths(lintConfig);
|
||
|
||
let lintArgs = [
|
||
'--ext', '.js',
|
||
'--ext', '.jsx',
|
||
...lintPaths
|
||
];
|
||
if (lintConfig.autoFix === true) {
|
||
lintArgs.push('--fix');
|
||
}
|
||
console.log(cmd, lintArgs, lintConfig.autoFix);
|
||
function getLintPaths(lintConfig) {
|
||
let paths = lintConfig.path || [];
|
||
let ret = paths.filter((path) => {
|
||
path = resolve(path);
|
||
return hasEsLintFile(path);
|
||
});
|
||
return ret;
|
||
}
|
||
function hasEsLintFile(path) {
|
||
let files = fs.readdirSync(path);
|
||
let idx = files.findIndex((file) => {
|
||
return file === '.eslintrc.js';
|
||
});
|
||
let sourceRoot = resolve(process.cwd(), `${configJSON.srcDir || 'src'}`);
|
||
let pPath = resolve(path, '../');
|
||
let ret = idx > -1;
|
||
if (!ret && sourceRoot !== pPath) {
|
||
ret = hasEsLintFile(resolve(path, '../'));
|
||
}
|
||
return ret;
|
||
}
|
||
function begin() {
|
||
if (!lintConfig.enable || lintPaths.length === 0) {
|
||
console.log(`${consoleStyles.bright}`, '----Eslint cancel');
|
||
console.log(`${consoleStyles.bright}`, '请确认是否配置需要lint的项目目录,或项目目录中是否配置.eslintrc')
|
||
return;
|
||
}
|
||
const execProcess = spawn(cmd, lintArgs, {
|
||
shell: process.platform === 'win32'
|
||
});
|
||
const stdCallBack = (data) => {
|
||
if (data.includes('ERROR')) {
|
||
throw new Error(data);
|
||
} else {
|
||
let str = `${data}`;
|
||
let arr = str ? str.split('\n') : [];
|
||
arr.forEach((row) => {
|
||
if (isError(row)) {
|
||
console.log(consoleStyles.red, `${row}\n`);
|
||
} else if (isWarning(row)) {
|
||
console.log(consoleStyles.yellow, `${row}\n`);
|
||
} else {
|
||
console.log(`${consoleStyles.italic}${consoleStyles.blue}`, `${row}\n`);
|
||
}
|
||
})
|
||
|
||
// data && console.log(`${data}`);
|
||
}
|
||
};
|
||
execProcess.stdout.on('data', stdCallBack);
|
||
execProcess.stderr.on('data', stdCallBack);
|
||
execProcess.on('close', () => {
|
||
console.log(`${consoleStyles.bright}`, '----Done');
|
||
});
|
||
}
|
||
|
||
function isError(row) {
|
||
let test = row.toLowerCase();
|
||
return test.indexOf('error') > -1 || test.indexOf('err') > -1;
|
||
}
|
||
function isWarning(row) {
|
||
let test = row.toLowerCase();
|
||
return test.indexOf('warning') > -1 || test.indexOf('warn') > -1;
|
||
}
|
||
|
||
begin();
|