Skip to content

Commit 95a5c81

Browse files
authored
ci: eslint v9 test (#64)
* ci: eslint v9 test * fix: eslint9 compat * fix: raw eslint config * chore: fix * fix: add eslint9 compatiable rule tester * fix: add semver * fix: Stricter RuleTester validations * fix: error message * fix: false val with brackets * fix: eslint9 strict ruletester
1 parent 2e63af3 commit 95a5c81

40 files changed

+127
-165
lines changed

.eslintignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
website/
22
tools/
3+
eslint.config.mjs

.eslintrc.js

+3
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ module.exports = {
22
extends: ['eslint:recommended', 'plugin:node/recommended', 'plugin:eslint-plugin/recommended'],
33
env: {
44
es6: true
5+
},
6+
rules: {
7+
"node/no-extraneous-require": "off"
58
}
69
}

.github/workflows/ci.yml

+15
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ jobs:
3535
- run: npm run lint
3636
- run: npm run test
3737

38+
eslint9_test:
39+
name: Test eslint-plugin-wxml with eslint9
40+
runs-on: ubuntu-latest
41+
42+
steps:
43+
- uses: actions/checkout@v3
44+
- uses: actions/setup-node@v3
45+
with: {node-version: '${{ env.NODE_VERSION }}'}
46+
- run: npm install
47+
- run: npm install eslint@9
48+
- run: npm install semver
49+
- run: npm run lint
50+
- run: npm run test
51+
3852
eslint8_test:
3953
name: Test eslint-plugin-wxml with eslint8
4054
runs-on: ubuntu-latest
@@ -45,6 +59,7 @@ jobs:
4559
with: {node-version: '${{ env.NODE_VERSION }}'}
4660
- run: npm install
4761
- run: npm install eslint@8
62+
- run: npm install semver
4863
- run: npm run lint
4964
- run: npm run test
5065

eslint.config.mjs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import js from "@eslint/js";
2+
3+
export default [
4+
{
5+
...js.configs.recommended,
6+
files: ["lib/**/*.js"],
7+
ignores: ["website/**", "tools/**"]
8+
},
9+
{
10+
languageOptions: {
11+
globals: {
12+
module: "readonly",
13+
require: "readonly",
14+
}
15+
}
16+
}
17+
];

lib/rules/no-unexpected-string-bool.js

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ module.exports = {
2424
if (node.value === "true" || node.value === "false") {
2525
context.report({
2626
node,
27+
data: {
28+
true: "{{true}}",
29+
false: "{{false}}",
30+
},
2731
messageId: node.value === "true" ? "trueString" : "falseString",
2832
});
2933
}

lib/rules/omit-bool-attributes.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ module.exports = {
2424
context.report({
2525
node,
2626
messageId: "omitWarn",
27-
data: { attrKey: node.key },
27+
data: {
28+
attrKey: node.key,
29+
true: "{{true}}",
30+
false: "{{false}}",
31+
},
2832
});
2933
}
3034
}

lib/rules/report-interpolation-error.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ module.exports = {
2323
return;
2424
}
2525
try {
26-
// eslint-disable-next-line node/no-extraneous-require
2726
espreeParser = require("espree");
27+
// eslint-disable-next-line no-unused-vars
2828
} catch (_) {
2929
// ...
3030
}
@@ -38,11 +38,13 @@ module.exports = {
3838
espreeParser.parse(`({${node.value}})`, {
3939
ecmaVersion: espreeParser.latestEcmaVersion,
4040
});
41+
// eslint-disable-next-line no-unused-vars
4142
} catch (_) {
4243
try {
4344
espreeParser.parse(`(${node.value})`, {
4445
ecmaVersion: espreeParser.latestEcmaVersion,
4546
});
47+
// eslint-disable-next-line no-unused-vars
4648
} catch (_) {
4749
context.report({
4850
node,

tests/rule-tester-compat.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const eslint = require("eslint");
2+
const semver = require("semver");
3+
4+
const ruleTester = semver.gte(eslint.Linter.version, "9.0.0-0")
5+
? new eslint.RuleTester({
6+
languageOptions: {
7+
parser: require("@wxml/parser"),
8+
},
9+
})
10+
: new eslint.RuleTester({ parser: require.resolve("@wxml/parser") });
11+
12+
module.exports.RuleTester = ruleTester;

tests/rules/colon-style-event-binding.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/colon-style-event-binding");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("colon-style-event-binding", rule, {
95
valid: [
106
{

tests/rules/empty-tag-self-closing.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/empty-tag-self-closing");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("empty-tag-self-closing", rule, {
95
valid: [
106
{

tests/rules/event-binding-style.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/event-binding-style");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("event-binding-style", rule, {
95
valid: [
106
{

tests/rules/forbid-attributes.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/forbid-attributes");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("forbid-attributes", rule, {
95
valid: [
106
{

tests/rules/forbid-tags.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/forbid-tags");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("forbid-tags", rule, {
95
valid: [
106
{

tests/rules/max-depth.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/max-depth");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("max-depth", rule, {
95
valid: [
106
{

tests/rules/max-len.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/max-len");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("max-len", rule, {
95
valid: [
106
{

tests/rules/max-lines.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
const fs = require("fs");
22
const path = require("path");
3-
const RuleTester = require("eslint").RuleTester;
3+
const tester = require("../rule-tester-compat").RuleTester;
44
const rule = require("../../lib/rules/max-lines");
55

6-
const tester = new RuleTester({
7-
parser: require.resolve("@wxml/parser"),
8-
});
9-
106
function readFixureFiles(filename) {
117
if (filename) {
128
return fs.readFileSync(

tests/rules/no-const-and-let-in-wxs.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-const-and-let-in-wxs");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-const-and-let-in-wxs", rule, {
95
valid: [
106
{

tests/rules/no-dot-this-in-wx-key.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-dot-this-in-wx-key");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-dot-this-in-wx-key", rule, {
95
valid: [
106
{

tests/rules/no-duplicate-attributes.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-duplicate-attributes");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-duplicate-attributes", rule, {
95
valid: [
106
{

tests/rules/no-dynamic-wx-key.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-dynamic-wx-key");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-dynamic-wx-key", rule, {
95
valid: [
106
{

tests/rules/no-inconsistent-tagname.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-inconsistent-tagname");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-inconsistent-tagname", rule, {
95
valid: [
106
{

tests/rules/no-index-in-wx-key.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-index-in-wx-key");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-index-in-wx-key", rule, {
95
valid: [
106
{

tests/rules/no-inline-wxs.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-inline-wxs");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-inline-wxs", rule, {
95
valid: [
106
{

tests/rules/no-unexpected-string-bool.js

+28-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-unexpected-string-bool");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-unexpected-string-bool", rule, {
95
valid: [
106
{
@@ -24,17 +20,41 @@ tester.run("no-unexpected-string-bool", rule, {
2420
{
2521
filename: "test.wxml",
2622
code: `<popup wx:if="true" />`,
27-
errors: [{ messageId: "trueString" }],
23+
errors: [
24+
{
25+
messageId: "trueString",
26+
data: {
27+
true: "{{true}}",
28+
false: "{{false}}",
29+
},
30+
},
31+
],
2832
},
2933
{
3034
filename: "test.wxml",
3135
code: `<popup wx:if="false" />`,
32-
errors: [{ messageId: "falseString" }],
36+
errors: [
37+
{
38+
messageId: "falseString",
39+
data: {
40+
true: "{{true}}",
41+
false: "{{false}}",
42+
},
43+
},
44+
],
3345
},
3446
{
3547
filename: "test.wxml",
3648
code: `<dialog showAnime="false" />`,
37-
errors: [{ messageId: "falseString" }],
49+
errors: [
50+
{
51+
messageId: "falseString",
52+
data: {
53+
true: "{{true}}",
54+
false: "{{false}}",
55+
},
56+
},
57+
],
3858
},
3959
],
4060
});

tests/rules/no-unnecessary-block.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-unnecessary-block");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-unnecessary-block", rule, {
95
valid: [
106
{

tests/rules/no-vue-directive.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-vue-directive");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-vue-directive", rule, {
95
valid: [
106
{

tests/rules/no-wx-for-with-wx-else.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
const RuleTester = require("eslint").RuleTester;
1+
const tester = require("../rule-tester-compat").RuleTester;
22
const rule = require("../../lib/rules/no-wx-for-with-wx-else");
33

4-
const tester = new RuleTester({
5-
parser: require.resolve("@wxml/parser"),
6-
});
7-
84
tester.run("no-wx-for-with-wx-else", rule, {
95
valid: [
106
{

0 commit comments

Comments
 (0)