diff --git a/fixtures/input/javascript.js b/fixtures/input/javascript.js
index 9482cf2421..ceccfb1ce5 100644
--- a/fixtures/input/javascript.js
+++ b/fixtures/input/javascript.js
@@ -7,13 +7,13 @@ var log = console.log
class Person {
constructor(name, age) {
this.name = name;
- this.age = age;
+ this.age = age;
}
- // Define a method within the class
- sayHello() {
- log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
- }
+// Define a method within the class
+sayHello() {
+ log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
+}
}
// Create an array of objects
diff --git a/fixtures/input/vue.vue b/fixtures/input/vue.vue
index 14c5b0bb20..635aa784dc 100644
--- a/fixtures/input/vue.vue
+++ b/fixtures/input/vue.vue
@@ -9,10 +9,10 @@
+
+
+
+
{{ greeting }}
+
+ Click me!
+
+
Counter: {{ counter }}
+
+
diff --git a/fixtures/output/no-style/vue.vue b/fixtures/output/no-style/vue.vue
new file mode 100644
index 0000000000..532a5cf991
--- /dev/null
+++ b/fixtures/output/no-style/vue.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+ {{ greeting }}
+
+
+ Click me!
+
+
Counter: {{ counter }}
+
+
diff --git a/src/configs/imports.ts b/src/configs/imports.ts
index a78d48ec0b..81820279dc 100644
--- a/src/configs/imports.ts
+++ b/src/configs/imports.ts
@@ -1,7 +1,12 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginImport } from '../plugins'
+import type { OptionsStylistic } from '../types'
+
+export function imports(options: OptionsStylistic = {}): FlatESLintConfigItem[] {
+ const {
+ stylistic = true,
+ } = options
-export function imports(): FlatESLintConfigItem[] {
return [
{
plugins: {
@@ -10,13 +15,18 @@ export function imports(): FlatESLintConfigItem[] {
rules: {
'import/export': 'error',
'import/first': 'error',
- 'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
'import/no-duplicates': 'error',
'import/no-mutable-exports': 'error',
'import/no-named-default': 'error',
'import/no-self-import': 'error',
'import/no-webpack-loader-syntax': 'error',
'import/order': 'error',
+
+ ...stylistic
+ ? {
+ 'import/newline-after-import': ['error', { considerComments: true, count: 1 }],
+ }
+ : {},
},
},
]
diff --git a/src/configs/jsdoc.ts b/src/configs/jsdoc.ts
index 6690f051d0..4d690cc970 100644
--- a/src/configs/jsdoc.ts
+++ b/src/configs/jsdoc.ts
@@ -1,7 +1,12 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { pluginJsdoc } from '../plugins'
+import type { OptionsStylistic } from '../types'
+
+export function jsdoc(options: OptionsStylistic = {}): FlatESLintConfigItem[] {
+ const {
+ stylistic = true,
+ } = options
-export function jsdoc(): FlatESLintConfigItem[] {
return [
{
plugins: {
@@ -9,13 +14,11 @@ export function jsdoc(): FlatESLintConfigItem[] {
},
rules: {
'jsdoc/check-access': 'warn',
- 'jsdoc/check-alignment': 'warn',
'jsdoc/check-param-names': 'warn',
'jsdoc/check-property-names': 'warn',
'jsdoc/check-types': 'warn',
'jsdoc/empty-tags': 'warn',
'jsdoc/implements-on-classes': 'warn',
- 'jsdoc/multiline-blocks': 'warn',
'jsdoc/no-defaults': 'warn',
'jsdoc/no-multi-asterisks': 'warn',
'jsdoc/require-param-name': 'warn',
@@ -26,6 +29,13 @@ export function jsdoc(): FlatESLintConfigItem[] {
'jsdoc/require-returns-description': 'warn',
'jsdoc/require-yields-check': 'warn',
'jsdoc/valid-types': 'warn',
+
+ ...stylistic
+ ? {
+ 'jsdoc/check-alignment': 'warn',
+ 'jsdoc/multiline-blocks': 'warn',
+ }
+ : {},
},
},
]
diff --git a/src/configs/jsonc.ts b/src/configs/jsonc.ts
index 3437ab4da8..ae204c45b5 100644
--- a/src/configs/jsonc.ts
+++ b/src/configs/jsonc.ts
@@ -1,8 +1,14 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'
import { parserJsonc, pluginJsonc } from '../plugins'
+import type { OptionsOverrides, OptionsStylistic } from '../types'
+
+export function jsonc(options: OptionsStylistic & OptionsOverrides = {}): FlatESLintConfigItem[] {
+ const {
+ stylistic = true,
+ overrides = {},
+ } = options
-export function jsonc(): FlatESLintConfigItem[] {
return [
{
plugins: {
@@ -15,11 +21,7 @@ export function jsonc(): FlatESLintConfigItem[] {
parser: parserJsonc,
},
rules: {
- 'jsonc/array-bracket-spacing': ['error', 'never'],
- 'jsonc/comma-dangle': ['error', 'never'],
- 'jsonc/comma-style': ['error', 'last'],
- 'jsonc/indent': ['error', 2],
- 'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
+
'jsonc/no-bigint-literals': 'error',
'jsonc/no-binary-expression': 'error',
'jsonc/no-binary-numeric-literals': 'error',
@@ -43,14 +45,26 @@ export function jsonc(): FlatESLintConfigItem[] {
'jsonc/no-undefined-value': 'error',
'jsonc/no-unicode-codepoint-escapes': 'error',
'jsonc/no-useless-escape': 'error',
- 'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
- 'jsonc/object-curly-spacing': ['error', 'always'],
- 'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
- 'jsonc/quote-props': 'error',
- 'jsonc/quotes': 'error',
'jsonc/space-unary-ops': 'error',
'jsonc/valid-json-number': 'error',
'jsonc/vue-custom-block/no-parsing-error': 'error',
+
+ ...stylistic
+ ? {
+ 'jsonc/array-bracket-spacing': ['error', 'never'],
+ 'jsonc/comma-dangle': ['error', 'never'],
+ 'jsonc/comma-style': ['error', 'last'],
+ 'jsonc/indent': ['error', 2],
+ 'jsonc/key-spacing': ['error', { afterColon: true, beforeColon: false }],
+ 'jsonc/object-curly-newline': ['error', { consistent: true, multiline: true }],
+ 'jsonc/object-curly-spacing': ['error', 'always'],
+ 'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
+ 'jsonc/quote-props': 'error',
+ 'jsonc/quotes': 'error',
+ }
+ : {},
+
+ ...overrides,
},
},
]
diff --git a/src/configs/vue.ts b/src/configs/vue.ts
index 2d85876de2..461647a84c 100644
--- a/src/configs/vue.ts
+++ b/src/configs/vue.ts
@@ -2,14 +2,16 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
import { GLOB_VUE } from '../globs'
import { parserTs, parserVue, pluginVue } from '../plugins'
import { OFF } from '../flags'
-import type { OptionsHasTypeScript, OptionsOverrides } from '../types'
+import type { OptionsHasTypeScript, OptionsOverrides, OptionsStylistic } from '../types'
export function vue(
- options: OptionsHasTypeScript & OptionsOverrides = {},
+ options: OptionsHasTypeScript & OptionsOverrides & OptionsStylistic = {},
): FlatESLintConfigItem[] {
const {
overrides = {},
+ stylistic = true,
} = options
+
return [
{
plugins: {
@@ -38,21 +40,9 @@ export function vue(
'node/prefer-global/process': OFF,
- 'vue/array-bracket-spacing': ['error', 'never'],
- 'vue/arrow-spacing': ['error', { after: true, before: true }],
'vue/block-order': ['error', {
order: ['script', 'template', 'style'],
}],
- 'vue/block-spacing': ['error', 'always'],
- 'vue/block-tag-newline': ['error', {
- multiline: 'always',
- singleline: 'always',
- }],
- 'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
- 'vue/comma-dangle': ['error', 'always-multiline'],
- 'vue/comma-spacing': ['error', { after: true, before: false }],
-
- 'vue/comma-style': ['error', 'last'],
'vue/component-name-in-template-casing': ['error', 'PascalCase'],
'vue/component-options-name-casing': ['error', 'PascalCase'],
'vue/custom-event-name-casing': ['error', 'camelCase'],
@@ -62,11 +52,6 @@ export function vue(
'vue/dot-location': ['error', 'property'],
'vue/dot-notation': ['error', { allowKeywords: true }],
'vue/eqeqeq': ['error', 'smart'],
- 'vue/html-comment-content-spacing': ['error', 'always', {
- exceptions: ['-'],
- }],
- 'vue/key-spacing': ['error', { afterColon: true, beforeColon: false }],
- 'vue/keyword-spacing': ['error', { after: true, before: true }],
'vue/max-attributes-per-line': OFF,
'vue/multi-word-component-names': OFF,
'vue/no-dupe-keys': OFF,
@@ -86,9 +71,6 @@ export function vue(
'vue/no-unused-refs': 'error',
'vue/no-useless-v-bind': 'error',
'vue/no-v-html': OFF,
- 'vue/object-curly-newline': OFF,
- 'vue/object-curly-spacing': ['error', 'always'],
- 'vue/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
'vue/object-shorthand': [
'error',
'always',
@@ -97,17 +79,41 @@ export function vue(
ignoreConstructors: false,
},
],
- 'vue/operator-linebreak': ['error', 'before'],
- 'vue/padding-line-between-blocks': ['error', 'always'],
'vue/prefer-separate-static-class': 'error',
'vue/prefer-template': 'error',
- 'vue/quote-props': ['error', 'consistent-as-needed'],
'vue/require-default-prop': OFF,
'vue/require-prop-types': OFF,
- 'vue/space-in-parens': ['error', 'never'],
'vue/space-infix-ops': 'error',
'vue/space-unary-ops': ['error', { nonwords: false, words: true }],
- 'vue/template-curly-spacing': 'error',
+
+ ...stylistic
+ ? {
+ 'vue/array-bracket-spacing': ['error', 'never'],
+ 'vue/arrow-spacing': ['error', { after: true, before: true }],
+ 'vue/block-spacing': ['error', 'always'],
+ 'vue/block-tag-newline': ['error', {
+ multiline: 'always',
+ singleline: 'always',
+ }],
+ 'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
+ 'vue/comma-dangle': ['error', 'always-multiline'],
+ 'vue/comma-spacing': ['error', { after: true, before: false }],
+ 'vue/comma-style': ['error', 'last'],
+ 'vue/html-comment-content-spacing': ['error', 'always', {
+ exceptions: ['-'],
+ }],
+ 'vue/key-spacing': ['error', { afterColon: true, beforeColon: false }],
+ 'vue/keyword-spacing': ['error', { after: true, before: true }],
+ 'vue/object-curly-newline': OFF,
+ 'vue/object-curly-spacing': ['error', 'always'],
+ 'vue/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
+ 'vue/operator-linebreak': ['error', 'before'],
+ 'vue/padding-line-between-blocks': ['error', 'always'],
+ 'vue/quote-props': ['error', 'consistent-as-needed'],
+ 'vue/space-in-parens': ['error', 'never'],
+ 'vue/template-curly-spacing': 'error',
+ }
+ : {},
...overrides,
},
diff --git a/src/configs/yaml.ts b/src/configs/yaml.ts
index 57ff544443..231b5c6710 100644
--- a/src/configs/yaml.ts
+++ b/src/configs/yaml.ts
@@ -2,11 +2,14 @@ import type { FlatESLintConfigItem } from 'eslint-define-config'
import { GLOB_YAML } from '../globs'
import { parserYaml, pluginYaml } from '../plugins'
import { OFF } from '../flags'
-import type { OptionsOverrides } from '../types'
+import type { OptionsOverrides, OptionsStylistic } from '../types'
-export function yaml(options: OptionsOverrides = {}): FlatESLintConfigItem[] {
+export function yaml(
+ options: OptionsOverrides & OptionsStylistic = {},
+): FlatESLintConfigItem[] {
const {
overrides = {},
+ stylistic = true,
} = options
return [
@@ -24,26 +27,30 @@ export function yaml(options: OptionsOverrides = {}): FlatESLintConfigItem[] {
'style/spaced-comment': OFF,
'yaml/block-mapping': 'error',
- 'yaml/block-mapping-question-indicator-newline': 'error',
'yaml/block-sequence': 'error',
- 'yaml/block-sequence-hyphen-indicator-newline': 'error',
- 'yaml/flow-mapping-curly-newline': 'error',
- 'yaml/flow-mapping-curly-spacing': 'error',
- 'yaml/flow-sequence-bracket-newline': 'error',
- 'yaml/flow-sequence-bracket-spacing': 'error',
- 'yaml/indent': ['error', 2],
- 'yaml/key-spacing': 'error',
'yaml/no-empty-key': 'error',
'yaml/no-empty-sequence-entry': 'error',
'yaml/no-irregular-whitespace': 'error',
- 'yaml/no-tab-indent': 'error',
'yaml/plain-scalar': 'error',
- 'yaml/quotes': ['error', { avoidEscape: false, prefer: 'single' }],
- 'yaml/spaced-comment': 'error',
-
'yaml/vue-custom-block/no-parsing-error': 'error',
+ ...stylistic
+ ? {
+ 'yaml/block-mapping-question-indicator-newline': 'error',
+ 'yaml/block-sequence-hyphen-indicator-newline': 'error',
+ 'yaml/flow-mapping-curly-newline': 'error',
+ 'yaml/flow-mapping-curly-spacing': 'error',
+ 'yaml/flow-sequence-bracket-newline': 'error',
+ 'yaml/flow-sequence-bracket-spacing': 'error',
+ 'yaml/indent': ['error', 2],
+ 'yaml/key-spacing': 'error',
+ 'yaml/no-tab-indent': 'error',
+ 'yaml/quotes': ['error', { avoidEscape: false, prefer: 'single' }],
+ 'yaml/spaced-comment': 'error',
+ }
+ : {},
+
...overrides,
},
},
diff --git a/src/factory.ts b/src/factory.ts
index bd410cfd7e..ca015f151b 100644
--- a/src/factory.ts
+++ b/src/factory.ts
@@ -77,8 +77,12 @@ export function antfu(options: OptionsConfig & FlatESLintConfigItem = {}, ...use
}),
comments(),
node(),
- jsdoc(),
- imports(),
+ jsdoc({
+ stylistic: enableStylistic,
+ }),
+ imports({
+ stylistic: enableStylistic,
+ }),
unicorn(),
)
@@ -116,13 +120,17 @@ export function antfu(options: OptionsConfig & FlatESLintConfigItem = {}, ...use
if (enableVue) {
configs.push(vue({
overrides: overrides.vue,
+ stylistic: enableStylistic,
typescript: !!enableTypeScript,
}))
}
if (options.jsonc ?? true) {
configs.push(
- jsonc(),
+ jsonc({
+ overrides: overrides.jsonc,
+ stylistic: enableStylistic,
+ }),
sortPackageJson(),
sortTsconfig(),
)
@@ -131,6 +139,7 @@ export function antfu(options: OptionsConfig & FlatESLintConfigItem = {}, ...use
if (options.yaml ?? true) {
configs.push(yaml({
overrides: overrides.yaml,
+ stylistic: enableStylistic,
}))
}
diff --git a/src/types.ts b/src/types.ts
index 2dda1bbb6a..7c9ce949ba 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -20,6 +20,10 @@ export interface OptionsHasTypeScript {
typescript?: boolean
}
+export interface OptionsStylistic {
+ stylistic?: boolean
+}
+
export interface OptionsOverrides {
overrides?: FlatESLintConfigItem['rules']
}
diff --git a/test/fixtures.test.ts b/test/fixtures.test.ts
index a3779091be..ad6a8d01e1 100644
--- a/test/fixtures.test.ts
+++ b/test/fixtures.test.ts
@@ -21,6 +21,11 @@ runWithConfig('all', {
typescript: true,
vue: true,
})
+runWithConfig('no-style', {
+ typescript: true,
+ vue: true,
+ stylistic: false,
+})
// https://github.com/antfu/eslint-config/issues/255
runWithConfig(