@definitelytyped/dtslint 0.0.197 → 0.0.199
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/lint.js +42 -71
- package/dist/lint.js.map +1 -1
- package/dist/util.d.ts +0 -1
- package/dist/util.js +1 -7
- package/dist/util.js.map +1 -1
- package/dtslint.json +0 -1
- package/package.json +2 -2
- package/src/lint.ts +48 -88
- package/src/util.ts +0 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/rules/expectRule.d.ts +0 -22
- package/dist/rules/expectRule.js +0 -387
- package/dist/rules/expectRule.js.map +0 -1
- package/dtslint-expect-only.json +0 -6
- package/src/rules/expectRule.ts +0 -455
- package/test/expect/expectType.ts.lint +0 -39
- package/test/expect/tsconfig.json +0 -1
- package/test/expect/tslint.json +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @definitelytyped/dtslint
|
|
2
2
|
|
|
3
|
+
## 0.0.199
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 30730f22: Use a direct require when finding estree import
|
|
8
|
+
|
|
9
|
+
## 0.0.198
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 3d6c2ffd: Port expect rule from tslint to eslint
|
|
14
|
+
|
|
3
15
|
## 0.0.197
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/lint.js
CHANGED
|
@@ -11,25 +11,19 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
11
11
|
const path_1 = require("path");
|
|
12
12
|
const tslint_1 = require("tslint");
|
|
13
13
|
const eslint_1 = require("eslint");
|
|
14
|
-
const expectRule_1 = require("./rules/expectRule");
|
|
15
14
|
const util_1 = require("./util");
|
|
16
15
|
async function lint(dirPath, minVersion, maxVersion, isLatest, expectOnly, tsLocal) {
|
|
17
16
|
const tsconfigPath = (0, path_1.join)(dirPath, "tsconfig.json");
|
|
18
|
-
const estree =
|
|
17
|
+
const estree = require(require.resolve("@typescript-eslint/typescript-estree", { paths: [dirPath] }));
|
|
19
18
|
process.env.TSESTREE_SINGLE_RUN = "true";
|
|
20
19
|
// TODO: To remove tslint, replace this with a ts.createProgram (probably)
|
|
21
20
|
const lintProgram = tslint_1.Linter.createProgram(tsconfigPath);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return errors;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const linter = new tslint_1.Linter({ fix: false, formatter: "stylish" }, lintProgram);
|
|
29
|
-
const configPath = expectOnly ? (0, path_1.join)(__dirname, "..", "dtslint-expect-only.json") : getConfigPath(dirPath);
|
|
21
|
+
// tslint no longer checks ExpectType; skip linting entirely if we're only checking ExpectType.
|
|
22
|
+
const linter = !expectOnly ? new tslint_1.Linter({ fix: false, formatter: "stylish" }, lintProgram) : undefined;
|
|
23
|
+
const configPath = getConfigPath(dirPath);
|
|
30
24
|
// TODO: To port expect-rule, eslint's config will also need to include [minVersion, maxVersion]
|
|
31
25
|
// Also: expect-rule should be renamed to expect-type or check-type or something
|
|
32
|
-
const config = getLintConfig(configPath
|
|
26
|
+
const config = getLintConfig(configPath);
|
|
33
27
|
const esfiles = [];
|
|
34
28
|
for (const file of lintProgram.getSourceFiles()) {
|
|
35
29
|
if (lintProgram.isSourceFileDefaultLibrary(file)) {
|
|
@@ -47,60 +41,49 @@ async function lint(dirPath, minVersion, maxVersion, isLatest, expectOnly, tsLoc
|
|
|
47
41
|
// External dependencies should have been handled by `testDependencies`;
|
|
48
42
|
// typesVersions should be handled in a separate lint
|
|
49
43
|
if (!isExternalDependency(file, dirPath, lintProgram) && (!isLatest || !isTypesVersionPath(fileName, dirPath))) {
|
|
50
|
-
linter.lint(fileName, text, config);
|
|
44
|
+
linter === null || linter === void 0 ? void 0 : linter.lint(fileName, text, config);
|
|
51
45
|
esfiles.push(fileName);
|
|
52
46
|
}
|
|
53
47
|
}
|
|
54
|
-
const result = linter.getResult();
|
|
55
|
-
let output = result.failures.length ? result.output : "";
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
const result = linter === null || linter === void 0 ? void 0 : linter.getResult();
|
|
49
|
+
let output = (result === null || result === void 0 ? void 0 : result.failures.length) ? result.output : "";
|
|
50
|
+
const versionsToTest = range(minVersion, maxVersion).map((versionName) => ({
|
|
51
|
+
versionName,
|
|
52
|
+
path: (0, utils_1.typeScriptPath)(versionName, tsLocal),
|
|
53
|
+
}));
|
|
54
|
+
const options = {
|
|
55
|
+
cwd: dirPath,
|
|
56
|
+
overrideConfig: {
|
|
57
|
+
overrides: [
|
|
58
|
+
{
|
|
59
|
+
files: ["*.ts", "*.cts", "*.mts", "*.tsx"],
|
|
60
|
+
rules: {
|
|
61
|
+
"@definitelytyped/expect": ["error", { versionsToTest }],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
if (expectOnly) {
|
|
68
|
+
// Disable the regular config, instead load only the plugins and use just the rule above.
|
|
69
|
+
// TODO(jakebailey): share this with eslint-plugin
|
|
70
|
+
options.useEslintrc = false;
|
|
71
|
+
options.overrideConfig.plugins = ["@definitelytyped", "@typescript-eslint", "jsdoc"];
|
|
72
|
+
const override = options.overrideConfig.overrides[0];
|
|
73
|
+
override.parser = "@typescript-eslint/parser";
|
|
74
|
+
override.parserOptions = {
|
|
75
|
+
project: true,
|
|
76
|
+
warnOnUnsupportedTypeScriptVersion: false,
|
|
77
|
+
};
|
|
65
78
|
}
|
|
79
|
+
const eslint = new eslint_1.ESLint(options);
|
|
80
|
+
const formatter = await eslint.loadFormatter("stylish");
|
|
81
|
+
const eresults = await eslint.lintFiles(esfiles);
|
|
82
|
+
output += formatter.format(eresults);
|
|
83
|
+
estree.clearCaches();
|
|
66
84
|
return output;
|
|
67
85
|
}
|
|
68
86
|
exports.lint = lint;
|
|
69
|
-
function testDependencies(version, dirPath, lintProgram, tsLocal) {
|
|
70
|
-
const tsconfigPath = (0, path_1.join)(dirPath, "tsconfig.json");
|
|
71
|
-
assert(version !== "local" || tsLocal);
|
|
72
|
-
const ts = require((0, utils_1.typeScriptPath)(version, tsLocal));
|
|
73
|
-
const program = (0, expectRule_1.getProgram)(tsconfigPath, ts, version, lintProgram);
|
|
74
|
-
const diagnostics = ts
|
|
75
|
-
.getPreEmitDiagnostics(program)
|
|
76
|
-
.filter((d) => !d.file || isExternalDependency(d.file, dirPath, program));
|
|
77
|
-
if (!diagnostics.length) {
|
|
78
|
-
return undefined;
|
|
79
|
-
}
|
|
80
|
-
const showDiags = ts.formatDiagnostics(diagnostics, {
|
|
81
|
-
getCanonicalFileName: (f) => f,
|
|
82
|
-
getCurrentDirectory: () => dirPath,
|
|
83
|
-
getNewLine: () => "\n",
|
|
84
|
-
});
|
|
85
|
-
const message = `Errors in typescript@${version} for external dependencies:\n${showDiags}`;
|
|
86
|
-
// Add an edge-case for someone needing to `npm install` in react when they first edit a DT module which depends on it - #226
|
|
87
|
-
const cannotFindDepsDiags = diagnostics.find((d) => d.code === 2307 && d.messageText.toString().includes("Cannot find module"));
|
|
88
|
-
if (cannotFindDepsDiags && cannotFindDepsDiags.file) {
|
|
89
|
-
return `
|
|
90
|
-
A module look-up failed, this often occurs when you need to run \`pnpm install\` on a dependent module before you can lint.
|
|
91
|
-
|
|
92
|
-
Before you debug, first try running:
|
|
93
|
-
|
|
94
|
-
pnpm install -w --filter '...{./types/${dirPath}}...'
|
|
95
|
-
|
|
96
|
-
Then re-run. Full error logs are below.
|
|
97
|
-
|
|
98
|
-
${message}`;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return message;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
87
|
function isExternalDependency(file, dirPath, program) {
|
|
105
88
|
return !startsWithDirectory(file.fileName, dirPath) || program.isSourceFileFromExternalLibrary(file);
|
|
106
89
|
}
|
|
@@ -157,7 +140,7 @@ exports.checkTslintJson = checkTslintJson;
|
|
|
157
140
|
function getConfigPath(dirPath) {
|
|
158
141
|
return (0, path_1.join)(dirPath, "tslint.json");
|
|
159
142
|
}
|
|
160
|
-
function getLintConfig(expectedConfigPath
|
|
143
|
+
function getLintConfig(expectedConfigPath) {
|
|
161
144
|
const configExists = fs_1.default.existsSync(expectedConfigPath);
|
|
162
145
|
const configPath = configExists ? expectedConfigPath : (0, path_1.join)(__dirname, "..", "dtslint.json");
|
|
163
146
|
// Second param to `findConfiguration` doesn't matter, since config path is provided.
|
|
@@ -165,18 +148,6 @@ function getLintConfig(expectedConfigPath, tsconfigPath, minVersion, maxVersion,
|
|
|
165
148
|
if (!config) {
|
|
166
149
|
throw new Error(`Could not load config at ${configPath}`);
|
|
167
150
|
}
|
|
168
|
-
const expectRule = config.rules.get("expect");
|
|
169
|
-
if (!expectRule || expectRule.ruleSeverity !== "error") {
|
|
170
|
-
throw new Error("'expect' rule should be enabled, else compile errors are ignored");
|
|
171
|
-
}
|
|
172
|
-
if (expectRule) {
|
|
173
|
-
const versionsToTest = range(minVersion, maxVersion).map((versionName) => ({
|
|
174
|
-
versionName,
|
|
175
|
-
path: (0, utils_1.typeScriptPath)(versionName, tsLocal),
|
|
176
|
-
}));
|
|
177
|
-
const expectOptions = { tsconfigPath, versionsToTest };
|
|
178
|
-
expectRule.ruleArguments = [expectOptions];
|
|
179
|
-
}
|
|
180
151
|
return config;
|
|
181
152
|
}
|
|
182
153
|
function range(minVersion, maxVersion) {
|
package/dist/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAyE;AACzE,kDAAsE;AACtE,iCAAkC;AAClC,4CAAoB;AACpB,+BAAoD;AACpD,mCAA+C;AAC/C,mCAAgC;AAKhC,
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -3,5 +3,4 @@ export declare function packageNameFromPath(path: string): string;
|
|
|
3
3
|
export declare function readJson(path: string): any;
|
|
4
4
|
export declare function failure(ruleName: string, s: string): string;
|
|
5
5
|
export declare function getCompilerOptions(dirPath: string): ts.CompilerOptions;
|
|
6
|
-
export declare function last<T>(a: readonly T[]): T;
|
|
7
6
|
export declare function isMainFile(fileName: string, allowNested: boolean): boolean;
|
package/dist/util.js
CHANGED
|
@@ -3,8 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isMainFile = exports.
|
|
7
|
-
const assert = require("assert");
|
|
6
|
+
exports.isMainFile = exports.getCompilerOptions = exports.failure = exports.readJson = exports.packageNameFromPath = void 0;
|
|
8
7
|
const fs_1 = __importDefault(require("fs"));
|
|
9
8
|
const path_1 = require("path");
|
|
10
9
|
const stripJsonComments = require("strip-json-comments");
|
|
@@ -30,11 +29,6 @@ function getCompilerOptions(dirPath) {
|
|
|
30
29
|
return readJson(tsconfigPath).compilerOptions;
|
|
31
30
|
}
|
|
32
31
|
exports.getCompilerOptions = getCompilerOptions;
|
|
33
|
-
function last(a) {
|
|
34
|
-
assert(a.length !== 0);
|
|
35
|
-
return a[a.length - 1];
|
|
36
|
-
}
|
|
37
|
-
exports.last = last;
|
|
38
32
|
function isMainFile(fileName, allowNested) {
|
|
39
33
|
// Linter may be run with cwd of the package. We want `index.d.ts` but not `submodule/index.d.ts` to match.
|
|
40
34
|
if (fileName === "index.d.ts") {
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,+BAA+C;AAC/C,yDAA0D;AAG1D,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,eAAQ,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC;AAHD,kDAGC;AACD,SAAgB,QAAQ,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAHD,4BAGC;AAED,SAAgB,OAAO,CAAC,QAAgB,EAAE,CAAS;IACjD,OAAO,GAAG,CAAC,8FAA8F,QAAQ,KAAK,CAAC;AACzH,CAAC;AAFD,0BAEC;AAED,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACpD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;KAC9D;IACD,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,eAAqC,CAAC;AACtE,CAAC;AAND,gDAMC;AAED,SAAgB,UAAU,CAAC,QAAgB,EAAE,WAAoB;IAC/D,2GAA2G;IAC3G,IAAI,QAAQ,KAAK,YAAY,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAA,eAAQ,EAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;QACvC,OAAO,KAAK,CAAC;KACd;IAED,IAAI,MAAM,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;IAC/B,sDAAsD;IACtD,oEAAoE;IACpE,IAAI,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,CAAC,EAAE;QACxD,MAAM,GAAG,IAAA,cAAO,EAAC,MAAM,CAAC,CAAC;KAC1B;IAED,iEAAiE;IACjE,OAAO,IAAA,eAAQ,EAAC,IAAA,cAAO,EAAC,MAAM,CAAC,CAAC,KAAK,OAAO,CAAC;AAC/C,CAAC;AAnBD,gCAmBC"}
|
package/dtslint.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@definitelytyped/dtslint",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.199",
|
|
4
4
|
"description": "Runs tests on TypeScript definition files",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"bin": "./dist/index.js",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"tslint": "5.14.0",
|
|
31
31
|
"yargs": "^17.7.2",
|
|
32
32
|
"@definitelytyped/dts-critic": "0.0.191",
|
|
33
|
-
"@definitelytyped/typescript-versions": "0.0.182",
|
|
34
33
|
"@definitelytyped/header-parser": "0.0.190",
|
|
34
|
+
"@definitelytyped/typescript-versions": "0.0.182",
|
|
35
35
|
"@definitelytyped/utils": "0.0.188"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
package/src/lint.ts
CHANGED
|
@@ -9,7 +9,6 @@ import * as TsType from "typescript";
|
|
|
9
9
|
type Configuration = typeof Configuration;
|
|
10
10
|
type IConfigurationFile = Configuration.IConfigurationFile;
|
|
11
11
|
|
|
12
|
-
import { getProgram, Options as ExpectOptions } from "./rules/expectRule";
|
|
13
12
|
import { readJson } from "./util";
|
|
14
13
|
|
|
15
14
|
export async function lint(
|
|
@@ -21,23 +20,19 @@ export async function lint(
|
|
|
21
20
|
tsLocal: string | undefined,
|
|
22
21
|
): Promise<string | undefined> {
|
|
23
22
|
const tsconfigPath = joinPaths(dirPath, "tsconfig.json");
|
|
24
|
-
const estree =
|
|
23
|
+
const estree = require(
|
|
24
|
+
require.resolve("@typescript-eslint/typescript-estree", { paths: [dirPath] }),
|
|
25
|
+
) as typeof import("@typescript-eslint/typescript-estree");
|
|
25
26
|
process.env.TSESTREE_SINGLE_RUN = "true";
|
|
26
27
|
// TODO: To remove tslint, replace this with a ts.createProgram (probably)
|
|
27
28
|
const lintProgram = Linter.createProgram(tsconfigPath);
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return errors;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const linter = new Linter({ fix: false, formatter: "stylish" }, lintProgram);
|
|
37
|
-
const configPath = expectOnly ? joinPaths(__dirname, "..", "dtslint-expect-only.json") : getConfigPath(dirPath);
|
|
30
|
+
// tslint no longer checks ExpectType; skip linting entirely if we're only checking ExpectType.
|
|
31
|
+
const linter = !expectOnly ? new Linter({ fix: false, formatter: "stylish" }, lintProgram) : undefined;
|
|
32
|
+
const configPath = getConfigPath(dirPath);
|
|
38
33
|
// TODO: To port expect-rule, eslint's config will also need to include [minVersion, maxVersion]
|
|
39
34
|
// Also: expect-rule should be renamed to expect-type or check-type or something
|
|
40
|
-
const config = getLintConfig(configPath
|
|
35
|
+
const config = getLintConfig(configPath);
|
|
41
36
|
const esfiles = [];
|
|
42
37
|
|
|
43
38
|
for (const file of lintProgram.getSourceFiles()) {
|
|
@@ -58,69 +53,52 @@ export async function lint(
|
|
|
58
53
|
// External dependencies should have been handled by `testDependencies`;
|
|
59
54
|
// typesVersions should be handled in a separate lint
|
|
60
55
|
if (!isExternalDependency(file, dirPath, lintProgram) && (!isLatest || !isTypesVersionPath(fileName, dirPath))) {
|
|
61
|
-
linter
|
|
56
|
+
linter?.lint(fileName, text, config);
|
|
62
57
|
esfiles.push(fileName);
|
|
63
58
|
}
|
|
64
59
|
}
|
|
65
|
-
const result = linter
|
|
66
|
-
let output = result
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
.
|
|
94
|
-
|
|
95
|
-
|
|
60
|
+
const result = linter?.getResult();
|
|
61
|
+
let output = result?.failures.length ? result.output : "";
|
|
62
|
+
|
|
63
|
+
const versionsToTest = range(minVersion, maxVersion).map((versionName) => ({
|
|
64
|
+
versionName,
|
|
65
|
+
path: typeScriptPath(versionName, tsLocal),
|
|
66
|
+
}));
|
|
67
|
+
|
|
68
|
+
const options: ESLint.Options = {
|
|
69
|
+
cwd: dirPath,
|
|
70
|
+
overrideConfig: {
|
|
71
|
+
overrides: [
|
|
72
|
+
{
|
|
73
|
+
files: ["*.ts", "*.cts", "*.mts", "*.tsx"],
|
|
74
|
+
rules: {
|
|
75
|
+
"@definitelytyped/expect": ["error", { versionsToTest }],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
if (expectOnly) {
|
|
83
|
+
// Disable the regular config, instead load only the plugins and use just the rule above.
|
|
84
|
+
// TODO(jakebailey): share this with eslint-plugin
|
|
85
|
+
options.useEslintrc = false;
|
|
86
|
+
options.overrideConfig!.plugins = ["@definitelytyped", "@typescript-eslint", "jsdoc"];
|
|
87
|
+
const override = options.overrideConfig!.overrides![0];
|
|
88
|
+
override.parser = "@typescript-eslint/parser";
|
|
89
|
+
override.parserOptions = {
|
|
90
|
+
project: true,
|
|
91
|
+
warnOnUnsupportedTypeScriptVersion: false,
|
|
92
|
+
};
|
|
96
93
|
}
|
|
97
94
|
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
const eslint = new ESLint(options);
|
|
96
|
+
const formatter = await eslint.loadFormatter("stylish");
|
|
97
|
+
const eresults = await eslint.lintFiles(esfiles);
|
|
98
|
+
output += formatter.format(eresults);
|
|
99
|
+
estree.clearCaches();
|
|
103
100
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// Add an edge-case for someone needing to `npm install` in react when they first edit a DT module which depends on it - #226
|
|
107
|
-
const cannotFindDepsDiags = diagnostics.find(
|
|
108
|
-
(d) => d.code === 2307 && d.messageText.toString().includes("Cannot find module"),
|
|
109
|
-
);
|
|
110
|
-
if (cannotFindDepsDiags && cannotFindDepsDiags.file) {
|
|
111
|
-
return `
|
|
112
|
-
A module look-up failed, this often occurs when you need to run \`pnpm install\` on a dependent module before you can lint.
|
|
113
|
-
|
|
114
|
-
Before you debug, first try running:
|
|
115
|
-
|
|
116
|
-
pnpm install -w --filter '...{./types/${dirPath}}...'
|
|
117
|
-
|
|
118
|
-
Then re-run. Full error logs are below.
|
|
119
|
-
|
|
120
|
-
${message}`;
|
|
121
|
-
} else {
|
|
122
|
-
return message;
|
|
123
|
-
}
|
|
101
|
+
return output;
|
|
124
102
|
}
|
|
125
103
|
|
|
126
104
|
export function isExternalDependency(file: TsType.SourceFile, dirPath: string, program: TsType.Program): boolean {
|
|
@@ -191,13 +169,7 @@ function getConfigPath(dirPath: string): string {
|
|
|
191
169
|
return joinPaths(dirPath, "tslint.json");
|
|
192
170
|
}
|
|
193
171
|
|
|
194
|
-
function getLintConfig(
|
|
195
|
-
expectedConfigPath: string,
|
|
196
|
-
tsconfigPath: string,
|
|
197
|
-
minVersion: TsVersion,
|
|
198
|
-
maxVersion: TsVersion,
|
|
199
|
-
tsLocal: string | undefined,
|
|
200
|
-
): IConfigurationFile {
|
|
172
|
+
function getLintConfig(expectedConfigPath: string): IConfigurationFile {
|
|
201
173
|
const configExists = fs.existsSync(expectedConfigPath);
|
|
202
174
|
const configPath = configExists ? expectedConfigPath : joinPaths(__dirname, "..", "dtslint.json");
|
|
203
175
|
// Second param to `findConfiguration` doesn't matter, since config path is provided.
|
|
@@ -206,18 +178,6 @@ function getLintConfig(
|
|
|
206
178
|
throw new Error(`Could not load config at ${configPath}`);
|
|
207
179
|
}
|
|
208
180
|
|
|
209
|
-
const expectRule = config.rules.get("expect");
|
|
210
|
-
if (!expectRule || expectRule.ruleSeverity !== "error") {
|
|
211
|
-
throw new Error("'expect' rule should be enabled, else compile errors are ignored");
|
|
212
|
-
}
|
|
213
|
-
if (expectRule) {
|
|
214
|
-
const versionsToTest = range(minVersion, maxVersion).map((versionName) => ({
|
|
215
|
-
versionName,
|
|
216
|
-
path: typeScriptPath(versionName, tsLocal),
|
|
217
|
-
}));
|
|
218
|
-
const expectOptions: ExpectOptions = { tsconfigPath, versionsToTest };
|
|
219
|
-
expectRule.ruleArguments = [expectOptions];
|
|
220
|
-
}
|
|
221
181
|
return config;
|
|
222
182
|
}
|
|
223
183
|
|
package/src/util.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import assert = require("assert");
|
|
2
1
|
import fs from "fs";
|
|
3
2
|
import { basename, dirname, join } from "path";
|
|
4
3
|
import stripJsonComments = require("strip-json-comments");
|
|
@@ -25,11 +24,6 @@ export function getCompilerOptions(dirPath: string): ts.CompilerOptions {
|
|
|
25
24
|
return readJson(tsconfigPath).compilerOptions as ts.CompilerOptions;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
export function last<T>(a: readonly T[]): T {
|
|
29
|
-
assert(a.length !== 0);
|
|
30
|
-
return a[a.length - 1];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
27
|
export function isMainFile(fileName: string, allowNested: boolean) {
|
|
34
28
|
// Linter may be run with cwd of the package. We want `index.d.ts` but not `submodule/index.d.ts` to match.
|
|
35
29
|
if (fileName === "index.d.ts") {
|