CLOC it


CLOC est un petit prog Perl qui retourne des stats sur le code qu’on a dans un dossier.

Sur Ubuntu, ça s’installe avec un sudo apt-get install cloc, et un cloc /home/sam/work plus tard, on obtient un rapport sur le nombre de fichiers / lignes de code par langage :

---------------------------------------------------------
Language            files      blank    comment      code
---------------------------------------------------------
HTML                10585     392921      49870   2909814
Javascript           1497     118180     220836    656645
Python               3132     104173     129888    517995
CSS                   399      23324      10117    164944
XML                  2860       7435      16148     89942
Java                  194       7364      34214     30960
XSLT                   83       3902       1992     25842
Bourne Shell           91       1998       2511     16263
C                      48       2824       4020     11810
C/C++ Header          167       4256       7775     10015
SQL                    59       1640       1347      8961
LESS                   50       1371       1308      5884
C++                    35       1244        782      5772
make                   41        806        283      3691
QML                    56        413        906      2458
Visualforce Page       17        175         22      1253
Bourne Again Shell     17        109        145       883
m4                      2         99         22       707
SASS                   20        127         41       596
ActionScript            1         71        121       553
DOS Batch               8         63         19       359
DTD                     5        159        280       355
PHP                     2         58        250       315
D                       2         32         -2       171
CMake                   4         28         11       124
Ruby                    5         37          9       120
CoffeeScript            1         30         10        95
Teamcenter def          1          0          0        91
XSD                     3         10          0        78
YAML                    5          7          0        49
Arduino Sketch          1         17         27        41
IDL                     2         12          0        38
MATLAB                  1         21         62        35
C Shell                 1          8          6        18
Visual Basic            1          0          0        18
ASP.Net                 1          4          0         9
---------------------------------------------------------
SUM:                19397     672918     483020   4466904
---------------------------------------------------------

Pour le HTML, on a compris que j’étais un dev très orienté Web. Mais, horreur, coderai-je plus de Javascript que de Python ?

Non, je vous rassure. C’est juste que mon dossier de travail contient moult documentation Web dumpées pour être consultées hors ligne, de nombreuses libs JS dupliquées (j’aime pas les CDN) et aucun de mes virtualenv.

Rien que la doc d’angular :

find -iname "*.js"  | grep angular | wc
632

On notera qu’il y a deux fois plus de fichiers Python (3132 c’est pas énorme quand on y pense) que de fichiers JS, mais un peu moins de lignes malgré tout, ce qui reflète bien la tendance à tasser beaucoup de code dans un seul gros fichier en JS.

2860 fichiers XML ? Bordel, mais d’où viennent-ils ?

find -iname "*.xml" | grep docker | wc
2790

Ah, ok.

Je serais curieux de savoir ce que ça donne pour un dev scientifique, un sys admin, un débutant, un chevronné, etc.

37 thoughts on “CLOC it

  • Sam Post author

    Dev web python aussi ?

    J’ai fais un rerun, cette fois avec une exclusion plus drastique :

    cloc . --not-match-d=".*(docker|sametmax|vendor|jquery|angular|doc).*"
    -------------------------------------------------
    Language           files   blank comment     code
    -------------------------------------------------
    Python              3022  101528  125203   510113
    Javascript           709   79976  129088   435551
    CSS                  208   15124    6901   109405
    HTML                 527    7596    1574    49552
    Java                 194    7364   34214    30960
    Bourne Shell          74    1895    2279    15828
    C                     48    2824    4020    11810
    C/C++ Header         167    4256    7775    10015
    SQL                   59    1640    1347     8961
    XML                  112    2252    6053     7540
    C++                   35    1244     782     5772
    LESS                  44    1189    1260     5180
    make                  35     682     258     3059
    QML                   56     413     906     2458
    Visualforce Page      17     175      22     1253
    XSLT                  10     116     180     1078
    Bourne Again Shell    17     109     145      883
    m4                     2      99      22      707
    ActionScript           1      71     121      553
    SASS                  18     103      32      472
    D                      2      32      -2      171
    CMake                  4      28      11      124
    Ruby                   4      37       6      117
    CoffeeScript           1      30      10       95
    Teamcenter def         1       0       0       91
    XSD                    3      10       0       78
    DOS Batch              6      19      17       45
    Arduino Sketch         1      17      27       41
    IDL                    2      12       0       38
    MATLAB                 1      21      62       35
    YAML                   2       5       0       21
    C Shell                1       8       6       18
    Visual Basic           1       0       0       18
    ASP.Net                1       4       0        9
    PHP                    1       0       0        1
    -------------------------------------------------
    SUM:                5386  228879  322319  1212052
    -------------------------------------------------
    

    1 ligne de commentaire pour 5 de code, c’est un bon ratio.

  • desfrenes
    MacBook-Pro-de-md:Code md$ cloc --exclude-dir="vendor" ./
        5481 text files.
        3910 unique files.
       17519 files ignored.
    
    http://cloc.sourceforge.net v 1.60  T=28.74 s (106.5 files/s, 33749.7 lines/s)
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    PHP                           1400          39215          58289         243912
    Python                         745          45205          57852         144929
    CSS                            126           7671           4512         114687
    Javascript                     293          19770          18939         109618
    LESS                            96           5284           1099          28682
    HTML                           240           3445           1646          28057
    C                               15           2212           2125          13967
    XML                             49             95            147           5830
    SQL                              4             70            135           3790
    Perl                            12            259            243           1863
    XSD                              1              0             33           1353
    Bourne Shell                    22            246            258           1040
    C/C++ Header                     9            173            122            845
    CoffeeScript                    19            110             28            556
    make                             6            159            195            383
    Ruby                            11             56              0            266
    YAML                             7             17             35            186
    DOS Batch                        2             23              2            156
    Smarty                           1              1              0             63
    C Shell                          1              9              7             21
    m4                               1              2              1              5
    -------------------------------------------------------------------------------
    SUM:                          3060         124022         145668         700209
    -------------------------------------------------------------------------------
    
  • foxmask

    0bin que ca soit en (15ans de) PHP ou en (2ans de) Python, ratio 1 ligne de comment pour 3 de codes, Constant quoi ;)

  • Lhassa

    depuis la fac (mais je ne me qualifierai pas de dev scientifique quand même…)

    sur le workspace d’éclipse (mais je viens de le réinstaller…)

    cloc workspace/ ->     1844 text files.      884 unique files.      565 files ignored.
    
    
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    HTML                           387           2826           2164          47507
    C++                             23           1780           2202           4052
    Javascript                      90             80             66           1960
    C/C++ Header                    18            376            182            915
    XML                             18              6             10            691
    Bourne Shell                     6              1             14            518
    D                               25            214              0            352
    make                             5             48             32            189
    Perl                             1              7              0            105
    -------------------------------------------------------------------------------
    SUM:                           579           5747           4785          60604
    -------------------------------------------------------------------------------
    
    
    cloc Documents/ ->     5774 text files.     4132 unique files.     5717 files ignored.
    
    
    --------------------------------------------------------------------------------
    Language                      files          blank        comment           code
    --------------------------------------------------------------------------------
    HTML                            455          17469           1605         156434
    Javascript                      199           5237           4592          81936
    Python                          307          29738          34319          80160
    Fortran 77                        8             60           1262           6779
    C++                              17           1242           1390           2870
    XML                              21             37             44           2749
    Fortran 90                       13            381            434           1268
    Bourne Shell                     14             29            114            841
    make                             15            268            306            737
    ...
    --------------------------------------------------------------------------------
    SUM:                           1158          57250          45299         358772
    --------------------------------------------------------------------------------
    

    je code plus en HTML depuis un baille, mais vive doxygen et sphinx

  • foxmask

    @sam avec “trigger happy” j’ai pu produire 5/6 services facilement.
    donc ca va vite et c’est facile ;)
    #aparté
    c’est tout ca qu’un de ces 4 je passerai à crossbar ;)
    #fin-aparté

  • lorem

    Sur ubuntu, ça s’installe avec un apt-get cloc

    joe@xubuntu:~$ sudo apt-get cloc
    [sudo] password for joe:
    E: L’opération cloc n’est pas valable

    Et moi qui avait une confiance totale en vous :(

  • Kikoololmdr
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    CSS                             75          15984           5918         134381
    HTML                           258           8535           1719         115756
    PHP                            405          25258           2732          76302
    XML                            129            578            893          49093
    Javascript                      66           4754           3089          26949
    Python                         218           5784           8853          17926
    XSLT                            97           2262           2080           7236
    SASS                            16            686            212           4935
    JavaServer Faces                50            197              4           4357
    XSD                              1              1              6           2649
    C++                              2            484            707           2472
    DTD                              4             45            398           1691
    YAML                             5             62            116            719
    CoffeeScript                     1            153            201            440
    C                                2             46             48            215
    make                             1             24              5            124
    ASP.Net                          1             16              0             48
    C/C++ Header                     3             15             27             42
    Bourne Shell                     2              0              4             13
    Ruby                             1              6             13              6
    Cython                           1              4              5              4
    -------------------------------------------------------------------------------
    SUM:                          1338          64894          27030         445358
    -------------------------------------------------------------------------------

    Sur mon répertoire de travail à la maison (j’ai comptabilisé sur mes projets persos, mais ça devient illisible, avec le nombre de code source extrait de github que j’ai).
    Le PHP trust la troisième place, mais en réalité, j’ai dû écrire une dizaine de lignes dans ma vie à tout pété. Ça correspond aux dumps de codes de mes collègues (je suis le seul dev python de ma boite) que je dois souvent reprendre. Le ratio commentaire/code est inquiétant, mais ça ne me surprend pas.
    Le seul truc réellement représentatif, c’est python et xslt. Dommage qu’il oublie les fichiers .rst d’ailleurs.
    Je bosse dans le milieu de l’édition depuis ~1an.

  • Sam Post author

    Ouai parceque faire majoritairement du CSS, c’est pas humain quand même.

  • Khertan

    -------------------------------------------------------------------------------
    Language files blank comment code
    -------------------------------------------------------------------------------
    Python 538 23167 26846 83526
    QML 113 2197 1295 11003
    make 32 619 236 8434
    C 25 1425 3118 6284
    vim script 54 688 776 6024
    HTML 31 91 29 5008
    C++ 38 936 681 4839
    C/C++ Header 28 1106 1926 3748
    IDL 15 133 0 598
    Javascript 4 79 145 389
    YAML 9 3 2 267
    Bourne Shell 4 26 143 163
    XML 1 0 0 7
    DOS Batch 2 0 0 3
    -------------------------------------------------------------------------------
    SUM: 894 30470 35197 130293
    -------------------------------------------------------------------------------

    Ceci dit, j’ai un doute sur le nombre de commentaires, ça me parait énorme.

    Et puis bon c est dommage il manque tout le code en 4D qui trusterais la 1er place … mais comme ça se voit, le perle c est pas mon truc … alors de la a contribué pour la reconnaissance de 4D :)

    Bcp de 4D, des Middleware python, des applis python qt, et un peu de verilog (ignoré aussi)

  • Réchèr
    ----------------------------------------------------
    Language        files     blank   comment       code
    ----------------------------------------------------
    HTML             3075    124920     30805    1131885
    Python           1178     46517     75570     182398
    C/C++ Header      330     10014     14602      29994
    Bourne Shell       22      3286      4434      29540
    Pascal            110      2454       883      22878
    C                  84      2608      3372      19153
    C++               102      3124      1315      12875
    m4                  7       854      1206       8862
    Java              110      1802      2666       7565
    CSS                15       818       120       5211
    XSLT               14       545       634       4637
    Javascript         22       453       824       3813
    make               11       271       188       1673
    Maven              26        60       518       1571
    XML                22        97        56       1210
    Perl                5       120       200        703
    DOS Batch          25       102        99        306
    Ant                 1       176       235        110
    Teamcenter def      1         1         0         59
    sed                 2         1         0         41
    PowerShell          1        10       106         32
    PHP                 3         0         0         17
    ASP.Net             1         4         0          9
    JSP                 1         0         0          1
    ----------------------------------------------------
    SUM:             5168    198237    137833    1464543
    ----------------------------------------------------
    

    La quantité de python est surévaluée, à cause de quelques anciens projets que je sauvegardais dans des repository CPOLD. Maintenant j’utilise github, je me suis embourgeoisé.

    Ça détecte pas le langage haxe, et c’est bien dommage. J’en avais fait un peu pour tester.

    Il faudrait faire un outil du même genre pour les graphistes :
    – combien de pixels dans des jpeg, png, photoshop, … Avec des statistiques par couleurs RGB.
    – combien de vecteurs dans des svg.
    – combien de polygones dans des fichiers Blender/3DS
    – etc.

    Autre idée : le plus important, c’est pas la quantité de lignes de code, mais la quantité de temps qu’on passe dessus. Il faudrait un plugin SublimeText qui enregistre périodiquement le temps passé sur chaque fichier, les fichiers trouvés à chaque fois qu’on fait une recherche, le nombre de sauvegarde de chaque fichier, …

    C’est tellement chouette les stats. Et plus c’est inutile, plus c’est indispensable.

  • Sam Post author

    @Khertan: comment on peut avoir 8434 lignes de make files ?

  • Chassegnouf

    Je crains que si, par je-ne-sais-quel miracle, j’arrivais à faire tourner ce bousin sur mon windows, je n’apprenne que le seul langage de programmation avec lequel j’ai pu travailler ne soit le Code Génétique (suis-je un des rares à avoir hacker le code d’un virus* ici ^^ ?)

    * de laitue ^^’

  • harmo

    Ce serait bien cool en automatique effectivement, peut-être en 2020, mais bon ce ne sera plus utile puisque on aura nos stats affichés direct dans la rétine, juste à côté de la courbe des perfs sexuelles ;)

  • Guillaume

    Dev iOS:

    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    C/C++ Header                   971          13413          22002          25423
    Objective C                    176           5270           2976          19491
    C++                             63           4015           1547          18310
    Objective C++                  187           5832           2758          15761
    Javascript                       2            257            166            641
    Python                           2            144            167            308
    MUMPS                            1             42              0            238
    Bourne Shell                     2             28             19            117
    CMake                            4             36             11            103
    HTML                             1             15              0             92
    make                             1              7              0             48
    C                                1              2              7             14
    -------------------------------------------------------------------------------
    SUM:                          1411          29061          29653          80546
    -------------------------------------------------------------------------------

    (http://pastebin.com/69j5J1Ds)

  • bussiere

    Dev web java python avec des jeux en mono et java

    So je dev en python et java surtout avec des petits projets dans les langages annexes selon techno (erlang est sur représenté mais faut dl des grosses librairies pour faire des projets web).

    --------------------------------------------------
    Language           files   blank   comment  code
    --------------------------------------------------
    Assembly            1862   73047    45282   511247
    Python              3099  106598   179852   482785
    Javascript          2136   89115   188521   406146
    HTML                2317   61149    12515   404984
    C++                   75   15344     6871   195024
    C                    336   22765    63135   172989
    Erlang               779   19918    25307   139139
    CSS                  512   14742     7756   130640
    Fortran 77           480    3759    76561    79280
    C/C++ Header         209    8954     9557    39890
    XML                  165     436      122    13875
    LESS                  80    2218     2402    10010
    C#                    57    1617      229     8240
    Java                  69    1085      204     3355
    Go                    18     308      396     2582
    Lua                    9     287      272     1704
    PHP                   20      91      133     1677
    make                  63     553      101     1600
    ASP.Net               66     168        0      996
    Bourne Shell          44     178      370      824
    MSBuild scripts        4       0       15      454
    DOS Batch              9      84        4      367
    Lisp                   5      72      106      352
    Maven                  2      15        0      306
    Bourne Again Shell     4      34       35      277
    QML                    6      33        3      182
    YAML                  16       7        7      154
    CoffeeScript           1      25        4      154
    C Shell                7      84       63      147
    ActionScript           2      58       31      143
    SASS                   3      24        9      126
    Clojure               11      32       35       99
    MATLAB                 5      42       45       94
    SQL                    3      16       18       90
    Perl                   1      18        1       47
    m4                     1       6        0       44
    Ruby                   1       0        3        3
    --------------------------------------------------
    SUM:               12477  422882   619965  2610026
    --------------------------------------------------
  • Sam Post author

    Assembly, c’est le package mono, ou c’est de l’assembleur ?

  • Stephane

    `sloccount` fait un peu pareil mais pas tout à fait :
    (apt-get install sloccount)

    $ sloccount .
    [...warning et autres trucs chiants]

    SLOC Directory SLOC-by-Language (Sorted)
    [...]
    383 clients python=383
    339 search python=339
    224 docs php=184,java=40
    [...]
    17 templates xml=17
    14 views python=14
    7 installer sh=7
    0 media (none)

    Totals grouped by language (dominant language first):
    python: 22127 (97.47%)
    php: 184 (0.81%)
    xml: 173 (0.76%)
    sh: 170 (0.75%)
    java: 40 (0.18%)
    ruby: 8 (0.04%)

    Total Physical Source Lines of Code (SLOC) = 22,702
    Development Effort Estimate, Person-Years (Person-Months) = 5.31 (63.69)
    (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
    Schedule Estimate, Years (Months) = 1.01 (12.12)
    (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
    Estimated Average Number of Developers (Effort/Schedule) = 5.26
    Total Estimated Cost to Develop = $ 716,983
    (average salary = $56,286/year, overhead = 2.40).
    SLOCCount, Copyright (C) 2001-2004 David A. Wheeler
    SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.
    SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to
    redistribute it under certain conditions as specified by the GNU GPL license;
    see the documentation for details.
    Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."

  • Lhassa

    en fait, ce qui serai intéressant, se serai de savoir ce qu’on a écrit, ce qu’on a copié d’ailleurs, et ce qui est généré automatiquement…
    parce que la génération de doc, les autoconf, automake et autre architectures de projets auto-générés, ce n’est pas optimisés et ça écrit le code que l’on ne veut plus faire (qui écrit soit même son Makefile si le projet contient plus de 3 fichiers ?…)

    mais j’adore toujours quand même vos approches et réflexions toujours constructives (même si souvent chronophage ;)

  • Sam Post author

    Ça dépend. Ça permet de voir aussi la quantité de boiler plate selon les technos utilisées. Par exemple, en Java tu verras souvent pas mal de XML, en C du make file, etc. C’est pas une info inintéressante je trouve.

  • kontre

    Voilà ce que ça donne pour un dev scientifique:

    ------------------------------------------------
    Language          files   blank comment     code
    ------------------------------------------------
    HTML              20864  109571  102796  3958486
    C                   605  168288  201097  3318111
    Python              937   51557   86967   179675
    C++                 306   29300   18663   117014
    Javascript          894    2728    5264    73676
    C/C++ Header        261    6540   11002    27520
    MATLAB              150    3892    3671    12160
    Cython               40    4167    6009    10926
    IDL                  74    3123    2442    10610
    XML                  11      17       3     7771
    make                 32     765     589     4366
    CSS                  15     789     206     3549
    Fortran 90           19     193     303     1478
    Pascal                1     170    1185      409
    DOS Batch            12      46       6      359
    Bourne Shell         20      97     157      342
    Bourne Again Shell    5      14      13      258
    Fortran 77           20       5      56      248
    OpenCL                1      27      46      140
    sed                   1       0      12      140
    Perl                  1       8       0      109
    YAML                  2       7       3       55
    ------------------------------------------------
    SUM:              24271  381304  440490  7727402
    ------------------------------------------------
    

    Le HTML/Js c’est de la doc doxygen pour le code C, et sphinx pour python. C’est pas moi qui ait écrit tout ce C, par contre j’ai dû faire une bonne partie du python. Je ne sais pas du tout d’où sort le Fortran…

  • Sam Post author

    Ouai parce que 3 million de lignes de C, ça fait mal au fion quand même.

  • kontre

    Je suis trop con, je viens de piger: dans le tas y’a des forks de numpy et scilab (d’où le fortran)… En ciblant mieux, ça donne:

    -----------------------------------------------
    Language          files  blank comment     code
    -----------------------------------------------
    C                   395  28069   27180  1334641
    C++                 255  27820   16040   109543
    Python              191   7521    9723    21347
    HTML                 50   2956       2    20383
    IDL                  74   3123    2442    10610
    C/C++ Header        131   2331    3992    10488
    MATLAB              121   3187    2010    10183
    XML                   3     17       3     6297
    make                 18    553     310     2620
    Cython               12    437    1013     1650
    Javascript           10    190     324     1497
    CSS                   4    173      51      706
    DOS Batch             7     23       5      179
    Bourne Again Shell    3      0       0      153
    OpenCL                1     27      46      140
    Bourne Shell          8     43      89      116
    -----------------------------------------------
    SUM:               1283  76470   63230  1530553
    -----------------------------------------------
    

    J’ai 3 copies du projet qui fait 1 million de lignes de C, mais ouais, c’est notre programme principal, qui grossit depuis les années 90.

  • Anabis

    Un grand débutant :
    ——————————————————————————-
    Language files blank comment code
    ——————————————————————————-
    XML 2 487 4 5349
    Java 41 676 282 3497
    C 57 538 166 3494
    CSS 25 361 62 3146
    HTML 41 489 118 2539
    Javascript 20 177 71 993
    Perl 13 54 1 235
    C/C++ Header 14 32 24 151
    Bourne Shell 4 26 10 107
    Lua 1 1 0 23
    make 1 3 0 7
    Assembly 1 2 1 5
    ——————————————————————————-
    SUM: 220 2846 739 19546
    ——————————————————————————-

    J’ai bien la haine que le Java de la fac fasse 3 ligne de plus que le C que j'<3
    (le Lua ok je sais pas d'où il vient)

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.