Changeset 93066 in spip-zone


Ignore:
Timestamp:
Nov 21, 2015, 3:27:54 PM (4 years ago)
Author:
marcimat@…
Message:

Pour que les erreurs ne soient pas compatibilisées en double, il faut les créer
au moment de la validation, avec des contraintes indiquées par des classes spécifiques.

Une erreur dans phpDocumentor fait que certaines erreurs sur les tags @param ne sont
pas compatibilisées et du coup, j'avais une fonction pour les ajouter, mais pas
dans la méthodologie attendue par phpDocumentor, ce qu'il fait qu'elles apparraissent
en double.

Après une (assez longue) analyse, la source du problème qui fait que phpDocumentor
n'analysait pas certaines erreurs est trouvée, et un patch est proposé
(https://github.com/phpDocumentor/phpDocumentor2/issues/1677)

En attendant son intégration un jour éventuel, on envoie ici,
sous le bon format de quoi trouver les erreurs en question.
Et on nettoie au passage l'ancien mécanisme que j'utilisais.

Location:
_galaxie_/code.spip.net/autodoc/trunk/src/autodoc
Files:
6 added
4 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromSpip.php

    r92923 r93066  
    3030            ->addOption('topnav', null, InputOption::VALUE_OPTIONAL, "URL d'un fichier JS à charger dans le head html. <comment>Exemple : '//boussole.spip.net/?page=spipnav.js&lang=fr'</comment>")
    3131            ->addOption('avec_boussole_spip', null, InputOption::VALUE_NONE, "Intègre le JS de la boussole SPIP en entête topnav.")
     32            ->addOption('force', '', InputOption::VALUE_NONE, "Force l'analyse de tous les fichiers, même s'ils n'ont pas été modifiés.")
    3233#            ->addOption('titre', '', InputOption::VALUE_OPTIONAL, 'Titre du projet. Utilise le nom de la branche par défaut.')
    3334#            ->addOption('description',  '', InputOption::VALUE_OPTIONAL, 'Description du projet. Prédéfini sur le titre par défaut.')
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/Compiler/Pass/ErrorsCollector.php

    r82278 r93066  
    3434    public function execute(ProjectDescriptor $project)
    3535    {
    36 
    37         // en attendant la version 2.1.0 de phpDocumentor, recalculons les erreurs oubliées
    38         $this->retrouver_erreurs_absentes($project);
    39 
    4036        $liste = array();
    4137
     
    8379    }
    8480
    85     /**
    86      * Calculer les erreurs sur les paramètres des fonctions de fichiers ou méthodes de classes.
    87      *
    88      * On recherche les arguments de fonctions qui ne sont pas définis en
    89      * tant que @param. On vérifie qu'ils sont aussi placés dans le bon ordre.
    90      * Également qu'il n'y ait pas de @param en trop.
    91      *
    92      * @param DescriptorAbstract $element
    93      * @param Collection $functions
    94     **/
    95     private function retrouver_erreurs_absentes_element($element, $functions) {
    96         foreach ($functions as $function) {
    97             $params    = $function->getTags()->get('param');
    98             $arguments = $function->getArguments();
    99             $key = 0;
    100 
    101             // trouver les arguments non définis ou erronnés
    102             if ($arguments and $arguments->count()) {
    103                 foreach ($arguments as $argument) {
    104                     $name = $argument->getName();
    105 
    106                     if (!$params OR !$param = $params->get($key)) {
    107                         $element->getErrors()->add(
    108                             new Error(
    109                                 LogLevel::ERROR,
    110                                 'PPC:ERR-50015',
    111                                 $function->getLine(),
    112                                 array($name, $element->getName())
    113                             )
    114                         );
    115                     }
    116 
    117                     elseif ($param->getVariableName() != $name) {
    118                         $element->getErrors()->add(
    119                             new Error(
    120                                 LogLevel::ERROR,
    121                                 'PPC:ERR-50014',
    122                                 $function->getLine(),
    123                                 array($name, $param->getVariableName(), $element->getName())
    124                             )
    125                         );
    126                     }
    127                     $key++;
    128                 }
    129             }
    130 
    131             // trouver les paramètres en trop
    132             if ($params and $params->count()) {
    133                 foreach ($params as $key => $param) {
    134                     $name = $param->getVariableName();
    135                     if (!$arguments OR !$arguments->get($name)) {
    136                         $element->getErrors()->add(
    137                             new Error(
    138                                 LogLevel::NOTICE,
    139                                 'PPC:ERR-50013',
    140                                 $function->getLine(),
    141                                 array($name, $element->getName())
    142                             )
    143                         );
    144                     }
    145                 }
    146             }
    147         }
    148 
    149     }
    15081}
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/Compiler/Pass/GetTopNav.php

    r92919 r93066  
    5151    public function execute(ProjectDescriptor $project)
    5252    {
     53        if (!$this->app['config']->getOptions()) {
     54            return;
     55        }
     56
    5357        $topnav = $this->app['config']->getOptions()->get('topnav');
    5458        if (!$topnav OR !$topnav->getValue()) return;
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/ServiceProvider.php

    r83635 r93066  
    2222use autodoc\Plugin\Core\Compiler\Pass\Statistics;
    2323use autodoc\Plugin\Core\Compiler\Pass\GetTopNav;
    24 
     24use autodoc\Plugin\Core\Descriptor\Validator\Constraints as phpDocAssert;
    2525
    2626class ServiceProvider implements \Cilex\ServiceProviderInterface
     
    6767        $app['transformer.routing.queue']->insert(new Router\ZoraRouter(), 20000);
    6868
     69        // 3 Ajouter des validations pour compléter les erreurs de phpdoc
     70        // Le temps que https://github.com/phpDocumentor/phpDocumentor2/issues/1677 soit corrigé
     71        $validator = $app['validator'];
    6972
    70         // 3 Compiler des informations supplémentaires, tel que l'arborescence des dossiers
     73        $functionMetadata  = $validator->getMetadataFor('phpDocumentor\Descriptor\FunctionDescriptor');
     74        $methodMetadata    = $validator->getMetadataFor('phpDocumentor\Descriptor\MethodDescriptor');
     75
     76        $functionMetadata->addConstraint(new phpDocAssert\Functions\CompleteArgumentsValid());
     77        $methodMetadata->addConstraint(new phpDocAssert\Functions\CompleteArgumentsValid());
     78
     79        // 4 Compiler des informations supplémentaires, tel que l'arborescence des dossiers
    7180        $app['compiler']->insert(new DirectoryTreeBuilder(), DirectoryTreeBuilder::COMPILER_PRIORITY);
    7281        $app['compiler']->insert(new UsedByTagBuilder(),     UsedByTagBuilder::COMPILER_PRIORITY);
Note: See TracChangeset for help on using the changeset viewer.