33 * Licensed under the MIT License. See License.txt in the project root for license information.
44 *--------------------------------------------------------------------------------------------*/
55
6- import { SelectionRangeProvider } from 'vs/editor/common/modes' ;
6+ import { SelectionRangeProvider , SelectionRange } from 'vs/editor/common/modes' ;
77import { ITextModel } from 'vs/editor/common/model' ;
88import { Position } from 'vs/editor/common/core/position' ;
99import { Range } from 'vs/editor/common/core/range' ;
1010import { LinkedList } from 'vs/base/common/linkedList' ;
1111
1212export class BracketSelectionRangeProvider implements SelectionRangeProvider {
1313
14- provideSelectionRanges ( model : ITextModel , position : Position ) : Promise < Range [ ] > {
15- const bucket : Range [ ] = [ ] ;
14+ provideSelectionRanges ( model : ITextModel , position : Position ) : Promise < SelectionRange [ ] > {
15+ const bucket : SelectionRange [ ] = [ ] ;
1616 const ranges = new Map < string , LinkedList < Range > > ( ) ;
1717 return new Promise ( resolve => BracketSelectionRangeProvider . _bracketsRightYield ( resolve , 0 , model , position , ranges ) )
1818 . then ( ( ) => new Promise ( resolve => BracketSelectionRangeProvider . _bracketsLeftYield ( resolve , 0 , model , position , ranges , bucket ) ) )
@@ -67,7 +67,7 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
6767 }
6868 }
6969
70- private static _bracketsLeftYield ( resolve : ( ) => void , round : number , model : ITextModel , pos : Position , ranges : Map < string , LinkedList < Range > > , bucket : Range [ ] ) : void {
70+ private static _bracketsLeftYield ( resolve : ( ) => void , round : number , model : ITextModel , pos : Position , ranges : Map < string , LinkedList < Range > > , bucket : SelectionRange [ ] ) : void {
7171 const counts = new Map < string , number > ( ) ;
7272 const t1 = Date . now ( ) ;
7373 while ( true ) {
@@ -108,8 +108,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
108108 }
109109 const innerBracket = Range . fromPositions ( bracket . range . getEndPosition ( ) , closing ! . getStartPosition ( ) ) ;
110110 const outerBracket = Range . fromPositions ( bracket . range . getStartPosition ( ) , closing ! . getEndPosition ( ) ) ;
111- bucket . push ( innerBracket ) ;
112- bucket . push ( outerBracket ) ;
111+ bucket . push ( { range : innerBracket , kind : 'block.bracket' } ) ;
112+ bucket . push ( { range : outerBracket , kind : 'block.bracket' } ) ;
113113 BracketSelectionRangeProvider . _addBracketLeading ( model , outerBracket , bucket ) ;
114114 }
115115 }
@@ -118,7 +118,7 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
118118 }
119119 }
120120
121- private static _addBracketLeading ( model : ITextModel , bracket : Range , bucket : Range [ ] ) : void {
121+ private static _addBracketLeading ( model : ITextModel , bracket : Range , bucket : SelectionRange [ ] ) : void {
122122 if ( bracket . startLineNumber === bracket . endLineNumber ) {
123123 return ;
124124 }
@@ -128,8 +128,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
128128 const startLine = bracket . startLineNumber ;
129129 const column = model . getLineFirstNonWhitespaceColumn ( startLine ) ;
130130 if ( column !== 0 && column !== bracket . startColumn ) {
131- bucket . push ( Range . fromPositions ( new Position ( startLine , column ) , bracket . getEndPosition ( ) ) ) ;
132- bucket . push ( Range . fromPositions ( new Position ( startLine , 1 ) , bracket . getEndPosition ( ) ) ) ;
131+ bucket . push ( { range : Range . fromPositions ( new Position ( startLine , column ) , bracket . getEndPosition ( ) ) , kind : 'block.bracket.leading' } ) ;
132+ bucket . push ( { range : Range . fromPositions ( new Position ( startLine , 1 ) , bracket . getEndPosition ( ) ) , kind : 'block.bracket.leading' } ) ;
133133 }
134134
135135 // xxxxxxxx
@@ -140,8 +140,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
140140 if ( aboveLine > 0 ) {
141141 const column = model . getLineFirstNonWhitespaceColumn ( aboveLine ) ;
142142 if ( column === bracket . startColumn && column !== model . getLineLastNonWhitespaceColumn ( aboveLine ) ) {
143- bucket . push ( Range . fromPositions ( new Position ( aboveLine , column ) , bracket . getEndPosition ( ) ) ) ;
144- bucket . push ( Range . fromPositions ( new Position ( aboveLine , 1 ) , bracket . getEndPosition ( ) ) ) ;
143+ bucket . push ( { range : Range . fromPositions ( new Position ( aboveLine , column ) , bracket . getEndPosition ( ) ) , kind : 'block.bracket.leading' } ) ;
144+ bucket . push ( { range : Range . fromPositions ( new Position ( aboveLine , 1 ) , bracket . getEndPosition ( ) ) , kind : 'block.bracket.leading' } ) ;
145145 }
146146 }
147147 }
0 commit comments