docs: 📚️ add docs to all files
Added documentation to all files, configs and presets. Following the new strict documentation rules.
This commit is contained in:
8
configs/js/src/@types/eslint-plugin-i.d.ts
vendored
8
configs/js/src/@types/eslint-plugin-i.d.ts
vendored
@@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Type declaration for the `eslint-plugin-i` package in a attempt to make it
|
||||||
|
* compatible with the new flat config.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
// eslint-disable-next-line unicorn/prevent-abbreviations
|
// eslint-disable-next-line unicorn/prevent-abbreviations
|
||||||
import type { ESLint, Linter } from 'eslint';
|
import type { ESLint, Linter } from 'eslint';
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Type declaration for the `eslint-plugin-jsdoc` package in a attempt to make it
|
||||||
|
* compatible with the new flat config.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import type { ESLint } from 'eslint';
|
import type { ESLint } from 'eslint';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
8
configs/js/src/@types/globals.d.ts
vendored
8
configs/js/src/@types/globals.d.ts
vendored
@@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Type declaration for the `globals` package in a attempt to make it
|
||||||
|
* compatible with the new flat config.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
declare module 'globals' {
|
declare module 'globals' {
|
||||||
const globals: {
|
const globals: {
|
||||||
browser: { [rule: string]: boolean, },
|
browser: { [rule: string]: boolean, },
|
||||||
|
|||||||
9
configs/js/src/@types/typescript-eslint.d.ts
vendored
9
configs/js/src/@types/typescript-eslint.d.ts
vendored
@@ -1,3 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Type declaration for the `@typescript-eslint/eslint-plugin` and
|
||||||
|
* `@typescript-eslint/parser` packages in a attempt to make it
|
||||||
|
* compatible with the new flat config.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import type { ESLint, Linter } from 'eslint';
|
import type { ESLint, Linter } from 'eslint';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration object that adds necessary plugins for the other objects.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import tsESLint from '@typescript-eslint/eslint-plugin';
|
import tsESLint from '@typescript-eslint/eslint-plugin';
|
||||||
// eslint-disable-next-line import/no-relative-parent-imports
|
// eslint-disable-next-line import/no-relative-parent-imports
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
import unicornPlugin from 'eslint-plugin-unicorn';
|
import unicornPlugin from 'eslint-plugin-unicorn';
|
||||||
|
// @ts-expect-error because the package doesn't export correct types
|
||||||
import tsParser from '@typescript-eslint/parser';
|
import tsParser from '@typescript-eslint/parser';
|
||||||
import jsdocPlugin from 'eslint-plugin-jsdoc';
|
import jsdocPlugin from 'eslint-plugin-jsdoc';
|
||||||
import importPlugin from 'eslint-plugin-i';
|
import importPlugin from 'eslint-plugin-i';
|
||||||
import process from 'node:process';
|
import process from 'node:process';
|
||||||
|
|
||||||
/**
|
/** @type {import('eslint').Linter.FlatConfig} */
|
||||||
* This config adds necessary plugins and configuration for ESLint
|
|
||||||
* to use in the other configs **This should always be in the top
|
|
||||||
* of the configuration array**.
|
|
||||||
* @type {import('eslint').Linter.FlatConfig}
|
|
||||||
*/
|
|
||||||
const config = {
|
const config = {
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects that helps document your code.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -17,7 +24,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
@@ -25,7 +31,24 @@ const strict = createVariations({
|
|||||||
|
|
||||||
...{}, // Plugin: eslint-plugin-jsdoc
|
...{}, // Plugin: eslint-plugin-jsdoc
|
||||||
'jsdoc/require-description': 'error',
|
'jsdoc/require-description': 'error',
|
||||||
'jsdoc/require-file-overview': 'error',
|
'jsdoc/require-file-overview': ['error', { tags: {
|
||||||
|
author: {
|
||||||
|
mustExist: true,
|
||||||
|
},
|
||||||
|
copyright: {
|
||||||
|
initialCommentsOnly: true,
|
||||||
|
},
|
||||||
|
file: {
|
||||||
|
initialCommentsOnly: true,
|
||||||
|
mustExist: true,
|
||||||
|
preventDuplicates: true,
|
||||||
|
},
|
||||||
|
license: {
|
||||||
|
initialCommentsOnly: true,
|
||||||
|
mustExist: true,
|
||||||
|
preventDuplicates: true,
|
||||||
|
},
|
||||||
|
} }],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects for the browser environment.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../../lib/rule-variations.js';
|
import { createVariations } from '../../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../../constants.js';
|
import { jsFiles, tsFiles } from '../../constants.js';
|
||||||
|
|
||||||
/** @type {import('../index.d.ts').ConfigVariations} */
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -19,7 +26,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('../index.d.ts').ConfigVariations} */
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration object for the all the environment.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import browser from './browser.js';
|
import browser from './browser.js';
|
||||||
import node from './node.js';
|
import node from './node.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects for the NodeJS environment.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../../lib/rule-variations.js';
|
import { createVariations } from '../../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../../constants.js';
|
import { jsFiles, tsFiles } from '../../constants.js';
|
||||||
|
|
||||||
/** @type {import('../index.d.ts').ConfigVariations} */
|
|
||||||
const commonjs = createVariations({
|
const commonjs = createVariations({
|
||||||
files: ['**/*.cts', '**/*.cjs'],
|
files: ['**/*.cts', '**/*.cjs'],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -19,7 +26,6 @@ const commonjs = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('../index.d.ts').ConfigVariations} */
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -31,7 +37,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('../index.d.ts').ConfigVariations} */
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects for code formatting and style in JavaScript and TypeScript.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import perfectionistPlugin from 'eslint-plugin-perfectionist';
|
import perfectionistPlugin from 'eslint-plugin-perfectionist';
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
/**
|
|
||||||
* This config relates to code formatting and style in JavaScript and TypeScript
|
|
||||||
* Recommended alternative, better for projects in prototyping phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
plugins: {
|
plugins: {
|
||||||
@@ -155,11 +158,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* This config relates to code formatting and style in JavaScript and TypeScript
|
|
||||||
* Strict alternative, better for projects in refactoring and/or production phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
229
configs/js/src/configs/index.d.ts
vendored
229
configs/js/src/configs/index.d.ts
vendored
@@ -1,55 +1,280 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Type declarations and documentations for all configs objects.
|
||||||
|
* All these types are public to the user.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import type { Linter } from 'eslint';
|
import type { Linter } from 'eslint';
|
||||||
|
|
||||||
interface ConfigVariations {
|
interface ConfigVariations {
|
||||||
/**
|
/**
|
||||||
|
* @description
|
||||||
* Enable all rules with `error` level.
|
* Enable all rules with `error` level.
|
||||||
*/
|
*/
|
||||||
error: Linter.FlatConfig,
|
error: Linter.FlatConfig,
|
||||||
/**
|
/**
|
||||||
|
* @description
|
||||||
* Disable all rules in this config.
|
* Disable all rules in this config.
|
||||||
*/
|
*/
|
||||||
off: Linter.FlatConfig,
|
off: Linter.FlatConfig,
|
||||||
/**
|
/**
|
||||||
|
* @description
|
||||||
* Enable all rules with `warn` level.
|
* Enable all rules with `warn` level.
|
||||||
*/
|
*/
|
||||||
warn: Linter.FlatConfig,
|
warn: Linter.FlatConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
const configs: Readonly<{
|
const configs: Readonly<{
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* **Add this configuration at the start of your array**.
|
||||||
|
* @description
|
||||||
|
* This config adds necessary plugins and configuration for ESLint
|
||||||
|
* to use in the other configs **This should always be in the top
|
||||||
|
* of the configuration array**.
|
||||||
|
*/
|
||||||
core: Linter.FlatConfig,
|
core: Linter.FlatConfig,
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* This configuration helps you document your code with JSDoc.
|
||||||
|
*/
|
||||||
documentation: {
|
documentation: {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Recommended rules from the original plugins.
|
||||||
|
* @description
|
||||||
|
* Less strict rules, that nots enforces documentation on
|
||||||
|
* every aspect/function of your code. Recommended rules for
|
||||||
|
* projects in prototyping or starting phases, or apps that
|
||||||
|
* doesn't needs massive documentations.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* More opinionated configuration, created for ESLegant and Lored's projects.
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @description
|
||||||
|
* Enforces some documentation of every function and file.
|
||||||
|
* Better for libraries (in more production-ready phases),
|
||||||
|
* large codebase's and/or projects with multiple teams/people.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Configurations related to specific JavaScript/TypeScript environments,
|
||||||
|
* such as Node, Deno and the Browser.
|
||||||
|
* @description
|
||||||
|
* Adds global variables and rules related to code on said environments.
|
||||||
|
* **They can and should be combined** depending on the codebase you're
|
||||||
|
* working with.
|
||||||
|
*/
|
||||||
environments: {
|
environments: {
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* Browser environment configuration, use this if you are working
|
||||||
|
* on a pure client-side or mixed codebase environment.
|
||||||
|
*/
|
||||||
browser: {
|
browser: {
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* Recommends end enforces the use of newer web APIs
|
||||||
|
* on your codebase.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @todo
|
||||||
|
* For now, the strict rules is a alias of the recommended,
|
||||||
|
* as it not currently adds any new rules.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
node: {
|
node: {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Configuration overrides for CommonJS files.
|
||||||
|
* @description
|
||||||
|
* ESLegant recommends the use of ESModules and newer syntax
|
||||||
|
* for javascript files. This configuration should mostly be
|
||||||
|
* used for exceptions, like config files that don't support
|
||||||
|
* ESM.
|
||||||
|
*
|
||||||
|
* This configuration just affects files ending in `*.cjs`
|
||||||
|
* and `*.cts` extensions. If you want to use in other files
|
||||||
|
* consider creating a config object.
|
||||||
|
* @example <caption>Example of using the config for specific CommonJS files</caption>
|
||||||
|
* import { configs } from '@eslegant/js';
|
||||||
|
*
|
||||||
|
* export default [
|
||||||
|
* {
|
||||||
|
* ...configs.environments.node.commonjs.error
|
||||||
|
* files: ['*.config.js'],
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
*/
|
||||||
commonjs: ConfigVariations,
|
commonjs: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* Recommends newer and best practices on NodeJS projects.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @todo
|
||||||
|
* For now, the strict rules is a alias of the recommended,
|
||||||
|
* as it not currently adds any new rules.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* This config relates to code formatting and style in JavaScript and TypeScript.
|
||||||
|
* @description
|
||||||
|
* This configuration enforces a specific code formatting and style in JavaScript
|
||||||
|
* and TypeScript. The purpose of it can sometimes overlap with the `suggestions`
|
||||||
|
* config, so to separate better, this tries to mostly enforces just rules for
|
||||||
|
* how the code looks and is organized than coding style/way of handling something.
|
||||||
|
*/
|
||||||
formatting: {
|
formatting: {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* ESLegant / Lored's code style configuration.
|
||||||
|
* @description
|
||||||
|
* This configuration recommends a opinionated code and formatting style, which
|
||||||
|
* is mostly similar to other styles in the JavaScript environment.
|
||||||
|
* It is based on the work and config of Anthony's ESLint config (`antfu/eslint-config`),
|
||||||
|
* with the most notable changes being the use of `tabs` instead of 2 space indentation
|
||||||
|
* and the use of semicolons.
|
||||||
|
* @see {@link https://github.com/antfu/eslint-config Anthony's config}
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @todo
|
||||||
|
* For now, the strict rules is a alias of the recommended,
|
||||||
|
* as it not currently adds any new rules.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* This configuration enforces a specific naming convention for the codebase.
|
||||||
|
* With the object of making the code more readable and understandable.
|
||||||
|
*/
|
||||||
naming: {
|
naming: {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Prevents bad naming conventions and behavior.
|
||||||
|
* @description
|
||||||
|
* This configuration prevents bad names and behaviors such as abbreviations.
|
||||||
|
* It does not enforces specific names or naming structure/strategies.
|
||||||
|
* **With the exception of** file names being enforces to be `kebab-case`.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Enforces specific naming structure/strategies.
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @description
|
||||||
|
* This configuration enforces specific names or naming structure/strategies for your
|
||||||
|
* code. Enforcing things such using verbs and nouns in specif orders and
|
||||||
|
* when abbreviations are accepted or not.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
overrides: {
|
overrides: {
|
||||||
'inferrable-types': ConfigVariations,
|
'inferrable-types': ConfigVariations,
|
||||||
performance: ConfigVariations,
|
performance: ConfigVariations,
|
||||||
},
|
},
|
||||||
suggestions: {
|
/**
|
||||||
|
* @summary
|
||||||
|
* Prevents possible syntax errors in your code.
|
||||||
|
* @description
|
||||||
|
* This configuration object prevents possible syntax and code logic
|
||||||
|
* errors on your file. Mostly not opinionated.
|
||||||
|
*/
|
||||||
|
problems: {
|
||||||
|
/**
|
||||||
|
* @description
|
||||||
|
* Rules which prevents most errors in your code. Based
|
||||||
|
* mostly on ESLint's recommended configuration.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @description
|
||||||
|
* Extra-safety rules, reporting possible forgettable errors
|
||||||
|
* or errors in typing.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
'suggestions-typescript': {
|
/**
|
||||||
|
* @summary
|
||||||
|
* Enforces different ways of coding in JavaScript and TypeScript.
|
||||||
|
* @description
|
||||||
|
* This configuration enforces different ways doing things, coding style and/or
|
||||||
|
* code logic patterns. Preferring over explicit and declarative code than
|
||||||
|
* implicit.
|
||||||
|
*/
|
||||||
|
suggestions: {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Recommended for projects in prototyping/starting phases.
|
||||||
|
* @description
|
||||||
|
* This configuration enforces mostly best practices,
|
||||||
|
* based on the `recommended` options of the plugins.
|
||||||
|
*/
|
||||||
recommended: ConfigVariations,
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Strict rules that takes "guarding rails" for your code.
|
||||||
|
* @borrows Builds on top of the recommended configuration
|
||||||
|
* @description
|
||||||
|
* **This will get in the way of your programming**. This configuration
|
||||||
|
* tries prevent possible bad code smells and practices that could built
|
||||||
|
* up when your project grows. Enforcing you to refactor more the code
|
||||||
|
* and separating and or reorganizing functions and code logic.
|
||||||
|
* @see {@link https://youtu.be/CFRhGnuXG-4 Example: Why You Shouldn't Nest Your Code - by: CodeAesthetic}
|
||||||
|
* - The maximum depth allowed is 4. (`max-depth: [error, 4]`)
|
||||||
|
* @see {@link https://youtu.be/J1f5b4vcxCQ Example: Dependency Injection, The Best Pattern - by: CodeAesthetic}
|
||||||
|
* - Files should be organized in a tree-like structure, and shouldn't import modules
|
||||||
|
* in parent directories. This helps you organize your code and suggests using
|
||||||
|
* dependency injection more.
|
||||||
|
*/
|
||||||
|
strict: ConfigVariations,
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Rules for TypeScript files specifically. **Use this if
|
||||||
|
* you have Typescript files in your project**.
|
||||||
|
* Affects `*.ts`, `*.tsx`, `*.mts` and `*.cts` files.
|
||||||
|
* @description
|
||||||
|
* Most of TypeScript rules can be applied to type-checked JavaScript
|
||||||
|
* files also. But some can just be fixed in TypeScript syntax, so they
|
||||||
|
* where disabled and moved to this specific configuration.
|
||||||
|
*
|
||||||
|
* It also disable things that aren't useful when using TypeScript, such
|
||||||
|
* as types in JSDoc comments.
|
||||||
|
*
|
||||||
|
* **This should be placed after the `suggestion` config.**.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
'suggestions-typescript': {
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Rules similar to {@link configs.suggestions.recommended `suggestions#recommended`},
|
||||||
|
* but for TypeScript.
|
||||||
|
*/
|
||||||
|
recommended: ConfigVariations,
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Rules similar to {@link configs.suggestions.strict `suggestions#strict`},
|
||||||
|
* but for TypeScript.
|
||||||
|
*/
|
||||||
strict: ConfigVariations,
|
strict: ConfigVariations,
|
||||||
},
|
},
|
||||||
}>;
|
}>;
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Main export files for all the configs objects, merging then in one `configs` object.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import typescript from './suggestions-typescript.js';
|
import typescript from './suggestions-typescript.js';
|
||||||
import environments from './environments/index.js';
|
import environments from './environments/index.js';
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects which enforces a specific naming convention for the codebase.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
/**
|
|
||||||
* This config suggest alternate ways of doing things in JavaScript and TypeScript
|
|
||||||
* Recommended alternative, better for projects in prototyping phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -17,11 +20,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* This config suggest alternate ways of doing things in JavaScript and TypeScript
|
|
||||||
* Strict alternative, better for projects in refactoring and/or production phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Overrides for specific scenarios or preferences of users. The objects
|
||||||
|
* are supposed to be placed on the end of the arrays and can
|
||||||
|
* change configs of multiple other categories.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
* @todo This file is not completed fully.
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
// TODO [>=1.0.0]: Create a separate config for performance related practices
|
// TODO [>=1.0.0]: Create a separate config for performance related practices
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const performance = createVariations({
|
const performance = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -13,7 +22,6 @@ const performance = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const inferrableTypes = createVariations({
|
const inferrableTypes = createVariations({
|
||||||
files: [...tsFiles],
|
files: [...tsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects for preventing possible syntax errors.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
/**
|
|
||||||
* This config relates to possible logic and syntax errors JavaScript and TypeScript
|
|
||||||
* Recommended alternative, better for projects in prototyping phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -78,11 +81,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* This config relates to possible logic and syntax errors JavaScript and TypeScript
|
|
||||||
* Strict alternative, better for projects in refactoring and/or production phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects that enforces different ways of coding in TypeScript specifically.
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { tsFiles } from '../constants.js';
|
||||||
|
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles],
|
files: [...tsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -19,7 +26,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @type {import('./index.d.ts').ConfigVariations} */
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration objects that enforces different ways of coding in JavaScript and TypeScript..
|
||||||
|
* See more info on the configs type declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/no-relative-parent-imports */
|
/* eslint-disable import/no-relative-parent-imports */
|
||||||
/* eslint-disable unicorn/no-useless-spread */
|
/* eslint-disable unicorn/no-useless-spread */
|
||||||
import { createVariations } from '../lib/rule-variations.js';
|
import { createVariations } from '../lib/rule-variations.js';
|
||||||
import { jsFiles, tsFiles } from '../constants.js';
|
import { jsFiles, tsFiles } from '../constants.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This config suggest alternate ways of doing things in JavaScript and TypeScript
|
|
||||||
* Recommended alternative, better for projects in prototyping phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const recommended = createVariations({
|
const recommended = createVariations({
|
||||||
files: [...tsFiles, ...jsFiles],
|
files: [...tsFiles, ...jsFiles],
|
||||||
rules: {
|
rules: {
|
||||||
@@ -249,11 +251,6 @@ const recommended = createVariations({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* This config suggest alternate ways of doing things in JavaScript and TypeScript
|
|
||||||
* Strict alternative, better for projects in refactoring and/or production phases.
|
|
||||||
* @type {import('./index.d.ts').ConfigVariations}
|
|
||||||
*/
|
|
||||||
const strict = createVariations({
|
const strict = createVariations({
|
||||||
...recommended.error,
|
...recommended.error,
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Constant values used around the package.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
const jsFiles = ['**/*.js', '**/*.mjs', '**/*.cjs', '**/*.jsx'];
|
const jsFiles = ['**/*.js', '**/*.mjs', '**/*.cjs', '**/*.jsx'];
|
||||||
const tsFiles = ['**/*.ts', '**/*.mts', '**/*.cts', '**/*.tsx'];
|
const tsFiles = ['**/*.ts', '**/*.mts', '**/*.cts', '**/*.tsx'];
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* @file Utility functions used in the package to manipulate rules records.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @typedef {import('../configs/index').ConfigVariations} ConfigVariations
|
||||||
* @typedef {import('eslint').Linter.RuleEntry} RuleEntry
|
* @typedef {import('eslint').Linter.RuleEntry} RuleEntry
|
||||||
* @typedef {import('eslint').Linter.RuleLevel} RuleLevel
|
* @typedef {import('eslint').Linter.RuleLevel} RuleLevel
|
||||||
* @typedef {import('eslint').Linter.FlatConfig} FlatConfig
|
* @typedef {import('eslint').Linter.FlatConfig} FlatConfig
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Changes the level of a rule entry. Checking if it
|
||||||
|
* is a Array or a simple RuleLevel entry.
|
||||||
|
*
|
||||||
|
* Useful in conjunction with {@link iterateRules `iterateRules()`} function.
|
||||||
|
*
|
||||||
* @param {Readonly<RuleEntry>} ruleEntry
|
* @param {Readonly<RuleEntry>} ruleEntry
|
||||||
* - The rule entry to be modified.
|
* - The rule entry to be modified.
|
||||||
* @param {RuleLevel} level
|
* @param {RuleLevel} level
|
||||||
@@ -27,6 +38,12 @@ function changeLevel(ruleEntry, level) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Iterates through a rule entry record, using the handler
|
||||||
|
* on each entry and returns the resulting object.
|
||||||
|
*
|
||||||
|
* Useful for applying plugin prefixes or changing the rule
|
||||||
|
* level of the entries.
|
||||||
|
*
|
||||||
* @param {Readonly<{[name: string]: RuleEntry}>} rules
|
* @param {Readonly<{[name: string]: RuleEntry}>} rules
|
||||||
* - The object to be iterated through.
|
* - The object to be iterated through.
|
||||||
* @param {([name, entry]: [string, RuleEntry]) => [string, RuleEntry]} handler
|
* @param {([name, entry]: [string, RuleEntry]) => [string, RuleEntry]} handler
|
||||||
@@ -40,9 +57,14 @@ function iterateRules(rules, handler) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Creates {@link ConfigVariations variations} for the given configuration object.
|
||||||
|
* With `error`, `warn` and `off` rule levels.
|
||||||
|
*
|
||||||
|
* Used in the configuration objects of this package.
|
||||||
|
*
|
||||||
* @param {Readonly<FlatConfig>} config
|
* @param {Readonly<FlatConfig>} config
|
||||||
* - The configuration object to create `error`, `warn`, and `off` variations.
|
* - The configuration object to create `error`, `warn`, and `off` variations.
|
||||||
* @returns {{error: FlatConfig, warn: FlatConfig, off: FlatConfig}}
|
* @returns {ConfigVariations}
|
||||||
*/
|
*/
|
||||||
function createVariations(config) {
|
function createVariations(config) {
|
||||||
const configError = {
|
const configError = {
|
||||||
|
|||||||
43
configs/js/src/presets/index.d.ts
vendored
43
configs/js/src/presets/index.d.ts
vendored
@@ -1,7 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Types declarations and documentation for the presets object.
|
||||||
|
* All these types are public to the user.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import type { Linter } from 'eslint';
|
import type { Linter } from 'eslint';
|
||||||
|
|
||||||
const presets: Readonly<{
|
const presets: Readonly<{
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Preset recommended for projects in a prototyping or starting phase.
|
||||||
|
* @description
|
||||||
|
* This preset is mostly recommended for projects in the start of
|
||||||
|
* their development, being more flexible and less opinionated.
|
||||||
|
* Useful for preventing errors.
|
||||||
|
*
|
||||||
|
* Configs used:
|
||||||
|
* - `problems#recommended`;
|
||||||
|
* - `suggestions#recommended`;
|
||||||
|
* - `suggestions-typescript#recommended`;
|
||||||
|
* - `formatting#recommended`;
|
||||||
|
* - `naming#recommended`;
|
||||||
|
* - `documentation#recommended`;
|
||||||
|
*
|
||||||
|
* All configs are set on level `error`.
|
||||||
|
*/
|
||||||
recommended: Linter.FlatConfig[],
|
recommended: Linter.FlatConfig[],
|
||||||
|
/**
|
||||||
|
* @summary
|
||||||
|
* Preset recommended for projects in a production or large scale.
|
||||||
|
* @description
|
||||||
|
* This preset is more strict and opinionated, focusing on making
|
||||||
|
* your code follow a specific structure and pattern.
|
||||||
|
*
|
||||||
|
* Configs used:
|
||||||
|
* - `problems#strict`;
|
||||||
|
* - `suggestions#strict`;
|
||||||
|
* - `suggestions-typescript#strict`;
|
||||||
|
* - `formatting#strict`;
|
||||||
|
* - `naming#strict`;
|
||||||
|
* - `documentation#recommended`;
|
||||||
|
*
|
||||||
|
* All configs are set on level `error`.
|
||||||
|
*/
|
||||||
strict: Linter.FlatConfig[],
|
strict: Linter.FlatConfig[],
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Presets object export.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
import recommended from './recommended.js';
|
import recommended from './recommended.js';
|
||||||
import strict from './strict.js';
|
import strict from './strict.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Recommended preset object. More info and docs on the type
|
||||||
|
* declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-relative-parent-imports
|
// eslint-disable-next-line import/no-relative-parent-imports
|
||||||
import configs from '../configs/index.js';
|
import configs from '../configs/index.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Strict preset object. More info and docs on the type
|
||||||
|
* declaration file.
|
||||||
|
* @license MIT
|
||||||
|
* @author Guz013 <contact.guz013@gmail.com> (https://guz.one)
|
||||||
|
*/
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-relative-parent-imports
|
// eslint-disable-next-line import/no-relative-parent-imports
|
||||||
import configs from '../configs/index.js';
|
import configs from '../configs/index.js';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user