mvdschee / web-accessibility

A Visual Studio Extension for Web accessibility
https://marketplace.visualstudio.com/items?itemName=MaxvanderSchee.web-accessibility
MIT License
70 stars 12 forks source link

Lint for duplicate id's #11

Open ecerta opened 5 years ago

ecerta commented 5 years ago

Is your feature request related to a problem? Please describe. Screen readers depend on the id attribute to correctly associate labels, aria-describedby's and aria-labelledby's. Duplicate id's confuse them, and are just plain old bad code.

Describe the solution you'd like Have the linter check if an id has been used before on the page, and throw an error if so.

Describe alternatives you've considered It's possible a user is using other good HTML linters to check for this issue, but I think it's still worth including in this one.

ecerta commented 5 years ago

WCAG 4.1.1. states that the site should pass a parsing check (no stray or mismatched tags, for instance) so really any kind of good HTML linting could be a welcome change, but I picked the one the most likely to actually impact a screen reader user.

mvdschee commented 5 years ago

@ecerta Thanks for the report, I will take a look in a couple of days and will give a better response than this message, I'm insanely busy at the moment!

mvdschee commented 5 years ago

I have started implementing the check, but it's going to be a very resource intensive functionality. This is because every time it finds an id its going to trigger the check and has to do a full document search for duplicated id's. This is not a performance problem at the moment, but I'm almost sure it's going to be with multiple checks that need to do a full document search. So if you have any suggestions on how to tackle this problem, I'm all ears.

ecerta commented 5 years ago

What if every time any id is found it's added to an array, and then just that array is checked?

mvdschee commented 5 years ago

That is possible but requires a function that keeps track of those id's that are already in the array and remove them if they changed. I think that would be a complicated function with a logic that will break. I think I will have to do a refactor for those sort of cases and deal with them separately.

mvdschee commented 5 years ago

I have tried to implement the logic for duplicated values, in this case for the ID's, but I keep running into problems with the collection of the ID's. So for the next update (0.2.4), this functionality will be held back. I have started a new branch to refactor the whole setup for all the rules, and the feature for duplicated values will be part of the major update (0.3.0). So, for now, This issue will stay open a little longer 😞

ecerta commented 5 years ago

This isn't extremely high priority so don't kill yourself over it. If there's a way to do it it'd be a nice perk but if not, there's other ways to make the linter more useful.