Skip to content

Commit c877991

Browse files
committed
Add CSS selector parser
1 parent 926064c commit c877991

File tree

133 files changed

+2642
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+2642
-0
lines changed

lib/utils/selector.js

Lines changed: 664 additions & 0 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"dependencies": {
5757
"eslint-utils": "^3.0.0",
5858
"natural-compare": "^1.4.0",
59+
"nth-check": "^2.0.1",
5960
"postcss-selector-parser": "^6.0.9",
6061
"semver": "^7.3.5",
6162
"vue-eslint-parser": "^8.0.1"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"text": "<a href=\"http://example.com\">",
4+
"selector": "a[href*=\"example\"]",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<a href=\"http://example.org\">",
9+
"selector": "a[href*=\"example\"]",
10+
"elementText": null
11+
},
12+
{
13+
"text": "<a href=\"https://example.org\">",
14+
"selector": "a[href*=\"example\"]",
15+
"elementText": null
16+
}
17+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- a[href*="example"] -->
2+
<template>
3+
<ul>
4+
<li><a href="#internal">Internal link</a></li>
5+
<li><a href="http://example.com">Example link</a></li>
6+
<li><a href="#InSensitive">Insensitive internal link</a></li>
7+
<li><a href="http://example.org">Example org link</a></li>
8+
<li><a href="https://example.org">Example https org link</a></li>
9+
</ul>
10+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<p foo>",
4+
"selector": "[foo=]",
5+
"elementText": "<* foo=\"\">"
6+
},
7+
{
8+
"text": "<div foo=\"\">",
9+
"selector": "[foo=]",
10+
"elementText": "<* foo=\"\">"
11+
}
12+
]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- [foo=] -->
2+
<template>
3+
<div foo="foo">
4+
<div foo=bar></div>
5+
<div foo="foo bar"></div>
6+
<p foo></p>
7+
<input bar="foo">
8+
<input foo="foo">
9+
<div foo=""></div>
10+
</div>
11+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<div foo=\"foo\">",
4+
"selector": "[foo=foo]",
5+
"elementText": "<* foo=\"foo\">"
6+
},
7+
{
8+
"text": "<input foo=\"foo\">",
9+
"selector": "[foo=foo]",
10+
"elementText": "<* foo=\"foo\">"
11+
}
12+
]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- [foo=foo] -->
2+
<template>
3+
<div foo="foo">
4+
<div foo=bar></div>
5+
<div foo="foo bar"></div>
6+
<p foo></p>
7+
<input bar="foo">
8+
<input foo="foo">
9+
<div foo=""></div>
10+
</div>
11+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<div foo=\"foo\">",
4+
"selector": "[foo]",
5+
"elementText": "<* foo>"
6+
},
7+
{
8+
"text": "<p foo>",
9+
"selector": "[foo]",
10+
"elementText": "<* foo>"
11+
}
12+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- [foo] -->
2+
<template>
3+
<div foo="foo">
4+
<div bar></div>
5+
<p foo></p>
6+
<input bar="foo">
7+
</div>
8+
</template>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"text": "<a href=\"#InSensitive\">",
4+
"selector": "a[href*=\"insensitive\" i]",
5+
"elementText": null
6+
}
7+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- a[href*="insensitive" i] -->
2+
<template>
3+
<ul>
4+
<li><a href="#internal">Internal link</a></li>
5+
<li><a href="http://example.com">Example link</a></li>
6+
<li><a href="#InSensitive">Insensitive internal link</a></li>
7+
<li><a href="http://example.org">Example org link</a></li>
8+
<li><a href="https://example.org">Example https org link</a></li>
9+
</ul>
10+
</template>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"text": "<div lang=\"zh\">",
4+
"selector": "div[lang|=\"zh\"]",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<div lang=\"zh-CN\">",
9+
"selector": "div[lang|=\"zh\"]",
10+
"elementText": null
11+
},
12+
{
13+
"text": "<div lang=\"zh-TW\">",
14+
"selector": "div[lang|=\"zh\"]",
15+
"elementText": null
16+
}
17+
]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!-- div[lang|="zh"] -->
2+
<template>
3+
<div lang="en-us en-gb en-au en-nz">Hello World!</div>
4+
<div lang="pt">Olá Mundo!</div>
5+
<div lang="zh">世界您好!</div>
6+
<div lang="zh-CN">世界您好!</div>
7+
<div lang="zh-TW">世界您好!</div>
8+
<div data-lang="zh-TW">世界您好!</div>
9+
</template>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- a[href*="insensitive"] -->
2+
<template>
3+
<!-- Test for not insensitive -->
4+
<ul>
5+
<li><a href="#internal">Internal link</a></li>
6+
<li><a href="http://example.com">Example link</a></li>
7+
<li><a href="#InSensitive">Insensitive internal link</a></li>
8+
<li><a href="http://example.org">Example org link</a></li>
9+
<li><a href="https://example.org">Example https org link</a></li>
10+
</ul>
11+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<a href=\"#internal\">",
4+
"selector": "a[href^=\"#\"]",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<a href=\"#InSensitive\">",
9+
"selector": "a[href^=\"#\"]",
10+
"elementText": null
11+
}
12+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- a[href^="#"] -->
2+
<template>
3+
<ul>
4+
<li><a href="#internal">Internal link</a></li>
5+
<li><a href="http://example.com">Example link</a></li>
6+
<li><a href="#InSensitive">Insensitive internal link</a></li>
7+
<li><a href="http://example.org">Example org link</a></li>
8+
<li><a href="https://example.org">Example https org link</a></li>
9+
</ul>
10+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<a href=\"http://example.org\">",
4+
"selector": "a[href$=\".org\"]",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<a href=\"https://example.org\">",
9+
"selector": "a[href$=\".org\"]",
10+
"elementText": null
11+
}
12+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- a[href$=".org"] -->
2+
<template>
3+
<ul>
4+
<li><a href="#internal">Internal link</a></li>
5+
<li><a href="http://example.com">Example link</a></li>
6+
<li><a href="#InSensitive">Insensitive internal link</a></li>
7+
<li><a href="http://example.org">Example org link</a></li>
8+
<li><a href="https://example.org">Example https org link</a></li>
9+
</ul>
10+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<div lang=\"en-us en-gb en-au en-nz\">",
4+
"selector": "div[lang~=\"en-us\"]",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<div lang=\"en-us\">",
9+
"selector": "div[lang~=\"en-us\"]",
10+
"elementText": null
11+
}
12+
]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- div[lang~="en-us"] -->
2+
<template>
3+
<div lang="en-us en-gb en-au en-nz">Hello World!</div>
4+
<div lang="en-us">Hello World!</div>
5+
<div lang="en-us-unknown">Unknown</div>
6+
<div lang="pt">Olá Mundo!</div>
7+
<div lang="zh">世界您好!</div>
8+
<div lang="zh-CN">世界您好!</div>
9+
<div lang="zh-TW">世界您好!</div>
10+
<div data-lang="zh-TW">世界您好!</div>
11+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<div class=\"foo\">",
4+
"selector": ".foo",
5+
"elementText": "<* class=\"foo\">"
6+
},
7+
{
8+
"text": "<input class=\"foo bar\">",
9+
"selector": ".foo",
10+
"elementText": "<* class=\"foo\">"
11+
}
12+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- .foo -->
2+
<template>
3+
<div class="foo">
4+
<div class="f"></div>
5+
<p class="bar"></p>
6+
<input class="foo bar">
7+
</div>
8+
</template>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"text": "<div class=\"bar 3\">",
4+
"selector": ".foo+.bar",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<div class=\"bar 4\">",
9+
"selector": ".foo+.bar",
10+
"elementText": null
11+
}
12+
]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!-- .foo+.bar -->
2+
<template>
3+
<div class="bar">
4+
<div class="foo">
5+
<div class="foo 2">
6+
<div class="bar 2"></div>
7+
</div>
8+
<div class="bar 3"></div>
9+
</div>
10+
<div class="foo 3"></div>
11+
<div class="bar 4"></div>
12+
<div class="bar 5"></div>
13+
</div>
14+
</template>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"text": "<div class=\"bar 2\">",
4+
"selector": ".foo > .bar",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<div class=\"bar 3\">",
9+
"selector": ".foo > .bar",
10+
"elementText": null
11+
},
12+
{
13+
"text": "<div class=\"bar\" exact>",
14+
"selector": ".foo > .bar",
15+
"elementText": null
16+
}
17+
]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!-- .foo > .bar -->
2+
<template>
3+
<div class="bar">
4+
<div class="foo">
5+
<div class="foo 2">
6+
<div class="bar 2"></div>
7+
</div>
8+
<div class="bar 3">
9+
<div class="bar 4"></div>
10+
</div>
11+
<div class="bar" exact></div>
12+
</div>
13+
</div>
14+
</template>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[
2+
{
3+
"text": "<div class=\"c a-a-b-c\">",
4+
"selector": ".a > .b > .c",
5+
"elementText": null
6+
},
7+
{
8+
"text": "<div class=\"c a-b-c\">",
9+
"selector": ".a > .b > .c",
10+
"elementText": null
11+
},
12+
{
13+
"text": "<div class=\"c b-a-b-c\">",
14+
"selector": ".a > .b > .c",
15+
"elementText": null
16+
},
17+
{
18+
"text": "<div class=\"c c-a-b-c\">",
19+
"selector": ".a > .b > .c",
20+
"elementText": null
21+
}
22+
]

0 commit comments

Comments
 (0)