chutney 1.6.3 → 2.0.0.rc1
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 +4 -4
- data/.rspec +1 -0
- data/.rubocop.yml +3 -3
- data/README.md +44 -30
- data/Rakefile +10 -24
- data/chutney.gemspec +13 -10
- data/config/{default.yml → chutney.yml} +6 -3
- data/docs/.keep +0 -0
- data/exe/chutney +28 -22
- data/img/chutney.svg +852 -0
- data/img/formatters.png +0 -0
- data/lib/chutney.rb +61 -85
- data/lib/chutney/configuration.rb +6 -7
- data/lib/chutney/formatter.rb +21 -0
- data/lib/chutney/formatter/json_formatter.rb +8 -0
- data/lib/chutney/formatter/pie_formatter.rb +78 -0
- data/lib/chutney/formatter/rainbow_formatter.rb +47 -0
- data/lib/chutney/linter.rb +145 -113
- data/lib/chutney/linter/avoid_full_stop.rb +12 -0
- data/lib/chutney/linter/avoid_outline_for_single_example.rb +3 -6
- data/lib/chutney/linter/avoid_scripting.rb +10 -15
- data/lib/chutney/linter/background_does_more_than_setup.rb +7 -10
- data/lib/chutney/linter/background_requires_multiple_scenarios.rb +2 -3
- data/lib/chutney/linter/bad_scenario_name.rb +4 -11
- data/lib/chutney/linter/file_name_differs_feature_name.rb +5 -10
- data/lib/chutney/linter/givens_after_background.rb +17 -0
- data/lib/chutney/linter/invalid_file_name.rb +14 -6
- data/lib/chutney/linter/invalid_step_flow.rb +18 -18
- data/lib/chutney/linter/missing_example_name.rb +13 -11
- data/lib/chutney/linter/missing_feature_description.rb +2 -9
- data/lib/chutney/linter/missing_feature_name.rb +3 -12
- data/lib/chutney/linter/missing_scenario_name.rb +3 -7
- data/lib/chutney/linter/missing_test_action.rb +3 -6
- data/lib/chutney/linter/missing_verification.rb +3 -4
- data/lib/chutney/linter/required_tags_starts_with.rb +20 -5
- data/lib/chutney/linter/same_tag_for_all_scenarios.rb +24 -28
- data/lib/chutney/linter/scenario_names_match.rb +6 -8
- data/lib/chutney/linter/tag_used_multiple_times.rb +6 -13
- data/lib/chutney/linter/too_clumsy.rb +4 -4
- data/lib/chutney/linter/too_long_step.rb +8 -18
- data/lib/chutney/linter/too_many_different_tags.rb +13 -34
- data/lib/chutney/linter/too_many_steps.rb +10 -6
- data/lib/chutney/linter/too_many_tags.rb +11 -10
- data/lib/chutney/linter/unique_scenario_names.rb +19 -13
- data/lib/chutney/linter/unknown_variable.rb +5 -6
- data/lib/chutney/linter/unused_variable.rb +6 -7
- data/lib/chutney/linter/use_background.rb +11 -29
- data/lib/chutney/linter/use_outline.rb +21 -15
- data/lib/chutney/version.rb +1 -1
- data/lib/config/locales/en.yml +93 -0
- data/spec/chutney_spec.rb +54 -62
- data/spec/spec_helper.rb +103 -0
- metadata +75 -44
- data/Guardfile +0 -3
- data/lib/chutney/linter/avoid_period.rb +0 -19
- data/lib/chutney/linter/be_declarative.rb +0 -49
- data/lib/chutney/linter/tag_collector.rb +0 -10
- data/lib/chutney/linter/tag_constraint.rb +0 -35
- data/spec/configuration_spec.rb +0 -58
- data/spec/required_tags_starts_with_spec.rb +0 -74
- data/spec/shared_contexts/file_exists.rb +0 -12
- data/spec/shared_contexts/gherkin_linter.rb +0 -14
@@ -1,35 +1,40 @@
|
|
1
|
-
require 'amatch'
|
2
|
-
require 'chutney/linter'
|
3
|
-
|
4
1
|
module Chutney
|
5
2
|
# service class to lint for using outline
|
6
3
|
class UseOutline < Linter
|
7
4
|
def lint
|
8
|
-
|
9
|
-
check_similarity gather_scenarios(file, feature)
|
10
|
-
end
|
5
|
+
check_similarity(gather_scenarios(feature))
|
11
6
|
end
|
12
7
|
|
13
8
|
def check_similarity(scenarios)
|
14
9
|
scenarios.product(scenarios) do |lhs, rhs|
|
15
10
|
next if lhs == rhs
|
16
|
-
next if lhs[:reference] > rhs[:reference]
|
11
|
+
next if lhs[:reference][:line] > rhs[:reference][:line]
|
17
12
|
|
18
13
|
similarity = determine_similarity(lhs[:text], rhs[:text])
|
19
14
|
next unless similarity >= 0.95
|
20
15
|
|
21
16
|
similarity_pct = similarity.round(3) * 100
|
22
|
-
|
23
|
-
|
17
|
+
|
18
|
+
add_issue(lhs, rhs, similarity_pct)
|
24
19
|
end
|
25
20
|
end
|
21
|
+
|
22
|
+
def add_issue(lhs, rhs, pct)
|
23
|
+
super(I18n.t('linters.use_outline',
|
24
|
+
pct: pct,
|
25
|
+
lhs_name: lhs[:name],
|
26
|
+
lhs_line: lhs[:reference][:line],
|
27
|
+
rhs_name: rhs[:name],
|
28
|
+
rhs_line: rhs[:reference][:line]),
|
29
|
+
feature)
|
30
|
+
end
|
26
31
|
|
27
32
|
def determine_similarity(lhs, rhs)
|
28
|
-
matcher = Amatch::Jaro.new
|
29
|
-
matcher.match
|
33
|
+
matcher = Amatch::Jaro.new(lhs)
|
34
|
+
matcher.match(rhs)
|
30
35
|
end
|
31
36
|
|
32
|
-
def gather_scenarios(
|
37
|
+
def gather_scenarios(feature)
|
33
38
|
scenarios = []
|
34
39
|
return scenarios unless feature.include? :children
|
35
40
|
|
@@ -38,14 +43,15 @@ module Chutney
|
|
38
43
|
next unless scenario.include? :steps
|
39
44
|
next if scenario[:steps].empty?
|
40
45
|
|
41
|
-
scenarios.push generate_reference(
|
46
|
+
scenarios.push generate_reference(feature, scenario)
|
42
47
|
end
|
43
48
|
scenarios
|
44
49
|
end
|
45
50
|
|
46
|
-
def generate_reference(
|
51
|
+
def generate_reference(feature, scenario)
|
47
52
|
reference = {}
|
48
|
-
reference[:reference] =
|
53
|
+
reference[:reference] = location(feature, scenario, nil)
|
54
|
+
reference[:name] = "#{scenario[:keyword]}: #{scenario[:name]}"
|
49
55
|
reference[:text] = scenario[:steps].map { |step| render_step(step) }.join ' '
|
50
56
|
reference
|
51
57
|
end
|
data/lib/chutney/version.rb
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
# The English language variant used here is Commonwealth English, specifically British English.
|
2
|
+
# Rebellious provinces are encouraged to provide their own regional variations if they so wish.
|
3
|
+
# God save the Queen, etc. etc.
|
4
|
+
en:
|
5
|
+
linters:
|
6
|
+
avoid_full_stop: >- # https://en.wikipedia.org/wiki/Full_stop
|
7
|
+
Avoid using a full-stop in steps so that it is easier to re-use them.
|
8
|
+
avoid_outline_for_single_example: >-
|
9
|
+
Avoid using Scenario Outlines when you only have a single example.
|
10
|
+
Use a Scenario instead.
|
11
|
+
avoid_scripting: >-
|
12
|
+
You have %{count} When steps when you should only have one.
|
13
|
+
Be careful not to add And steps following a When.
|
14
|
+
background_does_more_than_setup: >-
|
15
|
+
The Background does more than setup. It should only contain Given steps.
|
16
|
+
background_requires_multiple_scenarios: >-
|
17
|
+
Avoid using Background if you only have a single scenario.
|
18
|
+
bad_scenario_name: >-
|
19
|
+
You should avoid using words like '%{word}' in your scenario names.
|
20
|
+
file_name_differs_feature_name: >-
|
21
|
+
The name of the feature should reflect the file name. Consider renaming this feature
|
22
|
+
to '%{expected}'.
|
23
|
+
givens_after_background: >-
|
24
|
+
Avoid using the 'Given' keyword in scenarios if you have a background.
|
25
|
+
Instead, setup steps begin your scenario and should start with an 'And' or 'But' keyword.
|
26
|
+
invalid_file_name: >-
|
27
|
+
Filenames of feature files should be in snake case.
|
28
|
+
You should name this file '%{recommended_name}'.
|
29
|
+
invalid_step_flow:
|
30
|
+
action_last: >-
|
31
|
+
This scenario has the action as the last step of the scenario. A 'Then' assertion
|
32
|
+
step should always follow a 'When' action step.
|
33
|
+
given_order: >-
|
34
|
+
You have a 'Given' setup step after a 'When' action step or a 'Then' assertion step.
|
35
|
+
Setup steps should always be the first steps of a scenario.
|
36
|
+
missing_action: >-
|
37
|
+
This scenario is missing an action step -- it does not have a 'When'.
|
38
|
+
missing_example_name: >-
|
39
|
+
You have a scenerio with more than one example table, at least one of which is
|
40
|
+
unnamed or has a duplicate name.
|
41
|
+
You should give your example tables clear and meaningful names when you have more than one.
|
42
|
+
missing_feature_description: >-
|
43
|
+
Features should have a description / value statement so that the importance of the feature
|
44
|
+
is well understood.
|
45
|
+
missing_feature_name: >-
|
46
|
+
This feature is unnamed. You should name all features.
|
47
|
+
missing_scenario_name: >-
|
48
|
+
This scenario is unnamed. You should name all scenarios.
|
49
|
+
missing_test_action: >-
|
50
|
+
Your test has no action step. All scenarios should have a 'When' step indicating the
|
51
|
+
action being taken.
|
52
|
+
missing_test_verification: >-
|
53
|
+
Your test has no verification step. All scenarios should have a 'Then' step indicating
|
54
|
+
the assertion being tested.
|
55
|
+
required_tags_starts_with: >-
|
56
|
+
You have tags which do not match the required format. Allowed prefixes are '%{allowed}'.
|
57
|
+
scenario_names_match: >-
|
58
|
+
You have scenario name which do not match the required format.
|
59
|
+
Allowed patterns are '%{pattern}'.
|
60
|
+
same_tag_for_all_scenarios:
|
61
|
+
feature_level: >-
|
62
|
+
You are using the same tag (%{tag}) for all scenarios.
|
63
|
+
Use this tag at the feature level instead.
|
64
|
+
example_level: >-
|
65
|
+
You are using the same tag (%{tag}) for all examples in this scenario.
|
66
|
+
Use this tag at the scenario level instead.
|
67
|
+
tag_used_multiple_times: >-
|
68
|
+
Avoid repeating tags at the feature and scenario level. These tags were used
|
69
|
+
in both: %{tags}.
|
70
|
+
too_clumsy: >-
|
71
|
+
This scenario is too clumsy at %{length} characters. Scenarios should be no more than
|
72
|
+
400 characters long.
|
73
|
+
too_long_step: >-
|
74
|
+
This step is too long at %{length} characters. It should be no longer than %{max}
|
75
|
+
characters.
|
76
|
+
too_many_different_tags: >-
|
77
|
+
There are too many tags in this feature. There are %{count} and the maximum is %{max}.
|
78
|
+
too_many_steps: >-
|
79
|
+
There are too many steps in this feature. There are %{count} and the maximum is %{max}.
|
80
|
+
too_many_tags: >-
|
81
|
+
There are too many tags in this feature. There are %{count} and the maximum is %{max}.
|
82
|
+
unique_scenario_names: >-
|
83
|
+
The scenario name '%{name}' is duplicated, first used at line %{line}, column %{column}.
|
84
|
+
unknown_variable: >-
|
85
|
+
The variable '%{variable}' is referenced in your test but its value is never set.
|
86
|
+
unused_variable: >-
|
87
|
+
The variable '%{variable}' is declared but never used.
|
88
|
+
use_background: >-
|
89
|
+
The step '%{step}' is used in all the scenarios of this feature. It should be moved
|
90
|
+
to the background steps.
|
91
|
+
use_outline: >-
|
92
|
+
Scenarios are similar by %{pct}%, you should use scenario outlines to simplify.
|
93
|
+
%{lhs_name} (%{lhs_line}) vs %{rhs_name} (%{rhs_line})
|
data/spec/chutney_spec.rb
CHANGED
@@ -1,71 +1,63 @@
|
|
1
|
-
require 'coveralls'
|
2
|
-
Coveralls.wear!
|
3
|
-
|
4
|
-
require 'rspec'
|
5
1
|
require 'chutney'
|
6
|
-
require 'chutney/linter/tag_constraint'
|
7
|
-
require 'shared_contexts/file_exists'
|
8
2
|
|
9
3
|
describe Chutney::ChutneyLint do
|
10
|
-
it 'should have the constant set' do
|
11
|
-
expect(Chutney::ChutneyLint.const_defined?(:LINTER)).to be true
|
12
|
-
end
|
13
|
-
|
14
4
|
subject { Chutney::ChutneyLint.new }
|
15
5
|
|
16
|
-
|
17
|
-
|
18
|
-
expect(subject.instance_variable_get(:@files)).to eq({})
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'sets the linter instance variable to empty' do
|
22
|
-
expect(subject.instance_variable_get(:@linter).size).to eq(0)
|
23
|
-
end
|
6
|
+
it 'has a version number' do
|
7
|
+
expect(Chutney::VERSION).not_to be nil
|
24
8
|
end
|
25
|
-
|
26
|
-
describe '#
|
27
|
-
it '
|
28
|
-
subject.
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
it '
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
it 'creates an instance' do
|
12
|
+
expect(subject).not_to be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'has an empty list of files if none are given' do
|
16
|
+
expect(subject.files).to eq []
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'has a list of files given on initialization' do
|
20
|
+
alt_subject = Chutney::ChutneyLint.new('a', 'b')
|
21
|
+
expect(alt_subject.files).to eq %w[a b]
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'initializes a results hash' do
|
25
|
+
expect(subject.results).to eq({})
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'sets the load path for I18n' do
|
29
|
+
expect(I18n.load_path).not_to eq []
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'configuration' do
|
33
|
+
it 'loads the configuration from a file' do
|
34
|
+
expect(subject.configuration).not_to be_nil
|
35
|
+
expect(subject.configuration).to respond_to :[]
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'allows the configuration to be set explicitly' do
|
39
|
+
config = { 'BackgroundDoesMoreThanSetup' => { 'Enabled' => true } }
|
40
|
+
subject.configuration = config
|
41
|
+
expect(subject.configuration).to be config
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'controls the available linters' do
|
45
|
+
subject.configuration = {}
|
46
|
+
expect(subject.linters).to be_empty
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'enables linters to be activated' do
|
50
|
+
config = { 'BackgroundDoesMoreThanSetup' => { 'Enabled' => true } }
|
51
|
+
subject.configuration = config
|
52
|
+
expect(subject.linters).to eq [Chutney::BackgroundDoesMoreThanSetup]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'linting' do
|
57
|
+
it 'aliases analyse and analyze' do
|
58
|
+
expect(subject).to respond_to :analyse
|
59
|
+
expect(subject).to respond_to :analyze
|
60
|
+
end
|
69
61
|
end
|
70
62
|
end
|
71
63
|
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
# Coveralls.wear!
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
7
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
8
|
+
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
9
|
+
# this file to always be loaded, without a need to explicitly require it in any
|
10
|
+
# files.
|
11
|
+
#
|
12
|
+
# Given that it is always loaded, you are encouraged to keep this file as
|
13
|
+
# light-weight as possible. Requiring heavyweight dependencies from this file
|
14
|
+
# will add to the boot time of your test suite on EVERY test run, even for an
|
15
|
+
# individual file that may not need all of that loaded. Instead, consider making
|
16
|
+
# a separate helper file that requires the additional dependencies and performs
|
17
|
+
# the additional setup, and require it from the spec files that actually need
|
18
|
+
# it.
|
19
|
+
#
|
20
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
21
|
+
RSpec.configure do |config|
|
22
|
+
# rspec-expectations config goes here. You can use an alternate
|
23
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
24
|
+
# assertions if you prefer.
|
25
|
+
config.expect_with :rspec do |expectations|
|
26
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
27
|
+
# and `failure_message` of custom matchers include text for helper methods
|
28
|
+
# defined using `chain`, e.g.:
|
29
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
30
|
+
# # => "be bigger than 2 and smaller than 4"
|
31
|
+
# ...rather than:
|
32
|
+
# # => "be bigger than 2"
|
33
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
34
|
+
end
|
35
|
+
|
36
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
37
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
38
|
+
config.mock_with :rspec do |mocks|
|
39
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
40
|
+
# a real object. This is generally recommended, and will default to
|
41
|
+
# `true` in RSpec 4.
|
42
|
+
mocks.verify_partial_doubles = true
|
43
|
+
end
|
44
|
+
|
45
|
+
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
|
46
|
+
# have no way to turn it off -- the option exists only for backwards
|
47
|
+
# compatibility in RSpec 3). It causes shared context metadata to be
|
48
|
+
# inherited by the metadata hash of host groups and examples, rather than
|
49
|
+
# triggering implicit auto-inclusion in groups with matching metadata.
|
50
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
51
|
+
|
52
|
+
# The settings below are suggested to provide a good initial experience
|
53
|
+
# with RSpec, but feel free to customize to your heart's content.
|
54
|
+
# # This allows you to limit a spec run to individual examples or groups
|
55
|
+
# # you care about by tagging them with `:focus` metadata. When nothing
|
56
|
+
# # is tagged with `:focus`, all examples get run. RSpec also provides
|
57
|
+
# # aliases for `it`, `describe`, and `context` that include `:focus`
|
58
|
+
# # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
59
|
+
# config.filter_run_when_matching :focus
|
60
|
+
#
|
61
|
+
# # Allows RSpec to persist some state between runs in order to support
|
62
|
+
# # the `--only-failures` and `--next-failure` CLI options. We recommend
|
63
|
+
# # you configure your source control system to ignore this file.
|
64
|
+
# config.example_status_persistence_file_path = "spec/examples.txt"
|
65
|
+
#
|
66
|
+
# # Limits the available syntax to the non-monkey patched syntax that is
|
67
|
+
# # recommended. For more details, see:
|
68
|
+
# # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
69
|
+
# # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
70
|
+
# # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
71
|
+
# config.disable_monkey_patching!
|
72
|
+
#
|
73
|
+
# # This setting enables warnings. It's recommended, but in some cases may
|
74
|
+
# # be too noisy due to issues in dependencies.
|
75
|
+
# config.warnings = true
|
76
|
+
#
|
77
|
+
# # Many RSpec users commonly either run the entire suite or an individual
|
78
|
+
# # file, and it's useful to allow more verbose output when running an
|
79
|
+
# # individual spec file.
|
80
|
+
# if config.files_to_run.one?
|
81
|
+
# # Use the documentation formatter for detailed output,
|
82
|
+
# # unless a formatter has already been configured
|
83
|
+
# # (e.g. via a command-line flag).
|
84
|
+
# config.default_formatter = "doc"
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# # Print the 10 slowest examples and example groups at the
|
88
|
+
# # end of the spec run, to help surface which specs are running
|
89
|
+
# # particularly slow.
|
90
|
+
# config.profile_examples = 10
|
91
|
+
#
|
92
|
+
# # Run specs in random order to surface order dependencies. If you find an
|
93
|
+
# # order dependency and want to debug it, you can fix the order by providing
|
94
|
+
# # the seed, which is printed after each run.
|
95
|
+
# # --seed 1234
|
96
|
+
# config.order = :random
|
97
|
+
#
|
98
|
+
# # Seed global randomization in this process using the `--seed` CLI option.
|
99
|
+
# # Setting this allows you to use `--seed` to deterministically reproduce
|
100
|
+
# # test failures related to randomization by passing the same `--seed` value
|
101
|
+
# # as the one that triggered the failure.
|
102
|
+
# Kernel.srand config.seed
|
103
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chutney
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nigel Brookes-Thomas
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2020-02-03 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: amatch
|
@@ -28,131 +28,159 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.4.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: gherkin
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
36
|
+
version: 5.1.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 5.1.0
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
45
|
+
name: i18n
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
50
|
+
version: 1.8.2
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
55
|
- - "~>"
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
57
|
+
version: 1.8.2
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: pastel
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - "~>"
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: '
|
64
|
+
version: '0.7'
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
69
|
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
71
|
+
version: '0.7'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: tty-pie
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- -
|
76
|
+
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version:
|
78
|
+
version: '0.3'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0.3'
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: coveralls
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - "~>"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0.8'
|
93
|
+
type: :development
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
84
98
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
99
|
+
version: '0.8'
|
86
100
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
101
|
+
name: cucumber
|
88
102
|
requirement: !ruby/object:Gem::Requirement
|
89
103
|
requirements:
|
90
104
|
- - "~>"
|
91
105
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
106
|
+
version: '3.0'
|
93
107
|
type: :development
|
94
108
|
prerelease: false
|
95
109
|
version_requirements: !ruby/object:Gem::Requirement
|
96
110
|
requirements:
|
97
111
|
- - "~>"
|
98
112
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
113
|
+
version: '3.0'
|
100
114
|
- !ruby/object:Gem::Dependency
|
101
115
|
name: rake
|
102
116
|
requirement: !ruby/object:Gem::Requirement
|
103
117
|
requirements:
|
104
118
|
- - "~>"
|
105
119
|
- !ruby/object:Gem::Version
|
106
|
-
version: '
|
120
|
+
version: '13.0'
|
107
121
|
type: :development
|
108
122
|
prerelease: false
|
109
123
|
version_requirements: !ruby/object:Gem::Requirement
|
110
124
|
requirements:
|
111
125
|
- - "~>"
|
112
126
|
- !ruby/object:Gem::Version
|
113
|
-
version: '
|
127
|
+
version: '13.0'
|
114
128
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
129
|
+
name: rerun
|
116
130
|
requirement: !ruby/object:Gem::Requirement
|
117
131
|
requirements:
|
118
132
|
- - "~>"
|
119
133
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
134
|
+
version: '0.13'
|
121
135
|
type: :development
|
122
136
|
prerelease: false
|
123
137
|
version_requirements: !ruby/object:Gem::Requirement
|
124
138
|
requirements:
|
125
139
|
- - "~>"
|
126
140
|
- !ruby/object:Gem::Version
|
127
|
-
version: 0.
|
141
|
+
version: '0.13'
|
128
142
|
- !ruby/object:Gem::Dependency
|
129
|
-
name: rspec
|
143
|
+
name: rspec-expectations
|
130
144
|
requirement: !ruby/object:Gem::Requirement
|
131
145
|
requirements:
|
132
146
|
- - "~>"
|
133
147
|
- !ruby/object:Gem::Version
|
134
|
-
version: '3.
|
148
|
+
version: '3.0'
|
135
149
|
type: :development
|
136
150
|
prerelease: false
|
137
151
|
version_requirements: !ruby/object:Gem::Requirement
|
138
152
|
requirements:
|
139
153
|
- - "~>"
|
140
154
|
- !ruby/object:Gem::Version
|
141
|
-
version: '3.
|
155
|
+
version: '3.0'
|
142
156
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
157
|
+
name: rubocop
|
144
158
|
requirement: !ruby/object:Gem::Requirement
|
145
159
|
requirements:
|
146
160
|
- - "~>"
|
147
161
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
162
|
+
version: 0.79.0
|
149
163
|
type: :development
|
150
164
|
prerelease: false
|
151
165
|
version_requirements: !ruby/object:Gem::Requirement
|
152
166
|
requirements:
|
153
167
|
- - "~>"
|
154
168
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
169
|
+
version: 0.79.0
|
170
|
+
- !ruby/object:Gem::Dependency
|
171
|
+
name: rspec
|
172
|
+
requirement: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - "~>"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '3.8'
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - "~>"
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '3.8'
|
156
184
|
description: A fork of gherkin_lint (https://github.com/funkwerk/gherkin_lint) (which
|
157
185
|
is no-longer being actively maintained), brought up to date with the Cucumber 3
|
158
186
|
monogem.
|
@@ -166,28 +194,35 @@ files:
|
|
166
194
|
- ".circleci/config.yml"
|
167
195
|
- ".coveralls.yml"
|
168
196
|
- ".gitignore"
|
197
|
+
- ".rspec"
|
169
198
|
- ".rubocop.yml"
|
170
199
|
- Gemfile
|
171
|
-
- Guardfile
|
172
200
|
- LICENSE
|
173
201
|
- README.md
|
174
202
|
- Rakefile
|
175
203
|
- chutney.gemspec
|
176
|
-
- config/
|
204
|
+
- config/chutney.yml
|
205
|
+
- docs/.keep
|
177
206
|
- exe/chutney
|
207
|
+
- img/chutney.svg
|
208
|
+
- img/formatters.png
|
178
209
|
- lib/chutney.rb
|
179
210
|
- lib/chutney/.DS_Store
|
180
211
|
- lib/chutney/configuration.rb
|
212
|
+
- lib/chutney/formatter.rb
|
213
|
+
- lib/chutney/formatter/json_formatter.rb
|
214
|
+
- lib/chutney/formatter/pie_formatter.rb
|
215
|
+
- lib/chutney/formatter/rainbow_formatter.rb
|
181
216
|
- lib/chutney/issue.rb
|
182
217
|
- lib/chutney/linter.rb
|
218
|
+
- lib/chutney/linter/avoid_full_stop.rb
|
183
219
|
- lib/chutney/linter/avoid_outline_for_single_example.rb
|
184
|
-
- lib/chutney/linter/avoid_period.rb
|
185
220
|
- lib/chutney/linter/avoid_scripting.rb
|
186
221
|
- lib/chutney/linter/background_does_more_than_setup.rb
|
187
222
|
- lib/chutney/linter/background_requires_multiple_scenarios.rb
|
188
223
|
- lib/chutney/linter/bad_scenario_name.rb
|
189
|
-
- lib/chutney/linter/be_declarative.rb
|
190
224
|
- lib/chutney/linter/file_name_differs_feature_name.rb
|
225
|
+
- lib/chutney/linter/givens_after_background.rb
|
191
226
|
- lib/chutney/linter/invalid_file_name.rb
|
192
227
|
- lib/chutney/linter/invalid_step_flow.rb
|
193
228
|
- lib/chutney/linter/missing_example_name.rb
|
@@ -199,8 +234,6 @@ files:
|
|
199
234
|
- lib/chutney/linter/required_tags_starts_with.rb
|
200
235
|
- lib/chutney/linter/same_tag_for_all_scenarios.rb
|
201
236
|
- lib/chutney/linter/scenario_names_match.rb
|
202
|
-
- lib/chutney/linter/tag_collector.rb
|
203
|
-
- lib/chutney/linter/tag_constraint.rb
|
204
237
|
- lib/chutney/linter/tag_used_multiple_times.rb
|
205
238
|
- lib/chutney/linter/too_clumsy.rb
|
206
239
|
- lib/chutney/linter/too_long_step.rb
|
@@ -213,16 +246,14 @@ files:
|
|
213
246
|
- lib/chutney/linter/use_background.rb
|
214
247
|
- lib/chutney/linter/use_outline.rb
|
215
248
|
- lib/chutney/version.rb
|
249
|
+
- lib/config/locales/en.yml
|
216
250
|
- spec/chutney_spec.rb
|
217
|
-
- spec/
|
218
|
-
- spec/required_tags_starts_with_spec.rb
|
219
|
-
- spec/shared_contexts/file_exists.rb
|
220
|
-
- spec/shared_contexts/gherkin_linter.rb
|
251
|
+
- spec/spec_helper.rb
|
221
252
|
homepage: https://github.com/BillyRuffian/chutney
|
222
253
|
licenses:
|
223
254
|
- MIT
|
224
255
|
metadata:
|
225
|
-
source_code_uri: https://github.com/BillyRuffian/
|
256
|
+
source_code_uri: https://github.com/BillyRuffian/chutney
|
226
257
|
post_install_message:
|
227
258
|
rdoc_options: []
|
228
259
|
require_paths:
|
@@ -234,11 +265,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
265
|
version: '0'
|
235
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
267
|
requirements:
|
237
|
-
- - "
|
268
|
+
- - ">"
|
238
269
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
270
|
+
version: 1.3.1
|
240
271
|
requirements: []
|
241
|
-
rubygems_version: 3.
|
272
|
+
rubygems_version: 3.1.2
|
242
273
|
signing_key:
|
243
274
|
specification_version: 4
|
244
275
|
summary: A linter for English language Gherkin
|