From a67ed52d49407226e55ada3c43204a57a01cef56 Mon Sep 17 00:00:00 2001 From: Ricardo Galeno Date: Tue, 12 May 2026 15:45:08 -0300 Subject: [PATCH 1/3] Fix Ruby 3.2+ compatibility in aws-sdk-neptunedata error classes In Ruby 3.2, Exception#full_message was updated to internally call detailed_message(highlight:) with a keyword argument. All 34 error classes in aws-sdk-neptunedata override detailed_message to expose the API-level field, but none of them accepted the highlight: keyword, causing ArgumentError when Ruby or any tooling (e.g. OpenTelemetry SDK's span.record_exception) calls full_message on these exceptions. The fix adds `highlight: true, **` to each override, making them compatible with Ruby 3.2+ while remaining fully backward compatible with earlier Ruby versions where full_message does not call detailed_message with keyword arguments. Fixes: ArgumentError: wrong number of arguments (given 1, expected 0) --- .../lib/aws-sdk-neptunedata/errors.rb | 68 +++++++++---------- gems/aws-sdk-neptunedata/sig/errors.rbs | 68 +++++++++---------- 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/gems/aws-sdk-neptunedata/lib/aws-sdk-neptunedata/errors.rb b/gems/aws-sdk-neptunedata/lib/aws-sdk-neptunedata/errors.rb index a68ccff5861..baebd07b4ae 100644 --- a/gems/aws-sdk-neptunedata/lib/aws-sdk-neptunedata/errors.rb +++ b/gems/aws-sdk-neptunedata/lib/aws-sdk-neptunedata/errors.rb @@ -78,7 +78,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -103,7 +103,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -128,7 +128,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -157,7 +157,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -182,7 +182,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -211,7 +211,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -240,7 +240,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -269,7 +269,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -294,7 +294,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -323,7 +323,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -348,7 +348,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -373,7 +373,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -398,7 +398,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -423,7 +423,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -448,7 +448,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -473,7 +473,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -498,7 +498,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -523,7 +523,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -552,7 +552,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -577,7 +577,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -602,7 +602,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -627,7 +627,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -652,7 +652,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -681,7 +681,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -706,7 +706,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -731,7 +731,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -756,7 +756,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -785,7 +785,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -810,7 +810,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -835,7 +835,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -860,7 +860,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -889,7 +889,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -918,7 +918,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end @@ -947,7 +947,7 @@ def initialize(context, message, data = Aws::EmptyStructure.new) end # @return [String] - def detailed_message + def detailed_message(highlight: true, **) @data[:detailed_message] end diff --git a/gems/aws-sdk-neptunedata/sig/errors.rbs b/gems/aws-sdk-neptunedata/sig/errors.rbs index 0d3314e31c0..6f375485d89 100644 --- a/gems/aws-sdk-neptunedata/sig/errors.rbs +++ b/gems/aws-sdk-neptunedata/sig/errors.rbs @@ -12,172 +12,172 @@ module Aws end class AccessDeniedException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class BadRequestException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class BulkLoadIdNotFoundException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class CancelledByUserException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ClientTimeoutException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ConcurrentModificationException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ConstraintViolationException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ExpiredStreamException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class FailureByQueryException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class IllegalArgumentException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class InternalFailureException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class InvalidArgumentException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class InvalidNumericDataException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class InvalidParameterException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class LoadUrlAccessDeniedException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class MLResourceNotFoundException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class MalformedQueryException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class MemoryLimitExceededException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class MethodNotAllowedException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class MissingParameterException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ParsingException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class PreconditionsFailedException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class QueryLimitExceededException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class QueryLimitException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class QueryTooLargeException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ReadOnlyViolationException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class S3Exception < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ServerShutdownException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class StatisticsNotAvailableException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class StreamRecordsNotFoundException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class ThrottlingException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class TimeLimitExceededException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class TooManyRequestsException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end class UnsupportedOperationException < ::Aws::Errors::ServiceError - def detailed_message: () -> ::String + def detailed_message: (?highlight: bool) -> ::String def request_id: () -> ::String def code: () -> ::String end From 193ddbb66d77f3c282aaeae5982e3e7305d4eb2d Mon Sep 17 00:00:00 2001 From: Ricardo Galeno Date: Tue, 12 May 2026 18:43:21 -0300 Subject: [PATCH 2/3] Fix detailed_message template to accept highlight: keyword (Ruby 3.2+) Ruby 3.2 updated Exception#full_message to call detailed_message(highlight:) with a keyword argument. The errors_module.mustache template generates detailed_message overrides for error members, but the generated signature did not accept the highlight: keyword, causing ArgumentError. Update error_list.rb to expose a detailed_message flag on members named detailed_message, and update the template to generate: def detailed_message(highlight: true, **) for those members, maintaining backward compatibility with Ruby < 3.2. The generated aws-sdk-neptunedata/errors.rb was already updated in the previous commit. --- .../lib/aws-sdk-code-generator/error_list.rb | 6 ++++-- .../aws-sdk-code-generator/templates/errors_module.mustache | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/error_list.rb b/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/error_list.rb index 67aee595e6a..1f4386c98c3 100644 --- a/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/error_list.rb +++ b/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/error_list.rb @@ -13,10 +13,12 @@ def initialize(options) # excluding event shapes marked as error if error_struct?(shape) members = shape['members'].inject([]) do |arr, (k, v)| + member_name = Underscore.underscore(k) arr << { - name: Underscore.underscore(k), + name: member_name, type: Docstring.ucfirst(v['type'] ||'String'), - shared: k.downcase == 'message' || k.downcase == 'code' + shared: k.downcase == 'message' || k.downcase == 'code', + detailed_message: member_name == 'detailed_message' } arr end diff --git a/build_tools/aws-sdk-code-generator/templates/errors_module.mustache b/build_tools/aws-sdk-code-generator/templates/errors_module.mustache index 37edfc7bd99..8a750a1e40d 100644 --- a/build_tools/aws-sdk-code-generator/templates/errors_module.mustache +++ b/build_tools/aws-sdk-code-generator/templates/errors_module.mustache @@ -58,7 +58,7 @@ module {{module_name}} {{#members}} # @return [{{type}}] - def {{name}} + def {{name}}{{#detailed_message}}(highlight: true, **){{/detailed_message}} {{#shared}}@{{name}} || {{/shared}}@data[:{{name}}] end {{/members}} From f38f72e086f320160af1cdcead2aa682be57ec2d Mon Sep 17 00:00:00 2001 From: Ricardo Galeno Date: Wed, 13 May 2026 14:36:59 -0300 Subject: [PATCH 3/3] Fix RBS error_list generator for detailed_message Ruby 3.2+ signature The RBS generator was producing `() -> ::String` for the detailed_message member, but after the Ruby 3.2+ fix the method signature is now `def detailed_message(highlight: true, **)`. Update the RBS generator to emit `(?highlight: bool) -> ::String` for members named detailed_message, consistent with the generated sig/errors.rbs. --- .../lib/aws-sdk-code-generator/rbs/error_list.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/rbs/error_list.rb b/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/rbs/error_list.rb index 4662ed0902a..685de1ab576 100644 --- a/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/rbs/error_list.rb +++ b/build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/rbs/error_list.rb @@ -11,10 +11,14 @@ def initialize(api:, module_name:) @errors = @api['shapes'].inject([]) do |es, (name, shape)| if error_struct?(shape) members = shape["members"].map do |member_name, member_body| - MethodSignature.new( - method_name: Underscore.underscore(member_name), - overloads: ["() -> #{Docstring.ucfirst(member_body['type'] ||'::String')}"] - ) + method_name = Underscore.underscore(member_name) + return_type = Docstring.ucfirst(member_body['type'] || '::String') + overload = if method_name == 'detailed_message' + "(?highlight: bool) -> #{return_type}" + else + "() -> #{return_type}" + end + MethodSignature.new(method_name: method_name, overloads: [overload]) end es << { name: name,