From c9ce790767435994164bf7c3660aa9862ec6109f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 20 Feb 2025 09:45:34 -1000 Subject: [PATCH] Fix "no anonymous block parameter" in ruby 3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When running on Ruby 3.1.2p20 (shipped with Debian 12), the use of anonymous blocks cause exceptions to be raised. This was fixed in later Ruby versions, but will not be backported to the version of Ruby shipped by Debian 12 nor the versions or ruby shipped with all Debian derivative. Explicitly name blocks to avoid triggering this issue with affected versions of Ruby. While here, also adjust the rubocop configuration to detect this issue and mandate the use of explicitly named blocks. Signed-off-by: Romain Tartière --- rb/.rubocop.yml | 3 +++ rb/lib/selenium/server.rb | 6 +++--- rb/lib/selenium/webdriver/bidi.rb | 4 ++-- rb/lib/selenium/webdriver/bidi/log_inspector.rb | 8 ++++---- rb/lib/selenium/webdriver/bidi/network.rb | 4 ++-- .../common/driver_extensions/has_network_interception.rb | 4 ++-- rb/lib/selenium/webdriver/common/network.rb | 8 ++++---- rb/lib/selenium/webdriver/common/script.rb | 8 ++++---- rb/lib/selenium/webdriver/remote/bridge.rb | 4 ++-- rb/lib/selenium/webdriver/support/guards.rb | 4 ++-- 10 files changed, 28 insertions(+), 25 deletions(-) diff --git a/rb/.rubocop.yml b/rb/.rubocop.yml index 0e1f819a1d856..4adfa2f74d28c 100644 --- a/rb/.rubocop.yml +++ b/rb/.rubocop.yml @@ -75,6 +75,9 @@ Metrics/PerceivedComplexity: - 'lib/selenium/webdriver/common/local_driver.rb' - 'lib/selenium/webdriver/common/logger.rb' +Naming/BlockForwarding: + EnforcedStyle: explicit + Naming/FileName: Exclude: - 'lib/selenium-webdriver.rb' diff --git a/rb/lib/selenium/server.rb b/rb/lib/selenium/server.rb index ad63ca25eb936..7d031f26af07d 100644 --- a/rb/lib/selenium/server.rb +++ b/rb/lib/selenium/server.rb @@ -122,15 +122,15 @@ def available_assets end end - def net_http_start(address, &) + def net_http_start(address, &block) http_proxy = ENV.fetch('http_proxy', nil) || ENV.fetch('HTTP_PROXY', nil) if http_proxy http_proxy = "http://#{http_proxy}" unless http_proxy.start_with?('http://') uri = URI.parse(http_proxy) - Net::HTTP.start(address, nil, uri.host, uri.port, &) + Net::HTTP.start(address, nil, uri.host, uri.port, &block) else - Net::HTTP.start(address, use_ssl: true, &) + Net::HTTP.start(address, use_ssl: true, &block) end end diff --git a/rb/lib/selenium/webdriver/bidi.rb b/rb/lib/selenium/webdriver/bidi.rb index ed3bcc7b12098..4c8ca37b4f8d2 100644 --- a/rb/lib/selenium/webdriver/bidi.rb +++ b/rb/lib/selenium/webdriver/bidi.rb @@ -43,8 +43,8 @@ def callbacks @ws.callbacks end - def add_callback(event, &) - @ws.add_callback(event, &) + def add_callback(event, &block) + @ws.add_callback(event, &block) end def remove_callback(event, id) diff --git a/rb/lib/selenium/webdriver/bidi/log_inspector.rb b/rb/lib/selenium/webdriver/bidi/log_inspector.rb index 4c7ff02100a72..133666cec0f01 100644 --- a/rb/lib/selenium/webdriver/bidi/log_inspector.rb +++ b/rb/lib/selenium/webdriver/bidi/log_inspector.rb @@ -79,7 +79,7 @@ def on_javascript_exception(&block) end end - def on_log(filter_by = nil, &) + def on_log(filter_by = nil, &block) unless filter_by.nil? check_valid_filter(filter_by) @@ -89,14 +89,14 @@ def on_log(filter_by = nil, &) return end - on(:entry_added, &) + on(:entry_added, &block) end private - def on(event, &) + def on(event, &block) event = EVENTS[event] if event.is_a?(Symbol) - @bidi.add_callback("log.#{event}", &) + @bidi.add_callback("log.#{event}", &block) end def check_valid_filter(filter_by) diff --git a/rb/lib/selenium/webdriver/bidi/network.rb b/rb/lib/selenium/webdriver/bidi/network.rb index cf028727c0dd2..26f62f64a22dc 100644 --- a/rb/lib/selenium/webdriver/bidi/network.rb +++ b/rb/lib/selenium/webdriver/bidi/network.rb @@ -128,9 +128,9 @@ def set_cache_behavior(behavior, *contexts) @bidi.send_cmd('network.setCacheBehavior', cacheBehavior: behavior, contexts: contexts) end - def on(event, &) + def on(event, &block) event = EVENTS[event] if event.is_a?(Symbol) - @bidi.add_callback(event, &) + @bidi.add_callback(event, &block) @bidi.session.subscribe(event) end end # Network diff --git a/rb/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb b/rb/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb index 54abcecba87c7..e93ae0b3e6e76 100644 --- a/rb/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +++ b/rb/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb @@ -59,7 +59,7 @@ module HasNetworkInterception # @yieldparam [Proc] continue block which proceeds with the request and optionally yields response # - def intercept(&) + def intercept(&block) if browser == :firefox WebDriver.logger.deprecate( 'Driver#intercept on Firefox', @@ -68,7 +68,7 @@ def intercept(&) ) end @interceptor ||= DevTools::NetworkInterceptor.new(devtools) - @interceptor.intercept(&) + @interceptor.intercept(&block) end end # HasNetworkInterception end # DriverExtensions diff --git a/rb/lib/selenium/webdriver/common/network.rb b/rb/lib/selenium/webdriver/common/network.rb index 3ac30b6eb68f6..765ba88097a19 100644 --- a/rb/lib/selenium/webdriver/common/network.rb +++ b/rb/lib/selenium/webdriver/common/network.rb @@ -62,25 +62,25 @@ def add_authentication_handler(username = nil, password = nil, *filter, pattern_ ) end - def add_request_handler(*filter, pattern_type: nil, &) + def add_request_handler(*filter, pattern_type: nil, &block) add_handler( :before_request, BiDi::Network::PHASES[:before_request], BiDi::InterceptedRequest, filter, pattern_type: pattern_type, - & + &block ) end - def add_response_handler(*filter, pattern_type: nil, &) + def add_response_handler(*filter, pattern_type: nil, &block) add_handler( :response_started, BiDi::Network::PHASES[:response_started], BiDi::InterceptedResponse, filter, pattern_type: pattern_type, - & + &block ) end diff --git a/rb/lib/selenium/webdriver/common/script.rb b/rb/lib/selenium/webdriver/common/script.rb index a637b75f6bda1..4b58b1bbea2c7 100644 --- a/rb/lib/selenium/webdriver/common/script.rb +++ b/rb/lib/selenium/webdriver/common/script.rb @@ -25,13 +25,13 @@ def initialize(bridge) end # @return [int] id of the handler - def add_console_message_handler(&) - @log_handler.add_message_handler('console', &) + def add_console_message_handler(&block) + @log_handler.add_message_handler('console', &block) end # @return [int] id of the handler - def add_javascript_error_handler(&) - @log_handler.add_message_handler('javascript', &) + def add_javascript_error_handler(&block) + @log_handler.add_message_handler('javascript', &block) end # @param [int] id of the handler previously added diff --git a/rb/lib/selenium/webdriver/remote/bridge.rb b/rb/lib/selenium/webdriver/remote/bridge.rb index 2c26285a780e0..d36b0cf3e66dc 100644 --- a/rb/lib/selenium/webdriver/remote/bridge.rb +++ b/rb/lib/selenium/webdriver/remote/bridge.rb @@ -35,10 +35,10 @@ class << self attr_reader :extra_commands attr_writer :element_class, :locator_converter - def add_command(name, verb, url, &) + def add_command(name, verb, url, &block) @extra_commands ||= {} @extra_commands[name] = [verb, url] - define_method(name, &) + define_method(name, &block) end def locator_converter diff --git a/rb/lib/selenium/webdriver/support/guards.rb b/rb/lib/selenium/webdriver/support/guards.rb index f56850106396d..e60c4d75609be 100644 --- a/rb/lib/selenium/webdriver/support/guards.rb +++ b/rb/lib/selenium/webdriver/support/guards.rb @@ -37,8 +37,8 @@ def initialize(example, bug_tracker: '', conditions: nil) @messages = {} end - def add_condition(name, condition = nil, &) - @guard_conditions << GuardCondition.new(name, condition, &) + def add_condition(name, condition = nil, &block) + @guard_conditions << GuardCondition.new(name, condition, &block) end def add_message(name, message)