eslint-plugin-functype 1.2.0 ā 2.0.0
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 +86 -44
- package/dist/chunk-BlXvk904.js +1 -0
- package/dist/cli/list-rules.d.ts +1 -1
- package/dist/cli/list-rules.js +15 -239
- package/dist/cli/list-rules.js.map +1 -1
- package/dist/index.d.ts +19 -16
- package/dist/index.js +1 -1075
- package/dist/index.js.map +1 -1
- package/dist/rules/index.d.ts +24 -29
- package/dist/rules/index.js +1 -1071
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/no-get-unsafe.d.ts +7 -0
- package/dist/rules/no-get-unsafe.js +2 -0
- package/dist/rules/no-get-unsafe.js.map +1 -0
- package/dist/rules/no-imperative-loops.d.ts +7 -0
- package/dist/rules/no-imperative-loops.js +2 -0
- package/dist/rules/no-imperative-loops.js.map +1 -0
- package/dist/rules/prefer-do-notation.d.ts +7 -0
- package/dist/rules/prefer-do-notation.js +5 -0
- package/dist/rules/prefer-do-notation.js.map +1 -0
- package/dist/rules/prefer-either.d.ts +7 -0
- package/dist/rules/prefer-either.js +2 -0
- package/dist/rules/prefer-either.js.map +1 -0
- package/dist/rules/prefer-flatmap.d.ts +7 -0
- package/dist/rules/prefer-flatmap.js +2 -0
- package/dist/rules/prefer-flatmap.js.map +1 -0
- package/dist/rules/prefer-fold.d.ts +7 -0
- package/dist/rules/prefer-fold.js +2 -0
- package/dist/rules/prefer-fold.js.map +1 -0
- package/dist/rules/prefer-list.d.ts +7 -0
- package/dist/rules/prefer-list.js +2 -0
- package/dist/rules/prefer-list.js.map +1 -0
- package/dist/rules/prefer-map.d.ts +7 -0
- package/dist/rules/prefer-map.js +2 -0
- package/dist/rules/prefer-map.js.map +1 -0
- package/dist/rules/prefer-option.d.ts +7 -0
- package/dist/rules/prefer-option.js +2 -0
- package/dist/rules/prefer-option.js.map +1 -0
- package/dist/types/ast.d.ts +12 -0
- package/dist/types/ast.js +1 -0
- package/dist/utils/dependency-validator.d.ts +13 -11
- package/dist/utils/dependency-validator.js +3 -108
- package/dist/utils/dependency-validator.js.map +1 -1
- package/dist/utils/functype-detection.d.ts +69 -0
- package/dist/utils/functype-detection.js +2 -0
- package/dist/utils/functype-detection.js.map +1 -0
- package/package.json +37 -34
package/README.md
CHANGED
|
@@ -7,25 +7,28 @@ Custom ESLint rules for functional TypeScript programming with [functype](https:
|
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
- š§ **
|
|
10
|
+
- š§ **9 Custom ESLint Rules** - Purpose-built for functional TypeScript patterns
|
|
11
|
+
- š **Do Notation Support** - New rule suggests functype's Do notation for complex monadic chains
|
|
11
12
|
- šļø **Functype Library Integration** - Smart detection when functype is already being used properly
|
|
12
13
|
- š ļø **Auto-Fixable** - Most violations can be automatically fixed with `--fix`
|
|
13
14
|
- ā” **ESLint 9+ Flat Config** - Modern ESLint configuration format
|
|
14
15
|
- šÆ **TypeScript Native** - Built specifically for TypeScript AST patterns
|
|
15
|
-
-
|
|
16
|
+
- šØ **Visual Test Output** - Beautiful before/after transformations with colorized diffs
|
|
17
|
+
- š **100+ Tests** - Comprehensive test coverage including real functype integration
|
|
16
18
|
|
|
17
19
|
## Rules
|
|
18
20
|
|
|
19
|
-
| Rule
|
|
20
|
-
|
|
21
|
-
| `prefer-option`
|
|
22
|
-
| `prefer-either`
|
|
23
|
-
| `prefer-list`
|
|
24
|
-
| `prefer-fold`
|
|
25
|
-
| `prefer-map`
|
|
26
|
-
| `prefer-flatmap`
|
|
27
|
-
| `no-get-unsafe`
|
|
28
|
-
| `no-imperative-loops` | Prefer functional iteration over imperative loops
|
|
21
|
+
| Rule | Description | Auto-Fix |
|
|
22
|
+
| --------------------- | ----------------------------------------------------------------- | -------- |
|
|
23
|
+
| `prefer-option` | Prefer `Option<T>` over nullable types (`T \| null \| undefined`) | ā
|
|
|
24
|
+
| `prefer-either` | Prefer `Either<E, T>` over try/catch and throw statements | ā
|
|
|
25
|
+
| `prefer-list` | Prefer `List<T>` over native arrays for immutable collections | ā
|
|
|
26
|
+
| `prefer-fold` | Prefer `.fold()` over complex if/else chains | ā
|
|
|
27
|
+
| `prefer-map` | Prefer `.map()` over imperative transformations | ā
|
|
|
28
|
+
| `prefer-flatmap` | Prefer `.flatMap()` over `.map().flat()` patterns | ā
|
|
|
29
|
+
| `no-get-unsafe` | Disallow unsafe `.get()` calls on Option/Either types | ā |
|
|
30
|
+
| `no-imperative-loops` | Prefer functional iteration over imperative loops | ā
|
|
|
31
|
+
| `prefer-do-notation` | Prefer Do notation for complex monadic compositions | ā
|
|
|
29
32
|
|
|
30
33
|
## Installation
|
|
31
34
|
|
|
@@ -39,7 +42,7 @@ pnpm add -D eslint-plugin-functype
|
|
|
39
42
|
|
|
40
43
|
```bash
|
|
41
44
|
npm install functype
|
|
42
|
-
# or
|
|
45
|
+
# or
|
|
43
46
|
pnpm add functype
|
|
44
47
|
```
|
|
45
48
|
|
|
@@ -49,12 +52,12 @@ pnpm add functype
|
|
|
49
52
|
|
|
50
53
|
```javascript
|
|
51
54
|
// eslint.config.mjs
|
|
52
|
-
import functypePlugin from
|
|
53
|
-
import tsParser from
|
|
55
|
+
import functypePlugin from "eslint-plugin-functype"
|
|
56
|
+
import tsParser from "@typescript-eslint/parser"
|
|
54
57
|
|
|
55
58
|
export default [
|
|
56
59
|
{
|
|
57
|
-
files: [
|
|
60
|
+
files: ["**/*.ts", "**/*.tsx"],
|
|
58
61
|
plugins: {
|
|
59
62
|
functype: functypePlugin,
|
|
60
63
|
},
|
|
@@ -62,19 +65,20 @@ export default [
|
|
|
62
65
|
parser: tsParser,
|
|
63
66
|
parserOptions: {
|
|
64
67
|
ecmaVersion: 2022,
|
|
65
|
-
sourceType:
|
|
68
|
+
sourceType: "module",
|
|
66
69
|
},
|
|
67
70
|
},
|
|
68
71
|
rules: {
|
|
69
72
|
// All rules as errors
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
"functype/prefer-option": "error",
|
|
74
|
+
"functype/prefer-either": "error",
|
|
75
|
+
"functype/prefer-list": "error",
|
|
76
|
+
"functype/prefer-fold": "error",
|
|
77
|
+
"functype/prefer-map": "error",
|
|
78
|
+
"functype/prefer-flatmap": "error",
|
|
79
|
+
"functype/no-get-unsafe": "error",
|
|
80
|
+
"functype/no-imperative-loops": "error",
|
|
81
|
+
"functype/prefer-do-notation": "error",
|
|
78
82
|
},
|
|
79
83
|
},
|
|
80
84
|
]
|
|
@@ -86,15 +90,16 @@ export default [
|
|
|
86
90
|
// eslint.config.mjs - Selective rules
|
|
87
91
|
export default [
|
|
88
92
|
{
|
|
89
|
-
files: [
|
|
93
|
+
files: ["**/*.ts"],
|
|
90
94
|
plugins: { functype: functypePlugin },
|
|
91
95
|
rules: {
|
|
92
96
|
// Start with just type safety rules
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
"functype/prefer-option": "warn",
|
|
98
|
+
"functype/no-get-unsafe": "error",
|
|
99
|
+
|
|
96
100
|
// Add more as your codebase evolves
|
|
97
|
-
|
|
101
|
+
"functype/prefer-list": "off", // Disable for gradual adoption
|
|
102
|
+
"functype/prefer-do-notation": "warn", // New: suggest Do notation
|
|
98
103
|
},
|
|
99
104
|
},
|
|
100
105
|
]
|
|
@@ -107,9 +112,11 @@ export default [
|
|
|
107
112
|
```typescript
|
|
108
113
|
// prefer-option: nullable types
|
|
109
114
|
const user: User | null = findUser(id)
|
|
110
|
-
function getAge(): number | undefined {
|
|
115
|
+
function getAge(): number | undefined {
|
|
116
|
+
/* ... */
|
|
117
|
+
}
|
|
111
118
|
|
|
112
|
-
// prefer-either: try/catch blocks
|
|
119
|
+
// prefer-either: try/catch blocks
|
|
113
120
|
try {
|
|
114
121
|
const result = riskyOperation()
|
|
115
122
|
return result
|
|
@@ -131,20 +138,31 @@ for (let i = 0; i < items.length; i++) {
|
|
|
131
138
|
if (condition1) {
|
|
132
139
|
return value1
|
|
133
140
|
} else if (condition2) {
|
|
134
|
-
return value2
|
|
141
|
+
return value2
|
|
135
142
|
} else {
|
|
136
143
|
return defaultValue
|
|
137
144
|
}
|
|
145
|
+
|
|
146
|
+
// prefer-do-notation: nested null checks
|
|
147
|
+
const city = (user && user.address && user.address.city) || "Unknown"
|
|
148
|
+
|
|
149
|
+
// prefer-do-notation: chained flatMap operations
|
|
150
|
+
const result = option1
|
|
151
|
+
.flatMap((x) => getOption2(x))
|
|
152
|
+
.flatMap((y) => getOption3(y))
|
|
153
|
+
.flatMap((z) => getOption4(z))
|
|
138
154
|
```
|
|
139
155
|
|
|
140
156
|
### ā
After (auto-fixed or manually corrected)
|
|
141
157
|
|
|
142
158
|
```typescript
|
|
143
|
-
import { Option, Either, List } from
|
|
159
|
+
import { Option, Either, List, Do, $ } from "functype"
|
|
144
160
|
|
|
145
161
|
// prefer-option: use Option<T>
|
|
146
162
|
const user: Option<User> = Option.fromNullable(findUser(id))
|
|
147
|
-
function getAge(): Option<number> {
|
|
163
|
+
function getAge(): Option<number> {
|
|
164
|
+
/* ... */
|
|
165
|
+
}
|
|
148
166
|
|
|
149
167
|
// prefer-either: use Either<E, T>
|
|
150
168
|
function safeOperation(): Either<Error, Result> {
|
|
@@ -161,13 +179,28 @@ const items: List<number> = List.from([1, 2, 3])
|
|
|
161
179
|
const readonlyItems: List<string> = List.from(["a", "b"])
|
|
162
180
|
|
|
163
181
|
// no-imperative-loops: use functional methods
|
|
164
|
-
items.forEach(item => console.log(item))
|
|
182
|
+
items.forEach((item) => console.log(item))
|
|
165
183
|
|
|
166
184
|
// prefer-fold: use fold for conditional logic
|
|
167
185
|
const result = Option.fromBoolean(condition1)
|
|
168
186
|
.map(() => value1)
|
|
169
187
|
.orElse(() => Option.fromBoolean(condition2).map(() => value2))
|
|
170
188
|
.getOrElse(defaultValue)
|
|
189
|
+
|
|
190
|
+
// prefer-do-notation: use Do notation for nested checks
|
|
191
|
+
const city = Do(function* () {
|
|
192
|
+
const u = yield* $(Option(user))
|
|
193
|
+
const addr = yield* $(Option(u.address))
|
|
194
|
+
return yield* $(Option(addr.city))
|
|
195
|
+
}).getOrElse("Unknown")
|
|
196
|
+
|
|
197
|
+
// prefer-do-notation: use Do for complex chains
|
|
198
|
+
const result = Do(function* () {
|
|
199
|
+
const x = yield* $(option1)
|
|
200
|
+
const y = yield* $(getOption2(x))
|
|
201
|
+
const z = yield* $(getOption3(y))
|
|
202
|
+
return yield* $(getOption4(z))
|
|
203
|
+
})
|
|
171
204
|
```
|
|
172
205
|
|
|
173
206
|
## Functype Integration
|
|
@@ -175,16 +208,16 @@ const result = Option.fromBoolean(condition1)
|
|
|
175
208
|
The plugin is **functype-aware** and won't flag code that's already using functype properly:
|
|
176
209
|
|
|
177
210
|
```typescript
|
|
178
|
-
import { Option, List } from
|
|
211
|
+
import { Option, List } from "functype"
|
|
179
212
|
|
|
180
213
|
// ā
These won't be flagged - already using functype correctly
|
|
181
214
|
const user = Option.some({ name: "Alice" })
|
|
182
215
|
const items = List.from([1, 2, 3])
|
|
183
|
-
const result = user.map(u => u.name).getOrElse("Unknown")
|
|
216
|
+
const result = user.map((u) => u.name).getOrElse("Unknown")
|
|
184
217
|
|
|
185
|
-
// ā These will still be flagged - bad patterns even with functype available
|
|
186
|
-
const badUser: User | null = null
|
|
187
|
-
const badItems = [1, 2, 3]
|
|
218
|
+
// ā These will still be flagged - bad patterns even with functype available
|
|
219
|
+
const badUser: User | null = null // prefer-option
|
|
220
|
+
const badItems = [1, 2, 3] // prefer-list
|
|
188
221
|
```
|
|
189
222
|
|
|
190
223
|
## CLI Tools
|
|
@@ -214,9 +247,12 @@ pnpm install
|
|
|
214
247
|
# Build plugin
|
|
215
248
|
pnpm run build
|
|
216
249
|
|
|
217
|
-
# Run tests (
|
|
250
|
+
# Run tests (100+ tests)
|
|
218
251
|
pnpm test
|
|
219
252
|
|
|
253
|
+
# Visual transformation demo
|
|
254
|
+
pnpm test tests/rules/visual-transformation-demo.test.ts
|
|
255
|
+
|
|
220
256
|
# Lint codebase
|
|
221
257
|
pnpm run lint
|
|
222
258
|
|
|
@@ -246,9 +282,10 @@ This plugin provides **custom ESLint rules** specifically designed for functiona
|
|
|
246
282
|
|
|
247
283
|
### Test Coverage
|
|
248
284
|
|
|
249
|
-
- **
|
|
285
|
+
- **100+ Tests Total** across 11 test suites (including visual tests)
|
|
250
286
|
- **Integration Tests** with real functype library usage
|
|
251
287
|
- **Auto-Fix Verification** ensures fixes produce valid code
|
|
288
|
+
- **Visual Test Output** with colorized before/after transformations
|
|
252
289
|
- **False Positive Prevention** tests ensure proper functype patterns aren't flagged
|
|
253
290
|
|
|
254
291
|
## Contributing
|
|
@@ -261,6 +298,11 @@ This plugin provides **custom ESLint rules** specifically designed for functiona
|
|
|
261
298
|
|
|
262
299
|
### Development Setup
|
|
263
300
|
|
|
301
|
+
**Requirements:**
|
|
302
|
+
|
|
303
|
+
- Node.js 22.0.0 or higher
|
|
304
|
+
- pnpm (recommended package manager)
|
|
305
|
+
|
|
264
306
|
```bash
|
|
265
307
|
git clone https://github.com/jordanburke/eslint-plugin-functype.git
|
|
266
308
|
cd eslint-plugin-functype
|
|
@@ -280,4 +322,4 @@ pnpm test
|
|
|
280
322
|
|
|
281
323
|
---
|
|
282
324
|
|
|
283
|
-
**Need help?** [Open an issue](https://github.com/jordanburke/eslint-plugin-functype/issues) or check the [functype documentation](https://jordanburke.github.io/functype/).
|
|
325
|
+
**Need help?** [Open an issue](https://github.com/jordanburke/eslint-plugin-functype/issues) or check the [functype documentation](https://jordanburke.github.io/functype/).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createRequire as e}from"node:module";var t=e(import.meta.url);export{t};
|
package/dist/cli/list-rules.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/cli/list-rules.js
CHANGED
|
@@ -1,241 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// src/utils/dependency-validator.ts
|
|
20
|
-
var PEER_DEPENDENCIES = [
|
|
21
|
-
{
|
|
22
|
-
name: "@typescript-eslint/eslint-plugin",
|
|
23
|
-
packageName: "@typescript-eslint/eslint-plugin",
|
|
24
|
-
description: "TypeScript-aware ESLint rules",
|
|
25
|
-
required: true
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: "@typescript-eslint/parser",
|
|
29
|
-
packageName: "@typescript-eslint/parser",
|
|
30
|
-
description: "TypeScript parser for ESLint",
|
|
31
|
-
required: true
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: "eslint-plugin-functional",
|
|
35
|
-
packageName: "eslint-plugin-functional",
|
|
36
|
-
description: "Functional programming ESLint rules",
|
|
37
|
-
required: true
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: "eslint-plugin-prettier",
|
|
41
|
-
packageName: "eslint-plugin-prettier",
|
|
42
|
-
description: "Code formatting rules",
|
|
43
|
-
required: false
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: "eslint-plugin-simple-import-sort",
|
|
47
|
-
packageName: "eslint-plugin-simple-import-sort",
|
|
48
|
-
description: "Import sorting rules",
|
|
49
|
-
required: false
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
name: "prettier",
|
|
53
|
-
packageName: "prettier",
|
|
54
|
-
description: "Code formatter",
|
|
55
|
-
required: false
|
|
56
|
-
}
|
|
57
|
-
];
|
|
58
|
-
function tryRequire(packageName) {
|
|
59
|
-
try {
|
|
60
|
-
__require.resolve(packageName);
|
|
61
|
-
return true;
|
|
62
|
-
} catch {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function validatePeerDependencies() {
|
|
67
|
-
const missing = [];
|
|
68
|
-
const available = [];
|
|
69
|
-
const warnings = [];
|
|
70
|
-
for (const dep of PEER_DEPENDENCIES) {
|
|
71
|
-
if (tryRequire(dep.packageName)) {
|
|
72
|
-
available.push(dep);
|
|
73
|
-
} else {
|
|
74
|
-
missing.push(dep);
|
|
75
|
-
if (dep.required) ; else {
|
|
76
|
-
warnings.push(`Optional plugin '${dep.name}' not found. Some rules will be skipped.`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const requiredMissing = missing.filter((dep) => dep.required);
|
|
81
|
-
const isValid = requiredMissing.length === 0;
|
|
82
|
-
const missingPackageNames = missing.map((dep) => dep.packageName);
|
|
83
|
-
const installCommand = missingPackageNames.length > 0 ? `pnpm add -D ${missingPackageNames.join(" ")}` : "";
|
|
84
|
-
return {
|
|
85
|
-
isValid,
|
|
86
|
-
missing,
|
|
87
|
-
available,
|
|
88
|
-
installCommand,
|
|
89
|
-
warnings
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// src/cli/list-rules.ts
|
|
94
|
-
var colors = {
|
|
95
|
-
reset: "\x1B[0m",
|
|
96
|
-
bright: "\x1B[1m",
|
|
97
|
-
red: "\x1B[31m",
|
|
98
|
-
green: "\x1B[32m",
|
|
99
|
-
yellow: "\x1B[33m",
|
|
100
|
-
blue: "\x1B[34m",
|
|
101
|
-
magenta: "\x1B[35m",
|
|
102
|
-
cyan: "\x1B[36m"
|
|
103
|
-
};
|
|
104
|
-
function colorize(text, color) {
|
|
105
|
-
return colors[color] + text + colors.reset;
|
|
106
|
-
}
|
|
107
|
-
function printDependencyStatus(result) {
|
|
108
|
-
console.log(colorize("\n\u{1F50D} Dependency Status Check:", "bright"));
|
|
109
|
-
console.log(colorize("=".repeat(40), "blue"));
|
|
110
|
-
if (result.available.length > 0) {
|
|
111
|
-
console.log(colorize("\n\u2705 Available:", "green"));
|
|
112
|
-
result.available.forEach((dep) => {
|
|
113
|
-
const icon = dep.required ? "\u{1F527}" : "\u{1F50C}";
|
|
114
|
-
console.log(` ${icon} ${colorize(dep.name, "green")} - ${dep.description}`);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
if (result.missing.length > 0) {
|
|
118
|
-
console.log(colorize("\n\u274C Missing:", "red"));
|
|
119
|
-
result.missing.forEach((dep) => {
|
|
120
|
-
const icon = dep.required ? "\u26A0\uFE0F " : "\u{1F4A1}";
|
|
121
|
-
const color = dep.required ? "red" : "yellow";
|
|
122
|
-
console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`);
|
|
123
|
-
});
|
|
124
|
-
if (result.installCommand) {
|
|
125
|
-
console.log(colorize("\n\u{1F4E6} Install missing dependencies:", "bright"));
|
|
126
|
-
console.log(` ${colorize(result.installCommand, "cyan")}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (result.warnings.length > 0) {
|
|
130
|
-
console.log(colorize("\n\u26A0\uFE0F Warnings:", "yellow"));
|
|
131
|
-
result.warnings.forEach((warning) => console.log(` ${warning}`));
|
|
132
|
-
}
|
|
133
|
-
const status = result.isValid ? "\u2705 Ready to use" : "\u274C Configuration will fail";
|
|
134
|
-
const statusColor = result.isValid ? "green" : "red";
|
|
135
|
-
console.log(colorize(`
|
|
136
|
-
${status}`, statusColor));
|
|
137
|
-
}
|
|
138
|
-
async function main() {
|
|
139
|
-
const args = process.argv.slice(2);
|
|
140
|
-
const showHelp = args.includes("--help") || args.includes("-h");
|
|
141
|
-
const showUsage = args.includes("--usage") || args.includes("-u");
|
|
142
|
-
const checkDeps = args.includes("--check-deps") || args.includes("--check");
|
|
143
|
-
if (showHelp) {
|
|
144
|
-
console.log(colorize("\u{1F4CB} ESLint Plugin Functype - Custom Rules", "bright"));
|
|
145
|
-
console.log("\nUsage: pnpm run list-rules [options]");
|
|
146
|
-
console.log("\nOptions:");
|
|
147
|
-
console.log(" --verbose, -v Show rule descriptions and schemas");
|
|
148
|
-
console.log(" --usage, -u Show usage examples");
|
|
149
|
-
console.log(" --check-deps Check peer dependency status");
|
|
150
|
-
console.log(" --help, -h Show this help message");
|
|
151
|
-
console.log("\nThis command lists all custom rules provided by the functype plugin.");
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (checkDeps) {
|
|
155
|
-
console.log(colorize("\u{1F527} ESLint Plugin Functype - Dependency Check", "bright"));
|
|
156
|
-
const result = validatePeerDependencies();
|
|
157
|
-
printDependencyStatus(result);
|
|
158
|
-
if (!result.isValid) {
|
|
159
|
-
process.exit(1);
|
|
160
|
-
}
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
console.log(colorize("\u{1F527} ESLint Plugin Functype - Custom Rules", "bright"));
|
|
164
|
-
const distPath = path__default.default.join(__dirname, "..", "..", "dist");
|
|
165
|
-
if (!fs__default.default.existsSync(distPath)) {
|
|
166
|
-
console.error(colorize("\u274C Build directory not found. Run `pnpm run build` first.", "red"));
|
|
167
|
-
process.exit(1);
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
const pluginPath = path__default.default.join(distPath, "index.js");
|
|
171
|
-
const plugin = __require(pluginPath);
|
|
172
|
-
if (!plugin.rules) {
|
|
173
|
-
console.error(colorize("\u274C No rules found in plugin.", "red"));
|
|
174
|
-
process.exit(1);
|
|
175
|
-
}
|
|
176
|
-
console.log(colorize("\n\u{1F4E6} Available Custom Rules:", "bright"));
|
|
177
|
-
console.log(colorize("=".repeat(40), "blue"));
|
|
178
|
-
const rules = Object.keys(plugin.rules);
|
|
179
|
-
rules.forEach((ruleName) => {
|
|
180
|
-
const rule = plugin.rules[ruleName];
|
|
181
|
-
const fullName = `functype/${ruleName}`;
|
|
182
|
-
console.log(`
|
|
183
|
-
${colorize("\u25CF", "green")} ${colorize(fullName, "bright")}`);
|
|
184
|
-
if (rule.meta?.docs?.description) {
|
|
185
|
-
console.log(` ${colorize("Description:", "cyan")} ${rule.meta.docs.description}`);
|
|
186
|
-
}
|
|
187
|
-
if (rule.meta?.type) {
|
|
188
|
-
const typeColor = rule.meta.type === "problem" ? "red" : rule.meta.type === "suggestion" ? "yellow" : "blue";
|
|
189
|
-
console.log(` ${colorize("Type:", "cyan")} ${colorize(rule.meta.type, typeColor)}`);
|
|
190
|
-
}
|
|
191
|
-
if (rule.meta?.fixable) {
|
|
192
|
-
console.log(` ${colorize("Fixable:", "cyan")} ${colorize("Yes", "green")}`);
|
|
193
|
-
}
|
|
194
|
-
if (showUsage) {
|
|
195
|
-
console.log(` ${colorize("Usage:", "cyan")} "${fullName}": "error"`);
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
console.log(colorize(`
|
|
199
|
-
\u{1F4CA} Summary: ${rules.length} custom rules available`, "bright"));
|
|
200
|
-
if (showUsage) {
|
|
201
|
-
printCustomUsageInfo();
|
|
202
|
-
}
|
|
203
|
-
console.log(colorize("\n\u{1F4A1} Tips:", "bright"));
|
|
204
|
-
console.log("\u2022 Use --verbose to see detailed rule information");
|
|
205
|
-
console.log("\u2022 Use --usage to see configuration examples");
|
|
206
|
-
console.log('\u2022 All rules are prefixed with "functype/"');
|
|
207
|
-
console.log("\u2022 Consider using eslint-config-functype for pre-configured setup");
|
|
208
|
-
console.log(colorize("\n\u{1F517} Links:", "bright"));
|
|
209
|
-
console.log("\u2022 Documentation: https://github.com/jordanburke/eslint-plugin-functype");
|
|
210
|
-
console.log("\u2022 Configuration Bundle: https://github.com/jordanburke/eslint-config-functype");
|
|
211
|
-
console.log("\u2022 Functype Library: https://github.com/jordanburke/functype");
|
|
212
|
-
} catch (error) {
|
|
213
|
-
console.error(colorize("\u274C Error loading plugin:", "red"), error.message);
|
|
214
|
-
process.exit(1);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
function printCustomUsageInfo() {
|
|
218
|
-
console.log(colorize("\n\u{1F4A1} Usage Examples:", "bright"));
|
|
219
|
-
console.log(colorize("=".repeat(30), "blue"));
|
|
220
|
-
console.log("\n" + colorize("ESLint 9+ (flat config):", "green"));
|
|
221
|
-
console.log(' import functypePlugin from "eslint-plugin-functype"');
|
|
222
|
-
console.log(" export default [");
|
|
223
|
-
console.log(" {");
|
|
224
|
-
console.log(" plugins: { functype: functypePlugin },");
|
|
225
|
-
console.log(" rules: {");
|
|
226
|
-
console.log(' "functype/prefer-option": "error",');
|
|
227
|
-
console.log(' "functype/prefer-either": "error",');
|
|
228
|
-
console.log(' "functype/no-get-unsafe": "error",');
|
|
229
|
-
console.log(" }");
|
|
230
|
-
console.log(" }");
|
|
231
|
-
console.log(" ]");
|
|
232
|
-
console.log("\n" + colorize("With eslint-config-functype (recommended):", "green"));
|
|
233
|
-
console.log(' import functypeConfig from "eslint-config-functype"');
|
|
234
|
-
console.log(" export default [functypeConfig.recommended]");
|
|
235
|
-
}
|
|
236
|
-
main().catch((error) => {
|
|
237
|
-
console.error(colorize("\u274C Unexpected error:", "red"), error);
|
|
238
|
-
process.exit(1);
|
|
239
|
-
});
|
|
240
|
-
//# sourceMappingURL=list-rules.js.map
|
|
2
|
+
import e from"../index.js";import{validatePeerDependencies as t}from"../utils/dependency-validator.js";const n={reset:`\x1B[0m`,bright:`\x1B[1m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`};function r(e,t){return n[t]+e+n.reset}function i(e){console.log(r(`
|
|
3
|
+
š Dependency Status Check:`,`bright`)),console.log(r(`=`.repeat(40),`blue`)),e.available.length>0&&(console.log(r(`
|
|
4
|
+
ā
Available:`,`green`)),e.available.forEach(e=>{let t=e.required?`š§`:`š`;console.log(` ${t} ${r(e.name,`green`)} - ${e.description}`)})),e.missing.length>0&&(console.log(r(`
|
|
5
|
+
ā Missing:`,`red`)),e.missing.forEach(e=>{let t=e.required?`ā ļø `:`š”`,n=e.required?`red`:`yellow`;console.log(` ${t} ${r(e.name,n)} - ${e.description}`)}),e.installCommand&&(console.log(r(`
|
|
6
|
+
š¦ Install missing dependencies:`,`bright`)),console.log(` ${r(e.installCommand,`cyan`)}`))),e.warnings.length>0&&(console.log(r(`
|
|
7
|
+
ā ļø Warnings:`,`yellow`)),e.warnings.forEach(e=>console.log(` ${e}`)));let t=e.isValid?`ā
Ready to use`:`ā Configuration will fail`,n=e.isValid?`green`:`red`;console.log(r(`\n${t}`,n))}async function a(){let n=process.argv.slice(2),a=n.includes(`--help`)||n.includes(`-h`),s=n.includes(`--usage`)||n.includes(`-u`),c=n.includes(`--check-deps`)||n.includes(`--check`);if(a){console.log(r(`š ESLint Plugin Functype - Custom Rules`,`bright`)),console.log(`
|
|
8
|
+
Usage: pnpm run list-rules [options]`),console.log(`
|
|
9
|
+
Options:`),console.log(` --verbose, -v Show rule descriptions and schemas`),console.log(` --usage, -u Show usage examples`),console.log(` --check-deps Check peer dependency status`),console.log(` --help, -h Show this help message`),console.log(`
|
|
10
|
+
This command lists all custom rules provided by the functype plugin.`);return}if(c){console.log(r(`š§ ESLint Plugin Functype - Dependency Check`,`bright`));let e=t();i(e),e.isValid||process.exit(1);return}console.log(r(`š§ ESLint Plugin Functype - Custom Rules`,`bright`)),e.rules||(console.error(r(`ā No rules found in plugin.`,`red`)),process.exit(1)),console.log(r(`
|
|
11
|
+
š¦ Available Custom Rules:`,`bright`)),console.log(r(`=`.repeat(40),`blue`));let l=Object.keys(e.rules);l.forEach(t=>{let n=e.rules[t],i=`functype/${t}`;if(console.log(`\n${r(`ā`,`green`)} ${r(i,`bright`)}`),n.meta?.docs?.description&&console.log(` ${r(`Description:`,`cyan`)} ${n.meta.docs.description}`),n.meta?.type){let e=n.meta.type===`problem`?`red`:n.meta.type===`suggestion`?`yellow`:`blue`;console.log(` ${r(`Type:`,`cyan`)} ${r(n.meta.type,e)}`)}n.meta?.fixable&&console.log(` ${r(`Fixable:`,`cyan`)} ${r(`Yes`,`green`)}`),s&&console.log(` ${r(`Usage:`,`cyan`)} "${i}": "error"`)}),console.log(r(`\nš Summary: ${l.length} custom rules available`,`bright`)),s&&o(),console.log(r(`
|
|
12
|
+
š” Tips:`,`bright`)),console.log(`⢠Use --verbose to see detailed rule information`),console.log(`⢠Use --usage to see configuration examples`),console.log(`⢠All rules are prefixed with "functype/"`),console.log(`⢠Consider using eslint-config-functype for pre-configured setup`),console.log(r(`
|
|
13
|
+
š Links:`,`bright`)),console.log(`⢠Documentation: https://github.com/jordanburke/eslint-plugin-functype`),console.log(`⢠Configuration Bundle: https://github.com/jordanburke/eslint-config-functype`),console.log(`⢠Functype Library: https://github.com/jordanburke/functype`)}function o(){console.log(r(`
|
|
14
|
+
š” Usage Examples:`,`bright`)),console.log(r(`=`.repeat(30),`blue`)),console.log(`
|
|
15
|
+
`+r(`ESLint 9+ (flat config):`,`green`)),console.log(` import functypePlugin from "eslint-plugin-functype"`),console.log(` export default [`),console.log(` {`),console.log(` plugins: { functype: functypePlugin },`),console.log(` rules: {`),console.log(` "functype/prefer-option": "error",`),console.log(` "functype/prefer-either": "error",`),console.log(` "functype/no-get-unsafe": "error",`),console.log(` }`),console.log(` }`),console.log(` ]`),console.log(`
|
|
16
|
+
`+r(`With eslint-config-functype (recommended):`,`green`)),console.log(` import functypeConfig from "eslint-config-functype"`),console.log(` export default [functypeConfig.recommended]`)}a().catch(e=>{console.error(r(`ā Unexpected error:`,`red`),e),process.exit(1)});export{};
|
|
241
17
|
//# sourceMappingURL=list-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/dependency-validator.ts","../../src/cli/list-rules.ts"],"names":["path","fs"],"mappings":"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","file":"list-rules.js","sourcesContent":["// Utility to validate peer dependencies and provide helpful error messages\n\ninterface PeerDependency {\n name: string\n packageName: string\n description: string\n required: boolean\n}\n\nconst PEER_DEPENDENCIES: PeerDependency[] = [\n {\n name: '@typescript-eslint/eslint-plugin',\n packageName: '@typescript-eslint/eslint-plugin',\n description: 'TypeScript-aware ESLint rules',\n required: true\n },\n {\n name: '@typescript-eslint/parser',\n packageName: '@typescript-eslint/parser', \n description: 'TypeScript parser for ESLint',\n required: true\n },\n {\n name: 'eslint-plugin-functional',\n packageName: 'eslint-plugin-functional',\n description: 'Functional programming ESLint rules',\n required: true\n },\n {\n name: 'eslint-plugin-prettier',\n packageName: 'eslint-plugin-prettier',\n description: 'Code formatting rules',\n required: false\n },\n {\n name: 'eslint-plugin-simple-import-sort',\n packageName: 'eslint-plugin-simple-import-sort',\n description: 'Import sorting rules',\n required: false\n },\n {\n name: 'prettier',\n packageName: 'prettier',\n description: 'Code formatter',\n required: false\n }\n]\n\nexport interface ValidationResult {\n isValid: boolean\n missing: PeerDependency[]\n available: PeerDependency[]\n installCommand: string\n warnings: string[]\n}\n\nfunction tryRequire(packageName: string): boolean {\n try {\n require.resolve(packageName)\n return true\n } catch {\n return false\n }\n}\n\nexport function validatePeerDependencies(): ValidationResult {\n const missing: PeerDependency[] = []\n const available: PeerDependency[] = []\n const warnings: string[] = []\n\n for (const dep of PEER_DEPENDENCIES) {\n if (tryRequire(dep.packageName)) {\n available.push(dep)\n } else {\n missing.push(dep)\n if (dep.required) {\n // Required dependency is missing - this will cause errors\n } else {\n // Optional dependency is missing - add warning\n warnings.push(`Optional plugin '${dep.name}' not found. Some rules will be skipped.`)\n }\n }\n }\n\n const requiredMissing = missing.filter(dep => dep.required)\n const isValid = requiredMissing.length === 0\n\n // Generate install command for missing dependencies\n const missingPackageNames = missing.map(dep => dep.packageName)\n const installCommand = missingPackageNames.length > 0 \n ? `pnpm add -D ${missingPackageNames.join(' ')}`\n : ''\n\n return {\n isValid,\n missing,\n available,\n installCommand,\n warnings\n }\n}\n\nexport function createValidationError(result: ValidationResult): Error {\n const requiredMissing = result.missing.filter(dep => dep.required)\n \n if (requiredMissing.length === 0) {\n return new Error('No validation errors')\n }\n\n const missingList = requiredMissing\n .map(dep => ` ⢠${dep.name} - ${dep.description}`)\n .join('\\n')\n\n const message = [\n 'ā Missing required peer dependencies for eslint-plugin-functype:',\n '',\n missingList,\n '',\n 'š¦ Install missing dependencies:',\n ` ${result.installCommand}`,\n '',\n 'š See installation guide: https://github.com/jordanburke/eslint-plugin-functype#installation'\n ].join('\\n')\n\n return new Error(message)\n}\n\nexport function shouldValidateDependencies(): boolean {\n // Skip validation in test environments or when explicitly disabled\n return process.env.NODE_ENV !== 'test' && \n process.env.FUNCTYPE_SKIP_VALIDATION !== 'true'\n}","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport path from 'path'\nimport { validatePeerDependencies, type ValidationResult } from '../utils/dependency-validator'\n\n// Remove unused type\n// type RuleSeverity = 'off' | 'warn' | 'error' | 0 | 1 | 2\n\n// Colors for console output\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n} as const\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n return colors[color] + text + colors.reset\n}\n\n\n// Removed unused utility functions - they were for the old config-based approach\n\n\nfunction printDependencyStatus(result: ValidationResult): void {\n console.log(colorize('\\nš Dependency Status Check:', 'bright'))\n console.log(colorize('='.repeat(40), 'blue'))\n \n // Show available dependencies\n if (result.available.length > 0) {\n console.log(colorize('\\nā
Available:', 'green'))\n result.available.forEach(dep => {\n const icon = dep.required ? 'š§' : 'š'\n console.log(` ${icon} ${colorize(dep.name, 'green')} - ${dep.description}`)\n })\n }\n \n // Show missing dependencies\n if (result.missing.length > 0) {\n console.log(colorize('\\nā Missing:', 'red'))\n result.missing.forEach(dep => {\n const icon = dep.required ? 'ā ļø ' : 'š”'\n const color = dep.required ? 'red' : 'yellow'\n console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`)\n })\n \n if (result.installCommand) {\n console.log(colorize('\\nš¦ Install missing dependencies:', 'bright'))\n console.log(` ${colorize(result.installCommand, 'cyan')}`)\n }\n }\n \n // Show warnings\n if (result.warnings.length > 0) {\n console.log(colorize('\\nā ļø Warnings:', 'yellow'))\n result.warnings.forEach(warning => console.log(` ${warning}`))\n }\n \n // Overall status\n const status = result.isValid ? 'ā
Ready to use' : 'ā Configuration will fail'\n const statusColor = result.isValid ? 'green' : 'red'\n console.log(colorize(`\\n${status}`, statusColor))\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2)\n const showHelp = args.includes('--help') || args.includes('-h')\n const showUsage = args.includes('--usage') || args.includes('-u')\n const checkDeps = args.includes('--check-deps') || args.includes('--check')\n \n if (showHelp) {\n console.log(colorize('š ESLint Plugin Functype - Custom Rules', 'bright'))\n console.log('\\nUsage: pnpm run list-rules [options]')\n console.log('\\nOptions:')\n console.log(' --verbose, -v Show rule descriptions and schemas')\n console.log(' --usage, -u Show usage examples')\n console.log(' --check-deps Check peer dependency status') \n console.log(' --help, -h Show this help message')\n console.log('\\nThis command lists all custom rules provided by the functype plugin.')\n return\n }\n \n // Handle dependency check\n if (checkDeps) {\n console.log(colorize('š§ ESLint Plugin Functype - Dependency Check', 'bright'))\n const result = validatePeerDependencies()\n printDependencyStatus(result)\n \n if (!result.isValid) {\n process.exit(1)\n }\n return\n }\n \n console.log(colorize('š§ ESLint Plugin Functype - Custom Rules', 'bright'))\n \n const distPath = path.join(__dirname, '..', '..', 'dist')\n \n if (!fs.existsSync(distPath)) {\n console.error(colorize('ā Build directory not found. Run `pnpm run build` first.', 'red'))\n process.exit(1)\n }\n \n // Load the plugin to get available rules\n try {\n const pluginPath = path.join(distPath, 'index.js')\n const plugin = require(pluginPath)\n \n if (!plugin.rules) {\n console.error(colorize('ā No rules found in plugin.', 'red'))\n process.exit(1)\n }\n \n console.log(colorize('\\nš¦ Available Custom Rules:', 'bright'))\n console.log(colorize('='.repeat(40), 'blue'))\n \n const rules = Object.keys(plugin.rules)\n \n rules.forEach(ruleName => {\n const rule = plugin.rules[ruleName]\n const fullName = `functype/${ruleName}`\n \n console.log(`\\n${colorize('ā', 'green')} ${colorize(fullName, 'bright')}`)\n \n if (rule.meta?.docs?.description) {\n console.log(` ${colorize('Description:', 'cyan')} ${rule.meta.docs.description}`)\n }\n \n if (rule.meta?.type) {\n const typeColor = rule.meta.type === 'problem' ? 'red' : \n rule.meta.type === 'suggestion' ? 'yellow' : 'blue'\n console.log(` ${colorize('Type:', 'cyan')} ${colorize(rule.meta.type, typeColor)}`)\n }\n \n if (rule.meta?.fixable) {\n console.log(` ${colorize('Fixable:', 'cyan')} ${colorize('Yes', 'green')}`)\n }\n \n if (showUsage) {\n console.log(` ${colorize('Usage:', 'cyan')} \"${fullName}\": \"error\"`)\n }\n })\n \n console.log(colorize(`\\nš Summary: ${rules.length} custom rules available`, 'bright'))\n \n if (showUsage) {\n printCustomUsageInfo()\n }\n \n console.log(colorize('\\nš” Tips:', 'bright'))\n console.log('⢠Use --verbose to see detailed rule information')\n console.log('⢠Use --usage to see configuration examples')\n console.log('⢠All rules are prefixed with \"functype/\"')\n console.log('⢠Consider using eslint-config-functype for pre-configured setup')\n \n console.log(colorize('\\nš Links:', 'bright'))\n console.log('⢠Documentation: https://github.com/jordanburke/eslint-plugin-functype')\n console.log('⢠Configuration Bundle: https://github.com/jordanburke/eslint-config-functype')\n console.log('⢠Functype Library: https://github.com/jordanburke/functype')\n \n } catch (error) {\n console.error(colorize('ā Error loading plugin:', 'red'), (error as Error).message)\n process.exit(1)\n }\n}\n\nfunction printCustomUsageInfo(): void {\n console.log(colorize('\\nš” Usage Examples:', 'bright'))\n console.log(colorize('='.repeat(30), 'blue'))\n console.log('\\n' + colorize('ESLint 9+ (flat config):', 'green'))\n console.log(' import functypePlugin from \"eslint-plugin-functype\"')\n console.log(' export default [')\n console.log(' {')\n console.log(' plugins: { functype: functypePlugin },')\n console.log(' rules: {')\n console.log(' \"functype/prefer-option\": \"error\",')\n console.log(' \"functype/prefer-either\": \"error\",')\n console.log(' \"functype/no-get-unsafe\": \"error\",')\n console.log(' }')\n console.log(' }')\n console.log(' ]')\n console.log('\\n' + colorize('With eslint-config-functype (recommended):', 'green'))\n console.log(' import functypeConfig from \"eslint-config-functype\"')\n console.log(' export default [functypeConfig.recommended]')\n}\n\n// Run the CLI\nmain().catch(error => {\n console.error(colorize('ā Unexpected error:', 'red'), error)\n process.exit(1)\n})"]}
|
|
1
|
+
{"version":3,"file":"list-rules.js","names":[],"sources":["../../src/cli/list-rules.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport plugin from \"../index.js\"\nimport { validatePeerDependencies, type ValidationResult } from \"../utils/dependency-validator.js\"\n\n// Colors for console output\nconst colors = {\n reset: \"\\x1b[0m\",\n bright: \"\\x1b[1m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n} as const\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n return colors[color] + text + colors.reset\n}\n\n// Removed unused utility functions - they were for the old config-based approach\n\nfunction printDependencyStatus(result: ValidationResult): void {\n console.log(colorize(\"\\nš Dependency Status Check:\", \"bright\"))\n console.log(colorize(\"=\".repeat(40), \"blue\"))\n\n // Show available dependencies\n if (result.available.length > 0) {\n console.log(colorize(\"\\nā
Available:\", \"green\"))\n result.available.forEach((dep) => {\n const icon = dep.required ? \"š§\" : \"š\"\n console.log(` ${icon} ${colorize(dep.name, \"green\")} - ${dep.description}`)\n })\n }\n\n // Show missing dependencies\n if (result.missing.length > 0) {\n console.log(colorize(\"\\nā Missing:\", \"red\"))\n result.missing.forEach((dep) => {\n const icon = dep.required ? \"ā ļø \" : \"š”\"\n const color = dep.required ? \"red\" : \"yellow\"\n console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`)\n })\n\n if (result.installCommand) {\n console.log(colorize(\"\\nš¦ Install missing dependencies:\", \"bright\"))\n console.log(` ${colorize(result.installCommand, \"cyan\")}`)\n }\n }\n\n // Show warnings\n if (result.warnings.length > 0) {\n console.log(colorize(\"\\nā ļø Warnings:\", \"yellow\"))\n result.warnings.forEach((warning) => console.log(` ${warning}`))\n }\n\n // Overall status\n const status = result.isValid ? \"ā
Ready to use\" : \"ā Configuration will fail\"\n const statusColor = result.isValid ? \"green\" : \"red\"\n console.log(colorize(`\\n${status}`, statusColor))\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2)\n const showHelp = args.includes(\"--help\") || args.includes(\"-h\")\n const showUsage = args.includes(\"--usage\") || args.includes(\"-u\")\n const checkDeps = args.includes(\"--check-deps\") || args.includes(\"--check\")\n\n if (showHelp) {\n console.log(colorize(\"š ESLint Plugin Functype - Custom Rules\", \"bright\"))\n console.log(\"\\nUsage: pnpm run list-rules [options]\")\n console.log(\"\\nOptions:\")\n console.log(\" --verbose, -v Show rule descriptions and schemas\")\n console.log(\" --usage, -u Show usage examples\")\n console.log(\" --check-deps Check peer dependency status\")\n console.log(\" --help, -h Show this help message\")\n console.log(\"\\nThis command lists all custom rules provided by the functype plugin.\")\n return\n }\n\n // Handle dependency check\n if (checkDeps) {\n console.log(colorize(\"š§ ESLint Plugin Functype - Dependency Check\", \"bright\"))\n const result = validatePeerDependencies()\n printDependencyStatus(result)\n\n if (!result.isValid) {\n process.exit(1)\n }\n return\n }\n\n console.log(colorize(\"š§ ESLint Plugin Functype - Custom Rules\", \"bright\"))\n\n if (!plugin.rules) {\n console.error(colorize(\"ā No rules found in plugin.\", \"red\"))\n process.exit(1)\n }\n\n console.log(colorize(\"\\nš¦ Available Custom Rules:\", \"bright\"))\n console.log(colorize(\"=\".repeat(40), \"blue\"))\n\n const rules = Object.keys(plugin.rules)\n\n rules.forEach((ruleName) => {\n const rule = plugin.rules[ruleName]\n const fullName = `functype/${ruleName}`\n\n console.log(`\\n${colorize(\"ā\", \"green\")} ${colorize(fullName, \"bright\")}`)\n\n if (rule.meta?.docs?.description) {\n console.log(` ${colorize(\"Description:\", \"cyan\")} ${rule.meta.docs.description}`)\n }\n\n if (rule.meta?.type) {\n const typeColor = rule.meta.type === \"problem\" ? \"red\" : rule.meta.type === \"suggestion\" ? \"yellow\" : \"blue\"\n console.log(` ${colorize(\"Type:\", \"cyan\")} ${colorize(rule.meta.type, typeColor)}`)\n }\n\n if (rule.meta?.fixable) {\n console.log(` ${colorize(\"Fixable:\", \"cyan\")} ${colorize(\"Yes\", \"green\")}`)\n }\n\n if (showUsage) {\n console.log(` ${colorize(\"Usage:\", \"cyan\")} \"${fullName}\": \"error\"`)\n }\n })\n\n console.log(colorize(`\\nš Summary: ${rules.length} custom rules available`, \"bright\"))\n\n if (showUsage) {\n printCustomUsageInfo()\n }\n\n console.log(colorize(\"\\nš” Tips:\", \"bright\"))\n console.log(\"⢠Use --verbose to see detailed rule information\")\n console.log(\"⢠Use --usage to see configuration examples\")\n console.log('⢠All rules are prefixed with \"functype/\"')\n console.log(\"⢠Consider using eslint-config-functype for pre-configured setup\")\n\n console.log(colorize(\"\\nš Links:\", \"bright\"))\n console.log(\"⢠Documentation: https://github.com/jordanburke/eslint-plugin-functype\")\n console.log(\"⢠Configuration Bundle: https://github.com/jordanburke/eslint-config-functype\")\n console.log(\"⢠Functype Library: https://github.com/jordanburke/functype\")\n}\n\nfunction printCustomUsageInfo(): void {\n console.log(colorize(\"\\nš” Usage Examples:\", \"bright\"))\n console.log(colorize(\"=\".repeat(30), \"blue\"))\n console.log(\"\\n\" + colorize(\"ESLint 9+ (flat config):\", \"green\"))\n console.log(' import functypePlugin from \"eslint-plugin-functype\"')\n console.log(\" export default [\")\n console.log(\" {\")\n console.log(\" plugins: { functype: functypePlugin },\")\n console.log(\" rules: {\")\n console.log(' \"functype/prefer-option\": \"error\",')\n console.log(' \"functype/prefer-either\": \"error\",')\n console.log(' \"functype/no-get-unsafe\": \"error\",')\n console.log(\" }\")\n console.log(\" }\")\n console.log(\" ]\")\n console.log(\"\\n\" + colorize(\"With eslint-config-functype (recommended):\", \"green\"))\n console.log(' import functypeConfig from \"eslint-config-functype\"')\n console.log(\" export default [functypeConfig.recommended]\")\n}\n\n// Run the CLI\nmain().catch((error) => {\n console.error(colorize(\"ā Unexpected error:\", \"red\"), error)\n process.exit(1)\n})\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import * as eslint from
|
|
1
|
+
import * as eslint from "eslint";
|
|
2
2
|
|
|
3
|
+
//#region src/index.d.ts
|
|
3
4
|
declare const plugin: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
rules: {
|
|
6
|
+
"prefer-option": eslint.Rule.RuleModule;
|
|
7
|
+
"prefer-either": eslint.Rule.RuleModule;
|
|
8
|
+
"prefer-list": eslint.Rule.RuleModule;
|
|
9
|
+
"no-get-unsafe": eslint.Rule.RuleModule;
|
|
10
|
+
"prefer-fold": eslint.Rule.RuleModule;
|
|
11
|
+
"prefer-map": eslint.Rule.RuleModule;
|
|
12
|
+
"prefer-flatmap": eslint.Rule.RuleModule;
|
|
13
|
+
"no-imperative-loops": eslint.Rule.RuleModule;
|
|
14
|
+
"prefer-do-notation": eslint.Rule.RuleModule;
|
|
15
|
+
};
|
|
16
|
+
meta: {
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
};
|
|
18
20
|
};
|
|
19
|
-
|
|
21
|
+
//#endregion
|
|
20
22
|
export { plugin as default };
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|