Mercurial > hg > soundsoftware-site
comparison vendor/gems/coderay-1.0.0/lib/coderay/encoders/statistic.rb @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 module CodeRay | |
2 module Encoders | |
3 | |
4 # Makes a statistic for the given tokens. | |
5 # | |
6 # Alias: +stats+ | |
7 class Statistic < Encoder | |
8 | |
9 register_for :statistic | |
10 | |
11 attr_reader :type_stats, :real_token_count # :nodoc: | |
12 | |
13 TypeStats = Struct.new :count, :size # :nodoc: | |
14 | |
15 protected | |
16 | |
17 def setup options | |
18 super | |
19 | |
20 @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 } | |
21 @real_token_count = 0 | |
22 end | |
23 | |
24 STATS = <<-STATS # :nodoc: | |
25 | |
26 Code Statistics | |
27 | |
28 Tokens %8d | |
29 Non-Whitespace %8d | |
30 Bytes Total %8d | |
31 | |
32 Token Types (%d): | |
33 type count ratio size (average) | |
34 ------------------------------------------------------------- | |
35 %s | |
36 STATS | |
37 | |
38 TOKEN_TYPES_ROW = <<-TKR # :nodoc: | |
39 %-20s %8d %6.2f %% %5.1f | |
40 TKR | |
41 | |
42 def finish options | |
43 all = @type_stats['TOTAL'] | |
44 all_count, all_size = all.count, all.size | |
45 @type_stats.each do |type, stat| | |
46 stat.size /= stat.count.to_f | |
47 end | |
48 types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v| | |
49 TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size] | |
50 end.join | |
51 @out << STATS % [ | |
52 all_count, @real_token_count, all_size, | |
53 @type_stats.delete_if { |k, v| k.is_a? String }.size, | |
54 types_stats | |
55 ] | |
56 | |
57 super | |
58 end | |
59 | |
60 public | |
61 | |
62 def text_token text, kind | |
63 @real_token_count += 1 unless kind == :space | |
64 @type_stats[kind].count += 1 | |
65 @type_stats[kind].size += text.size | |
66 @type_stats['TOTAL'].size += text.size | |
67 @type_stats['TOTAL'].count += 1 | |
68 end | |
69 | |
70 # TODO Hierarchy handling | |
71 def begin_group kind | |
72 block_token ':begin_group', kind | |
73 end | |
74 | |
75 def end_group kind | |
76 block_token ':end_group', kind | |
77 end | |
78 | |
79 def begin_line kind | |
80 block_token ':begin_line', kind | |
81 end | |
82 | |
83 def end_line kind | |
84 block_token ':end_line', kind | |
85 end | |
86 | |
87 def block_token action, kind | |
88 @type_stats['TOTAL'].count += 1 | |
89 @type_stats[action].count += 1 | |
90 @type_stats[kind].count += 1 | |
91 end | |
92 | |
93 end | |
94 | |
95 end | |
96 end |