1 | #!/usr/bin/env node
|
2 |
|
3 | 'use strict'
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | const debug = require('debug')('elint:cli')
|
10 | const program = require('commander')
|
11 | const { description } = require('../package.json')
|
12 | const { elint, commitlint, runHooks, version } = require('../src')
|
13 | const log = require('../src/utils/log')
|
14 |
|
15 | debug('process.argv: %o', process.argv)
|
16 |
|
17 | program
|
18 | .usage('[command] [options]')
|
19 | .description(description)
|
20 | .storeOptionsAsProperties(true)
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | program
|
26 | .option('-v, --version', 'output the version number', () => {
|
27 | version()
|
28 | process.exit()
|
29 | })
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | program
|
36 | .command('lint [type] [files...]')
|
37 | .alias('l')
|
38 | .description('run lint, type: es, style, commit')
|
39 | .option('-f, --fix', 'Automatically fix problems')
|
40 | .option('-p, --prettier', 'Use prettier to lint/format(with --fix) code')
|
41 | .option('--no-ignore', 'Disable elint ignore patterns')
|
42 | .action((type, files, options) => {
|
43 | debug('run lint...')
|
44 |
|
45 | if (!type || !files) {
|
46 | return
|
47 | }
|
48 |
|
49 | if (type === 'commit') {
|
50 | commitlint()
|
51 | return
|
52 | }
|
53 |
|
54 | let parsedFiles, parsedType
|
55 |
|
56 | if (['es', 'style'].includes(type)) {
|
57 | parsedFiles = files
|
58 | parsedType = type
|
59 | } else {
|
60 | parsedFiles = [type, ...files]
|
61 | }
|
62 |
|
63 | |
64 |
|
65 |
|
66 |
|
67 | const elintOptions = {
|
68 | type: parsedType,
|
69 | fix: options.fix,
|
70 | prettier: options.prettier,
|
71 | noIgnore: options.noIgnore
|
72 | }
|
73 |
|
74 | elint(parsedFiles, elintOptions)
|
75 | })
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | program
|
81 | .command('hooks [action]')
|
82 | .alias('h')
|
83 | .description('install & uninstall hooks')
|
84 | .action(action => {
|
85 | debug(`run ${action} hooks...`)
|
86 | runHooks(action)
|
87 | })
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | program.on('command:*', function () {
|
93 | const command = program.args.join(' ')
|
94 | const message = [
|
95 | `Invalid command: ${command}`,
|
96 | 'See --help for a list of available commands.'
|
97 | ]
|
98 |
|
99 | log.error(...message)
|
100 | process.exit(1)
|
101 | })
|
102 |
|
103 |
|
104 |
|
105 |
|
106 | program.on('--help', function () {
|
107 | console.log('')
|
108 | console.log(' Examples:')
|
109 | console.log('')
|
110 | console.log(' lint all js and css')
|
111 | console.log(' $ elint lint "**/*.js" "**/*.css"')
|
112 | console.log('')
|
113 | console.log(' run eslint')
|
114 | console.log(' $ elint lint es "**/*.js"')
|
115 | console.log('')
|
116 | console.log(' run commitlint')
|
117 | console.log(' $ elint lint commit')
|
118 | console.log('')
|
119 | console.log(' install git hooks')
|
120 | console.log(' $ elint hooks install')
|
121 | console.log('')
|
122 | })
|
123 |
|
124 | if (!process.argv.slice(2).length) {
|
125 | program.outputHelp()
|
126 | process.exit(0)
|
127 | }
|
128 |
|
129 | program.parse(process.argv)
|