1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 | const ChildProcess = require('child_process');
|
6 | const Fs = require('fs');
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | const internals = {
|
12 | linter: __dirname + '/linter/index.js'
|
13 | };
|
14 |
|
15 |
|
16 | exports.lint = function (settings) {
|
17 |
|
18 | return new Promise((resolve, reject) => {
|
19 |
|
20 | const linterPath = (settings.linter && settings.linter !== 'eslint') ? settings.linter : internals.linter;
|
21 |
|
22 | let linterOptions;
|
23 |
|
24 | try {
|
25 | linterOptions = JSON.parse(settings['lint-options'] || '{}');
|
26 | }
|
27 | catch (err) {
|
28 | return reject(new Error('lint-options could not be parsed'));
|
29 | }
|
30 |
|
31 | linterOptions.fix = settings['lint-fix'];
|
32 |
|
33 | const child = ChildProcess.fork(linterPath, [JSON.stringify(linterOptions)], { cwd: settings.lintingPath });
|
34 | child.once('message', (message) => {
|
35 |
|
36 | child.kill();
|
37 |
|
38 | const result = { lint: message, totalErrors: 0, totalWarnings: 0 };
|
39 |
|
40 | result.lint.forEach((lint) => {
|
41 |
|
42 | let errors = 0;
|
43 | let warnings = 0;
|
44 |
|
45 | lint.errors.forEach((err) => {
|
46 |
|
47 | if (err.severity === 'ERROR') {
|
48 | errors++;
|
49 | }
|
50 | else {
|
51 | warnings++;
|
52 | }
|
53 | });
|
54 |
|
55 | lint.totalErrors = errors;
|
56 | lint.totalWarnings = warnings;
|
57 | result.totalErrors += errors;
|
58 | result.totalWarnings += warnings;
|
59 |
|
60 | if (lint.fix) {
|
61 | Fs.writeFileSync(lint.filename, lint.fix.output);
|
62 | }
|
63 | });
|
64 |
|
65 | result.total = result.totalErrors + result.totalWarnings;
|
66 |
|
67 | return resolve(result);
|
68 | });
|
69 | });
|
70 | };
|