UNPKG

1.87 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/jshint|JSHint}
4 */
5
6"use strict";
7
8const fs = require("fs").promises;
9const readdirSync = require("fs").readdirSync;
10const jshint = require("jshint").JSHINT;
11const SEVERITY = require("../severity");
12
13/**
14 * Initialise un checker pour JSHint en cherchant l'éventuelle configuration.
15 *
16 * @returns {object} Le patron et les options par défaut.
17 */
18const configure = function () {
19 let config = null;
20 for (const file of readdirSync(".")) {
21 if (".jshintrc" === file) {
22 config = "../" + file;
23 break;
24 }
25 }
26 return {
27 "patterns": "*.js",
28 "linters": { "jshint": config }
29 };
30};
31
32/**
33 * Vérifie un fichier avec le linter <strong>JSHint</strong>.
34 *
35 * @param {string} file Le fichier qui sera vérifié.
36 * @param {number} level Le niveau de sévérité minimum des notifications
37 * retournées.
38 * @param {object} options Les options qui seront passées au linter.
39 * @returns {Promise.<Array.<object>>} Une promesse retournant la liste des
40 * notifications.
41 */
42const wrapper = async function (file, level, options) {
43 if (SEVERITY.ERROR > level) {
44 return [];
45 }
46
47 const source = await fs.readFile(file, "utf-8");
48 jshint(source, options);
49 return jshint.errors.map((result) => ({
50 "file": file,
51 "linter": "jshint",
52 "rule": result.code,
53 "severity": result.code.startsWith("W") ? SEVERITY.WARN
54 : SEVERITY.ERROR,
55 "message": result.reason,
56 "locations": [{
57 "line": result.line,
58 "column": result.character
59 }]
60 })).filter((n) => level >= n.severity);
61};
62
63module.exports = { configure, wrapper };