jslint-rb 0.1 → 0.5
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/README.md +40 -0
- data/bin/jslint-rb +1 -1
- data/lib/jslint-rb/error.rb +1 -0
- data/lib/jslint-rb/formatter.rb +7 -2
- data/lib/jslint-rb/option_parser.rb +67 -12
- data/lib/jslint-rb/runner.rb +4 -3
- metadata +11 -8
- data/README +0 -37
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#Jslint-rb
|
2
|
+
Borne out of a set of Python/Bash scripts I had lugged around for several years. Decided
|
3
|
+
to turn into an actual program instead of setting it up on yet another machine.
|
4
|
+
|
5
|
+
###Features:
|
6
|
+
* Converted to ruby for easy portability
|
7
|
+
* Using ExecJS, so no dependency on a particular JS runtime
|
8
|
+
* You can specify a list of globals at the commandline (config file in the future)
|
9
|
+
instead of having to update your source code files with ugly /*global x,y,z */
|
10
|
+
declarations
|
11
|
+
* will also be able to configure multiple formatters easily for use in different environments
|
12
|
+
(VIM, RubyMine, Continuous Integration, etc)
|
13
|
+
|
14
|
+
###Examples:
|
15
|
+
|
16
|
+
Install the gem and a js runtime
|
17
|
+
```bash
|
18
|
+
gem install jslint-rb
|
19
|
+
gem install therubyracer
|
20
|
+
```
|
21
|
+
|
22
|
+
Setup a config file in your $HOME directory, named .jslint-rb. Then put the following in there
|
23
|
+
|
24
|
+
```yaml
|
25
|
+
global_vars:
|
26
|
+
- default:true
|
27
|
+
formatter_proc: VIM
|
28
|
+
lint_options:
|
29
|
+
- default:true
|
30
|
+
```
|
31
|
+
You should be all set to start linting your Javascript! Output will be to STDOUT
|
32
|
+
|
33
|
+
```bash
|
34
|
+
jslint-rb foo.js
|
35
|
+
```
|
36
|
+
|
37
|
+
####TODO:
|
38
|
+
|
39
|
+
1. Make a task to pull the latest version of JSHint
|
40
|
+
2. Test with MacVim and Windows
|
data/bin/jslint-rb
CHANGED
@@ -8,6 +8,6 @@ config = JslintRb::OptionParser.new
|
|
8
8
|
instance = JslintRb::Runner.new(config.filename, config.options)
|
9
9
|
output = instance.execute
|
10
10
|
|
11
|
-
formatter = JslintRb::Formatter.new(
|
11
|
+
formatter = JslintRb::Formatter.new(config.options[:formatter_proc])
|
12
12
|
|
13
13
|
formatter.print(output, config.filename)
|
data/lib/jslint-rb/error.rb
CHANGED
data/lib/jslint-rb/formatter.rb
CHANGED
@@ -12,13 +12,18 @@ module JslintRb
|
|
12
12
|
VIM = Proc.new do |errors, filename|
|
13
13
|
results = []
|
14
14
|
errors.each do |error|
|
15
|
-
|
16
|
-
|
15
|
+
fmt_err = "#{filename}:#{error.line_number}:"\
|
16
|
+
"#{error.character}:#{error.reason}"
|
17
|
+
fmt_err << " | #{error.evidence}" unless error.evidence.nil?
|
18
|
+
results << fmt_err
|
17
19
|
end
|
18
20
|
results
|
19
21
|
end
|
20
22
|
|
21
23
|
def initialize(formatter)
|
24
|
+
if formatter.nil?
|
25
|
+
puts 'Please enter a formatter class'
|
26
|
+
end
|
22
27
|
@command = formatter
|
23
28
|
end
|
24
29
|
|
@@ -5,6 +5,7 @@ module JslintRb
|
|
5
5
|
#see a list of valid command line opts
|
6
6
|
class OptionParser
|
7
7
|
require 'optparse'
|
8
|
+
require 'yaml'
|
8
9
|
|
9
10
|
attr_reader :options
|
10
11
|
attr_reader :filename
|
@@ -27,6 +28,14 @@ module JslintRb
|
|
27
28
|
eqnull: true
|
28
29
|
}
|
29
30
|
|
31
|
+
DEFAULT_GLOBALS = {
|
32
|
+
Ext: true,
|
33
|
+
console: true,
|
34
|
+
Compass: true,
|
35
|
+
currentUser: true
|
36
|
+
}
|
37
|
+
|
38
|
+
|
30
39
|
def initialize
|
31
40
|
@filename = ARGV[0]
|
32
41
|
|
@@ -37,12 +46,55 @@ module JslintRb
|
|
37
46
|
temp_file: 'jslint_wrap.tmp',
|
38
47
|
#this is passed to JSLint so that it will not falsely call
|
39
48
|
#an undefined error on them
|
40
|
-
global_vars:
|
49
|
+
global_vars: {},
|
41
50
|
#A hash of JSHINT options
|
42
|
-
lint_options: {}
|
43
|
-
#
|
51
|
+
lint_options: {},
|
52
|
+
#Formatter proc to use
|
53
|
+
formatter_proc: nil
|
44
54
|
}
|
45
55
|
|
56
|
+
parse_config_file
|
57
|
+
parse_cmdline_args
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_globals globals
|
61
|
+
globals.each do |global|
|
62
|
+
key,value = global.split(':')
|
63
|
+
if key == 'default'
|
64
|
+
@options[:global_vars].merge!(DEFAULT_GLOBALS)
|
65
|
+
else
|
66
|
+
@options[:global_vars][key] = value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_lint_configs options
|
72
|
+
options.each do |lint_opt|
|
73
|
+
key,value = lint_opt.split(':')
|
74
|
+
if key == 'default'
|
75
|
+
@options[:lint_options].merge!(DEFAULT_OPT)
|
76
|
+
else
|
77
|
+
@options[:lint_options][key] = value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_formatter_constant constant
|
83
|
+
@options[:formatter_proc] = eval('JslintRb::Formatter::'<< constant)
|
84
|
+
end
|
85
|
+
|
86
|
+
def parse_config_file
|
87
|
+
config_file = File.read(File.join(ENV['HOME'],'.jslint-rb')) rescue nil
|
88
|
+
return if config_file.nil?
|
89
|
+
config = YAML::load(config_file)
|
90
|
+
return if config == false
|
91
|
+
load_globals config['global_vars'] unless config['global_vars'].nil?
|
92
|
+
load_lint_configs config['lint_options'] unless config['lint_options'].nil?
|
93
|
+
get_formatter_constant config['formatter_proc'] unless config['formatter_proc'].nil?
|
94
|
+
end
|
95
|
+
|
96
|
+
def parse_cmdline_args
|
97
|
+
|
46
98
|
ARGV.options do |opt|
|
47
99
|
opt.banner = "Usage: jslint-rb [FILENAME] [OPTIONS]"
|
48
100
|
|
@@ -50,15 +102,19 @@ module JslintRb
|
|
50
102
|
"List of JsHint options. "\
|
51
103
|
"Passing default : true will "\
|
52
104
|
"enable default options") do |options|
|
105
|
+
load_lint_configs options
|
106
|
+
end
|
53
107
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
108
|
+
opt.on('-g', "--globals ['GLOBALVAR' : BOOL]", Array,
|
109
|
+
"array of globals. Set them to true to allow them to be overridden") do |options|
|
110
|
+
load_globals options
|
111
|
+
end
|
112
|
+
|
113
|
+
opt.on('-f', "--format FORMAT", String,
|
114
|
+
"The string constant for the Formatter proc:
|
115
|
+
VIM -- format for VIM make errorformat"
|
116
|
+
) do |option|
|
117
|
+
get_formatter_constant option
|
62
118
|
end
|
63
119
|
|
64
120
|
opt.on_tail("-h", "--help", 'Show this message') do
|
@@ -67,7 +123,6 @@ module JslintRb
|
|
67
123
|
end
|
68
124
|
opt.parse!
|
69
125
|
end
|
70
|
-
|
71
126
|
end
|
72
127
|
|
73
128
|
end
|
data/lib/jslint-rb/runner.rb
CHANGED
@@ -15,10 +15,11 @@ module JslintRb
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def execute
|
18
|
-
set_globals
|
18
|
+
#set_globals
|
19
19
|
context = ExecJS.compile(File.read(@config[:lint_location]))
|
20
|
-
output = context.exec("JSHINT(#{MultiJson.dump(File.read(@
|
21
|
-
"#{MultiJson.dump(@config[:lint_options])}
|
20
|
+
output = context.exec("JSHINT(#{MultiJson.dump(File.read(@filename))},"\
|
21
|
+
"#{MultiJson.dump(@config[:lint_options])},"\
|
22
|
+
"#{MultiJson.dump(@config[:global_vars])});"\
|
22
23
|
"return JSHINT.errors")
|
23
24
|
output.compact.map {|x| JslintRb::Error.new(x) }
|
24
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jslint-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.5'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.3.2
|
22
22
|
type: :runtime
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 1.3.2
|
30
30
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 1.3.6
|
38
38
|
type: :runtime
|
@@ -40,10 +40,13 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 1.3.6
|
46
|
-
description: Ruby wrapper
|
46
|
+
description: Ruby wrapper to run and format JSHint, using execJS. It supports commandline
|
47
|
+
arguments or a YAML config file to specify global variables and JSHint configs.
|
48
|
+
JavaScript runtime independent so you can start linting without the hassle, on Linux,
|
49
|
+
Windows, or Mac
|
47
50
|
email: chris@uberbrodt.net
|
48
51
|
executables:
|
49
52
|
- jslint-rb
|
@@ -58,7 +61,7 @@ files:
|
|
58
61
|
- lib/jslint-rb/js/jshint.js
|
59
62
|
- lib/jslint-rb/formatter.rb
|
60
63
|
- lib/jslint-rb.rb
|
61
|
-
- README
|
64
|
+
- README.md
|
62
65
|
- GPL-3-LICENSE
|
63
66
|
homepage: https://github.com/uberbrodt/jslint-rb
|
64
67
|
licenses: []
|
@@ -83,5 +86,5 @@ rubyforge_project:
|
|
83
86
|
rubygems_version: 1.8.23
|
84
87
|
signing_key:
|
85
88
|
specification_version: 3
|
86
|
-
summary: Ruby wrapper to run and format
|
89
|
+
summary: Ruby wrapper to run and format JSHint, using execJS.
|
87
90
|
test_files: []
|
data/README
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
Borne out of a set of Python/Bash scripts I had lugged around for several years. Decided
|
2
|
-
to turn into an actual program instead of setting it up on yet another machine.
|
3
|
-
|
4
|
-
Features:
|
5
|
-
* Converted to ruby for easy portability
|
6
|
-
* Using ExecJS, so no dependency on a particular JS runtime
|
7
|
-
* You can specify a list of globals at the commandline (config file in the future)
|
8
|
-
instead of having to update your source code files with ugly /*global x,y,z */
|
9
|
-
declarations
|
10
|
-
* will also be able to configure multiple formatters easily for use in different environments
|
11
|
-
(VIM, RubyMine, Continuous Integration, etc)
|
12
|
-
|
13
|
-
UPDATE June 15th 2012:
|
14
|
-
|
15
|
-
Got ExecJS integrated, and enabled the formatting so it will work with VIM.
|
16
|
-
Also converted to using JSHint instead of JSLint. General refactoring as well,
|
17
|
-
but should be good enough for a general beta release
|
18
|
-
|
19
|
-
UPDATE June 6th 2012:
|
20
|
-
|
21
|
-
Created a ruby version of this script. Can be used like this:
|
22
|
-
|
23
|
-
jslint foo.js [OPTIONS]
|
24
|
-
|
25
|
-
requires ruby 1.9.x
|
26
|
-
|
27
|
-
This version is missing the pretty formatting for use with VIM/Emacs, but that should be added
|
28
|
-
soon.
|
29
|
-
|
30
|
-
TODO:
|
31
|
-
|
32
|
-
1. Make a task to pull the latest version of JSHint
|
33
|
-
2. Test with MacVim
|
34
|
-
3. Allow the specification of formatters at the command line
|
35
|
-
4. Allow the spec of Globals from the commandline
|
36
|
-
5. Allow configuration via a YAML file in the users home directory, so that you
|
37
|
-
don't have to input the same commandline options each time
|