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:
Guz013
2023-09-02 20:31:57 -03:00
parent f874ed622e
commit 3434620ff1
23 changed files with 472 additions and 63 deletions

View File

@@ -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';

View File

@@ -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';
/** /**

View File

@@ -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, },

View File

@@ -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';
/** /**

View File

@@ -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: {

View File

@@ -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,
},
} }],
}, },
}); });

View File

@@ -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: {

View File

@@ -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';

View File

@@ -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: {

View File

@@ -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: {

View File

@@ -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,
}, },
}>; }>;

View File

@@ -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';

View File

@@ -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: {

View File

@@ -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: {

View File

@@ -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: {

View File

@@ -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: {

View File

@@ -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: {

View File

@@ -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'];

View File

@@ -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 = {

View File

@@ -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[],
}>; }>;

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';