Оригінал: CLOC. Count Lines of Code Огляд Cloc розраховує порожніх рядків, рядки коментарів і фізичні рядків вихідного коду в багатьох мовах програмування. Враховуючи дві...

Оригінал: CLOC. Count Lines of Code

Огляд

Cloc розраховує порожніх рядків, рядки коментарів і фізичні рядків вихідного коду в багатьох мовах програмування. Враховуючи дві версії коду бази, Cloc можна обчислити різницю в порожній, коментар і рядків вихідного коду. Він повністю написаний на Perl без залежностей поза стандарту поширення Perl версії 5.6 і вище (код від деяких зовнішніх модулів вбудовується в Cloc ) і так досить портативними. Cloc відомо для запуску на багатьох версіях Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, AIX, HP-UX, Solaris, IRIX, г / OS, і Windows. (Для запуску вихідного версію Perl в Cloc на одному Windows, необхідно ActiveState Perl 5.6.1 або вище, полуниця Perl , Cygwin або MobaXTerm з Perl встановлений плагін. Як альтернативу можна використовувати бінарні файли з Cloc генерується PAR :: Пакер для запуску на комп’ютерах Windows, що не мають ні Perl, ні Cygwin.)

Cloc містить код від Девіда Уилера SLOCCount , Даміан Ковей і Абігейл Perl модуля Regexp :: Common , Perl модуля Шона М. Берка Win32 :: Autoglob , і Тай Маккуїна Perl модуля Алгоритм :: Diff . Мова масштабні коефіцієнти були отримані з Mayes Consulting, LLC сайтіhttp://softwareestimator.com/IndustryData2.htm .

Встановіть за допомогою менеджера пакетів

Залежно вашу операційну систему, один з цих способів установки може працювати для вас:

  npm install -g cloc                    # https://www.npmjs.com/package/cloc
  sudo apt-get install cloc              # Debian, Ubuntu
  sudo yum install cloc                  # Red Hat, Fedora
  sudo pacman -S cloc                    # Arch
  sudo pkg install cloc                  # FreeBSD
  sudo port install cloc                 # Mac OS X with MacPorts

Завантажити стабільний реліз

Вихідний код, зауваження з випуску, Windows виконуваний, і Unix пакет для поточного стабільного релізу можна знайти на http://sourceforge.net/projects/cloc/files/cloc/v1.64/ .

Розробляється версія Завантажити

Вихідний код для останньої Subversion фіксації можна знайти на http://sourceforge.net/p/cloc/code/HEAD/tree/trunk/cloc .

Ліцензія

Cloc під ліцензією GNU General Public License v2, без урахування частини, які були скопійовані з інших джерел. Код скопійований з Regexp :: Common, Win32 :: Autoglob, і алгоритм :: модулів Perl Різниця підлягає Artistic License .

Навіщо використовувати Cloc

Cloc має багато особливостей, які роблять його простим у використанні, ретельного, розширюваним і стерпним:

  1. Існує у вигляді єдиного автономного файлу, який вимагає мінімальних зусиль установки — просто завантажити файл і запустити його.
  2. Можна читати визначення мови коментар з файлу і, таким чином, потенційно працювати з комп’ютерними мовами, які ще не існують.
  3. Дозволяє результати декількох трас будуть підведені разом мови і проекту.
  4. Може виробляти результати в різних форматах: текст, SQL, XML, YAML, розділених комами значень.
  5. Може розраховувати код в стислих архівів (бітумінозних кулі, Zip файлів, Java .ear файлів).
  6. Має численні варіанти усунення неполадок.
  7. Ручки імена файлів і каталогів з пробілами та інших незвичайних персонажів.
  8. не має залежностей поза стандарту поширення Perl.
  9. Працює на Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, AIX, HP-UX, Solaris, IRIX, і систем г / OS, які Perl 5.6 або вище. Версія джерелом працює на Windows, або з ActiveState Perl, полуниця Perl, Cygwin або MobaXTerm + Perl плагіна. Крім Windows, на одному може запустити виконуваний файл Windows, який не має залежностей.

Інші Лічильники

Якщо Cloc не задовольнити ваші потреби тут і інші вільно доступні лічильники, щоб розглянути:

Інші посилання:

Regexp::Common, Digest::MD5, Win32::Autoglob, Algorithm::Diff

Хоча Cloc не потрібно Perl модулів поза ті, що в стандартній поставці, Cloc дійсно покладається на декілька зовнішніх модулів. Код від трьох цих зовнішніх модулів – Regexp :: Common, Win32 :: Autoglob, і алгоритм :: Diff – вбудовується в Cloc. Четвертий модуль, дайджест :: MD5, використовується тільки якщо це можливо. Якщо Cloc знаходить Regexp :: Загальні або встановлена алгоритму :: Diff локально він буде використовувати ті установки. Якщо це не так, Cloc встановить частини регулярного виразу :: Загальні та / або алгоритм: Diff він повинен тимчасових каталогів, створюваних на початку Cloc перспективі, то віддаляється, коли пробіг буде завершена. Необхідний код з RegExp :: Common v2.120 і алгоритм :: Diff v1.1902 вбудовані у вихідний код Cloc (див підпрограм Install_Regexp_Common() і Install_Algorithm_Diff() ). Тільки три лінії необхідно від Win32 :: Autoglob, і вони включені безпосередньо до Cloc.

Крім того, Cloc буде використовувати Digest :: MD5 для перевірки унікальності серед вхідних файлів, якщо встановлено Дайджест :: MD5 локально. Якщо Дайджест :: MD5 не найден перевірка унікальності файл пропускається.

Двійковий Windows, побудований на комп’ютері і регулярних виразів :: Загальні і дайджест :: MD5 встановленої локально.

Побудова ОС Windows виконуваний

Завантажити Windows за замовчуванням, Cloc-1.64.exe, був побудований з PAR Пакер :: на Windows 7 комп’ютер з полуничним Perl . Вікна виконувані Cloc версії 1.60 і раніше були побудовані з perl2exe на 32-бітної Windows XP комп’ютер. Невеликий модифікації було зроблено у вихідному коді Cloc перед його передачею perl2exe; Лінії 87 і 88 були Розкоментувати:

85  # Uncomment next two lines when building Windows executable with perl2exe
86  # or if running on a system that already has Regexp::Common. 
87  #use Regexp::Common;
88  #$HAVE_Rexexp_Common = 1;

Чому виконуваний для Windows настільки великий?

Вікна виконувані Cloc версії 1.60 і вище, створений з perl2exe як зазначалося вище, близько 1,6 Мб, в той час як більш нові версії, створені з PAR Пакер ::, 11 МБ. Чому нові виконувані настільки більше? Моя теорія полягає в тому, що perl2exe використовує розумніші Обрізка дерев логіку, ніж PAR Пакер ::,але це чиста спекуляція.

Створіть свій власний виконуваний файл

Якщо у вас є доступ до perl2exe, ви можете використовувати його для створення жорсткої виконуваний Windows. Див лінії 84-87 у вихідному коді Cloc для незначної зміни коду, що необхідно при використанні perl2exe.

В іншому випадку, щоб побудувати виконуваний файл Windows, з п.п. від PAR Пакер :: спочатку встановити Windows, заснований розподіл Perl (наприклад Perl або Strawberry ActivePerl) після їх дорученням. Далі, відкрийте командний рядок, інакше у вікні DOS і встановити модуль ФАР :: Packer.Нарешті, викличте команду знову встановлений п.п. з Cloc код соусі створити EXE-файл:

C:> perl -MCPAN -e shell
cpan> install PAR::Packer
cpan> exit
C:> pp cloc-1.64.pl

Варіація на вище, якщо ви встановили портативну версію Strawberry Perl, вам потрібно буде запустити portableshell.bat першим правильно налаштувати середовище. Полуниця Perl отримані виконуваний на SourceForge завантажити район був створений з переносною версії на комп’ютері Windows 7.

Основне застосування

Cloc це програма командного рядка, який приймає файл, каталог та / або імена архівних як входи. Ось приклад запуску Cloc проти поширення Perl v5.10.0 джерела:

 prompt> cloc perl-5.10.0.tar.gz
    4076 text files.
    3883 unique files.                                          
    1521 files ignored.

http://cloc.sourceforge.net v 1.50  T=12.0 s (209.2 files/s, 70472.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                          2052         110356         130018         292281
C                              135          18718          22862         140483
C/C++ Header                   147           7650          12093          44042
Bourne Shell                   116           3402           5789          36882
Lisp                             1            684           2242           7515
make                             7            498            473           2044
C++                             10            312            277           2000
XML                             26            231              0           1972
yacc                             2            128             97           1549
YAML                             2              2              0            489
DOS Batch                       11             85             50            322
HTML                             1             19              2             98
-------------------------------------------------------------------------------
SUM:                          2510         142085         173903         529677
-------------------------------------------------------------------------------

Щоб запустити Cloc на комп’ютерах Windows, потрібно спочатку відкрити команду (ака DOS) вікно і викликати cloc.exe з командного рядка немає.

Опції

 prompt> cloc

