Skip to content

Commit 0ac2283

Browse files
committed
feat: enhance README.md with usage examples and roadmap; update package.json keywords; refactor ESLint configs
1 parent 954a5ab commit 0ac2283

File tree

4 files changed

+70
-40
lines changed

4 files changed

+70
-40
lines changed

README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ npm install eslint-plugin-vue-fsd --save-dev
2828

2929
## Usage
3030

31+
We provide two predefined configurations to help enforce FSD principles in your Vue.js projects.
32+
33+
- recommended - enables the rules that recommended best practices for FSD and Vue.js development.
34+
- all - enables all of the rules shipped with eslint-plugin-vue-fsd.
35+
36+
Eslint v9+ configuration (Recommended):
37+
3138
```javascript
3239
import vueFsdPlugin from 'eslint-plugin-vue-fsd'
3340

@@ -37,12 +44,44 @@ module.exports = {
3744
}
3845
```
3946

47+
Legacy Eslint v8 configuration:
48+
49+
```javascript
50+
import vueFsdPlugin from 'eslint-plugin-vue-fsd'
51+
52+
// .eslintrc.js
53+
module.exports = {
54+
extends: ['plugin:vue-fsd/legacy/recommended'],
55+
}
56+
```
57+
4058
## Rules
4159

60+
The plugin provides the rules to enforce [Feature-Sliced Design](https://feature-sliced.design/) principles in [Vue.js](https://vuejs.org/) projects.
61+
4262
| Rule | Description |
4363
| -------------------------------------------------------- | ---------------------------------------------- |
4464
| [no-processes-layer](./docs/rules/no-processes-layer.md) | Ensure deprecated processes layer is not used. |
4565

66+
## Roadmap
67+
68+
As the plugin evolves, we plan to implement the following rules:
69+
70+
- no-higher-level-imports: Forbid imports from higher layers.
71+
- no-cross-slice-imports: Forbid cross-imports between slices on the same layer.
72+
- no-layer-public-api: Forbid exposing public APIs from a layer.
73+
- no-segments-without-slices: Forbid segments without slices.
74+
- public-api: Enforce consistent public API on slices.
75+
- no-ui-in-app: Forbid using UI segment in the app layer.
76+
- no-direct-imports: Forbid direct imports from outside the slice.
77+
- enforce-slice-relative-path: Imports within one slice should be relative.
78+
- slice-naming: Enforce consistent naming conventions for slices.
79+
- composables-naming: Enforce consistent naming conventions for composables.
80+
- components-naming: Enforce consistent naming conventions for components.
81+
- sfc-sections-order: Enforce consistent order of top-level sections in single-file components.
82+
83+
We are always open to suggestions and contributions for new rules and improvements.
84+
4685
## Contribution
4786

4887
Pull requests and issues are welcome! Please follow the code style and add tests for new rules.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
},
1212
"keywords": [
1313
"eslint",
14-
"vue3",
14+
"vue",
1515
"fsd",
16+
"feature-sliced-design",
1617
"boundaries",
1718
"architecture"
1819
],

src/configs.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
export const getConfigs = (plugin) => {
2+
const recommendedRules = { 'vue-fsd/no-processes-layer': 'error' }
3+
const allRules = { ...recommendedRules }
4+
5+
const languageOptions = {
6+
ecmaVersion: 2022,
7+
sourceType: 'module',
8+
}
9+
10+
const pluginConfig = (plugin, rules) => ({
11+
plugins: { 'vue-fsd': plugin },
12+
rules,
13+
languageOptions,
14+
})
15+
16+
const legacyConfig = (rules) => ({
17+
plugins: ['vue-fsd'],
18+
rules,
19+
})
20+
21+
return {
22+
recommended: [pluginConfig(plugin, recommendedRules)],
23+
all: [pluginConfig(plugin, allRules)],
24+
'legacy/recommended': legacyConfig(recommendedRules),
25+
'legacy/all': legacyConfig(allRules),
26+
}
27+
}

src/index.js

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import meta from './meta.js'
22
import noProcessesLayer from './rules/no-processes-layer.js'
3+
import { getConfigs } from './configs.js'
34

45
const plugin = {
56
meta,
@@ -11,44 +12,6 @@ const plugin = {
1112
utils: {},
1213
}
1314

14-
// Flat config for ESLint v9+
15-
plugin.configs.recommended = [
16-
{
17-
plugins: {
18-
'vue-fsd': plugin,
19-
},
20-
rules: { 'vue-fsd/no-processes-layer': 'error' },
21-
languageOptions: {
22-
ecmaVersion: 2022,
23-
sourceType: 'module',
24-
},
25-
},
26-
]
27-
28-
// Strict config with all rules enabled
29-
plugin.configs.strict = [
30-
{
31-
plugins: {
32-
'vue-fsd': plugin,
33-
},
34-
rules: { 'vue-fsd/no-processes-layer': 'error' },
35-
languageOptions: {
36-
ecmaVersion: 2022,
37-
sourceType: 'module',
38-
},
39-
},
40-
]
41-
42-
// Classic config for legacy support
43-
plugin.configs['legacy/recommended'] = {
44-
plugins: ['vue-fsd'],
45-
rules: { 'vue-fsd/no-processes-layer': 'error' },
46-
}
47-
48-
// Strict config with all rules enabled (legacy)
49-
plugin.configs['legacy/strict'] = {
50-
plugins: ['vue-fsd'],
51-
rules: { 'vue-fsd/no-processes-layer': 'error' },
52-
}
15+
plugin.configs = getConfigs(plugin)
5316

5417
export default plugin

0 commit comments

Comments
 (0)