roger_jshint 0.0.2 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 173aefd6d7edd876af67a041bbe007a505f26519
4
- data.tar.gz: 87c805c257ed31095a847af6596c9ad6d1a78791
3
+ metadata.gz: 831b789d136a29882a93611f9b681b2969c1e4b7
4
+ data.tar.gz: 18a9adf0b8b9f8a202235539116086b76fa7d88f
5
5
  SHA512:
6
- metadata.gz: 7505cad99b8b2c88085c7d3bb843af5dde840e87d80eea935409050facbf223bd672b67d183494f0ce9ced312b2b9d699bf83001d7b082174ff81ce69b71620f
7
- data.tar.gz: 365153eb8ab08abca4e8d5d61295c4854139b7db992bac137e4f32d368abb1d18e522aaf71988818684a9e6bbcf6f58809fa8237293071ea9134e457acecd668
6
+ metadata.gz: 34f1c96665169c62f181330510cb51c4a28ab758ddde4f6d3aabefe0a5290cdae07330963a2d4cab5905f416f2c1363df1d7a10f6a37f89ecf64d0e5b586ce76
7
+ data.tar.gz: bdc7d1e2ede0c399d3f41fa495485fffa19e77e09f171889ce6db3c5661b385a8c2443cf9183c9d8628854dec6320baccfba51500efcfca560b105c4c22f58f6
data/.gitignore CHANGED
@@ -26,7 +26,7 @@ build/
26
26
 
27
27
  # for a library or gem, you might want to ignore these files since the code is
28
28
  # intended to run in multiple environments; otherwise, check them in:
29
- # Gemfile.lock
29
+ Gemfile.lock
30
30
  # .ruby-version
31
31
  # .ruby-gemset
32
32
 
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ LineLength:
2
+ Max: 100
3
+
4
+ Style/HashSyntax:
5
+ Enabled:
6
+ False
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.1.5
5
+ - 2.2.0
6
+ before_script:
7
+ - npm install jshint
8
+ - cp ./test/jshintrc .jshintrc
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  roger_jshint
2
2
  ============
