Count Lines of Code, Comments and Whitespace in Source Files and Archives
Counts blank lines, comment lines, and physical lines of source code in source files/trees/archives. An R wrapper to the Perl cloc
utility https://github.com/AlDanial/cloc by @AlDanial.
The following functions are implemented:
cloc
: Count lines of code, comments and whitespace in source files/archivescloc_by_file
: Count lines of code, comments and whitespace in source files/archives by filecloc_cran
: Count lines of code (etc) from source packages on CRANcloc_git
: Count lines of code, comments and whitespace in a git treecloc_remove_comments
: Strip comments and white space from a single source filecloc_recognized_languages
: Return a data frame of ‘cloc’ recognized languages and associated extensionscloc_call
: Call ‘cloc.pl’ directly with granular control over optionsclock_pkg_md
: Run cloc_pkg()
on active package and format it as a markdown table for knitting into reportscloc_help
: See the command-line helpcloc_version
: Retrieve the version of the embedded perl scriptcloc_os
: Ask the embedded perl script to detect the OS typeBasic usage
# by dir
cloc(system.file("extdata", package="cloc"))
#> # A tibble: 2 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 extdata C++ 1 0.5 142 0.507 41 0.631 63 0.470
#> 2 extdata R 1 0.5 138 0.493 24 0.369 71 0.530
# by file
cloc(system.file("extdata", "qrencoder.cpp", package="cloc"))
#> # A tibble: 1 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 qrencoder.… C++ 1 1 142 1 41 1 63 1
# from a url
cloc("https://rud.is/dl/cloc-1.74.tar.gz")
#> # A tibble: 93 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 cloc-1.7… Perl 5 0.0180 19712 0.598 1353 0.420 2430 0.443
#> 2 cloc-1.7… YAML 141 0.507 2887 0.0876 1 0.000311 141 0.0257
#> 3 cloc-1.7… Markdown 1 0.00360 2195 0.0666 226 0.0702 26 0.00474
#> 4 cloc-1.7… ANTLR Gr… 2 0.00719 1012 0.0307 200 0.0621 59 0.0108
#> 5 cloc-1.7… R 3 0.0108 698 0.0212 95 0.0295 312 0.0569
#> 6 cloc-1.7… C/C++ He… 1 0.00360 617 0.0187 191 0.0593 780 0.142
#> 7 cloc-1.7… C++ 4 0.0144 570 0.0173 132 0.0410 173 0.0315
#> 8 cloc-1.7… Forth 2 0.00719 529 0.0160 17 0.00528 84 0.0153
#> 9 cloc-1.7… TypeScri… 3 0.0108 410 0.0124 52 0.0162 39 0.00711
#> 10 cloc-1.7… Logtalk 1 0.00360 368 0.0112 59 0.0183 57 0.0104
#> # … with 83 more rows
Custom CRAN package counter:
cloc_cran(c("archdata", "hrbrthemes", "iptools", "dplyr"))
#> # A tibble: 19 x 11
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 archd… <NA> 0 0 0 0. 0 0 0 0
#> 2 hrbrt… R 21 0.7 1094 6.63e-1 215 0.560 584 0.832
#> 3 hrbrt… HTML 2 0.0667 366 2.22e-1 48 0.125 2 0.00285
#> 4 hrbrt… CSS 1 0.0333 113 6.85e-2 27 0.0703 0 0
#> 5 hrbrt… Rmd 3 0.1 35 2.12e-2 78 0.203 116 0.165
#> 6 hrbrt… Markdown 1 0.0333 33 2.00e-2 16 0.0417 0 0
#> 7 hrbrt… YAML 2 0.0667 8 4.85e-3 0 0 0 0
#> 8 iptoo… C++ 4 0.138 846 4.21e-1 167 0.400 375 0.286
#> 9 iptoo… HTML 2 0.0690 633 3.15e-1 54 0.129 2 0.00153
#> 10 iptoo… R 20 0.690 444 2.21e-1 133 0.319 638 0.487
#> 11 iptoo… Rmd 2 0.0690 48 2.39e-2 33 0.0791 72 0.0550
#> 12 iptoo… C/C++ H… 1 0.0345 37 1.84e-2 30 0.0719 223 0.170
#> 13 dplyr… R 171 0.552 14999 4.76e-1 3127 0.425 4957 0.685
#> 14 dplyr… C/C++ H… 101 0.326 6661 2.11e-1 1754 0.238 483 0.0668
#> 15 dplyr… C++ 23 0.0742 4706 1.49e-1 954 0.130 437 0.0604
#> 16 dplyr… HTML 5 0.0161 3206 1.02e-1 140 0.0190 5 0.000691
#> 17 dplyr… Markdown 2 0.00645 1479 4.69e-2 708 0.0962 0 0
#> 18 dplyr… Rmd 7 0.0226 462 1.46e-2 667 0.0907 1350 0.187
#> 19 dplyr… C 1 0.00323 30 9.51e-4 7 0.000951 0 0
#> # … with 1 more variable: pkg <chr>
git tree
cloc_git("~/packages/cloc")
#> # A tibble: 10 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 cloc Perl 1 0.0256 11153 0.863 835 0.592 1291 0.690
#> 2 cloc R 17 0.436 622 0.0481 207 0.147 360 0.192
#> 3 cloc CSS 2 0.0513 282 0.0218 71 0.0504 31 0.0166
#> 4 cloc Markdown 4 0.103 265 0.0205 57 0.0404 0 0
#> 5 cloc HTML 3 0.0769 251 0.0194 106 0.0752 36 0.0192
#> 6 cloc JavaScript 2 0.0513 144 0.0111 40 0.0284 16 0.00855
#> 7 cloc C++ 1 0.0256 142 0.0110 41 0.0291 63 0.0337
#> 8 cloc YAML 4 0.103 39 0.00302 15 0.0106 3 0.00160
#> 9 cloc Rmd 1 0.0256 24 0.00186 38 0.0270 71 0.0379
#> 10 cloc JSON 4 0.103 4 0.000309 0 0 0 0
git tree (with specific commit)
cloc_git("~/packages/cloc", "3643cd09d4b951b1b35d32dffe35985dfe7756c4")
#> # A tibble: 5 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 cloc Perl 1 0.111 10059 0.987 787 0.911 1292 0.957
#> 2 cloc Markdown 2 0.222 60 0.00589 31 0.0359 0 0
#> 3 cloc R 4 0.444 52 0.00510 22 0.0255 25 0.0185
#> 4 cloc Rmd 1 0.111 13 0.00128 21 0.0243 32 0.0237
#> 5 cloc YAML 1 0.111 10 0.000981 3 0.00347 1 0.000741
remote git tree
cloc_git("git://github.com/maelle/convertagd.git")
#> # A tibble: 4 x 10
#> source language file_count file_count_pct loc loc_pct blank_lines blank_line_pct comment_lines comment_line_pct
#> <chr> <chr> <int> <dbl> <int> <dbl> <int> <dbl> <int> <dbl>
#> 1 convertagd… R 7 0.583 249 0.659 70 0.56 68 0.667
#> 2 convertagd… Markdown 2 0.167 77 0.204 23 0.184 0 0
#> 3 convertagd… YAML 2 0.167 42 0.111 16 0.128 4 0.0392
#> 4 convertagd… Rmd 1 0.0833 10 0.0265 16 0.128 30 0.294
Detailed results by file
# whole dir
str(cloc_by_file(system.file("extdata", package="cloc")))
#> Classes 'tbl_df', 'tbl' and 'data.frame': 2 obs. of 6 variables:
#> $ source : chr "extdata" "extdata"
#> $ filename : chr "/Library/Frameworks/R.framework/Versions/3.5/Resources/library/cloc/extdata/qrencoder.cpp" "/Library/Frameworks/R.framework/Versions/3.5/Resources/library/cloc/extdata/dbi.r"
#> $ language : chr "C++" "R"
#> $ loc : int 142 138
#> $ blank_lines : int 41 24
#> $ comment_lines: int 63 71
# single file
str(cloc_by_file(system.file("extdata", "qrencoder.cpp", package="cloc")))
#> Classes 'tbl_df', 'tbl' and 'data.frame': 1 obs. of 6 variables:
#> $ source : chr "qrencoder.cpp"
#> $ filename : chr "/Library/Frameworks/R.framework/Versions/3.5/Resources/library/cloc/extdata/qrencoder.cpp"
#> $ language : chr "C++"
#> $ loc : int 142
#> $ blank_lines : int 41
#> $ comment_lines: int 63
Recognized languages
cloc_recognized_languages()
#> # A tibble: 242 x 2
#> lang extensions
#> <chr> <chr>
#> 1 ABAP abap
#> 2 ActionScript as
#> 3 Ada ada, adb, ads, pad
#> 4 ADSO/IDSM adso
#> 5 Agda agda, lagda
#> 6 AMPLE ample, dofile, startup
#> 7 Ant build.xml, build.xml
#> 8 ANTLR Grammar g, g4
#> 9 Apex Trigger trigger
#> 10 Arduino Sketch ino, pde
#> # … with 232 more rows
Strip comments and whitespace from individual source files
cat(
cloc_remove_comments("https://raw.githubusercontent.com/maelle/convertagd/master/README.Rmd")
)
#> library("knitr")
#> library("devtools")
#> install_github("masalmon/convertagd")
#> library("convertagd")
#> file <- system.file("extdata", "dummyCHAI.agd", package = "convertagd")
#> testRes <- read_agd(file, tz = "GMT")
#> kable(testRes[["settings"]])
#> kable(head(testRes[["raw.data"]]))
#> path_to_directory <- system.file("extdata", package = "convertagd")
#> batch_read_agd(path_to_directory, tz="GMT")
Lang | # Files | (%) | LoC | (%) | Blank lines | (%) | # Lines | (%) |
---|---|---|---|---|---|---|---|---|
R | 16 | 0.94 | 484 | 0.95 | 183 | 0.83 | 289 | 0.8 |
Rmd | 1 | 0.06 | 24 | 0.05 | 38 | 0.17 | 71 | 0.2 |
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.