@@ -6,6 +6,7 @@ import '../document_symbols/stylesheet_document_symbol.dart';
6
6
import 'scope.dart' ;
7
7
8
8
final deprecated = RegExp (r'///\s*@deprecated' );
9
+ final scopeStart = RegExp (r'[\{\n]' );
9
10
10
11
/// Builds scopes and a list of symbols in those scopes starting at [scope] (typically the global scope).
11
12
class ScopeVisitor with sass.RecursiveStatementVisitor {
@@ -55,39 +56,38 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
55
56
56
57
@override
57
58
void visitAtRule (node) {
58
- if (node.name.isPlain) {
59
- if (node.name.asPlain == 'font-face' ) {
59
+ if (node.children != null ) {
60
+ var nameEndIndex = node.name.span.end.offset - node.span.start.offset;
61
+ var scopeIndex = node.span.text.indexOf (scopeStart, nameEndIndex);
62
+
63
+ _addScope (
64
+ offset: node.span.start.offset + scopeIndex,
65
+ length: node.span.length - scopeIndex,
66
+ );
67
+ }
68
+
69
+ if (node.name.isPlain && node.name.asPlain! .startsWith ('keyframes' )) {
70
+ var keyframesName = node.span.context.split (' ' ).elementAtOrNull (1 );
71
+ if (keyframesName != null ) {
72
+ var keyframesNameRange = lsp.Range (
73
+ start: lsp.Position (
74
+ line: node.name.span.start.line,
75
+ character: node.name.span.end.column + 1 ,
76
+ ),
77
+ end: lsp.Position (
78
+ line: node.name.span.end.line,
79
+ character: node.name.span.end.column + 1 + keyframesName.length,
80
+ ),
81
+ );
82
+
60
83
_addSymbol (
61
- name: node.name.span.text ,
62
- kind: ReferenceKind .atRule ,
84
+ name: keyframesName ,
85
+ kind: ReferenceKind .keyframe ,
63
86
symbolRange: toRange (node.span),
64
- nameRange: toRange (node.name.span) ,
87
+ nameRange: keyframesNameRange ,
65
88
offset: node.span.start.offset,
66
89
length: node.span.length,
67
90
);
68
- } else if (node.name.asPlain! .startsWith ('keyframes' )) {
69
- var keyframesName = node.span.context.split (' ' ).elementAtOrNull (1 );
70
- if (keyframesName != null ) {
71
- var keyframesNameRange = lsp.Range (
72
- start: lsp.Position (
73
- line: node.name.span.start.line,
74
- character: node.name.span.end.column + 1 ,
75
- ),
76
- end: lsp.Position (
77
- line: node.name.span.end.line,
78
- character: node.name.span.end.column + 1 + keyframesName.length,
79
- ),
80
- );
81
-
82
- _addSymbol (
83
- name: keyframesName,
84
- kind: ReferenceKind .keyframe,
85
- symbolRange: toRange (node.span),
86
- nameRange: keyframesNameRange,
87
- offset: node.span.start.offset,
88
- length: node.span.length,
89
- );
90
- }
91
91
}
92
92
}
93
93
@@ -114,9 +114,10 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
114
114
115
115
@override
116
116
void visitEachRule (sass.EachRule node) {
117
+ var lengthSubtract = node.list.span.end.offset - node.span.start.offset;
117
118
var scope = _addScope (
118
- offset: node.span.start .offset,
119
- length: node.span.length,
119
+ offset: node.list. span.end .offset,
120
+ length: node.span.length - lengthSubtract ,
120
121
);
121
122
122
123
if (scope != null ) {
@@ -150,9 +151,11 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
150
151
151
152
@override
152
153
void visitForRule (sass.ForRule node) {
154
+ var toEndIndex = node.to.span.end.offset - node.span.start.offset;
155
+ var scopeIndex = node.span.text.indexOf (scopeStart, toEndIndex);
153
156
var scope = _addScope (
154
- offset: node.span.start.offset,
155
- length: node.span.length,
157
+ offset: node.span.start.offset + scopeIndex ,
158
+ length: node.span.length - scopeIndex ,
156
159
);
157
160
158
161
if (scope != null ) {
@@ -193,9 +196,11 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
193
196
length: node.span.length,
194
197
);
195
198
199
+ var argsEndIndex = node.arguments.span.end.offset - node.span.start.offset;
200
+ var scopeIndex = node.span.text.indexOf (scopeStart, argsEndIndex);
196
201
var scope = _addScope (
197
- offset: node.span.start.offset,
198
- length: node.span.length,
202
+ offset: node.span.start.offset + scopeIndex ,
203
+ length: node.span.length - scopeIndex ,
199
204
);
200
205
201
206
if (scope != null ) {
@@ -236,10 +241,13 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
236
241
length: node.span.length,
237
242
);
238
243
244
+ var argsEndIndex = node.arguments.span.end.offset - node.span.start.offset;
245
+ var scopeIndex = node.span.text.indexOf (scopeStart, argsEndIndex);
239
246
var scope = _addScope (
240
- offset: node.span.start.offset,
241
- length: node.span.length,
247
+ offset: node.span.start.offset + scopeIndex ,
248
+ length: node.span.length - scopeIndex ,
242
249
);
250
+
243
251
if (scope != null ) {
244
252
for (var arg in node.arguments.arguments) {
245
253
var range = toRange (arg.span);
@@ -341,9 +349,11 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
341
349
342
350
@override
343
351
void visitWhileRule (sass.WhileRule node) {
352
+ var lengthSubtract =
353
+ node.condition.span.end.offset - node.span.start.offset;
344
354
_addScope (
345
- offset: node.span.start .offset,
346
- length: node.span.length,
355
+ offset: node.condition. span.end .offset,
356
+ length: node.span.length - lengthSubtract ,
347
357
);
348
358
349
359
super .visitWhileRule (node);
0 commit comments