Changeset 74732 in spip-zone


Ignore:
Timestamp:
Aug 13, 2013, 12:11:10 AM (6 years ago)
Author:
marcimat@…
Message:

Traiter les erreurs oubliées par la version actuelle de phpDocumentor (en attendant la 2.1.0).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/Compiler/Pass/ErrorsCollector.php

    r74730 r74732  
    1010use phpDocumentor\Descriptor\Validator\Error;
    1111use phpDocumentor\Descriptor\ProjectDescriptor;
     12use Psr\Log\LogLevel;
    1213
    1314use autodoc\Plugin\Core\Descriptor\Validator\ErrorCollector;
     
    3435    {
    3536
     37        // en attendant la version 2.1.0 de phpDocumentor, recalculons les erreurs oubliées
     38        $this->retrouver_erreurs_absentes($project);
     39
    3640        $liste = array();
    3741
    3842        foreach ($project->getFiles() as $file) {
    39 
    4043            $errors = $file->getAllErrors()->getAll();
    4144            usort($errors, array($this, 'trier'));
     
    6366        return ($a->getLine() < $b->getLine());
    6467    }
     68
     69    /**
     70     * Recalculer les erreurs oubliées entre phpDocumentor 2.0.0a13 et 2.0.0
     71     *
     72     * On recherche les arguments de fonctions qui ne sont pas définis en
     73     * tant que @param. On vérifie qu'ils sont aussi placés dans le bon ordre.
     74     * Également qu'il n'y ait pas de @param en trop.
     75     *
     76     * @param ProjectDescriptor $project
     77    **/
     78    private function retrouver_erreurs_absentes(ProjectDescriptor $project) {
     79        foreach ($project->getFiles() as $file) {
     80            $this->retrouver_erreurs_absentes_element($file, $file->getFunctions());
     81        }
     82    }
     83
     84    private function retrouver_erreurs_absentes_element($element, $functions) {
     85        foreach ($functions as $function) {
     86            $params    = $function->getTags()->get('param');
     87            $arguments = $function->getArguments();
     88            $key = 0;
     89
     90            // trouver les arguments non définis ou erronnés
     91            if ($arguments and $arguments->count()) {
     92                foreach ($arguments as $argument) {
     93                    $name = $argument->getName();
     94                    $param = $params->get($key);
     95
     96                    if (!$param) {
     97                        $element->getErrors()->add(
     98                            new Error(
     99                                LogLevel::ERROR,
     100                                'PPC:ERR-50015',
     101                                $function->getLine(),
     102                                array($name, $element->getName())
     103                            )
     104                        );
     105                    }
     106
     107                    elseif ($param->getVariableName() != $name) {
     108                        $element->getErrors()->add(
     109                            new Error(
     110                                LogLevel::ERROR,
     111                                'PPC:ERR-50014',
     112                                $function->getLine(),
     113                                array($name, $param->getVariableName(), $element->getName())
     114                            )
     115                        );
     116                    }
     117                    $key++;
     118                }
     119            }
     120
     121            // trouver les paramètres en trop
     122            if ($params and $params->count()) {
     123                foreach ($params as $key => $param) {
     124                    $name = $param->getVariableName();
     125                    if (!$arguments OR !$arguments->get($name)) {
     126                        $element->getErrors()->add(
     127                            new Error(
     128                                LogLevel::NOTICE,
     129                                'PPC:ERR-50013',
     130                                $function->getLine(),
     131                                array($name, $element->getName())
     132                            )
     133                        );
     134                    }
     135                }
     136            }
     137        }
     138
     139    }
    65140}
Note: See TracChangeset for help on using the changeset viewer.