From 5a2b34610741a9d4579bb318978549fa8b9ba749 Mon Sep 17 00:00:00 2001 From: Nguyen Tran Date: Wed, 4 Jan 2023 12:43:34 -0500 Subject: [PATCH 01/12] Implemented checkng non-interactive elemenets for interactive roles --- src/compiler/compile/compiler_warnings.ts | 4 ++++ src/compiler/compile/nodes/Element.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/compiler/compile/compiler_warnings.ts b/src/compiler/compile/compiler_warnings.ts index 3f552eb8b88..e403e0a42ea 100644 --- a/src/compiler/compile/compiler_warnings.ts +++ b/src/compiler/compile/compiler_warnings.ts @@ -119,6 +119,10 @@ export default { code: 'a11y-no-interactive-element-to-noninteractive-role', message: `A11y: <${element}> cannot have role '${role}'` }), + a11y_no_noninteractive_element_to_interactive_role: (role: string | boolean, element: string) => ({ + code: 'a11y-no-noninteractive-element-to-interactive-role', + message: `A11y: Non-interactive element <${element}> cannot have interactive role '${role}'` + }), a11y_role_has_required_aria_props: (role: string, props: string[]) => ({ code: 'a11y-role-has-required-aria-props', message: `A11y: Elements with the ARIA role "${role}" must have the following attributes defined: ${props.map(name => `"${name}"`).join(', ')}` diff --git a/src/compiler/compile/nodes/Element.ts b/src/compiler/compile/nodes/Element.ts index 06ef1ba9c1a..4fe072c7b10 100644 --- a/src/compiler/compile/nodes/Element.ts +++ b/src/compiler/compile/nodes/Element.ts @@ -537,6 +537,11 @@ export default class Element extends Node { if (is_interactive_element(this.name, attribute_map) && (is_non_interactive_roles(current_role) || is_presentation_role(current_role))) { component.warn(this, compiler_warnings.a11y_no_interactive_element_to_noninteractive_role(current_role, this.name)); } + + // no-noninteractive-element-to-interactive-role + if (!is_interactive_element(this.name, attribute_map) && is_interactive_roles(current_role)) { + component.warn(this, compiler_warnings.a11y_no_noninteractive_element_to_interactive_role(current_role, this.name)); + } }); } From 3af087d50ff259a72414cfecd91d226623931ab0 Mon Sep 17 00:00:00 2001 From: Nguyen Tran Date: Wed, 4 Jan 2023 22:20:09 -0500 Subject: [PATCH 02/12] Add tests for the a11y noninteractive-element-to-interactive-role warning --- src/compiler/compile/nodes/Element.ts | 1 - .../input.svelte | 87 ++ .../warnings.json | 1037 +++++++++++++++++ 3 files changed, 1124 insertions(+), 1 deletion(-) create mode 100644 test/validator/samples/a11y-no-noninteractive-element-to-interactive-role/input.svelte create mode 100644 test/validator/samples/a11y-no-noninteractive-element-to-interactive-role/warnings.json diff --git a/src/compiler/compile/nodes/Element.ts b/src/compiler/compile/nodes/Element.ts index 4fe072c7b10..a4a946f6a5d 100644 --- a/src/compiler/compile/nodes/Element.ts +++ b/src/compiler/compile/nodes/Element.ts @@ -543,7 +543,6 @@ export default class Element extends Node { component.warn(this, compiler_warnings.a11y_no_noninteractive_element_to_interactive_role(current_role, this.name)); } }); - } } diff --git a/test/validator/samples/a11y-no-noninteractive-element-to-interactive-role/input.svelte b/test/validator/samples/a11y-no-noninteractive-element-to-interactive-role/input.svelte new file mode 100644 index 00000000000..f65bdec3e3c --- /dev/null +++ b/test/validator/samples/a11y-no-noninteractive-element-to-interactive-role/input.svelte @@ -0,0 +1,87 @@ + +
+