Files
routie/frontend/node_modules/eslint-plugin-perfectionist/dist/utils/get-eslint-disabled-rules.js
T

117 lines
3.1 KiB
JavaScript

/**
* Array of all ESLint disable directive types. Used to identify and parse
* ESLint disable comments in source code.
*/
var eslintDisableDirectives = [
'eslint-disable',
'eslint-enable',
'eslint-disable-line',
'eslint-disable-next-line',
]
/**
* Parses an ESLint disable comment to extract the directive type and affected
* rules.
*
* Analyzes comment text to determine if it contains an ESLint disable directive
* and which rules are affected. Returns null if the comment is not a valid
* ESLint disable directive.
*
* @example
*
* ```ts
* getEslintDisabledRules('eslint-disable')
* // Returns: { eslintDisableDirective: 'eslint-disable', rules: 'all' }
* ```
*
* @example
*
* ```ts
* getEslintDisabledRules('eslint-disable-next-line no-console, no-alert')
* // Returns: {
* // eslintDisableDirective: 'eslint-disable-next-line',
* // rules: ['no-console', 'no-alert']
* // }
* ```
*
* @example
*
* ```ts
* getEslintDisabledRules('regular comment')
* // Returns: null
* ```
*
* @param comment - Comment text to parse (without comment delimiters).
* @returns Object containing directive type and affected rules, or null if not
* a disable comment.
*/
function getEslintDisabledRules(comment) {
for (let eslintDisableDirective of eslintDisableDirectives) {
let disabledRules = getEslintDisabledRulesByType(
comment,
eslintDisableDirective,
)
if (disabledRules) {
return {
eslintDisableDirective,
rules: disabledRules,
}
}
}
return null
}
/**
* Extracts disabled rules from a comment for a specific ESLint directive type.
*
* Attempts to parse the comment as the specified ESLint disable directive.
* Returns the list of disabled rules if the comment matches the directive,
* 'all' if no specific rules are mentioned (global disable), or null if the
* comment doesn't match the directive pattern.
*
* @example
*
* ```ts
* getEslintDisabledRulesByType('eslint-disable', 'eslint-disable')
* // Returns: 'all'
* ```
*
* @example
*
* ```ts
* getEslintDisabledRulesByType(
* 'eslint-disable-line rule1, rule2',
* 'eslint-disable-line',
* )
* // Returns: ['rule1', 'rule2']
* ```
*
* @example
*
* ```ts
* getEslintDisabledRulesByType(
* 'eslint-disable-line rule1',
* 'eslint-disable-next-line',
* )
* // Returns: null (wrong directive type)
* ```
*
* @param comment - Comment text to parse.
* @param eslintDisableDirective - Specific directive type to match against.
* @returns Array of rule names, 'all' for global disable, or null if no match.
*/
function getEslintDisabledRulesByType(comment, eslintDisableDirective) {
let trimmedCommentValue = comment.trim()
if (eslintDisableDirective === trimmedCommentValue) {
return 'all'
}
let regexp = new RegExp(String.raw`^${eslintDisableDirective} ((?:.|\s)*)$`)
let disableRulesMatchValue = trimmedCommentValue.match(regexp)?.[1]
if (!disableRulesMatchValue) {
return null
}
return disableRulesMatchValue
.split(',')
.map(rule => rule.trim())
.filter(rule => !!rule)
}
export { getEslintDisabledRules }