Class: Jshintrb::Lint

Inherits:
Object
  • Object
show all
Defined in:
lib/jshintrb/lint.rb

Constant Summary collapse

Error =
ExecJS::Error
DEFAULTS =

Default options for compilation

{
  :bitwise => true,
  :curly => true,
  :eqeqeq => true,
  :forin => true,
  :immed => true,
  :latedef => true,
  :newcap => true,
  :noarg => true,
  :noempty => true,
  :nonew => true,
  :plusplus => true,
  :regexp => true,
  :undef => true,
  :strict => true,
  :trailing => true,
  :browser => true
}
SourcePath =
File.expand_path("../../js/jshint.js", __FILE__)

Instance Method Summary collapse

Constructor Details

#initialize(options = nil, globals = nil) ⇒ Lint

Returns a new instance of Lint.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/jshintrb/lint.rb', line 33

def initialize(options = nil, globals = nil)

  if options == :defaults then
    @options = DEFAULTS.dup
  elsif options.instance_of? Hash then
    @options = options.dup
    # @options = DEFAULTS.merge(options)
  elsif options.nil?
    @options = nil
  else
    raise 'Unsupported option for Jshintrb: ' + options.to_s
  end

  @globals = globals

  @context = ExecJS.compile(File.open(SourcePath, "r:UTF-8").read)
end

Instance Method Details

#lint(source) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/jshintrb/lint.rb', line 51

def lint(source)
  source = source.respond_to?(:read) ? source.read : source.to_s

  js = []
  if @options.nil? and @globals.nil? then
    js << "JSHINT(#{MultiJson.dump(source)});"
  elsif @globals.nil? then
    js << "JSHINT(#{MultiJson.dump(source)}, #{MultiJson.dump(@options)});"
  else
    globals_hash = Hash[*@globals.product([false]).flatten]
    js << "JSHINT(#{MultiJson.dump(source)}, #{MultiJson.dump(@options)}, #{MultiJson.dump(globals_hash)});"
  end
  js << "return JSHINT.errors;"

  @context.exec js.join("\n")
end