Skip to content

Commit 53906f2

Browse files
authored
containsTopLevelCommonjs:handle uninitialised vars (microsoft#27642)
Previously it assumed that all variable declarations had an initialiser, which is not correct.
1 parent 74392a0 commit 53906f2

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/services/suggestionDiagnostics.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ namespace ts {
8282
switch (statement.kind) {
8383
case SyntaxKind.VariableStatement:
8484
return (statement as VariableStatement).declarationList.declarations.some(decl =>
85-
isRequireCall(propertyAccessLeftHandSide(decl.initializer!), /*checkArgumentIsStringLiteralLike*/ true)); // TODO: GH#18217
85+
!!decl.initializer && isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true));
8686
case SyntaxKind.ExpressionStatement: {
8787
const { expression } = statement as ExpressionStatement;
8888
if (!isBinaryExpression(expression)) return isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @allowJs: true
4+
// @target: esnext
5+
6+
// @Filename: /a.js
7+
////var privateUnrelated;
8+
////[|exports.f|] = function() {};
9+
////privateUnrelated = 1;
10+
////console.log(privateUnrelated);
11+
12+
verify.getSuggestionDiagnostics([{
13+
message: "File is a CommonJS module; it may be converted to an ES6 module.",
14+
code: 80001,
15+
}]);
16+
17+
verify.codeFix({
18+
description: "Convert to ES6 module",
19+
newFileContent:
20+
`var privateUnrelated;
21+
export function f() {}
22+
privateUnrelated = 1;
23+
console.log(privateUnrelated);`,
24+
});

0 commit comments

Comments
 (0)