Changeset 74902 in spip-zone


Ignore:
Timestamp:
Aug 23, 2013, 9:41:14 AM (6 years ago)
Author:
marcimat@…
Message:

Lister les utilisations de pipelines
+ permettre au filtre |trier de trier sur 2 champs
+ déport de code identique dans une inclusion

Location:
_galaxie_/code.spip.net/autodoc/trunk
Files:
3 added
12 edited

Legend:

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

    r74893 r74902  
    3636    public function execute(ProjectDescriptor $project)
    3737    {
     38        $project->getIndexes()->set('spip', new Collection());
     39
     40        $this->collecter_balises_et_consoeurs($project);
     41        $this->collecter_pipelines($project);
     42    }
     43
     44    /**
     45     * Crée une collection avec les balises, critères, filtres et boucles de SPIP
     46     *
     47     * Au passage, lorsqu'on peut prédire qu'une fonction est une balise, critère,
     48     * filtre ou boucle et que celle-ci n'a pas le tag correspondant dans
     49     * le phpdoc, on crée le tag manquant automatiquement.
     50     *
     51     * La plupart du temps, ça fonctionne. Mais dès fois ça crée de fausses balises.
     52     * À voir si on garde cela dans le temps.
     53     *
     54     * @param DescriptorAbstract $element
     55     * @param string $tagName
     56     *     Nom du tag
     57     * @param string $description
     58     *     Description du tag
     59    **/
     60    public function collecter_balises_et_consoeurs($project) {
    3861        // collecteur
    3962        $liste = array(
     
    6992        }
    7093
    71         $project->getIndexes()->set('spip', new Collection($liste));
    72     }
     94        $spip = $project->getIndexes()->get('spip');
     95        foreach ($liste as $type => $collection) {
     96            $spip->set($type, $collection);
     97        }
     98    }
     99
     100
     101
     102    /**
     103     * Crée une collection avec les appels de pipelines de SPIP
     104     *
     105     * On recense toutes les fonctions qui sont traversées par un
     106     * pipeline
     107     *
     108     * @param DescriptorAbstract $element
     109     * @param string $tagName
     110     *     Nom du tag
     111     * @param string $description
     112     *     Description du tag
     113    **/
     114    public function collecter_pipelines($project) {
     115        // collecteur
     116        $pipelines = new Collection();
     117       
     118        // parcourir les fonctions
     119        foreach ($project->getFiles() as $file) {
     120            foreach ($file->getFunctions() as $function) {
     121                if ($pipeline = $function->getTags()->get('pipeline')) {
     122                    $pipelines->add( $function );
     123                }
     124
     125            }
     126        }
     127
     128        $project->getIndexes()->get('spip')->set('pipelines', $pipelines);
     129    }
     130
    73131
    74132    /**
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Plugin/Core/TwigZora.php

    r74883 r74902  
    157157             *     node.functions|trier('name')
    158158             *     file.allerrors|trier('line')
     159             *     project.indexes.spip.pipelines|trier(
     160             *          'tags.pipeline.0.description',
     161             *          'getFullyQualifiedStructuralElementName'
     162             *     )
    159163             *
    160164             * @param Collection $collection|null
     
    162166             * @param string $tri
    163167             *     Critère de tri
     168             * @param string $tri2
     169             *     Critère de tri en cas d'équivalence du premier tri
    164170             * @return Collection
    165171             *     Liste d'éléments triée
    166172             */
    167173            'trier' => new \Twig_SimpleFilter('trier',
    168                 function ($collection, $tri = "") {
     174                function ($collection, $tri = "", $tri2 = "") {
    169175                    if (!is_object($collection)) {
    170176                        return new Collection();
     
    176182
    177183                    $array = $collection->getAll();
    178                     uasort($array, function($a, $b) use ($tri) {
    179                         return(
    180                             strtolower(TwigZora::walkObjectTree($a, $tri)) >
    181                             strtolower(TwigZora::walkObjectTree($b, $tri))
    182                         );
     184                    uasort($array, function($a, $b) use ($tri, $tri2) {
     185                        $t1 = strtolower(TwigZora::walkObjectTree($a, $tri));
     186                        $t2 = strtolower(TwigZora::walkObjectTree($b, $tri));
     187                        if ($tri2 and ($t1 == $t2)) {
     188                            return(
     189                                strtolower(TwigZora::walkObjectTree($a, $tri2)) >
     190                                strtolower(TwigZora::walkObjectTree($b, $tri2))
     191                            );
     192                        } else {
     193                            return ($t1 > $t2);
     194                        }
    183195                    });
    184196                    return new Collection($array);
     
    330342     *
    331343     * Voir : phpDocumentor\Plugin\Core\Transformer\Writer\Twig::walkObjectTree
    332      * Totalement identique (au static près) : utiliser une classe séparée dès qu'elle sera disponible.
     344     * Presque identique : utiliser une classe séparée dès qu'elle sera disponible.
     345     *
     346     * Changements :
     347     * - static sur la fonction
     348     * - teste également les objets ArrayAccess
    333349     *
    334350     * Walks an object graph and/or array using a twig query string.
     
    356372                }
    357373            } elseif (is_object($node)) {
    358                 if (isset($node->$pathNode) || (method_exists($node, '__get') && $node->$pathNode)) {
     374                if (($node instanceof ArrayAccess) and isset($node[$pathNode])) {
     375                    $node = $node[$pathNode];
     376                    continue;
     377                } elseif (isset($node->$pathNode) || (method_exists($node, '__get') && $node->$pathNode)) {
    359378                    $node = $node->$pathNode;
    360379                    continue;
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/balises.twig

    r74883 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
    6 
    7 
    8 <h1>{{ titre_page }}</h1>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    93
    104
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/boucles.twig

    r74883 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
    6 
    7 
    8 <h1>{{ titre_page }}</h1>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    93
    104
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/classes.twig

    r74894 r74902  
    11
    2 <h1>{{ titre_page }}</h1>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
     3
    34
    45{% set elements = {
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/constantes.twig

    r74726 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    63
    7 
    8 <h1>{{ titre_page }}</h1>
    94
    105{% set constants = project.indexes.constants|trier('name') %}
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/criteres.twig

    r74883 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
    6 
    7 
    8 <h1>{{ titre_page }}</h1>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    93
    104
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/erreurs.twig

    r74730 r74902  
    1 <ul class="breadcrumb">
    2         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    3         <li class="active">{{ titre_page }}</li>
    4 </ul>
     1{% include 'inclure/ariane_et_titre_standard.twig' %}
    52
    6 <h1>{{ titre_page }}</h1>
    73
    84{% set errors = project.indexes.errors.error|trier( 'file.path' ) %}
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/filtres.twig

    r74883 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
    6 
    7 
    8 <h1>{{ titre_page }}</h1>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    93
    104
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/marqueurs.twig

    r74731 r74902  
    1 <ul class="breadcrumb">
    2         <li><a href="{{ path( project ) }}">Projet</a> <span class="divider">/</span></li>
    3         <li class="active">{{ titre_page }}</li>
    4 </ul>
     1{% include 'inclure/ariane_et_titre_standard.twig' %}
    52
    6 <h1>{{ titre_page }}</h1>
    73
    84
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/statistiques.twig

    r74885 r74902  
    11
    2 <ul class="breadcrumb">
    3         <li><a href="{{ path(project) }}">Projet</a> <span class="divider">/</span></li>
    4         <li class="active">{{ titre_page }}</li>
    5 </ul>
    6 
    7 <section>
    8         <header class="cartouche">
    9                 <h1>{{ titre_page }}</h1>
    10         </header>
    11 
    12         <div class="main">
    13 
    14                 <table class="table statistiques">
    15                         <caption>Éléments de programmation</caption>
    16                         <thead>
    17                                 <tr><th>Nom</th><th class='total'>Nombre</th></tr>
    18                         </thead>
    19                         <tbody>
    20                                 <tr><th>Répertoires</th><td>{{ project.indexes.directories.0.count }}</td></tr>
    21                                 <tr><th>Fichiers</th><td>{{ project.files|length }}</td></tr>
    22                                 <tr><th>Fonctions</th><td>{{ project.indexes.functions|length }}</td></tr>
    23                                 <tr><th>Constantes</th><td>{{ project.indexes.constants|length }}</td></tr>
    24 
    25                                         {%- spaceless %}
    26                                                 {% set methods_classes = 0 %}
    27                                                 {% set methods_interfaces = 0 %}
    28                                                 {% set methods_traits = 0 %}
    29 
    30                                                 {% for class in project.indexes.classes %}
    31                                                         {% set methods_classes = methods_classes + class.methods|length %}
    32                                                 {% endfor %}
    33                                                 {% for class in project.indexes.interfaces %}
    34                                                         {% set methods_interfaces = methods_interfaces + class.methods|length %}
    35                                                 {% endfor %}
    36                                                 {% for class in project.indexes.traits %}
    37                                                         {% set methods_traits = methods_traits + class.methods|length %}
    38                                                 {% endfor %}
    39                                         {% endspaceless -%}
    40 
    41                                 <tr><th>Classes</th><td>{{ project.indexes.classes|length }}</td></tr>
    42                                 <tr><th>Méthodes des classes</th><td>{{ methods_classes }}</td></tr>
    43                                 <tr><th>Interfaces</th><td>{{ project.indexes.interfaces|length }}</td></tr>
    44                                 <tr><th>Méthodes d'interfaces</th><td>{{ methods_interfaces }}</td></tr>
    45                                 <tr><th>Traits</th><td>{{ project.indexes.traits|length }}</td></tr>
    46                                 <tr><th>Méthodes de traits</th><td>{{ methods_traits }}</td></tr>
    47                         </tbody>
    48                 </table>
    49 
    50                 {%- spaceless %}
    51                         {% set erreurs = 0 %}
    52                         {% set notices = 0 %}
    53                         {% set todo = 0 %}
    54                         {% set fixme = 0 %}
    55 
    56                         {% for file in project.files %}
    57                                 {% if file.markers.count %}
    58                                         {% for marker in file.markers %}
    59                                                 {% if marker.type == 'TODO' %}
    60                                                         {% set todo = todo + 1 %}
    61                                                 {% elseif marker.type == 'FIXME' %}
    62                                                         {% set fixme = fixme + 1 %}
    63                                                 {% endif %}
    64                                         {% endfor %}
    65                                 {% endif %}
    66 
    67                                 {% for error in file.allerrors %}
    68                                         {% if error.severity == 'error' %}
    69                                                 {% set erreurs = erreurs + 1 %}
    70                                         {% elseif error.severity == 'notice' %}
    71                                                 {% set notices = notices + 1 %}
    72                                         {% endif %}
    73                                 {% endfor %}
    74 
    75                         {% endfor %}
    76                 {% endspaceless -%}
    77 
    78                 <table class="table statistiques">
    79                         <caption>Marqueurs dans les commentaires</caption>
    80                         <thead>
    81                                 <tr><th>Type</th><th class='total'>Nombre</th></tr>
    82                         </thead>
    83                         <tbody>
    84                                 <tr><th><a href="{{ path( 'marqueurs.html#todo'  ) }}">Marqueurs : Todo</a></th><td>{{ todo }}</td></tr>
    85                                 <tr><th><a href="{{ path( 'marqueurs.html#fixme' ) }}">Marqueurs : Fixme</a></th><td>{{ fixme }}</td></tr>
    86                         </tbody>
    87                 </table>
    88 
    89                 <table class="table statistiques">
    90                         <caption>Erreurs de phpDoc</caption>
    91                         <thead>
    92                                 <tr><th>Type</th><th class='total'>Nombre</th></tr>
    93                         </thead>
    94                         <tbody>
    95                                 <tr><th><a href="{{ path( 'erreurs.html' ) }}">Erreurs</a></th><td>{{ erreurs }}</td></tr>
    96                                 <tr><th><a href="{{ path( 'erreurs.html#notices' ) }}">Notices</a></th><td>{{ notices }}</td></tr>
    97                         </tbody>
    98                 </table>
     2{% include 'inclure/ariane_et_titre_standard.twig' %}
    993
    1004
    101                 <div id="graphdiv" style="width=100%; height:300px;"></div>
     5<table class="table statistiques">
     6        <caption>Éléments de programmation</caption>
     7        <thead>
     8                <tr><th>Nom</th><th class='total'>Nombre</th></tr>
     9        </thead>
     10        <tbody>
     11                <tr><th>Répertoires</th><td>{{ project.indexes.directories.0.count }}</td></tr>
     12                <tr><th>Fichiers</th><td>{{ project.files|length }}</td></tr>
     13                <tr><th>Fonctions</th><td>{{ project.indexes.functions|length }}</td></tr>
     14                <tr><th>Constantes</th><td>{{ project.indexes.constants|length }}</td></tr>
    10215
    103         </div>
    104 </section>
     16                        {%- spaceless %}
     17                                {% set methods_classes = 0 %}
     18                                {% set methods_interfaces = 0 %}
     19                                {% set methods_traits = 0 %}
     20
     21                                {% for class in project.indexes.classes %}
     22                                        {% set methods_classes = methods_classes + class.methods|length %}
     23                                {% endfor %}
     24                                {% for class in project.indexes.interfaces %}
     25                                        {% set methods_interfaces = methods_interfaces + class.methods|length %}
     26                                {% endfor %}
     27                                {% for class in project.indexes.traits %}
     28                                        {% set methods_traits = methods_traits + class.methods|length %}
     29                                {% endfor %}
     30                        {% endspaceless -%}
     31
     32                <tr><th>Classes</th><td>{{ project.indexes.classes|length }}</td></tr>
     33                <tr><th>Méthodes des classes</th><td>{{ methods_classes }}</td></tr>
     34                <tr><th>Interfaces</th><td>{{ project.indexes.interfaces|length }}</td></tr>
     35                <tr><th>Méthodes d'interfaces</th><td>{{ methods_interfaces }}</td></tr>
     36                <tr><th>Traits</th><td>{{ project.indexes.traits|length }}</td></tr>
     37                <tr><th>Méthodes de traits</th><td>{{ methods_traits }}</td></tr>
     38        </tbody>
     39</table>
     40
     41{%- spaceless %}
     42        {% set erreurs = 0 %}
     43        {% set notices = 0 %}
     44        {% set todo = 0 %}
     45        {% set fixme = 0 %}
     46
     47        {% for file in project.files %}
     48                {% if file.markers.count %}
     49                        {% for marker in file.markers %}
     50                                {% if marker.type == 'TODO' %}
     51                                        {% set todo = todo + 1 %}
     52                                {% elseif marker.type == 'FIXME' %}
     53                                        {% set fixme = fixme + 1 %}
     54                                {% endif %}
     55                        {% endfor %}
     56                {% endif %}
     57
     58                {% for error in file.allerrors %}
     59                        {% if error.severity == 'error' %}
     60                                {% set erreurs = erreurs + 1 %}
     61                        {% elseif error.severity == 'notice' %}
     62                                {% set notices = notices + 1 %}
     63                        {% endif %}
     64                {% endfor %}
     65
     66        {% endfor %}
     67{% endspaceless -%}
     68
     69<table class="table statistiques">
     70        <caption>Marqueurs dans les commentaires</caption>
     71        <thead>
     72                <tr><th>Type</th><th class='total'>Nombre</th></tr>
     73        </thead>
     74        <tbody>
     75                <tr><th><a href="{{ path( 'marqueurs.html#todo'  ) }}">Marqueurs : Todo</a></th><td>{{ todo }}</td></tr>
     76                <tr><th><a href="{{ path( 'marqueurs.html#fixme' ) }}">Marqueurs : Fixme</a></th><td>{{ fixme }}</td></tr>
     77        </tbody>
     78</table>
     79
     80<table class="table statistiques">
     81        <caption>Erreurs de phpDoc</caption>
     82        <thead>
     83                <tr><th>Type</th><th class='total'>Nombre</th></tr>
     84        </thead>
     85        <tbody>
     86                <tr><th><a href="{{ path( 'erreurs.html' ) }}">Erreurs</a></th><td>{{ erreurs }}</td></tr>
     87                <tr><th><a href="{{ path( 'erreurs.html#notices' ) }}">Notices</a></th><td>{{ notices }}</td></tr>
     88        </tbody>
     89</table>
     90
     91
     92<div id="graphdiv" style="width=100%; height:300px;"></div>
     93
     94
    10595
    10696
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/template.xml

    r74883 r74902  
    4343    <transformation writer="twig" source="templates/zora/filtres.twig"    artifact="filtres.html"/>
    4444    <transformation writer="twig" source="templates/zora/criteres.twig"   artifact="criteres.html"/>
     45    <transformation writer="twig" source="templates/zora/pipelines.twig"  artifact="pipelines.html"/>
    4546
    4647    <!-- gestion des objets générées en twig -->
Note: See TracChangeset for help on using the changeset viewer.