diff --git a/CHANGELOG.md b/CHANGELOG.md index d8963d6f5..159de0e8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed +- [Ruby] Updated rubocop and rubocop gems (RSpec/Rake/Performance), also updated project files affected by the updated rules ([#342](https://github.com/cucumber/cucumber-expressions/pull/342)) ## [18.0.1] - 2024-10-28 ### Fixed diff --git a/ruby/.rubocop.yml b/ruby/.rubocop.yml index feba819a2..c615725f4 100644 --- a/ruby/.rubocop.yml +++ b/ruby/.rubocop.yml @@ -1,4 +1,4 @@ -require: +plugins: - rubocop-performance - rubocop-rake - rubocop-rspec @@ -10,7 +10,7 @@ inherit_mode: - Exclude AllCops: - TargetRubyVersion: 2.5 + TargetRubyVersion: 2.7 NewCops: enable # Disabled on our repo's to enable polyglot-release @@ -29,6 +29,9 @@ Lint/MixedRegexpCaptureTypes: Style/Documentation: Enabled: false +Gemspec/DevelopmentDependencies: + Enabled: false + Style/RegexpLiteral: EnforcedStyle: slashes AllowInnerSlashes: true diff --git a/ruby/cucumber-cucumber-expressions.gemspec b/ruby/cucumber-cucumber-expressions.gemspec index e7abd0700..0a230e091 100644 --- a/ruby/cucumber-cucumber-expressions.gemspec +++ b/ruby/cucumber-cucumber-expressions.gemspec @@ -23,14 +23,14 @@ Gem::Specification.new do |s| 'source_code_uri' => 'https://github.com/cucumber/cucumber-expressions/tree/main/ruby', } - s.add_runtime_dependency 'bigdecimal' + s.add_dependency 'bigdecimal' s.add_development_dependency 'rake', '~> 13.1' s.add_development_dependency 'rspec', '~> 3.13' - s.add_development_dependency 'rubocop', '~> 1.27.0' - s.add_development_dependency 'rubocop-performance', '~> 1.7.0' - s.add_development_dependency 'rubocop-rake', '~> 0.5.0' - s.add_development_dependency 'rubocop-rspec', '~> 2.0.0' + s.add_development_dependency 'rubocop', '~> 1.75.7' + s.add_development_dependency 'rubocop-performance', '~> 1.25.0' + s.add_development_dependency 'rubocop-rake', '~> 0.7.1' + s.add_development_dependency 'rubocop-rspec', '~> 3.6.0' s.files = Dir['lib/**/*', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE', 'README.md'] s.rdoc_options = ['--charset=UTF-8'] diff --git a/ruby/lib/cucumber/cucumber_expressions/argument.rb b/ruby/lib/cucumber/cucumber_expressions/argument.rb index a87bc08e1..57f515412 100644 --- a/ruby/lib/cucumber/cucumber_expressions/argument.rb +++ b/ruby/lib/cucumber/cucumber_expressions/argument.rb @@ -33,8 +33,7 @@ def initialize(group, parameter_type) def value(self_obj = :nil) raise 'No self_obj' if self_obj == :nil - group_values = @group ? @group.values : nil - @parameter_type.transform(self_obj, group_values) + @parameter_type.transform(self_obj, @group&.values) end end end diff --git a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression.rb b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression.rb index e69218bed..9c7edf937 100644 --- a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression.rb +++ b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression.rb @@ -103,17 +103,17 @@ def rewrite_expression(node) end def assert_not_empty(node, &raise_error) - text_nodes = node.nodes.select { |ast_node| NodeType::TEXT == ast_node.type } + text_nodes = node.nodes.select { |ast_node| ast_node.type == NodeType::TEXT } raise_error.call(node) if text_nodes.length == 0 end def assert_no_parameters(node, &raise_error) - nodes = node.nodes.select { |ast_node| NodeType::PARAMETER == ast_node.type } + nodes = node.nodes.select { |ast_node| ast_node.type == NodeType::PARAMETER } raise_error.call(nodes[0]) if nodes.length > 0 end def assert_no_optionals(node, &raise_error) - nodes = node.nodes.select { |ast_node| NodeType::OPTIONAL == ast_node.type } + nodes = node.nodes.select { |ast_node| ast_node.type == NodeType::OPTIONAL } raise_error.call(nodes[0]) if nodes.length > 0 end end diff --git a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb index 5ea3fb064..3abd1fdd2 100644 --- a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb +++ b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb @@ -83,10 +83,10 @@ def create_parameter_type_matchers2(parameter_type, text) end def escape(s) - s.gsub(/%/, '%%') - .gsub(/\(/, '\\(') + s.gsub('%', '%%') + .gsub('(', '\\(') .gsub(/{/, '\\{') - .gsub(/\//, '\\/') + .gsub('/', '\\/') end end end diff --git a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb index 20822bf17..ada4fef2e 100644 --- a/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb +++ b/ruby/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb @@ -22,7 +22,7 @@ def parse(expression) return [0, nil] end # If configured correctly this will never happen - return [0, nil] + [0, nil] end # name := whitespace | . @@ -30,15 +30,15 @@ def parse(expression) token = tokens[current] case token.type when TokenType::WHITE_SPACE, TokenType::TEXT - return [1, [Node.new(NodeType::TEXT, nil, token.text, token.start, token.end)]] + [1, [Node.new(NodeType::TEXT, nil, token.text, token.start, token.end)]] when TokenType::BEGIN_PARAMETER, TokenType::END_PARAMETER, TokenType::BEGIN_OPTIONAL, TokenType::END_OPTIONAL, TokenType::ALTERNATION raise InvalidParameterTypeNameInNode.new(expression, token) when TokenType::START_OF_LINE, TokenType::END_OF_LINE # If configured correctly this will never happen - return [0, nil] + [0, nil] else # If configured correctly this will never happen - return [0, nil] + [0, nil] end end @@ -56,7 +56,7 @@ def parse(expression) return [0, nil] unless looking_at(tokens, current, TokenType::ALTERNATION) token = tokens[current] - return [1, [Node.new(NodeType::ALTERNATIVE, nil, token.text, token.start, token.end)]] + [1, [Node.new(NodeType::ALTERNATIVE, nil, token.text, token.start, token.end)]] end alternative_parsers = [ @@ -81,7 +81,7 @@ def parse(expression) start = tokens[current].start _end = tokens[sub_current].start # Does not consume right hand boundary token - return [consumed, [Node.new(NodeType::ALTERNATION, split_alternatives(start, _end, ast), nil, start, _end)]] + [consumed, [Node.new(NodeType::ALTERNATION, split_alternatives(start, _end, ast), nil, start, _end)]] end # @@ -118,7 +118,7 @@ def parse_between(type, begin_token, end_token, parsers) _end = tokens[sub_current].end consumed = sub_current + 1 - current ast = [Node.new(type, ast, nil, start, _end)] - return [consumed, ast] + [consumed, ast] end end @@ -171,7 +171,7 @@ def split_alternatives(start, _end, alternation) alternatives = [] alternative = [] alternation.each do |n| - if NodeType::ALTERNATIVE == n.type + if n.type == NodeType::ALTERNATIVE separators.push(n) alternatives.push(alternative) alternative = [] diff --git a/ruby/lib/cucumber/cucumber_expressions/tree_regexp.rb b/ruby/lib/cucumber/cucumber_expressions/tree_regexp.rb index 631393ab7..47af41255 100644 --- a/ruby/lib/cucumber/cucumber_expressions/tree_regexp.rb +++ b/ruby/lib/cucumber/cucumber_expressions/tree_regexp.rb @@ -38,7 +38,7 @@ def match(s) return true end - if source[i + 3] == '=' || source[i + 3] == '!' + if ['=', '!'].include?(source[i + 3]) # (?<=X) # (?