-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.js
54 lines (49 loc) · 1.53 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* eslint no-console: ["off"]*/
/* global console: false */
import fs from 'fs';
import jsonfile from 'jsonfile';
import rules from './src/rules';
import {
codeBlock,
ruleHeader,
ruleDefinition,
ruleDescription,
ruleJustifications,
ruleExample,
} from './markdownBuilders';
const eslintBase = {
extends: 'eslint:recommended',
parserOptions: {
ecmaVersion: 6,
sourceType: 'module',
},
};
const eslint = Object.assign({}, eslintBase, {
rules: rules.reduce((acc, r) => {
acc[r.name] = r.definition;
return acc;
}, {}),
});
const readmeRules = rules.reduce((acc, rule) => {
acc.push(ruleHeader(rule.name));
acc.push(ruleDefinition(rule.definition));
rule.description && acc.push(ruleDescription(rule.description));
rule.justifications && acc.push(ruleJustifications(rule.justifications));
rule.wrongExample && acc.push(ruleExample(rule.wrongExample, false));
rule.rightExample && acc.push(ruleExample(rule.rightExample, true));
return acc;
}, []);
const readme = [
'# ESLint Genius',
'**An ESLint config for geniuses**.',
'But you can continue to be standard if you want.',
'This is a combination of best practices, styles that have objective benefits, and my own (let\'s face it, correct) opinions. I try to provide my rationale for the more contentious decisions.',
'## Base config',
codeBlock(JSON.stringify(eslintBase, null, 2)),
].concat(readmeRules);
fs.writeFile('README.md', readme.join('\n\n'), err =>
err && console.error(err)
);
jsonfile.writeFile('.eslintrc', eslint, {spaces: 2}, err =>
err && console.error(err)
);