UNPKG

2 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/csslint|CSSLint}
4 */
5
6"use strict";
7
8const fs = require("fs").promises;
9const readdirSync = require("fs").readdirSync;
10const CSSLint = require("csslint").CSSLint;
11const SEVERITY = require("../severity");
12
13/**
14 * Initialise un checker pour CSSLint 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 (".csslintrc" === file) {
22 config = "../" + file;
23 break;
24 }
25 }
26 return {
27 "patterns": "*.css",
28 "linters": { "csslint": config }
29 };
30};
31
32/**
33 * Vérifie un fichier avec le linter <strong>CSSLint</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 return CSSLint.verify(source, options).messages
49 .map((result) => {
50 const severity = "warning" === result.type ? SEVERITY.WARN
51 : SEVERITY.ERROR;
52
53 return {
54 "file": file,
55 "linter": "csslint",
56 "rule": result.rule.id,
57 "severity": severity,
58 "message": result.message,
59 "locations": [{
60 "line": result.line,
61 "column": result.col
62 }]
63 };
64 }).filter((n) => level >= n.severity);
65};
66
67module.exports = { configure, wrapper };