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/lib/jslintrb/jslintrb.js
CHANGED
@@ -51,8 +51,12 @@
|
|
51
51
|
}
|
52
52
|
|
53
53
|
if (opts) {
|
54
|
-
|
55
|
-
|
54
|
+
try {
|
55
|
+
opts = JSON.parse(opts);
|
56
|
+
batches.push(opts);
|
57
|
+
} catch(e) {
|
58
|
+
throw new Error("could not parse "+list[d]+" as JSON");
|
59
|
+
}
|
56
60
|
}
|
57
61
|
}
|
58
62
|
var options = {};
|
@@ -72,10 +76,13 @@
|
|
72
76
|
for (j = 0; j < JSLINT.errors.length; j += 1) {
|
73
77
|
var e = JSLINT.errors[j];
|
74
78
|
if (e) {
|
79
|
+
|
75
80
|
Ruby.print(file + ' line ' + e.line + ' character ' +
|
76
81
|
e.character + ': ' + e.reason + '\n');
|
77
82
|
Ruby.print((e.evidence || '').
|
78
83
|
replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1") + '\n');
|
84
|
+
Ruby.send("eval","$stdout.flush");
|
85
|
+
Ruby.send("eval","$stderr.flush");
|
79
86
|
}
|
80
87
|
}
|
81
88
|
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module JSLintRb; end
|
6
|
+
class JSLintRb::Plugin < Wake::Plugin
|
7
|
+
extend Wake::Plugin::Class
|
8
|
+
|
9
|
+
default :regexp => /\.js$/
|
10
|
+
|
11
|
+
def out_of_date? node, flag
|
12
|
+
return true if super
|
13
|
+
return flag
|
14
|
+
end
|
15
|
+
|
16
|
+
def watcher
|
17
|
+
default = super
|
18
|
+
lambda do |path, graph|
|
19
|
+
if node = default.call( path, graph )
|
20
|
+
create graph, Node::Virtual.new( node, cls.default[:options][:virtual] ), :from => node, :plugin => self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def fire_all
|
26
|
+
lambda do |nodes|
|
27
|
+
succeeded = nodes.inject({}) { |hash, node| hash[node] = true; hash }
|
28
|
+
cmd = "jslintrb #{nodes.map { |node| node.primary_dependence.path }.uniq.join(' ')}"
|
29
|
+
puts cmd
|
30
|
+
status = open("|"+cmd) do |f|
|
31
|
+
f.each do |line|
|
32
|
+
$stderr.puts line
|
33
|
+
m = /^([^ ]+) line \d+ character \d+:/.match(line)
|
34
|
+
path = m[1] if m
|
35
|
+
if path
|
36
|
+
array = nodes.select { |node| node.primary_dependence.path == path }
|
37
|
+
succeeded[array[0]] = false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
succeeded.each do |node, v|
|
42
|
+
FileUtils.mkdir_p Pathname(node.path).dirname
|
43
|
+
open(node.path,"w") do |f|
|
44
|
+
f.truncate 0
|
45
|
+
f.write({:succeded => v}.to_json)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
return status
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/lib/jslintrb.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jslintrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Steven Parkes
|
@@ -9,68 +14,106 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-03-16 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
21
|
+
name: johnson
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 0
|
30
|
+
- 0
|
31
|
+
- pre0
|
32
|
+
version: 2.0.0.pre0
|
17
33
|
type: :runtime
|
18
|
-
|
19
|
-
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: gemcutter
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
- 5
|
45
|
+
- 0
|
46
|
+
version: 0.5.0
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: hoe
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
20
53
|
requirements:
|
21
54
|
- - ">="
|
22
55
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
56
|
+
segments:
|
57
|
+
- 2
|
58
|
+
- 5
|
59
|
+
- 0
|
60
|
+
version: 2.5.0
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
63
|
+
description: |-
|
64
|
+
jslintrb is a packaged version of Douglas Crockford's JSLint JavaScript code checker.
|
65
|
+
jslintrb uses SpiderMonkey via the Johnson
|
66
|
+
Ruby gem to interpret the JSLint javascript.
|
67
|
+
email:
|
68
|
+
- smparkes@smparkes.net
|
27
69
|
executables:
|
28
|
-
- jslintrb~
|
29
70
|
- jslintrb
|
30
71
|
extensions: []
|
31
72
|
|
32
73
|
extra_rdoc_files:
|
33
|
-
-
|
34
|
-
- README.rdoc
|
74
|
+
- Manifest.txt
|
35
75
|
files:
|
76
|
+
- CHANGELOG.rdoc
|
77
|
+
- LICENSE
|
78
|
+
- Manifest.txt
|
36
79
|
- README.rdoc
|
80
|
+
- Rakefile
|
37
81
|
- bin/jslintrb
|
38
82
|
- lib/jslintrb.rb
|
39
83
|
- lib/jslintrb/fulljslint.js
|
40
84
|
- lib/jslintrb/jslintrb.js
|
41
|
-
- lib/jslintrb/
|
85
|
+
- lib/jslintrb/jslintrb.wk
|
42
86
|
- lib/jslintrb/options.rb
|
43
|
-
- test/helper.rb
|
44
|
-
- test/test_jslintrb.rb
|
45
|
-
- LICENSE
|
46
87
|
has_rdoc: true
|
47
88
|
homepage: http://github.com/smparkes/jslintrb
|
48
89
|
licenses: []
|
49
90
|
|
50
91
|
post_install_message:
|
51
92
|
rdoc_options:
|
52
|
-
- --
|
93
|
+
- --main
|
94
|
+
- README.rdoc
|
53
95
|
require_paths:
|
54
96
|
- lib
|
55
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
56
98
|
requirements:
|
57
99
|
- - ">="
|
58
100
|
- !ruby/object:Gem::Version
|
101
|
+
segments:
|
102
|
+
- 0
|
59
103
|
version: "0"
|
60
|
-
version:
|
61
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
105
|
requirements:
|
63
106
|
- - ">="
|
64
107
|
- !ruby/object:Gem::Version
|
108
|
+
segments:
|
109
|
+
- 0
|
65
110
|
version: "0"
|
66
|
-
version:
|
67
111
|
requirements: []
|
68
112
|
|
69
|
-
rubyforge_project:
|
70
|
-
rubygems_version: 1.3.
|
113
|
+
rubyforge_project: jslintrb
|
114
|
+
rubygems_version: 1.3.6
|
71
115
|
signing_key:
|
72
116
|
specification_version: 3
|
73
|
-
summary:
|
74
|
-
test_files:
|
75
|
-
|
76
|
-
- test/helper.rb
|
117
|
+
summary: jslintrb is a packaged version of Douglas Crockford's JSLint JavaScript code checker
|
118
|
+
test_files: []
|
119
|
+
|
data/bin/jslintrb~
DELETED
@@ -1,223 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$VERBOSE = true
|
4
|
-
|
5
|
-
require 'jslintrb/options'
|
6
|
-
|
7
|
-
ENV["JSLINTRB_JS_PATH"] =
|
8
|
-
JSLINT_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'jslintrb'))
|
9
|
-
|
10
|
-
intro = File.join(JSLINT_DIR, "intro.js")
|
11
|
-
outro = File.join(JSLINT_DIR, "outro.js")
|
12
|
-
|
13
|
-
args = [ "envjsrb" ]
|
14
|
-
|
15
|
-
args << intro
|
16
|
-
|
17
|
-
introd = true
|
18
|
-
outrod = true
|
19
|
-
|
20
|
-
ARGV.each do |f|
|
21
|
-
|
22
|
-
if f =~ /\.x?html?$/ || f =~ %r(^https?://)
|
23
|
-
if introd && !outrod
|
24
|
-
args << outro
|
25
|
-
args << "about:blank"
|
26
|
-
outrod = true
|
27
|
-
introd = false
|
28
|
-
end
|
29
|
-
if !introd
|
30
|
-
args << intro
|
31
|
-
end
|
32
|
-
args << f
|
33
|
-
introd = true
|
34
|
-
outrod = false
|
35
|
-
elsif f == "about:blank"
|
36
|
-
if introd && !outrod
|
37
|
-
args << outro
|
38
|
-
outrod = true
|
39
|
-
introd = false
|
40
|
-
end
|
41
|
-
args << f
|
42
|
-
else
|
43
|
-
args << f
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
args << outro
|
49
|
-
|
50
|
-
cmd = args.join(" ")
|
51
|
-
|
52
|
-
puts cmd if $jslintrb_verbose
|
53
|
-
|
54
|
-
require 'eventmachine'
|
55
|
-
require 'nokogiri'
|
56
|
-
|
57
|
-
class Restart < Exception; end
|
58
|
-
|
59
|
-
def colour(text, colour_code)
|
60
|
-
# return text unless ENV['RSPEC_COLOR'] || (colour? & (autospec? || output_to_tty?))
|
61
|
-
"#{colour_code}#{text}\e[0m"
|
62
|
-
end
|
63
|
-
|
64
|
-
def green(text); colour(text, "\e[32m"); end
|
65
|
-
def red(text); colour(text, "\e[31m"); end
|
66
|
-
def yellow(text); colour(text, "\e[33m"); end
|
67
|
-
def blue(text); colour(text, "\e[34m"); end
|
68
|
-
|
69
|
-
$spec_info = {}
|
70
|
-
$spec_info[:specs] = []
|
71
|
-
$spec_info[:failures] = []
|
72
|
-
$spec_info[:pending] = []
|
73
|
-
|
74
|
-
class SAX < Nokogiri::XML::SAX::Document
|
75
|
-
|
76
|
-
def start_element name, attrs
|
77
|
-
# p attrs
|
78
|
-
attrs = Hash[*attrs]
|
79
|
-
# p attrs
|
80
|
-
case name
|
81
|
-
when "testsuites";
|
82
|
-
when "testsuite";
|
83
|
-
@testsuite_name = attrs["name"]
|
84
|
-
if @testsuite_pending = ( attrs["skipped"] == "true" )
|
85
|
-
$spec_info[:specs] << (tc = {})
|
86
|
-
tc[:name] = @testsuite_name
|
87
|
-
$spec_info[:pending] << $spec_info[:specs].last
|
88
|
-
end
|
89
|
-
when "testcase";
|
90
|
-
$spec_info[:specs] << (tc = {})
|
91
|
-
tc[:name] = @testsuite_name + " : " + attrs["name"]
|
92
|
-
@testcase_failed = false
|
93
|
-
when "failure";
|
94
|
-
$spec_info[:failures] << (tc = $spec_info[:specs].last)
|
95
|
-
tc[:message] = attrs["message"]
|
96
|
-
@testcase_failed = true
|
97
|
-
else; raise "hell: #{name}"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def cdata_block string
|
102
|
-
if @testcase_failed
|
103
|
-
$spec_info[:failures].last[:stack] ||= ""
|
104
|
-
$spec_info[:failures].last[:stack] << string
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def end_element name
|
109
|
-
case name
|
110
|
-
when "testsuites";
|
111
|
-
raise Restart
|
112
|
-
when "testsuite";
|
113
|
-
if !$jslintrb_xml
|
114
|
-
if @testsuite_pending
|
115
|
-
char = yellow("*")
|
116
|
-
print char
|
117
|
-
$stdout.flush
|
118
|
-
end
|
119
|
-
end
|
120
|
-
when "testcase";
|
121
|
-
if !$jslintrb_xml
|
122
|
-
char = nil
|
123
|
-
if @testcase_failed
|
124
|
-
char = red("F")
|
125
|
-
else
|
126
|
-
char = green(".")
|
127
|
-
end
|
128
|
-
print char
|
129
|
-
$stdout.flush
|
130
|
-
end
|
131
|
-
when "failure";
|
132
|
-
else; raise "hell: #{name}"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
$failed_processes = 0
|
138
|
-
|
139
|
-
module WriteToNokogiri
|
140
|
-
def post_init
|
141
|
-
@parser = Nokogiri::XML::SAX::PushParser.new( SAX.new )
|
142
|
-
end
|
143
|
-
def receive_data data
|
144
|
-
begin
|
145
|
-
if $jslintrb_xml
|
146
|
-
# $stderr.print data
|
147
|
-
puts data
|
148
|
-
$stdout.flush
|
149
|
-
end
|
150
|
-
@parser << data
|
151
|
-
rescue Restart
|
152
|
-
@parser = Nokogiri::XML::SAX::PushParser.new( SAX.new )
|
153
|
-
rescue Exception => e
|
154
|
-
$stderr.puts "Parser raised #{e} on #{data}"
|
155
|
-
exit 1
|
156
|
-
end
|
157
|
-
end
|
158
|
-
def unbind
|
159
|
-
$failed_processes += 1 if get_status.exitstatus &&
|
160
|
-
get_status.exitstatus > 0
|
161
|
-
EM.stop
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
date = Time.now
|
166
|
-
failures = nil
|
167
|
-
examples = nil
|
168
|
-
pending = nil
|
169
|
-
|
170
|
-
EM.run do
|
171
|
-
EM.popen cmd, WriteToNokogiri
|
172
|
-
end
|
173
|
-
|
174
|
-
puts
|
175
|
-
puts
|
176
|
-
|
177
|
-
if !$jslintrb_xml
|
178
|
-
if $spec_info[:pending].length > 0
|
179
|
-
puts "Pending:"
|
180
|
-
$spec_info[:pending].each do |pending|
|
181
|
-
puts
|
182
|
-
puts yellow(pending[:name])
|
183
|
-
end
|
184
|
-
puts "\n"
|
185
|
-
end
|
186
|
-
$spec_info[:failures].each_with_index do |failure,i|
|
187
|
-
print i+1,")\n"
|
188
|
-
print red("#{failure[:name]} FAILED\n")
|
189
|
-
print red(failure[:message]),"\n"
|
190
|
-
# double check, but is there really anything in the jslint stack that's useful?
|
191
|
-
stack = failure[:stack]
|
192
|
-
stack and ( stack = stack.split "\n" )
|
193
|
-
stack and stack.each do |line|
|
194
|
-
if line =~ %r(/jasmine.js:\d+) || line =~ %r(/jasmine/src/.*\.js:\d+)
|
195
|
-
break
|
196
|
-
end
|
197
|
-
print line, "\n"
|
198
|
-
end
|
199
|
-
# p stack
|
200
|
-
# print failure[:stack],"\n"
|
201
|
-
end
|
202
|
-
puts "Finished in #{Time.now - date} seconds"
|
203
|
-
puts
|
204
|
-
examples = $spec_info[:specs].length
|
205
|
-
# require 'pp'
|
206
|
-
# pp $spec_info[:specs]
|
207
|
-
failures = $spec_info[:failures].length
|
208
|
-
pending = $spec_info[:pending].length
|
209
|
-
if $failed_processes > 0
|
210
|
-
examples += $failed_processes
|
211
|
-
failures += $failed_processes
|
212
|
-
end
|
213
|
-
msg = "#{examples} examples, #{failures} failures, #{pending} pending"
|
214
|
-
if failures > 0
|
215
|
-
msg = red(msg)
|
216
|
-
elsif pending > 0
|
217
|
-
msg = yellow(msg)
|
218
|
-
else
|
219
|
-
msg = green(msg)
|
220
|
-
end
|
221
|
-
puts msg
|
222
|
-
end
|
223
|
-
exit ( !failures.nil? && failures > 0 ) ? 1 : 0
|