UNPKG

2.21 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/lesshint|lesshint}
4 */
5
6"use strict";
7
8const fs = require("fs");
9const Lesshint = require("lesshint").Lesshint;
10const SEVERITY = require("../severity");
11
12/**
13 * Initialise un checker pour lesshint 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 ([".lesshintrc.json", ".lesshintrc"].includes(file)) {
21 config = "../" + file;
22 break;
23 }
24 }
25 return {
26 "patterns": "*.less",
27 "linters": { "lesshint": config }
28 };
29};
30
31/**
32 * Vérifie un fichier avec le linter <strong>lesshint</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 = async function (file, level, options) {
42 if (SEVERITY.FATAL > level) {
43 return [];
44 }
45
46 const lesshint = new Lesshint();
47 lesshint.configure(options);
48 const results = await lesshint.checkFiles(file);
49 return results.map((result) => {
50 let rule;
51 let severity;
52 if ("parse error" === result.linter) {
53 rule = "parseError";
54 severity = SEVERITY.FATAL;
55 } else {
56 rule = result.linter;
57 severity = "warning" === result.severity ? SEVERITY.WARN
58 : SEVERITY.ERROR;
59 }
60
61 return {
62 "file": file,
63 "linter": "lesshint",
64 "rule": rule,
65 "severity": severity,
66 "message": result.message,
67 "locations": [{
68 "line": result.line,
69 "column": result.column
70 }]
71 };
72 }).filter((n) => level >= n.severity);
73};
74
75module.exports = { configure, wrapper };