web-accessibility icon indicating copy to clipboard operation
web-accessibility copied to clipboard

Lint for duplicate id's

Open ecerta opened this issue 6 years ago • 7 comments
trafficstars

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 avatar Jan 18 '19 14:01 ecerta

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.

ecerta avatar Jan 18 '19 15:01 ecerta

@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 avatar Jan 23 '19 20:01 mvdschee

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.

mvdschee avatar Feb 04 '19 10:02 mvdschee

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

ecerta avatar Feb 04 '19 13:02 ecerta

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 avatar Feb 05 '19 13:02 mvdschee

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 😞

mvdschee avatar Feb 17 '19 16:02 mvdschee

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.

ecerta avatar Feb 17 '19 16:02 ecerta