flog 3.1.0 → 3.2.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.
- data.tar.gz.sig +3 -1
- data/History.txt +13 -0
- data/Rakefile +11 -0
- data/lib/flog.rb +50 -35
- data/lib/flog_task.rb +2 -0
- data/test/test_flog.rb +28 -0
- metadata +10 -10
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
@@ -1 +1,3 @@
|
|
1
|
-
|
1
|
+
B�_�ƀ}scň��^�RGu\Q9]�0���L�0���1��X�F�k�НF?���>c�F~�m3�3�0;Y�%�ON��
|
2
|
+
�^_��
|
3
|
+
�A���P�a-c�Hj��WLc��8:���]��nu�DHϙ�F.u_n~Ümt$k�8x� �'��z��u�c]r�:+�BS��ȧl�C��OQ��o�@J�xW����>OL��VW���?��u'|�d�xP�|��{⪰��v���uט�R�l��;^��۸�8��
|
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 3.2.0 / 2012-12-18
|
2
|
+
|
3
|
+
* 4 minor enhancements:
|
4
|
+
|
5
|
+
* Ensure rake/tasklib is loaded when defining FlogTask. (ferrous26)
|
6
|
+
* Fixed reporting / recording of methods in singleton class blocks. (mihu)
|
7
|
+
* Refactored error handling code to flog_ruby. Calls flog_ruby! for actual work
|
8
|
+
* Refactored ruby processing code to flog_ruby!
|
9
|
+
|
10
|
+
* 1 bug fix:
|
11
|
+
|
12
|
+
* Fixed flogging of || iters. (JacobNinja)
|
13
|
+
|
1
14
|
=== 3.1.0 / 2012-11-16
|
2
15
|
|
3
16
|
* 4 minor enhancements:
|
data/Rakefile
CHANGED
@@ -24,4 +24,15 @@ Hoe.spec 'flog' do
|
|
24
24
|
dependency 'ruby_parser', '~> 3.0.0'
|
25
25
|
end
|
26
26
|
|
27
|
+
task :debug do
|
28
|
+
require "flog"
|
29
|
+
|
30
|
+
file = ENV["F"] || "-"
|
31
|
+
ruby = file == "-" ? ENV["R"] : File.read(file)
|
32
|
+
|
33
|
+
@flog = Flog.new :parser => RubyParser
|
34
|
+
@flog.flog_ruby ruby, file
|
35
|
+
@flog.report
|
36
|
+
end
|
37
|
+
|
27
38
|
# vim: syntax=ruby
|
data/lib/flog.rb
CHANGED
@@ -13,7 +13,7 @@ class File
|
|
13
13
|
end
|
14
14
|
|
15
15
|
class Flog < SexpProcessor
|
16
|
-
VERSION = '3.
|
16
|
+
VERSION = '3.2.0'
|
17
17
|
|
18
18
|
THRESHOLD = 0.60
|
19
19
|
SCORES = Hash.new 1
|
@@ -79,7 +79,7 @@ class Flog < SexpProcessor
|
|
79
79
|
@@no_method = :none
|
80
80
|
|
81
81
|
attr_accessor :multiplier
|
82
|
-
attr_reader :calls, :option, :class_stack, :method_stack, :mass
|
82
|
+
attr_reader :calls, :option, :class_stack, :method_stack, :mass, :sclass
|
83
83
|
attr_reader :method_locations
|
84
84
|
|
85
85
|
def self.plugins
|
@@ -251,42 +251,53 @@ class Flog < SexpProcessor
|
|
251
251
|
files = Flog.expand_dirs_to_files(*files_or_dirs)
|
252
252
|
|
253
253
|
files.each do |file|
|
254
|
-
|
255
|
-
# TODO: replace File.open to deal with "-"
|
256
|
-
ruby = file == '-' ? $stdin.read : File.binread(file)
|
257
|
-
warn "** flogging #{file}" if option[:verbose]
|
258
|
-
|
259
|
-
@parser = (option[:parser] || RubyParser).new
|
254
|
+
ruby = file == '-' ? $stdin.read : File.binread(file)
|
260
255
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
warn "TIMEOUT parsing #{file}. Skipping."
|
265
|
-
end
|
256
|
+
flog_ruby ruby, file
|
257
|
+
end
|
258
|
+
end
|
266
259
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
260
|
+
##
|
261
|
+
# Flog the given ruby source, optionally using file to provide paths
|
262
|
+
# for methods. Smart. Handles syntax errors and timeouts so you
|
263
|
+
# don't have to.
|
264
|
+
|
265
|
+
def flog_ruby ruby, file="-", timeout = 10
|
266
|
+
flog_ruby! ruby, file, timeout
|
267
|
+
rescue Timeout::Error
|
268
|
+
warn "TIMEOUT parsing #{file}. Skipping."
|
269
|
+
rescue RubyParser::SyntaxError, Racc::ParseError => e
|
270
|
+
q = option[:quiet]
|
271
|
+
if e.inspect =~ /<\%|%\>/ or ruby =~ /<\%|%\>/ then
|
272
|
+
return if q
|
273
|
+
warn "#{e.inspect} at #{e.backtrace.first(5).join(', ')}"
|
274
|
+
warn "\n...stupid lemmings and their bad erb templates... skipping"
|
275
|
+
else
|
276
|
+
warn "ERROR: parsing ruby file #{file}" unless q
|
277
|
+
unless option[:continue] then
|
278
|
+
warn "ERROR! Aborting. You may want to run with --continue."
|
279
|
+
raise e
|
286
280
|
end
|
281
|
+
return if q
|
282
|
+
warn "%s: %s at:\n %s" % [e.class, e.message.strip,
|
283
|
+
e.backtrace.first(5).join("\n ")]
|
287
284
|
end
|
288
285
|
end
|
289
286
|
|
287
|
+
##
|
288
|
+
# Flog the given ruby source, optionally using file to provide paths for
|
289
|
+
# methods. Does not handle timeouts or syntax errors. See #flog_ruby.
|
290
|
+
|
291
|
+
def flog_ruby! ruby, file="-", timeout = 10
|
292
|
+
@parser = (option[:parser] || RubyParser).new
|
293
|
+
|
294
|
+
warn "** flogging #{file}" if option[:verbose]
|
295
|
+
|
296
|
+
ast = @parser.process ruby, file, timeout
|
297
|
+
mass[file] = ast.mass
|
298
|
+
process ast
|
299
|
+
end
|
300
|
+
|
290
301
|
##
|
291
302
|
# Adds name to the class stack, for the duration of the block
|
292
303
|
|
@@ -324,6 +335,7 @@ class Flog < SexpProcessor
|
|
324
335
|
def initialize option = {}
|
325
336
|
super()
|
326
337
|
@option = option
|
338
|
+
@sclass = nil
|
327
339
|
@class_stack = []
|
328
340
|
@method_stack = []
|
329
341
|
@method_locations = {}
|
@@ -621,7 +633,8 @@ class Flog < SexpProcessor
|
|
621
633
|
alias :process_lasgn :process_dasgn_curr
|
622
634
|
|
623
635
|
def process_defn(exp)
|
624
|
-
|
636
|
+
name = @sclass ? "::#{exp.shift}" : exp.shift
|
637
|
+
in_method name, exp.file, exp.line do
|
625
638
|
process_until_empty exp
|
626
639
|
end
|
627
640
|
s()
|
@@ -669,6 +682,8 @@ class Flog < SexpProcessor
|
|
669
682
|
context = (self.context - [:class, :module, :scope])
|
670
683
|
context = context.uniq.sort_by { |s| s.to_s }
|
671
684
|
|
685
|
+
exp.delete 0 # { || ... } has 0 in arg slot
|
686
|
+
|
672
687
|
if context == [:block, :iter] or context == [:iter] then
|
673
688
|
recv = exp.first
|
674
689
|
|
@@ -692,8 +707,6 @@ class Flog < SexpProcessor
|
|
692
707
|
|
693
708
|
add_to_score :branch
|
694
709
|
|
695
|
-
exp.delete 0 # { || ... } has 0 in arg slot
|
696
|
-
|
697
710
|
process exp.shift # no penalty for LHS
|
698
711
|
|
699
712
|
penalize_by 0.1 do
|
@@ -736,10 +749,12 @@ class Flog < SexpProcessor
|
|
736
749
|
end
|
737
750
|
|
738
751
|
def process_sclass(exp)
|
752
|
+
@sclass = true
|
739
753
|
penalize_by 0.5 do
|
740
754
|
process exp.shift # recv
|
741
755
|
process_until_empty exp
|
742
756
|
end
|
757
|
+
@sclass = nil
|
743
758
|
|
744
759
|
add_to_score :sclass
|
745
760
|
s()
|
data/lib/flog_task.rb
CHANGED
data/test/test_flog.rb
CHANGED
@@ -114,6 +114,19 @@ class TestFlog < MiniTest::Unit::TestCase
|
|
114
114
|
ensure
|
115
115
|
$stdin = old_stdin
|
116
116
|
end
|
117
|
+
|
118
|
+
def test_flog_ruby
|
119
|
+
ruby = "2 + 3"
|
120
|
+
file = "sample.rb"
|
121
|
+
|
122
|
+
@flog.flog_ruby ruby, file
|
123
|
+
|
124
|
+
exp = { "main#none" => { :+ => 1.0, :lit_fixnum => 0.6 } }
|
125
|
+
assert_equal exp, @flog.calls
|
126
|
+
|
127
|
+
assert_equal 1.6, @flog.total unless @flog.option[:methods]
|
128
|
+
assert_equal 3, @flog.mass[file]
|
129
|
+
end
|
117
130
|
|
118
131
|
def test_flog_erb
|
119
132
|
old_stdin = $stdin
|
@@ -399,6 +412,21 @@ class TestFlog < MiniTest::Unit::TestCase
|
|
399
412
|
util_process sexp, 0.275, :lit_fixnum => 0.275
|
400
413
|
end
|
401
414
|
|
415
|
+
def test_process_defn_in_self
|
416
|
+
sexp = s(:sclass, s(:self),
|
417
|
+
s(:defn, :x,
|
418
|
+
s(:args, :y),
|
419
|
+
s(:lit, 42)))
|
420
|
+
|
421
|
+
setup
|
422
|
+
@flog.process sexp
|
423
|
+
|
424
|
+
exp = {'main::x' => {:lit_fixnum => 0.375}, 'main#none' => {:sclass => 5.0}}
|
425
|
+
assert_equal exp, @flog.calls
|
426
|
+
|
427
|
+
assert_in_delta 5.375, @flog.total
|
428
|
+
end
|
429
|
+
|
402
430
|
def test_process_defs
|
403
431
|
@meth = "::x" # HACK, I don't like this
|
404
432
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 3.
|
10
|
+
version: 3.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Davis
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
FBHgymkyj/AOSqKRIpXPhjC6
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2012-
|
39
|
+
date: 2012-12-19 00:00:00 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sexp_processor
|
@@ -77,11 +77,11 @@ dependencies:
|
|
77
77
|
requirements:
|
78
78
|
- - ~>
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
hash:
|
80
|
+
hash: 29
|
81
81
|
segments:
|
82
82
|
- 4
|
83
|
-
-
|
84
|
-
version: "4.
|
83
|
+
- 3
|
84
|
+
version: "4.3"
|
85
85
|
type: :development
|
86
86
|
version_requirements: *id003
|
87
87
|
- !ruby/object:Gem::Dependency
|
@@ -107,11 +107,11 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
hash:
|
110
|
+
hash: 15
|
111
111
|
segments:
|
112
112
|
- 3
|
113
|
-
-
|
114
|
-
version: "3.
|
113
|
+
- 4
|
114
|
+
version: "3.4"
|
115
115
|
type: :development
|
116
116
|
version_requirements: *id005
|
117
117
|
description: |-
|
metadata.gz.sig
CHANGED
Binary file
|