UNPKG

@perfective/eslint-config

Version:
179 lines 6.96 kB
import eslintPluginJsdoc from 'eslint-plugin-jsdoc'; import { javascriptFiles } from "../../linter/glob.js"; import { javascriptLanguageOptions } from "../../linter/language-options.js"; export function jsdocConfig() { return { plugins: { jsdoc: { rules: eslintPluginJsdoc.configs['flat/recommended'].plugins['jsdoc'].rules } }, settings: { jsdoc: { tagNamePreference: { augments: { message: 'Use @extends instead of @augments as it is more evocative of classes than @augments', replacement: 'extends' }, todo: { message: 'Use TODO for comments' }, fires: { replacement: 'emits' } }, ignoreReplacesDocs: true, overrideReplacesDocs: true, augmentsExtendsReplacesDocs: false, implementsReplacesDoc: false } }, rules: { 'jsdoc/check-access': 'off', 'jsdoc/check-alignment': 'error', 'jsdoc/check-examples': 'off', 'jsdoc/check-indentation': 'off', 'jsdoc/check-line-alignment': ['off', 'never'], 'jsdoc/check-param-names': ['error', { allowExtraTrailingParamDocs: false, checkDestructured: true, checkRestProperty: false, disableExtraPropertyReporting: false, disableMissingParamChecks: false, enableFixer: true, useDefaultObjectProperties: false }], 'jsdoc/check-property-names': ['error', { enableFixer: true }], 'jsdoc/check-syntax': 'error', 'jsdoc/check-tag-names': ['error', { definedTags: ['final', 'flags', 'sealed', 'workaround'], jsxTags: true }], 'jsdoc/check-template-names': 'error', 'jsdoc/check-types': ['error', { noDefaults: false }], 'jsdoc/check-values': 'error', 'jsdoc/convert-to-jsdoc-comments': 'off', 'jsdoc/empty-tags': ['error', { tags: ['final', 'flags', 'sealed'] }], 'jsdoc/implements-on-classes': 'error', 'jsdoc/imports-as-dependencies': 'error', 'jsdoc/lines-before-block': 'off', 'jsdoc/match-description': 'error', 'jsdoc/match-name': 'off', 'jsdoc/multiline-blocks': ['warn', { noZeroLineText: true, noFinalLineText: true, noSingleLineBlocks: true, singleLineTags: ['lends', 'type', 'deprecated'], noMultilineBlocks: false, multilineTags: ['*'], allowMultipleTags: true }], 'jsdoc/no-bad-blocks': ['error', { ignore: ['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck', 'typescript-eslint'], preventAllMultiAsteriskBlocks: false }], 'jsdoc/no-blank-blocks': 'warn', 'jsdoc/no-blank-block-descriptions': 'off', 'jsdoc/no-defaults': 'error', 'jsdoc/no-missing-syntax': 'off', 'jsdoc/no-multi-asterisks': ['error', { allowWhitespace: false, preventAtMiddleLines: true, preventAtEnd: true }], 'jsdoc/no-restricted-syntax': 'off', 'jsdoc/no-types': 'error', 'jsdoc/no-undefined-types': 'error', 'jsdoc/require-asterisk-prefix': ['error', 'always'], 'jsdoc/require-description': ['error', { exemptedBy: ['inheritdoc', 'package', 'private', 'see', 'deprecated'] }], 'jsdoc/require-description-complete-sentence': 'warn', 'jsdoc/require-example': 'off', 'jsdoc/require-file-overview': 'off', 'jsdoc/require-hyphen-before-param-description': ['warn', 'always'], 'jsdoc/require-jsdoc': 'off', 'jsdoc/require-param': 'off', 'jsdoc/require-param-description': 'error', 'jsdoc/require-param-name': 'error', 'jsdoc/require-param-type': 'off', 'jsdoc/require-property': 'error', 'jsdoc/require-property-description': 'error', 'jsdoc/require-property-name': 'error', 'jsdoc/require-property-type': 'error', 'jsdoc/require-returns': 'off', 'jsdoc/require-returns-check': 'error', 'jsdoc/require-returns-description': 'error', 'jsdoc/require-returns-type': 'off', 'jsdoc/require-template': ['off', { requireSeparateTemplates: false }], 'jsdoc/require-throws': 'error', 'jsdoc/require-yields': 'error', 'jsdoc/require-yields-check': 'error', 'jsdoc/sort-tags': ['warn', { tagSequence: [{ tags: ['summary', 'typeSummary'] }, { tags: ['module', 'exports', 'file', 'fileoverview', 'overview'] }, { tags: ['typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor'] }, { tags: ['modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires'] }, { tags: ['desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license'] }, { tags: ['const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor'] }, { tags: ['param', 'arg', 'argument', 'prop', 'property'] }, { tags: ['async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'return', 'returns', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this'] }, { tags: ['static', 'private', 'protected', 'public', 'access', 'package'] }, { tags: ['see', 'example'] }, { tags: ['closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction'] }, { tags: ['define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted'] }, { tags: ['category'] }, { tags: ['ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo'] }], alphabetizeExtras: false, linesBetween: 1, reportTagGroupSpacing: true, reportIntraTagGroupSpacing: true }], 'jsdoc/tag-lines': ['warn', 'always', { count: 0, startLines: 1, endLines: 0, applyToEndTag: false, tags: {} }], 'jsdoc/valid-types': 'error' } }; } export function jsdocJavascriptConfig() { return { files: javascriptFiles, languageOptions: javascriptLanguageOptions(), rules: { 'jsdoc/no-types': 'off', 'jsdoc/no-undefined-types': 'off', 'jsdoc/require-param': 'error', 'jsdoc/require-param-type': 'error', 'jsdoc/require-returns': 'error', 'jsdoc/require-returns-type': 'error' } }; }