Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ use oxc_ast::{
use oxc_diagnostics::OxcDiagnostic;
use oxc_macros::declare_oxc_lint;
use oxc_span::Span;
use phf::{phf_map, phf_set};

use crate::{AstNode, context::LintContext, rule::Rule, utils::has_jsx_prop_ignore_case};

Expand Down Expand Up @@ -44,18 +43,21 @@ declare_oxc_lint!(
correctness
);

static ROLE_TO_REQUIRED_ARIA_PROPS: phf::Map<&'static str, phf::Set<&'static str>> = phf_map! {
"checkbox" => phf_set!{"aria-checked"},
"radio" => phf_set!{"aria-checked"},
"menuitemcheckbox" => phf_set!{"aria-checked"},
"menuitemradio" => phf_set!{"aria-checked"},
"combobox" => phf_set!{"aria-controls", "aria-expanded"},
"tab" => phf_set!{"aria-selected"},
"slider" => phf_set!{"aria-valuemax", "aria-valuemin", "aria-valuenow"},
"scrollbar" => phf_set!{"aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-orientation", "aria-controls"},
"heading" => phf_set!{"aria-level"},
"option" => phf_set!{"aria-selected"},
};
static ROLE_TO_REQUIRED_ARIA_PROPS: &[(&str, &[&str])] = &[
("checkbox", &["aria-checked"]),
("combobox", &["aria-controls", "aria-expanded"]),
("heading", &["aria-level"]),
("menuitemcheckbox", &["aria-checked"]),
("menuitemradio", &["aria-checked"]),
("option", &["aria-selected"]),
("radio", &["aria-checked"]),
(
"scrollbar",
&["aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-orientation", "aria-controls"],
),
("slider", &["aria-valuemax", "aria-valuemin", "aria-valuenow"]),
("tab", &["aria-selected"]),
];

impl Rule for RoleHasRequiredAriaProps {
fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {
Expand All @@ -71,8 +73,8 @@ impl Rule for RoleHasRequiredAriaProps {
};
let roles = role_values.value.split_whitespace();
for role in roles {
if let Some(props) = ROLE_TO_REQUIRED_ARIA_PROPS.get(role) {
for prop in props {
if let Some(props) = ROLE_TO_REQUIRED_ARIA_PROPS.iter().find(|r| r.0 == role) {
for prop in props.1 {
if has_jsx_prop_ignore_case(jsx_el, prop).is_none() {
ctx.diagnostic(role_has_required_aria_props_diagnostic(
attr.span, role, prop,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ declare_oxc_lint!(
);

// Create a static set for all function names
static FUNCTION_NAMES: [&str; 27] = [
static FUNCTION_NAMES: &[&str] = &[
"add",
// `React.createContext(undefined)`
"createContext",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,6 @@ source: crates/oxc_linter/src/tester.rs
╰────
help: Add missing aria props `aria-valuemax` to the element with `slider` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `slider` role is missing required aria props `aria-valuenow`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='slider' />
· ─────────────
╰────
help: Add missing aria props `aria-valuenow` to the element with `slider` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `slider` role is missing required aria props `aria-valuemin`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='slider' />
Expand All @@ -24,7 +17,7 @@ source: crates/oxc_linter/src/tester.rs

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `slider` role is missing required aria props `aria-valuenow`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='slider' aria-valuemax />
1 │ <div role='slider' />
· ─────────────
╰────
help: Add missing aria props `aria-valuenow` to the element with `slider` role.
Expand All @@ -36,6 +29,13 @@ source: crates/oxc_linter/src/tester.rs
╰────
help: Add missing aria props `aria-valuemin` to the element with `slider` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `slider` role is missing required aria props `aria-valuenow`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='slider' aria-valuemax />
· ─────────────
╰────
help: Add missing aria props `aria-valuenow` to the element with `slider` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `slider` role is missing required aria props `aria-valuenow`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='slider' aria-valuemax aria-valuemin />
Expand Down Expand Up @@ -113,19 +113,12 @@ source: crates/oxc_linter/src/tester.rs
╰────
help: Add missing aria props `aria-expanded` to the element with `combobox` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-valuemax`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.
help: Add missing aria props `aria-valuemax` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-valuemin`.
╭─[role_has_required_aria_props.tsx:1:6]
Expand All @@ -141,23 +134,16 @@ source: crates/oxc_linter/src/tester.rs
╰────
help: Add missing aria props `aria-valuenow` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-valuemax`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' />
· ────────────────
╰────
help: Add missing aria props `aria-valuemax` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax />
1 │ <div role='scrollbar' />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax />
1 │ <div role='scrollbar' />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.
Expand All @@ -178,14 +164,14 @@ source: crates/oxc_linter/src/tester.rs

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax aria-valuemin />
1 │ <div role='scrollbar' aria-valuemax />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax aria-valuemin />
1 │ <div role='scrollbar' aria-valuemax />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.
Expand All @@ -199,14 +185,14 @@ source: crates/oxc_linter/src/tester.rs

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax aria-valuenow />
1 │ <div role='scrollbar' aria-valuemax aria-valuemin />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemax aria-valuenow />
1 │ <div role='scrollbar' aria-valuemax aria-valuemin />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.
Expand All @@ -220,14 +206,14 @@ source: crates/oxc_linter/src/tester.rs

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemin aria-valuenow />
1 │ <div role='scrollbar' aria-valuemax aria-valuenow />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemin aria-valuenow />
1 │ <div role='scrollbar' aria-valuemax aria-valuenow />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.
Expand All @@ -239,6 +225,20 @@ source: crates/oxc_linter/src/tester.rs
╰────
help: Add missing aria props `aria-valuemax` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-orientation`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemin aria-valuenow />
· ────────────────
╰────
help: Add missing aria props `aria-orientation` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `scrollbar` role is missing required aria props `aria-controls`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='scrollbar' aria-valuemin aria-valuenow />
· ────────────────
╰────
help: Add missing aria props `aria-controls` to the element with `scrollbar` role.

⚠ eslint-plugin-jsx-a11y(role-has-required-aria-props): `heading` role is missing required aria props `aria-level`.
╭─[role_has_required_aria_props.tsx:1:6]
1 │ <div role='heading' />
Expand Down
2 changes: 1 addition & 1 deletion crates/oxc_linter/src/utils/jest/parse_jest_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ fn recurse_extend_node_chain<'a>(
}

// sorted list for binary search.
const VALID_JEST_FN_CALL_CHAINS: [[&str; 4]; 52] = [
static VALID_JEST_FN_CALL_CHAINS: &[[&str; 4]] = &[
["afterAll", "", "", ""],
["afterEach", "", "", ""],
["beforeAll", "", "", ""],
Expand Down
Loading