11/* @internal */
22namespace ts . codefix {
3- const fixId = "addMissingConstInForLoop " ;
3+ const fixId = "addMissingConst " ;
44 const errorCodes = [
55 Diagnostics . Cannot_find_name_0 . code ,
66 Diagnostics . No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer . code
@@ -22,12 +22,30 @@ namespace ts.codefix {
2222 } ) ;
2323
2424 function makeChange ( changeTracker : textChanges . ChangeTracker , sourceFile : SourceFile , pos : number , fixedNodes ?: NodeSet < Node > ) {
25- const forInitializer = findAncestor ( getTokenAtPosition ( sourceFile , pos ) , node =>
25+ const token = getTokenAtPosition ( sourceFile , pos ) ;
26+
27+ const forInitializer = findAncestor ( token , node =>
2628 isForInOrOfStatement ( node . parent ) ? node . parent . initializer === node
2729 : isPossiblyPartOfDestructuring ( node ) ? false : "quit" ) ;
28- if ( ! forInitializer ) return ;
29- if ( ! fixedNodes || fixedNodes . tryAdd ( forInitializer ) ) {
30- changeTracker . insertNodeBefore ( sourceFile , forInitializer , createToken ( SyntaxKind . ConstKeyword ) ) ;
30+ if ( forInitializer ) return applyChange ( changeTracker , forInitializer , sourceFile , fixedNodes ) ;
31+
32+ const parent = token . parent ;
33+ const standaloneInitializer = isExpressionStatement ( parent . parent ) ;
34+ if ( standaloneInitializer ) return applyChange ( changeTracker , parent , sourceFile , fixedNodes ) ;
35+
36+ const arrayLiteralInitializer = isArrayLiteralExpression ( token . parent ) ;
37+ if ( arrayLiteralInitializer ) {
38+ const availableIdentifiers : string [ ] = [ ] ; // TODO: where to get/gather this information from?
39+ const noIdentifiersDeclared = parent . forEachChild ( node => availableIdentifiers . indexOf ( node . getFullText ( ) ) < 0 ) ;
40+ if ( ! noIdentifiersDeclared ) return ;
41+
42+ return applyChange ( changeTracker , parent , sourceFile , fixedNodes ) ;
43+ }
44+ }
45+
46+ function applyChange ( changeTracker : textChanges . ChangeTracker , initializer : Node , sourceFile : SourceFile , fixedNodes ?: NodeSet < Node > ) {
47+ if ( ! fixedNodes || fixedNodes . tryAdd ( initializer ) ) {
48+ changeTracker . insertNodeBefore ( sourceFile , initializer , createToken ( SyntaxKind . ConstKeyword ) ) ;
3149 }
3250 }
3351
0 commit comments