UNPKG

2.82 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3"use strict";
4
5const fs = require("fs");
6const path = require("path");
7const log = require("npmlog");
8const yargs = require("yargs");
9
10const argv = yargs.options({
11 "f": {
12 "alias": "formatter",
13 "requiresArg": true,
14 "type": "string"
15 },
16 "l": {
17 "alias": "level",
18 "requiresArg": true,
19 "type": "string"
20 },
21 "o": {
22 "alias": "output",
23 "requiresArg": true,
24 "type": "string"
25 },
26 "p": {
27 "alias": "patterns",
28 "requiresArg": true,
29 "type": "array"
30 },
31 "help": {
32 "alias": "help",
33 "type": "boolean"
34 }
35}).help(false).version(false).parse();
36
37if (argv.help) {
38 process.stdout.write(fs.readFileSync(path.join(__dirname,
39 "/../help/init.txt")));
40 process.exit(0);
41}
42
43if (!fs.existsSync("package.json")) {
44 log.error("metalint", "package.json non-trouvé.");
45 process.exit(1);
46}
47
48if (fs.existsSync(".metalint/metalint.json")) {
49 log.warn("metalint", "Configuration déjà présente.");
50 process.exit(0);
51}
52
53// Créer le répertoire de la configuration.
54fs.mkdirSync(".metalint");
55
56// Initialiser les données de la configuration.
57const config = {
58 "patterns": ["!/.git/", "!/node_modules/", "**"],
59 "checkers": []
60};
61// Surcharger la configuration par les paramètres de la ligne de commande.
62for (const key of ["level", "patterns"]) {
63 if (undefined !== argv[key]) {
64 config[key] = argv[key];
65 }
66}
67if ("formatter" in argv || "output" in argv) {
68 const reporter = {};
69 if ("formatter" in argv) {
70 reporter.formatter = argv.formatter;
71 }
72 if ("output" in argv) {
73 reporter.output = argv.output;
74 }
75 config.reporter = reporter;
76}
77
78// Ajouter la configuration des linters.
79const linters = fs.readdirSync(path.join(__dirname, "../lib/wrapper/"))
80 .map((linter) => linter.slice(0, -3));
81const pkg = JSON.parse(fs.readFileSync("package.json", "utf-8"));
82for (const dependency in pkg.devDependencies) {
83 if (linters.includes(dependency)) {
84 const { configure } = require("../lib/wrapper/" + dependency);
85 const checker = configure();
86 if ("object" === checker.linters[dependency]) {
87 fs.writeFileSync(".metalint/" + dependency + ".json",
88 JSON.stringify(checker.linters[dependency],
89 null, 4) + "\n");
90 checker.linters = dependency;
91 }
92 config.checkers.push(checker);
93 }
94}
95
96fs.writeFileSync(".metalint/metalint.json",
97 JSON.stringify(config, null, 4) + "\n");
98log.info("metalint", "Successfully created .metalint/metalint.json file");