jslint-johnson 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -0
- data/Gemfile.lock +18 -0
- data/lib/jslint-johnson.rb +6 -0
- data/lib/jslint-johnson/formatter.rb +46 -0
- data/lib/jslint-johnson/lint_error.rb +14 -0
- data/lib/jslint-johnson/rake_task.rb +76 -0
- data/lib/jslint-johnson/runner.rb +83 -0
- data/lib/jslint-johnson/version.rb +11 -0
- metadata +31 -7
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.5.2)
|
6
|
+
bundler (~> 1.0.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
johnson (1.2.0)
|
10
|
+
rake (0.8.7)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
ruby
|
14
|
+
|
15
|
+
DEPENDENCIES
|
16
|
+
jeweler (~> 1.5.0)
|
17
|
+
johnson (~> 1.2.0)
|
18
|
+
rake (~> 0.8.7)
|
@@ -0,0 +1,6 @@
|
|
1
|
+
module JSLintJohnson end
|
2
|
+
|
3
|
+
require File.expand_path("jslint-johnson/runner", File.dirname(__FILE__))
|
4
|
+
require File.expand_path("jslint-johnson/lint_error", File.dirname(__FILE__))
|
5
|
+
require File.expand_path("jslint-johnson/rake_task", File.dirname(__FILE__))
|
6
|
+
require File.expand_path("jslint-johnson/formatter", File.dirname(__FILE__))
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
module JSLintJohnson
|
3
|
+
class Formatter
|
4
|
+
attr_reader :output_stream
|
5
|
+
|
6
|
+
def initialize(stream)
|
7
|
+
@output_stream = stream
|
8
|
+
end
|
9
|
+
|
10
|
+
def tick(errors)
|
11
|
+
output_stream.print(errors.any?? "*" : ".")
|
12
|
+
end
|
13
|
+
|
14
|
+
def summary(tested_files, lint_result)
|
15
|
+
if lint_result.keys.any?
|
16
|
+
print_error_summary(lint_result)
|
17
|
+
output_stream.print "\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
print_count_summary(tested_files, lint_result)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def print_error_summary(result)
|
25
|
+
out = output_stream
|
26
|
+
|
27
|
+
out.print "\nFailures:\n\n"
|
28
|
+
|
29
|
+
result.each do |file, errors|
|
30
|
+
out.print "#{file}:\n"
|
31
|
+
errors.each do |error|
|
32
|
+
out.print " line #{error.line_number} character #{error.character} #{error.reason}\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def print_count_summary(tested_files, lint_result)
|
38
|
+
file_count = tested_files.length
|
39
|
+
failure_count = lint_result.keys.length
|
40
|
+
error_count = lint_result.values.flatten.length
|
41
|
+
|
42
|
+
output_stream.print "#{file_count} files, #{failure_count} failures, #{error_count} errors\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
module JSLintJohnson
|
3
|
+
class LintError
|
4
|
+
attr_reader :line_number, :character, :reason, :evidence
|
5
|
+
|
6
|
+
def initialize(jsobject)
|
7
|
+
@line_number = jsobject["line"]
|
8
|
+
@character = jsobject["character"]
|
9
|
+
@reason = jsobject["reason"]
|
10
|
+
@evidence = jsobject["evidence"]
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
module JSLintJohnson
|
5
|
+
class RakeTask < ::Rake::TaskLib
|
6
|
+
# name of the rake task
|
7
|
+
attr_accessor :name
|
8
|
+
|
9
|
+
# description for the task
|
10
|
+
attr_accessor :description
|
11
|
+
|
12
|
+
# inclusion glob pattern for files
|
13
|
+
attr_accessor :include_pattern
|
14
|
+
|
15
|
+
# exclusion glob pattern for files
|
16
|
+
attr_accessor :exclude_pattern
|
17
|
+
|
18
|
+
# output stream for this task
|
19
|
+
attr_accessor :output_stream
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
# a default name
|
23
|
+
@name = "lint"
|
24
|
+
|
25
|
+
# a default description
|
26
|
+
@description = "Runs the JSLint Test Suite"
|
27
|
+
|
28
|
+
# by default a glob pattern that will include javascript files found in rails
|
29
|
+
@include_pattern = "app/javascripts/**/*.js"
|
30
|
+
|
31
|
+
# by default a glob pattern which will match no files
|
32
|
+
@exclude_pattern = ""
|
33
|
+
|
34
|
+
# by default use standard output for writing information
|
35
|
+
@output_stream = STDOUT
|
36
|
+
|
37
|
+
# if a block was given allow the block to call elements on this object
|
38
|
+
yield self if block_given?
|
39
|
+
|
40
|
+
# create the rake task
|
41
|
+
new_task = task(name) do
|
42
|
+
formatter = JSLintJohnson::Formatter.new(output_stream)
|
43
|
+
|
44
|
+
lint_result = runner.run do |file, errors|
|
45
|
+
formatter.tick(errors)
|
46
|
+
end
|
47
|
+
|
48
|
+
# put a separator line in between the ticks and any summary
|
49
|
+
output_stream.print "\n"
|
50
|
+
|
51
|
+
# print a summary of failed files
|
52
|
+
formatter.summary(files_to_run, lint_result)
|
53
|
+
end
|
54
|
+
|
55
|
+
# assign the description to the rake task
|
56
|
+
new_task.comment = description
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Returns a list of all files to run, sorted
|
61
|
+
#
|
62
|
+
def files_to_run
|
63
|
+
included_files = Dir.glob(include_pattern)
|
64
|
+
excluded_files = Dir.glob(exclude_pattern)
|
65
|
+
|
66
|
+
(included_files - excluded_files).sort
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def runner
|
72
|
+
JSLintJohnson::Runner.new(files_to_run)
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'johnson'
|
2
|
+
|
3
|
+
module JSLintJohnson
|
4
|
+
class Runner
|
5
|
+
JSLintLibraryFilename = File.expand_path("js/jslint.js", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
attr_reader :file_list
|
8
|
+
|
9
|
+
def initialize(files)
|
10
|
+
if(files.is_a?(Array))
|
11
|
+
@file_list = files
|
12
|
+
else
|
13
|
+
@file_list = [files]
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
# make sure all files exit
|
20
|
+
file_list.each do |file|
|
21
|
+
raise "file not found: #{file}" unless File.exist?(file)
|
22
|
+
end
|
23
|
+
|
24
|
+
result = {}
|
25
|
+
|
26
|
+
file_list.each do |file|
|
27
|
+
errors = jslint(File.read(file))
|
28
|
+
|
29
|
+
yield(file, errors) if block_given?
|
30
|
+
|
31
|
+
next if errors.empty?
|
32
|
+
|
33
|
+
result[file] = errors
|
34
|
+
end
|
35
|
+
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def runtime
|
40
|
+
@runtime ||= lambda do
|
41
|
+
runtime = Johnson::Runtime.new
|
42
|
+
|
43
|
+
# load the jslint library into the runtime
|
44
|
+
runtime.evaluate("eval(Ruby.File.read('#{JSLintLibraryFilename}'));")
|
45
|
+
|
46
|
+
# return the runtime
|
47
|
+
runtime
|
48
|
+
end.call
|
49
|
+
end
|
50
|
+
|
51
|
+
def jslint(source_code)
|
52
|
+
jslint_function.call(source_code, jslint_options)
|
53
|
+
jslint_result
|
54
|
+
end
|
55
|
+
|
56
|
+
def jslint_function
|
57
|
+
runtime["JSLINT"];
|
58
|
+
end
|
59
|
+
|
60
|
+
def jslint_result
|
61
|
+
runtime["JSLINT"]["errors"].to_a.map do |error_object|
|
62
|
+
JSLintJohnson::LintError.new(error_object)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def jslint_options
|
67
|
+
{
|
68
|
+
"bitwise" => true,
|
69
|
+
"eqeqeq" => true,
|
70
|
+
"immed" => true,
|
71
|
+
"newcap" => true,
|
72
|
+
"nomen" => true,
|
73
|
+
"onevar" => true,
|
74
|
+
"plusplus" => true,
|
75
|
+
"regexp" => true,
|
76
|
+
"rhino" => true,
|
77
|
+
"undef" => true,
|
78
|
+
"white" => true
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jslint-johnson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- William Howard
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-29 00:00:00 +02:00
|
19
19
|
default_executable: jslint-johnson
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -51,9 +51,25 @@ dependencies:
|
|
51
51
|
type: :runtime
|
52
52
|
version_requirements: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: jeweler
|
55
55
|
prerelease: false
|
56
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 5
|
65
|
+
- 0
|
66
|
+
version: 1.5.0
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: johnson
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
57
73
|
none: false
|
58
74
|
requirements:
|
59
75
|
- - ~>
|
@@ -65,7 +81,7 @@ dependencies:
|
|
65
81
|
- 0
|
66
82
|
version: 1.2.0
|
67
83
|
type: :runtime
|
68
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
69
85
|
description: " - Ruby gem wrapper for a JSLint CLI.\n - Uses the Johnson library for performance.\n - Targeted for usage in CI environments.\n - Thoroughly tested.\n"
|
70
86
|
email: whoward.tke@gmail.com
|
71
87
|
executables:
|
@@ -75,6 +91,15 @@ extensions: []
|
|
75
91
|
extra_rdoc_files: []
|
76
92
|
|
77
93
|
files:
|
94
|
+
- Gemfile
|
95
|
+
- Gemfile.lock
|
96
|
+
- bin/jslint-johnson
|
97
|
+
- lib/jslint-johnson.rb
|
98
|
+
- lib/jslint-johnson/formatter.rb
|
99
|
+
- lib/jslint-johnson/lint_error.rb
|
100
|
+
- lib/jslint-johnson/rake_task.rb
|
101
|
+
- lib/jslint-johnson/runner.rb
|
102
|
+
- lib/jslint-johnson/version.rb
|
78
103
|
- test/helper.rb
|
79
104
|
- test/suite.rb
|
80
105
|
- test/test_cli.rb
|
@@ -82,7 +107,6 @@ files:
|
|
82
107
|
- test/test_lint_error.rb
|
83
108
|
- test/test_runner.rb
|
84
109
|
- test/test_task.rb
|
85
|
-
- bin/jslint-johnson
|
86
110
|
has_rdoc: true
|
87
111
|
homepage: http://github.com/whoward/jslint-johnson
|
88
112
|
licenses: []
|