Skip to content

Commit c118807

Browse files
fix: add additional space after the escape sequence
1 parent 5e4d69d commit c118807

File tree

9 files changed

+191
-26
lines changed

9 files changed

+191
-26
lines changed

package.json

Lines changed: 1 addition & 0 deletions
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

Lines changed: 11 additions & 0 deletions
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;
Lines changed: 80 additions & 0 deletions
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+
}
Lines changed: 21 additions & 0 deletions
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+
};
Lines changed: 75 additions & 0 deletions
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+
}

test/test-cases/export-child-class/expected.css

Lines changed: 0 additions & 11 deletions
This file was deleted.

test/test-cases/export-child-class/source.css

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
._exportName_ {
1+
._input__exportName {
22
color: green;
33
}
44

5-
._exportName_:hover {
5+
._input__exportName:hover {
66
color: red;
77
}
88

99
:export {
10-
exportName: _exportName_;
10+
exportName: _input__exportName;
1111
}

test/test-cases/options-generateScopedName/options.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)