jruby-lint 0.2.0 → 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.
- data/.gitignore +1 -0
- data/History.txt +4 -0
- data/README.md +5 -2
- data/lib/jruby/lint/cli.rb +12 -0
- data/lib/jruby/lint/finding.rb +8 -0
- data/lib/jruby/lint/project.rb +7 -3
- data/lib/jruby/lint/reporters.rb +3 -31
- data/lib/jruby/lint/reporters/html.rb +27 -0
- data/lib/jruby/lint/reporters/jruby-lint.html.erb +48 -0
- data/lib/jruby/lint/reporters/text.rb +34 -0
- data/lib/jruby/lint/version.rb +1 -1
- data/spec/fixtures/C-Extension-Alternatives.html +24 -24
- data/spec/jruby/lint/finding_spec.rb +12 -0
- data/spec/jruby/lint/project_spec.rb +49 -0
- data/spec/jruby/lint/reporters_spec.rb +23 -2
- metadata +5 -2
data/.gitignore
CHANGED
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -31,12 +31,15 @@ Here is a list of the current checks implemented:
|
|
31
31
|
- Report behavior difference when using system('ruby'), which launches
|
32
32
|
the command in-process in a new copy of the interpreter for speed
|
33
33
|
|
34
|
+
## Reports
|
35
|
+
|
36
|
+
JRuby-lint supports text and html reports. Run jrlint with the option --html
|
37
|
+
to generate an html report with the results.
|
38
|
+
|
34
39
|
## TODO
|
35
40
|
|
36
41
|
Here is a list of checks and options we'd like to implement:
|
37
42
|
|
38
|
-
- Options to save report off to a file.
|
39
|
-
- Text, HTML formats
|
40
43
|
- Add in check for `` to make sure not execing ruby ...
|
41
44
|
- Report on more threading and concurrency issues/antipatterns
|
42
45
|
- arr.each {|x| arr.delete(x) }
|
data/lib/jruby/lint/cli.rb
CHANGED
@@ -23,6 +23,18 @@ module JRuby
|
|
23
23
|
@options.eval << v
|
24
24
|
end
|
25
25
|
|
26
|
+
opts.on('--text', 'print report as text') do
|
27
|
+
@options.text = true
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on('--ansi', 'print report as ansi text') do
|
31
|
+
@options.ansi = true
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on('--html [REPORT_FILE]', 'print report as html file') do |file|
|
35
|
+
@options.html = file || 'jruby-lint.html'
|
36
|
+
end
|
37
|
+
|
26
38
|
opts.on_tail("-v", "--version", "Print version and exit") do
|
27
39
|
require 'jruby/lint/version'
|
28
40
|
puts "JRuby-Lint version #{VERSION}"
|
data/lib/jruby/lint/finding.rb
CHANGED
data/lib/jruby/lint/project.rb
CHANGED
@@ -19,7 +19,7 @@ module JRuby::Lint
|
|
19
19
|
|
20
20
|
@sources = options.files || (options.eval ? [] : Dir['./**/*'])
|
21
21
|
load_collectors
|
22
|
-
load_reporters
|
22
|
+
load_reporters(options)
|
23
23
|
load_libraries
|
24
24
|
end
|
25
25
|
|
@@ -30,6 +30,7 @@ module JRuby::Lint
|
|
30
30
|
reporters.each {|r| r.report(c.findings)}
|
31
31
|
@findings += c.findings
|
32
32
|
end
|
33
|
+
reporters.each {|r| r.print_report(@findings) if r.respond_to?(:print_report) }
|
33
34
|
end
|
34
35
|
|
35
36
|
private
|
@@ -45,8 +46,11 @@ module JRuby::Lint
|
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
|
-
def load_reporters
|
49
|
-
@reporters = [
|
49
|
+
def load_reporters(options)
|
50
|
+
@reporters = []
|
51
|
+
@reporters << Reporters::Html.new(self, options.html) if options.html
|
52
|
+
@reporters << Reporters::ANSIColor.new(self, STDOUT) if options.ansi || STDOUT.tty?
|
53
|
+
@reporters << Reporters::Text.new(self, STDOUT) if options.text || @reporters.empty?
|
50
54
|
end
|
51
55
|
|
52
56
|
def load_libraries
|
data/lib/jruby/lint/reporters.rb
CHANGED
@@ -1,35 +1,7 @@
|
|
1
|
-
require 'term/ansicolor'
|
2
|
-
|
3
1
|
module JRuby::Lint
|
4
2
|
module Reporters
|
5
|
-
class Text
|
6
|
-
def initialize(project, output)
|
7
|
-
@tags, @output = project.tags, output
|
8
|
-
end
|
9
|
-
|
10
|
-
def report(findings)
|
11
|
-
findings.each do |finding|
|
12
|
-
puts finding unless (@tags & finding.tags).empty?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def puts(finding)
|
17
|
-
@output.puts finding.to_s
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class ANSIColor < Text
|
22
|
-
include Term::ANSIColor
|
23
|
-
def puts(finding)
|
24
|
-
msg = if finding.tags.include?("error")
|
25
|
-
red(finding.to_s)
|
26
|
-
elsif finding.tags.include?("warning")
|
27
|
-
yellow(finding.to_s)
|
28
|
-
else
|
29
|
-
finding.to_s
|
30
|
-
end
|
31
|
-
@output.puts msg
|
32
|
-
end
|
33
|
-
end
|
34
3
|
end
|
35
4
|
end
|
5
|
+
|
6
|
+
require 'jruby/lint/reporters/text'
|
7
|
+
require 'jruby/lint/reporters/html'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module JRuby::Lint
|
2
|
+
module Reporters
|
3
|
+
class Html
|
4
|
+
require 'erb'
|
5
|
+
|
6
|
+
def initialize(project, output)
|
7
|
+
@tags = project.tags
|
8
|
+
@output = output
|
9
|
+
@template = ERB.new(File.read(File.expand_path('../jruby-lint.html.erb', __FILE__)))
|
10
|
+
end
|
11
|
+
|
12
|
+
def report(findings)
|
13
|
+
end
|
14
|
+
|
15
|
+
def print_report(findings)
|
16
|
+
@findings = []
|
17
|
+
findings.each do |finding|
|
18
|
+
@findings << finding unless (@tags & finding.tags).empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
File.open(@output, 'w') do |file|
|
22
|
+
file.write @template.result(binding)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>JRuby-lint diagnostics report</title>
|
4
|
+
<style>
|
5
|
+
ul { padding: 0px; }
|
6
|
+
li { list-style: none; margin: 0px; padding: 0px; display: list-item; }
|
7
|
+
body { font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; font-size:10.5pt; margin: 0; }
|
8
|
+
|
9
|
+
h1 { color: #383838; font-size: 4em; }
|
10
|
+
p { color: #383838; font-size: 1.8em; }
|
11
|
+
.site { width: 70em; margin: 0 auto; padding: .1em 5em; }
|
12
|
+
nav { position: relative; }
|
13
|
+
#findings li { position: relative; padding: .5em 1em; margin-top: .3em; }
|
14
|
+
#congrats { padding-top: 2em; }
|
15
|
+
.message { border-left: 5px solid silver; background: #EEE; }
|
16
|
+
.error { border-left: 5px solid #b22222; background: #E6BCB5; }
|
17
|
+
.warning { border-left: 5px solid #FF9900; background: #FFFF99; }
|
18
|
+
</style>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<a href="http://github.com/jruby/jruby-lint"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://d3nwyuy0nl342s.cloudfront.net/img/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a>
|
22
|
+
<div class="site">
|
23
|
+
<nav>
|
24
|
+
<h1>JRuby diagnostics</h1>
|
25
|
+
</nav>
|
26
|
+
<div id="findings">
|
27
|
+
<% unless @findings.empty? %>
|
28
|
+
<ul>
|
29
|
+
<% @findings.each do |finding| %>
|
30
|
+
<% if finding.error? %>
|
31
|
+
<li class="error"><%= finding %></li>
|
32
|
+
<% elsif finding.warning? %>
|
33
|
+
<li class="warning"><%= finding %></li>
|
34
|
+
<% else %>
|
35
|
+
<li class="message"><%= finding %></li>
|
36
|
+
<% end %>
|
37
|
+
<% end %>
|
38
|
+
</ul>
|
39
|
+
<% else %>
|
40
|
+
<div id="congrats">
|
41
|
+
<p>Congratulations!</p>
|
42
|
+
<p>We didn't find any issue and your application should run just fine with JRuby.</p>
|
43
|
+
</div> <!-- div#congrats -->
|
44
|
+
<% end %>
|
45
|
+
</div> <!-- div#findings -->
|
46
|
+
</div> <!-- div.site -->
|
47
|
+
</body>
|
48
|
+
</html>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module JRuby::Lint
|
2
|
+
module Reporters
|
3
|
+
class Text
|
4
|
+
def initialize(project, output)
|
5
|
+
@tags, @output = project.tags, output
|
6
|
+
end
|
7
|
+
|
8
|
+
def report(findings)
|
9
|
+
findings.each do |finding|
|
10
|
+
puts finding unless (@tags & finding.tags).empty?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def puts(finding)
|
15
|
+
@output.puts finding.to_s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ANSIColor < Text
|
20
|
+
require 'term/ansicolor'
|
21
|
+
include Term::ANSIColor
|
22
|
+
def puts(finding)
|
23
|
+
msg = if finding.error?
|
24
|
+
red(finding.to_s)
|
25
|
+
elsif finding.warning?
|
26
|
+
yellow(finding.to_s)
|
27
|
+
else
|
28
|
+
finding.to_s
|
29
|
+
end
|
30
|
+
@output.puts msg
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/jruby/lint/version.rb
CHANGED
@@ -8,12 +8,12 @@
|
|
8
8
|
<head>
|
9
9
|
<meta charset='utf-8'>
|
10
10
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
11
|
-
<script>var NREUMQ=[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script>
|
11
|
+
<script type="text/javascript">var NREUMQ=[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script>
|
12
12
|
<title>C Extension Alternatives - GitHub</title>
|
13
13
|
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
|
14
14
|
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
|
15
15
|
|
16
|
-
<link href="https://
|
16
|
+
<link href="https://a248.e.akamai.net/assets.github.com/b061594e73bd47cde0b406f0ccd1cee8b0aa96ec/stylesheets/bundle_github.css" media="screen" rel="stylesheet" type="text/css" />
|
17
17
|
|
18
18
|
|
19
19
|
<script type="text/javascript">
|
@@ -22,13 +22,13 @@
|
|
22
22
|
</script>
|
23
23
|
<script type="text/javascript" charset="utf-8">
|
24
24
|
var GitHub = {
|
25
|
-
assetHost: 'https://
|
25
|
+
assetHost: 'https://a248.e.akamai.net/assets.github.com'
|
26
26
|
}
|
27
27
|
var github_user = null
|
28
28
|
|
29
29
|
</script>
|
30
|
-
<script src="https://
|
31
|
-
<script src="https://
|
30
|
+
<script src="https://a248.e.akamai.net/assets.github.com/javascripts/jquery/jquery-1.6.1.min.js" type="text/javascript"></script>
|
31
|
+
<script src="https://a248.e.akamai.net/assets.github.com/9a8d4d0be567a85129ca26f93f40eb76dcc8bfbb/javascripts/bundle_github.js" type="text/javascript"></script>
|
32
32
|
|
33
33
|
|
34
34
|
|
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
<link href="https://github.com/jruby/jruby/commits/master.atom" rel="alternate" title="Recent Commits to jruby:master" type="application/atom+xml" />
|
43
|
-
<script src="https://
|
43
|
+
<script src="https://a248.e.akamai.net/assets.github.com/9efa4f408d844eccca76d5687e85d5b519597f1f/javascripts/bundle_wiki.js" type="text/javascript"></script>
|
44
44
|
|
45
45
|
<script src="/javascripts/other/MathJax/MathJax.js" type="text/javascript">
|
46
46
|
if (window.location.protocol == "https:") {
|
@@ -57,7 +57,7 @@
|
|
57
57
|
<script type="text/javascript">
|
58
58
|
GitHub.nameWithOwner = GitHub.nameWithOwner || "jruby/jruby";
|
59
59
|
GitHub.currentRef = 'master';
|
60
|
-
GitHub.commitSHA = "
|
60
|
+
GitHub.commitSHA = "24aad97afc34e25047c06298ea0f2559f90c14d2";
|
61
61
|
GitHub.currentPath = '';
|
62
62
|
GitHub.masterBranch = "master";
|
63
63
|
|
@@ -91,16 +91,14 @@
|
|
91
91
|
|
92
92
|
|
93
93
|
|
94
|
-
|
95
|
-
|
96
94
|
<div class="subnavd" id="main">
|
97
95
|
<div id="header" class="true">
|
98
96
|
|
99
97
|
<a class="logo boring" href="https://github.com">
|
100
98
|
|
101
|
-
<img alt="github" class="default" height="45" src="https://
|
99
|
+
<img alt="github" class="default" height="45" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov5.png" />
|
102
100
|
<!--[if (gt IE 8)|!(IE)]><!-->
|
103
|
-
<img alt="github" class="hover" height="45" src="https://
|
101
|
+
<img alt="github" class="hover" height="45" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov5-hover.png" />
|
104
102
|
<!--<![endif]-->
|
105
103
|
</a>
|
106
104
|
|
@@ -145,12 +143,12 @@
|
|
145
143
|
|
146
144
|
<li class="for-owner" style="display:none"><a href="/jruby/jruby/admin" class="minibutton btn-admin "><span><span class="icon"></span>Admin</span></a></li>
|
147
145
|
<li>
|
148
|
-
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="watch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '
|
149
|
-
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="unwatch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '
|
146
|
+
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="watch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'a12af8eb75d6148a6d430d76ce52736db893dd3d'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Watch</span></a>
|
147
|
+
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="unwatch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'a12af8eb75d6148a6d430d76ce52736db893dd3d'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Unwatch</span></a>
|
150
148
|
</li>
|
151
149
|
|
152
150
|
|
153
|
-
<li class="for-notforked" style="display:none"><a href="/jruby/jruby/fork" class="minibutton btn-fork " id="fork_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '
|
151
|
+
<li class="for-notforked" style="display:none"><a href="/jruby/jruby/fork" class="minibutton btn-fork " id="fork_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'a12af8eb75d6148a6d430d76ce52736db893dd3d'); f.appendChild(s);f.submit();return false;"><span><span class="icon"></span>Fork</span></a></li>
|
154
152
|
<li class="for-hasfork" style="display:none"><a href="#" class="minibutton btn-fork " id="your_fork_button"><span><span class="icon"></span>Your Fork</span></a></li>
|
155
153
|
|
156
154
|
|
@@ -160,8 +158,8 @@
|
|
160
158
|
|
161
159
|
<li class="repostats">
|
162
160
|
<ul class="repo-stats">
|
163
|
-
<li class="watchers"><a href="/jruby/jruby/watchers" title="Watchers" class="tooltipped downwards">
|
164
|
-
<li class="forks"><a href="/jruby/jruby/network" title="Forks" class="tooltipped downwards">
|
161
|
+
<li class="watchers"><a href="/jruby/jruby/watchers" title="Watchers" class="tooltipped downwards">551</a></li>
|
162
|
+
<li class="forks"><a href="/jruby/jruby/network" title="Forks" class="tooltipped downwards">125</a></li>
|
165
163
|
</ul>
|
166
164
|
</li>
|
167
165
|
</ul>
|
@@ -179,10 +177,12 @@
|
|
179
177
|
|
180
178
|
|
181
179
|
|
182
|
-
<li><a href="/jruby/jruby/wiki" class="selected" highlight="repo_wiki">Wiki (
|
180
|
+
<li><a href="/jruby/jruby/wiki" class="selected" highlight="repo_wiki">Wiki (118)</a></li>
|
183
181
|
|
184
182
|
<li><a href="/jruby/jruby/graphs" highlight="repo_graphs">Graphs</a></li>
|
185
183
|
|
184
|
+
|
185
|
+
|
186
186
|
<li class="contextswitch nochoices">
|
187
187
|
<span class="toggle leftwards" >
|
188
188
|
<em>Branch:</em>
|
@@ -287,10 +287,10 @@
|
|
287
287
|
</div>
|
288
288
|
<div id="gollum-footer">
|
289
289
|
<p id="last-edit">
|
290
|
-
Last edited by headius, <
|
290
|
+
Last edited by headius, <time class="js-relative-date" datetime="2011-05-15T17:25:54-07:00" title="2011-05-15 17:25:54">May 15, 2011</time>
|
291
291
|
</p>
|
292
292
|
<p id="delete-link">
|
293
|
-
<a href="/jruby/jruby/wiki/C-Extension-Alternatives" onclick="if (confirm('Are you sure you want to delete this page?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '
|
293
|
+
<a href="/jruby/jruby/wiki/C-Extension-Alternatives" onclick="if (confirm('Are you sure you want to delete this page?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'a12af8eb75d6148a6d430d76ce52736db893dd3d'); f.appendChild(s);f.submit(); };return false;"><span>Delete this Page</span></a>
|
294
294
|
</p>
|
295
295
|
</div>
|
296
296
|
</div>
|
@@ -306,7 +306,7 @@
|
|
306
306
|
|
307
307
|
<div class="sponsor">
|
308
308
|
<a href="http://www.rackspace.com" class="logo">
|
309
|
-
<img alt="Dedicated Server" height="36" src="https://
|
309
|
+
<img alt="Dedicated Server" height="36" src="https://a248.e.akamai.net/assets.github.com/images/modules/footer/rackspace_logo.png?v2" width="38" />
|
310
310
|
</a>
|
311
311
|
Powered by the <a href="http://www.rackspace.com ">Dedicated
|
312
312
|
Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
|
@@ -327,7 +327,7 @@
|
|
327
327
|
|
328
328
|
</ul>
|
329
329
|
<ul class="sosueme">
|
330
|
-
<li class="main">© 2011 <span id="_rrt" title="0.
|
330
|
+
<li class="main">© 2011 <span id="_rrt" title="0.11973s from fe1.rs.github.com">GitHub</span> Inc. All rights reserved.</li>
|
331
331
|
<li><a href="/site/terms">Terms of Service</a></li>
|
332
332
|
<li><a href="/site/privacy">Privacy</a></li>
|
333
333
|
<li><a href="https://github.com/security">Security</a></li>
|
@@ -335,7 +335,7 @@
|
|
335
335
|
</div>
|
336
336
|
</div><!-- /#footer -->
|
337
337
|
|
338
|
-
<script>window._auth_token = "
|
338
|
+
<script>window._auth_token = "a12af8eb75d6148a6d430d76ce52736db893dd3d"</script>
|
339
339
|
|
340
340
|
|
341
341
|
<div id="keyboard_shortcuts_pane" class="instapaper_ignore readability-extra" style="display:none">
|
@@ -599,7 +599,7 @@ As Kanye West said:
|
|
599
599
|
|
600
600
|
<h3>Code Examples in Markdown</h3>
|
601
601
|
<div class="col">
|
602
|
-
<p>Syntax highlighting with <a href="http://github.github.com/github-flavored-markdown/" title="GitHub Flavored Markdown">GFM</a></p>
|
602
|
+
<p>Syntax highlighting with <a href="http://github.github.com/github-flavored-markdown/" title="GitHub Flavored Markdown" target="_blank">GFM</a></p>
|
603
603
|
<pre>
|
604
604
|
```javascript
|
605
605
|
function fancyAlert(arg) {
|
@@ -646,7 +646,7 @@ I think you should use an
|
|
646
646
|
|
647
647
|
|
648
648
|
|
649
|
-
<script>(function(){var d=document;var e=d.createElement("script");e.async=true;e.src="https://d1ros97qkrwjf5.cloudfront.net/
|
649
|
+
<script type="text/javascript">(function(){var d=document;var e=d.createElement("script");e.async=true;e.src="https://d1ros97qkrwjf5.cloudfront.net/14/eum/rum.js ";e.type="text/javascript";var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(e,s);})();NREUMQ.push(["nrf2","beacon-1.newrelic.com","2f94e4d8c2",64799,"dw1bEBZcX1RWRhoRD18LGhcMXEQ=",0.0,118,new Date().getTime()])</script>
|
650
650
|
</body>
|
651
651
|
</html>
|
652
652
|
|
@@ -28,4 +28,16 @@ describe JRuby::Lint::Finding do
|
|
28
28
|
When { @finding = JRuby::Lint::Finding.new(message, tags, file, line) }
|
29
29
|
Then { @finding.tags.should == ["1", "two", "3.0"] }
|
30
30
|
end
|
31
|
+
|
32
|
+
context "with error tags" do
|
33
|
+
Given(:tags) { [:error] }
|
34
|
+
When { @finding = JRuby::Lint::Finding.new(message, tags, file, line) }
|
35
|
+
Then { @finding.should be_error }
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with warnings tags" do
|
39
|
+
Given(:tags) { [:warning] }
|
40
|
+
When { @finding = JRuby::Lint::Finding.new(message, tags, file, line) }
|
41
|
+
Then { @finding.should be_warning }
|
42
|
+
end
|
31
43
|
end
|
@@ -67,6 +67,11 @@ describe JRuby::Lint::Project do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
When do
|
71
|
+
reporter.stub!(:print_report)
|
72
|
+
reporter.should_receive(:print_report).with([finding])
|
73
|
+
end
|
74
|
+
|
70
75
|
When do
|
71
76
|
project.collectors.replace [collector]
|
72
77
|
project.reporters.replace [reporter]
|
@@ -74,4 +79,48 @@ describe JRuby::Lint::Project do
|
|
74
79
|
|
75
80
|
Then { project.run }
|
76
81
|
end
|
82
|
+
|
83
|
+
context 'loading reporters' do
|
84
|
+
context 'with html option' do
|
85
|
+
Given(:options) { OpenStruct.new(:html => 'report.html') }
|
86
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new(options) } }
|
87
|
+
Then { project.reporters.should have(1).reporter }
|
88
|
+
Then { project.reporters.first.should be_an_instance_of(JRuby::Lint::Reporters::Html) }
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'with ansi option' do
|
92
|
+
Given(:options) { OpenStruct.new(:ansi => true) }
|
93
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new(options) } }
|
94
|
+
Then { project.reporters.should have(1).reporter }
|
95
|
+
Then { project.reporters.first.should be_an_instance_of(JRuby::Lint::Reporters::ANSIColor) }
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'with text option' do
|
99
|
+
Given(:options) { OpenStruct.new(:text => true) }
|
100
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new(options) } }
|
101
|
+
Then { project.reporters.should have(1).reporter }
|
102
|
+
Then { project.reporters.first.should be_an_instance_of(JRuby::Lint::Reporters::Text) }
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'with tty' do
|
106
|
+
Given { STDOUT.stub(:tty?).and_return(true) }
|
107
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new } }
|
108
|
+
Then { project.reporters.should have(1).reporter }
|
109
|
+
Then { project.reporters.first.should be_an_instance_of(JRuby::Lint::Reporters::ANSIColor) }
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'without any option' do
|
113
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new } }
|
114
|
+
Then { project.reporters.should have(1).reporter }
|
115
|
+
Then { project.reporters.first.should be_an_instance_of(JRuby::Lint::Reporters::Text) }
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'with several options' do
|
119
|
+
Given(:options) { OpenStruct.new(:ansi => true, :html => 'report.html') }
|
120
|
+
Given(:project) { in_current_dir { JRuby::Lint::Project.new(options) } }
|
121
|
+
Then { project.reporters.should have(2).reporter }
|
122
|
+
Then { project.reporters.map(&:class).should include(JRuby::Lint::Reporters::ANSIColor) }
|
123
|
+
Then { project.reporters.map(&:class).should include(JRuby::Lint::Reporters::Html) }
|
124
|
+
end
|
125
|
+
end
|
77
126
|
end
|
@@ -26,17 +26,38 @@ describe JRuby::Lint::Reporters do
|
|
26
26
|
Given(:reporter) { JRuby::Lint::Reporters::ANSIColor.new(project, output) }
|
27
27
|
|
28
28
|
context "shows a finding tagged 'error' in red" do
|
29
|
-
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(error) }
|
29
|
+
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(error), :error? => true }
|
30
30
|
Given(:output) { double("output").tap {|o| o.should_receive(:puts).with(red("hello")) } }
|
31
31
|
|
32
32
|
Then { reporter.report [finding] }
|
33
33
|
end
|
34
34
|
|
35
35
|
context "shows a finding tagged 'warning' in yellow" do
|
36
|
-
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(warning) }
|
36
|
+
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(warning), :error? => false, :warning? => true }
|
37
37
|
Given(:output) { double("output").tap {|o| o.should_receive(:puts).with(yellow("hello")) } }
|
38
38
|
|
39
39
|
Then { reporter.report [finding] }
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
context "Html reporter" do
|
44
|
+
Given(:reporter) { JRuby::Lint::Reporters::Html.new(project, 'lint-spec-report.html') }
|
45
|
+
|
46
|
+
context "shows a finding tagged 'error' in red" do
|
47
|
+
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(error), :error? => true }
|
48
|
+
Then { reporter.print_report [finding] }
|
49
|
+
Then { File.read('lint-spec-report.html').should include('<li class="error">hello</li>') }
|
50
|
+
end
|
51
|
+
|
52
|
+
context "shows a finding tagged 'warning' in yellow" do
|
53
|
+
Given(:finding) { double "finding", :to_s => "hello", :tags => %w(warning), :error? => false, :warning? => true }
|
54
|
+
Then { reporter.print_report [finding] }
|
55
|
+
Then { File.read('lint-spec-report.html').should include('<li class="warning">hello</li>') }
|
56
|
+
end
|
57
|
+
|
58
|
+
context "shows a nice message when we don't find any issue" do
|
59
|
+
When { reporter.print_report [] }
|
60
|
+
Then { File.read('lint-spec-report.html').should include('Congratulations!') }
|
61
|
+
end
|
62
|
+
end
|
42
63
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jruby-lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nick Sieger
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-05 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -136,6 +136,9 @@ files:
|
|
136
136
|
- lib/jruby/lint/libraries.rb
|
137
137
|
- lib/jruby/lint/project.rb
|
138
138
|
- lib/jruby/lint/reporters.rb
|
139
|
+
- lib/jruby/lint/reporters/html.rb
|
140
|
+
- lib/jruby/lint/reporters/jruby-lint.html.erb
|
141
|
+
- lib/jruby/lint/reporters/text.rb
|
139
142
|
- lib/jruby/lint/version.rb
|
140
143
|
- spec/fixtures/C-Extension-Alternatives.html
|
141
144
|
- spec/jruby/lint/ast_spec.rb
|