Merge pull request #1112 from sveltejs/gh-1110

do not run a11y validation on child component elements
pull/1105/merge
Rich Harris 8 years ago committed by GitHub
commit 24ea1afe78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -19,14 +19,29 @@ export default function validateHtml(validator: Validator, html: Node) {
const elementStack: Node[] = []; const elementStack: Node[] = [];
function visit(node: Node) { function visit(node: Node) {
a11y(validator, node, elementStack);
if (node.type === 'Element') { if (node.type === 'Element') {
if (meta.has(node.name)) { if (meta.has(node.name)) {
return meta.get(node.name)(validator, node, refs, refCallees); return meta.get(node.name)(validator, node, refs, refCallees);
} }
validateElement(validator, node, refs, refCallees, stack, elementStack); const isComponent =
node.name === ':Self' ||
node.name === ':Component' ||
validator.components.has(node.name);
validateElement(
validator,
node,
refs,
refCallees,
stack,
elementStack,
isComponent
);
if (!isComponent) {
a11y(validator, node, elementStack);
}
} else if (node.type === 'EachBlock') { } else if (node.type === 'EachBlock') {
if (validator.helpers.has(node.context)) { if (validator.helpers.has(node.context)) {
let c = node.expression.end; let c = node.expression.end;

@ -11,11 +11,9 @@ export default function validateElement(
refs: Map<string, Node[]>, refs: Map<string, Node[]>,
refCallees: Node[], refCallees: Node[],
stack: Node[], stack: Node[],
elementStack: Node[] elementStack: Node[],
isComponent: Boolean
) { ) {
const isComponent =
node.name === ':Self' || node.name === ':Component' || validator.components.has(node.name);
if (isComponent) { if (isComponent) {
validator.used.components.add(node.name); validator.used.components.add(node.name);
} }

@ -11,6 +11,6 @@ export default function validateHead(validator: Validator, node: Node, refs: Map
node.children.forEach(node => { node.children.forEach(node => {
if (node.type !== 'Element') return; // TODO handle {{#if}} and friends? if (node.type !== 'Element') return; // TODO handle {{#if}} and friends?
validateElement(validator, node, refs, refCallees, [], []); validateElement(validator, node, refs, refCallees, [], [], false);
}); });
} }

@ -0,0 +1,9 @@
<Widget scope="foo">
<input autofocus>
</Widget>
<script>
export default {
components: { Widget },
};
</script>

@ -0,0 +1,10 @@
[
{
"message": "A11y: Avoid using autofocus",
"loc": {
"column": 8,
"line": 2
},
"pos": 29
}
]
Loading…
Cancel
Save