3
+ [![Build Status](https://travis-ci.org/hkrutzer/roger_jshint.svg?branch=master)](https://travis-ci.org/hkrutzer/roger_jshint)
3
4
 
4
5
  Lint JavaScript files from within Roger. This plugin uses [jshint](https://github.com/jshint/jshint). If present, .jshintrc in your project will be used. If not, jshint will walk the directory tree upwards until a .jshintrc file is found. As a last resort, [jshint's default configuration](https://raw.githubusercontent.com/jshint/jshint/master/examples/.jshintrc) is used.
5
6
 
@@ -22,4 +23,4 @@ Execute ```roger test jshint```.
22
23
 
23
24
  ## License
24
25
 
25
- This project is released under the [MIT license](LICENSE).
26
+ This project is released under the [MIT license](LICENSE).
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require 'rake/testtask'
2
+ require 'rubocop/rake_task'
3
+
4
+ task :default => [:test, :rubocop]
5
+
6
+ desc 'Run rubocop'
7
+ task :rubocop do
8
+ RuboCop::RakeTask.new
9
+ end
10
+
11
+ Rake::TestTask.new do |t|
12
+ t.libs << 'test'
13
+ t.test_files = FileList['test/**/*_test.rb']
14
+ t.verbose = true
15
+ end
@@ -1,28 +1,29 @@
1
+ require 'shellwords'
1
2
  require 'json'
2
3
  require 'roger/test'
3
4
 
4
5
  module RogerJsHint
5
6
  # JS linter plugin for Roger
6
7
  class Lint
7
- JSHINT = 'jshint'
8
- JSHINT_COMMAND = "#{JSHINT} --reporter=" +
9
- File.expand_path('jsonreporter.js', File.dirname(__FILE__)) + ' '
10
-
11
8
  # @param [Hash] options The options
12
9
  # @option options [Array] :match Files to match
13
- # @option options [Array[Regexp]] :skip An array of file regular expressions to specifiy which files to skip.
10
+ # @option options [Array[Regexp]] :skip Array of regular expressions to skip files
11
+ # @option options [Array] :jshint Jshint command
14
12
  def initialize(options = {})
15
13
  @options = {
16
14
  :match => ['html/**/*.js'],
17
- :skip => []
15
+ :skip => [],
16
+ :jshint => 'jshint'
18
17
  }
19
18
  @options.update(options) if options
19
+
20
+ @jshint_command = "#{@options[:jshint]} --reporter=" +
21
+ File.expand_path('jsonreporter.js', File.dirname(__FILE__)) + ' '
20
22
  end
21
23
 
22
24
  def detect_jshint
23
- `#{JSHINT} -v`
24
- rescue Errno::ENOENT
25
- raise 'Could not find jshint. Install jshint using npm.'
25
+ detect = system(format('%s -v 2>/dev/null', Shellwords.escape(@options[:jshint])))
26
+ fail 'Could not find jshint. Install jshint using npm.' unless detect
26
27
  end
27
28
 
28
29
  def report(test, file_path, lints)
@@ -31,9 +32,7 @@ module RogerJsHint
31
32
  test.log(self, "No erors in #{file_path}")
32
33
  else
33
34
  lints.each do |lint|
34
- test.log(self,
35
- "#{lint[0]}:#{lint[1]} " \
36
- "#{lint[2]}: #{lint[3]}")
35
+ test.log(self, "#{lint[0]}:#{lint[1]} #{lint[2]}: #{lint[3]}")
37
36
  end
38
37
  success = false
39
38
  end
@@ -42,7 +41,7 @@ module RogerJsHint
42
41
 
43
42
  # @param [Hash] options The options
44
43
  # @option options [Array] :match Files to match
45
- # @option options [Array[Regexp]] :skip An array of file regular expressions to specifiy which files to skip.
44
+ # @option options [Array[Regexp]] :skip Array of regular expressions to skip files
46
45
  def call(test, options)
47
46
  options = {}.update(@options).update(options)
48
47
 
@@ -50,13 +49,10 @@ module RogerJsHint
50
49
  test.log(self, 'JS-linting files')
51
50
 
52
51
  test.get_files(options[:match], options[:skip]).each do |file_path|
53
- output = `#{JSHINT_COMMAND} #{file_path}`
54
- if output.start_with? 'ERROR'
55
- fail "Could not load file #{file_path}"
56
- else
57
- lint = JSON.parse output
58
- report(test, file_path, lint)
59
- end
52
+ execute = @jshint_command + ' ' + Shellwords.escape(file_path)
53
+ output = `#{execute}`
54
+ lint = JSON.parse output
55
+ report(test, file_path, lint)
60
56
  end
61
57
  end
62
58
  end
data/lib/roger_jshint.rb CHANGED
@@ -1,3 +1,5 @@
1
- module RogerJsHint; end
1
+ # JS hint plugin
2
+ module RogerJsHint
3
+ end
2
4
 
3
5
  require File.dirname(__FILE__) + '/roger_jshint/lint'
data/roger_jshint.gemspec CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.authors = ['Hans Krutzer']
5
5
  s.email = ['info@digitpaint.nl', 'hans@digitpaint.nl']
6
6
  s.name = 'roger_jshint'
7
- s.version = '0.0.2'
7
+ s.version = '0.1.0'
8
8
  s.homepage = 'https://github.com/hkrutzer/roger_scsslinter'
9
9
 
10
10
  s.summary = 'Lint JavaScript files within Roger'
@@ -20,4 +20,8 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ['lib']
21
21
 
22
22
  s.add_dependency 'roger', '~> 0.13', '>= 0.13.0'
23
+
24
+ s.add_development_dependency 'rubocop', ['>= 0']
25
+ s.add_development_dependency 'rake', ['>= 0']
26
+ s.add_development_dependency 'test-unit', ['>= 0']
23
27
  end
data/test/jshintrc ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ /*
3
+ * ENVIRONMENTS
4
+ * =================
5
+ */
6
+
7
+ // Define globals exposed by modern browsers.
8
+ "browser": true,
9
+
10
+ // Define globals exposed by jQuery.
11
+ "jquery": true,
12
+
13
+ // Define globals exposed by Node.js.
14
+ "node": true,
15
+
16
+ // Placeholder for your own predefs
17
+ "predef": [],
18
+
19
+ /*
20
+ * ENFORCING OPTIONS
21
+ * =================
22
+ */
23
+
24
+ // Force all variable names to use either camelCase style or UPPER_CASE
25
+ // with underscores.
26
+ "camelcase": true,
27
+
28
+ // Prohibit use of == and != in favor of === and !==.
29
+ "eqeqeq": true,
30
+
31
+ // Suppress warnings about == null comparisons.
32
+ "eqnull": true,
33
+
34
+ // Enforce tab width of 2 spaces.
35
+ "indent": 2,
36
+
37
+ // Prohibit use of a variable before it is defined.
38
+ "latedef": true,
39
+
40
+ // Require capitalized names for constructor functions.
41
+ "newcap": true,
42
+
43
+ // Enforce use of single quotation marks for strings.
44
+ "quotmark": "single",
45
+
46
+ // Prohibit trailing whitespace.
47
+ "trailing": true,
48
+
49
+ // Prohibit use of explicitly undeclared variables.
50
+ "undef": true,
51
+
52
+ // Warn when variables are defined but never used.
53
+ "unused": true,
54
+
55
+ // Enforce line length to 100 characters
56
+ "maxlen": 100,
57
+
58
+ // Enforce placing 'use strict' at the top function scope
59
+ "strict": true,
60
+
61
+ // Extra options by Digitpaint
62
+
63
+ // Always put curly braces around blocks in loops and conditionals
64
+ "curly": true,
65
+
66
+ // Prohibits the use of arguments.caller and arguments.callee
67
+ "noarg": true,
68
+
69
+ // Supress warnings about mixed tabs/spaces when used for alignment.
70
+ "smarttabs" : true,
71
+
72
+ // Prohibit use of constructors for side-effects.
73
+ "nonew": true,
74
+
75
+ // Allow the use of ++ and --
76
+ "plusplus" : false,
77
+
78
+ // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.
79
+ "subsub": false,
80
+
81
+ /*
82
+ * OPTIONAL OPTIONS
83
+ * =================
84
+ */
85
+
86
+ // Do not allow bitwise operations
87
+ "bitwise": true
88
+ }
89
+
data/test/lint_test.rb ADDED
@@ -0,0 +1,38 @@
1
+ require_relative '../lib/roger_jshint/lint.rb'
2
+ require 'test/unit'
3
+
4
+ # Fake tester to pass into the linter plugin
5
+ class TesterStub
6
+ attr_reader :messages
7
+
8
+ def initialize
9
+ @messages = []
10
+ end
11
+
12
+ def log(_, message)
13
+ @messages.push(message)
14
+ end
15
+
16
+ def get_files(_, _)
17
+ ['test/test.js']
18
+ end
19
+ end
20
+
21
+ # Linting plugin unit test
22
+ class LintTest < Test::Unit::TestCase
23
+ def test_lint
24
+ faketester = TesterStub.new
25
+
26
+ linter = RogerJsHint::Lint.new
27
+ linter.call(faketester, {})
28
+
29
+ messages = faketester.messages
30
+ messages.shift
31
+
32
+ assert_equal(messages,
33
+ ["test/test.js:0 0: Bad option: 'subsub'.",
34
+ "test/test.js:1 1: 'x' is not defined.",
35
+ "test/test.js:2 1: 'alert' is not defined.",
36
+ "test/test.js:2 7: 'x' is not defined."])
37
+ end
38
+ end
data/test/test.js ADDED
@@ -0,0 +1,2 @@
1
+ x = 5;
2
+ alert(x);
metadata CHANGED
@@ -1,35 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roger_jshint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hans Krutzer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roger
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.13'
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.13.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.13'
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.13.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rubocop
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: test-unit
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
33
75
  description: |2
34
76
  Lint JavaScript files from within Roger, using jshint.
35
77
  Will use .jshintrc.
@@ -40,13 +82,20 @@ executables: []
40
82
  extensions: []
41
83
  extra_rdoc_files: []
42
84
  files:
43
- - .gitignore
85
+ - ".gitignore"
86
+ - ".rubocop.yml"
87
+ - ".travis.yml"
88
+ - Gemfile
44
89
  - LICENSE
45
90
  - README.md
91
+ - Rakefile
46
92
  - lib/roger_jshint.rb
47
93
  - lib/roger_jshint/jsonreporter.js
48
94
  - lib/roger_jshint/lint.rb
49
95
  - roger_jshint.gemspec
96
+ - test/jshintrc
97
+ - test/lint_test.rb
98
+ - test/test.js
50
99
  homepage: https://github.com/hkrutzer/roger_scsslinter
51
100
  licenses:
52
101
  - MIT
@@ -57,17 +106,17 @@ require_paths:
57
106
  - lib
58
107
  required_ruby_version: !ruby/object:Gem::Requirement
59
108
  requirements:
60
- - - '>='
109
+ - - ">="
61
110
  - !ruby/object:Gem::Version
62
111
  version: '0'
63
112
  required_rubygems_version: !ruby/object:Gem::Requirement
64
113
  requirements:
65
- - - '>='
114
+ - - ">="
66
115
  - !ruby/object:Gem::Version
67
116
  version: '0'
68
117
  requirements: []
69
118
  rubyforge_project:
70
- rubygems_version: 2.0.14
119
+ rubygems_version: 2.2.2
71
120
  signing_key:
72
121
  specification_version: 4
73
122
  summary: Lint JavaScript files within Roger