By: Tom Sydney Kerckhove <syd@cs-syd.eu>
Say nothing when the name names no type, or names one nobody can build Running the rule over nix-ci had it name a type on no basis twice over. That repository declares three ClientSecret newtypes, one per forge, because one forge's client secret is not another's. The rule told a reader to use "ClientSecret" and chose between the three by the order their rows came back in. A name the project declares in more than one module names no type, so it is not in the lexicon at all now. Counted over modules rather than rows, because two modules declaring one name is the ambiguity and one module read twice is not. It also named Width for a field holding a Word, where Width is exported without its constructor on purpose so that a panel can only have a width the grid has room for. A constructor leaves a module only inside its type's subordinate list, so a bare entry in an export list is the type and not the constructor however alike they are spelled, and a type nothing outside can wrap a value in is not a fix any field can apply. That is the same thing the dependency walk already asks: do not name what the site cannot use. The entry has to be about the type in question, too, or one Thing (..) anywhere in a module answers for every constructor the module declares. Four of this rule's eleven findings in nix-ci remain wrong and none of them is wrong in a way a checker can see: a GitLab payload's username is not the validated account name this project parses, and a cursor's row height in grid units is not a panel's declared height. Those want annotations, which is what the rule's bucket is for, and they are the reason it is not the error-grade rule it was argued for.