diff --git a/.github/workflows/release-rubygem.yml b/.github/workflows/release-rubygem.yml index 947187de3..c1869bc71 100644 --- a/.github/workflows/release-rubygem.yml +++ b/.github/workflows/release-rubygem.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v5 - uses: ruby/setup-ruby@v1 with: - ruby-version: '3.3' + ruby-version: '3.4' bundler-cache: true - uses: cucumber/action-publish-rubygem@v1.0.0 with: diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index c64b73ed5..1b2c74430 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -17,12 +17,12 @@ jobs: matrix: os: - ubuntu-latest - ruby: ['2.7', '3.0', '3.1', '3.2', '3.3'] + ruby: ['3.0', '3.1', '3.2', '3.3', '3.4', '3.5'] include: - os: windows-latest - ruby: '3.3' + ruby: '3.4' - os: macos-latest - ruby: '3.3' + ruby: '3.4' steps: - uses: actions/checkout@v5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8de29d647..a07c1fc99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Changed +- [Ruby] Minor cosmetic / CI changes for development (Nothing front-facing) - [Python] PEP 639 licence metadata specification ([#361](https://github.com/cucumber/cucumber-expressions/pull/361)) ## [18.0.1] - 2024-10-28 diff --git a/ruby/.rubocop.yml b/ruby/.rubocop.yml index feba819a2..df136ff6f 100644 --- a/ruby/.rubocop.yml +++ b/ruby/.rubocop.yml @@ -21,7 +21,7 @@ Layout/LineLength: Max: 200 # This is documented in this spec to showcase why it's not working and people shouldn't use it -# cf: +# cf: https://github.com/cucumber/cucumber/issues/329 Lint/MixedRegexpCaptureTypes: Exclude: - 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb' diff --git a/ruby/.rubocop_todo.yml b/ruby/.rubocop_todo.yml index c45513b3d..b967d7fbb 100644 --- a/ruby/.rubocop_todo.yml +++ b/ruby/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2023-11-27 17:52:56 UTC using RuboCop version 1.27.0. +# on 2025-10-03 16:56:25 UTC using RuboCop version 1.55.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -9,16 +9,32 @@ # TODO: Oct '23 -> 33 files inspected, 1004 offenses detected, 859 offenses auto-correctable # TODO: Oct '23 (later) -> 33 files inspected, 344 offenses detected, 205 offenses auto-correctable # TODO: Nov '23 -> 33 files inspected, 399 offenses detected, 192 offenses auto-correctable +# TODO: Oct '25 (Updated dependencies) -> 33 files inspected, 299 offenses detected, 137 offenses auto-correctable + +# Offense count: 6 +# Configuration parameters: EnforcedStyle, AllowedGems, Include. +# SupportedStyles: Gemfile, gems.rb, gemspec +# Include: **/*.gemspec, **/Gemfile, **/gems.rb +Gemspec/DevelopmentDependencies: + Exclude: + - 'cucumber-cucumber-expressions.gemspec' + +# Offense count: 1 +# Configuration parameters: Severity, Include. +# Include: **/*.gemspec +Gemspec/RequiredRubyVersion: + Exclude: + - 'cucumber-cucumber-expressions.gemspec' # Offense count: 2 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_brackets Layout/FirstArrayElementIndentation: EnforcedStyle: consistent # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Lint/AmbiguousOperatorPrecedence: Exclude: - 'lib/cucumber/cucumber_expressions/errors.rb' @@ -47,7 +63,7 @@ Lint/EmptyClass: - 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb' # Offense count: 1 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). Lint/NonDeterministicRequireOrder: Exclude: - 'Rakefile' @@ -60,16 +76,10 @@ Lint/UnderscorePrefixedVariableName: - 'lib/cucumber/cucumber_expressions/group.rb' # Offense count: 10 -# Configuration parameters: IgnoredMethods, CountRepeatedAttributes. +# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: Max: 59 -# Offense count: 11 -# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods. -# IgnoredMethods: refine -Metrics/BlockLength: - Max: 183 - # Offense count: 1 # Configuration parameters: CountBlocks. Metrics/BlockNesting: @@ -81,12 +91,12 @@ Metrics/ClassLength: Max: 141 # Offense count: 7 -# Configuration parameters: IgnoredMethods. +# Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/CyclomaticComplexity: Max: 15 # Offense count: 20 -# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods. +# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Max: 61 @@ -101,13 +111,13 @@ Metrics/ParameterLists: Max: 6 # Offense count: 6 -# Configuration parameters: IgnoredMethods. +# Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/PerceivedComplexity: Max: 17 # Offense count: 7 # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. -# AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to +# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to Naming/MethodParameterName: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb' @@ -128,33 +138,29 @@ Naming/PredicateName: - 'lib/cucumber/cucumber_expressions/tree_regexp.rb' # Offense count: 3 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Performance/RedundantBlockCall: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression.rb' +# Offense count: 16 +# This cop supports unsafe autocorrection (--autocorrect-all). +RSpec/BeEq: + Exclude: + - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' + - 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb' + # Offense count: 2 -# Configuration parameters: Prefixes. +# Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: Exclude: - 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb' # Offense count: 29 -# Configuration parameters: Max. +# Configuration parameters: CountAsOne. RSpec/ExampleLength: - Exclude: - - 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb' - - 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb' - - 'spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb' - - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' - - 'spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb' - - 'spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb' - - 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb' - - 'spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb' - - 'spec/cucumber/cucumber_expressions/parameter_type_spec.rb' - - 'spec/cucumber/cucumber_expressions/regular_expression_spec.rb' - - 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb' + Max: 32 # Offense count: 3 RSpec/LeakyConstantDeclaration: @@ -171,6 +177,13 @@ RSpec/MultipleExpectations: RSpec/MultipleMemoizedHelpers: Max: 6 +# Offense count: 1 +# Configuration parameters: AllowedPatterns. +# AllowedPatterns: ^expect_, ^assert_ +RSpec/NoExpectationExample: + Exclude: + - 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb' + # Offense count: 2 RSpec/RepeatedDescription: Exclude: @@ -181,7 +194,8 @@ RSpec/RepeatedExample: Exclude: - 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb' -# Offense count: 2 +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle, AllowModifiersOnSymbols. # SupportedStyles: inline, group Style/AccessModifierDeclarations: @@ -189,12 +203,12 @@ Style/AccessModifierDeclarations: - 'lib/cucumber/cucumber_expressions/tree_regexp.rb' # Offense count: 4 -# This cop supports safe auto-correction (--auto-correct). -# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods. # SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces # ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object # FunctionalMethods: let, let!, subject, watch -# IgnoredMethods: lambda, proc, it +# AllowedMethods: lambda, proc, it Style/BlockDelimiters: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression.rb' @@ -202,38 +216,32 @@ Style/BlockDelimiters: - 'spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb' - 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb' -# Offense count: 1 -# This cop supports unsafe auto-correction (--auto-correct-all). -Style/CaseLikeIf: - Exclude: - - 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb' - # Offense count: 3 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/ColonMethodCall: Exclude: - 'lib/cucumber/cucumber_expressions/errors.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/EmptyLiteral: Exclude: - 'lib/cucumber/cucumber_expressions/ast.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/Encoding: Exclude: - 'cucumber-cucumber-expressions.gemspec' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/ExpandPathArguments: Exclude: - 'Rakefile' # Offense count: 2 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: each, for Style/For: @@ -242,7 +250,7 @@ Style/For: - 'spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: format, sprintf, percent Style/FormatString: @@ -250,47 +258,48 @@ Style/FormatString: - 'lib/cucumber/cucumber_expressions/generated_expression.rb' # Offense count: 2 -# Configuration parameters: MinBodyLength. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals. Style/GuardClause: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb' - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 1 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: InverseMethods, InverseBlocks. Style/InverseMethods: Exclude: - 'lib/cucumber/cucumber_expressions/parameter_type.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/MultilineTernaryOperator: Exclude: - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/NegatedIfElseCondition: Exclude: - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/NestedTernaryOperator: Exclude: - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' # Offense count: 2 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: IncludeSemanticChanges. Style/NonNilCheck: Exclude: - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 11 -# This cop supports unsafe auto-correction (--auto-correct-all). -# Configuration parameters: EnforcedStyle, IgnoredMethods. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns. # SupportedStyles: predicate, comparison Style/NumericPredicate: Exclude: @@ -301,7 +310,7 @@ Style/NumericPredicate: - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 6 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/ParallelAssignment: Exclude: - 'lib/cucumber/cucumber_expressions/argument.rb' @@ -312,7 +321,7 @@ Style/ParallelAssignment: - 'spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb' # Offense count: 1 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: short, verbose Style/PreferredHashMethods: @@ -320,14 +329,14 @@ Style/PreferredHashMethods: - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 9 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowedCompactTypes. # SupportedStyles: compact, exploded Style/RaiseArgs: EnforcedStyle: compact # Offense count: 6 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Methods. Style/RedundantArgument: Exclude: @@ -337,19 +346,19 @@ Style/RedundantArgument: - 'lib/cucumber/cucumber_expressions/errors.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports unsafe autocorrection (--autocorrect-all). Style/RedundantInterpolation: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression.rb' -# Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). -Style/RedundantRegexpCharacterClass: +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantRegexpArgument: Exclude: - - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' + - 'lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb' # Offense count: 19 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowMultipleReturnValues. Style/RedundantReturn: Exclude: @@ -358,33 +367,37 @@ Style/RedundantReturn: - 'lib/cucumber/cucumber_expressions/parameter_type.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/RedundantSelf: Exclude: - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' -# Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). -Style/SelectByRegexp: +# Offense count: 3 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. +# AllowedMethods: present?, blank?, presence, try, try! +Style/SafeNavigation: Exclude: - - 'cucumber-cucumber-expressions.gemspec' + - 'lib/cucumber/cucumber_expressions/argument.rb' + - 'spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb' + - 'spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowAsExpressionSeparator. Style/Semicolon: Exclude: - 'lib/cucumber/cucumber_expressions/parameter_type_registry.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: RequireEnglish. -# SupportedStyles: use_perl_names, use_english_names +# SupportedStyles: use_perl_names, use_english_names, use_builtin_english_names Style/SpecialGlobalVars: EnforcedStyle: use_perl_names # Offense count: 3 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Mode. Style/StringConcatenation: Exclude: @@ -392,9 +405,9 @@ Style/StringConcatenation: - 'lib/cucumber/cucumber_expressions/errors.rb' # Offense count: 7 -# This cop supports unsafe auto-correction (--auto-correct-all). -# Configuration parameters: AllowMethodsWithArguments, IgnoredMethods. -# IgnoredMethods: respond_to, define_method +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments. +# AllowedMethods: define_method Style/SymbolProc: Exclude: - 'lib/cucumber/cucumber_expressions/ast.rb' @@ -405,7 +418,7 @@ Style/SymbolProc: - 'spec/cucumber/cucumber_expressions/tree_regexp_spec.rb' # Offense count: 2 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyleForMultiline. # SupportedStylesForMultiline: comma, consistent_comma, no_comma Style/TrailingCommaInArrayLiteral: @@ -414,7 +427,7 @@ Style/TrailingCommaInArrayLiteral: - 'spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_spec.rb' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyleForMultiline. # SupportedStylesForMultiline: comma, consistent_comma, no_comma Style/TrailingCommaInHashLiteral: @@ -422,20 +435,29 @@ Style/TrailingCommaInHashLiteral: - 'cucumber-cucumber-expressions.gemspec' # Offense count: 1 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). Style/WhileUntilDo: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb' # Offense count: 6 -# This cop supports safe auto-correction (--auto-correct). +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: MinSize, WordRegex. # SupportedStyles: percent, brackets Style/WordArray: EnforcedStyle: brackets +# Offense count: 4 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: forbid_for_all_comparison_operators, forbid_for_equality_operators_only, require_for_all_comparison_operators, require_for_equality_operators_only +Style/YodaCondition: + Exclude: + - 'lib/cucumber/cucumber_expressions/cucumber_expression.rb' + - 'lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb' + # Offense count: 6 -# This cop supports unsafe auto-correction (--auto-correct-all). +# This cop supports unsafe autocorrection (--autocorrect-all). Style/ZeroLengthPredicate: Exclude: - 'lib/cucumber/cucumber_expressions/cucumber_expression.rb' diff --git a/ruby/cucumber-cucumber-expressions.gemspec b/ruby/cucumber-cucumber-expressions.gemspec index e7abd0700..8620058d9 100644 --- a/ruby/cucumber-cucumber-expressions.gemspec +++ b/ruby/cucumber-cucumber-expressions.gemspec @@ -14,6 +14,7 @@ Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY s.license = 'MIT' s.required_ruby_version = '>= 2.7' + s.required_rubygems_version = '>= 3.2.8' s.metadata = { 'bug_tracker_uri' => 'https://github.com/cucumber/cucumber/issues', @@ -25,12 +26,12 @@ Gem::Specification.new do |s| s.add_runtime_dependency 'bigdecimal' - s.add_development_dependency 'rake', '~> 13.1' + s.add_development_dependency 'rake', '~> 13.3' 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.55.0' + s.add_development_dependency 'rubocop-performance', '~> 1.21.0' + s.add_development_dependency 'rubocop-rake', '~> 0.6.0' + s.add_development_dependency 'rubocop-rspec', '~> 3.0.0' s.files = Dir['lib/**/*', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE', 'README.md'] s.rdoc_options = ['--charset=UTF-8']