Check the hook callback parameter count ?
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par examiner le sniff AlwaysReturnInFilter existant ainsi que les points d’entrée add_filter() et add_action() documentés dans les références WordPress liées. Clarifiez comment les déclarations de callbacks et accepted_args doivent être comparés, notamment pour les paramètres optionnels et les closures, avant de définir le périmètre du sniff. Le travail est terminé lorsque le comportement est spécifié pour les exemples fournis de violation et de non-violation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What problem would the enhancement address for VIP?
Prevent potential fatal ArgumentCount errors.
Describe the solution you'd like
Inspired by the AlwaysReturnInFilter sniff, I was thinking that once the abstract hook/callback sniff exists, it wouldn't be that hard to create a sniff which would check synchronicity between the parameters requested from a hook-in and the callback function declaration.
This would apply to both add_filter() as well as add_action().
Such a sniff would also be a candidate for (eventually moving to) WPCS, but I wanted to discuss the general idea here first, largely to see if the potential issue described above actually occurs in real life situations.
What code should be reported as a violation?
// Error: Two parameters expected, one (implicit) requested.
add_filter( 'the_title', function( $title, $id ) {
// Do something.
return $title;
} );
// Warning: One parameter expected, two requested.
add_filter( 'the_title', function( $title ) {
// Do something.
return $title;
}, 10, 2 );
What code should not be reported as a violation?
// OK: Two parameters expected, two requested.
add_filter( 'the_title', function( $title, $id ) {
// Do something.
return $title;
}, 10, 2 );
// OK: Three parameters expected, two requested, but third parameter is optional,
// which can be done by design to allow direct calls to the function to pass it.
function prefix_title_filter( $title, $id, $optional = null ) {
// Do something.
return $title;
}
add_filter( 'the_title', 'prefix_title_filter', 10, 2 );
Additional context
Future scope
- Once a list of WP native hooks + the amount of parameters they pass is known (via a trait in WPCS for instance), an additional check could be added that the
$accepted_argsparameter value is never higher than the number of passed parameters when the hook is called.
function prefix_title_filter( $title, $id, $optional = null ) {
// Do something.
return $title;
}
// The `the_title` filter only passes two arguments max, so the code here is an error.
add_filter( 'the_title', 'prefix_title_filter', 10, 3 );
- For PHP native functions used in callbacks, reflection could be used to see how many (required) parameters these take and match that with the
$accepted_argsparameter. - For WP native functions a list based solution would be needed to do the same.
Relevant links
- Langage dominant
- PHP
- Étoiles
- 261
- Forks
- 44
- Merge moyen
- 3 j 9 h
- PR mergées (30 j)
- 10
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Automattic/VIP-Coding-Standards
-
Difficulté 3/5 1-2 jours Accessibilité débutants 48/100
Automattic/VIP-Coding-Standards#876 ·
Les mainteneurs répondent en général sous 1 jour
-
Breaking Change Type: Maintenance
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
Automattic/VIP-Coding-Standards#849 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
Automattic/VIP-Coding-Standards#832 ·
Les mainteneurs répondent en général sous 1 jour
-
WordPress.WP.AlternativeFunctions.file_system_operations error messages cannot be fixed anymoreOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 48/100
Automattic/VIP-Coding-Standards#823 ·
Les mainteneurs répondent en général sous 1 jour
-
Status: Awaiting feedback
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
Automattic/VIP-Coding-Standards#754 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de Automattic/VIP-Coding-Standards
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 71/100
Automattic/blocks-engine#3438 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
getgrav/grav-plugin-api#66 ·
-
Document Laravel 12/13 attributes that work in modules (UsePolicy, ObservedBy, UseFactory, Bind)Ouverteenhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
nWidart/laravel-modules#2236 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
Les mainteneurs répondent en général sous 1 jour