Skip to content

Commit 3263abf

Browse files
committed
New selector test case
1 parent d0e8857 commit 3263abf

File tree

3 files changed

+77
-41
lines changed

3 files changed

+77
-41
lines changed

pkgs/sass_language_services/lib/src/features/hover/hover_feature.dart

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ Specificity: ${readableSpecificity(specificity)}
7070

7171
/// Go back up the path and calculate a full selector string and specificity.
7272
(String, int) _getSelectorHoverValue(List<sass.AstNode> path, int index) {
73+
var pre = "";
7374
var selector = "";
7475
var specificity = 0;
7576
var pastImmediateStyleRule = false;
@@ -79,13 +80,19 @@ Specificity: ${readableSpecificity(specificity)}
7980
var node = path.elementAt(i);
8081
if (node is sass.ComplexSelector) {
8182
var sel = node.span.text;
82-
if (sel.startsWith('&')) {
83+
var parentSelectorIndex = sel.indexOf('&');
84+
if (parentSelectorIndex != -1) {
8385
lastWasParentSelector = true;
84-
selector = "${sel.substring(1)} $selector";
86+
87+
pre = sel.substring(0, parentSelectorIndex);
88+
var post = sel.substring(parentSelectorIndex + 1);
89+
selector = "$post $selector";
8590
specificity += node.specificity;
8691
} else {
8792
if (lastWasParentSelector) {
88-
selector = "$sel$selector";
93+
lastWasParentSelector = false;
94+
selector = "$pre$sel$selector";
95+
pre = "";
8996
} else {
9097
selector = "$sel $selector";
9198
}
@@ -105,25 +112,32 @@ Specificity: ${readableSpecificity(specificity)}
105112

106113
// Just pick the first one in case of a list.
107114
var ruleSelector = selectorList.components.first;
108-
var selectorString = ruleSelector.toString();
115+
var sel = ruleSelector.toString();
109116

110117
if (lastWasParentSelector) {
111118
lastWasParentSelector = false;
112119

113-
if (selectorString.startsWith('&')) {
120+
var parentSelectorIndex = sel.indexOf('&');
121+
if (parentSelectorIndex != -1) {
114122
lastWasParentSelector = true;
115-
selector = "${selectorString.substring(1)}$selector";
123+
pre = "$pre ${sel.substring(0, parentSelectorIndex)}".trim();
124+
var post = sel.substring(parentSelectorIndex + 1);
125+
selector = "$post$selector";
116126
} else {
117-
selector = "$selectorString$selector";
127+
selector = "$pre $sel$selector".trim();
128+
pre = "";
118129
}
119130
// subtract one class worth that would otherwise be duplicated
120131
specificity -= 1000;
121132
} else {
122-
if (selectorString.startsWith('&')) {
133+
var parentSelectorIndex = sel.indexOf('&');
134+
if (parentSelectorIndex != -1) {
123135
lastWasParentSelector = true;
124-
selector = "${selectorString.substring(1)} $selector";
136+
pre = sel.substring(0, parentSelectorIndex);
137+
var post = sel.substring(parentSelectorIndex + 1);
138+
selector = "$post $selector";
125139
} else {
126-
selector = "$selectorString $selector";
140+
selector = "$pre $sel $selector".trim();
127141
}
128142
}
129143
specificity += ruleSelector.specificity;

0 commit comments

Comments
 (0)