1 | /**
|
2 | * @module
|
3 | * @see {@link https://www.npmjs.com/package/yaml-lint|YAML Lint}
|
4 | */
|
5 |
|
6 | ;
|
7 |
|
8 | const fs = require("fs");
|
9 | const yamlLint = require("yaml-lint");
|
10 | const SEVERITY = require("../severity");
|
11 |
|
12 | /**
|
13 | * Initialise un checker pour YAML Lint en cherchant l'éventuelle configuration.
|
14 | *
|
15 | * @returns {object} Les patrons et les options par défaut.
|
16 | */
|
17 | const configure = function () {
|
18 | let config = null;
|
19 | for (const file of fs.readdirSync(".")) {
|
20 | if (".yaml-lint.json" === file) {
|
21 | config = "../" + file;
|
22 | break;
|
23 | }
|
24 | }
|
25 | return {
|
26 | "patterns": ["*.yaml", "*.yml"],
|
27 | "linters": { "yaml-lint": config }
|
28 | };
|
29 | };
|
30 |
|
31 | /**
|
32 | * Vérifie un fichier avec le linter <strong>YAML Lint</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 | */
|
41 | const wrapper = async function (file, level, options) {
|
42 | if (SEVERITY.ERROR > level) {
|
43 | return [];
|
44 | }
|
45 |
|
46 | try {
|
47 | await yamlLint.lintFile(file, options);
|
48 | return [];
|
49 | } catch (err) {
|
50 | return [{
|
51 | "file": file,
|
52 | "linter": "yaml-lint",
|
53 | "message": err.reason,
|
54 | "locations": [{
|
55 | // Augmenter de un le numéro de la ligne et de la colonne car
|
56 | // YAML Lint commence les numérotations à zéro.
|
57 | "line": err.mark.line + 1,
|
58 | "column": err.mark.column + 1
|
59 | }]
|
60 | }];
|
61 | }
|
62 | };
|
63 |
|
64 | module.exports = { configure, wrapper };
|