Skip to content

Commit 8365f77

Browse files
fix: add additional space after the escape sequence (css-modules#17)
1 parent 5e4d69d commit 8365f77

File tree

5 files changed

+188
-0
lines changed

5 files changed

+188
-0
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"postcss-selector-parser": "^6.0.0"
4545
},
4646
"devDependencies": {
47+
"cssesc": "^3.0.0",
4748
"chokidar-cli": "^1.0.1",
4849
"codecov.io": "^0.1.2",
4950
"coveralls": "^3.0.2",

src/index.js

+11
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,17 @@ const processor = postcss.plugin('postcss-modules-scope', function(options) {
152152
// non-container node
153153
selector.first.spaces = node.spaces;
154154

155+
const nextNode = node.next();
156+
157+
if (
158+
nextNode &&
159+
nextNode.type === 'combinator' &&
160+
nextNode.value === ' ' &&
161+
/\\[A-F0-9]{1,6}$/.test(selector.last.value)
162+
) {
163+
selector.last.spaces.after = ' ';
164+
}
165+
155166
node.replaceWith(selector);
156167

157168
return;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
.\1F600 {
2+
color: red;
3+
}
4+
5+
.\1F600 .\1F600 {
6+
color: red;
7+
}
8+
9+
.\1F600 .\1F600 .\1F600 {
10+
color: red;
11+
}
12+
13+
.\1F600 A {
14+
color: red;
15+
}
16+
17+
.\1F600 .\1F600 {
18+
color: red;
19+
}
20+
21+
.\1F600 .\1F600 {
22+
color: red;
23+
}
24+
25+
.\1F600 .\1F600 .\1F600 {
26+
color: red;
27+
}
28+
29+
.\1F600 .\1F600 A .\1F600 {
30+
color: red;
31+
}
32+
33+
#\1F600 #\1F600 #\1F600 {
34+
color: red;
35+
}
36+
37+
#\1F600 #\1F600 A #\1F600 {
38+
color: red;
39+
}
40+
41+
.a .\1F600 b {
42+
color: red;
43+
}
44+
45+
.\1F600 > .\1F600 > .\1F600 {
46+
color: red;
47+
}
48+
49+
.\1F600 .\1F600 {
50+
color: red;
51+
}
52+
53+
.\1F600.\1F600 {
54+
color: red;
55+
}
56+
57+
.\1F600 .\1F600 {
58+
color: red;
59+
}
60+
61+
.\1F600 .a {
62+
color: red;
63+
}
64+
65+
.\1F600.a {
66+
color: red;
67+
}
68+
69+
.a .\1F600 {
70+
color: red;
71+
}
72+
73+
.a.\1F600 {
74+
color: red;
75+
}
76+
77+
:export {
78+
smile: 😀;
79+
smile_with_A: 😀A;
80+
}
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const cssesc = require('cssesc');
2+
3+
const filenameReservedRegex = /[<>:"/\\|?*\x00-\x1F]/g;
4+
const reControlChars = /[\u0000-\u001f\u0080-\u009f]/g;
5+
const reRelativePath = /^\.+/;
6+
7+
module.exports = {
8+
generateScopedName: function(name) {
9+
return cssesc(
10+
name
11+
.replace(/smile/, '😀')
12+
.replace(/_with_A/g, 'A')
13+
.replace(/^((-?[0-9])|--)/, '_$1')
14+
.replace(filenameReservedRegex, '-')
15+
.replace(reControlChars, '-')
16+
.replace(reRelativePath, '-')
17+
.replace(/\./g, '-'),
18+
{ isIdentifier: true }
19+
);
20+
},
21+
};
+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
:local(.smile) {
2+
color: red;
3+
}
4+
5+
:local(.smile) :local(.smile) {
6+
color: red;
7+
}
8+
9+
:local(.smile) :local(.smile) :local(.smile) {
10+
color: red;
11+
}
12+
13+
:local(.smile_with_A) {
14+
color: red;
15+
}
16+
17+
.\1F600 :local(.smile) {
18+
color: red;
19+
}
20+
21+
:local(.smile) .\1F600 {
22+
color: red;
23+
}
24+
25+
.\1F600 :local(.smile) .\1F600 {
26+
color: red;
27+
}
28+
29+
.\1F600 :local(.smile_with_A) .\1F600 {
30+
color: red;
31+
}
32+
33+
#\1F600 :local(#smile) #\1F600 {
34+
color: red;
35+
}
36+
37+
#\1F600 :local(#smile_with_A) #\1F600 {
38+
color: red;
39+
}
40+
41+
.a :local(.smile) b {
42+
color: red;
43+
}
44+
45+
:local(.smile) > :local(.smile) > :local(.smile) {
46+
color: red;
47+
}
48+
49+
.\1F600 :local(.smile) {
50+
color: red;
51+
}
52+
53+
.\1F600:local(.smile) {
54+
color: red;
55+
}
56+
57+
.\1F600 :local(.smile) {
58+
color: red;
59+
}
60+
61+
:local(.smile) .a {
62+
color: red;
63+
}
64+
65+
:local(.smile).a {
66+
color: red;
67+
}
68+
69+
.a :local(.smile) {
70+
color: red;
71+
}
72+
73+
.a:local(.smile) {
74+
color: red;
75+
}

0 commit comments

Comments
 (0)