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