Changeset 75244 in spip-zone


Ignore:
Timestamp:
Sep 3, 2013, 9:18:58 PM (6 years ago)
Author:
marcimat@…
Message:

Pour tout ce qui est @balise, @critere, @boucle et @filtre, on demande de ne mettre que le nom du tag, sans le nom de l'élément comme précédemment. C'est à dire :

  • avant : @balise AUTORISER
  • maintenant : @balise

Le nom est calculé à partir du nom de la fonction

File:
1 edited

Legend:

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

    r74916 r75244  
    1414use autodoc\Plugin\Core\Descriptor\PipelineDescriptor;
    1515
    16 use Cilex\Application;
     16use phpDocumentor\Descriptor\Validator\Error;
     17use Psr\Log\LogLevel;
     18
    1719
    1820/**
     
    4648     * Crée une collection avec les balises, critères, filtres et boucles de SPIP
    4749     *
    48      * Au passage, lorsqu'on peut prédire qu'une fonction est une balise, critère,
    49      * filtre ou boucle et que celle-ci n'a pas le tag correspondant dans
    50      * le phpdoc, on crée le tag manquant automatiquement.
    51      *
    52      * La plupart du temps, ça fonctionne. Mais dès fois ça crée de fausses balises.
    53      * À voir si on garde cela dans le temps.
     50     * On déduit le nom de l'élément à partir du nom de la fonction. Par exemple
     51     * `@balise` sur la fonction `balise_TRUC_dist()` utilisera `TRUC` comme nom.
     52     *
     53     * @note
     54     *   Au passage, lorsqu'on peut prédire qu'une fonction est une balise, critère,
     55     *   filtre ou boucle et que celle-ci n'a pas le tag correspondant dans
     56     *   le phpdoc, on crée le tag manquant automatiquement.
     57     *
     58     *   La plupart du temps, ça fonctionne. Mais dès fois ça crée de fausses balises.
     59     *   Il serait bon du coup de supprimer cette fonctionnalité.
    5460     *
    5561     * @param DescriptorAbstract $element
     
    7581                $tags = $function->getTags();
    7682
    77                 foreach (array('balise', 'critere', 'boucle', 'filtre') as $tag) {
    78 
    79                     // seulement si ce tag n'est pas déjà défini dans le phpdoc
    80                     if (!$tags->get($tag) and stripos($name, $tag . '_') === 0) {
    81                         $texte = preg_replace("/^$tag"."_|_dist$/", '', $name);
    82                         $addSpipTag = 'add' . $tag . 'Tag';
    83                         $this->$addSpipTag($function, $tag, $texte);
     83                foreach (array(
     84                    'balise'  => 'addBaliseTag',
     85                    'critere' => 'addCritereTag',
     86                    'boucle'  => 'addBoucleTag',
     87                    'filtre'  => 'addFiltreTag',
     88                    ) as $tag => $addSpipTagMethod)
     89                {
     90
     91                    // notre tag existe, on définit son titre
     92                    if ($element = $tags->get($tag)) {
     93                        $this->$addSpipTagMethod($function, $tag, $name);
     94                    }
     95                    // sinon, peut on déduire le type d'élément du nom de la fonction ?
     96                    elseif (stripos($name, $tag . '_') === 0) {
     97                        $this->$addSpipTagMethod($function, $tag, $name);
    8498                    }
    8599
     
    164178     * @param string $tagName
    165179     *     Nom du tag
    166      * @param string $description
    167      *     Description du tag
    168     **/
    169     private function addBaliseTag(DescriptorAbstract $element, $tagName, $description="") {
     180     * @param string $name
     181     *     Nom de l'élément
     182    **/
     183    private function addBaliseTag(DescriptorAbstract $element, $tagName, $name="") {
     184        $description = preg_replace("/^balise_|_dist$/", '', $name);
     185
    170186        // pas les fonctions des balises dynamiques
    171187        if (substr($description, -4) == '_dyn')  return;
     
    182198     * @param string $tagName
    183199     *     Nom du tag
     200     * @param string $name
     201     *     Nom de l'élément
     202    **/
     203    private function addBoucleTag(DescriptorAbstract $element, $tagName, $name="") {
     204        $description = preg_replace("/^boucle_|_dist$/", '', $name);
     205        $description = strtoupper($description);
     206        $this->addSpipTag($element, $tagName, $description);
     207    }
     208
     209    /**
     210     * Ajouter un filtre SPIP sur un élément
     211     *
     212     * @param DescriptorAbstract $element
     213     * @param string $tagName
     214     *     Nom du tag
     215     * @param string $name
     216     *     Nom de l'élément
     217    **/
     218    private function addFiltreTag(DescriptorAbstract $element, $tagName, $name="") {
     219        $description = preg_replace("/^filtre_|_dist$/", '', $name);
     220        $this->addSpipTag($element, $tagName, $description);
     221    }
     222
     223    /**
     224     * Ajouter un critère SPIP sur un élément
     225     *
     226     * @param DescriptorAbstract $element
     227     * @param string $tagName
     228     *     Nom du tag
     229     * @param string $name
     230     *     Nom de l'élément
     231    **/
     232    private function addCritereTag(DescriptorAbstract $element, $tagName, $name="") {
     233        $description = preg_replace("/^critere_|_dist$/", '', $name);
     234        $this->addSpipTag($element, $tagName, $description);
     235    }
     236
     237    /**
     238     * Ajouter un tag SPIP sur un élément
     239     *
     240     * @param DescriptorAbstract $element
     241     * @param string $tagName
     242     *     Nom du tag
    184243     * @param string $description
    185244     *     Description du tag
    186245    **/
    187     private function addBoucleTag(DescriptorAbstract $element, $tagName, $description="") {
    188         $description = strtoupper($description);
    189         $this->addSpipTag($element, $tagName, $description);
    190     }
    191 
    192     /**
    193      * Ajouter un filtre SPIP sur un élément
    194      *
    195      * @param DescriptorAbstract $element
    196      * @param string $tagName
    197      *     Nom du tag
    198      * @param string $description
    199      *     Description du tag
    200     **/
    201     private function addFiltreTag(DescriptorAbstract $element, $tagName, $description="") {
    202         $this->addSpipTag($element, $tagName, $description);
    203     }
    204 
    205     /**
    206      * Ajouter un critère SPIP sur un élément
    207      *
    208      * @param DescriptorAbstract $element
    209      * @param string $tagName
    210      *     Nom du tag
    211      * @param string $description
    212      *     Description du tag
    213     **/
    214     private function addCritereTag(DescriptorAbstract $element, $tagName, $description="") {
    215         $this->addSpipTag($element, $tagName, $description);
    216     }
    217 
    218     /**
    219      * Ajouter un tag SPIP sur un élément
    220      *
    221      * @param DescriptorAbstract $element
    222      * @param string $tagName
    223      *     Nom du tag
    224      * @param string $description
    225      *     Description du tag
    226     **/
    227246    private function addSpipTag(DescriptorAbstract $element, $tagName, $description="") {
    228247
    229         $tag = new SpipTagDescriptor($tagName);
    230         $tag->setDescription($description);
    231 
    232         // indiquer que ce tag est ajouté de façon automatique
    233         // ce qui permet dans twig / html / css de voir quelles fonctions
    234         // n'ont pas le tag déclaré
    235         $tag->setWasMissing(true);
    236 
    237         // ce tag n'existe pas encore
    238         $collection = new Collection();
    239         $collection->add($tag);
    240 
    241         $element->getTags()->set($tagName, $collection);
     248        // le tag existait déjà
     249        if ($collection = $element->getTags()->get($tagName)) {
     250            // il n'y en a qu'un (ou c'est une erreur)
     251            $collection->get(0)->setDescription($description);
     252            if (count($collection) > 1) {
     253                $element->getErrors()->add(
     254                    new Error(
     255                        LogLevel::NOTICE,
     256                        "Doublon de @$tagName dans " . $element->getName(),
     257                        $element->getLine()
     258                    )
     259                );
     260            }
     261        }
     262        // on non
     263        else {
     264
     265            $tag = new SpipTagDescriptor($tagName);
     266            $tag->setDescription($description);
     267
     268            // indiquer que ce tag est ajouté de façon automatique
     269            // ce qui permet dans twig / html / css de voir quelles fonctions
     270            // n'ont pas le tag déclaré
     271            $tag->setWasMissing(true);
     272
     273            // ce tag n'existe pas encore
     274            $collection = new Collection();
     275            $collection->add($tag);
     276
     277            $element->getTags()->set($tagName, $collection);
     278        }
     279
    242280    }
    243281
Note: See TracChangeset for help on using the changeset viewer.