@definitelytyped/dtslint 0.0.197 → 0.0.198
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 +6 -0
- package/dist/lint.js +41 -70
- 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 +45 -87
- 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/dist/rules/expectRule.js
DELETED
|
@@ -1,387 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.getProgram = exports.Rule = void 0;
|
|
27
|
-
const fs_1 = require("fs");
|
|
28
|
-
const os = require("os");
|
|
29
|
-
const path_1 = require("path");
|
|
30
|
-
const Lint = __importStar(require("tslint"));
|
|
31
|
-
const TsType = __importStar(require("typescript"));
|
|
32
|
-
const util_1 = require("../util");
|
|
33
|
-
// Based on https://github.com/danvk/typings-checker
|
|
34
|
-
const cacheDir = (0, path_1.join)(os.homedir(), ".dts");
|
|
35
|
-
const perfDir = (0, path_1.join)(os.homedir(), ".dts", "perf");
|
|
36
|
-
class Rule extends Lint.Rules.TypedRule {
|
|
37
|
-
// TODO: If this naming convention is required by tslint, dump it when switching to eslint
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
39
|
-
static FAILURE_STRING(expectedVersion, expectedType, actualType) {
|
|
40
|
-
return `TypeScript@${expectedVersion} expected type to be:\n ${expectedType}\ngot:\n ${actualType}`;
|
|
41
|
-
}
|
|
42
|
-
applyWithProgram(sourceFile, lintProgram) {
|
|
43
|
-
const options = this.ruleArguments[0];
|
|
44
|
-
if (!options) {
|
|
45
|
-
return this.applyWithFunction(sourceFile, (ctx) => walk(ctx, lintProgram, TsType, "next", /*nextHigherVersion*/ undefined));
|
|
46
|
-
}
|
|
47
|
-
const { tsconfigPath, versionsToTest } = options;
|
|
48
|
-
const getFailures = ({ versionName, path }, nextHigherVersion, writeOutput) => {
|
|
49
|
-
const ts = require(path);
|
|
50
|
-
ts.performance.enable();
|
|
51
|
-
const program = getProgram(tsconfigPath, ts, versionName, lintProgram);
|
|
52
|
-
const failures = this.applyWithFunction(sourceFile, (ctx) => walk(ctx, program, ts, versionName, nextHigherVersion));
|
|
53
|
-
if (writeOutput) {
|
|
54
|
-
const packageName = (0, path_1.basename)((0, path_1.dirname)(tsconfigPath));
|
|
55
|
-
if (!packageName.match(/v\d+/) && !packageName.match(/ts\d\.\d/)) {
|
|
56
|
-
const d = {
|
|
57
|
-
[packageName]: extendedDiagnostics(ts, program),
|
|
58
|
-
};
|
|
59
|
-
if (!(0, fs_1.existsSync)(cacheDir)) {
|
|
60
|
-
(0, fs_1.mkdirSync)(cacheDir);
|
|
61
|
-
}
|
|
62
|
-
if (!(0, fs_1.existsSync)(perfDir)) {
|
|
63
|
-
(0, fs_1.mkdirSync)(perfDir);
|
|
64
|
-
}
|
|
65
|
-
(0, fs_1.writeFileSync)((0, path_1.join)(perfDir, `${packageName}.json`), JSON.stringify(d));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return failures;
|
|
69
|
-
};
|
|
70
|
-
const maxFailures = getFailures((0, util_1.last)(versionsToTest), undefined, /*writeOutput*/ true);
|
|
71
|
-
if (maxFailures.length) {
|
|
72
|
-
return maxFailures;
|
|
73
|
-
}
|
|
74
|
-
// As an optimization, check the earliest version for errors;
|
|
75
|
-
// assume that if it works on min and max, it works for everything in between.
|
|
76
|
-
const minFailures = getFailures(versionsToTest[0], undefined, /*writeOutput*/ false);
|
|
77
|
-
if (!minFailures.length) {
|
|
78
|
-
return [];
|
|
79
|
-
}
|
|
80
|
-
// There are no failures in the max version, but there are failures in the min version.
|
|
81
|
-
// Work backward to find the newest version with failures.
|
|
82
|
-
for (let i = versionsToTest.length - 2; i >= 0; i--) {
|
|
83
|
-
const failures = getFailures(versionsToTest[i], options.versionsToTest[i + 1].versionName, /*writeOutput*/ false);
|
|
84
|
-
if (failures.length) {
|
|
85
|
-
return failures;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
throw new Error(); // unreachable -- at least the min version should have failures.
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
exports.Rule = Rule;
|
|
92
|
-
Rule.metadata = {
|
|
93
|
-
ruleName: "expect",
|
|
94
|
-
description: "Asserts types with $ExpectType.",
|
|
95
|
-
optionsDescription: "Not configurable.",
|
|
96
|
-
options: null,
|
|
97
|
-
type: "functionality",
|
|
98
|
-
typescriptOnly: true,
|
|
99
|
-
requiresTypeInfo: true,
|
|
100
|
-
};
|
|
101
|
-
Rule.FAILURE_STRING_DUPLICATE_ASSERTION = "This line has 2 $ExpectType assertions.";
|
|
102
|
-
Rule.FAILURE_STRING_ASSERTION_MISSING_NODE = "Can not match a node to this assertion. If this is a multiline function call, ensure the assertion is on the line above.";
|
|
103
|
-
////////// copied from executeCommandLine /////
|
|
104
|
-
function extendedDiagnostics(ts, program) {
|
|
105
|
-
const caches = program.getRelationCacheSizes();
|
|
106
|
-
const perf = {
|
|
107
|
-
files: program.getSourceFiles().length,
|
|
108
|
-
...countLines(ts, program),
|
|
109
|
-
identifiers: program.getIdentifierCount(),
|
|
110
|
-
symbols: program.getSymbolCount(),
|
|
111
|
-
types: program.getTypeCount(),
|
|
112
|
-
instantiations: program.getInstantiationCount(),
|
|
113
|
-
memory: ts.sys.getMemoryUsage ? ts.sys.getMemoryUsage() : 0,
|
|
114
|
-
"assignability cache size": caches.assignable,
|
|
115
|
-
"identity cache size": caches.identity,
|
|
116
|
-
"subtype cache size": caches.subtype,
|
|
117
|
-
"strict subtype cache size": caches.strictSubtype,
|
|
118
|
-
};
|
|
119
|
-
ts.performance.forEachMeasure((name, duration) => {
|
|
120
|
-
perf[name] = duration;
|
|
121
|
-
});
|
|
122
|
-
perf["total time"] = perf.Program + perf.Bind + perf.Check; // and maybe parse?? not sure, I think it's included in Program
|
|
123
|
-
return perf;
|
|
124
|
-
}
|
|
125
|
-
function countLines(ts, program) {
|
|
126
|
-
const counts = {
|
|
127
|
-
library: 0,
|
|
128
|
-
definitions: 0,
|
|
129
|
-
typescript: 0,
|
|
130
|
-
javascript: 0,
|
|
131
|
-
json: 0,
|
|
132
|
-
other: 0,
|
|
133
|
-
};
|
|
134
|
-
for (const file of program.getSourceFiles()) {
|
|
135
|
-
counts[getCountKey(ts, program, file)] += ts.getLineStarts(file).length;
|
|
136
|
-
}
|
|
137
|
-
return counts;
|
|
138
|
-
}
|
|
139
|
-
function getCountKey(ts, program, file) {
|
|
140
|
-
if (program.isSourceFileDefaultLibrary(file)) {
|
|
141
|
-
return "library";
|
|
142
|
-
}
|
|
143
|
-
else if (file.isDeclarationFile) {
|
|
144
|
-
return "definitions";
|
|
145
|
-
}
|
|
146
|
-
const path = file.path;
|
|
147
|
-
if (ts.fileExtensionIsOneOf(path, ts.supportedTSExtensionsFlat)) {
|
|
148
|
-
return "typescript";
|
|
149
|
-
}
|
|
150
|
-
else if (ts.fileExtensionIsOneOf(path, ts.supportedJSExtensionsFlat)) {
|
|
151
|
-
return "javascript";
|
|
152
|
-
}
|
|
153
|
-
else if (ts.fileExtensionIs(path, ts.Extension.Json)) {
|
|
154
|
-
return "json";
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
return "other";
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const programCache = new WeakMap();
|
|
161
|
-
/** Maps a tslint Program to one created with the version specified in `options`. */
|
|
162
|
-
function getProgram(configFile, ts, versionName, lintProgram) {
|
|
163
|
-
let versionToProgram = programCache.get(lintProgram);
|
|
164
|
-
if (versionToProgram === undefined) {
|
|
165
|
-
versionToProgram = new Map();
|
|
166
|
-
programCache.set(lintProgram, versionToProgram);
|
|
167
|
-
}
|
|
168
|
-
let newProgram = versionToProgram.get(versionName);
|
|
169
|
-
if (newProgram === undefined) {
|
|
170
|
-
newProgram = createProgram(configFile, ts);
|
|
171
|
-
versionToProgram.set(versionName, newProgram);
|
|
172
|
-
}
|
|
173
|
-
return newProgram;
|
|
174
|
-
}
|
|
175
|
-
exports.getProgram = getProgram;
|
|
176
|
-
function createProgram(configFile, ts) {
|
|
177
|
-
var _a;
|
|
178
|
-
const projectDirectory = (0, path_1.dirname)(configFile);
|
|
179
|
-
const { config } = ts.readConfigFile(configFile, ts.sys.readFile);
|
|
180
|
-
const parseConfigHost = {
|
|
181
|
-
fileExists: fs_1.existsSync,
|
|
182
|
-
readDirectory: ts.sys.readDirectory,
|
|
183
|
-
readFile: (file) => (0, fs_1.readFileSync)(file, "utf8"),
|
|
184
|
-
useCaseSensitiveFileNames: true,
|
|
185
|
-
};
|
|
186
|
-
const parsed = ts.parseJsonConfigFileContent(config, parseConfigHost, (0, path_1.resolve)(projectDirectory), {
|
|
187
|
-
noEmit: true,
|
|
188
|
-
});
|
|
189
|
-
if (((_a = config.compilerOptions) === null || _a === void 0 ? void 0 : _a.module) === "node16" && parsed.options.module === undefined) {
|
|
190
|
-
// TypeScript version is too old to handle the "node16" module option,
|
|
191
|
-
// but we can run tests falling back to commonjs/node.
|
|
192
|
-
parsed.options.module = ts.ModuleKind.CommonJS;
|
|
193
|
-
parsed.options.moduleResolution = ts.ModuleResolutionKind.NodeJs;
|
|
194
|
-
}
|
|
195
|
-
const host = ts.createCompilerHost(parsed.options, true);
|
|
196
|
-
return ts.createProgram(parsed.fileNames, parsed.options, host);
|
|
197
|
-
}
|
|
198
|
-
function walk(ctx, program, ts, versionName, nextHigherVersion) {
|
|
199
|
-
const { fileName } = ctx.sourceFile;
|
|
200
|
-
const sourceFile = program.getSourceFile(fileName);
|
|
201
|
-
if (!sourceFile) {
|
|
202
|
-
ctx.addFailure(0, 0, `Program source files differ between TypeScript versions. This may be a dtslint bug.\n` +
|
|
203
|
-
`Expected to find a file '${fileName}' present in ${TsType.version}, but did not find it in ts@${versionName}.`);
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
const checker = program.getTypeChecker();
|
|
207
|
-
// Don't care about emit errors.
|
|
208
|
-
const diagnostics = ts.getPreEmitDiagnostics(program, sourceFile);
|
|
209
|
-
for (const diagnostic of diagnostics) {
|
|
210
|
-
addDiagnosticFailure(diagnostic);
|
|
211
|
-
}
|
|
212
|
-
if (sourceFile.isDeclarationFile || !sourceFile.text.includes("$ExpectType")) {
|
|
213
|
-
// Normal file.
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const { typeAssertions, duplicates } = parseAssertions(sourceFile);
|
|
217
|
-
for (const line of duplicates) {
|
|
218
|
-
addFailureAtLine(line, Rule.FAILURE_STRING_DUPLICATE_ASSERTION);
|
|
219
|
-
}
|
|
220
|
-
const { unmetExpectations, unusedAssertions } = getExpectTypeFailures(sourceFile, typeAssertions, checker, ts);
|
|
221
|
-
for (const { node, expected, actual } of unmetExpectations) {
|
|
222
|
-
ctx.addFailureAtNode(node, Rule.FAILURE_STRING(versionName, expected, actual));
|
|
223
|
-
}
|
|
224
|
-
for (const line of unusedAssertions) {
|
|
225
|
-
addFailureAtLine(line, Rule.FAILURE_STRING_ASSERTION_MISSING_NODE);
|
|
226
|
-
}
|
|
227
|
-
function addDiagnosticFailure(diagnostic) {
|
|
228
|
-
const intro = getIntro();
|
|
229
|
-
if (diagnostic.file === sourceFile) {
|
|
230
|
-
const msg = `${intro}\n${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`;
|
|
231
|
-
ctx.addFailureAt(diagnostic.start, diagnostic.length, msg);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
ctx.addFailureAt(0, 0, `${intro}\n${fileName}${diagnostic.messageText}`);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
function getIntro() {
|
|
238
|
-
if (nextHigherVersion === undefined) {
|
|
239
|
-
return `TypeScript@${versionName} compile error: `;
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
const msg = `Compile error in typescript@${versionName} but not in typescript@${nextHigherVersion}.\n`;
|
|
243
|
-
const explain = nextHigherVersion === "next"
|
|
244
|
-
? "TypeScript@next features not yet supported."
|
|
245
|
-
: `Fix by adding '"minimumTypeScriptVersion": "${nextHigherVersion}"' to package.json.`;
|
|
246
|
-
return msg + explain;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
function addFailureAtLine(line, failure) {
|
|
250
|
-
const start = sourceFile.getPositionOfLineAndCharacter(line, 0);
|
|
251
|
-
let end = start + sourceFile.text.split("\n")[line].length;
|
|
252
|
-
if (sourceFile.text[end - 1] === "\r") {
|
|
253
|
-
end--;
|
|
254
|
-
}
|
|
255
|
-
ctx.addFailure(start, end, `TypeScript@${versionName}: ${failure}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
function parseAssertions(sourceFile) {
|
|
259
|
-
const typeAssertions = new Map();
|
|
260
|
-
const duplicates = [];
|
|
261
|
-
const { text } = sourceFile;
|
|
262
|
-
const commentRegexp = /\/\/(.*)/g;
|
|
263
|
-
const lineStarts = sourceFile.getLineStarts();
|
|
264
|
-
let curLine = 0;
|
|
265
|
-
while (true) {
|
|
266
|
-
const commentMatch = commentRegexp.exec(text);
|
|
267
|
-
if (commentMatch === null) {
|
|
268
|
-
break;
|
|
269
|
-
}
|
|
270
|
-
// Match on the contents of that comment so we do nothing in a commented-out assertion,
|
|
271
|
-
// i.e. `// foo; // $ExpectType number`
|
|
272
|
-
if (!commentMatch[1].startsWith(" $ExpectType ")) {
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
275
|
-
const line = getLine(commentMatch.index);
|
|
276
|
-
const expectedType = commentMatch[1].slice(" $ExpectType ".length);
|
|
277
|
-
// Don't bother with the assertion if there are 2 assertions on 1 line. Just fail for the duplicate.
|
|
278
|
-
if (typeAssertions.delete(line)) {
|
|
279
|
-
duplicates.push(line);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
typeAssertions.set(line, expectedType);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return { typeAssertions, duplicates };
|
|
286
|
-
function getLine(pos) {
|
|
287
|
-
// advance curLine to be the line preceding 'pos'
|
|
288
|
-
while (lineStarts[curLine + 1] <= pos) {
|
|
289
|
-
curLine++;
|
|
290
|
-
}
|
|
291
|
-
// If this is the first token on the line, it applies to the next line.
|
|
292
|
-
// Otherwise, it applies to the text to the left of it.
|
|
293
|
-
return isFirstOnLine(text, lineStarts[curLine], pos) ? curLine + 1 : curLine;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
function isFirstOnLine(text, lineStart, pos) {
|
|
297
|
-
for (let i = lineStart; i < pos; i++) {
|
|
298
|
-
if (text[i] !== " ") {
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
return true;
|
|
303
|
-
}
|
|
304
|
-
function matchReadonlyArray(actual, expected) {
|
|
305
|
-
if (!(/\breadonly\b/.test(actual) && /\bReadonlyArray\b/.test(expected)))
|
|
306
|
-
return false;
|
|
307
|
-
const readonlyArrayRegExp = /\bReadonlyArray</y;
|
|
308
|
-
const readonlyModifierRegExp = /\breadonly /y;
|
|
309
|
-
// A<ReadonlyArray<B<ReadonlyArray<C>>>>
|
|
310
|
-
// A<readonly B<readonly C[]>[]>
|
|
311
|
-
let expectedPos = 0;
|
|
312
|
-
let actualPos = 0;
|
|
313
|
-
let depth = 0;
|
|
314
|
-
while (expectedPos < expected.length && actualPos < actual.length) {
|
|
315
|
-
const expectedChar = expected.charAt(expectedPos);
|
|
316
|
-
const actualChar = actual.charAt(actualPos);
|
|
317
|
-
if (expectedChar === actualChar) {
|
|
318
|
-
expectedPos++;
|
|
319
|
-
actualPos++;
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
322
|
-
// check for end of readonly array
|
|
323
|
-
if (depth > 0 &&
|
|
324
|
-
expectedChar === ">" &&
|
|
325
|
-
actualChar === "[" &&
|
|
326
|
-
actualPos < actual.length - 1 &&
|
|
327
|
-
actual.charAt(actualPos + 1) === "]") {
|
|
328
|
-
depth--;
|
|
329
|
-
expectedPos++;
|
|
330
|
-
actualPos += 2;
|
|
331
|
-
continue;
|
|
332
|
-
}
|
|
333
|
-
// check for start of readonly array
|
|
334
|
-
readonlyArrayRegExp.lastIndex = expectedPos;
|
|
335
|
-
readonlyModifierRegExp.lastIndex = actualPos;
|
|
336
|
-
if (readonlyArrayRegExp.test(expected) && readonlyModifierRegExp.test(actual)) {
|
|
337
|
-
depth++;
|
|
338
|
-
expectedPos += 14; // "ReadonlyArray<".length;
|
|
339
|
-
actualPos += 9; // "readonly ".length;
|
|
340
|
-
continue;
|
|
341
|
-
}
|
|
342
|
-
return false;
|
|
343
|
-
}
|
|
344
|
-
return true;
|
|
345
|
-
}
|
|
346
|
-
function getExpectTypeFailures(sourceFile, typeAssertions, checker, ts) {
|
|
347
|
-
const unmetExpectations = [];
|
|
348
|
-
// Match assertions to the first node that appears on the line they apply to.
|
|
349
|
-
// `forEachChild` isn't available as a method in older TypeScript versions, so must use `ts.forEachChild` instead.
|
|
350
|
-
ts.forEachChild(sourceFile, function iterate(node) {
|
|
351
|
-
const line = lineOfPosition(node.getStart(sourceFile), sourceFile);
|
|
352
|
-
const expected = typeAssertions.get(line);
|
|
353
|
-
if (expected !== undefined) {
|
|
354
|
-
// https://github.com/Microsoft/TypeScript/issues/14077
|
|
355
|
-
if (node.kind === ts.SyntaxKind.ExpressionStatement) {
|
|
356
|
-
node = node.expression;
|
|
357
|
-
}
|
|
358
|
-
const type = checker.getTypeAtLocation(getNodeForExpectType(node, ts));
|
|
359
|
-
const actual = type
|
|
360
|
-
? checker.typeToString(type, /*enclosingDeclaration*/ undefined, ts.TypeFormatFlags.NoTruncation)
|
|
361
|
-
: "";
|
|
362
|
-
if (!expected.split(/\s*\|\|\s*/).some((s) => actual === s || matchReadonlyArray(actual, s))) {
|
|
363
|
-
unmetExpectations.push({ node, expected, actual });
|
|
364
|
-
}
|
|
365
|
-
typeAssertions.delete(line);
|
|
366
|
-
}
|
|
367
|
-
ts.forEachChild(node, iterate);
|
|
368
|
-
});
|
|
369
|
-
return { unmetExpectations, unusedAssertions: typeAssertions.keys() };
|
|
370
|
-
}
|
|
371
|
-
function getNodeForExpectType(node, ts) {
|
|
372
|
-
if (node.kind === ts.SyntaxKind.VariableStatement) {
|
|
373
|
-
// ts2.0 doesn't have `isVariableStatement`
|
|
374
|
-
const { declarationList: { declarations }, } = node;
|
|
375
|
-
if (declarations.length === 1) {
|
|
376
|
-
const { initializer } = declarations[0];
|
|
377
|
-
if (initializer) {
|
|
378
|
-
return initializer;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
return node;
|
|
383
|
-
}
|
|
384
|
-
function lineOfPosition(pos, sourceFile) {
|
|
385
|
-
return sourceFile.getLineAndCharacterOfPosition(pos).line;
|
|
386
|
-
}
|
|
387
|
-
//# sourceMappingURL=expectRule.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expectRule.js","sourceRoot":"","sources":["../../src/rules/expectRule.ts"],"names":[],"mappings":"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"}
|