gloc 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +89 -16
- data/exe/gloc +13 -10
- data/lib/gloc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb008de5d3e4876e1fdfc917d9c9f8c8b29560c0
|
4
|
+
data.tar.gz: a90bd40e3e81f8f5f5a9bd1848d1ac219dac3b1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 329271c34e3ce802253be45beabe866e8747ceaa5705dde7448359248d6a3bfc6071a9f065f00392fed5ece92aed9ec9b67904e02ddd6ef138a20208ec8cf47a
|
7
|
+
data.tar.gz: a669b54dd3a4875954ec6002d47e9be98d5fbfcc237b023e44fd34f70cc343921f5d5f8de7361ab2404f6ab0c00323402cd1707c60c90c69b25fed8107df53a5
|
data/README.md
CHANGED
@@ -1,8 +1,60 @@
|
|
1
|
-
# Gloc
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
# Gloc(k) Model 17 - 9mm
|
2
|
+
|
3
|
+
`gloc` is an opinionated utility to count lines of code.
|
4
|
+
|
5
|
+
* it groups files based on their file extension, instead of trying to guess their language and grouping them that way
|
6
|
+
* it doesn't ignore files just because it doesn't recognise them _(ie. cannot correctly guess their language)_
|
7
|
+
* in a git repo, it processes `$( git ls-files )` by default
|
8
|
+
* in a non-git repo, it processes `$( find . -type f)` by default
|
9
|
+
* it generates human-friendly, `loc`-alike output
|
10
|
+
* it is Unix pipeline friendly, by design:
|
11
|
+
* it reads the list of filenames to process from `stdin` if `[ ! -t 0 ]`
|
12
|
+
* it writes machine-parsable JSON output to `stdout` if `[ ! -t 1 ]`
|
13
|
+
|
14
|
+
## Example
|
15
|
+
|
16
|
+
For the popular Ruby on Rails framework, `gloc` generates the following `loc`-alike output:
|
17
|
+
|
18
|
+
--------------------------------------------------------------------------------
|
19
|
+
Language Files Lines Blank Comment Code
|
20
|
+
--------------------------------------------------------------------------------
|
21
|
+
*.rb 2,149 304,495 47,846 42,651 213,998
|
22
|
+
*.md 74 49,604 14,204 0 35,400
|
23
|
+
*.js 39 9,717 1,452 564 7,701
|
24
|
+
*.yml 150 3,367 278 0 3,089
|
25
|
+
*.erb 408 2,183 254 0 1,929
|
26
|
+
* 81 2,255 392 0 1,863
|
27
|
+
*.css 24 1,640 214 32 1,394
|
28
|
+
*.coffee 24 1,190 197 0 993
|
29
|
+
*.rake 16 864 137 0 727
|
30
|
+
*.rdoc 11 985 352 0 633
|
31
|
+
*.tt 28 515 88 0 427
|
32
|
+
*.lock 1 437 11 0 426
|
33
|
+
*.yaml 1 231 1 0 230
|
34
|
+
*.gemspec 11 306 79 0 227
|
35
|
+
*.html 28 225 15 3 207
|
36
|
+
*.json 3 65 0 0 65
|
37
|
+
*.builder 19 62 2 0 60
|
38
|
+
*.y 1 50 4 0 46
|
39
|
+
*.sql 1 49 6 0 43
|
40
|
+
*.zoo 2 8 0 0 8
|
41
|
+
*.ru 2 8 2 0 6
|
42
|
+
*.txt 6 6 0 0 6
|
43
|
+
*.ruby 2 4 0 0 4
|
44
|
+
*.erb~ 4 4 0 0 4
|
45
|
+
*.raw 2 2 0 0 2
|
46
|
+
*.styles 1 1 0 0 1
|
47
|
+
*.log 1 1 0 0 1
|
48
|
+
*.dtd 1 1 0 0 1
|
49
|
+
*.mab 1 1 0 0 1
|
50
|
+
*.javascript 1 1 0 0 1
|
51
|
+
--------------------------------------------------------------------------------
|
52
|
+
Total 3,092 378,277 65,534 43,250 269,493
|
53
|
+
--------------------------------------------------------------------------------
|
54
|
+
|
55
|
+
## What It Is Not!
|
56
|
+
|
57
|
+
For various reasons, none of these existing utilities to count lines of code are fit for _(my)_ purpose:
|
6
58
|
|
7
59
|
* [cgag/loc](https://github.com/cgag/loc)
|
8
60
|
* [AlDanial/cloc](https://github.com/AlDanial/cloc)
|
@@ -11,23 +63,45 @@ Welcome to your new gem! In this directory, you'll find the files you need to be
|
|
11
63
|
|
12
64
|
## Installation
|
13
65
|
|
14
|
-
|
66
|
+
gem install gloc
|
15
67
|
|
16
|
-
|
17
|
-
gem 'gloc'
|
18
|
-
```
|
68
|
+
## Usage
|
19
69
|
|
20
|
-
|
70
|
+
The simplest way to use `gloc` is to simply run:
|
21
71
|
|
22
|
-
|
72
|
+
gloc
|
23
73
|
|
24
|
-
|
74
|
+
It should behave pretty much as you'd expect!
|
25
75
|
|
26
|
-
|
76
|
+
### in a git repo
|
27
77
|
|
28
|
-
|
78
|
+
In a git repo, running `gloc` will process all files known to git, so is roughly equivalent to:
|
79
|
+
|
80
|
+
git ls-files | gloc
|
81
|
+
|
82
|
+
### in a non-git repo
|
83
|
+
|
84
|
+
In a non-git repo, running `gloc` will process all files in the directory, so is roughly equivalent to:
|
29
85
|
|
30
|
-
|
86
|
+
find . -type f | gloc
|
87
|
+
|
88
|
+
## Sorting
|
89
|
+
|
90
|
+
The results are sorted by "lines of code" by default _(with "lines of code" defined as lines that aren't blank or comment-only)_ but the following options are supported to sort the results differently:
|
91
|
+
|
92
|
+
gloc -files # sort by number of files
|
93
|
+
gloc -lines # sort by the total number of lines
|
94
|
+
gloc -blank # sort by the number of blank lines
|
95
|
+
gloc -comment # sort by the number of comment lines
|
96
|
+
gloc -code # sort by lines of code (default)
|
97
|
+
|
98
|
+
## Known Issues
|
99
|
+
|
100
|
+
* identify comment-only lines for a lot more languages
|
101
|
+
* support more file encodings (not just `UTF-8` and `ISO-8859-1`)
|
102
|
+
|
103
|
+
* (?) installation via Homebrew
|
104
|
+
* (?) convert script to Perl for performance
|
31
105
|
|
32
106
|
## Development
|
33
107
|
|
@@ -43,4 +117,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/pvdb/g
|
|
43
117
|
## License
|
44
118
|
|
45
119
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
46
|
-
|
data/exe/gloc
CHANGED
@@ -33,10 +33,11 @@ end
|
|
33
33
|
# see buffer_is_binary() function
|
34
34
|
source_files.delete_if { |file|
|
35
35
|
(
|
36
|
-
File.extname(file) == '.pdf'
|
37
|
-
|
38
|
-
!File.
|
39
|
-
!File.
|
36
|
+
File.extname(file) == '.pdf' || # skip bl**dy PDF documents
|
37
|
+
File.basename(file) =~ /\A\..*\z/ || # skip hidden ".*" files
|
38
|
+
!File.exist?(file) || # skip non-existent paths
|
39
|
+
!File.file?(file) || # skip directories
|
40
|
+
!File.size?(file) || # skip empty files
|
40
41
|
!File.read(file, 16)["\0"].nil? # skip binary files
|
41
42
|
) && ( $verbose && warn("SKIPPING #{file}...") ; true )
|
42
43
|
}
|
@@ -64,7 +65,9 @@ source_stats = source_files.each_with_object({}) { |file, stats|
|
|
64
65
|
comment_count: 0,
|
65
66
|
})
|
66
67
|
end
|
67
|
-
|
68
|
+
file_content = File.read(file, :encoding => 'UTF-8') # FIXME what about other encodings?
|
69
|
+
file_content = File.read(file, :encoding => 'ISO-8859-1') unless content.valid_encoding?
|
70
|
+
source_lines = file_content.each_line
|
68
71
|
stats_for_ext.file_count += 1
|
69
72
|
stats_for_ext.line_count += source_lines.count
|
70
73
|
stats_for_ext.blank_count += source_lines.grep(BLANKS).count
|
@@ -94,11 +97,11 @@ source_stats = Hash[
|
|
94
97
|
]
|
95
98
|
|
96
99
|
source_stats["TOTAL"] = OpenStruct.new({
|
97
|
-
file_count: source_stats.values.map(&:file_count).reduce(:+),
|
98
|
-
line_count: source_stats.values.map(&:line_count).reduce(:+),
|
99
|
-
blank_count: source_stats.values.map(&:blank_count).reduce(:+),
|
100
|
-
comment_count: source_stats.values.map(&:comment_count).reduce(:+),
|
101
|
-
code_count: source_stats.values.map(&:code_count).reduce(:+),
|
100
|
+
file_count: source_stats.values.map(&:file_count).reduce(:+) || 0,
|
101
|
+
line_count: source_stats.values.map(&:line_count).reduce(:+) || 0,
|
102
|
+
blank_count: source_stats.values.map(&:blank_count).reduce(:+) || 0,
|
103
|
+
comment_count: source_stats.values.map(&:comment_count).reduce(:+) || 0,
|
104
|
+
code_count: source_stats.values.map(&:code_count).reduce(:+) || 0,
|
102
105
|
})
|
103
106
|
|
104
107
|
#
|
data/lib/gloc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gloc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Vandenberk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|