@@ -3,6 +3,7 @@ import { Position, Selection } from "vscode";
3
3
import { Point , SyntaxNode } from "web-tree-sitter" ;
4
4
import {
5
5
Delimiter ,
6
+ DelimiterInclusion ,
6
7
NodeMatcher ,
7
8
NodeMatcherValue ,
8
9
SelectionWithEditor ,
@@ -27,7 +28,7 @@ const leftToRightMap: Record<string, string> = Object.fromEntries(
27
28
28
29
export function createSurroundingPairMatcher (
29
30
delimiter : Delimiter | null ,
30
- delimitersOnly : boolean
31
+ delimiterInclusion : DelimiterInclusion
31
32
) : NodeMatcher {
32
33
return function nodeMatcher (
33
34
selection : SelectionWithEditor ,
@@ -67,56 +68,54 @@ export function createSurroundingPairMatcher(
67
68
return extractSelection (
68
69
leftDelimiterNode ,
69
70
rightDelimiterNode ,
70
- delimitersOnly
71
+ delimiterInclusion
71
72
) ;
72
73
} ;
73
74
}
74
75
75
76
function extractSelection (
76
77
leftDelimiterNode : SyntaxNode ,
77
78
rightDelimiterNode : SyntaxNode ,
78
- delimitersOnly : boolean
79
+ delimiterInclusion : DelimiterInclusion
79
80
) : NodeMatcherValue [ ] {
80
- if ( delimitersOnly === false ) {
81
- return [
82
- {
83
- node : leftDelimiterNode ,
84
- selection : {
85
- selection : new Selection (
86
- positionFromPoint ( leftDelimiterNode . endPosition ) ,
87
- positionFromPoint ( rightDelimiterNode . startPosition )
88
- ) ,
89
- context : {
90
- outerSelection : new Selection (
91
- positionFromPoint ( leftDelimiterNode . startPosition ) ,
92
- positionFromPoint ( rightDelimiterNode . endPosition )
93
- ) ,
94
- } ,
95
- } ,
96
- } ,
97
- ] ;
98
- } else {
99
- return [
100
- {
101
- node : leftDelimiterNode ,
102
- selection : {
103
- selection : new Selection (
104
- positionFromPoint ( leftDelimiterNode . startPosition ) ,
105
- positionFromPoint ( leftDelimiterNode . endPosition )
106
- ) ,
107
- context : { } ,
108
- } ,
109
- } ,
110
- {
111
- node : rightDelimiterNode ,
112
- selection : {
113
- selection : new Selection (
114
- positionFromPoint ( rightDelimiterNode . startPosition ) ,
115
- positionFromPoint ( rightDelimiterNode . endPosition )
116
- ) ,
117
- context : { } ,
118
- } ,
119
- } ,
120
- ] ;
81
+ var selections : Selection [ ] ;
82
+
83
+ switch ( delimiterInclusion ) {
84
+ case "includeDelimiters" :
85
+ selections = [
86
+ new Selection (
87
+ positionFromPoint ( leftDelimiterNode . startPosition ) ,
88
+ positionFromPoint ( rightDelimiterNode . endPosition )
89
+ ) ,
90
+ ] ;
91
+ break ;
92
+ case "excludeDelimiters" :
93
+ selections = [
94
+ new Selection (
95
+ positionFromPoint ( leftDelimiterNode . endPosition ) ,
96
+ positionFromPoint ( rightDelimiterNode . startPosition )
97
+ ) ,
98
+ ] ;
99
+ break ;
100
+ case "delimitersOnly" :
101
+ selections = [
102
+ new Selection (
103
+ positionFromPoint ( leftDelimiterNode . startPosition ) ,
104
+ positionFromPoint ( leftDelimiterNode . endPosition )
105
+ ) ,
106
+ new Selection (
107
+ positionFromPoint ( rightDelimiterNode . startPosition ) ,
108
+ positionFromPoint ( rightDelimiterNode . endPosition )
109
+ ) ,
110
+ ] ;
111
+ break ;
121
112
}
113
+
114
+ return selections . map ( ( selection ) => ( {
115
+ node : leftDelimiterNode ,
116
+ selection : {
117
+ selection,
118
+ context : { } ,
119
+ } ,
120
+ } ) ) ;
122
121
}
0 commit comments