-
-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate to flat config #86
Conversation
Should we expose an array here too? So user can export {default} from 'eslint-config-xo'; and import eslintConfigXo from 'eslint-config-xo';
export default [
- eslintConfigXo,
+ ...eslintConfigXo,
]; |
Do you need separate packages anymore? My understanding is that configurations are now configurable, so you can just expose a function and pass Perhaps you can work on a baseline |
But eslint-config-xo-typescript need extra packages installed/imported, it's not good if user only uses js syntax. |
Looks like shared config can be an object, maybe arrays will be flattened too, if it's true, we don't need care, I'll test. |
That hasn't been a limiting factor for XO itself, which includes TypeScript and Prettier whether you use them or not. In an ideal world, eslint-config-xo contains all the logic XO needs, and XO becomes a wrapper around eslint and eslint-config-xo without a lot of glue. This way users can choose |
Waiting for answers eslint/eslint#18563 |
I don't want to merge the TS one into this one yet. The "space" config should be merged into this one though. It was only a separate package because of ESLint limitations. |
Let's export an array? Check discussion in eslint/eslint#18563 |
👍 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would go with generating the config through a function instead of through static objects (see review comment) as one can now be sure that the config will be used from a javascript file and hence it can be better to expose a typed factory function rather than relying on setting up files for all the possible combinations of options.
I would also consider eventually upstreaming eslint-config-xo
into xo
and let it be run through either xo
or be extended and run through eslint
.
The eslint-config-
prefix is no longer needed to signify that an ESLint config can be returned.
Add some ESLint config to your `eslint.config.js`: | ||
|
||
```js | ||
import eslintConfigXo from 'eslint-config-xo'; | ||
|
||
export default [ | ||
...eslintConfigXo, | ||
]; | ||
``` | ||
|
||
This package also exposes [`eslint-config-xo/browser`](browser.js) if you're in the browser: | ||
|
||
```js | ||
import eslintConfigXoBrowser from 'eslint-config-xo/browser'; | ||
|
||
export default [ | ||
...eslintConfigXoBrowser, | ||
]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I opted for a neostandard({ semi: true })
style to construct the config in neostandard
. Have you considered doing that instead of /browser
? Having something like export default xo({ browser: true })
?
That way you can have space
, browser
etc exposed without having to have files for the combinations as well, like space/browser
export default [ | ||
{ | ||
...config, | ||
rules: { | ||
...config.rules, | ||
indent: [ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the benefit of this over having the space config be its own config? The latter is what I opted for in neostandard
export default [ | |
{ | |
...config, | |
rules: { | |
...config.rules, | |
indent: [ | |
export default [ | |
config, | |
{ | |
rules: { | |
indent: [ |
I would do something like:
import base from './configs/base.js';
import browser from './configs/browser.js';
import space from './configs/space.js';
export default [
base,
browser,
space,
];
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A benefit of having them as separate (+ including names for each one of them) is that its very clear which config that leads to which config. See example here from the config inspector generated for neostandard: https://neostandard.github.io/neostandard/configs
|
Sorry that I didn't get time to check feedbacks. |
Hey, do you think it makes sense to add a legacy support like they did over here in vitest: https://github.com/vitest-dev/eslint-plugin-vitest/pull/434/files |
@Primajin Open a new issue for that discussion. Personally I would say: No, it does not make sense :) |
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
##### [v0.46.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.46.0) ##### New rules - [`@stylistic/indent-binary-ops`](https://eslint.style/rules/plus/indent-binary-ops) [`d91defd`](xojs/eslint-config-xo@d91defd) - [`@stylistic/function-paren-newline`](https://eslint.style/rules/js/function-paren-newline) [`fb5e204`](xojs/eslint-config-xo@fb5e204) - [`@stylistic/block-spacing`](https://eslint.style/rules/js/block-spacing) [`cb6b443`](xojs/eslint-config-xo@cb6b443) - [`@stylistic/multiline-ternary`](https://eslint.style/rules/js/multiline-ternary) [`3dea281`](xojs/eslint-config-xo@3dea281) ##### Breaking - Require Node.js 18.18 - Migrate to flat config and require ESLint 9 ([#86](xojs/eslint-config-xo#86)) [`ec210f2`](xojs/eslint-config-xo@ec210f2) - Migrate config: https://eslint.org/docs/latest/use/configure/migration-guide ##### Improvements - Migrate deprecated rules to [`@stylistic`](https://eslint.style) [`0f81063`](xojs/eslint-config-xo@0f81063) - Enable permissive `max-len` and `max-lines` as warning ([#84](xojs/eslint-config-xo#84)) [`e669d26`](xojs/eslint-config-xo@e669d26) - Revert "Add option to `no-extra-boolean-cast`" ([#87](xojs/eslint-config-xo#87)) [`f010b63`](xojs/eslint-config-xo@f010b63) - Add option to `no-extra-boolean-cast` [`a6dc171`](xojs/eslint-config-xo@a6dc171) ##### [v0.45.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.45.0) - Allow class fields with no blank lines between ([#85](xojs/eslint-config-xo#85)) [`6f2ff13`](xojs/eslint-config-xo@6f2ff13) ##### [v0.44.0](https://github.com/xojs/eslint-config-xo/releases/tag/v0.44.0) ##### Breaking - Require Node.js 18 [`f2060de`](xojs/eslint-config-xo@f2060de) ##### New rules - [`logical-assignment-operators`](https://eslint.org/docs/latest/rules/logical-assignment-operators) [`27049c1`](xojs/eslint-config-xo@27049c1) - [`prefer-object-has-own`](https://eslint.org/docs/latest/rules/prefer-object-has-own) [`288a3ca`](xojs/eslint-config-xo@288a3ca) - [`object-curly-newline`](https://eslint.org/docs/latest/rules/object-curly-newline) ([#83](xojs/eslint-config-xo#83)) [`3a5448b`](xojs/eslint-config-xo@3a5448b) ##### Improvements - Ban `atob` and `btoa` [`dfa969c`](xojs/eslint-config-xo@dfa969c) - Replace deprecated `no-new-object` rule [`7f8f92e`](xojs/eslint-config-xo@7f8f92e) - `no-unused-vars`: Allow ignoring variables by prefixing with underscore [`b31ab8a`](xojs/eslint-config-xo@b31ab8a)
No description provided.