jslintrb 0.3.0 → 0.4.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/CHANGELOG.rdoc +3 -0
- data/Manifest.txt +11 -0
- data/README.rdoc +9 -10
- data/Rakefile +18 -0
- data/bin/jslintrb +0 -218
- data/lib/jslintrb/fulljslint.js +174 -143
- data/lib/jslintrb/jslintrb.js +9 -2
- data/lib/jslintrb/jslintrb.wk +52 -0
- data/lib/jslintrb.rb +3 -0
- metadata +68 -25
- data/bin/jslintrb~ +0 -223
- data/lib/jslintrb/json2.js +0 -479
- data/test/helper.rb +0 -10
- data/test/test_jslintrb.rb +0 -7
data/CHANGELOG.rdoc
ADDED
data/Manifest.txt
ADDED
data/README.rdoc
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
= jslintrb
|
2
2
|
|
3
|
-
jslintrb
|
4
|
-
|
3
|
+
* http://github.com/smparkes/jslintrb
|
4
|
+
|
5
|
+
== Description
|
6
|
+
|
7
|
+
jslintrb is a packaged version of Douglas Crockford's JSLint JavaScript code checker.
|
8
|
+
jslintrb uses SpiderMonkey via the Johnson
|
5
9
|
Ruby gem to interpret the JSLint javascript.
|
6
10
|
|
7
11
|
== Usage
|
@@ -17,16 +21,11 @@ top-level project directory that sets options for my project, then one
|
|
17
21
|
in my spec directory (like a test directory) which adds the globals
|
18
22
|
that exist for the tests but not for the core application code.
|
19
23
|
|
20
|
-
The file is JSON-formatted. See the
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
jslintrb adds support for JavaScript with statements. They are parsed
|
25
|
-
but produce a warning. The "withstmt" option will suppress that
|
26
|
-
warning. Note that this does not endorse the use of with statements.
|
24
|
+
The file is JSON-formatted. See the jslint documentation
|
25
|
+
(http://www.jslint.com/lint.html#options) for allowed options and an
|
26
|
+
example at http://github.com/smparkes/env-js/blob/envjsrb/.jslintrbrc.
|
27
27
|
|
28
28
|
== Copyright
|
29
29
|
|
30
30
|
jslintrb copyright (c) 2010 Steven Parkes. See LICENSE for details.
|
31
31
|
jslint copyright (c) 2002 Douglas Crockford. See lib/jslintrb/fulljslint.js for details.
|
32
|
-
json2 is in the public domain. See lib/jslintrb/json2.js for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
|
6
|
+
Hoe.plugin :debugging, :doofus, :git
|
7
|
+
Hoe.plugins.delete :rubyforge
|
8
|
+
|
9
|
+
Hoe.spec 'jslintrb' do
|
10
|
+
|
11
|
+
developer 'Steven Parkes', 'smparkes@smparkes.net'
|
12
|
+
|
13
|
+
self.history_file = "CHANGELOG.rdoc"
|
14
|
+
self.readme_file = "README.rdoc"
|
15
|
+
|
16
|
+
extra_deps << ["johnson", ">= 2.0.0.pre0"]
|
17
|
+
|
18
|
+
end
|
data/bin/jslintrb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
$VERBOSE = true
|
4
3
|
|
5
4
|
require 'jslintrb/options'
|
@@ -13,7 +12,6 @@ args = [ "env",
|
|
13
12
|
"JOHNSON_RUNTIME=tracemonkey",
|
14
13
|
"johnson",
|
15
14
|
File.join(JSLINT_DIR,"fulljslint.js"),
|
16
|
-
File.join(JSLINT_DIR,"json2.js"),
|
17
15
|
File.join(JSLINT_DIR,"jslintrb.js") ]
|
18
16
|
|
19
17
|
cmd = args.join(" ")
|
@@ -23,219 +21,3 @@ puts cmd if $jslintrb_verbose
|
|
23
21
|
if !system cmd
|
24
22
|
exit $?.exitstatus
|
25
23
|
end
|
26
|
-
|
27
|
-
exit
|
28
|
-
|
29
|
-
intro = File.join(JSLINT_DIR, "intro.js")
|
30
|
-
outro = File.join(JSLINT_DIR, "outro.js")
|
31
|
-
|
32
|
-
args << intro
|
33
|
-
|
34
|
-
introd = true
|
35
|
-
outrod = true
|
36
|
-
|
37
|
-
ARGV.each do |f|
|
38
|
-
|
39
|
-
if f =~ /\.x?html?$/ || f =~ %r(^https?://)
|
40
|
-
if introd && !outrod
|
41
|
-
args << outro
|
42
|
-
args << "about:blank"
|
43
|
-
outrod = true
|
44
|
-
introd = false
|
45
|
-
end
|
46
|
-
if !introd
|
47
|
-
args << intro
|
48
|
-
end
|
49
|
-
args << f
|
50
|
-
introd = true
|
51
|
-
outrod = false
|
52
|
-
elsif f == "about:blank"
|
53
|
-
if introd && !outrod
|
54
|
-
args << outro
|
55
|
-
outrod = true
|
56
|
-
introd = false
|
57
|
-
end
|
58
|
-
args << f
|
59
|
-
else
|
60
|
-
args << f
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
args << outro
|
66
|
-
|
67
|
-
cmd = args.join(" ")
|
68
|
-
|
69
|
-
puts cmd if $jslintrb_verbose
|
70
|
-
|
71
|
-
require 'eventmachine'
|
72
|
-
require 'nokogiri'
|
73
|
-
|
74
|
-
class Restart < Exception; end
|
75
|
-
|
76
|
-
def colour(text, colour_code)
|
77
|
-
# return text unless ENV['RSPEC_COLOR'] || (colour? & (autospec? || output_to_tty?))
|
78
|
-
"#{colour_code}#{text}\e[0m"
|
79
|
-
end
|
80
|
-
|
81
|
-
def green(text); colour(text, "\e[32m"); end
|
82
|
-
def red(text); colour(text, "\e[31m"); end
|
83
|
-
def yellow(text); colour(text, "\e[33m"); end
|
84
|
-
def blue(text); colour(text, "\e[34m"); end
|
85
|
-
|
86
|
-
$spec_info = {}
|
87
|
-
$spec_info[:specs] = []
|
88
|
-
$spec_info[:failures] = []
|
89
|
-
$spec_info[:pending] = []
|
90
|
-
|
91
|
-
class SAX < Nokogiri::XML::SAX::Document
|
92
|
-
|
93
|
-
def start_element name, attrs
|
94
|
-
# p attrs
|
95
|
-
attrs = Hash[*attrs]
|
96
|
-
# p attrs
|
97
|
-
case name
|
98
|
-
when "testsuites";
|
99
|
-
when "testsuite";
|
100
|
-
@testsuite_name = attrs["name"]
|
101
|
-
if @testsuite_pending = ( attrs["skipped"] == "true" )
|
102
|
-
$spec_info[:specs] << (tc = {})
|
103
|
-
tc[:name] = @testsuite_name
|
104
|
-
$spec_info[:pending] << $spec_info[:specs].last
|
105
|
-
end
|
106
|
-
when "testcase";
|
107
|
-
$spec_info[:specs] << (tc = {})
|
108
|
-
tc[:name] = @testsuite_name + " : " + attrs["name"]
|
109
|
-
@testcase_failed = false
|
110
|
-
when "failure";
|
111
|
-
$spec_info[:failures] << (tc = $spec_info[:specs].last)
|
112
|
-
tc[:message] = attrs["message"]
|
113
|
-
@testcase_failed = true
|
114
|
-
else; raise "hell: #{name}"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def cdata_block string
|
119
|
-
if @testcase_failed
|
120
|
-
$spec_info[:failures].last[:stack] ||= ""
|
121
|
-
$spec_info[:failures].last[:stack] << string
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def end_element name
|
126
|
-
case name
|
127
|
-
when "testsuites";
|
128
|
-
raise Restart
|
129
|
-
when "testsuite";
|
130
|
-
if !$jslintrb_xml
|
131
|
-
if @testsuite_pending
|
132
|
-
char = yellow("*")
|
133
|
-
print char
|
134
|
-
$stdout.flush
|
135
|
-
end
|
136
|
-
end
|
137
|
-
when "testcase";
|
138
|
-
if !$jslintrb_xml
|
139
|
-
char = nil
|
140
|
-
if @testcase_failed
|
141
|
-
char = red("F")
|
142
|
-
else
|
143
|
-
char = green(".")
|
144
|
-
end
|
145
|
-
print char
|
146
|
-
$stdout.flush
|
147
|
-
end
|
148
|
-
when "failure";
|
149
|
-
else; raise "hell: #{name}"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
$failed_processes = 0
|
155
|
-
|
156
|
-
module WriteToNokogiri
|
157
|
-
def post_init
|
158
|
-
@parser = Nokogiri::XML::SAX::PushParser.new( SAX.new )
|
159
|
-
end
|
160
|
-
def receive_data data
|
161
|
-
begin
|
162
|
-
if $jslintrb_xml
|
163
|
-
# $stderr.print data
|
164
|
-
puts data
|
165
|
-
$stdout.flush
|
166
|
-
end
|
167
|
-
@parser << data
|
168
|
-
rescue Restart
|
169
|
-
@parser = Nokogiri::XML::SAX::PushParser.new( SAX.new )
|
170
|
-
rescue Exception => e
|
171
|
-
$stderr.puts "Parser raised #{e} on #{data}"
|
172
|
-
exit 1
|
173
|
-
end
|
174
|
-
end
|
175
|
-
def unbind
|
176
|
-
$failed_processes += 1 if get_status.exitstatus &&
|
177
|
-
get_status.exitstatus > 0
|
178
|
-
EM.stop
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
date = Time.now
|
183
|
-
failures = nil
|
184
|
-
examples = nil
|
185
|
-
pending = nil
|
186
|
-
|
187
|
-
EM.run do
|
188
|
-
EM.popen cmd, WriteToNokogiri
|
189
|
-
end
|
190
|
-
|
191
|
-
puts
|
192
|
-
puts
|
193
|
-
|
194
|
-
if !$jslintrb_xml
|
195
|
-
if $spec_info[:pending].length > 0
|
196
|
-
puts "Pending:"
|
197
|
-
$spec_info[:pending].each do |pending|
|
198
|
-
puts
|
199
|
-
puts yellow(pending[:name])
|
200
|
-
end
|
201
|
-
puts "\n"
|
202
|
-
end
|
203
|
-
$spec_info[:failures].each_with_index do |failure,i|
|
204
|
-
print i+1,")\n"
|
205
|
-
print red("#{failure[:name]} FAILED\n")
|
206
|
-
print red(failure[:message]),"\n"
|
207
|
-
# double check, but is there really anything in the jslint stack that's useful?
|
208
|
-
stack = failure[:stack]
|
209
|
-
stack and ( stack = stack.split "\n" )
|
210
|
-
stack and stack.each do |line|
|
211
|
-
if line =~ %r(/jasmine.js:\d+) || line =~ %r(/jasmine/src/.*\.js:\d+)
|
212
|
-
break
|
213
|
-
end
|
214
|
-
print line, "\n"
|
215
|
-
end
|
216
|
-
# p stack
|
217
|
-
# print failure[:stack],"\n"
|
218
|
-
end
|
219
|
-
puts "Finished in #{Time.now - date} seconds"
|
220
|
-
puts
|
221
|
-
examples = $spec_info[:specs].length
|
222
|
-
# require 'pp'
|
223
|
-
# pp $spec_info[:specs]
|
224
|
-
failures = $spec_info[:failures].length
|
225
|
-
pending = $spec_info[:pending].length
|
226
|
-
if $failed_processes > 0
|
227
|
-
examples += $failed_processes
|
228
|
-
failures += $failed_processes
|
229
|
-
end
|
230
|
-
msg = "#{examples} examples, #{failures} failures, #{pending} pending"
|
231
|
-
if failures > 0
|
232
|
-
msg = red(msg)
|
233
|
-
elsif pending > 0
|
234
|
-
msg = yellow(msg)
|
235
|
-
else
|
236
|
-
msg = green(msg)
|
237
|
-
end
|
238
|
-
puts msg
|
239
|
-
end
|
240
|
-
|
241
|
-
exit ( !failures.nil? && failures > 0 ) ? 1 : 0
|