code_analyzer 0.3.0 → 0.3.1
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/.rvmrc +1 -1
- data/.travis.yml +4 -0
- data/README.md +10 -2
- data/Rakefile +6 -0
- data/code_analyzer.gemspec +1 -0
- data/lib/code_analyzer/sexp.rb +4 -3
- data/lib/code_analyzer/version.rb +1 -1
- data/spec/code_analyzer/sexp_spec.rb +58 -23
- metadata +25 -3
data/.rvmrc
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
rvm_gemset_create_on_use_flag=1
|
2
|
-
rvm gemset use
|
2
|
+
rvm gemset use code_analyzer
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# CodeAnalyzer
|
2
2
|
|
3
|
-
|
3
|
+
| Project | code_analyzer
|
4
|
+
|:---------|:--------------------------------------------
|
5
|
+
| Homepage | https://github.com/flyerhzm/code_analyzer
|
6
|
+
| Document | http://rubydoc.info/gems/code_analyzer/frames
|
7
|
+
| CI | [](https://travis-ci.org/flyerhzm/code_analyzer)
|
8
|
+
| Author | [Richard Huang][0]
|
9
|
+
|
10
|
+
code_analyzer is extracted from [rails_best_practices][1], it helps you
|
4
11
|
easily build your own code analyzer tool.
|
5
12
|
|
6
13
|
## Installation
|
@@ -29,4 +36,5 @@ Or install it yourself as:
|
|
29
36
|
4. Push to the branch (`git push origin my-new-feature`)
|
30
37
|
5. Create new Pull Request
|
31
38
|
|
32
|
-
[0]:
|
39
|
+
[0]: http://huangzhimin.com
|
40
|
+
[1]: https://github.com/railsbp/rails_best_practices
|
data/Rakefile
CHANGED
data/code_analyzer.gemspec
CHANGED
data/lib/code_analyzer/sexp.rb
CHANGED
@@ -16,7 +16,8 @@ class Sexp
|
|
16
16
|
def line
|
17
17
|
case sexp_type
|
18
18
|
when :def, :defs, :command, :command_call, :call, :fcall, :method_add_arg, :method_add_block,
|
19
|
-
:var_ref, :vcall, :const_ref, :const_path_ref, :class, :module,
|
19
|
+
:var_ref, :vcall, :const_ref, :const_path_ref, :class, :module,
|
20
|
+
:if, :unless, :elsif, :ifop, :if_mod, :unless_mod, :binary,
|
20
21
|
:alias, :symbol_literal, :symbol, :aref, :hash, :assoc_new, :string_literal,
|
21
22
|
:massign
|
22
23
|
self[1].line
|
@@ -329,7 +330,7 @@ class Sexp
|
|
329
330
|
#
|
330
331
|
# @return [Sexp] conditional statement of if node
|
331
332
|
def conditional_statement
|
332
|
-
if [:if, :unless, :elsif, :ifop].include? sexp_type
|
333
|
+
if [:if, :unless, :elsif, :ifop, :if_mod, :unless_mod].include? sexp_type
|
333
334
|
self[1]
|
334
335
|
end
|
335
336
|
end
|
@@ -431,7 +432,7 @@ class Sexp
|
|
431
432
|
case sexp_type
|
432
433
|
when :else
|
433
434
|
self[1]
|
434
|
-
when :module, :if, :elsif, :unless
|
435
|
+
when :module, :if, :elsif, :unless, :if_mod, :unless_mod, :ifop
|
435
436
|
self[2]
|
436
437
|
when :class, :def
|
437
438
|
self[3]
|
@@ -16,6 +16,12 @@ describe Sexp do
|
|
16
16
|
def opassign(a, b)
|
17
17
|
a+= b
|
18
18
|
end
|
19
|
+
def condition
|
20
|
+
if success?
|
21
|
+
puts "unknown" if output?
|
22
|
+
elsif fail?
|
23
|
+
end
|
24
|
+
end
|
19
25
|
end
|
20
26
|
EOF
|
21
27
|
@node = parse_content(content)
|
@@ -52,6 +58,18 @@ describe Sexp do
|
|
52
58
|
it "should return opassign line" do
|
53
59
|
@node.grep_node(sexp_type: :opassign).line.should == 11
|
54
60
|
end
|
61
|
+
|
62
|
+
it "should return if line" do
|
63
|
+
expect(@node.grep_node(sexp_type: :if).line).to eq 14
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should return elsif line" do
|
67
|
+
expect(@node.grep_node(sexp_type: :elsif).line).to eq 16
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return if_mod line" do
|
71
|
+
expect(@node.grep_node(sexp_type: :if_mod).line).to eq 15
|
72
|
+
end
|
55
73
|
end
|
56
74
|
|
57
75
|
describe "grep_nodes" do
|
@@ -313,30 +331,32 @@ describe Sexp do
|
|
313
331
|
describe "conditional_statement" do
|
314
332
|
it "should get conditional statement of if" do
|
315
333
|
node = parse_content("if true; end").grep_node(sexp_type: :if)
|
316
|
-
node.conditional_statement.to_s.
|
334
|
+
expect(node.conditional_statement.to_s).to eq "true"
|
317
335
|
end
|
318
336
|
|
319
337
|
it "should get conditional statement of unless" do
|
320
|
-
node = parse_content("unless
|
321
|
-
node.conditional_statement.to_s.
|
338
|
+
node = parse_content("unless false; end").grep_node(sexp_type: :unless)
|
339
|
+
expect(node.conditional_statement.to_s).to eq "false"
|
322
340
|
end
|
323
341
|
|
324
342
|
it "should get conditional statement of elsif" do
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
node = parse_content(
|
331
|
-
node.conditional_statement.to_s.
|
343
|
+
node = parse_content("if true; elsif false; end").grep_node(sexp_type: :elsif)
|
344
|
+
expect(node.conditional_statement.to_s).to eq "false"
|
345
|
+
end
|
346
|
+
|
347
|
+
it "should get conditional statement of if_mod" do
|
348
|
+
node = parse_content("'OK' if true").grep_node(sexp_type: :if_mod)
|
349
|
+
expect(node.conditional_statement.to_s).to eq "true"
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should get conditional statement of unless_mod" do
|
353
|
+
node = parse_content("'OK' unless false").grep_node(sexp_type: :unless_mod)
|
354
|
+
expect(node.conditional_statement.to_s).to eq "false"
|
332
355
|
end
|
333
356
|
|
334
357
|
it "should get conditional statement of ifop" do
|
335
|
-
|
336
|
-
|
337
|
-
EOF
|
338
|
-
node = parse_content(content).grep_node(sexp_type: :ifop)
|
339
|
-
node.conditional_statement.to_s.should == "user"
|
358
|
+
node = parse_content("true ? 'OK' : 'NO'").grep_node(sexp_type: :ifop)
|
359
|
+
expect(node.conditional_statement.to_s).to eq "true"
|
340
360
|
end
|
341
361
|
end
|
342
362
|
|
@@ -381,23 +401,38 @@ describe Sexp do
|
|
381
401
|
end
|
382
402
|
|
383
403
|
it "should get body of if" do
|
384
|
-
node = parse_content("if true;
|
385
|
-
node.body.sexp_type.
|
404
|
+
node = parse_content("if true; 'OK'; end").grep_node(sexp_type: :if)
|
405
|
+
expect(node.body.sexp_type).to eq :stmts_add
|
386
406
|
end
|
387
407
|
|
388
408
|
it "should get body of elsif" do
|
389
|
-
node = parse_content("if true; elsif true;
|
390
|
-
node.body.sexp_type.
|
409
|
+
node = parse_content("if true; elsif true; 'OK'; end").grep_node(sexp_type: :elsif)
|
410
|
+
expect(node.body.sexp_type).to eq :stmts_add
|
391
411
|
end
|
392
412
|
|
393
413
|
it "should get body of unless" do
|
394
|
-
node = parse_content("unless true;
|
395
|
-
node.body.sexp_type.
|
414
|
+
node = parse_content("unless true; 'OK'; end").grep_node(sexp_type: :unless)
|
415
|
+
expect(node.body.sexp_type).to eq :stmts_add
|
396
416
|
end
|
397
417
|
|
398
418
|
it "should get body of else" do
|
399
|
-
node = parse_content("if true; else;
|
400
|
-
node.body.sexp_type.
|
419
|
+
node = parse_content("if true; else; 'OK'; end").grep_node(sexp_type: :else)
|
420
|
+
expect(node.body.sexp_type).to eq :stmts_add
|
421
|
+
end
|
422
|
+
|
423
|
+
it "should get body of if_mod" do
|
424
|
+
node = parse_content("'OK' if true").grep_node(sexp_type: :if_mod)
|
425
|
+
expect(node.body.to_s).to eq "OK"
|
426
|
+
end
|
427
|
+
|
428
|
+
it "should get body of unless_mod" do
|
429
|
+
node = parse_content("'OK' unless false").grep_node(sexp_type: :unless_mod)
|
430
|
+
expect(node.body.to_s).to eq "OK"
|
431
|
+
end
|
432
|
+
|
433
|
+
it "should get body of if_op" do
|
434
|
+
node = parse_content("true ? 'OK' : 'NO'").grep_node(sexp_type: :ifop)
|
435
|
+
expect(node.body.to_s).to eq "OK"
|
401
436
|
end
|
402
437
|
end
|
403
438
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code_analyzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sexp_processor
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
description: a code analyzer tool which extracted from rails_best_practices, it helps
|
47
63
|
you easily build your own code analyzer tool.
|
48
64
|
email:
|
@@ -54,6 +70,7 @@ files:
|
|
54
70
|
- .gitignore
|
55
71
|
- .rspec
|
56
72
|
- .rvmrc
|
73
|
+
- .travis.yml
|
57
74
|
- Gemfile
|
58
75
|
- LICENSE
|
59
76
|
- README.md
|
@@ -90,12 +107,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
107
|
- - ! '>='
|
91
108
|
- !ruby/object:Gem::Version
|
92
109
|
version: '0'
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: -3700642731172846945
|
93
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
114
|
none: false
|
95
115
|
requirements:
|
96
116
|
- - ! '>='
|
97
117
|
- !ruby/object:Gem::Version
|
98
118
|
version: '0'
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
hash: -3700642731172846945
|
99
122
|
requirements: []
|
100
123
|
rubyforge_project:
|
101
124
|
rubygems_version: 1.8.24
|
@@ -111,4 +134,3 @@ test_files:
|
|
111
134
|
- spec/code_analyzer/sexp_spec.rb
|
112
135
|
- spec/code_analyzer/warning_spec.rb
|
113
136
|
- spec/spec_helper.rb
|
114
|
-
has_rdoc:
|