Skip to content

Commit

Permalink
Refactor for consistency (#288)
Browse files Browse the repository at this point in the history
  • Loading branch information
ilia-kebets-sonarsource committed Feb 23, 2024
1 parent 23512a7 commit 7f27706
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* limitations under the License.
*/

package org.sonar.plugins.html.checks.accessibility;
package org.sonar.plugins.html.api.accessibility;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -80,7 +80,7 @@ public class Aria {
ARIA_PROPERTIES.put("aria-valuetext", new AriaProperty("aria-valuetext", AriaPropertyType.STRING));
}

static class AriaProperty {
public static class AriaProperty {
private final String name;
private final AriaPropertyType type;
private final Optional<Boolean> allowUndefined;
Expand Down Expand Up @@ -114,7 +114,7 @@ public Set<String> getValues() {
}
}

enum AriaPropertyType {
public enum AriaPropertyType {
BOOLEAN("boolean"),
STRING("string"),
TOKEN("token"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
import java.util.stream.Collectors;
import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
import org.sonar.plugins.html.checks.accessibility.Aria.AriaProperty;
import org.sonar.plugins.html.checks.accessibility.Aria.AriaPropertyType;
import org.sonar.plugins.html.api.accessibility.Aria.AriaProperty;
import org.sonar.plugins.html.api.accessibility.Aria.AriaPropertyType;
import org.sonar.plugins.html.node.TagNode;

import static org.sonar.plugins.html.checks.accessibility.Aria.ARIA_PROPERTIES;
import static org.sonar.plugins.html.api.accessibility.Aria.ARIA_PROPERTIES;

@Rule(key = "S6793")
public class AriaProptypesCheck extends AbstractPageCheck {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.sonar.check.Rule;
import org.sonar.plugins.html.api.Helpers;
import org.sonar.plugins.html.api.BufferStack;
import org.sonar.plugins.html.api.HtmlConstants;
import org.sonar.plugins.html.checks.AbstractPageCheck;
import org.sonar.plugins.html.node.DirectiveNode;
import org.sonar.plugins.html.node.ExpressionNode;
Expand All @@ -32,6 +31,8 @@
import java.util.Deque;
import java.util.List;

import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;

@Rule(key = "S6850")
public class HeadingHasAccessibleContentCheck extends AbstractPageCheck {
private final List<String> invalidAttributes = List.of(
Expand Down Expand Up @@ -60,7 +61,7 @@ public void startElement(TagNode node) {
String nodeName = node.getNodeName();

// tags that are not part of the known HTML tags list are considered as content
if (!HtmlConstants.KNOWN_HTML_TAGS.contains(nodeName)) {
if (!hasKnownHTMLTag(node)) {
bufferStack.write(nodeName);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,14 @@
*/
package org.sonar.plugins.html.checks.accessibility;

import java.util.Locale;
import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
import org.sonar.plugins.html.node.TagNode;

import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ELEMENTS;
import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.NON_INTERACTIVE_ROLES;
import static org.sonar.plugins.html.api.HtmlConstants.PRESENTATION_ROLES;
import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.hasNonInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.hasPresentationRole;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;

@Rule(key = "S6843")
public class NoInteractiveElementToNoninteractiveRoleCheck extends AbstractPageCheck {
Expand All @@ -34,13 +33,10 @@ public class NoInteractiveElementToNoninteractiveRoleCheck extends AbstractPageC

@Override
public void startElement(TagNode node) {
var role = node.getPropertyValue("role");
var tagName = node.getNodeName().toLowerCase(Locale.ROOT);
if (
role != null &&
KNOWN_HTML_TAGS.contains(tagName) &&
INTERACTIVE_ELEMENTS.contains(tagName) &&
(NON_INTERACTIVE_ROLES.contains(role) || PRESENTATION_ROLES.contains(role))
hasKnownHTMLTag(node) &&
isInteractiveElement(node) &&
(hasNonInteractiveRole(node) || hasPresentationRole(node))
) {
createViolation(node, MESSAGE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/
package org.sonar.plugins.html.checks.accessibility;

import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.hasAbstractRole;
import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;
Expand Down Expand Up @@ -47,8 +47,7 @@ public class NoNonInteractiveElementsWithHandlersCheck extends AbstractPageCheck

@Override
public void startElement(TagNode element) {
var tagName = element.getNodeName();
if (!KNOWN_HTML_TAGS.contains(tagName)) {
if (!hasKnownHTMLTag(element)) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
*/
package org.sonar.plugins.html.checks.accessibility;

import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ROLES;
import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.NON_INTERACTIVE_ELEMENTS;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;

import java.util.Locale;
import org.sonar.check.Rule;
Expand All @@ -33,13 +33,10 @@ public class NoNoninteractiveElementToInteractiveRoleCheck extends AbstractPageC

@Override
public void startElement(TagNode node) {
var role = node.getPropertyValue("role");
var tagName = node.getNodeName().toLowerCase(Locale.ROOT);
if (
role != null &&
KNOWN_HTML_TAGS.contains(tagName) &&
NON_INTERACTIVE_ELEMENTS.contains(tagName) &&
INTERACTIVE_ROLES.contains(role)
hasKnownHTMLTag(node) &&
isNonInteractiveElement(node) &&
hasInteractiveRole(node)
) {
createViolation(node, MESSAGE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
*/
package org.sonar.plugins.html.checks.accessibility;

import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ELEMENTS;
import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ROLES;
import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;

import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
Expand All @@ -32,7 +32,7 @@ public class NoNoninteractiveTabIndexCheck extends AbstractPageCheck {

@Override
public void startElement(TagNode node) {
if (!isHTMLTag(node) || isInteractiveElement(node) || hasInteractiveRole(node)) {
if (!hasKnownHTMLTag(node) || isInteractiveElement(node) || hasInteractiveRole(node)) {
return;
}

Expand All @@ -50,19 +50,4 @@ public void startElement(TagNode node) {
// ignore
}
}

private static boolean isHTMLTag(TagNode element) {
var tagName = element.getNodeName();
return KNOWN_HTML_TAGS.stream().anyMatch(tagName::equalsIgnoreCase);
}

private static boolean isInteractiveElement(TagNode element) {
var tagName = element.getNodeName();
return INTERACTIVE_ELEMENTS.stream().anyMatch(tagName::equalsIgnoreCase);
}

private static boolean hasInteractiveRole(TagNode element) {
var role = element.getAttribute("role");
return role != null && INTERACTIVE_ROLES.stream().anyMatch(role::equalsIgnoreCase);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/
package org.sonar.plugins.html.checks.accessibility;

import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.hasAbstractRole;
import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;
Expand Down Expand Up @@ -47,9 +47,7 @@ public class NoStaticElementInteractionsCheck extends AbstractPageCheck {

@Override
public void startElement(TagNode element) {
var tagName = element.getNodeName();

if (!KNOWN_HTML_TAGS.contains(tagName)) {
if (!hasKnownHTMLTag(element)) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
<ruby role="button" />
<s role="button" />
<samp role="button" />
<script role="button" />
<script role="button" ></script>
<section role="button" />
<small role="button" />
<source role="button" />
Expand Down

0 comments on commit 7f27706

Please sign in to comment.