Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(lint/noStaticElementInteractions): add rule #2981

Open
wants to merge 43 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
f2c640f
feat(lint/noStaticElementInteractions): add rule
ryo-ebata May 25, 2024
c7a7380
run just l
ryo-ebata May 25, 2024
97f3dcf
rename: elm → element_name
ryo-ebata May 30, 2024
1d673ef
refactor: inline has_truthy_ariahidden_attr method back into the main…
ryo-ebata May 30, 2024
e87e6ca
refactor: add detail information
ryo-ebata May 30, 2024
a0ef1f8
refactor: change HashMap to FxHashMap
ryo-ebata May 30, 2024
30b9656
refactor: delete elements have non-interactive role from valid test case
ryo-ebata Jun 2, 2024
543bb54
refactor: Swapped variable declarations
ryo-ebata Jun 2, 2024
946fb34
Refactor: Remove redundant code
ryo-ebata Jun 2, 2024
e9fe979
fix: Modify AriaServices::extract_attributes to handle dynamic values
ryo-ebata Jun 2, 2024
a43203c
refactor: Inline `is_interactive_handler_present` logic into `run` an…
ryo-ebata Jun 2, 2024
9388e95
refactor: modify markup text
ryo-ebata Jun 3, 2024
7668481
refactor: is role interactive check
ryo-ebata Jun 3, 2024
4fb76f0
add: code comment
ryo-ebata Jun 3, 2024
0214f1c
refactor: rule comments
ryo-ebata Jun 11, 2024
835bc34
rebase
ematipico Jun 12, 2024
6e08a1e
rebase and fix code blocks
ematipico Jun 12, 2024
981aa46
Update crates/biome_js_analyze/src/lint/nursery/no_static_element_int…
unvalley Jun 12, 2024
90d4bc9
fix: Commented out unnecessary overhead.
ryo-ebata Jun 15, 2024
f68bd87
refactor: Improved event handler mappings by using simple arrays and …
ryo-ebata Jun 15, 2024
d0177c2
refactor: Use constant for SECTION_ARIA_ATTRIBUTES to improve efficiency
ryo-ebata Jun 15, 2024
d31f8f1
refactor: use text_trimmed() for dynamic attribute values in extract_…
ryo-ebata Jun 15, 2024
182eae0
feat: add is_hidden_from_screen_reader()
ryo-ebata Jun 26, 2024
8f2039c
feat: add is_not_static_element method
ryo-ebata Jun 30, 2024
02c17a9
refactor: run just l
ryo-ebata Jun 30, 2024
6394998
rebase
ematipico Jul 4, 2024
7851727
refactor: delete commented out code
ryo-ebata Jul 4, 2024
e530ffc
refactor: new snap
ryo-ebata Jul 4, 2024
2dcbc5e
refactor: use split_whitespace method
ryo-ebata Jul 4, 2024
cabbf1c
refactor: Corrected description
ryo-ebata Jul 4, 2024
4b79dcd
Update crates/biome_js_analyze/src/lint/nursery/no_static_element_int…
unvalley Jul 4, 2024
6c17137
Merge branch 'main' into ryo-ebata/no-static-element-interactions
unvalley Jul 5, 2024
d09548f
refactor: delete redundant ref comments
ryo-ebata Jul 7, 2024
7063f9b
refactor: Change to even simpler code that works correctly
ryo-ebata Jul 7, 2024
d559479
chore: apply codegen
ryo-ebata Jul 7, 2024
d6f4ad3
chore: run just l
ryo-ebata Jul 8, 2024
201af4f
fix: extract_attributes() return enum AttributeValue
ryo-ebata Jul 11, 2024
ed851f1
Merge branch 'ryo-ebata/no-static-element-interactions' of https://gi…
ryo-ebata Jul 11, 2024
81c0e58
chore: run just l, just f, just gen-lint, just gen-binding
ryo-ebata Jul 11, 2024
d82f606
Merge branch 'main' into ryo-ebata/no-static-element-interactions
ryo-ebata Jul 11, 2024
503ae5f
Merge branch 'main' into ryo-ebata/no-static-element-interactions
ryo-ebata Jul 15, 2024
af73871
chore: just gen-lint
ryo-ebata Jul 15, 2024
d4b6279
Merge branch 'main' into ryo-ebata/no-static-element-interactions
ryo-ebata Jul 15, 2024
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
61 changes: 60 additions & 1 deletion crates/biome_aria/src/roles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,10 @@ impl<'a> AriaRoles {
"code" => &CodeRole as &dyn AriaRoleDefinition,
"datalist" => &ListBoxRole as &dyn AriaRoleDefinition,
"del" => &DeletionRole as &dyn AriaRoleDefinition,
"dd" => &DefinitionRole as &dyn AriaRoleDefinition,
"dt" => &TermRole as &dyn AriaRoleDefinition,
"dfn" => &TermRole as &dyn AriaRoleDefinition,
"mark" => &MarkRole as &dyn AriaRoleDefinition,
"dialog" => &DialogRole as &dyn AriaRoleDefinition,
"em" => &EmphasisRole as &dyn AriaRoleDefinition,
"figure" => &FigureRole as &dyn AriaRoleDefinition,
Expand All @@ -1035,6 +1038,7 @@ impl<'a> AriaRoles {
"nav" => &NavigationRole as &dyn AriaRoleDefinition,
"ul" | "ol" => &ListRole as &dyn AriaRoleDefinition,
"li" => &ListItemRole as &dyn AriaRoleDefinition,
"option" => &OptionRole as &dyn AriaRoleDefinition,
"optgroup" => &GroupRole as &dyn AriaRoleDefinition,
"output" => &StatusRole as &dyn AriaRoleDefinition,
"p" => &ParagraphRole as &dyn AriaRoleDefinition,
Expand All @@ -1047,6 +1051,16 @@ impl<'a> AriaRoles {
"table" => &TableRole as &dyn AriaRoleDefinition,
"textarea" => &TextboxRole as &dyn AriaRoleDefinition,
"tr" => &RowRole as &dyn AriaRoleDefinition,
// cell if a descendant of a <table> element,
// but this crate does not support checking a descendant of an element.
//
// ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td
"td" => &CellRole as &dyn AriaRoleDefinition,
// <th> element is able to be a rowheader, columnheader,
// but this crate does not support checking a descendant of an element.
//
// ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th
"th" => &RowHeaderRole as &dyn AriaRoleDefinition,
"time" => &TimeRole as &dyn AriaRoleDefinition,
"address" | "details" | "fieldset" => &GroupRole as &dyn AriaRoleDefinition,
"h1" | "h2" | "h3" | "h4" | "h5" | "h6" => &HeadingRole as &dyn AriaRoleDefinition,
Expand Down Expand Up @@ -1115,7 +1129,7 @@ impl<'a> AriaRoles {
}
}
"b" | "bdi" | "bdo" | "body" | "data" | "div" | "hgroup" | "i" | "q" | "samp"
| "small" | "span" | "u" => &GenericRole as &dyn AriaRoleDefinition,
| "small" | "span" | "u" | "pre" => &GenericRole as &dyn AriaRoleDefinition,
"header" | "footer" => {
// This crate does not support checking a descendant of an element.
// header (maybe BannerRole): https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/banner.html
Expand Down Expand Up @@ -1296,6 +1310,51 @@ impl<'a> AriaRoles {

role_candidate.concepts_by_role()
}

