jshintrb 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -5
- data/.gitmodules +0 -0
- data/.travis.yml +19 -19
- data/Gemfile +0 -0
- data/README.md +73 -73
- data/Rakefile +16 -10
- data/jshintrb.gemspec +26 -27
- data/lib/js/jshint.js +4523 -4397
- data/lib/jshintrb/jshinttask.rb +84 -84
- data/lib/jshintrb/lint.rb +64 -64
- data/lib/jshintrb/reporter/default.rb +29 -29
- data/lib/jshintrb/version.rb +2 -1
- data/lib/jshintrb.rb +0 -0
- data/spec/jshintrb_spec.rb +28 -28
- metadata +91 -56
data/lib/jshintrb/jshinttask.rb
CHANGED
@@ -1,84 +1,84 @@
|
|
1
|
-
# Define a task library for running JSHint contexts.
|
2
|
-
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/tasklib'
|
5
|
-
|
6
|
-
require 'jshintrb'
|
7
|
-
|
8
|
-
module Jshintrb
|
9
|
-
|
10
|
-
class JshintTask < ::Rake::TaskLib
|
11
|
-
# Name of JSHint task. (default is :jshint)
|
12
|
-
attr_accessor :name
|
13
|
-
|
14
|
-
# Glob pattern to match JavaScript files. (default is './**/*.js')
|
15
|
-
attr_accessor :pattern
|
16
|
-
|
17
|
-
# options
|
18
|
-
attr_accessor :options
|
19
|
-
|
20
|
-
# Whether or not to fail Rake when an error occurs (typically when Jshint check fail).
|
21
|
-
# Defaults to true.
|
22
|
-
attr_accessor :fail_on_error
|
23
|
-
|
24
|
-
# Explicitly define the list of JavaScript files to be linted.
|
25
|
-
# +js_files+ is expected to be an array of file names (a
|
26
|
-
# FileList is acceptable). If both +pattern+ and +js_files+ are
|
27
|
-
# used, then the list of JavaScritp files is the union of the two.
|
28
|
-
attr_accessor :js_files
|
29
|
-
|
30
|
-
attr_accessor :exclude_pattern
|
31
|
-
|
32
|
-
attr_accessor :exclude_js_files
|
33
|
-
|
34
|
-
# Defines a new task, using the name +name+.
|
35
|
-
def initialize(name=:jshint)
|
36
|
-
@name = name
|
37
|
-
@pattern = nil
|
38
|
-
@js_files = nil
|
39
|
-
@exclude_pattern = nil
|
40
|
-
@exclude_js_files = nil
|
41
|
-
@options = nil
|
42
|
-
@fail_on_error = true
|
43
|
-
|
44
|
-
yield self if block_given?
|
45
|
-
@pattern = './**/*.js' if pattern.nil? && js_files.nil?
|
46
|
-
define
|
47
|
-
end
|
48
|
-
|
49
|
-
def define # :nodoc:
|
50
|
-
|
51
|
-
actual_name = Hash === name ? name.keys.first : name
|
52
|
-
unless ::Rake.application.last_comment
|
53
|
-
desc "Run JShint"
|
54
|
-
end
|
55
|
-
task name do
|
56
|
-
unless js_file_list.empty?
|
57
|
-
result = Jshintrb::report(js_file_list, @options, STDERR)
|
58
|
-
if result.size > 0
|
59
|
-
abort("JSHint check failed") if fail_on_error
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
self
|
65
|
-
end
|
66
|
-
|
67
|
-
def evaluate(o) # :nodoc:
|
68
|
-
case o
|
69
|
-
when Proc then o.call
|
70
|
-
else o
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def js_file_list # :nodoc:
|
75
|
-
result = []
|
76
|
-
result += js_files.to_a if js_files
|
77
|
-
result += FileList[ pattern ].to_a if pattern
|
78
|
-
result -= exclude_js_files.to_a if exclude_js_files
|
79
|
-
result -= FileList[ exclude_pattern ].to_a if exclude_pattern
|
80
|
-
FileList[result]
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
1
|
+
# Define a task library for running JSHint contexts.
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/tasklib'
|
5
|
+
|
6
|
+
require 'jshintrb'
|
7
|
+
|
8
|
+
module Jshintrb
|
9
|
+
|
10
|
+
class JshintTask < ::Rake::TaskLib
|
11
|
+
# Name of JSHint task. (default is :jshint)
|
12
|
+
attr_accessor :name
|
13
|
+
|
14
|
+
# Glob pattern to match JavaScript files. (default is './**/*.js')
|
15
|
+
attr_accessor :pattern
|
16
|
+
|
17
|
+
# options
|
18
|
+
attr_accessor :options
|
19
|
+
|
20
|
+
# Whether or not to fail Rake when an error occurs (typically when Jshint check fail).
|
21
|
+
# Defaults to true.
|
22
|
+
attr_accessor :fail_on_error
|
23
|
+
|
24
|
+
# Explicitly define the list of JavaScript files to be linted.
|
25
|
+
# +js_files+ is expected to be an array of file names (a
|
26
|
+
# FileList is acceptable). If both +pattern+ and +js_files+ are
|
27
|
+
# used, then the list of JavaScritp files is the union of the two.
|
28
|
+
attr_accessor :js_files
|
29
|
+
|
30
|
+
attr_accessor :exclude_pattern
|
31
|
+
|
32
|
+
attr_accessor :exclude_js_files
|
33
|
+
|
34
|
+
# Defines a new task, using the name +name+.
|
35
|
+
def initialize(name=:jshint)
|
36
|
+
@name = name
|
37
|
+
@pattern = nil
|
38
|
+
@js_files = nil
|
39
|
+
@exclude_pattern = nil
|
40
|
+
@exclude_js_files = nil
|
41
|
+
@options = nil
|
42
|
+
@fail_on_error = true
|
43
|
+
|
44
|
+
yield self if block_given?
|
45
|
+
@pattern = './**/*.js' if pattern.nil? && js_files.nil?
|
46
|
+
define
|
47
|
+
end
|
48
|
+
|
49
|
+
def define # :nodoc:
|
50
|
+
|
51
|
+
actual_name = Hash === name ? name.keys.first : name
|
52
|
+
unless ::Rake.application.last_comment
|
53
|
+
desc "Run JShint"
|
54
|
+
end
|
55
|
+
task name do
|
56
|
+
unless js_file_list.empty?
|
57
|
+
result = Jshintrb::report(js_file_list, @options, STDERR)
|
58
|
+
if result.size > 0
|
59
|
+
abort("JSHint check failed") if fail_on_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def evaluate(o) # :nodoc:
|
68
|
+
case o
|
69
|
+
when Proc then o.call
|
70
|
+
else o
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def js_file_list # :nodoc:
|
75
|
+
result = []
|
76
|
+
result += js_files.to_a if js_files
|
77
|
+
result += FileList[ pattern ].to_a if pattern
|
78
|
+
result -= exclude_js_files.to_a if exclude_js_files
|
79
|
+
result -= FileList[ exclude_pattern ].to_a if exclude_pattern
|
80
|
+
FileList[result]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/lib/jshintrb/lint.rb
CHANGED
@@ -1,64 +1,64 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require "execjs"
|
4
|
-
require "multi_json"
|
5
|
-
|
6
|
-
module Jshintrb
|
7
|
-
|
8
|
-
class Lint
|
9
|
-
Error = ExecJS::Error
|
10
|
-
|
11
|
-
# Default options for compilation
|
12
|
-
DEFAULTS = {
|
13
|
-
:bitwise => true,
|
14
|
-
:curly => true,
|
15
|
-
:eqeqeq => true,
|
16
|
-
:forin => true,
|
17
|
-
:immed => true,
|
18
|
-
:latedef => true,
|
19
|
-
:newcap => true,
|
20
|
-
:noarg => true,
|
21
|
-
:noempty => true,
|
22
|
-
:nonew => true,
|
23
|
-
:plusplus => true,
|
24
|
-
:regexp => true,
|
25
|
-
:undef => true,
|
26
|
-
:strict => true,
|
27
|
-
:trailing => true,
|
28
|
-
:browser => true
|
29
|
-
}
|
30
|
-
|
31
|
-
SourcePath = File.expand_path("../../js/jshint.js", __FILE__)
|
32
|
-
|
33
|
-
def initialize(options = nil)
|
34
|
-
|
35
|
-
if options == :defaults then
|
36
|
-
@options = DEFAULTS.dup
|
37
|
-
elsif options.instance_of? Hash then
|
38
|
-
@options = options.dup
|
39
|
-
# @options = DEFAULTS.merge(options)
|
40
|
-
elsif options.nil?
|
41
|
-
@options = nil
|
42
|
-
else
|
43
|
-
raise 'Unsupported option for Jshintrb: ' + options.to_s
|
44
|
-
end
|
45
|
-
|
46
|
-
@context = ExecJS.compile(File.open(SourcePath, "r:UTF-8").read)
|
47
|
-
end
|
48
|
-
|
49
|
-
def lint(source)
|
50
|
-
source = source.respond_to?(:read) ? source.read : source.to_s
|
51
|
-
|
52
|
-
js = []
|
53
|
-
if @options.nil? then
|
54
|
-
js << "JSHINT(#{MultiJson.dump(source)});"
|
55
|
-
else
|
56
|
-
js << "JSHINT(#{MultiJson.dump(source)}, #{MultiJson.dump(@options)});"
|
57
|
-
end
|
58
|
-
js << "return JSHINT.errors;"
|
59
|
-
|
60
|
-
@context.exec js.join("\n")
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "execjs"
|
4
|
+
require "multi_json"
|
5
|
+
|
6
|
+
module Jshintrb
|
7
|
+
|
8
|
+
class Lint
|
9
|
+
Error = ExecJS::Error
|
10
|
+
|
11
|
+
# Default options for compilation
|
12
|
+
DEFAULTS = {
|
13
|
+
:bitwise => true,
|
14
|
+
:curly => true,
|
15
|
+
:eqeqeq => true,
|
16
|
+
:forin => true,
|
17
|
+
:immed => true,
|
18
|
+
:latedef => true,
|
19
|
+
:newcap => true,
|
20
|
+
:noarg => true,
|
21
|
+
:noempty => true,
|
22
|
+
:nonew => true,
|
23
|
+
:plusplus => true,
|
24
|
+
:regexp => true,
|
25
|
+
:undef => true,
|
26
|
+
:strict => true,
|
27
|
+
:trailing => true,
|
28
|
+
:browser => true
|
29
|
+
}
|
30
|
+
|
31
|
+
SourcePath = File.expand_path("../../js/jshint.js", __FILE__)
|
32
|
+
|
33
|
+
def initialize(options = nil)
|
34
|
+
|
35
|
+
if options == :defaults then
|
36
|
+
@options = DEFAULTS.dup
|
37
|
+
elsif options.instance_of? Hash then
|
38
|
+
@options = options.dup
|
39
|
+
# @options = DEFAULTS.merge(options)
|
40
|
+
elsif options.nil?
|
41
|
+
@options = nil
|
42
|
+
else
|
43
|
+
raise 'Unsupported option for Jshintrb: ' + options.to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
@context = ExecJS.compile(File.open(SourcePath, "r:UTF-8").read)
|
47
|
+
end
|
48
|
+
|
49
|
+
def lint(source)
|
50
|
+
source = source.respond_to?(:read) ? source.read : source.to_s
|
51
|
+
|
52
|
+
js = []
|
53
|
+
if @options.nil? then
|
54
|
+
js << "JSHINT(#{MultiJson.dump(source)});"
|
55
|
+
else
|
56
|
+
js << "JSHINT(#{MultiJson.dump(source)}, #{MultiJson.dump(@options)});"
|
57
|
+
end
|
58
|
+
js << "return JSHINT.errors;"
|
59
|
+
|
60
|
+
@context.exec js.join("\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -1,30 +1,30 @@
|
|
1
|
-
module Jshintrb
|
2
|
-
module Reporter
|
3
|
-
class Default
|
4
|
-
|
5
|
-
def format errors, file
|
6
|
-
result = ''
|
7
|
-
indent = ''
|
8
|
-
if file then
|
9
|
-
indent = ' '
|
10
|
-
end
|
11
|
-
|
12
|
-
errors.each do |error|
|
13
|
-
if error.nil? then
|
14
|
-
result += indent + 'fatal error'
|
15
|
-
else
|
16
|
-
result += indent + 'line ' + error["line"].to_s + ', col ' +
|
17
|
-
error["character"].to_s + ', ' + error["reason"].to_s + "\n"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
if file && result.size > 0 then
|
22
|
-
result = 'file: ' + file + "\n" + result
|
23
|
-
end
|
24
|
-
|
25
|
-
result
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
1
|
+
module Jshintrb
|
2
|
+
module Reporter
|
3
|
+
class Default
|
4
|
+
|
5
|
+
def format errors, file
|
6
|
+
result = ''
|
7
|
+
indent = ''
|
8
|
+
if file then
|
9
|
+
indent = ' '
|
10
|
+
end
|
11
|
+
|
12
|
+
errors.each do |error|
|
13
|
+
if error.nil? then
|
14
|
+
result += indent + 'fatal error'
|
15
|
+
else
|
16
|
+
result += indent + 'line ' + error["line"].to_s + ', col ' +
|
17
|
+
error["character"].to_s + ', ' + error["reason"].to_s + "\n"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if file && result.size > 0 then
|
22
|
+
result = 'file: ' + file + "\n" + result
|
23
|
+
end
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
30
|
end
|
data/lib/jshintrb/version.rb
CHANGED
data/lib/jshintrb.rb
CHANGED
File without changes
|
data/spec/jshintrb_spec.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require "jshintrb"
|
3
|
-
|
4
|
-
def gen_file source, option, value
|
5
|
-
"/*jshint " + option.to_s + ": " + value.to_s + "*/\n" + source
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "Jshintrb" do
|
9
|
-
|
10
|
-
it "support options" do
|
11
|
-
options = {
|
12
|
-
:bitwise => "var a = 1|1;",
|
13
|
-
:curly => "while (true)\n var a = 'a';",
|
1
|
+
# encoding: UTF-8
|
2
|
+
require "jshintrb"
|
3
|
+
|
4
|
+
def gen_file source, option, value
|
5
|
+
"/*jshint " + option.to_s + ": " + value.to_s + "*/\n" + source
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "Jshintrb" do
|
9
|
+
|
10
|
+
it "support options" do
|
11
|
+
options = {
|
12
|
+
:bitwise => "var a = 1|1;",
|
13
|
+
:curly => "while (true)\n var a = 'a';",
|
14
14
|
# :eqeqeq => true,
|
15
15
|
# :forin => true,
|
16
16
|
# :immed => true,
|
@@ -24,18 +24,18 @@ describe "Jshintrb" do
|
|
24
24
|
:undef => "if (a == 'a') { var b = 'b'; }"
|
25
25
|
# :strict => true,
|
26
26
|
# :trailing => true,
|
27
|
-
# :browser => true
|
28
|
-
}
|
29
|
-
|
30
|
-
options.each do |option, source|
|
31
|
-
Jshintrb.lint(source, option => false).length.should eq 0
|
32
|
-
Jshintrb.lint(source, option => true).length.should eq 1
|
33
|
-
end
|
34
|
-
|
35
|
-
options.each do |option, source|
|
36
|
-
Jshintrb.lint(gen_file(source, option, false)).length.should eq 0
|
37
|
-
Jshintrb.lint(gen_file(source, option, true)).length.should eq 1
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
27
|
+
# :browser => true
|
28
|
+
}
|
29
|
+
|
30
|
+
options.each do |option, source|
|
31
|
+
Jshintrb.lint(source, option => false).length.should eq 0
|
32
|
+
Jshintrb.lint(source, option => true).length.should eq 1
|
33
|
+
end
|
34
|
+
|
35
|
+
options.each do |option, source|
|
36
|
+
Jshintrb.lint(gen_file(source, option, false)).length.should eq 0
|
37
|
+
Jshintrb.lint(gen_file(source, option, true)).length.should eq 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
metadata
CHANGED
@@ -1,68 +1,98 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jshintrb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- stereobooster
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
|
17
|
+
date: 2012-05-07 00:00:00 +03:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: rspec
|
16
|
-
requirement: &
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: submodule
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
17
36
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
22
43
|
type: :development
|
23
44
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
26
47
|
name: rake
|
27
|
-
requirement: &
|
48
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
28
49
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
33
56
|
type: :runtime
|
34
57
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
37
60
|
name: multi_json
|
38
|
-
requirement: &
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
39
62
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 1
|
68
|
+
- 3
|
69
|
+
version: "1.3"
|
44
70
|
type: :runtime
|
45
71
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
72
|
+
version_requirements: *id004
|
73
|
+
- !ruby/object:Gem::Dependency
|
48
74
|
name: execjs
|
49
|
-
requirement: &
|
75
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
50
76
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
55
83
|
type: :runtime
|
56
84
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
description: Ruby wrapper for JSHint. The main difference from jshint gem it does
|
59
|
-
|
60
|
-
email:
|
85
|
+
version_requirements: *id005
|
86
|
+
description: Ruby wrapper for JSHint. The main difference from jshint gem it does not depend on Java. Instead, it uses ExecJS
|
87
|
+
email:
|
61
88
|
- stereobooster@gmail.com
|
62
89
|
executables: []
|
90
|
+
|
63
91
|
extensions: []
|
92
|
+
|
64
93
|
extra_rdoc_files: []
|
65
|
-
|
94
|
+
|
95
|
+
files:
|
66
96
|
- .gitignore
|
67
97
|
- .gitmodules
|
68
98
|
- .travis.yml
|
@@ -77,34 +107,39 @@ files:
|
|
77
107
|
- lib/jshintrb/reporter/default.rb
|
78
108
|
- lib/jshintrb/version.rb
|
79
109
|
- spec/jshintrb_spec.rb
|
110
|
+
has_rdoc: true
|
80
111
|
homepage: https://github.com/stereobooster/jshintrb
|
81
112
|
licenses: []
|
113
|
+
|
82
114
|
post_install_message:
|
83
115
|
rdoc_options: []
|
84
|
-
|
116
|
+
|
117
|
+
require_paths:
|
85
118
|
- lib
|
86
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
120
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
segments:
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
hash: -591355473
|
125
|
+
segments:
|
93
126
|
- 0
|
94
|
-
|
95
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
version: "0"
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
129
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
|
101
|
-
segments:
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
hash: -591355473
|
134
|
+
segments:
|
102
135
|
- 0
|
103
|
-
|
136
|
+
version: "0"
|
104
137
|
requirements: []
|
105
|
-
|
106
|
-
|
138
|
+
|
139
|
+
rubyforge_project:
|
140
|
+
rubygems_version: 1.3.7
|
107
141
|
signing_key:
|
108
142
|
specification_version: 3
|
109
143
|
summary: Ruby wrapper for JSHint
|
110
144
|
test_files: []
|
145
|
+
|