1 | #!/usr/bin/env node
|
2 |
|
3 | "use strict";
|
4 |
|
5 | const fs = require("fs");
|
6 | const path = require("path");
|
7 | const log = require("npmlog");
|
8 | const yargs = require("yargs");
|
9 |
|
10 | const 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 |
|
37 | if (argv.help) {
|
38 | process.stdout.write(fs.readFileSync(path.join(__dirname,
|
39 | "/../help/init.txt")));
|
40 | process.exit(0);
|
41 | }
|
42 |
|
43 | if (!fs.existsSync("package.json")) {
|
44 | log.error("metalint", "package.json non-trouvé.");
|
45 | process.exit(1);
|
46 | }
|
47 |
|
48 | if (fs.existsSync(".metalint/metalint.json")) {
|
49 | log.warn("metalint", "Configuration déjà présente.");
|
50 | process.exit(0);
|
51 | }
|
52 |
|
53 |
|
54 | fs.mkdirSync(".metalint");
|
55 |
|
56 |
|
57 | const config = {
|
58 | "patterns": ["!/.git/", "!/node_modules/", "**"],
|
59 | "checkers": []
|
60 | };
|
61 |
|
62 | for (const key of ["level", "patterns"]) {
|
63 | if (undefined !== argv[key]) {
|
64 | config[key] = argv[key];
|
65 | }
|
66 | }
|
67 | if ("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 |
|
79 | const linters = fs.readdirSync(path.join(__dirname, "../lib/wrapper/"))
|
80 | .map((linter) => linter.slice(0, -3));
|
81 | const pkg = JSON.parse(fs.readFileSync("package.json", "utf-8"));
|
82 | for (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 |
|
96 | fs.writeFileSync(".metalint/metalint.json",
|
97 | JSON.stringify(config, null, 4) + "\n");
|
98 | log.info("metalint", "Successfully created .metalint/metalint.json file");
|