eslint-plugin-oxfmt 0.0.15 → 0.1.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 +16 -16
- package/dist/index.mjs +100 -79
- package/dts/rule-options.d.ts +66 -52
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -108,12 +108,12 @@ export default [
|
|
|
108
108
|
vueIndentScriptAndStyle: false,
|
|
109
109
|
|
|
110
110
|
// Experiments
|
|
111
|
-
|
|
111
|
+
sortImports: {
|
|
112
112
|
order: 'asc',
|
|
113
113
|
newlinesBetween: true,
|
|
114
114
|
},
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
sortPackageJson: { sortScripts: true },
|
|
116
|
+
sortTailwindcss: {
|
|
117
117
|
attributes: ['class', 'className', ':class'],
|
|
118
118
|
functions: ['clsx', 'cn'],
|
|
119
119
|
preserveDuplicates: false,
|
|
@@ -201,18 +201,18 @@ All options are optional and default to sensible values.
|
|
|
201
201
|
|
|
202
202
|
### Advanced Options
|
|
203
203
|
|
|
204
|
-
| Option
|
|
205
|
-
|
|
|
206
|
-
| `
|
|
207
|
-
| `
|
|
208
|
-
| `
|
|
204
|
+
| Option | Type | Default | Description |
|
|
205
|
+
| ----------------- | ------------------- | -------- | ---------------------------------------------------------------------------- |
|
|
206
|
+
| `sortImports` | `object` | disabled | Experimental import sorting configuration |
|
|
207
|
+
| `sortPackageJson` | `boolean \| object` | `true` | Experimental package.json sorting (object form: `{ sortScripts?: boolean }`) |
|
|
208
|
+
| `sortTailwindcss` | `object` | disabled | Experimental Tailwind CSS class sorting (enable with `{}` for defaults) |
|
|
209
209
|
|
|
210
|
-
#### Import sorting (`
|
|
210
|
+
#### Import sorting (`sortImports`)
|
|
211
211
|
|
|
212
212
|
Available keys:
|
|
213
213
|
|
|
214
|
-
- `customGroups`: Ordered custom group definitions `{ elementNamePattern?: string[]; groupName?: string }[]`
|
|
215
|
-
- `groups`: Ordered group list; supports nested arrays
|
|
214
|
+
- `customGroups`: Ordered custom group definitions `{ elementNamePattern?: string[]; groupName?: string; modifiers?: string[]; selector?: string }[]`
|
|
215
|
+
- `groups`: Ordered group list; supports nested arrays and boundary markers like `{ newlinesBetween: boolean }`
|
|
216
216
|
- `ignoreCase`: Ignore case when sorting (default `true`)
|
|
217
217
|
- `internalPattern`: Glob patterns for internal imports
|
|
218
218
|
- `newlinesBetween`: Insert blank lines between groups (default `true`)
|
|
@@ -221,7 +221,7 @@ Available keys:
|
|
|
221
221
|
- `partitionByNewline`: Split groups by blank lines (default `false`)
|
|
222
222
|
- `sortSideEffects`: Sort side-effect imports (default `false`)
|
|
223
223
|
|
|
224
|
-
#### package.json sorting (`
|
|
224
|
+
#### package.json sorting (`sortPackageJson`)
|
|
225
225
|
|
|
226
226
|
- Boolean to toggle (default `true`).
|
|
227
227
|
- Object form: `{ sortScripts?: boolean }` (default `false`).
|
|
@@ -242,7 +242,7 @@ export default [
|
|
|
242
242
|
'oxfmt/oxfmt': [
|
|
243
243
|
'error',
|
|
244
244
|
{
|
|
245
|
-
|
|
245
|
+
sortTailwindcss: {},
|
|
246
246
|
},
|
|
247
247
|
],
|
|
248
248
|
},
|
|
@@ -254,7 +254,7 @@ You can pass the Tailwind plugin options to control which attributes/functions a
|
|
|
254
254
|
|
|
255
255
|
```json
|
|
256
256
|
{
|
|
257
|
-
"
|
|
257
|
+
"sortTailwindcss": {
|
|
258
258
|
"attributes": ["class", "className", ":class"],
|
|
259
259
|
"config": "./tailwind.config.js",
|
|
260
260
|
"functions": ["clsx", "cn"],
|
|
@@ -294,7 +294,7 @@ export default [
|
|
|
294
294
|
files: ['packages/**/src/**/*.{ts,tsx}'],
|
|
295
295
|
options: {
|
|
296
296
|
printWidth: 90,
|
|
297
|
-
|
|
297
|
+
sortImports: {
|
|
298
298
|
newlinesBetween: true,
|
|
299
299
|
},
|
|
300
300
|
},
|
|
@@ -337,7 +337,7 @@ Add this to your `.vscode/settings.json`:
|
|
|
337
337
|
}
|
|
338
338
|
```
|
|
339
339
|
|
|
340
|
-
##
|
|
340
|
+
## Supported languages
|
|
341
341
|
|
|
342
342
|
- Check [Oxfmt - Supported languages](https://oxc.rs/docs/guide/usage/formatter.html#supported-languages)
|
|
343
343
|
|
package/dist/index.mjs
CHANGED
|
@@ -67,7 +67,7 @@ const configs = { recommended };
|
|
|
67
67
|
//#endregion
|
|
68
68
|
//#region package.json
|
|
69
69
|
var name = "eslint-plugin-oxfmt";
|
|
70
|
-
var version = "0.
|
|
70
|
+
var version = "0.1.1";
|
|
71
71
|
|
|
72
72
|
//#endregion
|
|
73
73
|
//#region src/meta.ts
|
|
@@ -183,7 +183,72 @@ const oxfmtOptionsSchema = {
|
|
|
183
183
|
],
|
|
184
184
|
type: "string"
|
|
185
185
|
},
|
|
186
|
-
|
|
186
|
+
htmlWhitespaceSensitivity: {
|
|
187
|
+
description: `Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- (Default: "css")`,
|
|
188
|
+
enum: [
|
|
189
|
+
"css",
|
|
190
|
+
"ignore",
|
|
191
|
+
"strict"
|
|
192
|
+
],
|
|
193
|
+
type: "string"
|
|
194
|
+
},
|
|
195
|
+
ignorePatterns: {
|
|
196
|
+
description: `Ignore files matching these glob patterns. Current working directory is used as the root.`,
|
|
197
|
+
type: "array",
|
|
198
|
+
items: { type: "string" }
|
|
199
|
+
},
|
|
200
|
+
insertFinalNewline: {
|
|
201
|
+
description: `Whether to insert a final newline at the end of the file. (Default: true)`,
|
|
202
|
+
type: "boolean"
|
|
203
|
+
},
|
|
204
|
+
jsxSingleQuote: {
|
|
205
|
+
description: `Use single quotes instead of double quotes in JSX. (Default: false)`,
|
|
206
|
+
type: "boolean"
|
|
207
|
+
},
|
|
208
|
+
objectWrap: {
|
|
209
|
+
description: `How to wrap object literals when they could fit on one line or span multiple lines. (Default: "preserve")\nNOTE: In addition to Prettier's "preserve" and "collapse", we also support "always".`,
|
|
210
|
+
enum: [
|
|
211
|
+
"preserve",
|
|
212
|
+
"collapse",
|
|
213
|
+
"always"
|
|
214
|
+
],
|
|
215
|
+
type: "string"
|
|
216
|
+
},
|
|
217
|
+
printWidth: {
|
|
218
|
+
description: `The line length that the printer will wrap on. (Default: 100)`,
|
|
219
|
+
type: "integer"
|
|
220
|
+
},
|
|
221
|
+
proseWrap: {
|
|
222
|
+
description: `How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to "always".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use "never".\n\n- (Default: "preserve")`,
|
|
223
|
+
enum: [
|
|
224
|
+
"always",
|
|
225
|
+
"never",
|
|
226
|
+
"preserve"
|
|
227
|
+
],
|
|
228
|
+
type: "string"
|
|
229
|
+
},
|
|
230
|
+
quoteProps: {
|
|
231
|
+
description: `Change when properties in objects are quoted. (Default: "as-needed")`,
|
|
232
|
+
enum: [
|
|
233
|
+
"as-needed",
|
|
234
|
+
"consistent",
|
|
235
|
+
"preserve"
|
|
236
|
+
],
|
|
237
|
+
type: "string"
|
|
238
|
+
},
|
|
239
|
+
semi: {
|
|
240
|
+
description: `Print semicolons at the ends of statements. (Default: true)`,
|
|
241
|
+
type: "boolean"
|
|
242
|
+
},
|
|
243
|
+
singleAttributePerLine: {
|
|
244
|
+
description: `Put each attribute on a new line in JSX. (Default: false)`,
|
|
245
|
+
type: "boolean"
|
|
246
|
+
},
|
|
247
|
+
singleQuote: {
|
|
248
|
+
description: `Use single quotes instead of double quotes. (Default: false)`,
|
|
249
|
+
type: "boolean"
|
|
250
|
+
},
|
|
251
|
+
sortImports: {
|
|
187
252
|
additionalProperties: false,
|
|
188
253
|
description: `Experimental: Sort import statements. Disabled by default.`,
|
|
189
254
|
type: "object",
|
|
@@ -203,17 +268,38 @@ const oxfmtOptionsSchema = {
|
|
|
203
268
|
groupName: {
|
|
204
269
|
description: `Name of the custom group, used in the groups option.`,
|
|
205
270
|
type: "string"
|
|
271
|
+
},
|
|
272
|
+
modifiers: {
|
|
273
|
+
description: `Modifiers to match the import characteristics.\nAll specified modifiers must be present (AND logic).\n\nPossible values: "side_effect", "type", "value", "default", "wildcard", "named"`,
|
|
274
|
+
type: "array",
|
|
275
|
+
items: { type: "string" }
|
|
276
|
+
},
|
|
277
|
+
selector: {
|
|
278
|
+
description: `Selector to match the import kind.\n\nPossible values: "type", "side_effect_style", "side_effect", "style", "index", "sibling", "parent", "subpath", "internal", "builtin", "external", "import"`,
|
|
279
|
+
type: "string"
|
|
206
280
|
}
|
|
207
281
|
}
|
|
208
282
|
}
|
|
209
283
|
},
|
|
210
284
|
groups: {
|
|
211
|
-
description: `Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the unknown group if no match is found).\nThe order of items in the groups option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- type — TypeScript type imports.\n-
|
|
285
|
+
description: `Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the \`unknown\` group if no match is found).\nThe order of items in the \`groups\` option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- \`type\` — TypeScript type imports.\n- \`side_effect_style\` — Side effect style imports.\n- \`side_effect\` — Side effect imports.\n- \`style\` — Style imports.\n- \`index\` — Main file from the current directory.\n- \`sibling\` — Modules from the same directory.\n- \`parent\` — Modules from the parent directory.\n- \`subpath\` — Node.js subpath imports.\n- \`internal\` — Your internal modules.\n- \`builtin\` — Node.js Built-in Modules.\n- \`external\` — External modules installed in the project.\n- \`import\` — Any import.\n\nThe list of modifiers is sorted from most to least important:\n- \`side_effect\` — Side effect imports.\n- \`type\` — TypeScript type imports.\n- \`value\` — Value imports.\n- \`default\` — Imports containing the default specifier.\n- \`wildcard\` — Imports containing the wildcard (\`* as\`) specifier.\n- \`named\` — Imports containing at least one named specifier.\n\n- Default: See below\n\`\`\`json\n[\n\"builtin\",\n\"external\",\n[\"internal\", \"subpath\"],\n[\"parent\", \"sibling\", \"index\"],\n\"style\",\n\"unknown\"\n]\n\`\`\`\n\nAlso, you can override the global \`newlinesBetween\` setting for specific group boundaries\nby including a \`{ \"newlinesBetween\": boolean }\` marker object in the \`groups\` list at the desired position.`,
|
|
212
286
|
type: "array",
|
|
213
|
-
items: { anyOf: [
|
|
214
|
-
type: "
|
|
215
|
-
|
|
216
|
-
|
|
287
|
+
items: { anyOf: [
|
|
288
|
+
{ type: "string" },
|
|
289
|
+
{
|
|
290
|
+
type: "array",
|
|
291
|
+
items: { type: "string" }
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
additionalProperties: false,
|
|
295
|
+
required: ["newlinesBetween"],
|
|
296
|
+
type: "object",
|
|
297
|
+
properties: { newlinesBetween: {
|
|
298
|
+
description: `A marker object for overriding \`newlinesBetween\` at a specific group boundary.`,
|
|
299
|
+
type: "boolean"
|
|
300
|
+
} }
|
|
301
|
+
}
|
|
302
|
+
] }
|
|
217
303
|
},
|
|
218
304
|
ignoreCase: {
|
|
219
305
|
description: `Ignore case when sorting. (Default: true)`,
|
|
@@ -247,7 +333,7 @@ const oxfmtOptionsSchema = {
|
|
|
247
333
|
}
|
|
248
334
|
}
|
|
249
335
|
},
|
|
250
|
-
|
|
336
|
+
sortPackageJson: {
|
|
251
337
|
description: `Experimental: Sort package.json keys. (Default: true)`,
|
|
252
338
|
oneOf: [{ type: "boolean" }, {
|
|
253
339
|
additionalProperties: false,
|
|
@@ -258,7 +344,7 @@ const oxfmtOptionsSchema = {
|
|
|
258
344
|
} }
|
|
259
345
|
}]
|
|
260
346
|
},
|
|
261
|
-
|
|
347
|
+
sortTailwindcss: {
|
|
262
348
|
additionalProperties: false,
|
|
263
349
|
description: `Experimental: Enable Tailwind CSS class sorting in JSX class/className attributes.\nWhen enabled, class strings will be collected and passed to a callback for sorting.\nPass an object with options from "prettier-plugin-tailwindcss".\n\n- (Default: disabled)`,
|
|
264
350
|
type: "object",
|
|
@@ -291,71 +377,6 @@ const oxfmtOptionsSchema = {
|
|
|
291
377
|
}
|
|
292
378
|
}
|
|
293
379
|
},
|
|
294
|
-
htmlWhitespaceSensitivity: {
|
|
295
|
-
description: `Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- (Default: "css")`,
|
|
296
|
-
enum: [
|
|
297
|
-
"css",
|
|
298
|
-
"ignore",
|
|
299
|
-
"strict"
|
|
300
|
-
],
|
|
301
|
-
type: "string"
|
|
302
|
-
},
|
|
303
|
-
ignorePatterns: {
|
|
304
|
-
description: `Ignore files matching these glob patterns. Current working directory is used as the root.`,
|
|
305
|
-
type: "array",
|
|
306
|
-
items: { type: "string" }
|
|
307
|
-
},
|
|
308
|
-
insertFinalNewline: {
|
|
309
|
-
description: `Whether to insert a final newline at the end of the file. (Default: true)`,
|
|
310
|
-
type: "boolean"
|
|
311
|
-
},
|
|
312
|
-
jsxSingleQuote: {
|
|
313
|
-
description: `Use single quotes instead of double quotes in JSX. (Default: false)`,
|
|
314
|
-
type: "boolean"
|
|
315
|
-
},
|
|
316
|
-
objectWrap: {
|
|
317
|
-
description: `How to wrap object literals when they could fit on one line or span multiple lines. (Default: "preserve")\nNOTE: In addition to Prettier's "preserve" and "collapse", we also support "always".`,
|
|
318
|
-
enum: [
|
|
319
|
-
"preserve",
|
|
320
|
-
"collapse",
|
|
321
|
-
"always"
|
|
322
|
-
],
|
|
323
|
-
type: "string"
|
|
324
|
-
},
|
|
325
|
-
printWidth: {
|
|
326
|
-
description: `The line length that the printer will wrap on. (Default: 100)`,
|
|
327
|
-
type: "integer"
|
|
328
|
-
},
|
|
329
|
-
proseWrap: {
|
|
330
|
-
description: `How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to "always".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use "never".\n\n- (Default: "preserve")`,
|
|
331
|
-
enum: [
|
|
332
|
-
"always",
|
|
333
|
-
"never",
|
|
334
|
-
"preserve"
|
|
335
|
-
],
|
|
336
|
-
type: "string"
|
|
337
|
-
},
|
|
338
|
-
quoteProps: {
|
|
339
|
-
description: `Change when properties in objects are quoted. (Default: "as-needed")`,
|
|
340
|
-
enum: [
|
|
341
|
-
"as-needed",
|
|
342
|
-
"consistent",
|
|
343
|
-
"preserve"
|
|
344
|
-
],
|
|
345
|
-
type: "string"
|
|
346
|
-
},
|
|
347
|
-
semi: {
|
|
348
|
-
description: `Print semicolons at the ends of statements. (Default: true)`,
|
|
349
|
-
type: "boolean"
|
|
350
|
-
},
|
|
351
|
-
singleAttributePerLine: {
|
|
352
|
-
description: `Put each attribute on a new line in JSX. (Default: false)`,
|
|
353
|
-
type: "boolean"
|
|
354
|
-
},
|
|
355
|
-
singleQuote: {
|
|
356
|
-
description: `Use single quotes instead of double quotes. (Default: false)`,
|
|
357
|
-
type: "boolean"
|
|
358
|
-
},
|
|
359
380
|
tabWidth: {
|
|
360
381
|
description: `Number of spaces per indentation level. (Default: 2)`,
|
|
361
382
|
type: "integer"
|
|
@@ -435,7 +456,7 @@ let formatViaOxfmt;
|
|
|
435
456
|
const oxfmt = {
|
|
436
457
|
meta: {
|
|
437
458
|
defaultOptions: [],
|
|
438
|
-
fixable: "
|
|
459
|
+
fixable: "whitespace",
|
|
439
460
|
messages,
|
|
440
461
|
schema: [oxfmtRuleSchema],
|
|
441
462
|
type: "layout",
|
|
@@ -448,7 +469,7 @@ const oxfmt = {
|
|
|
448
469
|
create(context) {
|
|
449
470
|
if (!formatViaOxfmt) formatViaOxfmt = createSyncFn(join(dirWorkers, "oxfmt.mjs"));
|
|
450
471
|
const sourceText = context.sourceCode.text;
|
|
451
|
-
return { Program() {
|
|
472
|
+
return { [context.sourceCode.ast.type || "Program"]() {
|
|
452
473
|
try {
|
|
453
474
|
const formatResult = formatViaOxfmt(context.filename, sourceText, {
|
|
454
475
|
...context.options?.[0],
|
|
@@ -464,10 +485,10 @@ const oxfmt = {
|
|
|
464
485
|
end,
|
|
465
486
|
start
|
|
466
487
|
},
|
|
467
|
-
message: error.message
|
|
488
|
+
message: `Failed to format code: ${error.message}`
|
|
468
489
|
});
|
|
469
490
|
} else context.report({
|
|
470
|
-
message: error.message
|
|
491
|
+
message: `Failed to format code: ${error.message}`,
|
|
471
492
|
loc: {
|
|
472
493
|
end: {
|
|
473
494
|
column: 0,
|
|
@@ -483,7 +504,7 @@ const oxfmt = {
|
|
|
483
504
|
else reportDifferences(context, sourceText, formatResult.code);
|
|
484
505
|
} catch {
|
|
485
506
|
context.report({
|
|
486
|
-
message: `Failed to format file ${context.filename}`,
|
|
507
|
+
message: `Failed to format file: ${context.filename}`,
|
|
487
508
|
loc: {
|
|
488
509
|
end: {
|
|
489
510
|
column: 0,
|
package/dts/rule-options.d.ts
CHANGED
|
@@ -24,16 +24,45 @@ export type OxfmtOxfmt = []|[{
|
|
|
24
24
|
|
|
25
25
|
endOfLine?: ("lf" | "crlf" | "cr")
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
|
|
28
|
+
|
|
29
|
+
ignorePatterns?: string[]
|
|
30
|
+
|
|
31
|
+
insertFinalNewline?: boolean
|
|
32
|
+
|
|
33
|
+
jsxSingleQuote?: boolean
|
|
34
|
+
|
|
35
|
+
objectWrap?: ("preserve" | "collapse" | "always")
|
|
36
|
+
|
|
37
|
+
printWidth?: number
|
|
38
|
+
|
|
39
|
+
proseWrap?: ("always" | "never" | "preserve")
|
|
40
|
+
|
|
41
|
+
quoteProps?: ("as-needed" | "consistent" | "preserve")
|
|
42
|
+
|
|
43
|
+
semi?: boolean
|
|
44
|
+
|
|
45
|
+
singleAttributePerLine?: boolean
|
|
46
|
+
|
|
47
|
+
singleQuote?: boolean
|
|
48
|
+
|
|
49
|
+
sortImports?: {
|
|
28
50
|
|
|
29
51
|
customGroups?: {
|
|
30
52
|
|
|
31
53
|
elementNamePattern?: string[]
|
|
32
54
|
|
|
33
55
|
groupName?: string
|
|
56
|
+
|
|
57
|
+
modifiers?: string[]
|
|
58
|
+
|
|
59
|
+
selector?: string
|
|
34
60
|
}[]
|
|
35
61
|
|
|
36
|
-
groups?: (string | string[]
|
|
62
|
+
groups?: (string | string[] | {
|
|
63
|
+
|
|
64
|
+
newlinesBetween: boolean
|
|
65
|
+
})[]
|
|
37
66
|
|
|
38
67
|
ignoreCase?: boolean
|
|
39
68
|
|
|
@@ -50,12 +79,12 @@ export type OxfmtOxfmt = []|[{
|
|
|
50
79
|
sortSideEffects?: boolean
|
|
51
80
|
}
|
|
52
81
|
|
|
53
|
-
|
|
82
|
+
sortPackageJson?: (boolean | {
|
|
54
83
|
|
|
55
84
|
sortScripts?: boolean
|
|
56
85
|
})
|
|
57
86
|
|
|
58
|
-
|
|
87
|
+
sortTailwindcss?: {
|
|
59
88
|
|
|
60
89
|
attributes?: string[]
|
|
61
90
|
|
|
@@ -70,28 +99,6 @@ export type OxfmtOxfmt = []|[{
|
|
|
70
99
|
stylesheet?: string
|
|
71
100
|
}
|
|
72
101
|
|
|
73
|
-
htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
|
|
74
|
-
|
|
75
|
-
ignorePatterns?: string[]
|
|
76
|
-
|
|
77
|
-
insertFinalNewline?: boolean
|
|
78
|
-
|
|
79
|
-
jsxSingleQuote?: boolean
|
|
80
|
-
|
|
81
|
-
objectWrap?: ("preserve" | "collapse" | "always")
|
|
82
|
-
|
|
83
|
-
printWidth?: number
|
|
84
|
-
|
|
85
|
-
proseWrap?: ("always" | "never" | "preserve")
|
|
86
|
-
|
|
87
|
-
quoteProps?: ("as-needed" | "consistent" | "preserve")
|
|
88
|
-
|
|
89
|
-
semi?: boolean
|
|
90
|
-
|
|
91
|
-
singleAttributePerLine?: boolean
|
|
92
|
-
|
|
93
|
-
singleQuote?: boolean
|
|
94
|
-
|
|
95
102
|
tabWidth?: number
|
|
96
103
|
|
|
97
104
|
trailingComma?: ("all" | "es5" | "none")
|
|
@@ -122,16 +129,45 @@ export type OxfmtOxfmt = []|[{
|
|
|
122
129
|
|
|
123
130
|
endOfLine?: ("lf" | "crlf" | "cr")
|
|
124
131
|
|
|
125
|
-
|
|
132
|
+
htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
|
|
133
|
+
|
|
134
|
+
ignorePatterns?: string[]
|
|
135
|
+
|
|
136
|
+
insertFinalNewline?: boolean
|
|
137
|
+
|
|
138
|
+
jsxSingleQuote?: boolean
|
|
139
|
+
|
|
140
|
+
objectWrap?: ("preserve" | "collapse" | "always")
|
|
141
|
+
|
|
142
|
+
printWidth?: number
|
|
143
|
+
|
|
144
|
+
proseWrap?: ("always" | "never" | "preserve")
|
|
145
|
+
|
|
146
|
+
quoteProps?: ("as-needed" | "consistent" | "preserve")
|
|
147
|
+
|
|
148
|
+
semi?: boolean
|
|
149
|
+
|
|
150
|
+
singleAttributePerLine?: boolean
|
|
151
|
+
|
|
152
|
+
singleQuote?: boolean
|
|
153
|
+
|
|
154
|
+
sortImports?: {
|
|
126
155
|
|
|
127
156
|
customGroups?: {
|
|
128
157
|
|
|
129
158
|
elementNamePattern?: string[]
|
|
130
159
|
|
|
131
160
|
groupName?: string
|
|
161
|
+
|
|
162
|
+
modifiers?: string[]
|
|
163
|
+
|
|
164
|
+
selector?: string
|
|
132
165
|
}[]
|
|
133
166
|
|
|
134
|
-
groups?: (string | string[]
|
|
167
|
+
groups?: (string | string[] | {
|
|
168
|
+
|
|
169
|
+
newlinesBetween: boolean
|
|
170
|
+
})[]
|
|
135
171
|
|
|
136
172
|
ignoreCase?: boolean
|
|
137
173
|
|
|
@@ -148,12 +184,12 @@ export type OxfmtOxfmt = []|[{
|
|
|
148
184
|
sortSideEffects?: boolean
|
|
149
185
|
}
|
|
150
186
|
|
|
151
|
-
|
|
187
|
+
sortPackageJson?: (boolean | {
|
|
152
188
|
|
|
153
189
|
sortScripts?: boolean
|
|
154
190
|
})
|
|
155
191
|
|
|
156
|
-
|
|
192
|
+
sortTailwindcss?: {
|
|
157
193
|
|
|
158
194
|
attributes?: string[]
|
|
159
195
|
|
|
@@ -168,28 +204,6 @@ export type OxfmtOxfmt = []|[{
|
|
|
168
204
|
stylesheet?: string
|
|
169
205
|
}
|
|
170
206
|
|
|
171
|
-
htmlWhitespaceSensitivity?: ("css" | "ignore" | "strict")
|
|
172
|
-
|
|
173
|
-
ignorePatterns?: string[]
|
|
174
|
-
|
|
175
|
-
insertFinalNewline?: boolean
|
|
176
|
-
|
|
177
|
-
jsxSingleQuote?: boolean
|
|
178
|
-
|
|
179
|
-
objectWrap?: ("preserve" | "collapse" | "always")
|
|
180
|
-
|
|
181
|
-
printWidth?: number
|
|
182
|
-
|
|
183
|
-
proseWrap?: ("always" | "never" | "preserve")
|
|
184
|
-
|
|
185
|
-
quoteProps?: ("as-needed" | "consistent" | "preserve")
|
|
186
|
-
|
|
187
|
-
semi?: boolean
|
|
188
|
-
|
|
189
|
-
singleAttributePerLine?: boolean
|
|
190
|
-
|
|
191
|
-
singleQuote?: boolean
|
|
192
|
-
|
|
193
207
|
tabWidth?: number
|
|
194
208
|
|
|
195
209
|
trailingComma?: ("all" | "es5" | "none")
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-oxfmt",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"description": "An ESLint plugin for formatting code with oxfmt.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"eslint",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"sideEffects": false,
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"eslint": "^9.5.0",
|
|
47
|
-
"oxfmt": "0.
|
|
46
|
+
"eslint": "^9.5.0 || ^10.0.0",
|
|
47
|
+
"oxfmt": ">=0.35.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"generate-differences": "^0.1.1",
|
|
@@ -53,26 +53,26 @@
|
|
|
53
53
|
"synckit": "^0.11.12"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@ntnyq/eslint-config": "^6.0.0-beta.
|
|
56
|
+
"@ntnyq/eslint-config": "^6.0.0-beta.9",
|
|
57
57
|
"@types/json-schema": "^7.0.15",
|
|
58
|
-
"@types/node": "^25.
|
|
59
|
-
"@typescript/native-preview": "^7.0.0-dev.
|
|
58
|
+
"@types/node": "^25.3.0",
|
|
59
|
+
"@typescript/native-preview": "^7.0.0-dev.20260224.1",
|
|
60
60
|
"bumpp": "^10.4.1",
|
|
61
|
-
"eslint": "^
|
|
61
|
+
"eslint": "^10.0.2",
|
|
62
62
|
"eslint-parser-plain": "^0.1.1",
|
|
63
|
-
"eslint-typegen": "^2.3.
|
|
63
|
+
"eslint-typegen": "^2.3.1",
|
|
64
64
|
"eslint-vitest-rule-tester": "^3.1.0",
|
|
65
65
|
"husky": "^9.1.7",
|
|
66
66
|
"nano-staged": "^0.9.0",
|
|
67
67
|
"npm-run-all2": "^8.0.4",
|
|
68
|
-
"oxfmt": "^0.
|
|
68
|
+
"oxfmt": "^0.35.0",
|
|
69
69
|
"show-invisibles": "^0.0.2",
|
|
70
70
|
"tinyglobby": "^0.2.15",
|
|
71
71
|
"tsdown": "^0.20.3",
|
|
72
72
|
"tsx": "^4.21.0",
|
|
73
73
|
"typescript": "^5.9.3",
|
|
74
74
|
"vitest": "^4.0.18",
|
|
75
|
-
"eslint-plugin-oxfmt": "0.
|
|
75
|
+
"eslint-plugin-oxfmt": "0.1.1"
|
|
76
76
|
},
|
|
77
77
|
"engines": {
|
|
78
78
|
"node": "^20.19.0 || >=22.12.0"
|