jsonlint 0.2.0 → 0.4.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 +5 -5
- data/.github/workflows/ruby.yml +38 -0
- data/README.md +13 -2
- data/jsonlint.gemspec +9 -9
- data/lib/jsonlint/cli.rb +3 -3
- data/lib/jsonlint/linter.rb +6 -1
- data/lib/jsonlint/rake_task.rb +19 -2
- data/lib/jsonlint/version.rb +1 -1
- data/spec/cli_spec.rb +5 -5
- data/spec/data/serialised.json +1 -0
- data/spec/linter_spec.rb +6 -0
- data/spec/spec_helper.rb +1 -1
- metadata +25 -25
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 7f90b077d96d488246693d4e290cda456d87811fc15eeace4b44550b0f2e6928
|
|
4
|
+
data.tar.gz: 0dee5476a67f9e9f64b9bbdd2ed884d0825359782c8d54a5996c735a1a00bbab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a1f4395ee50f30488fe8327dcafcf9a3a00853c23725602d2667841b2842364113f5f5731901a5e13ceb93b938754c2137103d74563db35525caa863c68510fb
|
|
7
|
+
data.tar.gz: c2cbe22002cc5eba2bf7cd5a08d17ba1f9a2316910ed0e5bf52200abcdd7c4c769536492179206269bf9822abd8501cc820e68383f192307dcfc986054fe505b
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Ruby
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ "master" ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ "master" ]
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
strategy:
|
|
24
|
+
matrix:
|
|
25
|
+
ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v3
|
|
29
|
+
- name: Set up Ruby
|
|
30
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
31
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
32
|
+
# uses: ruby/setup-ruby@v1
|
|
33
|
+
uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
|
|
34
|
+
with:
|
|
35
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
36
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: bundle exec rake
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# jsonlint
|
|
2
2
|
|
|
3
|
-
[](https://github.com/dougbarth/jsonlint/actions/workflows/ruby.yml)
|
|
4
4
|
[](https://rubygems.org/gems/jsonlint)
|
|
5
5
|
|
|
6
6
|
jsonlint checks your JSON files for syntax errors or silly mistakes. Currently it checks for:
|
|
@@ -65,9 +65,20 @@ spec/data/overlapping_keys.json
|
|
|
65
65
|
The same key is defined twice: foo
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
+
### Rake task options
|
|
69
|
+
|
|
70
|
+
Add these options similarly to the path option seen above.
|
|
71
|
+
|
|
72
|
+
| Option | Description | Default |
|
|
73
|
+
| ------------- | ------------- | ------------- |
|
|
74
|
+
| `exclude_paths` | List of files or paths to exclude from linting | `nil` |
|
|
75
|
+
| `fail_on_error` | Continue on to the next rake task when false and don't fail even if JsonLint finds errors | `true` |
|
|
76
|
+
| `log_level` | Logger level (DEBUG, INFO, WARN, ERROR, FATAL, or UNKNOWN) | `INFO` |
|
|
77
|
+
| `paths` | List of files or paths to lint | `nil` |
|
|
78
|
+
|
|
68
79
|
## Contributing
|
|
69
80
|
|
|
70
|
-
1. Fork it ( https://github.com/
|
|
81
|
+
1. Fork it ( https://github.com/dougbarth/jsonlint/fork )
|
|
71
82
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
72
83
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
73
84
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/jsonlint.gemspec
CHANGED
|
@@ -6,22 +6,22 @@ require 'jsonlint/version'
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "jsonlint"
|
|
8
8
|
spec.version = JsonLint::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
9
|
+
spec.authors = ['Doug Barth']
|
|
10
|
+
spec.email = ['dougbarth@gmail.com']
|
|
11
11
|
spec.summary = %q{JSON lint checker}
|
|
12
12
|
spec.description = %q{Checks JSON files for correct syntax and no silly mistakes}
|
|
13
|
-
spec.license =
|
|
13
|
+
spec.license = 'MIT'
|
|
14
14
|
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
18
|
spec.require_paths = ["lib"]
|
|
19
19
|
|
|
20
|
-
spec.add_dependency 'oj', '~>
|
|
21
|
-
spec.add_dependency '
|
|
20
|
+
spec.add_dependency 'oj', '~> 3'
|
|
21
|
+
spec.add_dependency 'optimist', '~> 3'
|
|
22
22
|
|
|
23
|
-
spec.add_development_dependency
|
|
24
|
-
spec.add_development_dependency
|
|
25
|
-
spec.add_development_dependency
|
|
26
|
-
spec.add_development_dependency
|
|
23
|
+
spec.add_development_dependency 'bundler', '~> 2'
|
|
24
|
+
spec.add_development_dependency 'rake', '~> 13'
|
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.8'
|
|
26
|
+
spec.add_development_dependency 'aruba', '~> 2'
|
|
27
27
|
end
|
data/lib/jsonlint/cli.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'optimist'
|
|
2
2
|
|
|
3
3
|
module JsonLint
|
|
4
4
|
class CLI
|
|
@@ -11,7 +11,7 @@ module JsonLint
|
|
|
11
11
|
|
|
12
12
|
files_to_check = @argv
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Optimist::die 'need at least one JSON file to check' if files_to_check.empty?
|
|
15
15
|
|
|
16
16
|
linter = JsonLint::Linter.new
|
|
17
17
|
begin
|
|
@@ -36,7 +36,7 @@ module JsonLint
|
|
|
36
36
|
private
|
|
37
37
|
|
|
38
38
|
def parse_options
|
|
39
|
-
@opts =
|
|
39
|
+
@opts = Optimist.options(@argv) do
|
|
40
40
|
banner 'Usage: jsonlint [options] file1.json [file2.json ...]'
|
|
41
41
|
version(JsonLint::VERSION)
|
|
42
42
|
banner ''
|
data/lib/jsonlint/linter.rb
CHANGED
|
@@ -42,6 +42,11 @@ module JsonLint
|
|
|
42
42
|
!errors.empty?
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
# Return the number of lint errors found
|
|
46
|
+
def errors_count
|
|
47
|
+
errors.length
|
|
48
|
+
end
|
|
49
|
+
|
|
45
50
|
def display_errors
|
|
46
51
|
errors.each do |path, errors|
|
|
47
52
|
puts path
|
|
@@ -74,7 +79,7 @@ module JsonLint
|
|
|
74
79
|
end
|
|
75
80
|
|
|
76
81
|
def check_syntax_valid?(json_data, errors_array)
|
|
77
|
-
Oj.load(json_data, nilnil: false)
|
|
82
|
+
Oj.load(json_data, nilnil: false, mode: :strict)
|
|
78
83
|
true
|
|
79
84
|
rescue Oj::ParseError => e
|
|
80
85
|
errors_array << e.message
|
data/lib/jsonlint/rake_task.rb
CHANGED
|
@@ -7,9 +7,14 @@ module JsonLint
|
|
|
7
7
|
class RakeTask < Rake::TaskLib
|
|
8
8
|
attr_accessor :name
|
|
9
9
|
attr_accessor :paths
|
|
10
|
+
attr_accessor :exclude_paths
|
|
11
|
+
attr_accessor :fail_on_error
|
|
12
|
+
attr_accessor :log_level
|
|
10
13
|
|
|
11
14
|
def initialize(name = :jsonlint)
|
|
12
15
|
@name = name
|
|
16
|
+
@exclude_paths = []
|
|
17
|
+
@fail_on_error = true
|
|
13
18
|
|
|
14
19
|
yield self if block_given?
|
|
15
20
|
|
|
@@ -22,14 +27,26 @@ module JsonLint
|
|
|
22
27
|
desc 'Run jsonlint' unless ::Rake.application.last_description
|
|
23
28
|
|
|
24
29
|
task(name) do
|
|
25
|
-
|
|
30
|
+
puts 'Running JsonLint...'
|
|
31
|
+
|
|
32
|
+
JsonLint.logger.level = Logger.const_get(log_level) if log_level
|
|
33
|
+
|
|
34
|
+
files_to_check_raw = Rake::FileList.new(paths)
|
|
35
|
+
files_to_exclude = Rake::FileList.new(exclude_paths)
|
|
36
|
+
files_to_check = files_to_check_raw.exclude(files_to_exclude)
|
|
37
|
+
|
|
38
|
+
puts "Checking #{files_to_check.flatten.length} files"
|
|
39
|
+
puts "Excluding #{files_to_exclude.flatten.length} files"
|
|
26
40
|
|
|
27
41
|
linter = ::JsonLint::Linter.new
|
|
28
42
|
linter.check_all(files_to_check)
|
|
29
43
|
|
|
30
44
|
if linter.errors?
|
|
31
45
|
linter.display_errors
|
|
32
|
-
|
|
46
|
+
puts "JSON lint found #{linter.errors_count} errors"
|
|
47
|
+
abort('JsonLint failed!') if fail_on_error
|
|
48
|
+
else
|
|
49
|
+
puts 'JsonLint found no errors'
|
|
33
50
|
end
|
|
34
51
|
end
|
|
35
52
|
end
|
data/lib/jsonlint/version.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
|
@@ -48,9 +48,9 @@ describe 'jsonlint' do
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
it 'should fail with a path that is unreadable' do
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
run_command_and_stop('mkdir -p tmp')
|
|
52
|
+
run_command_and_stop('touch tmp/unreadable_file.json')
|
|
53
|
+
run_command_and_stop('chmod -r tmp/unreadable_file.json')
|
|
54
54
|
|
|
55
55
|
jsonlint 'tmp/unreadable_file.json'
|
|
56
56
|
expect(last_command_started).to_not be_successfully_executed
|
|
@@ -58,13 +58,13 @@ describe 'jsonlint' do
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
it 'should be able to lint good JSON from STDIN' do
|
|
61
|
-
|
|
61
|
+
run_command "#{jsonlint_bin} -"
|
|
62
62
|
pipe_in_file('../../spec/data/valid.json') and close_input
|
|
63
63
|
expect(last_command_started).to be_successfully_executed
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
it 'should be able to lint bad JSON from STDIN' do
|
|
67
|
-
|
|
67
|
+
run_command "#{jsonlint_bin} -"
|
|
68
68
|
pipe_in_file('../../spec/data/missing_comma.json') and close_input
|
|
69
69
|
expect(last_command_started).to_not be_successfully_executed
|
|
70
70
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"^o":"SerialisationTestWhichDefinitelyDoesNotExist"}
|
data/spec/linter_spec.rb
CHANGED
|
@@ -12,10 +12,12 @@ describe 'JsonLint::Linter' do
|
|
|
12
12
|
expect(linter.check(spec_data('valid.json'))).to be(true)
|
|
13
13
|
expect(linter.check(spec_data('valid_array_of_objects.json'))).to be(true)
|
|
14
14
|
expect(linter.check(spec_data('valid_array_of_arrays.json'))).to be(true)
|
|
15
|
+
expect(linter.errors_count).to eq(0)
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
it 'should be unhappy with an invalid JSON file' do
|
|
18
19
|
expect(linter.check(spec_data('missing_comma.json'))).to be(false)
|
|
20
|
+
expect(linter.errors_count).to eq(1)
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
it 'should be unhappy with JSON that has overlapping keys' do
|
|
@@ -38,4 +40,8 @@ describe 'JsonLint::Linter' do
|
|
|
38
40
|
it 'should be unhapy with a JSON file full of spaces' do
|
|
39
41
|
expect(linter.check(spec_data('lots_of_spaces.json'))).to be(false)
|
|
40
42
|
end
|
|
43
|
+
|
|
44
|
+
it 'should not deserialise objects' do
|
|
45
|
+
expect(linter.check(spec_data('serialised.json'))).to be(true)
|
|
46
|
+
end
|
|
41
47
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jsonlint
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Doug Barth
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-04-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: oj
|
|
@@ -16,84 +16,84 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '3'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '3'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: optimist
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '3'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '3'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '2'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '2'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rake
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '13'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '13'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rspec
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
75
|
+
version: '3.8'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
82
|
+
version: '3.8'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: aruba
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - "
|
|
87
|
+
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
89
|
+
version: '2'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - "
|
|
94
|
+
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
96
|
+
version: '2'
|
|
97
97
|
description: Checks JSON files for correct syntax and no silly mistakes
|
|
98
98
|
email:
|
|
99
99
|
- dougbarth@gmail.com
|
|
@@ -102,8 +102,8 @@ executables:
|
|
|
102
102
|
extensions: []
|
|
103
103
|
extra_rdoc_files: []
|
|
104
104
|
files:
|
|
105
|
+
- ".github/workflows/ruby.yml"
|
|
105
106
|
- ".gitignore"
|
|
106
|
-
- ".travis.yml"
|
|
107
107
|
- Gemfile
|
|
108
108
|
- LICENSE.txt
|
|
109
109
|
- README.md
|
|
@@ -123,6 +123,7 @@ files:
|
|
|
123
123
|
- spec/data/missing_brace.json
|
|
124
124
|
- spec/data/missing_comma.json
|
|
125
125
|
- spec/data/overlapping_keys.json
|
|
126
|
+
- spec/data/serialised.json
|
|
126
127
|
- spec/data/valid.json
|
|
127
128
|
- spec/data/valid_array_of_arrays.json
|
|
128
129
|
- spec/data/valid_array_of_objects.json
|
|
@@ -147,8 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
147
148
|
- !ruby/object:Gem::Version
|
|
148
149
|
version: '0'
|
|
149
150
|
requirements: []
|
|
150
|
-
|
|
151
|
-
rubygems_version: 2.5.1
|
|
151
|
+
rubygems_version: 3.0.3.1
|
|
152
152
|
signing_key:
|
|
153
153
|
specification_version: 4
|
|
154
154
|
summary: JSON lint checker
|
|
@@ -160,9 +160,9 @@ test_files:
|
|
|
160
160
|
- spec/data/missing_brace.json
|
|
161
161
|
- spec/data/missing_comma.json
|
|
162
162
|
- spec/data/overlapping_keys.json
|
|
163
|
+
- spec/data/serialised.json
|
|
163
164
|
- spec/data/valid.json
|
|
164
165
|
- spec/data/valid_array_of_arrays.json
|
|
165
166
|
- spec/data/valid_array_of_objects.json
|
|
166
167
|
- spec/linter_spec.rb
|
|
167
168
|
- spec/spec_helper.rb
|
|
168
|
-
has_rdoc:
|