Skip to content

Configs Reference

License NPM Version Open Issues

⚙️ Shared project configuration files for linting, formatting, documentation and so on.

Configurations

Usage

All this configurations are setup automatically by @lou.codes/create-package when creating a new package.

For manual setup of each file, use the examples below:

.changeset/config.json
1
{
2
"$schema": "https://raw.githubusercontent.com/changesets/changesets/main/packages/config/schema.json",
3
"changelog": "@lou.codes/configs/changelog.cjs",
4
"commit": false,
5
"access": "restricted",
6
"baseBranch": "main",
7
"updateInternalDependencies": "patch"
8
}
eslint.config.js
1
export { default } from "@lou.codes/configs/eslint.config.js";
prettier.config.js
1
export { default } from "@lou.codes/configs/prettier.config.js";
stylelint.config.js
1
export { default } from "@lou.codes/configs/stylelint.config.js";
tsconfig.json
1
{
2
"extends": "@lou.codes/configs/typescript.config.json"
3
}
typedoc.json
1
{
2
"$schema": "https://typedoc.org/schema.json",
3
"cname": "PUBLIC DOMAIN",
4
"entryPoints": ["./lib"],
5
"extends": ["@lou.codes/configs/typedoc.config.json"],
6
"name": "PACKAGE NAME"
7
}
  • Changelog: List of changes between versions.

Variables

eslintConfig

