@@ -402,6 +402,7 @@ namespace ts.formatting {
402
402
let previousRange : TextRangeWithKind ;
403
403
let previousParent : Node ;
404
404
let previousRangeStartLine : number ;
405
+ let previousRangeEndLine : number ;
405
406
406
407
let lastIndentedLine : number ;
407
408
let indentationOnLastIndentedLine : number ;
@@ -795,11 +796,12 @@ namespace ts.formatting {
795
796
const isTokenInRange = rangeContainsRange ( originalRange , currentTokenInfo . token ) ;
796
797
797
798
const tokenStart = sourceFile . getLineAndCharacterOfPosition ( currentTokenInfo . token . pos ) ;
799
+ const tokenEnd = sourceFile . getLineAndCharacterOfPosition ( currentTokenInfo . token . end ) ;
798
800
if ( isTokenInRange ) {
799
801
const rangeHasError = rangeContainsError ( currentTokenInfo . token ) ;
800
802
// save previousRange since processRange will overwrite this value with current one
801
803
const savePreviousRange = previousRange ;
802
- lineAdded = processRange ( currentTokenInfo . token , tokenStart , parent , childContextNode , dynamicIndentation ) ;
804
+ lineAdded = processRange ( currentTokenInfo . token , tokenStart , tokenEnd , parent , childContextNode , dynamicIndentation ) ;
803
805
if ( rangeHasError ) {
804
806
// do not indent comments\token if token range overlaps with some error
805
807
indentToken = false ;
@@ -870,13 +872,15 @@ namespace ts.formatting {
870
872
for ( const triviaItem of trivia ) {
871
873
if ( isComment ( triviaItem . kind ) && rangeContainsRange ( originalRange , triviaItem ) ) {
872
874
const triviaItemStart = sourceFile . getLineAndCharacterOfPosition ( triviaItem . pos ) ;
873
- processRange ( triviaItem , triviaItemStart , parent , contextNode , dynamicIndentation ) ;
875
+ const triviaItemEnd = sourceFile . getLineAndCharacterOfPosition ( triviaItem . end ) ;
876
+ processRange ( triviaItem , triviaItemStart , triviaItemEnd , parent , contextNode , dynamicIndentation ) ;
874
877
}
875
878
}
876
879
}
877
880
878
881
function processRange ( range : TextRangeWithKind ,
879
882
rangeStart : LineAndCharacter ,
883
+ rangeEnd : LineAndCharacter ,
880
884
parent : Node ,
881
885
contextNode : Node ,
882
886
dynamicIndentation : DynamicIndentation ) : boolean {
@@ -891,13 +895,14 @@ namespace ts.formatting {
891
895
}
892
896
else {
893
897
lineAdded =
894
- processPair ( range , rangeStart . line , parent , previousRange , previousRangeStartLine , previousParent , contextNode , dynamicIndentation ) ;
898
+ processPair ( range , rangeStart . line , parent , previousRange , previousRangeStartLine , previousRangeEndLine , previousParent , contextNode , dynamicIndentation ) ;
895
899
}
896
900
}
897
901
898
902
previousRange = range ;
899
903
previousParent = parent ;
900
904
previousRangeStartLine = rangeStart . line ;
905
+ previousRangeEndLine = rangeEnd . line ;
901
906
previousRangeHasError = rangeHasError ;
902
907
903
908
return lineAdded ;
@@ -908,6 +913,7 @@ namespace ts.formatting {
908
913
currentParent : Node ,
909
914
previousItem : TextRangeWithKind ,
910
915
previousStartLine : number ,
916
+ previousEndLine : number ,
911
917
previousParent : Node ,
912
918
contextNode : Node ,
913
919
dynamicIndentation : DynamicIndentation ) : boolean {
@@ -919,7 +925,7 @@ namespace ts.formatting {
919
925
let trimTrailingWhitespaces : boolean ;
920
926
let lineAdded : boolean ;
921
927
if ( rule ) {
922
- applyRuleEdits ( rule , previousItem , previousStartLine , currentItem , currentStartLine ) ;
928
+ applyRuleEdits ( rule , previousItem , previousStartLine , previousEndLine , currentItem , currentStartLine ) ;
923
929
924
930
if ( rule . Operation . Action & ( RuleAction . Space | RuleAction . Delete ) && currentStartLine !== previousStartLine ) {
925
931
lineAdded = false ;
@@ -1110,6 +1116,7 @@ namespace ts.formatting {
1110
1116
function applyRuleEdits ( rule : Rule ,
1111
1117
previousRange : TextRangeWithKind ,
1112
1118
previousStartLine : number ,
1119
+ previousEndLine : number ,
1113
1120
currentRange : TextRangeWithKind ,
1114
1121
currentStartLine : number ) : void {
1115
1122
@@ -1139,7 +1146,7 @@ namespace ts.formatting {
1139
1146
break ;
1140
1147
case RuleAction . Space :
1141
1148
// exit early if we on different lines and rule cannot change number of newlines
1142
- if ( rule . Flag !== RuleFlags . CanDeleteNewLines && previousStartLine !== currentStartLine ) {
1149
+ if ( rule . Flag !== RuleFlags . CanDeleteNewLines && previousEndLine !== currentStartLine ) {
1143
1150
return ;
1144
1151
}
1145
1152
0 commit comments