UNPKG

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