Last active
January 11, 2019 09:26
-
-
Save dockimbel/2af078e02e56fcc092aea771de0c5e9a to your computer and use it in GitHub Desktop.
Lines of code statistics from Red files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Red [ | |
Title: "Lines of code statistics from Red files" | |
Author: "Nenad Rakocevic" | |
File: %rloc.reds | |
Tabs: 4 | |
Purpose: { | |
Counts the number of files, lines of code and inline comments in Red/Rebol files, across folders, | |
filtering files using a list of suffixes and excluding files from a given list of subfolders. | |
} | |
] | |
context [ | |
count-lines: function [src [string!] entry [block!]][ ;-- entry receives [LOC comments] | |
parse src [ | |
any [ | |
lf (entry/1: entry/1 + 1) | |
| dbl-quote thru dbl-quote | |
| #"{" thru #"}" | |
| #";" to lf (entry/2: entry/2 + 1) | |
| skip | |
] | |
] | |
] | |
set 'count-loc function [ | |
dir [file!] "Root folder where to start the analysis" | |
allowed [block!] "List of matched file extensions" | |
excluded [block!] "List of excluded folders" | |
return: [block!] ;"Copy of allowed list expanded with: [files-number LOC comments]" | |
][ | |
if empty? stats: [][foreach ext allowed [repend stats [ext copy [0 0 0]]]] | |
foreach file read dir [ | |
either dir? file [ | |
if dir <> %./ [file: dir/:file] | |
deny?: no | |
foreach no-go excluded [if deny?: find/match file no-go [break]] | |
unless deny? [count-loc file allowed excluded] | |
][ | |
if entry: select stats suffix? file [ | |
entry/1: entry/1 + 1 | |
count-lines read dir/:file next entry | |
] | |
] | |
] | |
stats | |
] | |
] | |
#example [ | |
count-loc %./ [%.red %.r %.reds] [ | |
%.git/ | |
%.github/ | |
%docs/ | |
%system/library/ | |
%system/tests/ | |
%quick-test/ | |
%tests/ | |
] | |
; == [%.red [48 16495 776] %.r [39 25186 3507] %.reds [154 85742 7687]] | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment