-
-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clarify wiki documentation about naming of XML configuration files - standards vs custom rulesets #601
Comments
@joachim-n Thanks for opening this issue. The docs are actually correct, but I do agree this can be clarified some more. Basically it comes down to this:
Both of these are rulesets though and everything that is outlined on the Annotated Ruleset wiki page can be used in either of them. Does that clarify things ? |
Thanks for the quick response! I hadn't realised that a Standard and a ruleset are two different things. In the docs TOC on the RHS, there's a subheading 'For coding standard creators' and the first page under that is 'Annotated Ruleset'. I've now found the docs that explain the structure for standards in 'Coding Standard Tutorial', but that's under 'For sniff developers' heading, so I didn't look at that originally! |
Well, they are and they aren't 😅. That's what makes it complicated. For the ruleset file, there is not that much difference, other than in best practices. The biggest difference, from a technical point of view, is really that a Standard can contain sniffs and can be "installed" and once installed, it can be referenced by name in (other/project) rulesets, including referencing individual sniffs/error codes by name (and setting properties on those etc). What makes it complicated (terminology-wise) is that a "standard" from a functional point of view can be multiple things.
For the "Annotated Ruleset" page, typically, the audience would be the people working on standards as described in the second and third bullet above. ("coding standard creators"). For the "Coding Standard Tutorial" page, typically, the audience would be the people working on a standard as described in the fourth bullet ("sniff developers"), though I agree that there is information on that page which also needs to be read by people working on a standard as described in the third bullet. Does that help explain why things are under certain headers a little better ? I'll have a think about how to make all of this clearer, but this will probably have to wait until there is a proper website. I do find these type of questions useful though as input for that. Happy to have your help in writing things up for a website/reviewing content and structure (by the time I get to it). |
Just realized I forgot to update you, but I have added a new page "About Standards for PHP_CodeSniffer" to the wiki, which contains a short explanation about the difference between a project ruleset and a standard, as well as includes detailed information and examples about the naming conventions (and more). @joachim-n Would you mind having a read through that page to see if that sufficiently addressed the concerns from this issue ? |
That looks great! |
@joachim-n Thanks for reading though this. I'll try to answer your follow-up question, but AFAICS that wasn't part of the original question posed in this ticket.
Not necessarily. A rule is something you want to enforce for your codebase. But they don't necessarily map one-on-one to each other as different code bases define different rules and describe them in their own way, so you may need multiple sniffs to enforce a certain rule and you may only need a select part of a sniff (one or more error codes) to enforce another rule. The three-part names are sniff names and map directly to a sniff class. Let's take the following example rule: "PHP keywords should be in lowercase". So for a descriptive standard, like PSR-12, it is really important to be as specific as possible when defining the rules. At the same time, sniffs are often written in a modular manner to allow for multiple different preferences and it is up to the ruleset maintainer to then include/exclude the right sniffs and error codes to enforce the rules from a descriptive standard. Just to give an example: PSR-1 contains the following rule:
To enforce this rule, PHPCS uses two different sniffs and excludes one error code from one of those sniffs: <rule ref="Generic.PHP.DisallowAlternativePHPTags"/>
<rule ref="Generic.PHP.DisallowShortOpenTag"/>
<rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound">
<severity>0</severity>
</rule> The The Does that help ? |
Ah, I meant sniffs vs error codes... which shows how much I've misunderstood! I don't think it's especially confusing once it's explained but I think a piece of software like PHPCS is only used intermittently by most people, so things are quickly forgotten! It might be out of scope for this issue, but your explanation in your latest comment would be extremely useful in the docs! |
@joachim-n I agree, there's definitely a lot more documentation which would be helpful to be written. I'll keep the above in mind as one of those things ;-) I have a number of slidedecks/presentations about PHPCS, you may also find some of those useful. For some you should be able to find video's online, but the slidedecks are all available either way. For example: https://speakerdeck.com/jrf/dont-work-for-phpcs-make-phpcs-work-for-you-4 |
Oh and before I forget: considering the new wiki page addresses the original issue, can we close this one ? |
Yup, closing this one. |
Describe the bug
The docs page https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Annotated-Ruleset says:
I'm not sure this is true.
When I register a path to a standard with the 'installed_paths' config, I find the following:
In other words, this appears to be the required structure:
-- MyRuleset
--- ruleset.xml
Versions (please complete the following information)
Additional context
Add any other context about the problem here.
Please confirm
master
branch of PHP_CodeSniffer.The text was updated successfully, but these errors were encountered: