diff --git a/src/services/suggestionDiagnostics.ts b/src/services/suggestionDiagnostics.ts index 291d607cee8..fcbb02d4023 100644 --- a/src/services/suggestionDiagnostics.ts +++ b/src/services/suggestionDiagnostics.ts @@ -82,7 +82,7 @@ namespace ts { switch (statement.kind) { case SyntaxKind.VariableStatement: return (statement as VariableStatement).declarationList.declarations.some(decl => - isRequireCall(propertyAccessLeftHandSide(decl.initializer!), /*checkArgumentIsStringLiteralLike*/ true)); // TODO: GH#18217 + !!decl.initializer && isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true)); case SyntaxKind.ExpressionStatement: { const { expression } = statement as ExpressionStatement; if (!isBinaryExpression(expression)) return isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true); diff --git a/tests/cases/fourslash/refactorConvertToEs6Module_unexported_uninitialized_var.ts b/tests/cases/fourslash/refactorConvertToEs6Module_unexported_uninitialized_var.ts new file mode 100644 index 00000000000..e9cbaafee58 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToEs6Module_unexported_uninitialized_var.ts @@ -0,0 +1,24 @@ +/// + +// @allowJs: true +// @target: esnext + +// @Filename: /a.js +////var privateUnrelated; +////[|exports.f|] = function() {}; +////privateUnrelated = 1; +////console.log(privateUnrelated); + +verify.getSuggestionDiagnostics([{ + message: "File is a CommonJS module; it may be converted to an ES6 module.", + code: 80001, +}]); + +verify.codeFix({ + description: "Convert to ES6 module", + newFileContent: +`var privateUnrelated; +export function f() {} +privateUnrelated = 1; +console.log(privateUnrelated);`, +});