@isentinel/eslint-config 1.3.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 CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
  ### Starter Wizard
6
6
 
7
- We provided a CLI tool to help you set up your project, or migrate from the legacy config to the new flat config with one command.
7
+ We provided a CLI tool to help you set up your project, or migrate from the
8
+ legacy config to the new flat config with one command.
8
9
 
9
10
  ### Example Usage
10
11
 
11
12
  For an existing template that already has this config setup, please refer to the
12
- [roblox-ts
13
- template](https://github.com/christopher-buss/roblox-ts-project-template)
13
+ [roblox-ts template](https://github.com/christopher-buss/roblox-ts-project-template)
14
14
  repository. This includes all necessarily files and configurations to get you up
15
15
  and running.
16
16
 
@@ -28,40 +28,46 @@ pnpm i -D eslint @isentinel/eslint-config
28
28
 
29
29
  ### Create config file
30
30
 
31
- With [`"type": "module"`](https://nodejs.org/api/packages.html#type) in `package.json` (recommended):
31
+ With [`"type": "module"`](https://nodejs.org/api/packages.html#type) in
32
+ `package.json` (recommended):
32
33
 
33
34
  ```ts
34
35
  // eslint.config.ts
35
- import style from "@isentinel/eslint-config";
36
+ import isentinel from "@isentinel/eslint-config";
36
37
 
37
- export default style();
38
+ export default isentinel();
38
39
  ```
39
40
 
40
41
  #### Optional: TypeScript Config Support
41
42
 
42
- If you want to use `eslint.config.ts` instead of `.js`, install `jiti` v2.0.0 or greater:
43
+ If you want to use `eslint.config.ts` instead of `.js`, install `jiti` v2.0.0 or
44
+ greater:
43
45
 
44
46
  ```bash
45
47
  pnpm i -D jiti@^2.0.0
46
48
  ```
47
49
 
48
- See [ESLint's TypeScript configuration documentation](https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files) for more details.
50
+ See
51
+ [ESLint's TypeScript configuration documentation](https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files)
52
+ for more details.
49
53
 
50
54
  <details>
51
55
  <summary>
52
56
  Combined with legacy config:
53
57
  </summary>
54
58
 
55
- If you still use some configs from the legacy eslintrc format, you can use the [`@eslint/eslintrc`](https://www.npmjs.com/package/@eslint/eslintrc) package to convert them to the flat config.
59
+ If you still use some configs from the legacy eslintrc format, you can use the
60
+ [`@eslint/eslintrc`](https://www.npmjs.com/package/@eslint/eslintrc) package to
61
+ convert them to the flat config.
56
62
 
57
63
  ```ts
58
64
  // eslint.config.ts
59
65
  import { FlatCompat } from "@eslint/eslintrc";
60
- import style from "@isentinel/eslint-config";
66
+ import isentinel from "@isentinel/eslint-config";
61
67
 
62
68
  const compat = new FlatCompat();
63
69
 
64
- export default style(
70
+ export default isentinel(
65
71
  {
66
72
  ignores: [],
67
73
  },
@@ -78,8 +84,8 @@ export default style(
78
84
  );
79
85
  ```
80
86
 
81
- > Note that `.eslintignore` no longer works in Flat config, see
82
- > [customization](#customization) for more details.
87
+ > Note that `.eslintignore` no longer works in Flat config. Use the `ignores`
88
+ > option instead, see [customization](#customization) for more details.
83
89
 
84
90
  </details>
85
91
 
@@ -118,7 +124,8 @@ when you use the `!` operator to assert that a value is not `undefined`. The
118
124
  caveat is that this rule will not always play nicely with
119
125
  `noUncheckedIndexedAccess`, and will often require you to disable it in certain
120
126
  places. I believe that this is a good trade-off, as it will help you catch
121
- potential bugs in your code, but you can disable it if you find it too restrictive.
127
+ potential bugs in your code, but you can disable it if you find it too
128
+ restrictive.
122
129
 
123
130
  ```json
124
131
  {
@@ -130,7 +137,8 @@ potential bugs in your code, but you can disable it if you find it too restricti
130
137
 
131
138
  ## VS Code support (auto fix)
132
139
 
133
- Install [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
140
+ Install
141
+ [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
134
142
 
135
143
  Add the following settings to your `.vscode/settings.json`:
136
144
 
@@ -173,22 +181,22 @@ Add the following settings to your `.vscode/settings.json`:
173
181
 
174
182
  ## Customization
175
183
 
176
- Normally you only need to import the `style` preset:
184
+ Normally you only need to import the `isentinel` preset:
177
185
 
178
186
  ```ts
179
187
  // eslint.config.ts
180
- import style from "@isentinel/eslint-config";
188
+ import isentinel from "@isentinel/eslint-config";
181
189
 
182
- export default style();
190
+ export default isentinel();
183
191
  ```
184
192
 
185
193
  And that's it! Or you can configure each integration individually, for example:
186
194
 
187
195
  ```ts
188
196
  // eslint.config.ts
189
- import style from "@isentinel/eslint-config";
197
+ import isentinel from "@isentinel/eslint-config";
190
198
 
191
- export default style({
199
+ export default isentinel({
192
200
  // `.eslintignore` is no longer supported in Flat config, use `ignores`
193
201
  // instead
194
202
  ignores: [
@@ -204,13 +212,14 @@ export default style({
204
212
  });
205
213
  ```
206
214
 
207
- The `style` factory function also accepts any number of arbitrary custom config overrides:
215
+ The `isentinel` factory function also accepts any number of arbitrary custom
216
+ config overrides:
208
217
 
209
218
  ```ts
210
219
  // eslint.config.ts
211
- import style from "@isentinel/eslint-config";
220
+ import isentinel from "@isentinel/eslint-config";
212
221
 
213
- export default style(
222
+ export default isentinel(
214
223
  {
215
224
  // Configures for this config
216
225
  },
@@ -227,13 +236,21 @@ export default style(
227
236
  );
228
237
  ```
229
238
 
230
- Check out the [configs](https://github.com/christopher-buss/roblox-ts-eslint-config/tree/main/src/configs) and [factory](https://github.com/christopher-buss/roblox-ts-eslint-config/blob/main/src/factory.ts) for more details.
239
+ Check out the
240
+ [configs](https://github.com/christopher-buss/eslint-config/tree/main/src/configs)
241
+ and
242
+ [factory](https://github.com/christopher-buss/eslint-config/blob/main/src/factory.ts)
243
+ for more details.
231
244
 
232
- > Thanks to [antfu/eslint-config](https://github.com/antfu/eslint-config) and [sxzz/eslint-config](https://github.com/sxzz/eslint-config) for the inspiration and reference.
245
+ > Thanks to [antfu/eslint-config](https://github.com/antfu/eslint-config) and
246
+ > [sxzz/eslint-config](https://github.com/sxzz/eslint-config) for the
247
+ > inspiration and reference.
233
248
 
234
249
  ### Plugins Renaming
235
250
 
236
- Since flat config requires us to explicitly provide the plugin names (instead of the mandatory convention from npm package name), we renamed some plugins to make the overall scope more consistent and easier to write.
251
+ Since flat config requires us to explicitly provide the plugin names (instead of
252
+ the mandatory convention from npm package name), we renamed some plugins to make
253
+ the overall scope more consistent and easier to write.
237
254
 
238
255
  | New Prefix | Original Prefix | Source Plugin |
239
256
  | ---------- | ---------------------- | ------------------------------------------------------------------------------------------ |
@@ -243,7 +260,8 @@ Since flat config requires us to explicitly provide the plugin names (instead of
243
260
  | `ts/*` | `@typescript-eslint/*` | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) |
244
261
  | `style/*` | `@stylistic/*` | [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic) |
245
262
 
246
- When you want to override rules, or disable them inline, you need to update to the new prefix:
263
+ When you want to override rules, or disable them inline, you need to update to
264
+ the new prefix:
247
265
 
248
266
  ```diff
249
267
  -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
@@ -263,7 +281,8 @@ repository rather than this one.
263
281
 
264
282
  Sometimes you will have words that are not in the dictionary, but are still
265
283
  valid for your project. To add these words to the dictionary, you can create a
266
- `cspell.config.yaml` file in the root of your project with the following content:
284
+ `cspell.config.yaml` file in the root of your project with the following
285
+ content:
267
286
 
268
287
  ```yaml
269
288
  # cspell.config.yaml
@@ -276,9 +295,9 @@ To disable this, you can set the `spellCheck` option to `false`:
276
295
 
277
296
  ```js
278
297
  // eslint.config.ts
279
- import style from "@isentinel/eslint-config";
298
+ import isentinel from "@isentinel/eslint-config";
280
299
 
281
- export default style({
300
+ export default isentinel({
282
301
  spellCheck: false,
283
302
  });
284
303
  ```
@@ -288,7 +307,9 @@ For more information on how to configure the spell checker, please refer to the
288
307
 
289
308
  #### `perfectionist` (sorting)
290
309
 
291
- This plugin [`eslint-plugin-perfectionist`](https://github.com/azat-io/eslint-plugin-perfectionist) allows you to sorted object keys, imports, etc, with auto-fix.
310
+ This plugin
311
+ [`eslint-plugin-perfectionist`](https://github.com/azat-io/eslint-plugin-perfectionist)
312
+ allows you to sort object keys, imports, etc, with auto-fix.
292
313
 
293
314
  The plugin is installed and some rules are enabled by default, but these rules
294
315
  can be disabled or overridden by your own config. For example, I personally have
@@ -296,9 +317,9 @@ sort-objects set to:
296
317
 
297
318
  ```js
298
319
  // eslint.config.ts
299
- import style from "@isentinel/eslint-config";
320
+ import isentinel from "@isentinel/eslint-config";
300
321
 
301
- export default style({
322
+ export default isentinel({
302
323
  rules: {
303
324
  "perfectionist/sort-objects": [
304
325
  "warn",
@@ -321,7 +342,8 @@ export default style({
321
342
 
322
343
  ### Optional Configs
323
344
 
324
- We provide some optional configs for specific use cases, that we don't include their dependencies by default.
345
+ We provide some optional configs for specific use cases, that we don't include
346
+ their dependencies by default.
325
347
 
326
348
  #### React
327
349
 
@@ -329,9 +351,9 @@ To enable React support, you need to explicitly turn it on:
329
351
 
330
352
  ```js
331
353
  // eslint.config.ts
332
- import style from "@isentinel/eslint-config";
354
+ import isentinel from "@isentinel/eslint-config";
333
355
 
334
- export default style({
356
+ export default isentinel({
335
357
  react: true,
336
358
  });
337
359
  ```
@@ -342,14 +364,15 @@ To enable Jest support, you need to explicitly turn it on:
342
364
 
343
365
  ```js
344
366
  // eslint.config.ts
345
- import style from "@isentinel/eslint-config";
367
+ import isentinel from "@isentinel/eslint-config";
346
368
 
347
- export default style({
369
+ export default isentinel({
348
370
  test: true,
349
371
  });
350
372
  ```
351
373
 
352
- Running `npx eslint` should prompt you to install the required dependencies, otherwise, you can install them manually:
374
+ Running `npx eslint` should prompt you to install the required dependencies,
375
+ otherwise, you can install them manually:
353
376
 
354
377
  ```bash
355
378
  pnpm i -D @eslint-react/eslint-plugin eslint-plugin-react-roblox-hooks eslint-plugin-jest
@@ -357,7 +380,8 @@ pnpm i -D @eslint-react/eslint-plugin eslint-plugin-react-roblox-hooks eslint-pl
357
380
 
358
381
  ### Lint Staged
359
382
 
360
- If you want to apply lint and auto-fix before every commit, you can add the following to your `package.json`:
383
+ If you want to apply lint and auto-fix before every commit, you can add the
384
+ following to your `package.json`:
361
385
 
362
386
  ```json
363
387
  {
@@ -378,7 +402,9 @@ pnpm i -D lint-staged simple-git-hooks
378
402
 
379
403
  ## View what rules are enabled
380
404
 
381
- There is a visual tool to help you view what rules are enabled in your project and apply them to what files, [eslint-config-inspector](https://github.com/eslint/config-inspector)
405
+ There is a visual tool to help you view what rules are enabled in your project
406
+ and apply them to what files,
407
+ [eslint-config-inspector](https://github.com/eslint/config-inspector)
382
408
 
383
409
  Go to your project root that contains `eslint.config.ts` and run:
384
410
 
@@ -388,7 +414,9 @@ npx eslint-config-inspector
388
414
 
389
415
  ## Versioning Policy
390
416
 
391
- This project follows [Semantic Versioning](https://semver.org/) for releases. However, since this is just a config and involves opinions and many moving parts, we don't treat rules changes as breaking changes.
417
+ This project follows [Semantic Versioning](https://semver.org/) for releases.
418
+ However, since this is just a config and involves opinions and many moving
419
+ parts, we don't treat rules changes as breaking changes.
392
420
 
393
421
  ### Changes Considered as Breaking Changes
394
422
 
package/dist/cli.js CHANGED
@@ -18,7 +18,7 @@ init_esm_shims();
18
18
  import ansis from "ansis";
19
19
 
20
20
  // package.json
21
- var version = "1.3.0";
21
+ var version = "2.0.0";
22
22
  var package_default = {
23
23
  name: "@isentinel/eslint-config",
24
24
  version,
@@ -29,10 +29,10 @@ var package_default = {
29
29
  "roblox-ts",
30
30
  "rbxts"
31
31
  ],
32
- homepage: "https://github.com/christopher-buss/roblox-ts-eslint-config",
32
+ homepage: "https://github.com/christopher-buss/eslint-config",
33
33
  repository: {
34
34
  type: "git",
35
- url: "git+https://github.com/christopher-buss/roblox-ts-eslint-config.git"
35
+ url: "git+https://github.com/christopher-buss/eslint-config.git"
36
36
  },
37
37
  license: "MIT",
38
38
  author: "Christopher Buss <christopher.buss@pm.me> (https://github.com/christopher-buss)",
@@ -88,13 +88,13 @@ var package_default = {
88
88
  "eslint-config-flat-gitignore": "catalog:prod",
89
89
  "eslint-config-prettier": "catalog:prod",
90
90
  "eslint-flat-config-utils": "catalog:prod",
91
+ "eslint-import-resolver-node": "catalog:prod",
91
92
  "eslint-merge-processors": "catalog:prod",
92
93
  "eslint-plugin-antfu": "catalog:prod",
93
94
  "eslint-plugin-arrow-return-style": "catalog:prod",
94
95
  "eslint-plugin-better-max-params": "catalog:prod",
95
96
  "eslint-plugin-comment-length": "catalog:prod",
96
97
  "eslint-plugin-de-morgan": "catalog:prod",
97
- "eslint-plugin-format": "catalog:prod",
98
98
  "eslint-plugin-format-lua": "catalog:prod",
99
99
  "eslint-plugin-import-lite": "catalog:prod",
100
100
  "eslint-plugin-jsdoc": "catalog:prod",
@@ -103,6 +103,7 @@ var package_default = {
103
103
  "eslint-plugin-package-json": "catalog:prod",
104
104
  "eslint-plugin-perfectionist": "catalog:prod",
105
105
  "eslint-plugin-pnpm": "catalog:prod",
106
+ "eslint-plugin-prettier": "catalog:prod",
106
107
  "eslint-plugin-promise": "catalog:prod",
107
108
  "eslint-plugin-roblox-ts": "catalog:prod",
108
109
  "eslint-plugin-sentinel": "catalog:prod",
@@ -151,7 +152,7 @@ var package_default = {
151
152
  peerDependencies: {
152
153
  "@eslint-react/eslint-plugin": "^1.45.0",
153
154
  eslint: "^9.10.0",
154
- "eslint-plugin-jest": "^28.9.0",
155
+ "eslint-plugin-jest": "^28.9.0 || ^29.0.0",
155
156
  "eslint-plugin-react-roblox-hooks": "^5.1.0-rbx.1"
156
157
  },
157
158
  peerDependenciesMeta: {
@@ -250,9 +251,9 @@ init_esm_shims();
250
251
  import { execSync } from "child_process";
251
252
  function getEslintConfigContent(mainConfig, additionalConfigs) {
252
253
  return `
253
- import style from '@isentinel/eslint-config'
254
+ import isentinel from '@isentinel/eslint-config'
254
255
 
255
- export default style({
256
+ export default isentinel({
256
257
  ${mainConfig}
257
258
  }${additionalConfigs?.map((config) => `,{
258
259
  ${config}
package/dist/index.d.ts CHANGED
@@ -333,11 +333,7 @@ interface RuleOptions {
333
333
  */
334
334
  'format-lua/stylua'?: Linter.RuleEntry<FormatLuaStylua>
335
335
  /**
336
- * Use dprint to format code
337
- */
338
- 'format/dprint'?: Linter.RuleEntry<FormatDprint>
339
- /**
340
- * Use Prettier to format code
336
+ * @see https://github.com/prettier/eslint-plugin-prettier#options
341
337
  */
342
338
  'format/prettier'?: Linter.RuleEntry<FormatPrettier>
343
339
  /**
@@ -7321,17 +7317,16 @@ type FormatLuaStylua = []|[{
7321
7317
  }
7322
7318
  [k: string]: unknown | undefined
7323
7319
  }]
7324
- // ----- format/dprint -----
7325
- type FormatDprint = []|[{
7326
- language?: string
7327
- languageOptions?: {
7328
- [k: string]: unknown | undefined
7329
- }
7330
- [k: string]: unknown | undefined
7331
- }]
7332
7320
  // ----- format/prettier -----
7333
7321
  type FormatPrettier = []|[{
7334
- parser?: string
7322
+ [k: string]: unknown | undefined
7323
+ }]|[{
7324
+ [k: string]: unknown | undefined
7325
+ }, {
7326
+ usePrettierrc?: boolean
7327
+ fileInfoOptions?: {
7328
+ [k: string]: unknown | undefined
7329
+ }
7335
7330
  [k: string]: unknown | undefined
7336
7331
  }]
7337
7332
  // ----- func-call-spacing -----
@@ -15463,7 +15458,7 @@ type Yoda = []|[("always" | "never")]|[("always" | "never"), {
15463
15458
  onlyEquality?: boolean
15464
15459
  }]
15465
15460
  // Names of all the configs
15466
- type ConfigNames = 'style/eslint/comments' | 'style/formatters/setup' | 'style/ignores' | 'style/imports/rules' | 'style/import-sort' | 'style/imports/game' | 'style/javascript/setup' | 'style/javascript/rules' | 'style/jsdoc' | 'style/jsonc/setup' | 'style/jsonc/rules' | 'style/markdown/setup' | 'style/markdown/processor' | 'style/markdown/parser' | 'style/markdown/disables' | 'style/package-json' | 'style/perfectionist' | 'style/pnpm/package-json' | 'style/pnpm/pnpm-workspace-yaml' | 'style/prettier' | 'style/promise' | 'style/react/setup' | 'style/react/rules' | 'style/react/type-aware-rules' | 'style/roblox' | 'style/shopify' | 'style/sonarjs' | 'style/sort-tsconfig' | 'style/spelling' | 'style/stylistic' | 'style/test/setup' | 'style/test/rules' | 'style/typescript/setup' | 'style/typescript/parser' | 'style/typescript/type-aware-parser' | 'style/typescript/rules' | 'style/typescript/rules-type-aware' | 'style/unicorn' | 'style/yaml:setup' | 'style/yaml/rules'
15461
+ type ConfigNames = 'isentinel/eslint/comments' | 'isentinel/formatters/setup' | 'isentinel/formatter/css' | 'isentinel/formatter/scss' | 'isentinel/formatter/less' | 'isentinel/formatter/html' | 'isentinel/formatter/markdown' | 'isentinel/formatter/graphql' | 'isentinel/ignores' | 'isentinel/imports/rules' | 'isentinel/import-sort' | 'isentinel/imports/game' | 'isentinel/javascript/setup' | 'isentinel/javascript/rules' | 'isentinel/jsdoc' | 'isentinel/jsonc/setup' | 'isentinel/jsonc/rules' | 'isentinel/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/package-json' | 'isentinel/perfectionist' | 'isentinel/pnpm/package-json' | 'isentinel/pnpm/pnpm-workspace-yaml' | 'isentinel/prettier' | 'isentinel/promise' | 'isentinel/react/setup' | 'isentinel/react/rules' | 'isentinel/react/type-aware-rules' | 'isentinel/roblox' | 'isentinel/shopify' | 'isentinel/sonarjs' | 'isentinel/sort-tsconfig' | 'isentinel/spelling' | 'isentinel/stylistic' | 'isentinel/test/setup' | 'isentinel/test/rules' | 'isentinel/typescript/setup' | 'isentinel/typescript/parser' | 'isentinel/typescript/type-aware-parser' | 'isentinel/typescript/rules' | 'isentinel/typescript/rules-type-aware' | 'isentinel/unicorn' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules'
15467
15462
 
15468
15463
  type Awaitable<T> = Promise<T> | T;
15469
15464
  interface JsDocOptions {
@@ -15623,12 +15618,6 @@ interface OptionsFormatters {
15623
15618
  * Currently only support Prettier.
15624
15619
  */
15625
15620
  css?: "prettier" | boolean;
15626
- /**
15627
- * Custom options for dprint.
15628
- *
15629
- * By default it's controlled by our own config.
15630
- */
15631
- dprintOptions?: boolean;
15632
15621
  /** Enable formatting support for GraphQL. */
15633
15622
  graphql?: "prettier" | boolean;
15634
15623
  /**
@@ -15646,11 +15635,9 @@ interface OptionsFormatters {
15646
15635
  /**
15647
15636
  * Enable formatting support for Markdown.
15648
15637
  *
15649
- * Support both Prettier and dprint.
15650
- *
15651
15638
  * When set to `true`, it will use Prettier.
15652
15639
  */
15653
- markdown?: "dprint" | "prettier" | boolean;
15640
+ markdown?: boolean;
15654
15641
  /**
15655
15642
  * Custom options for Prettier.
15656
15643
  *
@@ -15725,6 +15712,16 @@ type ReactConfig = ESLintReactSettings & OptionsOverrides & {
15725
15712
  interface Rules extends RuleOptions {
15726
15713
  }
15727
15714
  interface SpellCheckConfig {
15715
+ /**
15716
+ * Whether or not to run the spell checker in the editor.
15717
+ *
15718
+ * Some users have performance issues with the spell checker in the editor,
15719
+ * so this option allows you to disable it. It will still run in CI and in
15720
+ * git hooks / pre-commit checks.
15721
+ *
15722
+ * @default true
15723
+ */
15724
+ inEditor?: boolean;
15728
15725
  /** Defaults to `en-US`. */
15729
15726
  language?: string;
15730
15727
  }
@@ -15744,7 +15741,41 @@ declare function comments(options?: OptionsStylistic): Promise<Array<TypedFlatCo
15744
15741
 
15745
15742
  declare function disables(): Promise<Array<TypedFlatConfigItem>>;
15746
15743
 
15747
- declare function formatters(options?: OptionsFormatters | true, stylistic?: StylisticConfig, markdownEnabled?: boolean): Promise<Array<TypedFlatConfigItem>>;
15744
+ type PrettierRuleOptions = Pick<Partial<Options>, "parser"> & Options & Record<string, undefined | unknown>;
15745
+ declare function formatters(options?: OptionsFormatters | true, stylistic?: StylisticConfig): Promise<Array<TypedFlatConfigItem>>;
15746
+ declare const parserMd: {
15747
+ meta: {
15748
+ name: string;
15749
+ };
15750
+ parseForESLint: (code: string) => {
15751
+ ast: {
15752
+ body: never[];
15753
+ comments: never[];
15754
+ end: number;
15755
+ loc: {
15756
+ end: {
15757
+ column: number;
15758
+ line: number;
15759
+ };
15760
+ start: {
15761
+ column: number;
15762
+ line: number;
15763
+ };
15764
+ };
15765
+ mdCode: string;
15766
+ range: number[];
15767
+ start: number;
15768
+ tokens: never[];
15769
+ type: string;
15770
+ };
15771
+ scopeManager: null;
15772
+ services: {
15773
+ foo(): void;
15774
+ isPlain: boolean;
15775
+ };
15776
+ visitorKeys: null;
15777
+ };
15778
+ };
15748
15779
 
15749
15780
  declare function ignores(): Promise<Array<TypedFlatConfigItem>>;
15750
15781
 
@@ -15796,7 +15827,7 @@ declare function sonarjs(options?: OptionsIsInEditor): Promise<Array<TypedFlatCo
15796
15827
  */
15797
15828
  declare function sortTsconfig(): Array<TypedFlatConfigItem>;
15798
15829
 
15799
- declare function spelling(options?: OptionsComponentExtensions & OptionsFiles & SpellCheckConfig): Promise<Array<TypedFlatConfigItem>>;
15830
+ declare function spelling(options?: OptionsComponentExtensions & OptionsFiles & OptionsIsInEditor & SpellCheckConfig): Promise<Array<TypedFlatConfigItem>>;
15800
15831
 
15801
15832
  declare const StylisticConfigDefaults: StylisticConfig;
15802
15833
  declare function stylistic(options?: StylisticConfig): Promise<Array<TypedFlatConfigItem>>;
@@ -15825,7 +15856,7 @@ declare const defaultPluginRenaming: {
15825
15856
  * @param userConfigs - Additional user configuration items.
15826
15857
  * @returns A promise that resolves to an array of user configuration items.
15827
15858
  */
15828
- declare function style(options?: OptionsConfig & TypedFlatConfigItem, ...userConfigs: Array<Awaitable<Array<Linter.Config> | Array<TypedFlatConfigItem> | FlatConfigComposer<any, any> | TypedFlatConfigItem>>): FlatConfigComposer<TypedFlatConfigItem, ConfigNames>;
15859
+ declare function isentinel(options?: OptionsConfig & TypedFlatConfigItem, ...userConfigs: Array<Awaitable<Array<Linter.Config> | Array<TypedFlatConfigItem> | FlatConfigComposer<any, any> | TypedFlatConfigItem>>): FlatConfigComposer<TypedFlatConfigItem, ConfigNames>;
15829
15860
 
15830
15861
  declare const GLOB_SRC_EXT = "?([cm])[jt]s?(x)";
15831
15862
  declare const GLOB_SRC = "**/*.?([cm])[jt]s?(x)";
@@ -15952,4 +15983,4 @@ declare function renameRules(rules: Record<string, any>, map: Record<string, str
15952
15983
  declare function resolveSubOptions<K extends keyof OptionsConfig>(options: OptionsConfig, key: K): ResolvedOptions<OptionsConfig[K]>;
15953
15984
  declare function toArray<T>(value: Array<T> | T): Array<T>;
15954
15985
 
15955
- export { type Awaitable, type ConfigNames, GLOB_ALL_SRC, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, type JsDocOptions, type OptionsComponentExtensions, type OptionsConfig, type OptionsFiles, type OptionsFormatters, type OptionsHasTypeScript, type OptionsIsInEditor, type OptionsOverrides, type OptionsProjectType, type OptionsStylistic, type OptionsTypeScriptParserOptions, type OptionsTypeScriptWithTypes, type OptionsTypescript, type PerfectionistConfig, type ReactConfig, type ResolvedOptions, type Rules, type SpellCheckConfig, type StylisticConfig, StylisticConfigDefaults, type TypedFlatConfigItem, combine, comments, createTsParser, style as default, defaultPluginRenaming, disables, ensurePackages, formatters, getOverrides, getTsConfig, ignores, imports, interopDefault, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, markdown, packageJson, parserPlain, perfectionist, pnpm, prettier, promise, react, renamePluginInConfigs, renameRules, resolveSubOptions, roblox, shopify, sonarjs, sortTsconfig, spelling, style, stylistic, toArray, toml, typescript, unicorn, yaml };
15986
+ export { type Awaitable, type ConfigNames, GLOB_ALL_SRC, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_YAML, type JsDocOptions, type OptionsComponentExtensions, type OptionsConfig, type OptionsFiles, type OptionsFormatters, type OptionsHasTypeScript, type OptionsIsInEditor, type OptionsOverrides, type OptionsProjectType, type OptionsStylistic, type OptionsTypeScriptParserOptions, type OptionsTypeScriptWithTypes, type OptionsTypescript, type PerfectionistConfig, type PrettierRuleOptions, type ReactConfig, type ResolvedOptions, type Rules, type SpellCheckConfig, type StylisticConfig, StylisticConfigDefaults, type TypedFlatConfigItem, combine, comments, createTsParser, isentinel as default, defaultPluginRenaming, disables, ensurePackages, formatters, getOverrides, getTsConfig, ignores, imports, interopDefault, isInEditorEnvironment, isInGitHooksOrLintStaged, isentinel, javascript, jsdoc, jsonc, markdown, packageJson, parserMd, parserPlain, perfectionist, pnpm, prettier, promise, react, renamePluginInConfigs, renameRules, resolveSubOptions, roblox, shopify, sonarjs, sortTsconfig, spelling, stylistic, toArray, toml, typescript, unicorn, yaml };
package/dist/index.js CHANGED
@@ -3157,7 +3157,7 @@ function createTsParser(options) {
3157
3157
  ...parserOptions
3158
3158
  }
3159
3159
  },
3160
- name: `style/${configName}/${typeAware ? "type-aware-parser" : "parser"}`
3160
+ name: `isentinel/${configName}/${typeAware ? "type-aware-parser" : "parser"}`
3161
3161
  };
3162
3162
  }
3163
3163
  async function ensurePackages(packages) {
@@ -3269,7 +3269,7 @@ async function comments(options = {}) {
3269
3269
  ]);
3270
3270
  return [
3271
3271
  {
3272
- name: "style/eslint/comments",
3272
+ name: "isentinel/eslint/comments",
3273
3273
  plugins: {
3274
3274
  "comment-length": pluginCommentLength,
3275
3275
  "eslint-comments": pluginComments,
@@ -3313,7 +3313,7 @@ async function disables() {
3313
3313
  return [
3314
3314
  {
3315
3315
  files: [`**/scripts/${GLOB_SRC}`],
3316
- name: "style/disables/scripts",
3316
+ name: "isentinel/disables/scripts",
3317
3317
  rules: {
3318
3318
  "antfu/no-top-level-await": "off",
3319
3319
  "no-console": "off",
@@ -3322,7 +3322,7 @@ async function disables() {
3322
3322
  },
3323
3323
  {
3324
3324
  files: [`**/cli/${GLOB_SRC}`, `**/cli.${GLOB_SRC_EXT}`],
3325
- name: "style/disables/cli",
3325
+ name: "isentinel/disables/cli",
3326
3326
  rules: {
3327
3327
  "antfu/no-top-level-await": "off",
3328
3328
  "no-console": "off"
@@ -3330,7 +3330,7 @@ async function disables() {
3330
3330
  },
3331
3331
  {
3332
3332
  files: ["**/bin/**/*", `**/bin.${GLOB_SRC_EXT}`],
3333
- name: "style/disables/bin",
3333
+ name: "isentinel/disables/bin",
3334
3334
  rules: {
3335
3335
  "antfu/no-import-dist": "off",
3336
3336
  "antfu/no-import-node-modules-by-path": "off"
@@ -3338,7 +3338,7 @@ async function disables() {
3338
3338
  },
3339
3339
  {
3340
3340
  files: [GLOB_DTS],
3341
- name: "style/disables/dts",
3341
+ name: "isentinel/disables/dts",
3342
3342
  rules: {
3343
3343
  "eslint-comments/no-unlimited-disable": "off",
3344
3344
  "import/no-default-export": "off",
@@ -3351,7 +3351,7 @@ async function disables() {
3351
3351
  },
3352
3352
  {
3353
3353
  files: [...GLOB_TESTS],
3354
- name: "style/disables/test",
3354
+ name: "isentinel/disables/test",
3355
3355
  rules: {
3356
3356
  "antfu/no-top-level-await": "off",
3357
3357
  "max-lines": "off",
@@ -3363,7 +3363,7 @@ async function disables() {
3363
3363
  },
3364
3364
  {
3365
3365
  files: ["**/*.js", "**/*.cjs"],
3366
- name: "style/disables/cjs",
3366
+ name: "isentinel/disables/cjs",
3367
3367
  rules: {
3368
3368
  "ts/no-require-imports": "off"
3369
3369
  }
@@ -3402,7 +3402,7 @@ async function stylistic(options = {}) {
3402
3402
  return [
3403
3403
  {
3404
3404
  files: [GLOB_SRC],
3405
- name: "style/stylistic",
3405
+ name: "isentinel/stylistic",
3406
3406
  plugins: {
3407
3407
  "antfu": pluginAntfu,
3408
3408
  "arrow-style": pluginArrowReturnStyle,
@@ -3467,16 +3467,14 @@ async function stylistic(options = {}) {
3467
3467
  }
3468
3468
 
3469
3469
  // src/configs/formatters.ts
3470
- async function formatters(options = {}, stylistic2 = {}, markdownEnabled = true) {
3471
- let formattingOptions = options;
3472
- if (formattingOptions === true) {
3473
- formattingOptions = {
3474
- css: true,
3475
- graphql: true,
3476
- html: true,
3477
- markdown: true
3478
- };
3479
- }
3470
+ async function formatters(options = {}, stylistic2 = {}) {
3471
+ const formattingOptions = {
3472
+ css: true,
3473
+ graphql: true,
3474
+ html: true,
3475
+ markdown: true,
3476
+ ...options === true ? {} : options
3477
+ };
3480
3478
  const { indent, quotes, semi } = {
3481
3479
  ...StylisticConfigDefaults,
3482
3480
  ...stylistic2
@@ -3491,20 +3489,12 @@ async function formatters(options = {}, stylistic2 = {}, markdownEnabled = true)
3491
3489
  },
3492
3490
  formattingOptions.prettierOptions ?? {}
3493
3491
  );
3494
- const dprintOptions = Object.assign(
3495
- {
3496
- indentWidth: typeof indent === "number" ? indent : 2,
3497
- quoteStyle: quotes === "single" ? "preferSingle" : "preferDouble",
3498
- useTabs: indent === "tab"
3499
- },
3500
- formattingOptions.dprintOptions ?? {}
3501
- );
3502
- const pluginFormat = await interopDefault(import("eslint-plugin-format"));
3492
+ const pluginPrettier = await interopDefault(import("eslint-plugin-prettier"));
3503
3493
  const configs = [
3504
3494
  {
3505
- name: "style/formatters/setup",
3495
+ name: "isentinel/formatters/setup",
3506
3496
  plugins: {
3507
- format: pluginFormat
3497
+ format: pluginPrettier
3508
3498
  }
3509
3499
  }
3510
3500
  ];
@@ -3513,48 +3503,45 @@ async function formatters(options = {}, stylistic2 = {}, markdownEnabled = true)
3513
3503
  {
3514
3504
  files: [GLOB_CSS, GLOB_POSTCSS],
3515
3505
  languageOptions: {
3516
- parser: pluginFormat.parserPlain
3506
+ parser: parserPlain
3517
3507
  },
3518
- name: "style/formatter/css",
3508
+ name: "isentinel/formatter/css",
3519
3509
  rules: {
3520
3510
  "format/prettier": [
3521
3511
  "error",
3522
- {
3523
- ...prettierOptions,
3512
+ mergePrettierOptions(prettierOptions, {
3524
3513
  parser: "css"
3525
- }
3514
+ })
3526
3515
  ]
3527
3516
  }
3528
3517
  },
3529
3518
  {
3530
3519
  files: [GLOB_SCSS],
3531
3520
  languageOptions: {
3532
- parser: pluginFormat.parserPlain
3521
+ parser: parserPlain
3533
3522
  },
3534
- name: "style/formatter/scss",
3523
+ name: "isentinel/formatter/scss",
3535
3524
  rules: {
3536
3525
  "format/prettier": [
3537
3526
  "error",
3538
- {
3539
- ...prettierOptions,
3527
+ mergePrettierOptions(prettierOptions, {
3540
3528
  parser: "scss"
3541
- }
3529
+ })
3542
3530
  ]
3543
3531
  }
3544
3532
  },
3545
3533
  {
3546
3534
  files: [GLOB_LESS],
3547
3535
  languageOptions: {
3548
- parser: pluginFormat.parserPlain
3536
+ parser: parserPlain
3549
3537
  },
3550
- name: "style/formatter/less",
3538
+ name: "isentinel/formatter/less",
3551
3539
  rules: {
3552
3540
  "format/prettier": [
3553
3541
  "error",
3554
- {
3555
- ...prettierOptions,
3542
+ mergePrettierOptions(prettierOptions, {
3556
3543
  parser: "less"
3557
- }
3544
+ })
3558
3545
  ]
3559
3546
  }
3560
3547
  }
@@ -3564,39 +3551,32 @@ async function formatters(options = {}, stylistic2 = {}, markdownEnabled = true)
3564
3551
  configs.push({
3565
3552
  files: ["**/*.html"],
3566
3553
  languageOptions: {
3567
- parser: pluginFormat.parserPlain
3554
+ parser: parserPlain
3568
3555
  },
3569
- name: "style/formatter/html",
3556
+ name: "isentinel/formatter/html",
3570
3557
  rules: {
3571
3558
  "format/prettier": [
3572
3559
  "error",
3573
- {
3574
- ...prettierOptions,
3560
+ mergePrettierOptions(prettierOptions, {
3575
3561
  parser: "html"
3576
- }
3562
+ })
3577
3563
  ]
3578
3564
  }
3579
3565
  });
3580
3566
  }
3581
3567
  if (formattingOptions.markdown) {
3582
- const formatter = formattingOptions.markdown === true ? "prettier" : formattingOptions.markdown;
3583
3568
  configs.push({
3584
- files: markdownEnabled ? ["**/*.__markdown_content__"] : [GLOB_MARKDOWN],
3585
- languageOptions: {
3586
- parser: pluginFormat.parserPlain
3587
- },
3588
- name: "style/formatter/markdown",
3569
+ files: [GLOB_MARKDOWN],
3570
+ name: "isentinel/formatter/markdown",
3589
3571
  rules: {
3590
- [`format/${formatter}`]: [
3572
+ "format/prettier": [
3591
3573
  "error",
3592
- formatter === "prettier" ? {
3593
- ...prettierOptions,
3574
+ mergePrettierOptions(prettierOptions, {
3594
3575
  embeddedLanguageFormatting: "off",
3595
- parser: "markdown"
3596
- } : {
3597
- ...dprintOptions,
3598
- language: "markdown"
3599
- }
3576
+ parser: "markdown",
3577
+ printWidth: 80,
3578
+ proseWrap: "always"
3579
+ })
3600
3580
  ]
3601
3581
  }
3602
3582
  });
@@ -3605,22 +3585,60 @@ async function formatters(options = {}, stylistic2 = {}, markdownEnabled = true)
3605
3585
  configs.push({
3606
3586
  files: ["**/*.graphql"],
3607
3587
  languageOptions: {
3608
- parser: pluginFormat.parserPlain
3588
+ parser: parserPlain
3609
3589
  },
3610
- name: "style/formatter/graphql",
3590
+ name: "isentinel/formatter/graphql",
3611
3591
  rules: {
3612
3592
  "format/prettier": [
3613
3593
  "error",
3614
- {
3615
- ...prettierOptions,
3594
+ mergePrettierOptions(prettierOptions, {
3616
3595
  parser: "graphql"
3617
- }
3596
+ })
3618
3597
  ]
3619
3598
  }
3620
3599
  });
3621
3600
  }
3622
3601
  return configs;
3623
3602
  }
3603
+ function mergePrettierOptions(options, overrides = {}) {
3604
+ return {
3605
+ ...options,
3606
+ ...overrides,
3607
+ plugins: [...overrides.plugins || [], ...options.plugins || []]
3608
+ };
3609
+ }
3610
+ var parserMd = {
3611
+ meta: {
3612
+ name: "parser-md"
3613
+ },
3614
+ parseForESLint: (code) => {
3615
+ console.log("parseForESLint", code);
3616
+ return {
3617
+ // ast: espree.parse(code, options),
3618
+ ast: {
3619
+ // ast is JS ast. We don't have JS, so this AST is for empty JS file
3620
+ body: [],
3621
+ comments: [],
3622
+ end: 0,
3623
+ loc: { end: { column: 0, line: 1 }, start: { column: 0, line: 1 } },
3624
+ mdCode: code,
3625
+ range: [0, 0],
3626
+ start: 0,
3627
+ tokens: [],
3628
+ // Used only by eslint-plugin-markdown-language
3629
+ type: "root"
3630
+ },
3631
+ scopeManager: null,
3632
+ services: {
3633
+ foo() {
3634
+ console.log("foo");
3635
+ },
3636
+ isPlain: true
3637
+ },
3638
+ visitorKeys: null
3639
+ };
3640
+ }
3641
+ };
3624
3642
 
3625
3643
  // src/configs/ignores.ts
3626
3644
  init_esm_shims();
@@ -3628,7 +3646,7 @@ async function ignores() {
3628
3646
  return [
3629
3647
  {
3630
3648
  ignores: [...GLOB_EXCLUDE],
3631
- name: "style/ignores"
3649
+ name: "isentinel/ignores"
3632
3650
  }
3633
3651
  ];
3634
3652
  }
@@ -3644,7 +3662,7 @@ async function imports(options = {}) {
3644
3662
  ]);
3645
3663
  return [
3646
3664
  {
3647
- name: "style/imports/rules",
3665
+ name: "isentinel/imports/rules",
3648
3666
  plugins: {
3649
3667
  antfu: pluginAntfu,
3650
3668
  import: pluginImport
@@ -3671,7 +3689,7 @@ async function imports(options = {}) {
3671
3689
  sourceType: "script"
3672
3690
  }
3673
3691
  },
3674
- name: "style/import-sort",
3692
+ name: "isentinel/import-sort",
3675
3693
  plugins: {
3676
3694
  "simple-import-sort": pluginSimpleImportSort
3677
3695
  },
@@ -3688,7 +3706,7 @@ async function imports(options = {}) {
3688
3706
  ...type === "game" ? [
3689
3707
  {
3690
3708
  files: [`src/${GLOB_SRC}`],
3691
- name: "style/imports/game",
3709
+ name: "isentinel/imports/game",
3692
3710
  rules: {
3693
3711
  "no-restricted-syntax": [
3694
3712
  "error",
@@ -3735,10 +3753,10 @@ async function javascript(options = {}) {
3735
3753
  linterOptions: {
3736
3754
  reportUnusedDisableDirectives: true
3737
3755
  },
3738
- name: "style/javascript/setup"
3756
+ name: "isentinel/javascript/setup"
3739
3757
  },
3740
3758
  {
3741
- name: "style/javascript/rules",
3759
+ name: "isentinel/javascript/rules",
3742
3760
  plugins: {
3743
3761
  antfu: pluginAntfu
3744
3762
  },
@@ -3931,7 +3949,7 @@ async function jsdoc(options = {}) {
3931
3949
  return [
3932
3950
  {
3933
3951
  files: [GLOB_SRC],
3934
- name: "style/jsdoc",
3952
+ name: "isentinel/jsdoc",
3935
3953
  plugins: {
3936
3954
  jsdoc: await interopDefault(import("eslint-plugin-jsdoc"))
3937
3955
  },
@@ -3997,7 +4015,7 @@ async function jsonc(options = {}) {
3997
4015
  ]);
3998
4016
  return [
3999
4017
  {
4000
- name: "style/jsonc/setup",
4018
+ name: "isentinel/jsonc/setup",
4001
4019
  plugins: {
4002
4020
  jsonc: pluginJsonc
4003
4021
  }
@@ -4007,7 +4025,7 @@ async function jsonc(options = {}) {
4007
4025
  languageOptions: {
4008
4026
  parser: parserJsonc
4009
4027
  },
4010
- name: "style/jsonc/rules",
4028
+ name: "isentinel/jsonc/rules",
4011
4029
  rules: {
4012
4030
  "jsonc/no-bigint-literals": "error",
4013
4031
  "jsonc/no-binary-expression": "error",
@@ -4074,7 +4092,7 @@ async function markdown(options = {}) {
4074
4092
  const markdownPlugin = await interopDefault(import("@eslint/markdown"));
4075
4093
  return [
4076
4094
  {
4077
- name: "style/markdown/setup",
4095
+ name: "isentinel/markdown/setup",
4078
4096
  plugins: {
4079
4097
  markdown: markdownPlugin
4080
4098
  }
@@ -4082,7 +4100,7 @@ async function markdown(options = {}) {
4082
4100
  {
4083
4101
  files,
4084
4102
  ignores: [GLOB_MARKDOWN_IN_MARKDOWN],
4085
- name: "style/markdown/processor",
4103
+ name: "isentinel/markdown/processor",
4086
4104
  // `eslint-plugin-markdown` only creates virtual files for code blocks,
4087
4105
  // but not the markdown file itself. We use `eslint-merge-processors` to
4088
4106
  // add a pass-through processor for the markdown file itself.
@@ -4092,10 +4110,9 @@ async function markdown(options = {}) {
4092
4110
  files,
4093
4111
  language: "markdown/gfm",
4094
4112
  languageOptions: {
4095
- frontmatter: "yaml",
4096
- parser: parserPlain
4113
+ frontmatter: "yaml"
4097
4114
  },
4098
- name: "style/markdown/parser",
4115
+ name: "isentinel/markdown/parser",
4099
4116
  rules: {
4100
4117
  // Recommended rules - enabled for both game and package
4101
4118
  "markdown/fenced-code-language": "error",
@@ -4157,7 +4174,7 @@ async function markdown(options = {}) {
4157
4174
  }
4158
4175
  }
4159
4176
  },
4160
- name: "style/markdown/disables",
4177
+ name: "isentinel/markdown/disables",
4161
4178
  rules: {
4162
4179
  "antfu/no-top-level-await": "off",
4163
4180
  "import/newline-after-import": "off",
@@ -4206,7 +4223,7 @@ async function packageJson(options = {}) {
4206
4223
  languageOptions: {
4207
4224
  parser: jsoncEslintParser
4208
4225
  },
4209
- name: "style/package-json",
4226
+ name: "isentinel/package-json",
4210
4227
  plugins: {
4211
4228
  "package-json": pluginPackageJson
4212
4229
  },
@@ -4281,7 +4298,7 @@ async function perfectionist(config) {
4281
4298
  return [
4282
4299
  {
4283
4300
  files: [GLOB_SRC],
4284
- name: "style/perfectionist",
4301
+ name: "isentinel/perfectionist",
4285
4302
  plugins: {
4286
4303
  perfectionist: pluginPerfectionist
4287
4304
  },
@@ -4387,7 +4404,7 @@ async function pnpm() {
4387
4404
  languageOptions: {
4388
4405
  parser: jsoncParser
4389
4406
  },
4390
- name: "style/pnpm/package-json",
4407
+ name: "isentinel/pnpm/package-json",
4391
4408
  plugins: {
4392
4409
  pnpm: pluginPnpm
4393
4410
  },
@@ -4407,7 +4424,7 @@ async function pnpm() {
4407
4424
  languageOptions: {
4408
4425
  parser: yamlParser
4409
4426
  },
4410
- name: "style/pnpm/pnpm-workspace-yaml",
4427
+ name: "isentinel/pnpm/pnpm-workspace-yaml",
4411
4428
  plugins: {
4412
4429
  pnpm: pluginPnpm
4413
4430
  },
@@ -4441,7 +4458,7 @@ async function jsx() {
4441
4458
  }
4442
4459
  }
4443
4460
  },
4444
- name: "style/jsx/setup"
4461
+ name: "isentinel/jsx/setup"
4445
4462
  }
4446
4463
  ];
4447
4464
  }
@@ -4452,7 +4469,12 @@ import { createRequire } from "module";
4452
4469
  import { pathToFileURL } from "url";
4453
4470
  var require2 = createRequire(import.meta.url);
4454
4471
  async function spelling(options = {}) {
4455
- const { componentExts: componentExtensions = [], language = "en-US" } = options;
4472
+ const {
4473
+ componentExts: componentExtensions = [],
4474
+ inEditor = true,
4475
+ isInEditor = false,
4476
+ language = "en-US"
4477
+ } = options;
4456
4478
  const files = options.files ?? [
4457
4479
  GLOB_SRC,
4458
4480
  ...componentExtensions.map((extension) => `**/*.${extension}`)
@@ -4464,16 +4486,17 @@ async function spelling(options = {}) {
4464
4486
  const urlRbxtsDictionary = pathToFileURL(rbxtsDictionary);
4465
4487
  const urlRbxts = new URL("dict/rbxts.txt", urlRbxtsDictionary);
4466
4488
  const pluginCspell = await interopDefault(import("@cspell/eslint-plugin"));
4489
+ const enabled = inEditor === false ? isInEditor : true;
4467
4490
  return [
4468
4491
  {
4469
4492
  files,
4470
- name: "style/spelling",
4493
+ name: "isentinel/spelling",
4471
4494
  plugins: {
4472
4495
  "@cspell": pluginCspell
4473
4496
  },
4474
4497
  rules: {
4475
4498
  "@cspell/spellchecker": [
4476
- "warn",
4499
+ enabled ? "warn" : "off",
4477
4500
  {
4478
4501
  autoFix: false,
4479
4502
  checkComments: true,
@@ -4513,14 +4536,14 @@ async function test(options = {}) {
4513
4536
  };
4514
4537
  return [
4515
4538
  {
4516
- name: "style/test/setup",
4539
+ name: "isentinel/test/setup",
4517
4540
  plugins: {
4518
4541
  test: pluginTest
4519
4542
  }
4520
4543
  },
4521
4544
  {
4522
4545
  files,
4523
- name: "style/test/rules",
4546
+ name: "isentinel/test/rules",
4524
4547
  rules: {
4525
4548
  // Jest
4526
4549
  "test/consistent-test-it": "error",
@@ -4595,7 +4618,7 @@ var defaultPluginRenaming = {
4595
4618
  "@typescript-eslint": "ts",
4596
4619
  "yml": "yaml"
4597
4620
  };
4598
- function style(options = {}, ...userConfigs) {
4621
+ function isentinel(options = {}, ...userConfigs) {
4599
4622
  const {
4600
4623
  autoRenamePlugins = true,
4601
4624
  componentExts: componentExtensions = [],
@@ -4708,7 +4731,8 @@ function style(options = {}, ...userConfigs) {
4708
4731
  configs.push(
4709
4732
  spelling({
4710
4733
  ...resolveSubOptions(options, "spellCheck"),
4711
- componentExts: componentExtensions
4734
+ componentExts: componentExtensions,
4735
+ isInEditor
4712
4736
  })
4713
4737
  );
4714
4738
  }
@@ -4755,8 +4779,7 @@ function style(options = {}, ...userConfigs) {
4755
4779
  configs.push(
4756
4780
  formatters(
4757
4781
  options.formatters,
4758
- typeof stylisticOptions === "boolean" ? {} : stylisticOptions,
4759
- options.markdown !== false
4782
+ typeof stylisticOptions === "boolean" ? {} : stylisticOptions
4760
4783
  )
4761
4784
  );
4762
4785
  }
@@ -4816,9 +4839,9 @@ async function prettier(options) {
4816
4839
  GLOB_SRC,
4817
4840
  ...componentExtensions.map((extension) => `**/*.${extension}`)
4818
4841
  ];
4819
- const [configPrettier, pluginFormat] = await Promise.all([
4842
+ const [configPrettier, pluginPrettier] = await Promise.all([
4820
4843
  interopDefault(import("eslint-config-prettier/flat")),
4821
- interopDefault(import("eslint-plugin-format"))
4844
+ interopDefault(import("eslint-plugin-prettier"))
4822
4845
  ]);
4823
4846
  const defaultPrettierOptions = {
4824
4847
  arrowParens: "always",
@@ -4843,9 +4866,9 @@ async function prettier(options) {
4843
4866
  return [
4844
4867
  {
4845
4868
  files,
4846
- name: "style/prettier",
4869
+ name: "isentinel/prettier",
4847
4870
  plugins: {
4848
- format: pluginFormat
4871
+ format: pluginPrettier
4849
4872
  },
4850
4873
  rules: {
4851
4874
  ...rules,
@@ -4869,7 +4892,7 @@ async function promise() {
4869
4892
  const pluginPromise = await interopDefault(import("eslint-plugin-promise"));
4870
4893
  return [
4871
4894
  {
4872
- name: "style/promise",
4895
+ name: "isentinel/promise",
4873
4896
  plugins: {
4874
4897
  promise: pluginPromise
4875
4898
  },
@@ -4946,7 +4969,7 @@ async function react(options = {}) {
4946
4969
  };
4947
4970
  return [
4948
4971
  {
4949
- name: "style/react/setup",
4972
+ name: "isentinel/react/setup",
4950
4973
  plugins: {
4951
4974
  "react": plugins["@eslint-react"],
4952
4975
  "react-hooks-extra": plugins["@eslint-react/hooks-extra"],
@@ -4967,7 +4990,7 @@ async function react(options = {}) {
4967
4990
  tsconfigPath,
4968
4991
  typeAware: isTypeAware
4969
4992
  }),
4970
- name: "style/react/rules",
4993
+ name: "isentinel/react/rules",
4971
4994
  rules: {
4972
4995
  // recommended rules from @eslint-react/hooks-extra
4973
4996
  // react-lua does not seem to fully support the patterns that this rule enforces.
@@ -5072,7 +5095,7 @@ async function react(options = {}) {
5072
5095
  {
5073
5096
  files: filesTypeAware,
5074
5097
  ignores: ignoresTypeAware,
5075
- name: "style/react/type-aware-rules",
5098
+ name: "isentinel/react/type-aware-rules",
5076
5099
  rules: {
5077
5100
  "react/no-leaked-conditional-rendering": "warn",
5078
5101
  "react/prefer-read-only-props": "error"
@@ -5128,7 +5151,7 @@ async function roblox(options = {}, formatLua = true) {
5128
5151
  tsconfigPath,
5129
5152
  typeAware: isTypeAware
5130
5153
  }),
5131
- name: "style/roblox",
5154
+ name: "isentinel/roblox",
5132
5155
  plugins: {
5133
5156
  roblox: pluginRobloxTs,
5134
5157
  sentinel: pluginSentinel
@@ -5190,7 +5213,7 @@ async function shopify(options = {}) {
5190
5213
  const eslintPluginShopify = await interopDefault(import("@shopify/eslint-plugin"));
5191
5214
  return [
5192
5215
  {
5193
- name: "style/shopify",
5216
+ name: "isentinel/shopify",
5194
5217
  plugins: {
5195
5218
  shopify: eslintPluginShopify
5196
5219
  },
@@ -5223,7 +5246,7 @@ async function sonarjs(options = {}) {
5223
5246
  const pluginSonar = await interopDefault(import("eslint-plugin-sonarjs"));
5224
5247
  return [
5225
5248
  {
5226
- name: "style/sonarjs",
5249
+ name: "isentinel/sonarjs",
5227
5250
  plugins: {
5228
5251
  sonar: pluginSonar
5229
5252
  },
@@ -5293,7 +5316,7 @@ function sortTsconfig() {
5293
5316
  return [
5294
5317
  {
5295
5318
  files: ["**/tsconfig.json", "**/tsconfig.*.json"],
5296
- name: "style/sort-tsconfig",
5319
+ name: "isentinel/sort-tsconfig",
5297
5320
  rules: {
5298
5321
  "jsonc/sort-keys": [
5299
5322
  "error",
@@ -5428,7 +5451,7 @@ async function toml(options = {}) {
5428
5451
  ]);
5429
5452
  return [
5430
5453
  {
5431
- name: "style/toml/setup",
5454
+ name: "isentinel/toml/setup",
5432
5455
  plugins: {
5433
5456
  toml: pluginToml
5434
5457
  }
@@ -5438,9 +5461,9 @@ async function toml(options = {}) {
5438
5461
  languageOptions: {
5439
5462
  parser: parserToml
5440
5463
  },
5441
- name: "style/toml/rules",
5464
+ name: "isentinel/toml/rules",
5442
5465
  rules: {
5443
- "style/spaced-comment": "off",
5466
+ "isentinel/spaced-comment": "off",
5444
5467
  "toml/comma-style": "error",
5445
5468
  "toml/keys-order": "error",
5446
5469
  "toml/no-space-dots": "error",
@@ -5587,7 +5610,7 @@ async function typescript(options = {}) {
5587
5610
  {
5588
5611
  // Install the plugins without globs, so they can be configured
5589
5612
  // separately.
5590
- name: "style/typescript/setup",
5613
+ name: "isentinel/typescript/setup",
5591
5614
  plugins: {
5592
5615
  "antfu": pluginAntfu,
5593
5616
  "better-max-params": pluginMaxParameters,
@@ -5599,7 +5622,7 @@ async function typescript(options = {}) {
5599
5622
  ...isTypeAware ? [makeParser(false, files), makeParser(true, filesTypeAware, ignoresTypeAware)] : [makeParser(false, files)],
5600
5623
  {
5601
5624
  files,
5602
- name: "style/typescript/rules",
5625
+ name: "isentinel/typescript/rules",
5603
5626
  rules: {
5604
5627
  ...renameRules(pluginTs.configs["eslint-recommended"].overrides?.[0].rules ?? {}, {
5605
5628
  "@typescript-eslint": "ts"
@@ -5779,7 +5802,7 @@ async function typescript(options = {}) {
5779
5802
  {
5780
5803
  files: filesTypeAware,
5781
5804
  ignores: ignoresTypeAware,
5782
- name: "style/typescript/rules-type-aware",
5805
+ name: "isentinel/typescript/rules-type-aware",
5783
5806
  rules: {
5784
5807
  ...typeAwareRules,
5785
5808
  ...overridesTypeAware
@@ -5796,7 +5819,7 @@ async function unicorn(options = {}) {
5796
5819
  const pluginUnicorn = await interopDefault(import("eslint-plugin-unicorn"));
5797
5820
  return [
5798
5821
  {
5799
- name: "style/unicorn",
5822
+ name: "isentinel/unicorn",
5800
5823
  plugins: {
5801
5824
  unicorn: pluginUnicorn
5802
5825
  },
@@ -5904,7 +5927,7 @@ async function yaml(options = {}) {
5904
5927
  ]);
5905
5928
  return [
5906
5929
  {
5907
- name: "style/yaml:setup",
5930
+ name: "isentinel/yaml/setup",
5908
5931
  plugins: {
5909
5932
  yaml: pluginYaml
5910
5933
  }
@@ -5914,9 +5937,9 @@ async function yaml(options = {}) {
5914
5937
  languageOptions: {
5915
5938
  parser: parserYaml
5916
5939
  },
5917
- name: "style/yaml/rules",
5940
+ name: "isentinel/yaml/rules",
5918
5941
  rules: {
5919
- "style/spaced-comment": "off",
5942
+ "isentinel/spaced-comment": "off",
5920
5943
  "yaml/block-mapping": "error",
5921
5944
  "yaml/block-sequence": "error",
5922
5945
  "yaml/file-extension": "error",
@@ -5988,7 +6011,7 @@ export {
5988
6011
  combine,
5989
6012
  comments,
5990
6013
  createTsParser,
5991
- style as default,
6014
+ isentinel as default,
5992
6015
  defaultPluginRenaming,
5993
6016
  disables,
5994
6017
  ensurePackages,
@@ -6000,11 +6023,13 @@ export {
6000
6023
  interopDefault,
6001
6024
  isInEditorEnvironment,
6002
6025
  isInGitHooksOrLintStaged,
6026
+ isentinel,
6003
6027
  javascript,
6004
6028
  jsdoc,
6005
6029
  jsonc,
6006
6030
  markdown,
6007
6031
  packageJson,
6032
+ parserMd,
6008
6033
  parserPlain,
6009
6034
  perfectionist,
6010
6035
  pnpm,
@@ -6019,7 +6044,6 @@ export {
6019
6044
  sonarjs,
6020
6045
  sortTsconfig,
6021
6046
  spelling,
6022
- style,
6023
6047
  stylistic,
6024
6048
  toArray,
6025
6049
  toml,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isentinel/eslint-config",
3
- "version": "1.3.0",
3
+ "version": "2.0.0",
4
4
  "description": "iSentinel's ESLint config",
5
5
  "keywords": [
6
6
  "eslint-config",
@@ -8,10 +8,10 @@
8
8
  "roblox-ts",
9
9
  "rbxts"
10
10
  ],
11
- "homepage": "https://github.com/christopher-buss/roblox-ts-eslint-config",
11
+ "homepage": "https://github.com/christopher-buss/eslint-config",
12
12
  "repository": {
13
13
  "type": "git",
14
- "url": "git+https://github.com/christopher-buss/roblox-ts-eslint-config.git"
14
+ "url": "git+https://github.com/christopher-buss/eslint-config.git"
15
15
  },
16
16
  "license": "MIT",
17
17
  "author": "Christopher Buss <christopher.buss@pm.me> (https://github.com/christopher-buss)",
@@ -52,13 +52,13 @@
52
52
  "eslint-config-flat-gitignore": "2.1.0",
53
53
  "eslint-config-prettier": "10.1.8",
54
54
  "eslint-flat-config-utils": "2.1.1",
55
+ "eslint-import-resolver-node": "0.3.9",
55
56
  "eslint-merge-processors": "2.0.0",
56
57
  "eslint-plugin-antfu": "3.1.1",
57
58
  "eslint-plugin-arrow-return-style": "1.3.1",
58
59
  "eslint-plugin-better-max-params": "0.0.1",
59
60
  "eslint-plugin-comment-length": "2.2.2",
60
61
  "eslint-plugin-de-morgan": "1.3.1",
61
- "eslint-plugin-format": "1.0.1",
62
62
  "eslint-plugin-format-lua": "1.0.1-beta.2",
63
63
  "eslint-plugin-import-lite": "0.3.0",
64
64
  "eslint-plugin-jsdoc": "52.0.2",
@@ -67,6 +67,7 @@
67
67
  "eslint-plugin-package-json": "0.48.0",
68
68
  "eslint-plugin-perfectionist": "4.15.0",
69
69
  "eslint-plugin-pnpm": "1.1.0",
70
+ "eslint-plugin-prettier": "5.5.3",
70
71
  "eslint-plugin-promise": "7.2.1",
71
72
  "eslint-plugin-roblox-ts": "1.0.0",
72
73
  "eslint-plugin-sentinel": "0.1.1",
@@ -110,12 +111,12 @@
110
111
  "simple-git-hooks": "2.13.1",
111
112
  "tsup": "8.5.0",
112
113
  "typescript": "5.8.3",
113
- "@isentinel/eslint-config": "1.3.0"
114
+ "@isentinel/eslint-config": "2.0.0"
114
115
  },
115
116
  "peerDependencies": {
116
117
  "@eslint-react/eslint-plugin": "^1.45.0",
117
118
  "eslint": "^9.10.0",
118
- "eslint-plugin-jest": "^28.9.0",
119
+ "eslint-plugin-jest": "^28.9.0 || ^29.0.0",
119
120
  "eslint-plugin-react-roblox-hooks": "^5.1.0-rbx.1"
120
121
  },
121
122
  "peerDependenciesMeta": {