echo-fecs
Version:
Front End Code Style Suite
68 lines (56 loc) • 1.76 kB
JavaScript
/**
* @file js formatter
* @author chris<wfsr@foxmail.com>
*/
var CLIEngine = require('eslint').CLIEngine;
var esformatter = require('esformatter');
var util = require('../util');
var Formatter = require('../formatter');
var formatter = new Formatter({
name: 'esformatter',
type: 'js',
suffix: 'js,es,es6'
});
/**
* 执行对 JS 文件内容的格式化
*
* @param {string} contents 文件内容
* @param {string} path 文件路径
* @param {Object} cliOptions 命令行中传过来的配置项
* @return {string} 返回格式化后的内容
*/
formatter.format = function (contents, path, cliOptions) {
var name = this.options.name;
var config = util.getConfig(name, cliOptions.lookup && path);
if (cliOptions.fix) {
var eslintConfig = util.getConfig('eslint', cliOptions.lookup && path);
var rules = Object.assign(eslintConfig.rules);
if (!('indent' in rules)) {
var fecsIndent = rules['fecs-indent'];
rules.indent = [
fecsIndent[0],
{tab: fecsIndent[1], space: fecsIndent[2]}[fecsIndent[1]]
];
}
var cli = new CLIEngine({
parser: eslintConfig.parser,
envs: Object.keys(eslintConfig.env),
globals: Object.keys(eslintConfig.globals),
plugins: eslintConfig.plugins,
fix: true,
rules: rules
});
var report = cli.executeOnText(contents, path);
contents = report.results[0].output || contents;
}
try {
contents = esformatter.format(contents, config);
}
catch (error) {
if (cliOptions.debug) {
throw error;
}
}
return contents;
};
module.exports = formatter;