From 8bb25901b9510cf5ded8dadfc03fe92a4322f848 Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 15:29:46 +0300 Subject: [PATCH 1/6] [Fix] disallow extra properties in rule options --- src/rules/label-has-for.js | 1 + src/util/schemas.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/rules/label-has-for.js b/src/rules/label-has-for.js index 46081c977..f2d8eb957 100644 --- a/src/rules/label-has-for.js +++ b/src/rules/label-has-for.js @@ -26,6 +26,7 @@ const schema = { }, allowChildren: { type: 'boolean' }, }, + additionalProperties: false, }; // Breadth-first search, assuming that HTML for forms is shallow. function validateNesting(node) { diff --git a/src/util/schemas.js b/src/util/schemas.js index ba41df63a..6c8226702 100644 --- a/src/util/schemas.js +++ b/src/util/schemas.js @@ -30,4 +30,5 @@ export const generateObjSchema = (properties = {}, required = undefined) => ({ type: 'object', properties, required, + additionalProperties: false, }); From 37fdcee99cbd64f0689cd25ea9f34207997092bb Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 15:41:07 +0300 Subject: [PATCH 2/6] [Fix] remove unused rule options from configs --- src/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/index.js b/src/index.js index 980081e69..9619a61c0 100644 --- a/src/index.js +++ b/src/index.js @@ -81,7 +81,6 @@ const recommendedRules = { 'tree', 'treegrid', ], - includeRoles: ['alert', 'dialog'], }, ], 'jsx-a11y/heading-has-content': 'error', @@ -235,7 +234,6 @@ const strictRules = { 'tree', 'treegrid', ], - includeRoles: ['alert', 'dialog'], }, ], 'jsx-a11y/heading-has-content': 'error', From b72a743b90707bf46dd240742979e9b80d3a669a Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 15:50:06 +0300 Subject: [PATCH 3/6] [Fix] allow additionalProperties in `no-noninteractive-element-interactions` --- src/rules/no-noninteractive-element-interactions.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rules/no-noninteractive-element-interactions.js b/src/rules/no-noninteractive-element-interactions.js index f31c0cddf..cf4131f79 100644 --- a/src/rules/no-noninteractive-element-interactions.js +++ b/src/rules/no-noninteractive-element-interactions.js @@ -48,7 +48,16 @@ export default ({ url: 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/HEAD/docs/rules/no-noninteractive-element-interactions.md', description: 'Non-interactive elements should not be assigned mouse or keyboard event listeners.', }, - schema: [schema], + schema: [{ + ...schema, + additionalProperties: { + type: 'array', + items: { + type: 'string', + }, + uniqueItems: true, + }, + }], }, create: (context: ESLintContext): ESLintVisitorSelectorConfig => { From ca19a4d05372795cb2502e252d77e48e67f0fbc3 Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 15:58:16 +0300 Subject: [PATCH 4/6] [Fix] add missing property to `no-noninteractive-tabindex` options schema --- src/rules/no-noninteractive-tabindex.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rules/no-noninteractive-tabindex.js b/src/rules/no-noninteractive-tabindex.js index 796b44cd8..60a3fe38c 100644 --- a/src/rules/no-noninteractive-tabindex.js +++ b/src/rules/no-noninteractive-tabindex.js @@ -34,6 +34,9 @@ const schema = generateObjSchema({ ...arraySchema, description: 'An array of HTML tag names', }, + allowExpressionValues: { + type: 'boolean', + }, }); export default ({ From d3371da80777375de49f26d15272ede8168f8058 Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 15:59:51 +0300 Subject: [PATCH 5/6] [Fix] add missing property to `no-static-element-interactions` options schema --- src/rules/no-static-element-interactions.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rules/no-static-element-interactions.js b/src/rules/no-static-element-interactions.js index 038d7c1e4..6a3d186d4 100644 --- a/src/rules/no-static-element-interactions.js +++ b/src/rules/no-static-element-interactions.js @@ -37,6 +37,9 @@ const defaultInteractiveProps = [].concat( ); const schema = generateObjSchema({ handlers: arraySchema, + allowExpressionValues: { + type: 'boolean', + }, }); export default ({ From 15b671091c921297be3392fc56ede8f262156d89 Mon Sep 17 00:00:00 2001 From: Andrew Kazakov Date: Mon, 14 Jul 2025 16:04:21 +0300 Subject: [PATCH 6/6] [Fix] correctly pass options in `label-has-for` test --- __tests__/src/rules/label-has-for-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/src/rules/label-has-for-test.js b/__tests__/src/rules/label-has-for-test.js index aeb536c03..d476d1d68 100644 --- a/__tests__/src/rules/label-has-for-test.js +++ b/__tests__/src/rules/label-has-for-test.js @@ -96,7 +96,7 @@ ruleTester.run('label-has-for', rule, { { code: '', options: optionsRequiredNesting }, { code: '', options: optionsRequiredEvery }, { code: '', options: optionsChildrenAllowed }, - { code: 'Test!', options: [assign({}, optionsComponents, optionsChildrenAllowed)] }, + { code: 'Test!', options: [assign({}, optionsComponents[0], optionsChildrenAllowed[0])] }, { code: '', options: optionsChildrenAllowed }, { code: '', options: optionsChildrenAllowed }, { code: '', options: optionsChildrenAllowed },