@@ -830,16 +830,23 @@ export class ViewModelLinesFromProjectedModel implements IViewModelLines {
830
830
return new Range ( start . lineNumber , start . column , end . lineNumber , end . column ) ;
831
831
}
832
832
833
- public convertModelPositionToViewPosition ( _modelLineNumber : number , _modelColumn : number , affinity : PositionAffinity = PositionAffinity . None , allowZeroLineNumber : boolean = false ) : Position {
833
+ public convertModelPositionToViewPosition ( _modelLineNumber : number , _modelColumn : number , affinity : PositionAffinity = PositionAffinity . None , allowZeroLineNumber : boolean = false , belowHiddenRanges : boolean = false ) : Position {
834
834
835
835
const validPosition = this . model . validatePosition ( new Position ( _modelLineNumber , _modelColumn ) ) ;
836
836
const inputLineNumber = validPosition . lineNumber ;
837
837
const inputColumn = validPosition . column ;
838
838
839
839
let lineIndex = inputLineNumber - 1 , lineIndexChanged = false ;
840
- while ( lineIndex > 0 && ! this . modelLineProjections [ lineIndex ] . isVisible ( ) ) {
841
- lineIndex -- ;
842
- lineIndexChanged = true ;
840
+ if ( belowHiddenRanges ) {
841
+ while ( lineIndex < this . modelLineProjections . length && ! this . modelLineProjections [ lineIndex ] . isVisible ( ) ) {
842
+ lineIndex ++ ;
843
+ lineIndexChanged = true ;
844
+ }
845
+ } else {
846
+ while ( lineIndex > 0 && ! this . modelLineProjections [ lineIndex ] . isVisible ( ) ) {
847
+ lineIndex -- ;
848
+ lineIndexChanged = true ;
849
+ }
843
850
}
844
851
if ( lineIndex === 0 && ! this . modelLineProjections [ lineIndex ] . isVisible ( ) ) {
845
852
// Could not reach a real line
@@ -851,7 +858,11 @@ export class ViewModelLinesFromProjectedModel implements IViewModelLines {
851
858
852
859
let r : Position ;
853
860
if ( lineIndexChanged ) {
854
- r = this . modelLineProjections [ lineIndex ] . getViewPositionOfModelPosition ( deltaLineNumber , this . model . getLineMaxColumn ( lineIndex + 1 ) , affinity ) ;
861
+ if ( belowHiddenRanges ) {
862
+ r = this . modelLineProjections [ lineIndex ] . getViewPositionOfModelPosition ( deltaLineNumber , 1 , affinity ) ;
863
+ } else {
864
+ r = this . modelLineProjections [ lineIndex ] . getViewPositionOfModelPosition ( deltaLineNumber , this . model . getLineMaxColumn ( lineIndex + 1 ) , affinity ) ;
865
+ }
855
866
} else {
856
867
r = this . modelLineProjections [ inputLineNumber - 1 ] . getViewPositionOfModelPosition ( deltaLineNumber , inputColumn , affinity ) ;
857
868
}
@@ -1071,8 +1082,8 @@ class CoordinatesConverter implements ICoordinatesConverter {
1071
1082
1072
1083
// Model -> View conversion and related methods
1073
1084
1074
- public convertModelPositionToViewPosition ( modelPosition : Position , affinity ?: PositionAffinity , allowZero ?: boolean ) : Position {
1075
- return this . _lines . convertModelPositionToViewPosition ( modelPosition . lineNumber , modelPosition . column , affinity , allowZero ) ;
1085
+ public convertModelPositionToViewPosition ( modelPosition : Position , affinity ?: PositionAffinity , allowZero ?: boolean , belowHiddenRanges ?: boolean ) : Position {
1086
+ return this . _lines . convertModelPositionToViewPosition ( modelPosition . lineNumber , modelPosition . column , affinity , allowZero , belowHiddenRanges ) ;
1076
1087
}
1077
1088
1078
1089
public convertModelRangeToViewRange ( modelRange : Range , affinity ?: PositionAffinity ) : Range {
0 commit comments