1 | 'use strict'
|
2 |
|
3 | const debug = require('debug')('elint:walker')
|
4 | const co = require('co')
|
5 | const path = require('path')
|
6 | const isGitHooks = require('../utils/is-git-hooks')
|
7 | const { getBaseDir } = require('../env')
|
8 | const { defaultIgnore } = require('../config')
|
9 | const { getFileTree, fillFileTree } = require('./filetree')
|
10 | const local = require('./local')
|
11 | const stage = require('./stage')
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | function walker (patterns, options = {}) {
|
21 | debug(`input glob patterns: ${patterns}`)
|
22 | debug('input options: %o', options)
|
23 |
|
24 | const fileTree = getFileTree()
|
25 | const noIgnore = typeof options.noIgnore === 'boolean'
|
26 | ? options.noIgnore
|
27 | : false
|
28 |
|
29 | if (!patterns || (Array.isArray(patterns) && !patterns.length)) {
|
30 | return Promise.resolve(fileTree)
|
31 | }
|
32 |
|
33 | return co(function * () {
|
34 | const isGit = yield isGitHooks()
|
35 |
|
36 | debug(`run in git hooks: ${isGit}`)
|
37 |
|
38 | |
39 |
|
40 |
|
41 | let fileList
|
42 | let ignorePatterns = []
|
43 |
|
44 | if (!noIgnore) {
|
45 | debug('ignore rules: %j', defaultIgnore)
|
46 | ignorePatterns = defaultIgnore
|
47 | }
|
48 |
|
49 | if (isGit) {
|
50 | fileList = yield stage(patterns, ignorePatterns)
|
51 | } else {
|
52 | fileList = yield local(patterns, ignorePatterns)
|
53 | }
|
54 |
|
55 |
|
56 | const baseDir = getBaseDir()
|
57 | fileList = fileList.map(p => {
|
58 | return path.join(baseDir, p)
|
59 | })
|
60 |
|
61 | fillFileTree(fileTree, fileList)
|
62 |
|
63 | debug('fileList: %o', fileList)
|
64 | debug('fileTree: %o', fileTree)
|
65 |
|
66 | return fileTree
|
67 | })
|
68 | }
|
69 |
|
70 | module.exports = walker
|