@@ -458,28 +458,54 @@ class EditorSpecialContribution
458458 )
459459 ) ;
460460 let oldClickDecorations : string [ ] = [ ] ;
461- const highlightLine = ( lineNumber : number | [ number , number ] ) => {
462- const startLineNumber = typeof lineNumber === 'number' ? lineNumber : lineNumber [ 0 ] ;
463- const endLineNumber = typeof lineNumber === 'number' ? lineNumber : lineNumber [ 1 ] ;
464- // 延迟高亮,否则不居中
465- oldClickDecorations = editor . monacoEditor . deltaDecorations ( oldClickDecorations , [
466- {
467- range : new monaco . Range ( startLineNumber , 1 , endLineNumber , 1 ) ,
468- options : {
469- isWholeLine : true ,
470- linesDecorationsClassName : styles [ 'line-anchor' ] ,
471- className : styles [ 'line-content' ] ,
461+ const highlightLine = ( lineNumber : number | [ number , number ] | Array < [ number , number ] > ) => {
462+ let centerLine : number ;
463+ let newDecorations : monaco . editor . IModelDeltaDecoration [ ] ;
464+ if ( Array . isArray ( lineNumber ) && Array . isArray ( lineNumber [ 0 ] ) ) {
465+ centerLine = lineNumber [ 0 ] [ 0 ] ;
466+ newDecorations = lineNumber . map ( ( line ) => {
467+ return {
468+ range : new monaco . Range ( line [ 0 ] , 1 , line [ 1 ] , 1 ) ,
469+ options : {
470+ description : 'line-anchor-description' ,
471+ isWholeLine : true ,
472+ linesDecorationsClassName : styles [ 'line-anchor' ] ,
473+ className : styles [ 'line-content' ] ,
474+ } ,
475+ } ;
476+ } ) ;
477+ } else {
478+ const startLineNumber =
479+ typeof lineNumber === 'number' ? lineNumber : ( lineNumber [ 0 ] as number ) ;
480+ const endLineNumber =
481+ typeof lineNumber === 'number' ? lineNumber : ( lineNumber [ 1 ] as number ) ;
482+ centerLine = startLineNumber ;
483+ newDecorations = [
484+ {
485+ range : new monaco . Range ( startLineNumber , 1 , endLineNumber , 1 ) ,
486+ options : {
487+ // @ts -ignore
488+ description : 'line-anchor-description' ,
489+ isWholeLine : true ,
490+ linesDecorationsClassName : styles [ 'line-anchor' ] ,
491+ className : styles [ 'line-content' ] ,
492+ } ,
472493 } ,
473- } ,
474- ] ) ;
494+ ] ;
495+ }
496+ // 延迟高亮,否则不居中
497+ oldClickDecorations = editor . monacoEditor . deltaDecorations (
498+ oldClickDecorations ,
499+ newDecorations
500+ ) ;
475501 setTimeout ( ( ) => {
476502 if ( this . propsService . props . editorConfig ?. stretchHeight ) {
477503 const firstLine = document . querySelector ( `.${ styles [ 'line-anchor' ] } ` ) as HTMLElement ;
478504 if ( firstLine ) {
479505 firstLine . scrollIntoView ( { block : 'center' } ) ;
480506 }
481507 } else {
482- editor . monacoEditor . revealLineInCenterIfOutsideViewport ( startLineNumber ) ;
508+ editor . monacoEditor . revealLineInCenterIfOutsideViewport ( centerLine ) ;
483509 }
484510 } , 0 ) ;
485511 } ;
@@ -496,7 +522,9 @@ class EditorSpecialContribution
496522 let nextLineNumber : number | [ number , number ] = lineNumber ;
497523 if ( event ?. event ?. shiftKey && lastLineNumber ) {
498524 let startLineNumber = Array . isArray ( lastLineNumber )
499- ? lastLineNumber [ 0 ]
525+ ? Array . isArray ( lastLineNumber [ 0 ] )
526+ ? lastLineNumber [ 0 ] [ 0 ]
527+ : lastLineNumber [ 0 ]
500528 : lastLineNumber ;
501529 if ( startLineNumber > nextLineNumber ) {
502530 nextLineNumber = [ nextLineNumber , startLineNumber ] ;
0 commit comments