pub fn is_not_static_element(
&self,
element_name: &str,
attributes: &FxHashMap<String, Vec<String>>,
) -> bool {
if match element_name {
// embedded content
// ref: https://html.spec.whatwg.org/multipage/semantics.html#embedded-content
"canvas" | "embed" | "iframe" | "video" | "audio" => true,
// metadata content
// ref: https://html.spec.whatwg.org/multipage/semantics.html#document-metadata
"meta" | "link" | "base" | "title" | "basefont" | "head" => false,
// scripting content
// ref: https://html.spec.whatwg.org/multipage/semantics.html#scripting-content
"script" | "noscript" | "template" | "style" => false,
// No corresponding role
"dl" | "label" | "legend" | "ruby" | "pre" | "figcaption" | "br" => true,
_ => false,
} {
return true;
}

// if the element has a interactive role, it is considered interactive.
let role_name = if let Some(role) = attributes.get("role") {
if let Some(r) = role.first() {
self.get_role(r)
} else {
None
}
} else {
self.get_implicit_role(element_name, attributes)
};

if let Some(role) = role_name {
match role.type_name() {
"biome_aria::roles::PresentationRole" | "biome_aria::roles::GenericRole" => {
return false
}
_ => return true,
}
}

false
unvalley marked this conversation as resolved.
Show resolved Hide resolved
}
}

type ElementsAndAttributes<'a> = Option<Iter<'a, (&'a str, &'a [(&'a str, &'a str)])>>;
Expand Down
10 changes: 10 additions & 0 deletions crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading