Tips en Trucs 2015

Coderegels tellen met cloc

Als je aan een project werkt en je moet je vorderingen indienen, kunnen statistieken een waardemeter zijn voor uw code. Cloc is een krachtig hulpmiddel om uw coderegels te tellen, zonder de commentaar en lege regels en zelfs gesorteerd volgens programmeertaal.

Cloc is beschikbaar in alle grote Linux distributies. Om cloc in openSUSE 13.2 te installeren, voer je de volgende opdracht uit:

dany@linux-cj0r:~> sudo OCICLI https://software.opensuse.org/ymp/devel:tools/openSUSE_13.2/cloc.ymp
Als u verdergaat, dan worden de volgende installatiebronnen toegevoegd:
        * http://download.opensuse.org/repositories/devel:/tools/openSUSE_13.2/
        * http://download.opensuse.org/update/13.2/
Als verdergaat, dan zullen de volgende softwarepakketten worden geïnstalleerd op uw systeem:
        * cloc
Continue? y/N
y
Toevoegen van installatiebronnen...

Indien de softwarebron devel:tools nog toegevoegd moet worden, moet je deze nog vertrouwen om de GnuPGP-sleutel te importeren.
Niet-vertrouwde GnuGPG-sleutel importeren

cloc werkt per bestand of per map. Om de coderegels in een bestand of map te tellen, geef je de bestands- of mapnaam mee met de cloc opdracht. We maken de map Mijn_project met één bash script.

dany@linux-cj0r:~> mkdir Mijn_project
dany@linux-cj0r:~> cat > Mijn_project/bash.sh
#!/bin/bash
echo "Hallo Wereld"

De laatste opdracht sluit je af met de toetscombinatie Ctrl+d. Het aantal regels code tel je met cloc met de volgende opdracht:

dany@linux-cj0r:~> cloc Mijn_project/bash.sh 
       1 text file.
       1 unique file.                              
       0 files ignored.

http://cloc.sourceforge.net v 1.64  T=0.01 s (135.9 files/s, 271.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Bourne Shell                     1              0              0              2
-------------------------------------------------------------------------------

We voegen nog een perl script toe en tellen alle coderegels in de volledige map met de volgende opdrachten:

dany@linux-cj0r:~> cat > Mijn_project/perl.pl
#!/usr/bin/perl

print "Hallo Wereld\n"          
dany@linux-cj0r:~> ls Mijn_project/
bash.sh  perl.pl
dany@linux-cj0r:~> cloc Mijn_project/
       2 text files.
       2 unique files.                              
       0 files ignored.

http://cloc.sourceforge.net v 1.64  T=0.01 s (269.6 files/s, 674.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Prolog                           1              1             -1              3
Bourne Shell                     1              0              0              2
-------------------------------------------------------------------------------
SUM:                             2              1             -1              5
-------------------------------------------------------------------------------

Oeps, hier herkent cloc ons perl script als een prolog script. Deze demo gebruikt zeer korte scripts, waardoor cloc niet kan bepalen welke programmeertaal gebruikt wordt. In plaats van per programmeertaal te werken, kan cloc de resultaten ook per bestand weergeven:

dany@linux-cj0r:~> cloc --by-file Mijn_project/
       2 text files.
       2 unique files.                              
       0 files ignored.

http://cloc.sourceforge.net v 1.64  T=0.01 s (256.3 files/s, 640.7 lines/s)
----------------------------------------------------------------------------------
File                                blank        comment           code
----------------------------------------------------------------------------------
Mijn_project/perl.pl                    1             -1              3
Mijn_project/bash.sh                    0              0              2
----------------------------------------------------------------------------------
SUM:                                    1             -1              5
----------------------------------------------------------------------------------

In het volgende voorbeeld tellen we de coderegels in een gedownload gecomprimeerd bestand (Roundcube Webmail).

dany@linux-cj0r:~> wget  http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz
--2015-09-26 16:36:30--  http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz
Herleiden van sourceforge.net (sourceforge.net)... 216.34.181.60
Verbinding maken met sourceforge.net (sourceforge.net)|216.34.181.60|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz/download [volgen...]
--2015-09-26 16:36:31--  http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz/download
Verbinding maken met sourceforge.net (sourceforge.net)|216.34.181.60|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz?r=&ts=1443278191&use_mirror=netix [volgen...]
--2015-09-26 16:36:31--  http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz?r=&ts=1443278191&use_mirror=netix
Herleiden van downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59
Verbinding maken met downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
Locatie: http://netix.dl.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz [volgen...]
--2015-09-26 16:36:31--  http://netix.dl.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz
Herleiden van netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Verbinding maken met netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 4566830 (4,4M) [application/x-gzip]
Wordt opgeslagen als: ‘roundcubemail-1.1.3-complete.tar.gz’

roundcubemail-1.1.3-complete.tar.gz                                 100%[==================================================================>]   4,35M  1,04MB/s   in 4,3s   

2015-09-26 16:36:36 (1,02 MB/s) - '‘roundcubemail-1.1.3-complete.tar.gz’' opgeslagen [4566830/4566830]
dany@linux-cj0r:~> cloc roundcubemail-1.1.3-complete.tar.gz 
    2115 text files.
    2076 unique files.                                          
     288 files ignored.

http://cloc.sourceforge.net v 1.64  T=4.59 s (398.3 files/s, 65567.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                           1254          19150          49541         154728
Javascript                     234           3473           3477          31320
CSS                             85           2221            390          14561
HTML                            80            703             39           3806
Pascal                          22           1774           4343           3454
SQL                             67            467            190           1937
Bourne Shell                    21            293             14           1529
JSON                            37              0              0           1465
XML                             20             19              0           1153
diff                             2              5            259            510
C                                3             18             22             64
DTD                              1             32             17             54
Python                           1              8              2             22
YAML                             1              4              0             16
DOS Batch                        1              0              0             11
-------------------------------------------------------------------------------
SUM:                          1829          28167          58294         214630
-------------------------------------------------------------------------------

De in openSUSE 13.2 gebruikte kernel bevat:

dany@linux-cj0r:~> cloc /usr/src/linux/
   12811 text files.
   12598 unique files.                                          
    1625 files ignored.

http://cloc.sourceforge.net v 1.64  T=23.89 s (468.4 files/s, 61212.8 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C/C++ Header                   9116         170962         306494         877970
make                           1883           7493           7343          30832
C                                56           3947           3163          24549
Perl                             20           1831           1761          10656
Bourne Shell                     38            472            807           2468
Assembly                         56            467           1144           1761
Python                            6            180            324           1612
C++                               1            209             57           1529
yacc                              3            239             95           1435
lex                               3            154             86            855
Bourne Again Shell                4            104             56            489
NAnt script                       1             92              0            366
Pascal                            1             17              0             80
awk                               1              5              0             29
--------------------------------------------------------------------------------
SUM:                          11189         186172         321330         954631
--------------------------------------------------------------------------------

De handleiding van cloc kan je opvragen met de standaard opdrachten cloc en man cloc.