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.
@@ -51,8 +51,12 @@
51
51
  }
52
52
 
53
53
  if (opts) {
54
- opts = JSON.parse(opts);
55
- batches.push(opts);
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
@@ -0,0 +1,3 @@
1
+ module JSLintRB
2
+ VERSION = "0.4.0"
3
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jslintrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
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-01-22 00:00:00 -08:00
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: smparkes-johnson
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
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
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
- version: 1.1.2.6
24
- version:
25
- description: jslintrb is a packaged version of Douglas Crockford's JSLint JavaScript code checker. jslintrb uses SpiderMonkey via the Johnson Ruby gem to interpret the JSLint javascript.
26
- email: smparkes@smparkes.net
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
- - LICENSE
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/json2.js
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
- - --charset=UTF-8
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.5
113
+ rubyforge_project: jslintrb
114
+ rubygems_version: 1.3.6
71
115
  signing_key:
72
116
  specification_version: 3
73
- summary: Ruby packaging of JSLint javascript code checker
74
- test_files:
75
- - test/test_jslintrb.rb
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