UNPKG

2.5 kBJavaScriptView Raw
1const tslint = require("tslint");
2const path = require("path");
3
4const packageName = process.argv[2];
5const watch = process.argv[3] === "watch";
6const tsConfigPath = process.argv[4];
7
8let projectPath = "";
9let split = process.cwd().split(/[\\/]/);
10if (split[split.length - 1] === packageName) {
11 projectPath = path.resolve(process.cwd(), "../..");
12}
13else {
14 projectPath = process.cwd()
15}
16
17const tsconfigFile = tsConfigPath || path.resolve(projectPath, "packages", packageName, "tsconfig.json");
18const configFile = path.resolve(projectPath, "packages", packageName, "tslint.json");
19
20process.on("message", (changedFiles) => {
21 const program = tslint.Linter.createProgram(tsconfigFile, path.dirname(tsconfigFile));
22 const linter = new tslint.Linter({formatter: "json", fix: false}, program);
23
24 const prepareSourceFiles = (
25 changedFiles.length > 0 ? changedFiles : program.getSourceFiles().map(item => item.fileName)
26 ).map(file => program.getSourceFile(file)).filter(item => !!item);
27
28 const sourceFiles = [];
29 for (const item of prepareSourceFiles) {
30 if (sourceFiles.every(item1 => item1.fileName !== item.fileName)) {
31 sourceFiles.push(item);
32 }
33 }
34
35 for (const sourceFile of sourceFiles) {
36 if (/\.d\.ts$/.test(sourceFile.fileName)) continue;
37 if (!path.resolve(sourceFile.fileName).startsWith(path.resolve(path.dirname(tsconfigFile)))) continue;
38
39 const config = tslint.Configuration.findConfiguration(configFile, sourceFile.fileName);
40 linter.lint(sourceFile.fileName, sourceFile.getFullText(), config.results);
41
42 const result = linter.getResult();
43
44 for (const failure of result.failures) {
45 if (failure.getFileName() !== sourceFile.fileName) {
46 continue;
47 }
48
49 const severity = failure.getRuleSeverity();
50 const message = failure.getFailure();
51 const rule = failure.getRuleName();
52 const fileName = failure.getFileName();
53 const lineNumber = failure.getStartPosition().getLineAndCharacter().line + 1;
54 const charNumber = failure.getStartPosition().getLineAndCharacter().character + 1;
55
56 const resultMessage = `${fileName}(${lineNumber},${charNumber}): ${severity}: ${message} (${rule})`;
57 sendMessage(resultMessage);
58 }
59 }
60
61 process.send("finish", err => {
62 if (err) throw err;
63 });
64
65 if (!watch) process.exit();
66});
67
68function sendMessage(message) {
69 process.send(message, err => {
70 if (err) throw err;
71 });
72}
\No newline at end of file