UNPKG

2.32 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/eslint|ESLint}
4 */
5
6"use strict";
7
8const fs = require("fs");
9const CLIEngine = require("eslint").CLIEngine;
10const SEVERITY = require("../severity");
11
12/**
13 * Initialise un checker pour ESLint en cherchant l'éventuelle configuration.
14 *
15 * @returns {object} Le patron et les options par défaut.
16 */
17const configure = function () {
18 let config = null;
19 for (const file of fs.readdirSync(".")) {
20 if ([".eslintrc.json", ".eslintrc"].includes(file)) {
21 config = "../" + file;
22 break;
23 }
24 }
25 return {
26 "patterns": "*.js",
27 "linters": { "eslint": config }
28 };
29};
30
31/**
32 * Vérifie un fichier avec le linter <strong>ESLint</strong>.
33 *
34 * @param {string} file Le fichier qui sera vérifié.
35 * @param {number} level Le niveau de sévérité minimum des notifications
36 * retournées.
37 * @param {object} options Les options qui seront passées au linter.
38 * @returns {Promise.<Array.<object>>} Une promesse retournant la liste des
39 * notifications.
40 */
41const wrapper = function (file, level, options) {
42 if (SEVERITY.FATAL > level) {
43 return Promise.resolve([]);
44 }
45
46 const cli = new CLIEngine({
47 "baseConfig": options,
48 "ignore": false,
49 "useEslintrc": false
50 });
51 const report = cli.executeOnFiles([file]);
52 return Promise.resolve(report.results[0].messages.map((result) => {
53 let severity;
54 if (result.fatal) {
55 severity = SEVERITY.FATAL;
56 } else if (1 === result.severity) {
57 severity = SEVERITY.WARN;
58 } else {
59 severity = SEVERITY.ERROR;
60 }
61
62 const locations = [];
63 if (Number.isNaN(result.column)) {
64 locations.push({ "line": result.line });
65 } else {
66 locations.push({ "line": result.line, "column": result.column });
67 }
68
69 return {
70 "file": file,
71 "linter": "eslint",
72 "rule": result.ruleId,
73 "severity": severity,
74 "message": result.message,
75 "locations": locations
76 };
77 }).filter((n) => level >= n.severity));
78};
79
80module.exports = { configure, wrapper };