Skip to content

Commit b21c505

Browse files
committed
Fix the search visitor
1 parent 6bb5b62 commit b21c505

File tree

2 files changed

+58
-54
lines changed

2 files changed

+58
-54
lines changed

pkgs/sass_language_services/lib/src/features/go_to_definition/go_to_definition_feature.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class GoToDefinitionFeature extends LanguageFeature {
2020

2121
// Find the node whose definition we're looking for.
2222
var offset = document.offsetAt(position);
23-
// TODO: you are here. Figure out why the search isn't working the way you think.
24-
var node = stylesheet.accept(NodeAtOffsetVisitor(offset));
23+
var visitor = NodeAtOffsetVisitor(offset);
24+
var node = stylesheet.accept(visitor);
2525
if (node == null) {
2626
return null;
2727
}
Lines changed: 56 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import 'package:sass_api/sass_api.dart' as sass;
22

3-
class NodeAtOffsetVisitor implements sass.AstSearchVisitor<sass.AstNode> {
3+
class NodeAtOffsetVisitor
4+
with
5+
sass.StatementSearchVisitor<sass.AstNode>,
6+
sass.AstSearchVisitor<sass.AstNode> {
47
sass.AstNode? _candidate;
58
final int _offset;
69

@@ -10,6 +13,7 @@ class NodeAtOffsetVisitor implements sass.AstSearchVisitor<sass.AstNode> {
1013
sass.AstNode? _process(sass.AstNode node) {
1114
var spanContainsOffset =
1215
node.span.start.offset <= _offset && node.span.end.offset >= _offset;
16+
1317
if (spanContainsOffset) {
1418
if (_candidate == null) {
1519
_candidate = node;
@@ -18,7 +22,7 @@ class NodeAtOffsetVisitor implements sass.AstSearchVisitor<sass.AstNode> {
1822
}
1923
}
2024

21-
if (node.span.start.offset > _offset) {
25+
if (node.span.start.offset > _offset || node is sass.Stylesheet) {
2226
return _candidate;
2327
}
2428

@@ -27,33 +31,33 @@ class NodeAtOffsetVisitor implements sass.AstSearchVisitor<sass.AstNode> {
2731

2832
@override
2933
sass.AstNode? visitArgumentInvocation(sass.ArgumentInvocation invocation) {
30-
return _process(invocation);
34+
return super.visitArgumentInvocation(invocation) ?? _process(invocation);
3135
}
3236

3337
@override
3438
sass.AstNode? visitAtRootRule(sass.AtRootRule node) {
35-
return _process(node);
39+
return super.visitAtRootRule(node) ?? _process(node);
3640
}
3741

3842
@override
3943
sass.AstNode? visitAtRule(sass.AtRule node) {
40-
return _process(node);
44+
return super.visitAtRule(node) ?? _process(node);
4145
}
4246

4347
@override
4448
sass.AstNode? visitBinaryOperationExpression(
4549
sass.BinaryOperationExpression node) {
46-
return _process(node);
50+
return super.visitBinaryOperationExpression(node) ?? _process(node);
4751
}
4852

4953
@override
5054
sass.AstNode? visitBooleanExpression(sass.BooleanExpression node) {
51-
return _process(node);
55+
return super.visitBooleanExpression(node) ?? _process(node);
5256
}
5357

5458
@override
5559
sass.AstNode? visitCallableDeclaration(sass.CallableDeclaration node) {
56-
return _process(node);
60+
return super.visitCallableDeclaration(node) ?? _process(node);
5761
}
5862

5963
@override
@@ -64,224 +68,224 @@ class NodeAtOffsetVisitor implements sass.AstSearchVisitor<sass.AstNode> {
6468
return result;
6569
}
6670
}
67-
return null;
71+
return super.visitChildren(children);
6872
}
6973

7074
@override
7175
sass.AstNode? visitColorExpression(sass.ColorExpression node) {
72-
return _process(node);
76+
return super.visitColorExpression(node) ?? _process(node);
7377
}
7478

7579
@override
7680
sass.AstNode? visitContentBlock(sass.ContentBlock node) {
77-
return _process(node);
81+
return super.visitContentBlock(node) ?? _process(node);
7882
}
7983

8084
@override
8185
sass.AstNode? visitContentRule(sass.ContentRule node) {
82-
return _process(node);
86+
return super.visitContentRule(node) ?? _process(node);
8387
}
8488

8589
@override
8690
sass.AstNode? visitDebugRule(sass.DebugRule node) {
87-
return _process(node);
91+
return super.visitDebugRule(node) ?? _process(node);
8892
}
8993

9094
@override
9195
sass.AstNode? visitDeclaration(sass.Declaration node) {
92-
return _process(node);
96+
return super.visitDeclaration(node) ?? _process(node);
9397
}
9498

9599
@override
96100
sass.AstNode? visitEachRule(sass.EachRule node) {
97-
return _process(node);
101+
return super.visitEachRule(node) ?? _process(node);
98102
}
99103

100104
@override
101105
sass.AstNode? visitErrorRule(sass.ErrorRule node) {
102-
return _process(node);
106+
return super.visitErrorRule(node) ?? _process(node);
103107
}
104108

105109
@override
106110
sass.AstNode? visitExpression(sass.Expression expression) {
107-
return _process(expression);
111+
return super.visitExpression(expression) ?? _process(expression);
108112
}
109113

110114
@override
111115
sass.AstNode? visitExtendRule(sass.ExtendRule node) {
112-
return _process(node);
116+
return super.visitExtendRule(node) ?? _process(node);
113117
}
114118

115119
@override
116120
sass.AstNode? visitForRule(sass.ForRule node) {
117-
return _process(node);
121+
return super.visitForRule(node) ?? _process(node);
118122
}
119123

120124
@override
121125
sass.AstNode? visitForwardRule(sass.ForwardRule node) {
122-
return _process(node);
126+
return super.visitForwardRule(node) ?? _process(node);
123127
}
124128

125129
@override
126130
sass.AstNode? visitFunctionExpression(sass.FunctionExpression node) {
127-
return _process(node);
131+
return super.visitFunctionExpression(node) ?? _process(node);
128132
}
129133

130134
@override
131135
sass.AstNode? visitFunctionRule(sass.FunctionRule node) {
132-
return _process(node);
136+
return super.visitFunctionRule(node) ?? _process(node);
133137
}
134138

135139
@override
136140
sass.AstNode? visitIfExpression(sass.IfExpression node) {
137-
return _process(node);
141+
return super.visitIfExpression(node) ?? _process(node);
138142
}
139143

140144
@override
141145
sass.AstNode? visitIfRule(sass.IfRule node) {
142-
return _process(node);
146+
return super.visitIfRule(node) ?? _process(node);
143147
}
144148

145149
@override
146150
sass.AstNode? visitImportRule(sass.ImportRule node) {
147-
return _process(node);
151+
return super.visitImportRule(node) ?? _process(node);
148152
}
149153

150154
@override
151155
sass.AstNode? visitIncludeRule(sass.IncludeRule node) {
152-
return _process(node);
156+
return super.visitIncludeRule(node) ?? _process(node);
153157
}
154158

155159
@override
156160
sass.AstNode? visitInterpolatedFunctionExpression(
157161
sass.InterpolatedFunctionExpression node) {
158-
return _process(node);
162+
return super.visitInterpolatedFunctionExpression(node) ?? _process(node);
159163
}
160164

161165
@override
162166
sass.AstNode? visitInterpolation(sass.Interpolation interpolation) {
163-
return _process(interpolation);
167+
return super.visitInterpolation(interpolation) ?? _process(interpolation);
164168
}
165169

166170
@override
167171
sass.AstNode? visitListExpression(sass.ListExpression node) {
168-
return _process(node);
172+
return super.visitListExpression(node) ?? _process(node);
169173
}
170174

171175
@override
172176
sass.AstNode? visitLoudComment(sass.LoudComment node) {
173-
return _process(node);
177+
return super.visitLoudComment(node) ?? _process(node);
174178
}
175179

176180
@override
177181
sass.AstNode? visitMapExpression(sass.MapExpression node) {
178-
return _process(node);
182+
return super.visitMapExpression(node) ?? _process(node);
179183
}
180184

181185
@override
182186
sass.AstNode? visitMediaRule(sass.MediaRule node) {
183-
return _process(node);
187+
return super.visitMediaRule(node) ?? _process(node);
184188
}
185189

186190
@override
187191
sass.AstNode? visitMixinRule(sass.MixinRule node) {
188-
return _process(node);
192+
return super.visitMixinRule(node) ?? _process(node);
189193
}
190194

191195
@override
192196
sass.AstNode? visitNullExpression(sass.NullExpression node) {
193-
return _process(node);
197+
return super.visitNullExpression(node) ?? _process(node);
194198
}
195199

196200
@override
197201
sass.AstNode? visitNumberExpression(sass.NumberExpression node) {
198-
return _process(node);
202+
return super.visitNumberExpression(node) ?? _process(node);
199203
}
200204

201205
@override
202206
sass.AstNode? visitParenthesizedExpression(
203207
sass.ParenthesizedExpression node) {
204-
return _process(node);
208+
return super.visitParenthesizedExpression(node) ?? _process(node);
205209
}
206210

207211
@override
208212
sass.AstNode? visitReturnRule(sass.ReturnRule node) {
209-
return _process(node);
213+
return super.visitReturnRule(node) ?? _process(node);
210214
}
211215

212216
@override
213217
sass.AstNode? visitSelectorExpression(sass.SelectorExpression node) {
214-
return _process(node);
218+
return super.visitSelectorExpression(node) ?? _process(node);
215219
}
216220

217221
@override
218222
sass.AstNode? visitSilentComment(sass.SilentComment node) {
219-
return _process(node);
223+
return super.visitSilentComment(node) ?? _process(node);
220224
}
221225

222226
@override
223227
sass.AstNode? visitStringExpression(sass.StringExpression node) {
224-
return _process(node);
228+
return super.visitStringExpression(node) ?? _process(node);
225229
}
226230

227231
@override
228232
sass.AstNode? visitStyleRule(sass.StyleRule node) {
229-
return _process(node);
233+
return super.visitStyleRule(node) ?? _process(node);
230234
}
231235

232236
@override
233237
sass.AstNode? visitStylesheet(sass.Stylesheet node) {
234-
return _process(node);
238+
return super.visitStylesheet(node) ?? _process(node);
235239
}
236240

237241
@override
238242
sass.AstNode? visitSupportsCondition(sass.SupportsCondition condition) {
239-
return _process(condition);
243+
return super.visitSupportsCondition(condition) ?? _process(condition);
240244
}
241245

242246
@override
243247
sass.AstNode? visitSupportsExpression(sass.SupportsExpression node) {
244-
return _process(node);
248+
return super.visitSupportsExpression(node) ?? _process(node);
245249
}
246250

247251
@override
248252
sass.AstNode? visitSupportsRule(sass.SupportsRule node) {
249-
return _process(node);
253+
return super.visitSupportsRule(node) ?? _process(node);
250254
}
251255

252256
@override
253257
sass.AstNode? visitUnaryOperationExpression(
254258
sass.UnaryOperationExpression node) {
255-
return _process(node);
259+
return super.visitUnaryOperationExpression(node) ?? _process(node);
256260
}
257261

258262
@override
259263
sass.AstNode? visitUseRule(sass.UseRule node) {
260-
return _process(node);
264+
return super.visitUseRule(node) ?? _process(node);
261265
}
262266

263267
@override
264268
sass.AstNode? visitValueExpression(sass.ValueExpression node) {
265-
return _process(node);
269+
return super.visitValueExpression(node) ?? _process(node);
266270
}
267271

268272
@override
269273
sass.AstNode? visitVariableDeclaration(sass.VariableDeclaration node) {
270-
return _process(node);
274+
return super.visitVariableDeclaration(node) ?? _process(node);
271275
}
272276

273277
@override
274278
sass.AstNode? visitVariableExpression(sass.VariableExpression node) {
275-
return _process(node);
279+
return super.visitVariableExpression(node) ?? _process(node);
276280
}
277281

278282
@override
279283
sass.AstNode? visitWarnRule(sass.WarnRule node) {
280-
return _process(node);
284+
return super.visitWarnRule(node) ?? _process(node);
281285
}
282286

283287
@override
284288
sass.AstNode? visitWhileRule(sass.WhileRule node) {
285-
return _process(node);
289+
return super.visitWhileRule(node) ?? _process(node);
286290
}
287291
}

0 commit comments

Comments
 (0)