File tree Expand file tree Collapse file tree 5 files changed +46
-20
lines changed
pkgs/sass_language_services
lib/src/features/go_to_definition
test/features/go_to_definition Expand file tree Collapse file tree 5 files changed +46
-20
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ class Scope {
8
8
9
9
final _symbols = < StylesheetDocumentSymbol > [];
10
10
11
+ /// Starting at [offset] and going for [lenght] characters, inclusive.
11
12
Scope ({required this .offset, required this .length});
12
13
13
14
void addChild (Scope scope) {
@@ -32,7 +33,7 @@ class Scope {
32
33
var scopeAtOffset = children.firstWhere (
33
34
(scope) =>
34
35
scope.offset <= offset &&
35
- scope.offset + scope.length > offset + length,
36
+ scope.offset + scope.length >= offset + length,
36
37
orElse: () => this );
37
38
38
39
if (scopeAtOffset == this ) {
Original file line number Diff line number Diff line change @@ -65,14 +65,20 @@ class ScopeVisitor with sass.RecursiveStatementVisitor {
65
65
var isCustomProperty =
66
66
node.name.isPlain && node.name.asPlain! .startsWith ("--" );
67
67
if (isCustomProperty) {
68
- _addSymbol (
68
+ // Add all custom properties to the global scope.
69
+
70
+ var range = toRange (node.span);
71
+ var selectionRange = toRange (node.name.span);
72
+
73
+ var symbol = StylesheetDocumentSymbol (
69
74
name: node.name.span.text,
70
- kind: ReferenceKind .variable,
71
- symbolRange: toRange (node.span),
72
- nameRange: toRange (node.name.span),
73
- offset: node.span.start.offset,
74
- length: node.span.length,
75
+ referenceKind: ReferenceKind .customProperty,
76
+ range: range,
77
+ children: [],
78
+ selectionRange: selectionRange,
75
79
);
80
+
81
+ scope.addSymbol (symbol);
76
82
}
77
83
78
84
super .visitDeclaration (node);
Original file line number Diff line number Diff line change @@ -9,10 +9,9 @@ ReferenceKind? getNodeReferenceKind(sass.AstNode node) {
9
9
return ReferenceKind .variable;
10
10
} else if (node is sass.VariableExpression ) {
11
11
return ReferenceKind .variable;
12
- } else if (node is sass.Declaration ) {
13
- var name = node.name;
14
- var isCustomProperty = name.isPlain && name.asPlain! .startsWith ("--" );
15
-
12
+ } else if (node is sass.StringExpression ) {
13
+ var isCustomProperty =
14
+ node.text.isPlain && node.text.asPlain! .startsWith ("--" );
16
15
if (isCustomProperty) {
17
16
return ReferenceKind .customProperty;
18
17
}
@@ -46,11 +45,11 @@ String? getNodeName(sass.AstNode node) {
46
45
return node.name;
47
46
} else if (node is sass.VariableExpression ) {
48
47
return node.name;
49
- } else if (node is sass.Declaration ) {
50
- var name = node.name;
51
- var isCustomProperty = name. isPlain && name .asPlain! .startsWith ("--" );
48
+ } else if (node is sass.StringExpression ) {
49
+ var isCustomProperty =
50
+ node.text. isPlain && node.text .asPlain! .startsWith ("--" );
52
51
if (isCustomProperty) {
53
- return node.name.span. text;
52
+ return node.text.asPlain ;
54
53
}
55
54
} else if (node is sass.AtRule ) {
56
55
var name = node.name;
Original file line number Diff line number Diff line change @@ -264,10 +264,30 @@ nav ul {
264
264
});
265
265
});
266
266
267
- group ('css variables ' , () {
267
+ group ('css' , () {
268
268
setUp (() {
269
269
ls.cache.clear ();
270
270
});
271
+
272
+ test ('custom properties' , () async {
273
+ var document = fs.createDocument (r'''
274
+ :root
275
+ --color-text: #000
276
+
277
+ .a
278
+ color: var(--color-text)
279
+ ''' , uri: 'styles.sass' );
280
+
281
+ var result = await ls.goToDefinition (document, at (line: 4 , char: 16 ));
282
+
283
+ expect (result, isNotNull);
284
+ expect (result! .range, StartsAtLine (1 ));
285
+ expect (result.range, EndsAtLine (1 ));
286
+ expect (result.range, StartsAtCharacter (2 ));
287
+ expect (result.range, EndsAtCharacter (14 ));
288
+
289
+ expect (result.uri.toString (), endsWith ('styles.sass' ));
290
+ });
271
291
});
272
292
273
293
group ('@extended CSS class' , () {
Original file line number Diff line number Diff line change @@ -39,12 +39,12 @@ void main() {
39
39
expect (global.findScope (offset: - 1 ), isNull);
40
40
41
41
expect (global.findScope (offset: 0 ), equals (global));
42
- expect (global.findScope (offset: 20 ), equals (global));
42
+ expect (global.findScope (offset: 21 ), equals (global));
43
43
44
44
expect (global.findScope (offset: 10 ), equals (first));
45
- expect (global.findScope (offset: 14 ), equals (first));
46
- expect (global.findScope (offset: 15 ), equals (second));
47
- expect (global.findScope (offset: 19 ), equals (second));
45
+ expect (global.findScope (offset: 15 ), equals (first));
46
+ expect (global.findScope (offset: 16 ), equals (second));
47
+ expect (global.findScope (offset: 20 ), equals (second));
48
48
});
49
49
});
50
50
}
You can’t perform that action at this time.
0 commit comments