UNPKG

2.17 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/stylelint|stylelint}
4 */
5
6"use strict";
7
8const fs = require("fs");
9const stylelint = require("stylelint");
10const SEVERITY = require("../severity");
11
12/**
13 * Initialise un checker pour stylelint en cherchant l'éventuelle configuration.
14 *
15 * @returns {object} Le patron et les options par défaut.
16 */
17const configure = function () {
18 let config = { "rules": {} };
19 for (const file of fs.readdirSync(".")) {
20 if ([".stylelintrc", ".stylelintrc.json"].includes(file)) {
21 config = "../" + file;
22 break;
23 }
24 }
25 return {
26 "patterns": "*.css",
27 "linters": { "stylelint": config }
28 };
29};
30
31/**
32 * Vérifie un fichier avec le linter <strong>stylelint</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.ERROR > level) {
43 return [];
44 }
45
46 const config = {
47 "config": options,
48 "files": file,
49 "disableDefaultIgnores": true
50 };
51 const results = await stylelint.lint(config);
52 return results.results[0].warnings.map((result) => {
53 const severity = "warning" === result.severity ? SEVERITY.WARN
54 : SEVERITY.ERROR;
55 const message = result.text.slice(0, result.text.lastIndexOf(" ("));
56 return {
57 "file": file,
58 "linter": "stylelint",
59 "rule": result.rule,
60 "severity": severity,
61 "message": message,
62 "locations": [{
63 "line": result.line,
64 "column": result.column
65 }]
66 };
67 }).filter((n) => level >= n.severity);
68};
69
70module.exports = { configure, wrapper };