UNPKG

2.63 kBJavaScriptView Raw
1/**
2 * @module
3 * @see {@link https://www.npmjs.com/package/tslint|TSLint}
4 */
5
6"use strict";
7
8const fs = require("fs").promises;
9const readdirSync = require("fs").readdirSync;
10const tslint = require("tslint");
11const SEVERITY = require("../severity");
12
13/**
14 * Initialise un checker pour TSLint en cherchant l'éventuelle configuration.
15 *
16 * @returns {object} Le patron et les options par défaut.
17 */
18const configure = function () {
19 let config = {};
20 for (const file of readdirSync(".")) {
21 if ("tslint.json" === file) {
22 config = "../" + file;
23 break;
24 }
25 }
26 return {
27 "patterns": "*.ts",
28 "linters": { "tslint": config }
29 };
30};
31
32/**
33 * Vérifie un fichier avec le linter <strong>TSLint</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 const configuration = tslint.Configuration.parseConfigFile(options);
49 const linter = new tslint.Linter({ "fix": false });
50 linter.lint(file, source, configuration);
51 return linter.getResult().failures
52 .map((result) => {
53 const severity = "warning" === result.getRuleSeverity()
54 ? SEVERITY.WARN
55 : SEVERITY.ERROR;
56 const start = result.getStartPosition().getLineAndCharacter();
57 const end = result.getEndPosition().getLineAndCharacter();
58
59 return {
60 "file": file,
61 "linter": "tslint",
62 "rule": result.getRuleName(),
63 "severity": severity,
64 "message": result.getFailure(),
65 "locations": [{
66 // Augmenter de un le numéro de la ligne et de la colonne
67 // car TSLint commence les numérotations à zéro.
68 "line": start.line + 1,
69 "column": start.character + 1,
70 "lineEnd": end.line + 1,
71 "columnEnd": end.character + 1
72 }]
73 };
74 }).filter((n) => level >= n.severity);
75};
76
77module.exports = { configure, wrapper };