Usage: cloc [options] <file(s)/dir(s)> | <set 1> <set 2> | <report files>

 Count, or compute differences of, physical lines of source code in the
 given files (may be archives such as compressed tarballs or zip files)
 and/or recursively below the given directories.

 Input Options
   --extract-with=<cmd>      This option is only needed if cloc is unable
                             to figure out how to extract the contents of
                             the input file(s) by itself.
                             Use <cmd> to extract binary archive files (e.g.:
                             .tar.gz, .zip, .Z).  Use the literal '>FILE<' as
                             a stand-in for the actual file(s) to be
                             extracted.  For example, to count lines of code
                             in the input files
                                gcc-4.2.tar.gz  perl-5.8.8.tar.gz
                             on Unix use
                               --extract-with='gzip -dc >FILE< | tar xf -'
                             or, if you have GNU tar,
                               --extract-with='tar zxf >FILE<'
                             and on Windows use, for example:
                               --extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE< ."
                             (if WinZip is installed there).
   --list-file=<file>        Take the list of file and/or directory names to
                             process from <file>, which has one file/directory
                             name per line.  Only exact matches are counted;
                             relative path names will be resolved starting from 
                             the directory where cloc is invoked.  
                             See also --exclude-list-file.
   --unicode                 Check binary files to see if they contain Unicode
                             expanded ASCII text.  This causes performance to
                             drop noticably.

 Processing Options
   --autoconf                Count .in files (as processed by GNU autoconf) of
                             recognized languages.
   --by-file                 Report results for every source file encountered.
   --by-file-by-lang         Report results for every source file encountered
                             in addition to reporting by language.
   --count-and-diff <set1> <set2>    
                             First perform direct code counts of source file(s)
                             of <set1> and <set2> separately, then perform a diff 
                             of these.  Inputs may be pairs of files, directories, 
                             or archives.  See also --diff, --diff-alignment,
                             --diff-timeout, --ignore-case, --ignore-whitespace.
   --diff <set1> <set2>      Compute differences in code and comments between
                             source file(s) of <set1> and <set2>.  The inputs
                             may be pairs of files, directories, or archives.
                             Use --diff-alignment to generate a list showing
                             which file pairs where compared.  See also
                             --count-and-diff, --diff-alignment, --diff-timeout, 
                             --ignore-case, --ignore-whitespace.
   --diff-timeout <N>        Ignore files which take more than <N> seconds
                             to process.  Default is 10 seconds.
                             (Large files with many repeated lines can cause 
                             Algorithm::Diff::sdiff() to take hours.)
   --follow-links            [Unix only] Follow symbolic links to directories
                             (sym links to files are always followed).
   --force-lang=<lang>[,<ext>]
                             Process all files that have a <ext> extension
                             with the counter for language <lang>.  For
                             example, to count all .f files with the
                             Fortran 90 counter (which expects files to
                             end with .f90) instead of the default Fortran 77
                             counter, use
                               --force-lang="Fortran 90",f
                             If <ext> is omitted, every file will be counted
                             with the <lang> counter.  This option can be
                             specified multiple times (but that is only
                             useful when <ext> is given each time).
                             See also --script-lang, --lang-no-ext.
   --force-lang-def=<file>   Load language processing filters from <file>,
                             then use these filters instead of the built-in
                             filters.  Note:  languages which map to the same 
                             file extension (for example:
                             MATLAB/Objective C/MUMPS/Mercury;  Pascal/PHP; 
                             Lisp/OpenCL; Lisp/Julia; Perl/Prolog) will be 
                             ignored as these require additional processing 
                             that is not expressed in language definition 
                             files.  Use --read-lang-def to define new 
                             language filters without replacing built-in 
                             filters (see also --write-lang-def).
   --ignore-whitespace       Ignore horizontal white space when comparing files
                             with --diff.  See also --ignore-case.
   --ignore-case             Ignore changes in case; consider upper- and lower-
                             case letters equivalent when comparing files with
                             --diff.  See also --ignore-whitespace.
   --lang-no-ext=<lang>      Count files without extensions using the <lang>
                             counter.  This option overrides internal logic
                             for files without extensions (where such files
                             are checked against known scripting languages
                             by examining the first line for #!).  See also
                             --force-lang, --script-lang.
   --max-file-size=<MB>      Skip files larger than <MB> megabytes when
                             traversing directories.  By default, <MB>=100.
                             cloc's memory requirement is roughly twenty times 
                             larger than the largest file so running with 
                             files larger than 100 MB on a computer with less 
                             than 2 GB of memory will cause problems.  
                             Note:  this check does not apply to files 
                             explicitly passed as command line arguments.
   --read-binary-files       Process binary files in addition to text files.
                             This is usually a bad idea and should only be
                             attempted with text files that have embedded
                             binary data.
   --read-lang-def=<file>    Load new language processing filters from <file>
                             and merge them with those already known to cloc.  
                             If <file> defines a language cloc already knows 
                             about, cloc's definition will take precedence.  
                             Use --force-lang-def to over-ride cloc's 
                             definitions (see also --write-lang-def ).
   --script-lang=<lang>,<s>  Process all files that invoke <s> as a #!
                             scripting language with the counter for language
                             <lang>.  For example, files that begin with
                                #!/usr/local/bin/perl5.8.8
                             will be counted with the Perl counter by using
                                --script-lang=Perl,perl5.8.8
                             The language name is case insensitive but the
                             name of the script language executable, <s>,
                             must have the right case.  This option can be
                             specified multiple times.  See also --force-lang,
                             --lang-no-ext.
   --sdir=<dir>              Use <dir> as the scratch directory instead of
                             letting File::Temp chose the location.  Files
                             written to this location are not removed at
                             the end of the run (as they are with File::Temp).
   --skip-uniqueness         Skip the file uniqueness check.  This will give
                             a performance boost at the expense of counting
                             files with identical contents multiple times
                             (if such duplicates exist).
   --stdin-name=<file>       Give a file name to use to determine the language
                             for standard input.
   --strip-comments=<ext>    For each file processed, write to the current
                             directory a version of the file which has blank
                             lines and comments removed.  The name of each
                             stripped file is the original file name with
                             .<ext> appended to it.  It is written to the
                             current directory unless --original-dir is on.
   --original-dir            [Only effective in combination with
                             --strip-comments]  Write the stripped files
                             to the same directory as the original files.
   --sum-reports             Input arguments are report files previously
                             created with the --report-file option.  Makes
                             a cumulative set of results containing the
                             sum of data from the individual report files.
   --unix                    Override the operating system autodetection
                             logic and run in UNIX mode.  See also
                             --windows, --show-os.
   --windows                 Override the operating system autodetection
                             logic and run in Microsoft Windows mode.
                             See also --unix, --show-os.

 Filter Options
   --exclude-dir=<D1>[,D2,]  Exclude the given comma separated directories
                             D1, D2, D3, et cetera, from being scanned.  For
                             example  --exclude-dir=.cache,test  will skip
                             all files that have /.cache/ or /test/ as part
                             of their path.
                             Directories named .bzr, .cvs, .hg, .git, and
                             .svn are always excluded.
   --exclude-ext=<ext1>[,<ext2>[...]]
                             Do not count files having the given file name
                             extensions.
   --exclude-lang=<L1>[,L2,] Exclude the given comma separated languages
                             L1, L2, L3, et cetera, from being counted.
   --exclude-list-file=<file>  Ignore files and/or directories whose names
                             appear in <file>.  <file> should have one file
                             name per line.  Only exact matches are ignored;
                             relative path names will be resolved starting from 
                             the directory where cloc is invoked.  
                             See also --list-file.
   --include-lang=<L1>[,L2,] Count only the given comma separated languages
                             L1, L2, L3, et cetera.
   --match-d=<regex>         Only count files in directories matching the Perl
                             regex.  For example
                               --match-d='/(src|include)/'
                             only counts files in directories containing
                             /src/ or /include/.
   --not-match-d=<regex>     Count all files except those in directories
                             matching the Perl regex.
   --match-f=<regex>         Only count files whose basenames match the Perl
                             regex.  For example
                               --match-f='^[Ww]idget'
                             only counts files that start with Widget or widget.
   --not-match-f=<regex>     Count all files except those whose basenames
                             match the Perl regex.
   --skip-archive=<regex>    Ignore files that end with the given Perl regular
                             expression.  For example, if given
                               --skip-archive='(zip|tar(.(gz|Z|bz2|xz|7z))?)'
                             the code will skip files that end with .zip,
                             .tar, .tar.gz, .tar.Z, .tar.bz2, .tar.xz, and
                             .tar.7z.
   --skip-win-hidden         On Windows, ignore hidden files.

 Debug Options
   --categorized=<file>      Save names of categorized files to <file>.
   --counted=<file>          Save names of processed source files to <file>.
   --explain=<lang>          Print the filters used to remove comments for
                             language <lang> and exit.  In some cases the 
                             filters refer to Perl subroutines rather than
                             regular expressions.  An examination of the
                             source code may be needed for further explanation.
   --diff-alignment=<file>   Write to <file> a list of files and file pairs
                             showing which files were added, removed, and/or
                             compared during a run with --diff.  This switch
                             forces the --diff mode on.
   --help                    Print this usage information and exit.
   --found=<file>            Save names of every file found to <file>.
   --ignored=<file>          Save names of ignored files and the reason they
                             were ignored to <file>.
   --print-filter-stages     Print processed source code before and after 
                             each filter is applied.
   --show-ext[=<ext>]        Print information about all known (or just the
                             given) file extensions and exit.
   --show-lang[=<lang>]      Print information about all known (or just the
                             given) languages and exit.
   --show-os                 Print the value of the operating system mode
                             and exit.  See also --unix, --windows.
   -v[=<n>]                  Verbose switch (optional numeric value).
   --version                 Print the version of this program and exit.
   --write-lang-def=<file>   Writes to <file> the language processing filters
                             then exits.  Useful as a first step to creating
                             custom language definitions (see also
                             --force-lang-def, --read-lang-def).

 Output Options
   --3                       Print third-generation language output.
                             (This option can cause report summation to fail
                             if some reports were produced with this option
                             while others were produced without it.)
   --by-percent  X           Instead of comment and blank line counts, show 
                             these values as percentages based on the value 
                             of X in the denominator:
                                X = 'c'   -> # lines of code
                                X = 'cm'  -> # lines of code + comments
                                X = 'cb'  -> # lines of code + blanks
                                X = 'cmb' -> # lines of code + comments + blanks
                             For example, if using method 'c' and your code
                             has twice as many lines of comments as lines 
                             of code, the value in the comment column will 
                             be 200%.  The code column remains a line count.
   --csv                     Write the results as comma separated values.
   --csv-delimiter=<C>       Use the character <C> as the delimiter for comma
                             separated files instead of ,.  This switch forces
   --out=<file>              Synonym for --report-file=<file>.
                             --csv to be on.
   --progress-rate=<n>       Show progress update after every <n> files are
                             processed (default <n>=100).  Set <n> to 0 to
                             suppress progress output (useful when redirecting
                             output to STDOUT).
   --quiet                   Suppress all information messages except for
                             the final report.
   --report-file=<file>      Write the results to <file> instead of STDOUT.
   --sql=<file>              Write results as SQL create and insert statements
                             which can be read by a database program such as
                             SQLite.  If <file> is -, output is sent to STDOUT.
   --sql-append              Append SQL insert statements to the file specified
                             by --sql and do not generate table creation
                             statements.  Only valid with the --sql option.
   --sql-project=<name>      Use <name> as the project identifier for the
                             current run.  Only valid with the --sql option.
   --sql-style=<style>       Write SQL statements in the given style instead
                             of the default SQLite format.  Currently, the 
                             only style option is Oracle.
   --sum-one                 For plain text reports, show the SUM: output line
                             even if only one input file is processed.
   --xml                     Write the results in XML.
   --xsl=<file>              Reference <file> as an XSL stylesheet within
                             the XML output.  If <file> is 1 (numeric one),
                             writes a default stylesheet, cloc.xsl (or
                             cloc-diff.xsl if --diff is also given).
                             This switch forces --xml on.
   --yaml                    Write the results in YAML.

Визнані Мови

prompt> cloc --show-lang

ABAP                       (abap)
ActionScript               (as)
Ada                        (ada, adb, ads, pad)
ADSO/IDSM                  (adso)
AMPLE                      (ample, dofile, startup)
Ant                        (build.xml)
Apex Trigger               (trigger)
Arduino Sketch             (ino, pde)
ASP                        (asa, asp)
ASP.Net                    (asax, ascx, asmx, aspx, config, master, sitemap, webinfo)
Assembly                   (asm, s, S)
AutoHotkey                 (ahk)
awk                        (awk)
Bourne Again Shell         (bash)
Bourne Shell               (sh)
C                          (c, ec, pgc)
C Shell                    (csh, tcsh)
C#                         (cs)
C++                        (C, c++, cc, cpp, cxx, pcc)
C/C++ Header               (h, H, hh, hpp)
CCS                        (ccs)
Clojure                    (clj)
ClojureScript              (cljs)
CMake                      (cmake, CMakeLists.txt)
COBOL                      (cbl, CBL, cob, COB)
CoffeeScript               (coffee)
ColdFusion                 (cfm)
ColdFusion CFScript        (cfc)
CSS                        (css)
CUDA                       (cu)
Cython                     (pyx)
D/dtrace                   (d)
DAL                        (da)
Dart                       (dart)
diff                       (diff)
DITA                       (dita)
DOS Batch                  (bat, BAT, btm, BTM, cmd, CMD)
DTD                        (dtd)
ECPP                       (ecpp)
Elixir                     (ex, exs)
ERB                        (ERB, erb)
Erlang                     (erl, hrl)
Expect                     (exp)
F#                         (fs, fsi)
Focus                      (focexec)
Fortran 77                 (f, F, f77, F77, for, FOR, FTN, ftn, pfo)
Fortran 90                 (f90, F90)
Fortran 95                 (f95, F95)
Go                         (go)
Grails                     (gsp)
Groovy                     (gant, gradle, groovy)
Haml                       (haml)
Handlebars                 (handlebars, hbs)
Harbour                    (hb)
Haskell                    (hs, lhs)
HLSL                       (cg, cginc, shader)
HTML                       (htm, html)
IDL                        (idl)
IDL/Qt Project/Prolog      (pro)
InstallShield              (ism)
Java                       (java)
Javascript                 (js)
JavaServer Faces           (jsf, xhtml)
JCL                        (jcl)
JSON                       (json)
JSP                        (jsp, jspf)
Kermit                     (ksc)
Korn Shell                 (ksh)
Kotlin                     (kt)
LESS                       (less)
lex                        (l)
Lisp                       (el, lisp, lsp, sc)
Lisp/Julia                 (jl)
Lisp/OpenCL                (cl)
LiveLink OScript           (oscript)
Lua                        (lua)
m4                         (ac, m4)
make                       (am, gnumakefile, Gnumakefile, makefile, Makefile)
MATLAB                     (m)
Maven                      (pom, pom.xml)
Modula3                    (i3, ig, m3, mg)
MSBuild script             (csproj, vbproj, vcproj, wdproj, wixproj)
MUMPS                      (mps, m)
Mustache                   (mustache)
MXML                       (mxml)
NAnt script                (build)
NASTRAN DMAP               (dmap)
Objective C                (m)
Objective C++              (mm)
OCaml                      (ml, mli, mll, mly)
Oracle Forms               (fmt)
Oracle Reports             (rex)
Pascal                     (dpr, p, pas)
Pascal/Puppet              (pp)
Patran Command Language    (pcl, ses)
Perl                       (perl, plh, plx, pm)
Perl/Prolog                (PL, pl)
PHP                        (php, php3, php4, php5)
PHP/Pascal                 (inc)
Pig Latin                  (pig)
PL/I                       (pl1)
PowerShell                 (ps1)
Prolog                     (P)
Protocol Buffers           (proto)
PureScript                 (purs)
Python                     (py)
QML                        (qml)
R                          (R)
Racket                     (rkt, rktl, sch, scm, scrbl, ss)
Razor                      (cshtml)
Rexx                       (rexx)
RobotFramework             (robot, tsv)
Ruby                       (rake, rb)
Ruby HTML                  (rhtml)
Rust                       (rs)
SAS                        (sas)
SASS                       (sass, scss)
Scala                      (scala)
sed                        (sed)
SKILL                      (il)
SKILL++                    (ils)
Smarty                     (smarty, tpl)
Softbridge Basic           (sbl, SBL)
SQL                        (psql, sql, SQL)
SQL Data                   (data.sql)
SQL Stored Procedure       (spc.sql, spoc.sql, sproc.sql, udf.sql)
Standard ML                (fun, sig, sml)
Swift                      (swift)
Tcl/Tk                     (itk, tcl, tk)
Teamcenter met             (met)
Teamcenter mth             (mth)
Titanium Style Sheet       (tss)
TypeScript                 (ts)
Unity-Prefab               (mat, prefab)
Vala                       (vala)
Vala Header                (vapi)
Velocity Template Language (vm)
Verilog-SystemVerilog      (sv, svh, v)
VHDL                       (VHD, vhd, vhdl, VHDL)
vim script                 (vim)
Visual Basic               (bas, cls, ctl, dsr, frm, VB, vb, VBA, vba, vbs, VBS)
Visual Fox Pro             (sca, SCA)
Visualforce Component      (component)
Visualforce Page           (page)
Windows Message File       (mc)
Windows Module Definition  (def)
Windows Resource File      (rc, rc2)
WiX include                (wxi)
WiX source                 (wxs)
WiX string localization    (wxl)
XAML                       (xaml)
xBase                      (prg)
xBase Header               (ch)
XML                        (XML, xml)
XQuery                     (xq, xquery)
XSD                        (xsd, XSD)
XSLT                       (xsl, XSL, xslt, XSLT)
yacc                       (y)
YAML                       (yaml, yml)

Вище список може бути змінений, читаючи визначення мови з файлу з --read-lang-def або --force-lang-def варіантів.

Вісім розширень файлів є кілька зіставлень мови:

  • .cl файли можуть бути Lisp або OpenCL
  • .inc файли можуть бути PHP або Паскаль
  • .jl файли можуть бути Lisp або Юлія
  • .m файли можуть бути MATLAB, Меркурій, епідемічного паротиту, або Objective C
  • .p файли можуть бути D або DTrace
  • .pl файли можуть бути Perl або Пролог
  • .pp файли можуть бути Паскаль або ляльок
  • .pro файли можуть бути IDL, Пролог, або проект Qt

Cloc має підпрограми, які намагаються визначити правильну мову, заснований на вміст файлу для цих особливих випадків. Точність ідентифікації Мова функція, як багато коду файл містить; .m файли за допомогою всього одного або двох ліній, наприклад, рідко мають достатньо інформації, щоб правильно розрізняти MATLAB, Меркурій, епідемічного паротиту, або Objective C.Мови з розширенням файлу зіткнень важко налаштувати з --read-Lang чіткості або --force-Lang чіткості, оскільки вони не мають ніякого механізму для виявлення мови із загальними розширень. У цій ситуації необхідно змінити вихідний код Cloc.

Як це працює

Метод Cloc про роботу нагадує SLOCCount: по-перше, створити список файлів, щоб розглянути.Далі, спроба визначити, чи є чи не знайдений файли містять визнане джерело комп’ютерний мову коду.Нарешті, для файлів, визначених як вихідних файлів, викличте конкретної мови процедури, щоб підрахувати кількість рядків вихідного коду.

Більш докладний опис:

  1. Якщо вхідний файл архіву (наприклад, .tar.gz або .zip), створити тимчасовий каталог і розгорнути архів тобто за допомогою системного виклику до відповідного основний утиліти (дьоготь, bzip2, розпакуйте, і т.д.), то додати Цей тимчасовий каталог в якості одного з входів. (Це працює більш надійно на Unix, ніж на Windows.)
  2. Використовуйте File :: Find рекурсивно спускатися вхідні каталоги і складіть список імен файлів кандидат. Ігнорувати подвійних і нульового розміру файлів.
  3. Переконайтеся, що файли у списку кандидата є унікальні зміст (перший, порівнюючи розміри файлів, то для тих же розмірів файлів, порівняти MD5 хеши вмісту файлів з Дайджест :: MD5). Для кожного набору однакових файлів, видалити всі, крім першої копії, як визначено в лексичної роду, однакових файлів з набору. Зняті файли не включені в звіт. (Перемикач --skip-Унікальність відключає тести унікальність і змушує всі копії файлів, які будуть включені у звіт.) Див також --ignored = перемикач, щоб побачити, які файли були проігноровані, і чому.
  4. Перегляньте список кандидатів файлу розширень файлів, які Cloc асоціюється з мовами програмування (див --show-lang і --show-ext варіанти). Файли, які відповідають класифікуються як містять вихідний код для даної мови. Кожен файл без розширення відкривається і його перший рядок читання, щоб побачити, якщо це сценарій оболонки Unix (все, що починається з #! ). Якщо це сценарій оболонки, файл класифікується цієї мовою сценаріїв (якщо мова визнана). Якщо файл не має визнаного розширення або НЕ recognzied скриптова мова, файл ігнорується.
  5. Тепер всі інші файли в списку кандидата повинні бути початкові файли для відомих мов програмування.Для кожного з цих файлів:
    1. Читайте весь файл в пам’ять.
    2. Підрахуйте кількість рядків (= L оригінал).
    3. Видалити порожні рядки, то розраховувати знову (= L non_blank).
    4. Петлю на коментар фільтрів, визначених для цієї мови. (Наприклад, в C ++ має два фільтри: (1) видалити рядки, які починаються з додатковим прогалиною з подальшою // і (2) видалити текст між /* і */ ) застосувати кожен фільтр до коду, щоб видалити коментарі. Граф ліву над лініями (= L код).
    5. Зберегти розраховує на цій мові:
      порожні рядки = L оригінал – L non_blank
      рядки коментарів = L – L non_blank код
      рядків коду = L код

Варіанти змінити алгоритм небагато. --read-lang-def варіант, наприклад, дозволяє користувачеві читати визначення коментар фільтрів, відомих розширень файлів і відомих мов сценаріїв з файлу. Код для цієї опції обробляється між кроками 2 і 3.

Розширений використання

Видалити Коментарі з вихідного коду

Як ви можете сказати, якщо Cloc правильно визначає коментарі? Один із способів, щоб переконати себе Cloc робить правильну річ, щоб використовувати його --strip-коментарі варіант, щоб видалити коментарі та порожні рядки з файлів, а потім порівняти урізана файли оригіналів.

Давайте спробуємо це з SQLite в об’єднання , С файл, що містить всі код, необхідний для побудови SQLite бібліотеки разом з файлом заголовка:

prompt> tar zxf sqlite-amalgamation-3.5.6.tar.gz 
prompt> cd sqlite-3.5.6/
prompt> cloc --strip-comments=nc sqlite.c
       1 text file.
       1 unique file.                              
Wrote sqlite3.c.nc
       0 files ignored.

http://cloc.sourceforge.net v 1.03  T=1.0 s (1.0 files/s, 82895.0 lines/s)
-------------------------------------------------------------------------------
Language          files     blank   comment      code    scale   3rd gen. equiv
-------------------------------------------------------------------------------
C                     1      5167     26827     50901 x   0.77 =       39193.77
-------------------------------------------------------------------------------

Аргумент продовження дається --strip-коментарі довільно; тут пс був використаний як скорочення для “без коментарів”.

Cloc видалені більш 31000 рядків з файлу:

prompt> wc -l sqlite3.c sqlite3.c.nc 
  82895 sqlite3.c
  50901 sqlite3.c.nc
 133796 total
prompt> echo "82895 - 50901" | bc
31994

Тепер ми можемо порівняти orignial файл, sqlite3.c і один зачищений коментарів, sqlite3.c.nc з інструментами, як дифф або vimdiff і подивитися, що саме вважається Cloc коментарі і порожні рядки. Суворе доказ, що урізана файл містить той же код C як оригінал, щоб узагальнити ці файли і порівняти контрольні суми отриманих об’єктних файлів.

По-перше, оригінальне джерело файлу:

prompt> gcc -c sqlite3.c
prompt> md5sum sqlite3.o
cce5f1a2ea27c7e44b2e1047e2588b49  sqlite3.o

Далі, версія без коментарів:

prompt> mv sqlite3.c.nc sqlite3.c
prompt> gcc -c sqlite3.c
prompt> md5sum sqlite3.o
cce5f1a2ea27c7e44b2e1047e2588b49  sqlite3.o

Cloc видалені більш 31000 рядків коментарів і прогалин, але не змінювати вихідний код в будь-якому істотно, оскільки в результаті об’єктний файл відповідає оригіналу.

Робота з стислі архіви

Версії Cloc до v1.07 вимагав --extract-with= <cmd> можливість розповісти Cloc як розширити архівний файл. Починаючи з v1.07 це видобуток спроба автоматично. В даний час спосіб автоматичного вилучення працює досить добре на Unix-типу OS для наступних типів файлів: .tar.gz, .tar.bz2, .tgz, .zip, .ear.Деякі з цих розширень працювати на Windows, якщо один WinZip встановлений в папку за замовчуванням (C: \ Program Files \ WinZip \ WinZip32.exe). Крім того, з більш новими версіями WinZip, командного рядка доповнення необхідні для правильної роботи; в цьому випадку можна було б посилатися Cloc щось на зразок
--extract-with="\"c:\Program Files\WinZip\wzunzip\" -e -o >FILE< ." (див. повідомлення у форумі ).

У ситуаціях, коли автоматичне вилучення не вдається, можна спробувати --extract-with= <cmd> можливість підрахувати число рядків коду в бітумінозних файлів, Zip файлів, або інших стислих архівів для яких має інструмент для вилучення. Cloc приймає команду вилучення користувачем за умови, і розширює архів у тимчасову директорію (створеної з File :: Temp), підраховує рядки коду в тимчасовому каталозі, а потім видаляє цей каталог. У той час, як не особливо корисно при роботі з однієї стисненого архіву (зрештою, якщо ви збираєтеся в будь-якому випадку введіть команду вилучення, чому не просто вручну розгорнути архів?) Ця опція зручна для роботи з декількома архівами одночасно.

Наприклад, у вас є такі вихідні архіви на машині Unix
Perl-5.8.5.tar.gz
Python-2.4.2.tar.gz
і ви хочете, щоб розраховувати весь код всередині них. Команда буде

 cloc --extract-with='gzip -dc >FILE< | tar xf -' perl-5.8.5.tar.gz Python-2.4.2.tar.gz

Якщо Unix машина має GNU Tar (який може розпакувати і витягти в один прийом) команда може бути скорочений до

 cloc --extract-with='tar zxf >FILE<' perl-5.8.5.tar.gz Python-2.4.2.tar.gz

На комп’ютері Windows, за допомогою WinZip, встановленої в C: \ Program Files \ WinZip команда буде виглядати

cloc.exe --extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE< ." perl-5.8.5.tar.gz Python-2.4.2.tar.gz

Java .ear файли Zip-файли, які містять додаткові файли Zip. Cloc може обробляти вкладені в стислі архіви без праці – за умови, всі такі файли стискаються та зберігаються у тому ж шляху. Приклади підрахунку Java .ear файл в Unix і Windows:

Unix> cloc --extract-with="unzip -d . >FILE< " Project.ear

DOS> cloc.exe --extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE< ." Project.ear

Відмінності

--diff перемикач дозволяє вимірювати відносну зміну у вихідному коді і коментарі між двома версіями файлу, каталогу або архіву. Відмінності виявити набагато більше, ніж абсолютних коду пунктів двох версій файлів. Наприклад, сказати, вихідний файл має 100 рядків і його розробник поставляє нову версію з 102 ліній. Він додайте два рядки коментарів, або видалити сімнадцять рядків вихідного і додати чотирнадцять вихідні лінії і п’ять рядків коментарів, або він зробив повний рерайт, відкидаючи все 100 оригінальних ліній і додавання лінії 102 всіх нових джерел? Опція різн розповідає, як були додані багато ліній джерела, віддаляється, зміни або залишилися само, як і були додані багато ліній коментарів, видалені, змінені або залишилися колишніми.

На додаток до пар файлів, можна дати Cloc пари каталогів, або пари файлових архівів чи файловий архів і каталог. Cloc намагатиметься вирівняти пари файлів в межах каталогів або архівів і порівняти відмінності для кожної пари. Наприклад, щоб подивитися, що змінилося між GCC 4.4.0 і 4.5.0 можна зробити

  cloc --diff gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2

Будьте готові почекати за результати, хоча; --diff варіант працює набагато повільніше, ніж абсолютна кількість коду.Щоб побачити, як Cloc вирівнює файли між двома архівами, використовувати --diff вирівнювання варіант

  cloc --diff-aligment=align.txt gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2

для отримання файлу align.txt який показує файл пари, а також файли, додані і видалені. Символи == і! = Перед кожним пари файлів вказати, якщо файли ідентичні (==), або якщо вони мають різний зміст (! =).Ось приклад виведення, що показує різницю між Python 2.6.6 і 2.7-релізи:

prompt> cloc --diff  Python-2.6.6.tar.bz2 Python-2.7.tar.bz2
      3870 text files.
      4130 text files.s
      2177 files ignored.                                         
  
  2 errors:
  Diff error (quoted comments?):  /tmp/4QAqkrHN7Z/Python-2.6.6/Mac/Modules/qd/qdsupport.py
  Diff error (quoted comments?):  /tmp/LvStB1lQxd/Python-2.7/Mac/Modules/qd/qdsupport.py
  
  http://cloc.sourceforge.net v 1.52  T=422.0 s (0.0 files/s, 0.0 lines/s)
  -------------------------------------------------------------------------------
  Language                     files          blank        comment           code
  -------------------------------------------------------------------------------
  vim script
   same                            0              0              7             85
   modified                        1              0              0             20
   added                           0              0              0              1
   removed                         0              0              0              0
  Expect
   same                            1              0              0             60
   modified                        0              0              0              0
   added                           6              0              0              0
   removed                         0              0              0              0
  CSS
   same                            1              0             19            318
   modified                        0              0              0              0
   added                           0              0              0              0
   removed                         0              0              0              0
  XML
   same                            1              0              0              4
   modified                        0              0              0              0
   added                           3              0              0              0
   removed                         1              0              0              0
  m4
   same                            1              0             19           1089
   modified                        2              0              0            130
   added                           5              6              5            150
   removed                         0            660             15           5905
  Visual Basic
   same                            2              0              1             12
   modified                        0              0              0              0
   added                           0              0              0              0
   removed                         0              0              0              0
  Lisp
   same                            1              0            503           2933
   modified                        0              0              0              0
   added                           0              0              0              0
   removed                         0              0              0              0
  NAnt scripts
   same                            2              0              0             30
   modified                        0              0              0              0
   added                           0              0              0              0
   removed                         0              0              0              0
  HTML
   same                           12              0             11           2329
   modified                        2              0              0              2
   added                           0              0              0              0
   removed                         9              0              0              0
  make
   same                            3              0            353           2888
   modified                        7              0              3             11
   added                           2              1              0             14
   removed                         0              2              0              8
  Objective C
   same                            6              0             70            633
   modified                        1              0              0              2
   added                           0              0              0              0
   removed                         0              0              0              0
  Assembly
   same                           22              0           1575           9156
   modified                       14              0             78            174
   added                           3            171            111            998
   removed                         2              1              0            189
  Bourne Shell
   same                           26              0           2828          20114
   modified                        7              0            255           2179
   added                           5            163           1103           4770
   removed                         0            550           2444          11660
  (unknown)
   same                            0              0              0              0
   modified                        0              0              0              0
   added                          32              0              0              0
   removed                        26              0              0              0
  C++
   same                            0              0              0              0
   modified                        0              0              0              0
   added                           2              0              0              0
   removed                         0              0              0              0
  Teamcenter def
   same                            6              0            158            885
   modified                        2              0              0              0
   added                           1              2              4             17
   removed                         1              0              4              2
  DOS Batch
   same                           26              0            101            416
   modified                        5              0              1              8
   added                           1              0              0              0
   removed                         0              0              0              0
  C/C++ Header
   same                          143              0           9016          37452
   modified                       90              0            157          15564
   added                          12            181            341          10247
   removed                         1            101            129           5219
  C
   same                          222              0          28753         322642
   modified                      157              0            542           5023
   added                         141           1485           1730          12440
   removed                         4            223            619           4519
  Python
   same                         1211              0          92289         348923
   modified                      740              0           1238          11589
   added                         114           2845           4645          17251
   removed                        23           1409           2617           6385
  -------------------------------------------------------------------------------
  SUM:
   same                         1686              0         135703         749969
   modified                     1028              0           2274          34702
   added                         327           4854           7939          45888
   removed                        67           2946           5828          33887
  -------------------------------------------------------------------------------

Зверніть увагу на дві помилки для файла Python- Х /Mac/Modules/qd/qdsupport.py . Цей файл має Python рядки документації (текст між парами потрійних лапок), які містять C коментарі. Cloc лікує рядки документації як коментарі та обробляє їх спочатку перетворити їх у З коментарями, то за допомогою C коментар видалення регулярний вираз. Вкладені коментарі C провокувати помилкові результати, проте.Там також вихід для мови “(невідомого)”. Файли у цій категорії не є вихідні файли і, отже, не враховуються; їх присутність лише відзначити, як ніби вони були видалені, додані або модифіковані.

Створити Користувальницькі визначення мови

Cloc можете написати свої визначення мови коментар до файлу або можете прочитати визначення коментар з файлу, перекриваючи вбудовані визначення. Це може бути корисно, коли ви хочете використовувати Cloc для підрахунку рядків у мові ще не включені, щоб змінити асоціації розширень файлів з мовами, або змінити спосіб існуючі мови підраховуються.

Найпростіший спосіб для створення користувацького файлу визначення мови, щоб зробити Cloc написати свої визначення в файл, а потім змінити файл:

Unix> cloc --write-lang-def=my_definitions.txt

створює файл my_definitions.txt , які можуть бути змінені, то читати назад в ні з --read-Lang чіткості або --force-Lang чіткості варіант. Різниця між варіантами колишній визначення злиття мови з даного файлу з використанням внутрішніх визначень Cloc з cloc’taking пріоритет, якщо є збіги. --force-Лан-Defваріант, з іншого боку, замінює визначення Cloc абсолютно. Цей варіант має недолік у запобіганні Cloc з підрахунку мови, розширення карту для декількох мов , як ці мови вимагають додаткової логіки, яка не може бути виражений у файлі описів.

Unix> cloc --read-lang-def=my_definitions.txt  file1 file2 dir1 ...

Кожен запис мова складається з чотирьох частин:

  1. Назва мови, починаючи з колонки 1.
  2. Один або кілька коментарів фільтри , що починаються в колонці 5.
  3. Один або кілька розширень імен файлів, що починаються в колонці 5.
  4. Коефіцієнт 3 шкала покоління, починаючи з колонки 5. Цей запис має бути надана, але його значення не важливо, якщо ви не хочете, щоб порівняти мову в гіпотетичній мові програмування третього покоління.

Фільтр визначає метод видалення коментар текст з вихідного файлу. Наприклад вхід для C ++ виглядає наступним

C++
    filter remove_matches ^\s*//
    filter call_regexp_common C
    extension C
    extension cc
    extension cpp
    extension cxx
    extension pcc
    3rd_gen_scale 1.51

C ++ має два фільтри: по-перше, видалити рядки, які починаються з додатковим прогалиною і подальшим // . Потім видаліть всі коментарі C. C коментарі важко висловити, як регулярні вирази, щоб виклик на Regexp :: Common, щоб отримати відповідну регулярний вираз, щоб відповідати C коментарі, які потім видаляються.Більш повне обговорення різних варіантів фільтрів може з’явитися тут у майбутньому. Вихід Cloc в --write-Lang чіткості варіант повинен забезпечувати достатньо прикладів для мотивованих людей, щоб змінити або розширити визначення мови Cloc в.

Комбінат Звіти

Якщо ви керувати кількома проектами програмного забезпечення ви можете бути зацікавлені в тому, лічильники лінії за проектом, а не тільки з мови. Скажімо, ви управляти три програмних проектів звані MySQL, PostgreSQL, SQLite і. Команди, що відповідають за кожен з цих проектів запустити Cloc на їх вихідного коду і надати Вам з виходом. Наприклад команда MySQL робить

cloc --report-file=mysql-5.1.42.txt mysql-5.1.42.tar.gz

і забезпечує вас з файлової MySQL-5.1.42.txt . Зміст трьох файлів ви отримуєте є

Unix> cat mysql-5.1.42.txt
http://cloc.sourceforge.net v 1.50  T=26.0 s (108.1 files/s, 65774.5 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C++                             615          93609         110909         521041
C                               642          83179          82424         393602
C/C++ Header                   1065          33980          77633         142779
Bourne Shell                    178          14892          11437          74525
Perl                             60           7634           4667          22703
m4                               13           1220            394          10497
make                            119            914           1855           4447
XML                              27            564             23           4107
SQL                              18            517            209           3433
Assembly                         12            161              0           1304
yacc                              2            167             40           1048
lex                               2            332            113            879
Teamcenter def                   43             85            219            701
Javascript                        3             70            140            427
Pascal                            2              0            436            377
HTML                              1              7              0            250
Bourne Again Shell                1              6              1             48
DOS Batch                         8             23             73             36
--------------------------------------------------------------------------------
SUM:                           2811         237360         290573        1182204
--------------------------------------------------------------------------------
Unix> cat sqlite-3.6.22.txt
http://cloc.sourceforge.net v 1.50  T=3.0 s (4.7 files/s, 53833.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                2           7459          37993          68944
Bourne Shell                     7           3344           4522          25849
m4                               2            754             20           6557
C/C++ Header                     2            155           4808           1077
make                             1              6              0             13
-------------------------------------------------------------------------------
SUM:                            14          11718          47343         102440
-------------------------------------------------------------------------------

Unix> cat postgresql-8.4.2.txt
http://cloc.sourceforge.net v 1.50  T=16.0 s (129.1 files/s, 64474.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                              923         102324         167390         563865
C/C++ Header                   556           9180          22723          40990
Bourne Shell                    51           3692           3245          28486
SQL                            260           8246           5645          25862
yacc                             6           2667           2126          22825
Perl                            36            782            696           4894
lex                              8            708           1525           3638
make                           180           1215           1385           3453
m4                              12            199             25           1431
Teamcenter def                  13              4              0           1104
HTML                             2             94              1            410
DOS Batch                        7             53             22            188
XSLT                             5             41             30            111
Assembly                         3             17              0            105
D                                1             14             14             65
CSS                              1             16              7             44
sed                              1              1              7             15
Python                           1              5              1             12
-------------------------------------------------------------------------------
SUM:                          2066         129258         204842         697498
-------------------------------------------------------------------------------

У той час як ці три файли цікаво, ви також хочете, щоб побачити об’єднані розраховує з усіх проектів. Це може бути зроблено з Cloc в --sum_reports опції:

Unix> cloc --sum-reports --report_file=databases mysql-5.1.42.txt  postgresql-8.4.2.txt  sqlite-3.6.22.txt
Wrote databases.lang
Wrote databases.file

Поєднання звіт виробляє два вихідних файлів, один для сум з мови програмування ( databases.lang ) і один проект ( databases.file ). Їх зміст

nix> cat databases.lang
http://cloc.sourceforge.net v 1.50
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                              1567         192962         287807        1026411
C++                             615          93609         110909         521041
C/C++ Header                   1623          43315         105164         184846
Bourne Shell                    236          21928          19204         128860
SQL                             278           8763           5854          29295
Perl                             96           8416           5363          27597
yacc                              8           2834           2166          23873
m4                               27           2173            439          18485
make                            300           2135           3240           7913
lex                              10           1040           1638           4517
XML                              27            564             23           4107
Teamcenter def                   56             89            219           1805
Assembly                         15            178              0           1409
HTML                              3            101              1            660
Javascript                        3             70            140            427
Pascal                            2              0            436            377
DOS Batch                        15             76             95            224
XSLT                              5             41             30            111
D                                 1             14             14             65
Bourne Again Shell                1              6              1             48
CSS                               1             16              7             44
sed                               1              1              7             15
Python                            1              5              1             12
--------------------------------------------------------------------------------
SUM:                           4891         378336         542758        1982142
--------------------------------------------------------------------------------

Unix> cat databases.file
----------------------------------------------------------------------------------
Report File                     files          blank        comment           code
----------------------------------------------------------------------------------
mysql-5.1.42.txt                 2811         237360         290573        1182204
postgresql-8.4.2.txt             2066         129258         204842         697498
sqlite-3.6.22.txt                  14          11718          47343         102440
----------------------------------------------------------------------------------
SUM:                             4891         378336         542758        1982142
----------------------------------------------------------------------------------

Повідомити файли самі по собі можуть бути сумуються. Скажімо, ви також управляти розвитку Perl і Python, і ви хочете, щоб відстежувати тих, лінія налічує окремо від проектів баз даних. По-перше, створення звітів за Perl і Python окремо:

cloc --report-file=perl-5.10.0.txt perl-5.10.0.tar.gz
cloc --report-file=python-2.6.4.txt Python-2.6.4.tar.bz2

потім підвести їх разом з

Unix> cloc --sum-reports --report_file=script_lang perl-5.10.0.txt python-2.6.4.txt
Wrote script_lang.lang
Wrote script_lang.file

Unix> cat script_lang.lang
http://cloc.sourceforge.net v 1.50
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                              518          61871          52705         473034
Python                        1965          76022          95289         365716
Perl                          2052         110356         130018         292281
C/C++ Header                   381          13762          21402         102276
Bourne Shell                   149           9376          11665          81508
Lisp                             2           1154           2745          10448
Assembly                        38           1616           1712           9755
m4                               3            825             34           7124
make                            16            954            804           4829
HTML                            25            516             13           3010
Teamcenter def                   9            170            162           2075
XML                             28            288              0           2034
C++                             10            312            277           2000
yacc                             2            128             97           1549
DOS Batch                       42            175            152            746
Objective C                      7            102             70            635
YAML                             2              2              0            489
CSS                              1             94             19            308
vim script                       1             36              7            105
Expect                           1              0              0             60
NAnt scripts                     2              1              0             30
Visual Basic                     2              1              1             12
-------------------------------------------------------------------------------
SUM:                          5256         277761         317172        1360024
-------------------------------------------------------------------------------

Unix> cat script_lang.file
-------------------------------------------------------------------------------
Report File                  files          blank        comment           code
-------------------------------------------------------------------------------
python-2.6.4.txt              2746         135676         143269         830347
perl-5.10.0.txt               2510         142085         173903         529677
-------------------------------------------------------------------------------
SUM:                          5256         277761         317172        1360024
-------------------------------------------------------------------------------

Нарешті, об’єднати поєднання файлів:

Unix> cloc --sum-reports --report_file=everything databases.lang script_lang.lang
Wrote everything.lang
Wrote everything.file

Unix> cat everything.lang
http://cloc.sourceforge.net v 1.50
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                              2085         254833         340512        1499445
C++                             625          93921         111186         523041
Python                         1966          76027          95290         365728
Perl                           2148         118772         135381         319878
C/C++ Header                   2004          57077         126566         287122
Bourne Shell                    385          31304          30869         210368
SQL                             278           8763           5854          29295
m4                               30           2998            473          25609
yacc                             10           2962           2263          25422
make                            316           3089           4044          12742
Assembly                         53           1794           1712          11164
Lisp                              2           1154           2745          10448
XML                              55            852             23           6141
lex                              10           1040           1638           4517
Teamcenter def                   65            259            381           3880
HTML                             28            617             14           3670
DOS Batch                        57            251            247            970
Objective C                       7            102             70            635
YAML                              2              2              0            489
Javascript                        3             70            140            427
Pascal                            2              0            436            377
CSS                               2            110             26            352
XSLT                              5             41             30            111
vim script                        1             36              7            105
D                                 1             14             14             65
Expect                            1              0              0             60
Bourne Again Shell                1              6              1             48
NAnt scripts                      2              1              0             30
sed                               1              1              7             15
Visual Basic                      2              1              1             12
--------------------------------------------------------------------------------
SUM:                          10147         656097         859930        3342166
--------------------------------------------------------------------------------

Unix> cat everything.file
-------------------------------------------------------------------------------
Report File                  files          blank        comment           code
-------------------------------------------------------------------------------
databases.lang                4891         378336         542758        1982142
script_lang.lang              5256         277761         317172        1360024
-------------------------------------------------------------------------------
SUM:                         10147         656097         859930        3342166
-------------------------------------------------------------------------------

SQL

Cloc можете написати результати у вигляді таблиці SQL створити і вставити заяви для використання з реляційними базами даних програм, таких як SQLite, MySQL, PostgreSQL, Oracle, Microsoft SQL або. Після того, як інформація Кількість код в базі даних, інформація може бути допитаний і відображаються в цікавими способами.

База даних, створена з Cloc виходу SQL має дві таблиці, метадані і т :

 

метадані

Поле Тип
мітка текст
проект текст
elapsed_s реальний

t

Поле Тип
проект текст
мова текст
файл текст
nBlank ціле число
nComment ціле число
nCode ціле число
nScaled реальний

Метадані таблиця містить інформацію про те, коли був зроблений Cloc виконання. --sql-Append перемикач дозволяє об’єднати безліч трас в єдиній базі даних; при кожному запуску додає рядок в таблицю метаданих. Інформація підрахунок код знаходиться в таблиці T .

Давайте повторимо приклади підрахунку код Perl, Python, SQLite, MySQL і PostgreSQL архіви, показані в звітах об’єднують прикладі вище, цього разу за допомогою опції виводу SQL і SQLite движок бази даних.

--sql перемикач вказує Cloc генерувати висновок у вигляді таблиці SQL створити і вставити команди. Перемикач приймає аргумент імені файлу, щоб написати ці SQL заяви в, або, якщо аргумент 1 (числове один), струмки висновок STDOUT. З SQLite програми командного рядка, sqlite3 , можете прочитати команди зі стандартного вводу, ми можемо обійтися без зберігання SQL заяви в файл і використовувати --sql 1 до даних труб безпосередньо в виконуваний файл SQLite:

 cloc --sql 1 --sql-project mysql mysql-5.1.42.tar.gz    | sqlite3 code.db

--sql-Проект MySQL частина є необов’язковою; немає необхідності вказувати назву проекту, коли працювати тільки з однією базою коду. Однак, оскільки ми будемо додавати лічильники коду з чотирьох інших тарболи ми будемо тільки в змозі визначити дані, джерело вхідного сигналу, якщо ми поставляємо ім’я проекту для кожного прогону.Тепер у нас є база даних нам потрібно буде пройти в --sql-дописування перемикача сказати Cloc не знищили цю базу даних, але замість того, щоб додати більше даних:

cloc --sql 1 --sql-project postgresql --sql-append postgresql-8.4.2.tar.bz2          | sqlite3 code.db
cloc --sql 1 --sql-project sqlite     --sql-append sqlite-amalgamation-3.6.22.tar.gz | sqlite3 code.db
cloc --sql 1 --sql-project python     --sql-append Python-2.6.4.tar.bz2              | sqlite3 code.db
cloc --sql 1 --sql-project perl       --sql-append perl-5.10.0.tar.gz                | sqlite3 code.db

Тепер починається найцікавіше – у нас є база даних, code.db , з великою кількістю інформації про п’ять проектів і може почати його запитів для всяких цікавих фактів.

Який довгий файл на всіх проектів?

>  sqlite3 code.db 'select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)'
sqlite|sqlite-3.6.22/sqlite3.c|110860

sqlite3 формат виводу За замовчуванням залишає бажати кращого. Ми можемо додати опцію в файл гс програми, ~ / .sqliterc , щоб показати заголовки стовпців: .header на одному може бути спокуса також включають колонку .mode в ~ / .sqliterc але це викликає проблеми, коли вихід має більше ніж один гребти так як ширини записів у першому рядку регулюють максимальну ширину для всіх подальших рядів. Часто це призводить до усіченої виході – зовсім не бажані. Одним з варіантів є, щоб написати вихідний форматування даних користувача SQLite, таких як sqlite_formatter . Він використовується так:


>  sqlite3 code.db ‘select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)’ | sqlite_formatter

Project File                    nL
_______ _______________________ ______
sqlite  sqlite-3.6.22/sqlite3.c 110860

Відзначимо також, що sqlite3 має опцію виведення HTML, --html , що також може виявитися корисним.

Який довгий файл у кожному проекті?

> sqlite3 code.db 'select project,file,max(nBlank+nComment+nCode) as nL from t group by project order by nL;' | sqlite_formatter

Project    File                                          nL     
__________ _____________________________________________ ______ 
perl       perl-5.10.0/t/op/mkdir.t                       22658 
python     Python-2.6.4/Lib/email/quoprimime.py           28091 
postgresql postgresql-8.4.2/contrib/pgcrypto/pgp-pgsql.c  40041 
mysql      mysql-5.1.42/netware/mysqldump.def             51841 
sqlite     sqlite-3.6.22/config.sub                      110860 

Які файли в кожному проекті є більшість рядків коду?

> sqlite3 code.db 'select project,file,max(nCode) as nL from t group by project order by nL desc;' | sqlite_formatter

Project    File                                          nL    
__________ _____________________________________________ _____ 
sqlite     sqlite-3.6.22/config.sub                      66142 
mysql      mysql-5.1.42/netware/mysqldump.def            38555 
postgresql postgresql-8.4.2/contrib/pgcrypto/pgp-pgsql.c 36905 
python     Python-2.6.4/Lib/email/quoprimime.py          26705 
perl       perl-5.10.0/t/op/mkdir.t                      20079 

Які вихідні файли С з більш ніж 300 ліній мають відношення коментар нижче 1%?

> sqlite3 code.db 'select project, language, file, nCode, nComment, (100.0*nComment)/(nComment+nCode) as comment_ratio from t 
   where language="C" and nCode > 300 and comment_ratio < 1 order by comment_ratio;' | sqlite_formatter

Project    Language File                                                                          nCode nComment comment_ratio      
__________ ________ _____________________________________________________________________________ _____ ________ __________________ 
mysql      C        mysql-5.1.42/scripts/mysql_fix_privilege_tables_sql.c                           658        0 0.0                
python     C        Python-2.6.4/Python/graminit.c                                                 2143        1 0.0466417910447761 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c          2095        1 0.0477099236641221 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_french.c           1211        1 0.0825082508250825 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_french.c      1201        1 0.0831946755407654 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_hungarian.c        1182        1 0.084530853761623  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_hungarian.c   1178        1 0.0848176420695505 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_english.c          1072        1 0.0931966449207828 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_english.c     1064        1 0.0938967136150235 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_spanish.c          1053        1 0.094876660341556  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_spanish.c     1049        1 0.0952380952380952 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_italian.c          1031        1 0.0968992248062016 
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_italian.c     1023        1 0.09765625         
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_portuguese.c        981        1 0.10183299389002   
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_portuguese.c   975        1 0.102459016393443  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_romanian.c          967        1 0.103305785123967  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_2_romanian.c     961        1 0.103950103950104  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_finnish.c           720        1 0.13869625520111   
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_porter.c            717        1 0.139275766016713  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_finnish.c      714        1 0.13986013986014   
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_porter.c       711        1 0.140449438202247  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_KOI8_R_russian.c          660        1 0.151285930408472  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_russian.c           654        1 0.152671755725191  
python     C        Python-2.6.4/Mac/Modules/qt/_Qtmodule.c                                       26705       42 0.157026956294164  
python     C        Python-2.6.4/Mac/Modules/icn/_Icnmodule.c                                      1521        3 0.196850393700787  
mysql      C        mysql-5.1.42/strings/ctype-extra.c                                             8348       17 0.203227734608488  
python     C        Python-2.6.4/Python/Python-ast.c                                               5910       17 0.286823013328834  
python     C        Python-2.6.4/Mac/Modules/menu/_Menumodule.c                                    3263       10 0.305530094714329  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_dutch.c             596        2 0.334448160535117  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_dutch.c        586        2 0.340136054421769  
perl       C        perl-5.10.0/x2p/a2p.c                                                          2916       10 0.341763499658236  
python     C        Python-2.6.4/Mac/Modules/qd/_Qdmodule.c                                        6694       24 0.357249181303959  
python     C        Python-2.6.4/Mac/Modules/win/_Winmodule.c                                      3056       11 0.358656667753505  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_german.c            476        2 0.418410041841004  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_german.c       470        2 0.423728813559322  
perl       C        perl-5.10.0/x2p/walk.c                                                         2024       10 0.491642084562439  
python     C        Python-2.6.4/Mac/Modules/ctl/_Ctlmodule.c                                      5442       28 0.511882998171846  
python     C        Python-2.6.4/Mac/Modules/ae/_AEmodule.c                                        1347        7 0.51698670605613   
python     C        Python-2.6.4/Mac/Modules/app/_Appmodule.c                                      1712        9 0.52295177222545   
mysql      C        mysql-5.1.42/strings/ctype-euc_kr.c                                            8691       49 0.560640732265446  
mysql      C        mysql-5.1.42/storage/archive/archive_reader.c                                   348        2 0.571428571428571  
python     C        Python-2.6.4/Mac/Modules/evt/_Evtmodule.c                                       504        3 0.591715976331361  
python     C        Python-2.6.4/Modules/expat/xmlrole.c                                           1250        8 0.635930047694754  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_danish.c            312        2 0.636942675159236  
mysql      C        mysql-5.1.42/strings/ctype-gbk.c                                               9946       64 0.639360639360639  
postgresql C        postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_danish.c       310        2 0.641025641025641  
mysql      C        mysql-5.1.42/strings/ctype-gb2312.c                                            5735       40 0.692640692640693  
python     C        Python-2.6.4/Mac/Modules/res/_Resmodule.c                                      1621       12 0.734843845682792  
python     C        Python-2.6.4/Mac/Modules/drag/_Dragmodule.c                                    1046        8 0.759013282732448  
postgresql C        postgresql-8.4.2/contrib/hstore/hstore_op.c                                     522        4 0.760456273764259  
python     C        Python-2.6.4/Mac/Modules/list/_Listmodule.c                                    1022        8 0.776699029126214  
python     C        Python-2.6.4/Mac/Modules/te/_TEmodule.c                                        1198       10 0.827814569536424  
python     C        Python-2.6.4/Mac/Modules/cg/_CGmodule.c                                        1190       10 0.833333333333333  
postgresql C        postgresql-8.4.2/contrib/hstore/hstore_io.c                                     451        4 0.879120879120879  
postgresql C        postgresql-8.4.2/src/interfaces/ecpg/preproc/preproc.c                        36905      330 0.886262924667651  
python     C        Python-2.6.4/Modules/clmodule.c                                                2379       23 0.957535387177352  
python     C        Python-2.6.4/Mac/Modules/folder/_Foldermodule.c                                 306        3 0.970873786407767  

Які десять довгі файли (на основі рядків коду), які не мають жодного коментаря на всіх? Виключити заголовок і YAML файли.

> sqlite3 code.db 'select project, file, nCode from t where nComment = 0 and language not in ("C/C++ Header", "YAML") order by nCode desc limit 10;' | sqlite_formatter

Project File                                                  nCode 
_______ _____________________________________________________ _____ 
python  Python-2.6.4/PC/os2emx/python26.def                    1188 
python  Python-2.6.4/Lib/test/cjkencodings_test.py             1019 
python  Python-2.6.4/Tools/msi/schema.py                        920 
python  Python-2.6.4/Lib/msilib/schema.py                       920 
perl    perl-5.10.0/symbian/config.sh                           810 
perl    perl-5.10.0/uconfig.sh                                  771 
python  Python-2.6.4/Tools/pybench/Lookups.py                   700 
mysql   mysql-5.1.42/scripts/mysql_fix_privilege_tables_sql.c   658 
python  Python-2.6.4/Tools/pybench/Numbers.py                   637 
python  Python-2.6.4/Tools/pybench/Arithmetic.py                596

Які найбільш популярні мови (в плані рядків коду) в кожному проекті?

> sqlite3 code.db 'select project, language, sum(nCode) as SumCode from t group by project,language order by project,SumCode desc;' | sqlite_formatter

Project    Language           SumCode 
__________ __________________ _______ 
mysql      C++                 521041 
mysql      C                   393602 
mysql      C/C++ Header        142779 
mysql      Bourne Shell         74525 
mysql      Perl                 22703 
mysql      m4                   10497 
mysql      make                  4447 
mysql      XML                   4107 
mysql      SQL                   3433 
mysql      Assembly              1304 
mysql      yacc                  1048 
mysql      lex                    879 
mysql      Teamcenter def         701 
mysql      Javascript             427 
mysql      Pascal                 377 
mysql      HTML                   250 
mysql      Bourne Again Shell      48 
mysql      DOS Batch               36 
perl       Perl                292281 
perl       C                   140483 
perl       C/C++ Header         44042 
perl       Bourne Shell         36882 
perl       Lisp                  7515 
perl       make                  2044 
perl       C++                   2000 
perl       XML                   1972 
perl       yacc                  1549 
perl       YAML                   489 
perl       DOS Batch              322 
perl       HTML                    98 
postgresql C                   563865 
postgresql C/C++ Header         40990 
postgresql Bourne Shell         28486 
postgresql SQL                  25862 
postgresql yacc                 22825 
postgresql Perl                  4894 
postgresql lex                   3638 
postgresql make                  3453 
postgresql m4                    1431 
postgresql Teamcenter def        1104 
postgresql HTML                   410 
postgresql DOS Batch              188 
postgresql XSLT                   111 
postgresql Assembly               105 
postgresql D                       65 
postgresql CSS                     44 
postgresql sed                     15 
postgresql Python                  12 
python     Python              365716 
python     C                   332551 
python     C/C++ Header         58234 
python     Bourne Shell         44626 
python     Assembly              9755 
python     m4                    7124 
python     Lisp                  2933 
python     HTML                  2912 
python     make                  2785 
python     Teamcenter def        2075 
python     Objective C            635 
python     DOS Batch              424 
python     CSS                    308 
python     vim script             105 
python     XML                     62 
python     Expect                  60 
python     NAnt scripts            30 
python     Visual Basic            12 
sqlite     C                    68944 
sqlite     Bourne Shell         25849 
sqlite     m4                    6557 
sqlite     C/C++ Header          1077 
sqlite     make                    13 

Третього покоління Мова масштабні коефіцієнти

Cloc версії до 1.50 за замовчуванням обчислюється, за надані входів, груба оцінка того, скільки рядків коди потрібно написати той же код в гіпотетичному мовою третього покоління комп’ютера. Для отримання цього висновку один тепер повинні використовувати --3 перемикач.

Масштабні коефіцієнти були отримані від версії мови співвідношеннях зачепленням перерахованих на веб-сайті Мейс Consulting, 2006 http://softwareestimator.com/IndustryData2.htm , використовуючи це рівняння:

Cloc масштабний коефіцієнт для мови X = третього покоління замовчуванням коефіцієнт фінансової залежності / мова X співвідношення власних і позикових

наприклад,

Cloc масштабний фактор третій покоління для DOS Batch = 80/128 = 0,625

Найбільший недолік цього підходу полягає в тому, що для передач відносини визначені для логічних рядків вихідного коду не фізичні лінії (який Cloc відліків). Значення в Cloc в “масштабі” і “3-го покоління. екв. колонки повинні бути прийняті з великою недовірою.

Обмеження

Визначення коментарі у вихідному коді складніше, ніж можна було б очікувати. Багато мови потрібно повний парсер вважатися правильно. Cloc не намагайтеся розібрати будь-який з мов вона спрямована розраховувати, і тому є недосконалим інструментом. Нижче наведені відомі проблеми:

  1. Рядки, що містять як вихідний код і коментарі вважаються рядків коду.
  2. Коментар маркери в рядках або тут-документирозглядаються як фактичні коментар маркерів і не строкових літералів.Наприклад наступні рядки коду C
    printf(" /* ");
    for (i = 0; i < 100; i++) {
        a += i;
    }
    printf(" */ ");
    

    по всій видимості, Cloc як дві лінії C коду (лінії з чорним текстом) і трьох ліній коментарі (лінії, які мають тільки червоний текст – ліній з чорного і червоного тексту розглядаються як код).

  3. Lua довгі коментарі, не визнаються.

Як замовити підтримку додаткових мов

Якщо Cloc не визнає мову ви зацікавлені в підрахунку, розмістити наступну інформацію на Feature Request на SourceForge сторінці Cloc в:

  1. Розширення, пов’язані з мовою. Якщо мова не покладатися на розширень файлів, а замість цього працює з іменами файлів нерухомих або #! програмних викликів стиль, поясніть, що це таке.
  2. Опис того, як коментарі визначені.
  3. Посилання на приклад коду.

Автор

Аль Даніал

Подяки

Вольфрам Реслер умови більшість прикладів коду в набір тестів. Ці приклади зі своєї колекції привіт світ .

Ісмет Куршуноглу знайшли помилки з прилавка свинки і забезпечує доступ до комп’ютера з великим тілом MUMPS коду, щоб перевірити Cloc.

Тод Хаггінс дав корисні поради для фільтрів Visual Basic.

Антон Демічев знайшов ваду з прилавка JSP в Cloc v0.76 і написав генератор XML-виведенні для --xml варіант.

Рувим Томас зазначив, що ІСО С99 дозволяє // як маркера коментаря, за умови, код для --no3 і --stdin-ма варіантами, вважаючи мову m4, і запропонував кілька удосконалень користувача інтерфейсу.

Майкл Белло умови код --opt-матч-е , --opt-ні-матч-е , --opt-матч-д , і --opt-ні-матч-д варіантів.

Махбуб Хусейн надихнув --original-DIR і --skip-єдиності варіанти, знайшли помилку в логіці виявлення дублікатів файлів і поліпшив фільтр JSP.

Ренді Шаро виявлені і виправлені неініціалізованої змінної помилка для скриптів, що мають тільки один рядок.

Стівен Бейкер виявлені і виправлені проблеми з генератором виведення YAML.

Грег Той умови код, щоб поліпшити виявлення порожнього рядка в COBOL.

Джоел Олівейра умови код, щоб дозволити --exclude-лист-файла ім’я каталогу ручка виняток.

Blazej Кролл умови код продукувати XSLT-файл, Cloc-diff.xsl , при виробництві висновок XML для --diff варіант.

Денис Сілаков посилюється код, який генерує cloc.xsl при використанні --by-файл і --by-файл за Lang варіантів, і за умови XSL файл, який працює з --diff виробництва.

Енді (awalshe@sf.net) за умови, код, щоб виправити кілька помилок: правильний висновок --counted так, що тільки ті файли, які використовуються при підрахунку коду з’являються і результати показали мовою, а не ім’я файлу; дозволяють --diff вихід з декількох трас будуть підведені разом з --sum-звітів .

Ярі Аалто створив початковий варіант cloc.1.pod і підтримує пакет Debian для Cloc.

Міккель Крістіансен (mikkels@gmail.com) за умови, визначення лічильника для Clojure і ClojureScript.

Райан Ліндеман реалізована --by відсотків функцію.Кент С. Доддс, kentcdodds , створена і підтримується НПМ пакет Cloc.

Розвиток Cloc частково фінансується Northrop Grumman Corporation.

Авторське право

(C) 2006-2015, ,

Ліцензія

Ця програма є вільним програмним забезпеченням;ви можете розповсюджувати та / або змінювати його відповідно до умов GNU General Public License , виданої Фондом вільного програмного забезпечення; або версії 2 Ліцензії, або (за вашим вибором) будь-якої пізнішої версії.


Отримати Cloc на SourceForge.net.  Швидкий, Безпечний и вільний Open Source завантаження програмного забезпечення