UNPKG

2.71 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3'use strict'
4
5/**
6 * cli
7 */
8
9const debug = require('debug')('elint:cli')
10const program = require('commander')
11const { description } = require('../package.json')
12const { elint, commitlint, runHooks, version } = require('../src')
13const log = require('../src/utils/log')
14
15debug('process.argv: %o', process.argv)
16
17program
18 .usage('[command] [options]')
19 .description(description)
20 .storeOptionsAsProperties(true)
21
22/**
23 * 输出 version
24 */
25program
26 .option('-v, --version', 'output the version number', () => {
27 version()
28 process.exit()
29 })
30
31/**
32 * 执行 lint
33 * 不指定 type,执行除了 commitlint 之外的全部
34 */
35program
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 * 坑:commander options 存在循环引用
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 * install & uninstall hooks
79 */
80program
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 * 未知 command
91 */
92program.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 * 输出 help
105 */
106program.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
124if (!process.argv.slice(2).length) {
125 program.outputHelp()
126 process.exit(0)
127}
128
129program.parse(process.argv)