UNPKG

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