loco 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.txt +68 -0
- data/Rakefile +1 -0
- data/lib/loco.rb +5 -0
- data/lib/loco/railtie.rb +9 -0
- data/lib/loco/version.rb +3 -0
- data/lib/tasks/loco.rake +134 -0
- data/loco.gemspec +22 -0
- metadata +57 -0
data/Gemfile
ADDED
data/README.txt
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
rake loco
|
3
|
+
|
4
|
+
will produce something like this:
|
5
|
+
|
6
|
+
### longest files ###
|
7
|
+
145 public/javascripts/validations.js
|
8
|
+
145 spec/models/invoice_spec.rb
|
9
|
+
144 app/models/widget/stage.rb
|
10
|
+
144 app/models/invoice.rb
|
11
|
+
144 app/models/widget/address_extractor.rb
|
12
|
+
143 spec/models/invoice_presenter_spec.rb
|
13
|
+
143 app/helpers/html_helper.rb
|
14
|
+
141 config/routes.rb
|
15
|
+
141 app/controllers/people/people_controller.rb
|
16
|
+
138 spec/models/person_spec.rb
|
17
|
+
138 spec/models/xaction_spec.rb
|
18
|
+
137 app/controllers/welcome_controller.rb
|
19
|
+
135 app/views/invoices/show.html.haml
|
20
|
+
132 spec/support/factory.rb
|
21
|
+
131 app/models/person.rb
|
22
|
+
129 public/javascripts/application.js
|
23
|
+
|
24
|
+
### distribution ###
|
25
|
+
0 lines 10 **********
|
26
|
+
1 lines 13 *************
|
27
|
+
5 lines 29 *****************************
|
28
|
+
6 lines 44 ********************************************
|
29
|
+
10 lines 55 **********************************************************
|
30
|
+
11 lines 33 *********************************
|
31
|
+
15 lines 27 ***************************
|
32
|
+
16 lines 27 ***************************
|
33
|
+
20 lines 35 *************************
|
34
|
+
21 lines 29 ********************
|
35
|
+
25 lines 16 ****************
|
36
|
+
26 lines 15 ***************
|
37
|
+
30 lines 15 ***************
|
38
|
+
31 lines 16 ****************
|
39
|
+
35 lines 12 ************
|
40
|
+
36 lines 13 *************
|
41
|
+
40 lines 9 *********
|
42
|
+
41 lines 11 ***********
|
43
|
+
45 lines 9 *********
|
44
|
+
46 lines 11 ***********
|
45
|
+
50 lines 5 *****
|
46
|
+
51 lines 8 ********
|
47
|
+
52 lines 2 **
|
48
|
+
53 lines 8 ********
|
49
|
+
54 lines 9 *********
|
50
|
+
55 lines 4 ****
|
51
|
+
56 lines 5 *****
|
52
|
+
69 lines 3 ***
|
53
|
+
71 lines 1 *
|
54
|
+
80 lines 2 **
|
55
|
+
95 lines 1 *
|
56
|
+
128 lines 1 *
|
57
|
+
|
58
|
+
### extensions ###
|
59
|
+
.rb - 791 files, 25907 lines
|
60
|
+
.haml - 391 files, 6938 lines
|
61
|
+
.yml - 173 files, 7512 lines
|
62
|
+
.rake - 8 files, 383 lines
|
63
|
+
.html - 4 files, 179 lines
|
64
|
+
.js - 14 files, 840 lines
|
65
|
+
|
66
|
+
== License
|
67
|
+
|
68
|
+
Loco is released under the MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/lib/loco.rb
ADDED
data/lib/loco/railtie.rb
ADDED
data/lib/loco/version.rb
ADDED
data/lib/tasks/loco.rake
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
namespace :loco do
|
2
|
+
@exclude = [
|
3
|
+
/^db\/schema.rb/,
|
4
|
+
/^db\/epg_timetable.yml/,
|
5
|
+
/^db\/backups/,
|
6
|
+
/^vendor/,
|
7
|
+
/^public\/system/,
|
8
|
+
/^public\/images/,
|
9
|
+
/^public\/stylesheets/,
|
10
|
+
/^config\/newrelic.yml/,
|
11
|
+
/^tmp/,
|
12
|
+
/^coverage/,
|
13
|
+
/^log/,
|
14
|
+
/^doc/,
|
15
|
+
/^script/,
|
16
|
+
/^stories/,
|
17
|
+
/^static/,
|
18
|
+
/^public\/fonts/,
|
19
|
+
/\.#.+/,
|
20
|
+
/\.png/,
|
21
|
+
/\.pdf/,
|
22
|
+
/\.ico/,
|
23
|
+
/lib\/tasks\/.+\.txt/,
|
24
|
+
/^README/,
|
25
|
+
/^Gemfile.lock/,
|
26
|
+
/^public\/javascripts\/jquery/
|
27
|
+
]
|
28
|
+
|
29
|
+
def exclude? path
|
30
|
+
@exclude.each { |regex|
|
31
|
+
if path =~ regex
|
32
|
+
return true
|
33
|
+
end
|
34
|
+
}
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
38
|
+
def align x
|
39
|
+
x.to_s.rjust(8, " ")
|
40
|
+
end
|
41
|
+
|
42
|
+
class Stats
|
43
|
+
attr_accessor :path, :lines
|
44
|
+
def initialize(path)
|
45
|
+
@path = path
|
46
|
+
@lines = count_lines(path)
|
47
|
+
end
|
48
|
+
|
49
|
+
def count_lines path
|
50
|
+
File.read(path).split(/\n/).inject(0) {|sum, line| sum + (line.blank? ? 0 : 1) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
"#{align lines} #{path}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def matches options
|
58
|
+
options[:size].blank? || (options[:size] == 0 && lines == 0)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def analyse_loc regexp, opts={ }
|
63
|
+
@stats = []
|
64
|
+
@exts = Hash.new { |h, k| h[k] = 0 }
|
65
|
+
@ext_lines = Hash.new { |h, k| h[k] = 0 }
|
66
|
+
@sizes = Hash.new { |h, k| h[k] = [] }
|
67
|
+
total_lines = 0
|
68
|
+
|
69
|
+
Dir.glob("#{Rails.root}/**/*").each do |full_path|
|
70
|
+
unless File.stat(full_path).directory?
|
71
|
+
path = full_path.sub(Rails.root.to_s + "/", '')
|
72
|
+
unless exclude?(path) || !regexp.match(path)
|
73
|
+
s = Stats.new(path)
|
74
|
+
if s.matches(opts)
|
75
|
+
@stats << s
|
76
|
+
@exts[File.extname(path)] += 1
|
77
|
+
@ext_lines[File.extname(path)] += s.lines
|
78
|
+
@sizes[s.lines] << path
|
79
|
+
total_lines += s.lines
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
puts "\n### extensions ###"
|
86
|
+
@exts.each { |ext, count| puts "#{align ext} - #{align count} files, #{align @ext_lines[ext]} lines"}
|
87
|
+
|
88
|
+
puts "\n### distribution ###"
|
89
|
+
@sizes = @sizes.to_a.sort { |a, b|
|
90
|
+
a[0] <=> b[0]
|
91
|
+
}
|
92
|
+
|
93
|
+
@sizes.each { |size, files|
|
94
|
+
puts "#{align size} lines #{align files.size} #{"*" * files.size}"
|
95
|
+
}
|
96
|
+
|
97
|
+
total = @stats.size
|
98
|
+
@stats = @stats.sort { |a, b| b.lines <=> a.lines }
|
99
|
+
@stats = @stats[0..40] if @stats.size > 40
|
100
|
+
|
101
|
+
puts "\n### longest files ###"
|
102
|
+
@stats.each { |s| puts s }
|
103
|
+
|
104
|
+
puts "\n### Total #{regexp.inspect} : #{total} files, #{total_lines} lines, #{"%.3f" % (1.0 * total_lines / total)} avg loc per file ###"
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "show loc for all files"
|
108
|
+
task(:all) { analyse_loc /.*/ }
|
109
|
+
|
110
|
+
desc "show loc for all .js files"
|
111
|
+
task(:js) { analyse_loc /.*\.js$/ }
|
112
|
+
|
113
|
+
desc "show loc for all .rb files"
|
114
|
+
task(:rb) { analyse_loc /.*\.rb$/ }
|
115
|
+
|
116
|
+
desc "show loc for all .haml files"
|
117
|
+
task(:haml) { analyse_loc /.*\.haml$/ }
|
118
|
+
|
119
|
+
desc "show loc for all app/** files"
|
120
|
+
task(:app) { analyse_loc /^app\// }
|
121
|
+
|
122
|
+
desc "show loc for all app/models/** files"
|
123
|
+
task(:models) { analyse_loc /^app\/models\// }
|
124
|
+
|
125
|
+
desc "show loc for all spec/** files"
|
126
|
+
task(:spec) { analyse_loc /^spec\// }
|
127
|
+
|
128
|
+
desc "show details for empty files"
|
129
|
+
task(:empty) { analyse_loc /.*/, :size => 0 }
|
130
|
+
end
|
131
|
+
|
132
|
+
task :loco => "loco:all"
|
133
|
+
|
134
|
+
|
data/loco.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
|
+
require "loco/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "loco"
|
8
|
+
s.version = Loco::VERSION
|
9
|
+
s.authors = ["conanite"]
|
10
|
+
s.email = ["conan@conandalton.net"]
|
11
|
+
s.homepage = "https://github.com/conanite/loco"
|
12
|
+
s.summary = %q{Produce statistics concerning numbers of lines of code in project files}
|
13
|
+
s.description = %q{Count lines of code in project files, excluding a bunch of common defaults, and show (a) for each N, how many files have N lines of code; (b) how many files of each type and average LOC per file of that type; (c) longest files and their length }
|
14
|
+
|
15
|
+
s.rubyforge_project = "loco"
|
16
|
+
|
17
|
+
# warning: ensure ENV["PATH"] can find your git executable
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: loco
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- conanite
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-20 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! 'Count lines of code in project files, excluding a bunch of common
|
15
|
+
defaults, and show (a) for each N, how many files have N lines of code; (b) how
|
16
|
+
many files of each type and average LOC per file of that type; (c) longest files
|
17
|
+
and their length '
|
18
|
+
email:
|
19
|
+
- conan@conandalton.net
|
20
|
+
executables: []
|
21
|
+
extensions: []
|
22
|
+
extra_rdoc_files: []
|
23
|
+
files:
|
24
|
+
- .gitignore
|
25
|
+
- Gemfile
|
26
|
+
- README.txt
|
27
|
+
- Rakefile
|
28
|
+
- lib/loco.rb
|
29
|
+
- lib/loco/railtie.rb
|
30
|
+
- lib/loco/version.rb
|
31
|
+
- lib/tasks/loco.rake
|
32
|
+
- loco.gemspec
|
33
|
+
homepage: https://github.com/conanite/loco
|
34
|
+
licenses: []
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
requirements: []
|
52
|
+
rubyforge_project: loco
|
53
|
+
rubygems_version: 1.8.24
|
54
|
+
signing_key:
|
55
|
+
specification_version: 3
|
56
|
+
summary: Produce statistics concerning numbers of lines of code in project files
|
57
|
+
test_files: []
|