jslint-v8 1.0.1 → 1.1.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/Gemfile.lock CHANGED
@@ -1,16 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jslint-v8 (1.0.0)
4
+ jslint-v8 (1.1.0)
5
5
  therubyracer (~> 0.9.4)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- libv8 (3.3.10.2)
11
- rake (0.9.2)
12
- test-unit (2.3.2)
13
- therubyracer (0.9.4)
10
+ libv8 (3.3.10.4)
11
+ rake (0.9.2.2)
12
+ test-unit (2.4.5)
13
+ therubyracer (0.9.9)
14
14
  libv8 (~> 3.3.10)
15
15
 
16
16
  PLATFORMS
data/README.markdown CHANGED
@@ -1 +1,51 @@
1
1
  [![Build Status](https://secure.travis-ci.org/whoward/jslint-v8.png)](http://travis-ci.org/whoward/jslint-v8)
2
+
3
+ # Description
4
+
5
+ JSLintV8 is simply a ruby wrapper that helps you run JSLint as an automated
6
+ code quality standards tool inside your projects. It's geared towards being run
7
+ in a continuous integration process (CI), such as Jenkins.
8
+
9
+ While it is focused on Ruby projects it can just as easily be used for any other
10
+ language out there so long as you have Ruby installed on your system.
11
+
12
+ Like it's name implies we run JSLint on the JavaScript V8 interpreter so, in
13
+ other words, it runs really really fast.
14
+
15
+ # How to use
16
+
17
+ 1. Make sure you have Ruby and Rubygems installed on your computer (most operating systems except for Windows have this already)
18
+
19
+ 2. In your console run: ```gem install jslint-v8```
20
+
21
+ 3. Run the following command ```jslint-v8 path/to/file.js```
22
+
23
+ For full details on using the command line interface simply type ```jslint-v8```
24
+
25
+ # Rake Task
26
+
27
+ In addition to the CLI you can also set up a Rake task to automatically run against
28
+ a set of files. Inside your Rakefile add the following:
29
+
30
+ ```ruby
31
+ require 'rake'
32
+ require 'jslint-v8'
33
+
34
+ namespace :js do
35
+ JSLintV8::RakeTask.new do |task|
36
+ task.name = "lint"
37
+ task.include_pattern = "app/javascripts/**/*.js"
38
+ task.exclude_pattern = "app/javascripts/{generated,lib}/**/*.js"
39
+ end
40
+ end
41
+ ```
42
+
43
+ Modify the settings as needed. This code will make a task "js:lint" which will
44
+ run against all javascript files under ```app/javascripts``` except under
45
+ ```app/javascripts/lib``` and ```app/javascripts/generated```
46
+
47
+ # Contributing
48
+
49
+ Whatever works, but my preference is for you to fork this repository on github
50
+ and write your changes on a separate branch. When finished you can send them
51
+ to me by issuing a pull request.
data/bin/jslint-v8 CHANGED
@@ -2,15 +2,39 @@
2
2
  require 'rubygems'
3
3
  require File.expand_path("../lib/jslint-v8", File.dirname(__FILE__))
4
4
 
5
- if ARGV.empty?
6
- puts "usage: #{File.basename(__FILE__)} FILES"
7
- exit 1
5
+ def print_usage
6
+ STDERR.puts JSLintV8::OptionParser.new.help
7
+ exit(255)
8
8
  end
9
9
 
10
+ # if no parameters are passed then print usage and exit
11
+ print_usage if ARGV.empty?
12
+
13
+ # parse the options out of the command line
14
+ begin
15
+ parser = JSLintV8::OptionParser.new
16
+ parser.parse!
17
+ rescue SystemExit => e
18
+ # exit with a failing status code, happens with the -h and -v options
19
+ exit(255)
20
+ rescue Exception => e
21
+ # print out an error message and exit with a failing exit code
22
+ STDERR.puts "#{$0}: #{e.message} (#{e.class.to_s})"
23
+ exit(255)
24
+ end
25
+
26
+ # if no parameters are left (nothing beyond options given) then print usage and exit
27
+ print_usage if ARGV.empty?
28
+
29
+ # set up a formatter for standard output
10
30
  formatter = JSLintV8::Formatter.new(STDOUT)
11
31
 
32
+ # set up a runner
33
+ runner = JSLintV8::Runner.new(ARGV)
34
+ runner.jslint_options.merge!(parser.options[:lint_options])
35
+
12
36
  # get a list of all failed files, printing . or * along the way depending on the result
13
- lint_result = JSLintV8::Runner.new(ARGV).run do |file, errors|
37
+ lint_result = runner.run do |file, errors|
14
38
  formatter.tick(errors)
15
39
  end
16
40
 
data/lib/jslint-v8.rb CHANGED
@@ -3,4 +3,6 @@ module JSLintV8 end
3
3
  require File.expand_path("jslint-v8/runner", File.dirname(__FILE__))
4
4
  require File.expand_path("jslint-v8/rake_task", File.dirname(__FILE__))
5
5
  require File.expand_path("jslint-v8/lint_error", File.dirname(__FILE__))
6
- require File.expand_path("jslint-v8/formatter", File.dirname(__FILE__))
6
+ require File.expand_path("jslint-v8/formatter", File.dirname(__FILE__))
7
+ require File.expand_path("jslint-v8/option_parser", File.dirname(__FILE__))
8
+ require File.expand_path("jslint-v8/version", File.dirname(__FILE__))
@@ -27,7 +27,11 @@ module JSLintV8
27
27
 
28
28
  out.print "\nFailures:\n\n"
29
29
 
30
- result.each do |file, errors|
30
+ # we iterate the sorted keys to prevent a brittle test and also the output
31
+ # should be nicer as it will be guaranteed to be alphabetized
32
+ result.keys.sort.each do |file|
33
+ errors = result[file]
34
+
31
35
  out.print "#{file}:\n"
32
36
  errors.each do |error|
33
37
  out.print " line #{error.line_number} character #{error.character} #{error.reason}\n"
@@ -0,0 +1,39 @@
1
+ require 'optparse'
2
+
3
+ module JSLintV8
4
+ class OptionParser < ::OptionParser
5
+
6
+ attr_reader :options
7
+
8
+ def initialize
9
+ super
10
+
11
+ @options = {}
12
+ @options[:lint_options] = {}
13
+
14
+ self.version = JSLintV8::Version::STRING
15
+ self.banner = "#{self.banner} <filepattern>..."
16
+
17
+ Runner::DefaultOptions.keys.each do |option|
18
+ default = Runner::DefaultOptions[option] ? "on" : "off"
19
+
20
+ long = "--[no-]#{option}"
21
+ desc = "#{Runner::OptionDescriptions[option]} (default=#{default})"
22
+
23
+ on(long, desc) do |value|
24
+ options[:lint_options][option] = value
25
+ end
26
+ end
27
+
28
+ on("-h", "--help", "Show this message") do
29
+ STDERR.puts self.help
30
+ exit(-1)
31
+ end
32
+
33
+ on("-v", "--version", "Show version") do
34
+ STDERR.puts "#{self.program_name} version #{JSLintV8::Version::STRING}"
35
+ exit(-1)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -18,6 +18,15 @@ module JSLintV8
18
18
  # output stream for this task
19
19
  attr_accessor :output_stream
20
20
 
21
+ # custom lint options for the task
22
+ attr_accessor :lint_options
23
+
24
+ # metaprogrammatically define accessors for each lint option expected
25
+ Runner::DefaultOptions.keys.each do |key|
26
+ define_method(key) { lint_options[key] }
27
+ define_method("#{key}=") {|value| lint_options[key] = value }
28
+ end
29
+
21
30
  def initialize
22
31
  # a default name
23
32
  @name = "lint"
@@ -34,6 +43,9 @@ module JSLintV8
34
43
  # by default use standard output for writing information
35
44
  @output_stream = STDOUT
36
45
 
46
+ # by default provide no overridden lint options
47
+ @lint_options = {}
48
+
37
49
  # if a block was given allow the block to call elements on this object
38
50
  yield self if block_given?
39
51
 
@@ -72,7 +84,9 @@ module JSLintV8
72
84
  private
73
85
 
74
86
  def runner
75
- JSLintV8::Runner.new(files_to_run)
87
+ runner = JSLintV8::Runner.new(files_to_run)
88
+ runner.jslint_options.merge!(lint_options)
89
+ runner
76
90
  end
77
91
 
78
92
  end
@@ -4,6 +4,100 @@ module JSLintV8
4
4
  class Runner
5
5
  JSLintLibraryFilename = File.expand_path("js/jslint.js", File.dirname(__FILE__))
6
6
 
7
+ DefaultOptions = {
8
+ "asi" => false,
9
+ "bitwise" => true,
10
+ "boss" => false,
11
+ "browser" => false,
12
+ "couch" => false,
13
+ "curly" => false,
14
+ "debug" => false,
15
+ "devel" => false,
16
+ "dojo" => false,
17
+ "eqeqeq" => true,
18
+ "eqnull" => false,
19
+ "es5" => false,
20
+ "evil" => false,
21
+ "expr" => false,
22
+ "forin" => false,
23
+ "globalstrict" => false,
24
+ "immed" => true,
25
+ "jquery" => false,
26
+ "latedef" => false,
27
+ "laxbreak" => false,
28
+ "loopfunc" => false,
29
+ "mootools" => false,
30
+ "newcap" => true,
31
+ "noarg" => false,
32
+ "node" => false,
33
+ "noempty" => false,
34
+ "nonew" => false,
35
+ "nomen" => true,
36
+ "onevar" => true,
37
+ "passfail" => false,
38
+ "plusplus" => true,
39
+ "prototypejs" => false,
40
+ "regexdash" => false,
41
+ "regexp" => true,
42
+ "rhino" => false,
43
+ "undef" => true,
44
+ "scripturl" => false,
45
+ "shadow" => false,
46
+ "strict" => false,
47
+ "sub" => false,
48
+ "supernew" => false,
49
+ "trailing" => false,
50
+ "white" => false,
51
+ "wsh" => false
52
+ }.freeze
53
+
54
+ OptionDescriptions = {
55
+ "asi" => "if automatic semicolon insertion should be tolerated",
56
+ "bitwise" => "if bitwise operators should not be allowed",
57
+ "boss" => "if advanced usage of assignments should be allowed",
58
+ "browser" => "if the standard browser globals should be predefined",
59
+ "couch" => "if CouchDB globals should be predefined",
60
+ "curly" => "if curly braces around blocks should be required (even in if/for/while)",
61
+ "debug" => "if debugger statements should be allowed",
62
+ "devel" => "if logging globals should be predefined (console, alert, etc.)",
63
+ "dojo" => "if Dojo Toolkit globals should be predefined",
64
+ "eqeqeq" => "if === should be required",
65
+ "eqnull" => "if == null comparisons should be tolerated",
66
+ "es5" => "if ES5 syntax should be allowed",
67
+ "evil" => "if eval should be allowed",
68
+ "expr" => "if ExpressionStatement should be allowed as Programs",
69
+ "forin" => "if for in statements must filter",
70
+ "globalstrict" => "if global \"use strict\"; should be allowed (also enables 'strict')",
71
+ "immed" => "if immediate invocations must be wrapped in parens",
72
+ "jquery" => "if jQuery globals should be predefined",
73
+ "latedef" => "if the use before definition should not be tolerated",
74
+ "laxbreak" => "if line breaks should not be checked",
75
+ "loopfunc" => "if functions should be allowed to be defined within loops",
76
+ "mootools" => "if MooTools globals should be predefined",
77
+ "newcap" => "if constructor names must be capitalized",
78
+ "noarg" => "if arguments.caller and arguments.callee should be disallowed",
79
+ "node" => "if the Node.js environment globals should be predefined",
80
+ "noempty" => "if empty blocks should be disallowed",
81
+ "nonew" => "if using `new` for side-effects should be disallowed",
82
+ "nomen" => "if names should be checked",
83
+ "onevar" => "if only one var statement per function should be allowed",
84
+ "passfail" => "if the scan should stop on first error",
85
+ "plusplus" => "if increment/decrement should not be allowed",
86
+ "prototypejs" => "if Prototype and Scriptaculous globals should be predefined",
87
+ "regexdash" => "if unescaped last dash (-) inside brackets should be tolerated",
88
+ "regexp" => "if the . should not be allowed in regexp literals",
89
+ "rhino" => "if the Rhino environment globals should be predefined",
90
+ "undef" => "if variables should be declared before used",
91
+ "scripturl" => "if script-targeted URLs should be tolerated",
92
+ "shadow" => "if variable shadowing should be tolerated",
93
+ "strict" => "require the \"use strict\"; pragma",
94
+ "sub" => "if all forms of subscript notation are tolerated",
95
+ "supernew" => "if `new function () { ... };` and `new Object;` should be tolerated",
96
+ "trailing" => "if trailing whitespace rules apply",
97
+ "white" => "if strict whitespace rules apply",
98
+ "wsh" => "if the Windows Scripting Host environment globals should be predefined",
99
+ }.freeze
100
+
7
101
  attr_reader :file_list
8
102
 
9
103
  def initialize(files)
@@ -63,19 +157,7 @@ module JSLintV8
63
157
  end
64
158
 
65
159
  def jslint_options
66
- {
67
- "bitwise" => true,
68
- "eqeqeq" => true,
69
- "immed" => true,
70
- "newcap" => true,
71
- "nomen" => true,
72
- "onevar" => true,
73
- "plusplus" => true,
74
- "regexp" => true,
75
- "rhino" => true,
76
- "undef" => true,
77
- "white" => true
78
- }
160
+ @jslint_options ||= DefaultOptions.dup
79
161
  end
80
162
 
81
163
  end
@@ -2,8 +2,8 @@
2
2
  module JSLintV8
3
3
  module Version
4
4
  MAJOR = 1
5
- MINOR = 0
6
- PATCH = 1
5
+ MINOR = 1
6
+ PATCH = 0
7
7
  BUILD = nil
8
8
 
9
9
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
data/test/test_cli.rb CHANGED
@@ -9,10 +9,35 @@ class TestCli < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  def test_empty_args
12
- result = `#{Executable}`
12
+ # capture standard error by redirecting it to standard out
13
+ result = `#{Executable} 2>&1`
13
14
 
14
- assert_equal "usage: jslint-v8 FILES\n", result
15
- assert_equal false, $?.success?
15
+ assert_match /^Usage/, result
16
+ assert_equal 255, $?.exitstatus
17
+ end
18
+
19
+ def test_version_output
20
+ # capture standard error by redirecting it to standard out
21
+ result = `#{Executable} -v 2>&1`
22
+
23
+ assert_equal erb_fixture("version-output"), result
24
+ assert_equal 255, $?.exitstatus
25
+ end
26
+
27
+ def test_help_output
28
+ # capture standard error by redirecting it to standard out
29
+ result = `#{Executable} -h foo.js bar.js baz.js 2>&1`
30
+
31
+ assert_match /^Usage/, result
32
+ assert_equal 255, $?.exitstatus
33
+ end
34
+
35
+ def test_only_options_given
36
+ # capture standard error by redirecting it to standard out
37
+ result = `#{Executable} --browser --jquery 2>&1`
38
+
39
+ assert_match /^Usage/, result
40
+ assert_equal 255, $?.exitstatus
16
41
  end
17
42
 
18
43
  def test_valid
data/test/test_runner.rb CHANGED
@@ -43,6 +43,17 @@ class TestRunner < Test::Unit::TestCase
43
43
  assert_equal @runner.runtime.object_id, first.object_id
44
44
  end
45
45
 
46
+ def test_overrideable_options
47
+ # have same values as default options
48
+ assert_equal @runner.jslint_options, JSLintV8::Runner::DefaultOptions
49
+
50
+ # but not be the options
51
+ assert_not_equal @runner.jslint_options.object_id, JSLintV8::Runner::DefaultOptions.object_id
52
+
53
+ # but be memoized
54
+ assert_equal @runner.jslint_options.object_id, @runner.jslint_options.object_id
55
+ end
56
+
46
57
  def test_jslint_function_proxy
47
58
  assert_not_nil @runner.jslint_function
48
59
  end
data/test/test_task.rb CHANGED
@@ -52,23 +52,38 @@ class TestTask < Test::Unit::TestCase
52
52
  assert_equal STDOUT, task.output_stream
53
53
  end
54
54
 
55
+ def test_default_lint_options
56
+ task = JSLintV8::RakeTask.new
57
+
58
+ assert_equal({}, task.lint_options)
59
+ end
60
+
55
61
  def test_creation_block
56
62
  tempfile = Tempfile.new("foo")
57
63
 
58
64
  task = JSLintV8::RakeTask.new do |task|
59
65
  task.name = "foo"
66
+
60
67
  task.description = "Points out the bad codezzzz"
68
+
61
69
  task.include_pattern = "js/**/*.js"
62
70
  task.exclude_pattern = "js/**/*.txt"
71
+
63
72
  task.output_stream = tempfile
73
+
74
+ task.browser = true
75
+ task.strict = true
64
76
  end
65
77
 
66
78
  rake_task = Rake.application.lookup("foo")
67
79
 
80
+ expected_options = {"browser" => true, "strict" => true}
81
+
68
82
  assert_equal "foo", rake_task.name
69
83
  assert_equal "Points out the bad codezzzz", rake_task.comment
70
84
  assert_equal "js/**/*.js", task.include_pattern
71
85
  assert_equal "js/**/*.txt", task.exclude_pattern
86
+ assert_equal expected_options, task.lint_options
72
87
  assert_equal tempfile.object_id, task.output_stream.object_id
73
88
  end
74
89
 
@@ -83,6 +98,19 @@ class TestTask < Test::Unit::TestCase
83
98
  assert_equal expected_files, task.files_to_run
84
99
  end
85
100
 
101
+ def test_custom_lint_options
102
+ task = JSLintV8::RakeTask.new do |task|
103
+ task.browser = true
104
+ task.evil = true
105
+ end
106
+
107
+ runner = task.send(:runner)
108
+
109
+ assert_equal true, runner.jslint_options["browser"]
110
+ assert_equal true, runner.jslint_options["evil"]
111
+ assert_equal false, runner.jslint_options["rhino"]
112
+ end
113
+
86
114
  def test_valid_output
87
115
  result = String.new
88
116
 
metadata CHANGED
@@ -1,131 +1,107 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jslint-v8
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - William Howard
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-08-31 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-02-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: therubyracer
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &71601450 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 51
29
- segments:
30
- - 0
31
- - 9
32
- - 4
20
+ - !ruby/object:Gem::Version
33
21
  version: 0.9.4
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rake
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *71601450
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &71601100 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
48
33
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: test-unit
52
34
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *71601100
36
+ - !ruby/object:Gem::Dependency
37
+ name: test-unit
38
+ requirement: &71600860 !ruby/object:Gem::Requirement
54
39
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
62
44
  type: :development
63
- version_requirements: *id003
64
- description: Ruby gem wrapper for a jslint cli. Uses the The Ruby Racer library for performance reasons targeted for usage in CI environments and backed up with a full test suite.
45
+ prerelease: false
46
+ version_requirements: *71600860
47
+ description: Ruby gem wrapper for a jslint cli. Uses the The Ruby Racer library for
48
+ performance reasons targeted for usage in CI environments and backed up with a full
49
+ test suite.
65
50
  email: whoward.tke@gmail.com
66
- executables:
51
+ executables:
67
52
  - jslint-v8
68
53
  extensions: []
69
-
70
- extra_rdoc_files:
54
+ extra_rdoc_files:
71
55
  - README.markdown
72
- files:
56
+ files:
73
57
  - lib/jslint-v8/formatter.rb
74
- - lib/jslint-v8/runner.rb
75
58
  - lib/jslint-v8/rake_task.rb
76
- - lib/jslint-v8/lint_error.rb
77
59
  - lib/jslint-v8/version.rb
60
+ - lib/jslint-v8/runner.rb
61
+ - lib/jslint-v8/option_parser.rb
62
+ - lib/jslint-v8/lint_error.rb
78
63
  - lib/jslint-v8.rb
79
64
  - lib/jslint-v8/js/jslint.js
80
65
  - Gemfile
81
66
  - Gemfile.lock
82
67
  - bin/jslint-v8
83
68
  - README.markdown
84
- - test/test_task.rb
85
- - test/test_lint_error.rb
86
- - test/helper.rb
87
69
  - test/test_runner.rb
88
- - test/suite.rb
89
- - test/test_formatter.rb
90
70
  - test/test_cli.rb
71
+ - test/helper.rb
72
+ - test/test_formatter.rb
73
+ - test/test_task.rb
74
+ - test/suite.rb
75
+ - test/test_lint_error.rb
91
76
  homepage: http://github.com/whoward/jslint-v8
92
77
  licenses: []
93
-
94
78
  post_install_message:
95
79
  rdoc_options: []
96
-
97
- require_paths:
80
+ require_paths:
98
81
  - lib
99
- required_ruby_version: !ruby/object:Gem::Requirement
82
+ required_ruby_version: !ruby/object:Gem::Requirement
100
83
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
106
- - 0
107
- version: "0"
108
- required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
89
  none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- hash: 3
114
- segments:
115
- - 0
116
- version: "0"
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
117
94
  requirements: []
118
-
119
95
  rubyforge_project:
120
- rubygems_version: 1.8.6
96
+ rubygems_version: 1.8.10
121
97
  signing_key:
122
98
  specification_version: 3
123
99
  summary: JSLint CLI and rake tasks via therubyracer (JavaScript V8 gem)
124
- test_files:
125
- - test/test_task.rb
126
- - test/test_lint_error.rb
127
- - test/helper.rb
100
+ test_files:
128
101
  - test/test_runner.rb
129
- - test/suite.rb
130
- - test/test_formatter.rb
131
102
  - test/test_cli.rb
103
+ - test/helper.rb
104
+ - test/test_formatter.rb
105
+ - test/test_task.rb
106
+ - test/suite.rb
107
+ - test/test_lint_error.rb