UNPKG

1.74 kBJavaScriptView Raw
1'use strict';
2
3const ChildProcess = require('child_process');
4const Fs = require('fs');
5
6
7const internals = {
8 linter: __dirname + '/linter/index.js'
9};
10
11
12exports.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};