Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
Add ValidTaxonomySlugSniff #2485
base: develop
Are you sure you want to change the base?
Add ValidTaxonomySlugSniff #2485
Changes from 2 commits
cdbb5c0
9b101b2
a5653a3
dcddda1
265d46f
5b7267e
4a1b3d0
dc545ee
2150d29
b829a79
ce18b1c
ad1a096
04922b8
5ec64ac
4e6f7f7
7b578cf
c8dbf93
46b5117
ad05b95
dc17ea7
d9e0ee8
05f42ca
2b2b097
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not keen on this "abstract methods to properties" setting of sniff specific information.
I'm not even sure this abstract is a good idea to begin with.
Abstract sniffs should generally not throw errors. That should be done in the actual sniffs themselves. Doing so in the abstract greatly reduces the re-usability of any such abstract (as the error may be needed for slug type A, but not for slug type B or the error may need to be worded slightly differently as the effect of the issue is different for a certain slug type etc etc).
And if you take out the errors and just keep the logic, there is barely anything left of the abstract.
The only acceptable way to throw errors from an abstract is via a separate method which can be overloaded in the concrete sniff.
Along the same lines, the abstract methods currently defined in this sniff may not apply for all slug types, so again, this reduces the re-usability.
Considering the original sniff already used class constants (for constant information) and removing those is no-go (breaking change), it could be considered to use class constants (and maybe the odd non-abstract method) as "feature toggles" + for the actual information.
I'm thinking along the lines of logic like this (pseudo code):
Having said that, I'm not convinced of the value of the abstract sniff for something this specific as checking slug name rules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please don't hard-code the parameter position in an abstract sniff. This reduces re-usability. This information should come from the concrete sniff.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The parameter name must be provided by the concrete sniff. If that's the case, the offset is superseded unless the parameter name is incorrect. Am I understanding this correctly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are totally misunderstanding this.
In PHP, parameters can be passed positionally, i.e.
my_function($first, $second, $third)
or by name, i.e.my_function($first, third: $value)
.To get the correct parameter from a function call and handle both ways of passing parameters, the
PassedParameters::getParameterFromStack()
method needs to know both the parameter name(s) and the parameter position.And as this is an abstract sniff, the sniff cannot rely on the "slug"-like parameter always being in the first position.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see! I thought this was checking against the name in the function declaration, rather than checking for named parameters. My mistake. If I had been more attentive, I would have noticed the line, 'First check for a named parameter.' As you may have noticed, I'm not very familiar with the WPCS or the PHPCS codebase. 😅 😇
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PHPCS has no access to the function declaration (unless the function is declared in the same file). For this type of code analysis, you only look at the function call.