Changeset 93016 in spip-zone


Ignore:
Timestamp:
Nov 19, 2015, 7:58:21 PM (4 years ago)
Author:
marcimat@…
Message:

Générer aussi pour les plugins les erreurs de références sur @see ou @uses.
Cependant, on tolère de mettre des @see ou @uses vers des fonctions de SPIP.

Dans ce cas là, un lien sera fait vers code.spip.net.
On ne pourra trouver que les fonctions présentes dans code.spip.net,
c'est à dire dans la version de SPIP en développement.

Location:
_galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/Compiler/Pass
Files:
2 edited

Legend:

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

    r75131 r93016  
    1616class SpipShare
    1717{
     18    const URL_CODE_SPIP  = "http://code.spip.net/autodoc/";
     19    const URL_FQSEN_SPIP = "http://code.spip.net/autodoc/fqsen_data.xml";
    1820
    1921    /**
     
    3739    }
    3840
    39    
     41
     42    /**
     43     * Liste des fqsen => url des éléments de SPIP
     44     *
     45     * @param ProjectDescriptor $project
     46     * @return bool
     47    **/
     48    public static function getAllSpipFqsen() {
     49        /**
     50         * @var bool|null $liste
     51        **/
     52        static $liste = null;
     53
     54        if (is_null($liste)) {
     55            $items = simplexml_load_file(SpipShare::URL_FQSEN_SPIP);
     56            $liste = new \ArrayObject();
     57            if ($items) {
     58                foreach ($items as $item) {
     59                    $liste[ (string)$item['fqsen'] ] = SpipShare::URL_CODE_SPIP . (string)$item['url'];
     60                }
     61                unset($item, $items);
     62            } else {
     63                // Impossible de récupérer le fichier :/
     64            }
     65        }
     66
     67        return $liste;
     68    }
     69
    4070}
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/Compiler/Pass/UsedByTagBuilder.php

    r93012 r93016  
    142142    private function findTagReferences(Collection $tags, DescriptorAbstract $element, FileDescriptor $file, $type='see') {
    143143        foreach ($tags as $tag) {
    144             $this->testReference($tag, $element, $file, $type);
     144            $this->corrigerReference($tag, $element, $file, $type);
    145145        }
    146146    }
     
    154154     * @return bool true si référence trouvée.
    155155    **/
    156     private function testReference(TagDescriptor $tag, DescriptorAbstract $element, FileDescriptor $file, $type = 'see') {
     156    private function corrigerReference(TagDescriptor $tag, DescriptorAbstract $element, FileDescriptor $file, $type = 'see') {
    157157
    158158        $reference = $tag->getReference();
    159 
    160159        if (!is_string($reference)) {
    161160            return true;
     
    213212                )
    214213            );
    215         }   
    216 
    217         return false;
    218     }
    219 
     214            return false;
     215        }
     216
     217        // Pour les plugins SPIP, on va tenter de trouver
     218        // si la référence correspond à un élément de SPIP, et
     219        // si c'est le cas, mettre un lien vers la doc de SPIP.
     220        if (!$this->corrigerReferenceSPIP($tag, $element, $file, $type)) {
     221            $element->getErrors()->add(
     222                new Error(
     223                    LogLevel::NOTICE,
     224                    "Référence de @$type introuvable dans " . $element->getName() . " : $reference",
     225                    $element->getLine()
     226                )
     227            );
     228            return false;
     229        }
     230
     231        return true;
     232    }
     233
     234
     235    /**
     236     * Corriger une référence de @see ou @uses manquante qui serait liée à SPIP
     237     *
     238     * @param TagDescriptor $tag
     239     * @param DescriptorAbstract $element
     240     * @param FileDescriptor $file
     241     * @return bool true si référence trouvée.
     242    **/
     243    private function corrigerReferenceSPIP(TagDescriptor $tag, DescriptorAbstract $element, FileDescriptor $file, $type = 'see') {
     244        $liste = SpipShare::getAllSpipFqsen();
     245
     246        $reference = $tag->getReference();
     247        $url = "";
     248
     249        // cas 1) la référence existe
     250        if (isset($liste[$reference])) {
     251            $url = $liste[$reference];
     252        }
     253        // cas 2) il manque \ dans la référence.
     254        elseif (isset($liste['\\' . $reference])) {
     255            $url = $liste['\\' . $reference];
     256        }
     257        // cas 3) ça fait référence à un fichier
     258        elseif (isset($liste['./' . $reference])) {
     259            $url = $liste['./' . $reference];
     260        }
     261        // cas 4) ça fait référence à une constante
     262        elseif (isset($liste['\\\\' . $reference])) {
     263            $url = $liste['\\\\' . $reference];
     264        }
     265
     266        if (!$url) {
     267            return false;
     268        }
     269
     270        $tag->setReference("");
     271        $description = "SPIP > [$reference]($url)";
     272        if ($d = $tag->getDescription()) {
     273            $description .= " : " . $d;
     274        }
     275        $tag->setDescription($description);
     276       
     277        return true;
     278    }
    220279
    221280
Note: See TracChangeset for help on using the changeset viewer.