eslint-plugin-vue-scoped-css 2.7.2 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -4
- package/dist/configs/all.js +7 -1
- package/dist/configs/flat/all.js +13 -0
- package/dist/configs/flat/base.js +41 -0
- package/dist/configs/flat/recommended.js +13 -0
- package/dist/configs/flat/vue2-recommended.js +13 -0
- package/dist/configs/recommended.js +8 -2
- package/dist/configs/vue3-recommended.js +7 -1
- package/dist/index.js +11 -0
- package/dist/rules/enforce-style-type.js +1 -1
- package/dist/rules/no-parsing-error.js +1 -1
- package/dist/rules/no-unused-keyframes.js +1 -1
- package/dist/rules/no-unused-selector.js +1 -1
- package/dist/rules/require-scoped.js +1 -1
- package/dist/styles/context/vue-components/index.js +17 -7
- package/dist/styles/parser/selector/css-selector-parser.js +47 -10
- package/package.json +44 -38
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ npm install --save-dev eslint eslint-plugin-vue-scoped-css vue-eslint-parser
|
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
> **Requirements**
|
|
43
|
-
>
|
|
43
|
+
>
|
|
44
44
|
> - ESLint v6.0.0 and above
|
|
45
45
|
> - Node.js v12.22.x, v14.17.x, v16.x and above
|
|
46
46
|
|
|
@@ -49,8 +49,32 @@ npm install --save-dev eslint eslint-plugin-vue-scoped-css vue-eslint-parser
|
|
|
49
49
|
## Usage
|
|
50
50
|
|
|
51
51
|
<!--USAGE_SECTION_START-->
|
|
52
|
+
<!--USAGE_GUIDE_START-->
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
### New Config (`eslint.config.js`)
|
|
55
|
+
|
|
56
|
+
Use `eslint.config.js` file to configure rules. See also: <https://eslint.org/docs/latest/use/configure/configuration-files-new>.
|
|
57
|
+
|
|
58
|
+
Example **eslint.config.js**:
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
import eslintPluginVueScopedCSS from 'eslint-plugin-vue-scoped-css';
|
|
62
|
+
export default [
|
|
63
|
+
// add more generic rule sets here, such as:
|
|
64
|
+
// js.configs.recommended,
|
|
65
|
+
...eslintPluginVueScopedCSS.configs['flat/recommended'],
|
|
66
|
+
{
|
|
67
|
+
rules: {
|
|
68
|
+
// override/add rules settings here, such as:
|
|
69
|
+
// 'vue-scoped-css/no-unused-selector': 'error'
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Legacy Config (`.eslintrc`)
|
|
76
|
+
|
|
77
|
+
Use `.eslintrc.*` file to configure rules. See also: <https://eslint.org/docs/latest/use/configure/>.
|
|
54
78
|
|
|
55
79
|
Example **.eslintrc.js**:
|
|
56
80
|
|
|
@@ -72,11 +96,21 @@ module.exports = {
|
|
|
72
96
|
|
|
73
97
|
This plugin provides some predefined configs:
|
|
74
98
|
|
|
99
|
+
### New Config (`eslint.config.js`)
|
|
100
|
+
|
|
101
|
+
- `*.configs['flat/base']` - Settings and rules to enable this plugin
|
|
102
|
+
- `*.configs['flat/recommended']` - `/base`, plus rules for better ways to help you avoid problems for Vue.js 3.x
|
|
103
|
+
- `*.configs['flat/vue2-recommended']` - `/base`, plus rules for better ways to help you avoid problems for Vue.js 2.x
|
|
104
|
+
- `*.configs['flat/all']` - All rules of this plugin are included
|
|
105
|
+
|
|
106
|
+
### Legacy Config (`.eslintrc`)
|
|
107
|
+
|
|
75
108
|
- `plugin:vue-scoped-css/base` - Settings and rules to enable this plugin
|
|
76
109
|
- `plugin:vue-scoped-css/recommended` - `/base`, plus rules for better ways to help you avoid problems for Vue.js 2.x
|
|
77
110
|
- `plugin:vue-scoped-css/vue3-recommended` - `/base`, plus rules for better ways to help you avoid problems for Vue.js 3.x
|
|
78
111
|
- `plugin:vue-scoped-css/all` - All rules of this plugin are included
|
|
79
112
|
|
|
113
|
+
<!--USAGE_GUIDE_END-->
|
|
80
114
|
<!--USAGE_SECTION_END-->
|
|
81
115
|
|
|
82
116
|
## Rules
|
|
@@ -91,9 +125,17 @@ The `--fix` option on the [command line](https://eslint.org/docs/user-guide/comm
|
|
|
91
125
|
|
|
92
126
|
Enforce all the rules in this category with:
|
|
93
127
|
|
|
128
|
+
```js
|
|
129
|
+
export default [
|
|
130
|
+
...eslintPluginVueScopedCSS.configs['flat/recommended'],
|
|
131
|
+
]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
or
|
|
135
|
+
|
|
94
136
|
```json
|
|
95
137
|
{
|
|
96
|
-
"extends": "plugin:vue-scoped-css/vue3-recommended"
|
|
138
|
+
"extends": ["plugin:vue-scoped-css/vue3-recommended"]
|
|
97
139
|
}
|
|
98
140
|
```
|
|
99
141
|
|
|
@@ -113,9 +155,17 @@ Enforce all the rules in this category with:
|
|
|
113
155
|
|
|
114
156
|
Enforce all the rules in this category with:
|
|
115
157
|
|
|
158
|
+
```js
|
|
159
|
+
export default [
|
|
160
|
+
...eslintPluginVueScopedCSS.configs['flat/vue2-recommended'],
|
|
161
|
+
]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
or
|
|
165
|
+
|
|
116
166
|
```json
|
|
117
167
|
{
|
|
118
|
-
"extends": "plugin:vue-scoped-css/recommended"
|
|
168
|
+
"extends": ["plugin:vue-scoped-css/recommended"]
|
|
119
169
|
}
|
|
120
170
|
```
|
|
121
171
|
|
package/dist/configs/all.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
const rules_1 = require("../utils/rules");
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const base = require.resolve("./base");
|
|
8
|
+
const baseExtend = path_1.default.extname(`${base}`) === ".ts" ? "plugin:vue-scoped-css/base" : base;
|
|
3
9
|
module.exports = {
|
|
4
|
-
extends:
|
|
10
|
+
extends: baseExtend,
|
|
5
11
|
rules: (0, rules_1.collectRules)(),
|
|
6
12
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const rules_1 = require("../../utils/rules");
|
|
7
|
+
const base_1 = __importDefault(require("./base"));
|
|
8
|
+
exports.default = [
|
|
9
|
+
...base_1.default,
|
|
10
|
+
{
|
|
11
|
+
rules: (0, rules_1.collectRules)(),
|
|
12
|
+
},
|
|
13
|
+
];
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const vueParser = __importStar(require("vue-eslint-parser"));
|
|
27
|
+
exports.default = [
|
|
28
|
+
{
|
|
29
|
+
plugins: {
|
|
30
|
+
get "vue-scoped-css"() {
|
|
31
|
+
return require("../../index");
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
files: ["*.vue", "**/*.vue"],
|
|
37
|
+
languageOptions: {
|
|
38
|
+
parser: vueParser,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const rules_1 = require("../../utils/rules");
|
|
7
|
+
const base_1 = __importDefault(require("./base"));
|
|
8
|
+
exports.default = [
|
|
9
|
+
...base_1.default,
|
|
10
|
+
{
|
|
11
|
+
rules: (0, rules_1.collectRules)("vue3-recommended"),
|
|
12
|
+
},
|
|
13
|
+
];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const rules_1 = require("../../utils/rules");
|
|
7
|
+
const base_1 = __importDefault(require("./base"));
|
|
8
|
+
exports.default = [
|
|
9
|
+
...base_1.default,
|
|
10
|
+
{
|
|
11
|
+
rules: (0, rules_1.collectRules)("vue2-recommended"),
|
|
12
|
+
},
|
|
13
|
+
];
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
const rules_1 = require("../utils/rules");
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const base = require.resolve("./base");
|
|
8
|
+
const baseExtend = path_1.default.extname(`${base}`) === ".ts" ? "plugin:vue-scoped-css/base" : base;
|
|
3
9
|
module.exports = {
|
|
4
|
-
extends:
|
|
5
|
-
rules: (0, rules_1.collectRules)("recommended"),
|
|
10
|
+
extends: baseExtend,
|
|
11
|
+
rules: (0, rules_1.collectRules)("vue2-recommended"),
|
|
6
12
|
};
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
const rules_1 = require("../utils/rules");
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const base = require.resolve("./base");
|
|
8
|
+
const baseExtend = path_1.default.extname(`${base}`) === ".ts" ? "plugin:vue-scoped-css/base" : base;
|
|
3
9
|
module.exports = {
|
|
4
|
-
extends:
|
|
10
|
+
extends: baseExtend,
|
|
5
11
|
rules: (0, rules_1.collectRules)("vue3-recommended"),
|
|
6
12
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
const rules_1 = require("./utils/rules");
|
|
6
|
+
const base_1 = __importDefault(require("./configs/flat/base"));
|
|
7
|
+
const recommended_1 = __importDefault(require("./configs/flat/recommended"));
|
|
8
|
+
const vue2_recommended_1 = __importDefault(require("./configs/flat/vue2-recommended"));
|
|
9
|
+
const all_1 = __importDefault(require("./configs/flat/all"));
|
|
3
10
|
const configs = {
|
|
4
11
|
base: require("./configs/base"),
|
|
5
12
|
recommended: require("./configs/recommended"),
|
|
6
13
|
"vue3-recommended": require("./configs/vue3-recommended"),
|
|
7
14
|
all: require("./configs/all"),
|
|
15
|
+
"flat/base": base_1.default,
|
|
16
|
+
"flat/recommended": recommended_1.default,
|
|
17
|
+
"flat/vue2-recommended": vue2_recommended_1.default,
|
|
18
|
+
"flat/all": all_1.default,
|
|
8
19
|
};
|
|
9
20
|
const rules = rules_1.rules.reduce((obj, r) => {
|
|
10
21
|
var _a;
|
|
@@ -10,7 +10,7 @@ module.exports = {
|
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
12
|
description: "enforce the `<style>` tags to be plain or have the `scoped` or `module` attribute",
|
|
13
|
-
categories: ["recommended", "vue3-recommended"],
|
|
13
|
+
categories: ["vue2-recommended", "vue3-recommended"],
|
|
14
14
|
default: "warn",
|
|
15
15
|
url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/enforce-style-type.html",
|
|
16
16
|
suggestion: true,
|
|
@@ -4,7 +4,7 @@ module.exports = {
|
|
|
4
4
|
meta: {
|
|
5
5
|
docs: {
|
|
6
6
|
description: "disallow parsing errors in `<style>`",
|
|
7
|
-
categories: ["recommended", "vue3-recommended"],
|
|
7
|
+
categories: ["vue2-recommended", "vue3-recommended"],
|
|
8
8
|
default: "warn",
|
|
9
9
|
url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/no-parsing-error.html",
|
|
10
10
|
},
|
|
@@ -7,7 +7,7 @@ module.exports = {
|
|
|
7
7
|
meta: {
|
|
8
8
|
docs: {
|
|
9
9
|
description: "disallow `@keyframes` which don't use in Scoped CSS",
|
|
10
|
-
categories: ["recommended", "vue3-recommended"],
|
|
10
|
+
categories: ["vue2-recommended", "vue3-recommended"],
|
|
11
11
|
default: "warn",
|
|
12
12
|
url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/no-unused-keyframes.html",
|
|
13
13
|
},
|
|
@@ -54,7 +54,7 @@ module.exports = {
|
|
|
54
54
|
meta: {
|
|
55
55
|
docs: {
|
|
56
56
|
description: "disallow selectors defined in Scoped CSS that don't use in `<template>`",
|
|
57
|
-
categories: ["recommended", "vue3-recommended"],
|
|
57
|
+
categories: ["vue2-recommended", "vue3-recommended"],
|
|
58
58
|
default: "warn",
|
|
59
59
|
url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/no-unused-selector.html",
|
|
60
60
|
},
|
|
@@ -6,7 +6,7 @@ module.exports = {
|
|
|
6
6
|
deprecated: true,
|
|
7
7
|
docs: {
|
|
8
8
|
description: "enforce the `<style>` tags to has the `scoped` attribute",
|
|
9
|
-
categories: ["recommended", "vue3-recommended"],
|
|
9
|
+
categories: ["vue2-recommended", "vue3-recommended"],
|
|
10
10
|
default: "warn",
|
|
11
11
|
url: "https://future-architect.github.io/eslint-plugin-vue-scoped-css/rules/require-scoped.html",
|
|
12
12
|
suggestion: true,
|
|
@@ -74,11 +74,16 @@ function extractVueComponentData(dataNode, context) {
|
|
|
74
74
|
if ((dataNode.type === "ArrowFunctionExpression" &&
|
|
75
75
|
dataNode.body.type === "BlockStatement") ||
|
|
76
76
|
dataNode.type === "FunctionExpression") {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
if (dataNode.body.type === "BlockStatement") {
|
|
78
|
+
for (const returnStatement of getReturnStatements(dataNode.body, context)) {
|
|
79
|
+
if (returnStatement.argument) {
|
|
80
|
+
dataNodes.push(returnStatement.argument);
|
|
81
|
+
}
|
|
80
82
|
}
|
|
81
83
|
}
|
|
84
|
+
else {
|
|
85
|
+
dataNodes.push(dataNode.body);
|
|
86
|
+
}
|
|
82
87
|
}
|
|
83
88
|
else if (dataNode.type === "ArrowFunctionExpression" &&
|
|
84
89
|
dataNode.body.type !== "BlockStatement") {
|
|
@@ -143,10 +148,15 @@ function extractVueComponentComputed(computedNode, context) {
|
|
|
143
148
|
if ((func.type === "ArrowFunctionExpression" &&
|
|
144
149
|
func.body.type === "BlockStatement") ||
|
|
145
150
|
func.type === "FunctionExpression") {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
151
|
+
if (func.body.type === "BlockStatement") {
|
|
152
|
+
const exprs = getReturnStatements(func.body, context)
|
|
153
|
+
.map((r) => r.argument)
|
|
154
|
+
.filter(utils_1.isDefined);
|
|
155
|
+
values.push(...exprs);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
values.push(func.body);
|
|
159
|
+
}
|
|
150
160
|
}
|
|
151
161
|
else if (func.type === "ArrowFunctionExpression" &&
|
|
152
162
|
func.body.type !== "BlockStatement") {
|
|
@@ -88,7 +88,9 @@ class CSSSelectorParser {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
convertSelectorNode(node, loc, start, end, parent) {
|
|
91
|
-
|
|
91
|
+
const sourceCode = this.sourceCode;
|
|
92
|
+
const code = sourceCode.text;
|
|
93
|
+
let source = code.slice(start, end);
|
|
92
94
|
const beforeSpaces = /^\s+/u.exec(source);
|
|
93
95
|
if (beforeSpaces === null || beforeSpaces === void 0 ? void 0 : beforeSpaces[0]) {
|
|
94
96
|
start = start + beforeSpaces[0].length;
|
|
@@ -101,18 +103,53 @@ class CSSSelectorParser {
|
|
|
101
103
|
loc.end = this.sourceCode.getLocFromIndex(end);
|
|
102
104
|
source = source.slice(0, -afterSpaces[0].length);
|
|
103
105
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if ((beforeTrivials === null || beforeTrivials === void 0 ? void 0 : beforeTrivials[0]) && (afterTrivials === null || afterTrivials === void 0 ? void 0 : afterTrivials[0])) {
|
|
107
|
-
start = start + beforeTrivials[0].length;
|
|
108
|
-
loc.start = this.sourceCode.getLocFromIndex(start);
|
|
109
|
-
end = end - afterTrivials[0].length;
|
|
110
|
-
loc.end = this.sourceCode.getLocFromIndex(end);
|
|
111
|
-
source = source.slice(beforeTrivials[0].length, -afterTrivials[0].length);
|
|
112
|
-
}
|
|
106
|
+
adjustBeforeParenLocation();
|
|
107
|
+
adjustAfterParenLocation();
|
|
113
108
|
return new ast_1.VCSSSelector(node, loc, start, end, {
|
|
114
109
|
parent: parent,
|
|
115
110
|
});
|
|
111
|
+
function adjustBeforeParenLocation() {
|
|
112
|
+
const beforeTrivials = /^\(\s*/u.exec(source);
|
|
113
|
+
if (!(beforeTrivials === null || beforeTrivials === void 0 ? void 0 : beforeTrivials[0]))
|
|
114
|
+
return;
|
|
115
|
+
let withinParen = false;
|
|
116
|
+
for (let index = end - 1; index < code.length; index++) {
|
|
117
|
+
const ch = code[index];
|
|
118
|
+
if (ch === ")") {
|
|
119
|
+
withinParen = true;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
else if ((ch === null || ch === void 0 ? void 0 : ch.trim()) && index !== end - 1) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (!withinParen)
|
|
127
|
+
return;
|
|
128
|
+
start = start + beforeTrivials[0].length;
|
|
129
|
+
loc.start = sourceCode.getLocFromIndex(start);
|
|
130
|
+
source = source.slice(beforeTrivials[0].length);
|
|
131
|
+
}
|
|
132
|
+
function adjustAfterParenLocation() {
|
|
133
|
+
const afterTrivials = /\s*\)$/u.exec(source);
|
|
134
|
+
if (!(afterTrivials === null || afterTrivials === void 0 ? void 0 : afterTrivials[0]))
|
|
135
|
+
return;
|
|
136
|
+
let withinParen = false;
|
|
137
|
+
for (let index = start - 1; index >= 0; index--) {
|
|
138
|
+
const ch = code[index];
|
|
139
|
+
if (ch === "(") {
|
|
140
|
+
withinParen = true;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
else if (ch === null || ch === void 0 ? void 0 : ch.trim()) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (!withinParen)
|
|
148
|
+
return;
|
|
149
|
+
end = end - afterTrivials[0].length;
|
|
150
|
+
loc.end = sourceCode.getLocFromIndex(end);
|
|
151
|
+
source = source.slice(0, -afterTrivials[0].length);
|
|
152
|
+
}
|
|
116
153
|
}
|
|
117
154
|
convertTagNode(node, loc, start, end, parent) {
|
|
118
155
|
return new ast_1.VCSSTypeSelector(node, loc, start, end, {
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-vue-scoped-css",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "ESLint plugin for Scoped CSS in Vue.js",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"prebuild": "npm run -s clean",
|
|
8
8
|
"build": "tsc --project ./tsconfig.build.json",
|
|
9
9
|
"clean": "rimraf .nyc_output dist coverage",
|
|
10
|
-
"lint": "eslint .
|
|
11
|
-
"eslint-fix": "eslint . --
|
|
10
|
+
"lint": "eslint .",
|
|
11
|
+
"eslint-fix": "eslint . --fix",
|
|
12
12
|
"pretest": "npm run build",
|
|
13
13
|
"test:base": "mocha --require ts-node/register \"tests/**/*.ts\" --reporter dot --timeout 60000",
|
|
14
14
|
"test": "npm run test:nyc",
|
|
@@ -17,9 +17,10 @@
|
|
|
17
17
|
"test:watch": "npm run test:base -- --watch",
|
|
18
18
|
"update": "ts-node ./tools/update.ts && npm run eslint-fix && npm run test:nyc",
|
|
19
19
|
"new": "ts-node ./tools/new-rule.ts",
|
|
20
|
-
"
|
|
21
|
-
"docs:
|
|
22
|
-
"
|
|
20
|
+
"predocs:watch": "npm run build",
|
|
21
|
+
"docs:watch": "vitepress dev docs",
|
|
22
|
+
"docs:build": "npm run build && vitepress build docs",
|
|
23
|
+
"docs:open-dist": "cd ./docs/.vitepress/dist && npx -y http-server --open http://localhost:8080/eslint-plugin-vue-scoped-css/",
|
|
23
24
|
"preversion": "npm test && npm run update && git add .",
|
|
24
25
|
"version": "npm run lint -- --fix && git add .",
|
|
25
26
|
"version:ci": "npm run update && changeset version",
|
|
@@ -51,51 +52,56 @@
|
|
|
51
52
|
"dist"
|
|
52
53
|
],
|
|
53
54
|
"devDependencies": {
|
|
54
|
-
"@changesets/cli": "^2.
|
|
55
|
-
"@
|
|
55
|
+
"@changesets/cli": "^2.27.5",
|
|
56
|
+
"@eslint-community/eslint-plugin-eslint-comments": "^4.3.0",
|
|
57
|
+
"@ota-meshi/eslint-plugin": "^0.17.4",
|
|
58
|
+
"@ota-meshi/site-kit-eslint-editor-vue": "^0.2.1",
|
|
56
59
|
"@svitejs/changesets-changelog-github-compact": "^1.1.0",
|
|
57
|
-
"@types/eslint": "^8.
|
|
58
|
-
"@types/
|
|
59
|
-
"@types/
|
|
60
|
-
"@types/
|
|
61
|
-
"@types/
|
|
62
|
-
"@types/semver": "^7.
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
64
|
-
"@typescript-eslint/parser": "^
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"eslint
|
|
68
|
-
"eslint-
|
|
69
|
-
"eslint-plugin-eslint-plugin": "^
|
|
70
|
-
"eslint-plugin-
|
|
71
|
-
"eslint-plugin-
|
|
72
|
-
"eslint-plugin-
|
|
73
|
-
"eslint-plugin-
|
|
74
|
-
"eslint-plugin-
|
|
75
|
-
"eslint-plugin-
|
|
76
|
-
"eslint-plugin-
|
|
77
|
-
"eslint-plugin-vue
|
|
78
|
-
"eslint-plugin-
|
|
60
|
+
"@types/eslint": "^8.56.10",
|
|
61
|
+
"@types/estree": "^1.0.5",
|
|
62
|
+
"@types/lodash": "^4.17.5",
|
|
63
|
+
"@types/mocha": "^10.0.7",
|
|
64
|
+
"@types/node": "^20.14.8",
|
|
65
|
+
"@types/semver": "^7.5.8",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^7.13.1",
|
|
67
|
+
"@typescript-eslint/parser": "^7.13.1",
|
|
68
|
+
"assert": "^2.1.0",
|
|
69
|
+
"cross-env": "^7.0.3",
|
|
70
|
+
"eslint": "^9.5.0",
|
|
71
|
+
"eslint-config-prettier": "^9.1.0",
|
|
72
|
+
"eslint-plugin-eslint-plugin": "^6.1.0",
|
|
73
|
+
"eslint-plugin-jsdoc": "^48.2.15",
|
|
74
|
+
"eslint-plugin-json-schema-validator": "^5.1.1",
|
|
75
|
+
"eslint-plugin-jsonc": "^2.16.0",
|
|
76
|
+
"eslint-plugin-n": "^17.9.0",
|
|
77
|
+
"eslint-plugin-node-dependencies": "^0.12.0",
|
|
78
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
79
|
+
"eslint-plugin-regexp": "^2.6.0",
|
|
80
|
+
"eslint-plugin-vue": "^9.26.0",
|
|
81
|
+
"eslint-plugin-vue-scoped-css": "^2.8.0",
|
|
82
|
+
"eslint-plugin-yml": "^1.14.0",
|
|
83
|
+
"events": "^3.3.0",
|
|
79
84
|
"mocha": "^10.0.0",
|
|
80
|
-
"nyc": "^
|
|
81
|
-
"
|
|
85
|
+
"nyc": "^17.0.0",
|
|
86
|
+
"pako": "^2.1.0",
|
|
82
87
|
"prettier": "^3.1.0",
|
|
83
|
-
"raw-loader": "^4.0.1",
|
|
84
88
|
"rimraf": "^3.0.2",
|
|
85
89
|
"semver": "^7.3.2",
|
|
86
90
|
"stylelint": "^16.0.0",
|
|
87
91
|
"stylelint-config-recommended-vue": "^1.1.0",
|
|
88
92
|
"stylelint-config-standard": "^36.0.0",
|
|
93
|
+
"stylelint-config-standard-vue": "^1.0.0",
|
|
89
94
|
"stylelint-stylus": "^1.0.0",
|
|
90
95
|
"ts-node": "^10.9.1",
|
|
91
|
-
"typescript": "
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
96
|
+
"typescript": "~5.0.0",
|
|
97
|
+
"typescript-eslint": "^7.13.1",
|
|
98
|
+
"vite-plugin-eslint4b": "^0.4.6",
|
|
99
|
+
"vitepress": "^1.0.1",
|
|
100
|
+
"vue-eslint-parser": "^9.0.0"
|
|
95
101
|
},
|
|
96
102
|
"dependencies": {
|
|
97
103
|
"@eslint-community/eslint-utils": "^4.4.0",
|
|
98
|
-
"eslint-compat-utils": "^0.
|
|
104
|
+
"eslint-compat-utils": "^0.5.0",
|
|
99
105
|
"lodash": "^4.17.21",
|
|
100
106
|
"postcss": "^8.4.31",
|
|
101
107
|
"postcss-safe-parser": "^6.0.0",
|