jslint-rb 0.1

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.
@@ -0,0 +1,74 @@
1
+ module JslintRb
2
+ ##
3
+ #Not sure what to call this class, but it basically parses
4
+ #the commandline args and puts them in instance vars. pass -h to
5
+ #see a list of valid command line opts
6
+ class OptionParser
7
+ require 'optparse'
8
+
9
+ attr_reader :options
10
+ attr_reader :filename
11
+
12
+ ##
13
+ #These are just some defaults that I wanted.
14
+ #Part of the fun in writing software is imposing your
15
+ #opinions on people.
16
+ DEFAULT_OPT =
17
+ { white: false,
18
+ undef: true,
19
+ bitwise: true,
20
+ onevar: true,
21
+ curly: true,
22
+ latedef: true,
23
+ newcap: true,
24
+ noarg: true,
25
+ trailing: true,
26
+ eqeqeq: true,
27
+ eqnull: true
28
+ }
29
+
30
+ def initialize
31
+ @filename = ARGV[0]
32
+
33
+ @options = {
34
+ #Location of the jslint.js file
35
+ lint_location: File.expand_path("js/jshint.js", File.dirname(__FILE__)),
36
+ #tempfile location; make sure it's writable by your user
37
+ temp_file: 'jslint_wrap.tmp',
38
+ #this is passed to JSLint so that it will not falsely call
39
+ #an undefined error on them
40
+ global_vars: "Ext,console,Compass,currentUser",
41
+ #A hash of JSHINT options
42
+ lint_options: {}
43
+ #default_options: ['white: false', 'nomen: false', 'undef: true']
44
+ }
45
+
46
+ ARGV.options do |opt|
47
+ opt.banner = "Usage: jslint-rb [FILENAME] [OPTIONS]"
48
+
49
+ opt.on('-o', "--options ['OPTIONNAME : VALUE',]", Array,
50
+ "List of JsHint options. "\
51
+ "Passing default : true will "\
52
+ "enable default options") do |options|
53
+
54
+ options.each do |lint_opt|
55
+ key,value = lint_opt.split(':')
56
+ if key == 'default'
57
+ @options[:lint_options].merge!(DEFAULT_OPT)
58
+ else
59
+ @options[:lint_options][key] = value
60
+ end
61
+ end
62
+ end
63
+
64
+ opt.on_tail("-h", "--help", 'Show this message') do
65
+ puts opt
66
+ exit
67
+ end
68
+ opt.parse!
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,40 @@
1
+ module JslintRb
2
+ ##
3
+ #The main ruby file that you call to run JSLint
4
+ #It is setup with some default options, that you will
5
+ #have to edit the class to override. Once I turn this
6
+ #into a gem, you'll be able to set these by config file
7
+ #or command line options.
8
+ class Runner
9
+ require 'execjs'
10
+ require 'multi_json'
11
+
12
+ def initialize(filename, options)
13
+ @filename = filename
14
+ @config = options
15
+ end
16
+
17
+ def execute
18
+ set_globals
19
+ context = ExecJS.compile(File.read(@config[:lint_location]))
20
+ output = context.exec("JSHINT(#{MultiJson.dump(File.read(@config[:temp_file]))},"\
21
+ "#{MultiJson.dump(@config[:lint_options])});"\
22
+ "return JSHINT.errors")
23
+ output.compact.map {|x| JslintRb::Error.new(x) }
24
+ end
25
+
26
+ ##
27
+ #This prepends a list of globals to the file you're working on.
28
+ #Saves it off to the location defined by @config[:temp_file]
29
+ def set_globals
30
+ f = File.open(@filename, 'r')
31
+ contents = "/*global #{@config[:global_vars]} */ #{f.read}"
32
+ f.close
33
+
34
+ tmp_file_handle = File.open(@config[:temp_file], "w")
35
+ tmp_file_handle.write(contents)
36
+ tmp_file_handle.close()
37
+ end
38
+
39
+ end#Runner
40
+ end#JslintRb
data/lib/jslint-rb.rb ADDED
@@ -0,0 +1,8 @@
1
+ module JslintRb end
2
+
3
+ #require "jslint-rb/runner"
4
+ require File.expand_path("jslint-rb/runner", File.dirname(__FILE__))
5
+ require File.expand_path("jslint-rb/formatter", File.dirname(__FILE__))
6
+ require File.expand_path("jslint-rb/option_parser", File.dirname(__FILE__))
7
+ require File.expand_path("jslint-rb/error", File.dirname(__FILE__))
8
+
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jslint-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Brodt
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: execjs
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.3.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: multi_json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.3.6
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.6
46
+ description: Ruby wrapper for JSHint, using execJS
47
+ email: chris@uberbrodt.net
48
+ executables:
49
+ - jslint-rb
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - bin/jslint-rb
54
+ - lib/jslint-rb/runner.rb
55
+ - lib/jslint-rb/error.rb
56
+ - lib/jslint-rb/option_parser.rb
57
+ - lib/jslint-rb/js/jslint.js
58
+ - lib/jslint-rb/js/jshint.js
59
+ - lib/jslint-rb/formatter.rb
60
+ - lib/jslint-rb.rb
61
+ - README
62
+ - GPL-3-LICENSE
63
+ homepage: https://github.com/uberbrodt/jslint-rb
64
+ licenses: []
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 1.8.23
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Ruby wrapper to run and format JSLint, using execJS
87
+ test_files: []