Skip to content
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

Feature suggestion: --validate to check ruleset against XSD #2188

Closed
jrfnl opened this issue Oct 17, 2018 · 2 comments
Closed

Feature suggestion: --validate to check ruleset against XSD #2188

jrfnl opened this issue Oct 17, 2018 · 2 comments

Comments

@jrfnl
Copy link
Contributor

jrfnl commented Oct 17, 2018

PR #1433 added an XML schema file to the repo and while people can use it with external tools to validate their custom rulesets/external standards, I think it could be a nice feature to offer ruleset validation against the XSD file from within PHPCS itself.

I'm thinking a --validate command line option.

  • When called like phpcs --validate=filename.xml it would validate that specific file.
  • When called like phpcs --validate=*/Standards/*/ruleset.xml it would validate all files which match the pattern.
  • When called without a value, like phpcs --validate, it would look for an [.]phpcs.xml[.dist] file in the same way PHPCS does for a normal run and validate such a file if found.
  • When called in combination with other command line options, like for a normal run, it would validate the ruleset(s) and then continue to the normal PHPCS run, providing the ruleset(s) are valid.

Validation could be done using the XMLReader PHP extension which is shipped with PHP by default and enabled by default since PHP 5.1.2.
There are caveats regarding whether libxml is compiled with PHP with schema support, but in case it's not, I suppose an error message could be thrown saying so.

While the initial implementation I'm proposing would be a command-line option, I imagine that ruleset validation could possibly become a standard part of the ruleset processing as of PHPCS 4.0.

Opinions ?

Inspired by:

Related to and could partially replace #2187.

@gsherwood
Copy link
Member

I like everything about this.

@gsherwood gsherwood added this to Backlog in PHPCS v3 Development via automation Oct 17, 2018
jrfnl added a commit to jrfnl/PHP_CodeSniffer that referenced this issue Dec 23, 2018
While the `libxml` error messages are far from perfect, they at least give some clue as to where to look for the error in a ruleset file.

This PR changes two things:
1. Previously, a PHP warning would also be thrown for a ruleset of a standard which is not used in the current run.
    This warning is now silenced.
2. However, for the standards and rulesets actually _used_ by the current run, any potential warnings are made more readable and will now also mention the file in which they were encountered.
    Previously the output would be along the lines of:
    ```
    Warning: simplexml_load_string(): Entity: line 82: parser error : Opening and ending tag mismatch: rule line 80 and rue in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    Warning: simplexml_load_string():       </rue> in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    Warning: simplexml_load_string():             ^ in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    ```
    Now, it will look like:
    ```
    ERROR: Ruleset /path/to/ruleset.xml is not valid
    - On line 82, column 10: Opening and ending tag mismatch: rule line 80 and rue
    ```

Loosely related to squizlabs#2188
jrfnl added a commit to jrfnl/PHP_CodeSniffer that referenced this issue Dec 23, 2018
While the `libxml` error messages are far from perfect, they at least give some clue as to where to look for the error in a ruleset file.

This PR changes two things:
1. Previously, a PHP warning would also be thrown for a ruleset of a standard which is not used in the current run.
    This warning is now silenced.
2. However, for the standards and rulesets actually _used_ by the current run, any potential warnings are made more readable and will now also mention the file in which they were encountered.
    Previously the output would be along the lines of:
    ```
    Warning: simplexml_load_string(): Entity: line 82: parser error : Opening and ending tag mismatch: rule line 80 and rue in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    Warning: simplexml_load_string():       </rue> in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    Warning: simplexml_load_string():             ^ in /path/to/PHP_CodeSniffer/src/Util/Standards.php on line 119
    ```
    Now, it will look like:
    ```
    ERROR: Ruleset /path/to/ruleset.xml is not valid
    - On line 82, column 10: Opening and ending tag mismatch: rule line 80 and rue
    ```

Loosely related to squizlabs#2188
@jrfnl
Copy link
Contributor Author

jrfnl commented Dec 2, 2023

Closing as replaced by PHPCSStandards/PHP_CodeSniffer#14

@jrfnl jrfnl closed this as not planned Won't fix, can't repro, duplicate, stale Dec 2, 2023
PHPCS v3 Development automation moved this from Idea Bank to Ready for Release Dec 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
PHPCS v3 Development
Ready for Release
Development

No branches or pull requests

2 participants