Const eslintConfig: readonly [{ files: ["**/*.cjs", "**/*.cts", "**/*.js", "**/*.jsx", "**/*.mjs", "**/*.mts", "**/*.ts", "**/*.tsx"] ; rules: { array-callback-return: 2 ; arrow-body-style: 2 ; arrow-parens: [2, "as-needed"] ; capitalized-comments: [2, "always", { ignoreConsecutiveComments: true }] ; class-methods-use-this: 2 ; complexity: [2, 20] ; curly: 2 ; default-case: 2 ; default-case-last: 2 ; default-param-last: 2 ; eqeqeq: 2 ; grouped-accessor-pairs: 2 ; guard-for-in: 2 ; id-denylist: [2, "auth", "btn", "cb", "char", "desc", "dest", "dir", "e", "elem", "er", "err", "ev", "evt", "fn", "i", "img", "obj", "opt", "opts", "param", "params", "prev", "prop", "props", "req", "res", "src", "str", "temp", "tmp", "val"] ; id-length: [2, { exceptions: readonly ["_", "x", "y", "z"] }] ; max-classes-per-file: [2, 1] ; max-lines: [2, { max: 300 ; skipBlankLines: true ; skipComments: true }] ; max-params: [2, 3] ; new-parens: 2 ; no-alert: 2 ; no-bitwise: 1 ; no-caller: 2 ; no-console: 1 ; no-constructor-return: 2 ; no-eval: 2 ; no-extend-native: 2 ; no-extra-bind: 2 ; no-floating-decimal: 2 ; no-implicit-coercion: 2 ; no-import-assign: 2 ; no-lone-blocks: 2 ; no-multi-spaces: 2 ; no-multi-str: 2 ; no-multiple-empty-lines: [2, { max: 1 }] ; no-negated-condition: 2 ; no-new-func: 2 ; no-new-wrappers: 2 ; no-param-reassign: 2 ; no-plusplus: 2 ; no-proto: 2 ; no-restricted-imports: [2, { patterns: readonly [{ group: readonly […, …, …, …, …, …, …] ; message: "Just use vanilla JavaScript." }, { group: readonly […, …] ; message: "Use a modern dependency instead." }] }] ; no-return-await: 2 ; no-self-compare: 2 ; no-template-curly-in-string: 2 ; no-unmodified-loop-condition: 2 ; no-unneeded-ternary: 2 ; no-unreachable-loop: 2 ; no-useless-call: 2 ; no-useless-concat: 2 ; no-useless-return: 2 ; no-var: 2 ; object-shorthand: 2 ; one-var: [2, "never"] ; padding-line-between-statements: [2, { blankLine: "always" ; next: "return" ; prev: "*" }, { blankLine: "always" ; next: "*" ; prev: readonly ["import", "const", "let", "var"] }, { blankLine: "any" ; next: readonly ["const", "let", "var"] ; prev: readonly ["const", "let", "var"] }, { blankLine: "any" ; next: "import" ; prev: "import" }, { blankLine: "always" ; next: "export" ; prev: "*" }, { blankLine: "any" ; next: "export" ; prev: "export" }] ; prefer-arrow-callback: 2 ; prefer-const: 2 ; prefer-exponentiation-operator: 1 ; prefer-named-capture-group: 1 ; prefer-object-spread: 1 ; prefer-regex-literals: 2 ; prefer-rest-params: 2 ; prefer-spread: 2 ; prefer-template: 2 ; radix: 2 ; require-unicode-regexp: 2 ; sort-keys: [2, "asc", { natural: true }] ; spaced-comment: 2 ; wrap-iife: [2, "inside"] ; yoda: 2 } }, { languageOptions: { parser: Linter.ParserModule ; parserOptions: { ecmaFeatures: { impliedStrict: true ; jsx: true } ; ecmaVersion: "latest" ; project: true ; sourceType: "module" } } ; plugins: { @typescript-eslint: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { @typescript-eslint/adjacent-overload-signatures: 2 ; @typescript-eslint/array-type: [2, { default: "generic" }] ; @typescript-eslint/await-thenable: 2 ; @typescript-eslint/ban-ts-comment: [2, { ts-check: false ; ts-expect-error: "allow-with-description" ; ts-ignore: true ; ts-nocheck: true }] ; @typescript-eslint/ban-tslint-comment: 2 ; @typescript-eslint/ban-types: [2, { types: { Boolean: { fixWith: "boolean" ; message: "Use `boolean` instead." } ; Function: false ; Number: { fixWith: "number" ; message: "Use `number` instead." } ; Object: { fixWith: "object" ; message: "Use `object` instead." } ; String: { fixWith: "string" ; message: "Use `string` instead." } ; Symbol: { fixWith: "symbol" ; message: "Use `symbol` instead." } } }] ; @typescript-eslint/consistent-indexed-object-style: [2, "record"] ; @typescript-eslint/consistent-return: 2 ; @typescript-eslint/consistent-type-assertions: [2, { assertionStyle: "as" ; objectLiteralTypeAssertions: "allow" }] ; @typescript-eslint/consistent-type-definitions: [2, "type"] ; @typescript-eslint/consistent-type-imports: [2, { fixStyle: "inline-type-imports" }] ; @typescript-eslint/dot-notation: 2 ; @typescript-eslint/explicit-function-return-type: 0 ; @typescript-eslint/explicit-member-accessibility: [2, { accessibility: "explicit" ; overrides: { accessors: "explicit" ; constructors: "explicit" } }] ; @typescript-eslint/explicit-module-boundary-types: 0 ; @typescript-eslint/init-declarations: 2 ; @typescript-eslint/member-ordering: 2 ; @typescript-eslint/method-signature-style: [2, "property"] ; @typescript-eslint/naming-convention: [2, { format: null ; leadingUnderscore: "allow" ; selector: "default" ; trailingUnderscore: "forbid" }, { format: readonly ["camelCase", "PascalCase", "UPPER_CASE"] ; selector: readonly ["variable", "enumMember"] }, { format: readonly ["camelCase", "PascalCase"] ; selector: "function" }, { format: readonly ["camelCase"] ; leadingUnderscore: "allow" ; selector: readonly ["autoAccessor", "parameter", "classProperty", "classMethod"] ; trailingUnderscore: "forbid" }, { format: readonly ["PascalCase"] ; leadingUnderscore: "forbid" ; selector: readonly ["class", "enum", "interface", "typeAlias", "typeLike", "typeParameter"] }] ; @typescript-eslint/no-array-constructor: 2 ; @typescript-eslint/no-base-to-string: 2 ; @typescript-eslint/no-dupe-class-members: 0 ; @typescript-eslint/no-duplicate-enum-values: 2 ; @typescript-eslint/no-dynamic-delete: 2 ; @typescript-eslint/no-empty-function: 2 ; @typescript-eslint/no-empty-interface: 2 ; @typescript-eslint/no-explicit-any: 2 ; @typescript-eslint/no-extraneous-class: 2 ; @typescript-eslint/no-floating-promises: 2 ; @typescript-eslint/no-for-in-array: 2 ; @typescript-eslint/no-implied-eval: 2 ; @typescript-eslint/no-inferrable-types: 0 ; @typescript-eslint/no-invalid-this: 2 ; @typescript-eslint/no-invalid-void-type: 2 ; @typescript-eslint/no-loop-func: 2 ; @typescript-eslint/no-loss-of-precision: 2 ; @typescript-eslint/no-meaningless-void-operator: 2 ; @typescript-eslint/no-misused-new: 2 ; @typescript-eslint/no-misused-promises: 2 ; @typescript-eslint/no-mixed-enums: 2 ; @typescript-eslint/no-namespace: 2 ; @typescript-eslint/no-non-null-asserted-nullish-coalescing: 2 ; @typescript-eslint/no-non-null-assertion: 2 ; @typescript-eslint/no-redeclare: 0 ; @typescript-eslint/no-redundant-type-constituents: 2 ; @typescript-eslint/no-require-imports: 2 ; @typescript-eslint/no-shadow: [2, { allow: readonly ["_"] ; hoist: "all" }] ; @typescript-eslint/no-this-alias: 2 ; @typescript-eslint/no-unnecessary-boolean-literal-compare: 2 ; @typescript-eslint/no-unnecessary-condition: 2 ; @typescript-eslint/no-unnecessary-type-arguments: 2 ; @typescript-eslint/no-unnecessary-type-assertion: 2 ; @typescript-eslint/no-unnecessary-type-constraint: 2 ; @typescript-eslint/no-unsafe-argument: 2 ; @typescript-eslint/no-unsafe-assignment: 2 ; @typescript-eslint/no-unsafe-call: 2 ; @typescript-eslint/no-unsafe-enum-comparison: 2 ; @typescript-eslint/no-unsafe-member-access: 2 ; @typescript-eslint/no-unsafe-return: 2 ; @typescript-eslint/no-unused-expressions: 2 ; @typescript-eslint/no-unused-vars: 0 ; @typescript-eslint/no-use-before-define: 2 ; @typescript-eslint/no-useless-constructor: 2 ; @typescript-eslint/no-useless-empty-export: 2 ; @typescript-eslint/no-var-requires: 2 ; @typescript-eslint/only-throw-error: 2 ; @typescript-eslint/prefer-as-const: 2 ; @typescript-eslint/prefer-enum-initializers: 2 ; @typescript-eslint/prefer-for-of: 2 ; @typescript-eslint/prefer-function-type: 2 ; @typescript-eslint/prefer-includes: 2 ; @typescript-eslint/prefer-literal-enum-member: [2, { allowBitwiseExpressions: true }] ; @typescript-eslint/prefer-namespace-keyword: 2 ; @typescript-eslint/prefer-nullish-coalescing: 2 ; @typescript-eslint/prefer-optional-chain: 2 ; @typescript-eslint/prefer-readonly: 2 ; @typescript-eslint/prefer-reduce-type-parameter: 2 ; @typescript-eslint/prefer-string-starts-ends-with: 2 ; @typescript-eslint/prefer-ts-expect-error: 2 ; @typescript-eslint/require-array-sort-compare: 2 ; @typescript-eslint/require-await: 2 ; @typescript-eslint/restrict-plus-operands: 2 ; @typescript-eslint/restrict-template-expressions: [2, { allowNumber: true }] ; @typescript-eslint/strict-boolean-expressions: 2 ; @typescript-eslint/switch-exhaustiveness-check: 2 ; @typescript-eslint/triple-slash-reference: 2 ; @typescript-eslint/unbound-method: 2 ; @typescript-eslint/unified-signatures: 2 ; @typescript-eslint/use-unknown-in-catch-callback-variable: 2 ; camelcase: 0 ; consistent-return: 0 ; dot-notation: 0 ; id-match: 0 ; init-declarations: 0 ; no-extra-boolean-cast: 0 ; no-implied-eval: 0 ; no-loop-func: 0 ; no-redeclare: 0 ; no-shadow: 0 ; no-throw-literal: 0 ; no-undef: 0 ; no-undef-init: 0 ; no-unused-expressions: 0 ; no-use-before-define: 0 ; no-useless-constructor: 0 ; require-await: 0 } }, { files?: (string | string[])[] ; ignores?: string[] ; languageOptions?: { ecmaVersion?: 8 | 3 | 7 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | "latest" ; globals?: ESLint.Globals ; parser?: Linter.FlatConfigParserModule ; parserOptions?: Linter.ParserOptions ; sourceType?: "script" | "module" | "commonjs" } ; linterOptions?: { noInlineConfig?: boolean ; reportUnusedDisableDirectives?: boolean | Linter.Severity | Linter.StringSeverity } ; name?: string ; plugins?: Record<string, ESLint.Plugin> ; processor?: string | Linter.Processor ; rules: { @typescript-eslint/prefer-readonly-parameter-types: 0 ; functional/functional-parameters: [2, { allowArgumentsKeyword: false ; allowRestParameter: true ; enforceParameterCount: false }] ; functional/no-expression-statements: [2, { ignoreCodePattern: readonly ["\\?\\.\\(", "\\s*yield", "\\w+\\s*=\\s*.", "\\s*void"] ; ignoreVoid: true }] ; functional/no-mixed-types: 1 ; functional/no-return-void: [2, { allowNull: false ; allowUndefined: true ; ignoreInferredTypes: true }] ; functional/prefer-immutable-types: [2, { enforcement: "None" ; ignoreInferredTypes: true ; parameters: { enforcement: "ReadonlyShallow" } }] } ; settings?: Record<string, unknown> }, { plugins: { import: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { import/exports-last: 2 ; import/first: 2 ; import/no-absolute-path: 2 ; import/no-cycle: 2 ; import/no-extraneous-dependencies: 2 ; import/no-internal-modules: 0 ; import/no-mutable-exports: 2 ; import/no-named-as-default: 0 ; import/no-useless-path-segments: 2 ; import/no-webpack-loader-syntax: 2 } }, { plugins: { prefer-arrow-functions: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { prefer-arrow-functions/prefer-arrow-functions: [2, { allowNamedFunctions: false ; classPropertiesAllowed: false ; disallowPrototype: false ; returnStyle: "implicit" ; singleReturnOnly: false }] } }, { plugins: { prettier: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { @typescript-eslint/comma-dangle: 0 ; comma-dangle: 0 ; eol-last: 0 ; linebreak-style: 0 ; max-len: 0 ; newline-per-chained-call: 0 ; no-mixed-spaces-and-tabs: 0 ; no-trailing-spaces: 0 ; no-unexpected-multiline: 0 ; quote-props: 0 } }, { plugins: { react: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } ; react-hooks: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { react/button-has-type: 2 ; react/function-component-definition: [2, { namedComponents: "arrow-function" ; unnamedComponents: "arrow-function" }] ; react/jsx-boolean-value: [2, "never"] ; react/jsx-curly-brace-presence: 2 ; react/jsx-fragments: [2, "syntax"] ; react/jsx-handler-names: 2 ; react/jsx-no-constructed-context-values: 2 ; react/jsx-no-script-url: 2 ; react/jsx-no-target-blank: 2 ; react/jsx-no-useless-fragment: 2 ; react/jsx-pascal-case: 2 ; react/jsx-sort-props: 2 ; react/no-array-index-key: 1 ; react/no-children-prop: 0 ; react/no-danger: 2 ; react/no-multi-comp: 2 ; react/no-this-in-sfc: 2 ; react/no-unsafe: 2 ; react/no-unstable-nested-components: 2 ; react/prefer-stateless-function: 2 ; react/prop-types: 0 ; react/react-in-jsx-scope: 0 } ; settings: { react: { version: "18" } } }, { plugins: { unicorn: ESLint.Plugin & { configs: { recommended: Linter.FlatConfig } } } ; rules: { unicorn/better-regex: 2 ; unicorn/catch-error-name: 2 ; unicorn/consistent-destructuring: 2 ; unicorn/consistent-function-scoping: 2 ; unicorn/error-message: 2 ; unicorn/escape-case: 2 ; unicorn/no-abusive-eslint-disable: 2 ; unicorn/no-anonymous-default-export: 2 ; unicorn/no-await-in-promise-methods: 2 ; unicorn/no-console-spaces: 2 ; unicorn/no-hex-escape: 2 ; unicorn/no-instanceof-array: 2 ; unicorn/no-invalid-remove-event-listener: 2 ; unicorn/no-negated-condition: 2 ; unicorn/no-new-array: 2 ; unicorn/no-new-buffer: 2 ; unicorn/no-null: 2 ; unicorn/no-single-promise-in-promise-methods: 2 ; unicorn/no-unnecessary-polyfills: 2 ; unicorn/no-useless-fallback-in-spread: 2 ; unicorn/no-useless-length-check: 2 ; unicorn/no-useless-spread: 2 ; unicorn/no-useless-switch-case: 2 ; unicorn/numeric-separators-style: 2 ; unicorn/prefer-add-event-listener: 2 ; unicorn/prefer-array-find: 2 ; unicorn/prefer-array-flat: 2 ; unicorn/prefer-array-flat-map: 2 ; unicorn/prefer-array-index-of: 2 ; unicorn/prefer-array-some: 2 ; unicorn/prefer-date-now: 2 ; unicorn/prefer-default-parameters: 2 ; unicorn/prefer-dom-node-append: 2 ; unicorn/prefer-dom-node-dataset: 2 ; unicorn/prefer-dom-node-remove: 2 ; unicorn/prefer-dom-node-text-content: 2 ; unicorn/prefer-event-target: 2 ; unicorn/prefer-export-from: 2 ; unicorn/prefer-includes: 2 ; unicorn/prefer-keyboard-event-key: 2 ; unicorn/prefer-logical-operator-over-ternary: 2 ; unicorn/prefer-modern-dom-apis: 2 ; unicorn/prefer-modern-math-apis: 2 ; unicorn/prefer-node-protocol: 2 ; unicorn/prefer-object-from-entries: 2 ; unicorn/prefer-optional-catch-binding: 2 ; unicorn/prefer-query-selector: 2 ; unicorn/prefer-spread: 2 ; unicorn/prefer-string-replace-all: 2 ; unicorn/prefer-string-slice: 2 ; unicorn/prefer-string-starts-ends-with: 2 ; unicorn/prefer-string-trim-start-end: 2 ; unicorn/prefer-ternary: 2 ; unicorn/prefer-type-error: 2 ; unicorn/require-array-join-separator: 2 ; unicorn/text-encoding-identifier-case: 2 } }]


typedocConfig

typedocConfig: Object

Type declaration

NameType
$schemastring
disableSourcesboolean
entryPointsstring[]
extendsstring[]

typescriptConfig

typescriptConfig: Object

Type declaration

NameType
$schemastring
compilerOptions{ allowJs: boolean = true; checkJs: boolean = true; declaration: boolean = true; exactOptionalPropertyTypes: boolean = true; forceConsistentCasingInFileNames: boolean = true; jsx: string = “react-jsx”; module: string = “NodeNext”; moduleResolution: string = “NodeNext”; newLine: string = “LF”; noEmitOnError: boolean = true; noFallthroughCasesInSwitch: boolean = true; noImplicitOverride: boolean = true; noImplicitReturns: boolean = true; noUncheckedIndexedAccess: boolean = true; noUnusedLocals: boolean = true; noUnusedParameters: boolean = true; preserveSymlinks: boolean = true; resolveJsonModule: boolean = true; skipLibCheck: boolean = true; strict: boolean = true; target: string = “ESNext”; verbatimModuleSyntax: boolean = true }
compilerOptions.allowJsboolean
compilerOptions.checkJsboolean
compilerOptions.declarationboolean
compilerOptions.exactOptionalPropertyTypesboolean
compilerOptions.forceConsistentCasingInFileNamesboolean
compilerOptions.jsxstring
compilerOptions.modulestring
compilerOptions.moduleResolutionstring
compilerOptions.newLinestring
compilerOptions.noEmitOnErrorboolean
compilerOptions.noFallthroughCasesInSwitchboolean
compilerOptions.noImplicitOverrideboolean
compilerOptions.noImplicitReturnsboolean
compilerOptions.noUncheckedIndexedAccessboolean
compilerOptions.noUnusedLocalsboolean
compilerOptions.noUnusedParametersboolean
compilerOptions.preserveSymlinksboolean
compilerOptions.resolveJsonModuleboolean
compilerOptions.skipLibCheckboolean
compilerOptions.strictboolean
compilerOptions.targetstring
compilerOptions.verbatimModuleSyntaxboolean

Namespace: changesetsConfig

@lou.codes/configs.changesetsConfig

Functions

getDependencyReleaseLine

getDependencyReleaseLine(_changesets, dependenciesUpdated): Promise<string>

Parameters
NameType
_changesetsNewChangesetWithCommit[]
dependenciesUpdatedModCompWithPackage[]
Returns

Promise<string>


getReleaseLine

getReleaseLine(«destructured»): Promise<string>

Parameters
NameType
«destructured»NewChangesetWithCommit
Returns

Promise<string>

Namespace: prettierConfig

@lou.codes/configs.prettierConfig

Variables

arrowParens

arrowParens: "avoid"


bracketSameLine

bracketSameLine: false


bracketSpacing

bracketSpacing: true


embeddedLanguageFormatting

embeddedLanguageFormatting: "auto"


endOfLine

endOfLine: "lf"


experimentalTernaries

experimentalTernaries: true


htmlWhitespaceSensitivity

htmlWhitespaceSensitivity: "strict"


jsxSingleQuote

jsxSingleQuote: false


printWidth

printWidth: 80


proseWrap

proseWrap: "always"


quoteProps

quoteProps: "as-needed"


semi

semi: true


singleAttributePerLine

singleAttributePerLine: false


singleQuote

singleQuote: false


tabWidth

tabWidth: 4


trailingComma

trailingComma: "all"


useTabs

useTabs: true


vueIndentScriptAndStyle

vueIndentScriptAndStyle: true

Namespace: stylelintConfig

@lou.codes/configs.stylelintConfig

Variables

defaultSeverity

defaultSeverity: "error"


extends

extends: ["stylelint-prettier/recommended"]


plugins

plugins: [Plugin]


rules

rules: Object

Type declaration
NameTypeDescription
alpha-value-notation"number"Alpha-values must always use the number notation. See alpha-value-notation
at-rule-empty-line-beforereadonly ["always", { except: readonly ["blockless-after-blockless", "first-nested"] ; ignore: readonly ["after-comment"] }]There must always be an empty line before at-rules. See at-rule-empty-line-before
color-function-notation"modern"Applicable color-functions must always use modern notation. See color-function-notation
color-hex-length"short"Specify short notation for hex colors. See color-hex-length
color-named"never"Colors must never be named. See color-named
custom-property-pattern"^[a-z][a-z0-9-]*$"Specify a pattern for custom properties. See custom-property-pattern
declaration-no-importanttrueDisallow !important within declarations. See declaration-no-important
declaration-property-value-no-unknowntrueDisallow unknown values for properties within declarations. See declaration-property-value-no-unknown
font-weight-notation"numeric"Font weight values must always be numbers. See font-weight-notation
function-name-case"lower"Specify lowercase for function names. See function-name-case
function-url-no-scheme-relativetrueDisallow scheme-relative urls. See function-url-no-scheme-relative
function-url-quotes"always"Disallow quotes for urls. See function-url-quotes
function-url-scheme-allowed-listreadonly ["data", "/^http/"]Specify a list of allowed URL schemes. See function-url-scheme-allowed-list
hue-degree-notation"angle"Degree hues must always use angle notation. See hue-degree-notation
import-notation"url"@import rules must always use URL notation. See import-notation
keyframe-selector-notation"keyword"Keyframe selectors must always use the keyword notation. See keyframe-selector-notation
keyframes-name-pattern"^[a-z][a-z0-9-]*$"Specify a pattern for keyframe names. See keyframes-name-pattern
length-zero-no-unittrueDisallow units for zero lengths. See length-zero-no-unit
media-feature-range-notation"context"Media feature ranges must always use context notation. See media-feature-range-notation
order/properties-alphabetical-ordertrueKeep properties in alphabetical order. See order/properties-alphabetical-order
rule-empty-line-beforereadonly ["always", { except: readonly ["first-nested"] ; ignore: readonly ["after-comment"] }]There must always be an empty line before rules. See rule-empty-line-before
selector-attribute-quotes"always"Attribute values must never be quoted. See selector-attribute-quotes
selector-max-id1Limit the number of ID selectors in a selector. See selector-max-id
selector-not-notation"complex"Specify complex notation for :not () pseudo-class selectors. See selector-not-notation
selector-pseudo-element-colon-notation"double"Applicable pseudo-elements must always use the double colon notation. See selector-pseudo-element-colon-notation
selector-type-case"lower"Specify lowercase for type selectors. See selector-type-case
shorthand-property-no-redundant-valuestrueDisallow redundant values within shorthand properties. See shorthand-property-no-redundant-values
value-keyword-casereadonly ["lower", { camelCaseSvgKeywords: true }]Specify lowercase for keywords values (camel for SVG keywords). See value-keyword-case