From ec583cdbfcb54ea0431ba48c54d0cdbb3ca4b6a0 Mon Sep 17 00:00:00 2001 From: Ariel Valentin Date: Mon, 12 Jan 2026 23:14:14 -0600 Subject: [PATCH 01/11] chore: Enable Rubocop Rules --- contrib/rubocop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/rubocop.yml b/contrib/rubocop.yml index 61dd9afe27..842f72e990 100644 --- a/contrib/rubocop.yml +++ b/contrib/rubocop.yml @@ -5,8 +5,8 @@ plugins: - rubocop-performance AllCops: - NewCops: disable - SuggestExtensions: false + NewCops: enable + SuggestExtensions: true TargetRubyVersion: "3.1" Exclude: - "vendor/**/*" From dc4edd097ab91dacde95eb48a4e16db18f655fa8 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 13:13:08 +1000 Subject: [PATCH 02/11] bump to 3.3 --- contrib/rubocop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/rubocop.yml b/contrib/rubocop.yml index 842f72e990..a7c138e26b 100644 --- a/contrib/rubocop.yml +++ b/contrib/rubocop.yml @@ -7,7 +7,7 @@ plugins: AllCops: NewCops: enable SuggestExtensions: true - TargetRubyVersion: "3.1" + TargetRubyVersion: "3.3" Exclude: - "vendor/**/*" From 5fc9fed6d362b916f81abdad65248ac1f261de92 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 13:33:29 +1000 Subject: [PATCH 03/11] Disable some linters based on contrib --- contrib/rubocop.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/contrib/rubocop.yml b/contrib/rubocop.yml index a7c138e26b..79c097a198 100644 --- a/contrib/rubocop.yml +++ b/contrib/rubocop.yml @@ -11,12 +11,18 @@ AllCops: Exclude: - "vendor/**/*" +Gemspec/DevelopmentDependencies: + Enabled: false + Layout/LineLength: Enabled: false Lint/ConstantDefinitionInBlock: Exclude: - "test/**/*" +Lint/EmptyBlock: + Exclude: + - "**/*test.rb" Lint/MissingSuper: Enabled: false Lint/UnusedMethodArgument: @@ -36,3 +42,11 @@ Style/NumericPredicate: Style/StringConcatenation: Exclude: - "test/**/*" + +Gemspec/RequireMFA: + # We probably want to figure out how to set this up for the organization + Enabled: false + +# we need to review the below +Minitest/EmptyLineBeforeAssertionMethods: + Enabled: false From 6365ecd36530e0f10e4837baabfd79d45acb0a0c Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 13:52:14 +1000 Subject: [PATCH 04/11] Disable additional RuboCop styles --- contrib/rubocop.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contrib/rubocop.yml b/contrib/rubocop.yml index 79c097a198..286763abdb 100644 --- a/contrib/rubocop.yml +++ b/contrib/rubocop.yml @@ -39,6 +39,10 @@ Style/ModuleFunction: Enabled: false Style/NumericPredicate: Enabled: false +Style/RedundantConstantBase: + Enabled: false +Style/RedundantRegexpEscape: + Enabled: false Style/StringConcatenation: Exclude: - "test/**/*" From b39a158382c0d228f52a71f3e7d900ef8d5bad69 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 15:25:47 +1000 Subject: [PATCH 05/11] More suppression/fixes --- common/.rubocop.yml | 4 ++++ common/lib/opentelemetry-common.rb | 2 +- common/lib/opentelemetry/common/http.rb | 2 +- common/lib/opentelemetry/common/propagation.rb | 4 ++-- .../common/propagation/rack_env_getter.rb | 3 +-- common/lib/opentelemetry/common/utilities.rb | 2 +- exporter/otlp-common/.rubocop.yml | 2 ++ exporter/otlp-http/.rubocop.yml | 8 ++++++++ exporter/otlp-logs/.rubocop.yml | 8 ++++++++ exporter/otlp-metrics/.rubocop.yml | 8 ++++++++ .../exporter/otlp/metrics/metrics_exporter.rb | 2 +- exporter/otlp/.rubocop.yml | 10 ++++++++++ .../otlp/lib/opentelemetry/exporter/otlp/exporter.rb | 2 +- exporter/zipkin/.rubocop.yml | 6 ++++++ propagator/b3/lib/opentelemetry-propagator-b3.rb | 2 +- propagator/b3/lib/opentelemetry/propagator/b3.rb | 8 ++++---- propagator/b3/lib/opentelemetry/propagator/b3/multi.rb | 2 +- .../b3/lib/opentelemetry/propagator/b3/single.rb | 2 +- propagator/jaeger/.rubocop.yml | 10 ++++++++++ .../jaeger/lib/opentelemetry-propagator-jaeger.rb | 2 +- .../jaeger/lib/opentelemetry/propagator/jaeger.rb | 2 +- registry/lib/opentelemetry-registry.rb | 2 +- registry/lib/opentelemetry/instrumentation.rb | 3 ++- registry/lib/opentelemetry/instrumentation/registry.rb | 2 +- test_helpers/lib/opentelemetry/test_helpers.rb | 1 + 25 files changed, 78 insertions(+), 21 deletions(-) diff --git a/common/.rubocop.yml b/common/.rubocop.yml index db98871e84..82a09439ff 100644 --- a/common/.rubocop.yml +++ b/common/.rubocop.yml @@ -16,3 +16,7 @@ Metrics/BlockLength: Naming/FileName: Exclude: - "lib/opentelemetry-common.rb" +Lint/AmbiguousRange: +Minitest/AssertPredicate: +Minitest/RefutePredicate: +Performance/MethodObjectAsBlock: diff --git a/common/lib/opentelemetry-common.rb b/common/lib/opentelemetry-common.rb index 49ede56132..2cc8c10f8e 100644 --- a/common/lib/opentelemetry-common.rb +++ b/common/lib/opentelemetry-common.rb @@ -4,4 +4,4 @@ # # SPDX-License-Identifier: Apache-2.0 -require_relative './opentelemetry/common' +require_relative 'opentelemetry/common' diff --git a/common/lib/opentelemetry/common/http.rb b/common/lib/opentelemetry/common/http.rb index d68047c00c..ca1c5022c1 100644 --- a/common/lib/opentelemetry/common/http.rb +++ b/common/lib/opentelemetry/common/http.rb @@ -12,4 +12,4 @@ module HTTP end end -require_relative './http/client_context' +require_relative 'http/client_context' diff --git a/common/lib/opentelemetry/common/propagation.rb b/common/lib/opentelemetry/common/propagation.rb index 35d1d11c5d..eb0277b6c7 100644 --- a/common/lib/opentelemetry/common/propagation.rb +++ b/common/lib/opentelemetry/common/propagation.rb @@ -4,8 +4,8 @@ # # SPDX-License-Identifier: Apache-2.0 -require_relative './propagation/rack_env_getter' -require_relative './propagation/symbol_key_getter' +require_relative 'propagation/rack_env_getter' +require_relative 'propagation/symbol_key_getter' module OpenTelemetry module Common diff --git a/common/lib/opentelemetry/common/propagation/rack_env_getter.rb b/common/lib/opentelemetry/common/propagation/rack_env_getter.rb index d51d84c66a..7c97082e80 100644 --- a/common/lib/opentelemetry/common/propagation/rack_env_getter.rb +++ b/common/lib/opentelemetry/common/propagation/rack_env_getter.rb @@ -29,8 +29,7 @@ def keys(carrier) private def to_rack_key(key) - # Use + for mutable string interpolation in pre-Ruby 3.0. - ret = +"HTTP_#{key}" + ret = "HTTP_#{key}" ret.tr!('-', '_') ret.upcase! ret diff --git a/common/lib/opentelemetry/common/utilities.rb b/common/lib/opentelemetry/common/utilities.rb index 6b524656df..af8759a41a 100644 --- a/common/lib/opentelemetry/common/utilities.rb +++ b/common/lib/opentelemetry/common/utilities.rb @@ -164,4 +164,4 @@ def valid_exporter?(exporter) end end -require_relative './http/client_context' +require_relative 'http/client_context' diff --git a/exporter/otlp-common/.rubocop.yml b/exporter/otlp-common/.rubocop.yml index e4a5d6fa5f..fbef3cd1fa 100644 --- a/exporter/otlp-common/.rubocop.yml +++ b/exporter/otlp-common/.rubocop.yml @@ -15,3 +15,5 @@ Metrics/PerceivedComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-exporter-otlp-common.rb" +Style/ObjectThen: + Enabled: false diff --git a/exporter/otlp-http/.rubocop.yml b/exporter/otlp-http/.rubocop.yml index 4f07d8989f..5aefaedf29 100644 --- a/exporter/otlp-http/.rubocop.yml +++ b/exporter/otlp-http/.rubocop.yml @@ -12,3 +12,11 @@ Metrics/PerceivedComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-exporter-otlp-http.rb" +Lint/DuplicateBranch: + Enabled: false +Lint/SuppressedExceptionInNumberConversion: + Enabled: false +Performance/MapCompact: + Enabled: false +Performance/MethodObjectAsBlock: + Enabled: false diff --git a/exporter/otlp-logs/.rubocop.yml b/exporter/otlp-logs/.rubocop.yml index 5c3cff545c..a101774638 100644 --- a/exporter/otlp-logs/.rubocop.yml +++ b/exporter/otlp-logs/.rubocop.yml @@ -17,3 +17,11 @@ Style/FrozenStringLiteralComment: - gemfiles/**/* Metrics/BlockLength: Enabled: false +Lint/DuplicateBranch: + Enabled: false +Lint/SuppressedExceptionInNumberConversion: + Enabled: false +Performance/MapCompact: + Enabled: false +Performance/MethodObjectAsBlock: + Enabled: false diff --git a/exporter/otlp-metrics/.rubocop.yml b/exporter/otlp-metrics/.rubocop.yml index 52c76f71be..9af1f3804c 100644 --- a/exporter/otlp-metrics/.rubocop.yml +++ b/exporter/otlp-metrics/.rubocop.yml @@ -29,3 +29,11 @@ Metrics/BlockLength: Naming/FileName: Exclude: - "lib/opentelemetry-exporter-otlp-metrics.rb" +Lint/DuplicateBranch: + Enabled: false +Lint/SuppressedExceptionInNumberConversion: + Enabled: false +Performance/MapCompact: + Enabled: false +Performance/MethodObjectAsBlock: + Enabled: false diff --git a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb index 9157e1fdfe..7b488f767d 100644 --- a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb +++ b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/metrics_exporter.rb @@ -19,7 +19,7 @@ require 'opentelemetry/metrics' require 'opentelemetry/sdk/metrics' -require_relative './util' +require_relative 'util' module OpenTelemetry module Exporter diff --git a/exporter/otlp/.rubocop.yml b/exporter/otlp/.rubocop.yml index 8206eb72b1..2d820d1ec1 100644 --- a/exporter/otlp/.rubocop.yml +++ b/exporter/otlp/.rubocop.yml @@ -21,3 +21,13 @@ Metrics/BlockLength: Naming/FileName: Exclude: - "lib/opentelemetry-exporter-otlp.rb" +Lint/DuplicateBranch: + Enabled: false +Lint/SuppressedExceptionInNumberConversion: + Enabled: false +Performance/MapCompact: + Enabled: false +Performance/MethodObjectAsBlock: + Enabled: false +Style/ObjectThen: + Enabled: false diff --git a/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb b/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb index 9647177f61..30655f901a 100644 --- a/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb +++ b/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb @@ -418,7 +418,7 @@ def as_otlp_any_value(value) end def prepare_endpoint(endpoint) - endpoint ||= ENV['OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'] + endpoint ||= ENV.fetch('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', nil) if endpoint.nil? endpoint = ENV['OTEL_EXPORTER_OTLP_ENDPOINT'] || 'http://localhost:4318' endpoint += '/' unless endpoint.end_with?('/') diff --git a/exporter/zipkin/.rubocop.yml b/exporter/zipkin/.rubocop.yml index 6cb190171d..391fc7d3c7 100644 --- a/exporter/zipkin/.rubocop.yml +++ b/exporter/zipkin/.rubocop.yml @@ -20,3 +20,9 @@ Naming/FileName: - "lib/opentelemetry-exporter-zipkin.rb" Style/ExplicitBlockArgument: Enabled: false +Lint/AmbiguousOperatorPrecedence: + Enabled: false +Lint/SuppressedExceptionInNumberConversion: + Enabled: false +Minitest/SkipEnsure: + Enabled: false diff --git a/propagator/b3/lib/opentelemetry-propagator-b3.rb b/propagator/b3/lib/opentelemetry-propagator-b3.rb index 5180d87832..85997ee49b 100644 --- a/propagator/b3/lib/opentelemetry-propagator-b3.rb +++ b/propagator/b3/lib/opentelemetry-propagator-b3.rb @@ -5,4 +5,4 @@ # SPDX-License-Identifier: Apache-2.0 require 'opentelemetry-api' -require_relative './opentelemetry/propagator/b3' +require_relative 'opentelemetry/propagator/b3' diff --git a/propagator/b3/lib/opentelemetry/propagator/b3.rb b/propagator/b3/lib/opentelemetry/propagator/b3.rb index 1032b14bd2..b3327c3292 100644 --- a/propagator/b3/lib/opentelemetry/propagator/b3.rb +++ b/propagator/b3/lib/opentelemetry/propagator/b3.rb @@ -35,7 +35,7 @@ def debug?(context) end end -require_relative './b3/version' -require_relative './b3/text_map_extractor' -require_relative './b3/multi' -require_relative './b3/single' +require_relative 'b3/version' +require_relative 'b3/text_map_extractor' +require_relative 'b3/multi' +require_relative 'b3/single' diff --git a/propagator/b3/lib/opentelemetry/propagator/b3/multi.rb b/propagator/b3/lib/opentelemetry/propagator/b3/multi.rb index 5d3af9be8c..2bfe4eb13c 100644 --- a/propagator/b3/lib/opentelemetry/propagator/b3/multi.rb +++ b/propagator/b3/lib/opentelemetry/propagator/b3/multi.rb @@ -4,7 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -require_relative './multi/text_map_propagator' +require_relative 'multi/text_map_propagator' # OpenTelemetry is an open source observability framework, providing a # general-purpose API, SDK, and related tools required for the instrumentation diff --git a/propagator/b3/lib/opentelemetry/propagator/b3/single.rb b/propagator/b3/lib/opentelemetry/propagator/b3/single.rb index f53ceb63ba..4ca2eb0b98 100644 --- a/propagator/b3/lib/opentelemetry/propagator/b3/single.rb +++ b/propagator/b3/lib/opentelemetry/propagator/b3/single.rb @@ -4,7 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -require_relative './single/text_map_propagator' +require_relative 'single/text_map_propagator' # OpenTelemetry is an open source observability framework, providing a # general-purpose API, SDK, and related tools required for the instrumentation diff --git a/propagator/jaeger/.rubocop.yml b/propagator/jaeger/.rubocop.yml index 8d589790b2..5081253fe9 100644 --- a/propagator/jaeger/.rubocop.yml +++ b/propagator/jaeger/.rubocop.yml @@ -9,3 +9,13 @@ Metrics/BlockLength: Naming/FileName: Exclude: - 'lib/opentelemetry-propagator-jaeger.rb' + +Performance/RedundantSplitRegexpArgument: + Enabled: false + +Style/BitwisePredicate: + Enabled: false +Style/NegatedIfElseCondition: + Enabled: false +Style/RedundantRegexpArgument: + Enabled: false diff --git a/propagator/jaeger/lib/opentelemetry-propagator-jaeger.rb b/propagator/jaeger/lib/opentelemetry-propagator-jaeger.rb index b7647f672d..bcf95dad80 100644 --- a/propagator/jaeger/lib/opentelemetry-propagator-jaeger.rb +++ b/propagator/jaeger/lib/opentelemetry-propagator-jaeger.rb @@ -5,4 +5,4 @@ # SPDX-License-Identifier: Apache-2.0 require 'opentelemetry-api' -require_relative './opentelemetry/propagator/jaeger' +require_relative 'opentelemetry/propagator/jaeger' diff --git a/propagator/jaeger/lib/opentelemetry/propagator/jaeger.rb b/propagator/jaeger/lib/opentelemetry/propagator/jaeger.rb index c3bd020eb0..8b0583e4aa 100644 --- a/propagator/jaeger/lib/opentelemetry/propagator/jaeger.rb +++ b/propagator/jaeger/lib/opentelemetry/propagator/jaeger.rb @@ -4,7 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -require_relative './jaeger/text_map_propagator' +require_relative 'jaeger/text_map_propagator' # OpenTelemetry is an open source observability framework, providing a # general-purpose API, SDK, and related tools required for the instrumentation diff --git a/registry/lib/opentelemetry-registry.rb b/registry/lib/opentelemetry-registry.rb index 8efeff3e95..915096c5fc 100644 --- a/registry/lib/opentelemetry-registry.rb +++ b/registry/lib/opentelemetry-registry.rb @@ -5,4 +5,4 @@ # SPDX-License-Identifier: Apache-2.0 require 'opentelemetry' -require_relative './opentelemetry/instrumentation' +require_relative 'opentelemetry/instrumentation' diff --git a/registry/lib/opentelemetry/instrumentation.rb b/registry/lib/opentelemetry/instrumentation.rb index d87aa8426c..1c58129fad 100644 --- a/registry/lib/opentelemetry/instrumentation.rb +++ b/registry/lib/opentelemetry/instrumentation.rb @@ -10,12 +10,13 @@ # # The OpenTelemetry module provides global accessors for telemetry objects. # See the documentation for the `opentelemetry-api` gem for details. -require_relative './instrumentation/registry' +require_relative 'instrumentation/registry' module OpenTelemetry # Instrumentation should be able to handle the case when the library is not installed on a user's system. module Instrumentation extend self + # @return [Registry] registry containing all known # instrumentation def registry diff --git a/registry/lib/opentelemetry/instrumentation/registry.rb b/registry/lib/opentelemetry/instrumentation/registry.rb index 4fa21526bd..3bde5b1ea3 100644 --- a/registry/lib/opentelemetry/instrumentation/registry.rb +++ b/registry/lib/opentelemetry/instrumentation/registry.rb @@ -89,4 +89,4 @@ def install_instrumentation(instrumentation, config) end end -require_relative './registry/version' +require_relative 'registry/version' diff --git a/test_helpers/lib/opentelemetry/test_helpers.rb b/test_helpers/lib/opentelemetry/test_helpers.rb index 9a7a86f968..995e2de86f 100644 --- a/test_helpers/lib/opentelemetry/test_helpers.rb +++ b/test_helpers/lib/opentelemetry/test_helpers.rb @@ -11,6 +11,7 @@ module OpenTelemetry # OpenTelemetry Ruby gems. module TestHelpers extend self + NULL_LOGGER = Logger.new(File::NULL) # reset_opentelemetry is a test helper used to clear From 4762312a51c55685c5e299d7fdc8100fcf6efca6 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 16:27:48 +1000 Subject: [PATCH 06/11] More rubocop changes --- api/.rubocop.yml | 18 ++++++++++++++++++ .../trace/propagation/trace_context.rb | 1 + common/.rubocop.yml | 4 ++++ exporter/zipkin/test/test_helper.rb | 1 + logs_api/.rubocop.yml | 2 ++ metrics_api/.rubocop.yml | 4 ++++ metrics_sdk/.rubocop.yml | 16 ++++++++++++++++ .../jaeger/test/text_map_propagator_test.rb | 3 +-- sdk/.rubocop.yml | 16 ++++++++++++++++ .../opentelemetry/sdk/resources/resource.rb | 4 ++-- .../sdk/trace/export/batch_span_processor.rb | 2 +- .../opentelemetry/sdk/trace/tracer_provider.rb | 2 +- sdk_experimental/.rubocop.yml | 8 ++++++++ 13 files changed, 75 insertions(+), 6 deletions(-) diff --git a/api/.rubocop.yml b/api/.rubocop.yml index 57f00774a0..cf9fa1020c 100644 --- a/api/.rubocop.yml +++ b/api/.rubocop.yml @@ -5,3 +5,21 @@ Naming/FileName: - "lib/opentelemetry-api.rb" Style/ExplicitBlockArgument: Enabled: false +Lint/AmbiguousOperatorPrecedence: + Enabled: false +Minitest/AssertPredicate: + Enabled: false +Minitest/RefutePredicate: + Enabled: false +Performance/MethodObjectAsBlock: + Enabled: false +Style/BitwisePredicate: + Enabled: false +Style/EmptyClassDefinition: + Enabled: false +Style/HashConversion: + Enabled: false +Style/NegatedIfElseCondition: + Enabled: false +Style/OneClassPerFile: + Enabled: false diff --git a/api/lib/opentelemetry/trace/propagation/trace_context.rb b/api/lib/opentelemetry/trace/propagation/trace_context.rb index 1030809896..ffff24ed7b 100644 --- a/api/lib/opentelemetry/trace/propagation/trace_context.rb +++ b/api/lib/opentelemetry/trace/propagation/trace_context.rb @@ -14,6 +14,7 @@ module Propagation # for context propagation in the W3C Trace Context format. module TraceContext extend self + TEXT_MAP_PROPAGATOR = TextMapPropagator.new private_constant :TEXT_MAP_PROPAGATOR diff --git a/common/.rubocop.yml b/common/.rubocop.yml index 82a09439ff..d2808b99b9 100644 --- a/common/.rubocop.yml +++ b/common/.rubocop.yml @@ -17,6 +17,10 @@ Naming/FileName: Exclude: - "lib/opentelemetry-common.rb" Lint/AmbiguousRange: + Enabled: false Minitest/AssertPredicate: + Enabled: false Minitest/RefutePredicate: + Enabled: false Performance/MethodObjectAsBlock: + Enabled: false diff --git a/exporter/zipkin/test/test_helper.rb b/exporter/zipkin/test/test_helper.rb index 1e5a4a5152..9d760d051d 100644 --- a/exporter/zipkin/test/test_helper.rb +++ b/exporter/zipkin/test/test_helper.rb @@ -42,6 +42,7 @@ def create_span_data(status: nil, kind: nil, attributes: nil, total_recorded_att # Test helper for Zipkin Exporter class InMemoryMetricsReporter include OpenTelemetry::SDK::Trace::Export::MetricsReporter + attr_reader :counters, :records, :observes def initialize diff --git a/logs_api/.rubocop.yml b/logs_api/.rubocop.yml index 28ba0fcc75..50f675185c 100644 --- a/logs_api/.rubocop.yml +++ b/logs_api/.rubocop.yml @@ -10,3 +10,5 @@ Metrics/CyclomaticComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-logs-api.rb" +Lint/EmptyClass: + Enabled: false diff --git a/metrics_api/.rubocop.yml b/metrics_api/.rubocop.yml index c7539fe342..d8f77bb0b2 100644 --- a/metrics_api/.rubocop.yml +++ b/metrics_api/.rubocop.yml @@ -11,3 +11,7 @@ Metrics/CyclomaticComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-metrics-api.rb" +Minitest/AssertKindOf: + Enabled: false +Style/EmptyClassDefinition: + Enabled: false diff --git a/metrics_sdk/.rubocop.yml b/metrics_sdk/.rubocop.yml index 3c6f491adc..54a042e341 100644 --- a/metrics_sdk/.rubocop.yml +++ b/metrics_sdk/.rubocop.yml @@ -11,3 +11,19 @@ Metrics/CyclomaticComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-metrics-sdk.rb" +Lint/AmbiguousRange: + Enabled: false +Naming/BlockForwarding: + Enabled: false +Naming/PredicateMethod: + Enabled: false +Style/ArgumentsForwarding: + Enabled: false +Style/EmptyClassDefinition: + Enabled: false +Style/FetchEnvVar: + Enabled: false +Style/MapIntoArray: + Enabled: false +Style/SuperArguments: + Enabled: false diff --git a/propagator/jaeger/test/text_map_propagator_test.rb b/propagator/jaeger/test/text_map_propagator_test.rb index d070f46191..984de6cc68 100644 --- a/propagator/jaeger/test/text_map_propagator_test.rb +++ b/propagator/jaeger/test/text_map_propagator_test.rb @@ -265,8 +265,7 @@ def create_context(trace_id:, it 'injects to rack keys' do rack_env_setter = Object.new def rack_env_setter.set(carrier, key, value) - # Use + for mutable string interpolation in pre-Ruby 3.0. - rack_key = +"HTTP_#{key}" + rack_key = "HTTP_#{key}" rack_key.tr!('-', '_') rack_key.upcase! carrier[rack_key] = value diff --git a/sdk/.rubocop.yml b/sdk/.rubocop.yml index d37dda60aa..30509ae4c7 100644 --- a/sdk/.rubocop.yml +++ b/sdk/.rubocop.yml @@ -8,3 +8,19 @@ Naming/FileName: Style/ExplicitBlockArgument: Enabled: false +Lint/AmbiguousOperatorPrecedence: + Enabled: false +Minitest/UselessAssertion: + Enabled: false +Naming/BlockForwarding: + Enabled: false +Naming/PredicateMethod: + Enabled: false +Style/ArgumentsForwarding: + Enabled: false +Style/EmptyClassDefinition: + Enabled: false +Style/NegatedIfElseCondition: + Enabled: false +Style/PredicateWithKind: + Enabled: false diff --git a/sdk/lib/opentelemetry/sdk/resources/resource.rb b/sdk/lib/opentelemetry/sdk/resources/resource.rb index 4a96256944..53e55c5354 100644 --- a/sdk/lib/opentelemetry/sdk/resources/resource.rb +++ b/sdk/lib/opentelemetry/sdk/resources/resource.rb @@ -41,7 +41,7 @@ def telemetry_sdk SemanticConventions::Resource::TELEMETRY_SDK_VERSION => OpenTelemetry::SDK::VERSION } - resource_pairs = ENV['OTEL_RESOURCE_ATTRIBUTES'] + resource_pairs = ENV.fetch('OTEL_RESOURCE_ATTRIBUTES', nil) return create(resource_attributes) unless resource_pairs.is_a?(String) resource_pairs.split(',').each do |pair| @@ -68,7 +68,7 @@ def process private def service_name_from_env - service_name = ENV['OTEL_SERVICE_NAME'] + service_name = ENV.fetch('OTEL_SERVICE_NAME', nil) create(SemanticConventions::Resource::SERVICE_NAME => service_name) unless service_name.nil? end end diff --git a/sdk/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb b/sdk/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb index 18df3cc6b5..66ec132739 100644 --- a/sdk/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb +++ b/sdk/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb @@ -49,7 +49,7 @@ def initialize(exporter, schedule_delay: Float(ENV.fetch('OTEL_BSP_SCHEDULE_DELAY', 5_000)), max_queue_size: Integer(ENV.fetch('OTEL_BSP_MAX_QUEUE_SIZE', 2048)), max_export_batch_size: Integer(ENV.fetch('OTEL_BSP_MAX_EXPORT_BATCH_SIZE', 512)), - start_thread_on_boot: String(ENV['OTEL_RUBY_BSP_START_THREAD_ON_BOOT']) !~ /false/i, + start_thread_on_boot: String(ENV.fetch('OTEL_RUBY_BSP_START_THREAD_ON_BOOT', nil)) !~ /false/i, metrics_reporter: nil) raise ArgumentError if max_export_batch_size > max_queue_size raise ArgumentError, "exporter #{exporter.inspect} does not appear to be a valid exporter" unless Common::Utilities.valid_exporter?(exporter) diff --git a/sdk/lib/opentelemetry/sdk/trace/tracer_provider.rb b/sdk/lib/opentelemetry/sdk/trace/tracer_provider.rb index 3569451635..d1689a9d45 100644 --- a/sdk/lib/opentelemetry/sdk/trace/tracer_provider.rb +++ b/sdk/lib/opentelemetry/sdk/trace/tracer_provider.rb @@ -170,7 +170,7 @@ def internal_start_span(name, kind, attributes, links, start_timestamp, parent_c private def sampler_from_environment(default_sampler) - case ENV['OTEL_TRACES_SAMPLER'] + case ENV.fetch('OTEL_TRACES_SAMPLER', nil) when 'always_on' then Samplers::ALWAYS_ON when 'always_off' then Samplers::ALWAYS_OFF when 'traceidratio' then Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0))) diff --git a/sdk_experimental/.rubocop.yml b/sdk_experimental/.rubocop.yml index 31998db8e6..f1dbb83455 100644 --- a/sdk_experimental/.rubocop.yml +++ b/sdk_experimental/.rubocop.yml @@ -14,3 +14,11 @@ Naming/FileName: - "lib/opentelemetry-sdk-experimental.rb" Naming/MethodParameterName: Enabled: false +Lint/AmbiguousOperatorPrecedence: + Enabled: false +Lint/DuplicateBranch: + Enabled: false +Naming/PredicateMethod: + Enabled: false +Style/NegatedIfElseCondition: + Enabled: false From 8b13291025f87e23a77c9496c0cfb1e3a112ecad Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 16:49:10 +1000 Subject: [PATCH 07/11] More fixes --- api/benchmarks/context_bench.rb | 16 ++++++++-------- .../baggage/propagation/text_map_propagator.rb | 2 +- api/lib/opentelemetry/context.rb | 2 +- .../context/propagation/rack_env_getter.rb | 2 +- api/lib/opentelemetry/trace/tracestate.rb | 2 +- api/test/opentelemetry/context_test.rb | 4 ++-- api/test/opentelemetry/trace/trace_flags_test.rb | 2 +- api/test/opentelemetry/trace/tracestate_test.rb | 2 +- metrics_sdk/.rubocop.yml | 5 +++++ sdk/.rubocop.yml | 4 ++++ 10 files changed, 25 insertions(+), 16 deletions(-) diff --git a/api/benchmarks/context_bench.rb b/api/benchmarks/context_bench.rb index 185d393567..f9889b240d 100644 --- a/api/benchmarks/context_bench.rb +++ b/api/benchmarks/context_bench.rb @@ -94,7 +94,7 @@ def set_value(key, value) FiberLocalVarContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName FiberLocalVarContext.new(@entries.merge(values)) end @@ -188,7 +188,7 @@ def set_value(key, value) FiberAttributeContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName FiberAttributeContext.new(@entries.merge(values)) end @@ -287,7 +287,7 @@ def set_value(key, value) LinkedListContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName LinkedListContext.new(@entries.merge(values)) end @@ -379,7 +379,7 @@ def set_value(key, value) new_entries end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName merge(values) end @@ -472,7 +472,7 @@ def set_value(key, value) ArrayContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName ArrayContext.new(@entries.merge(values)) end @@ -591,7 +591,7 @@ def set_value(key, value) FiberLocalArrayContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName FiberLocalArrayContext.new(@entries.merge(values)) end @@ -684,7 +684,7 @@ def set_value(key, value) ImmutableArrayContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName ImmutableArrayContext.new(@entries.merge(values)) end @@ -777,7 +777,7 @@ def set_value(key, value) FiberLocalImmutableArrayContext.new(new_entries) end - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName FiberLocalImmutableArrayContext.new(@entries.merge(values)) end diff --git a/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb b/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb index 0197c2f9c3..fde67fff0f 100644 --- a/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb +++ b/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb @@ -99,7 +99,7 @@ def encode(baggage) end def encode_value(key, entry) - result = +"#{URI.encode_uri_component(key.to_s)}=#{URI.encode_uri_component(entry.value.to_s)}" + result = "#{URI.encode_uri_component(key.to_s)}=#{URI.encode_uri_component(entry.value.to_s)}" # We preserve metadata received on extract and assume it's already formatted # for transport. It's sent as-is without further processing. result << ";#{entry.metadata}" if entry.metadata diff --git a/api/lib/opentelemetry/context.rb b/api/lib/opentelemetry/context.rb index de4e2565b8..c118f1cd07 100644 --- a/api/lib/opentelemetry/context.rb +++ b/api/lib/opentelemetry/context.rb @@ -162,7 +162,7 @@ def set_value(key, value) # entries. # @param [Object] value Object to be stored under key # @return [Context] - def set_values(values) # rubocop:disable Naming/AccessorMethodName: + def set_values(values) # rubocop:disable Naming/AccessorMethodName Context.new(@entries.merge(values)) end diff --git a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb index 27e83fd736..d81637d005 100644 --- a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb +++ b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb @@ -33,7 +33,7 @@ def keys(carrier) def to_rack_key(key) # Use + for mutable string interpolation in pre-Ruby 3.0. - ret = +"HTTP_#{key}" + ret = "HTTP_#{key}" ret.tr!('-', '_') ret.upcase! ret diff --git a/api/lib/opentelemetry/trace/tracestate.rb b/api/lib/opentelemetry/trace/tracestate.rb index c4718d4de7..8f206760d5 100644 --- a/api/lib/opentelemetry/trace/tracestate.rb +++ b/api/lib/opentelemetry/trace/tracestate.rb @@ -18,7 +18,7 @@ class << self # @param [String] header Encoding of the tracestate header defined by # the W3C Trace Context specification https://www.w3.org/TR/trace-context/ # @return [Tracestate] A new Tracestate instance or DEFAULT - def from_string(header) # rubocop:disable Metrics/CyclomaticComplexity: + def from_string(header) # rubocop:disable Metrics/CyclomaticComplexity return DEFAULT if header.nil? || header.empty? hash = header.split(',').each_with_object({}) do |member, memo| diff --git a/api/test/opentelemetry/context_test.rb b/api/test/opentelemetry/context_test.rb index db7ae8959e..5fc2fc45fb 100644 --- a/api/test/opentelemetry/context_test.rb +++ b/api/test/opentelemetry/context_test.rb @@ -302,7 +302,7 @@ # Manipulate _this fiber's_ context stack. Context.attach(new_context) ensure - locals.each { |k, _| t2[k] = nil } # rubocop:disable Style/HashEachMethods (locals is not a Hash) + locals.each { |k, _| t2[k] = nil } # rubocop:disable Style/HashEachMethods --(locals is not a Hash) end.resume end _(log_stream.string).must_be_empty @@ -348,7 +348,7 @@ # Manipulate _this thread's_ context stack. Context.attach(new_context) ensure - locals.each { |k, _| t2[k] = nil } # rubocop:disable Style/HashEachMethods (locals is not a Hash) + locals.each { |k, _| t2[k] = nil } # rubocop:disable Style/HashEachMethods --(locals is not a Hash) end.join end _(log_stream.string).must_be_empty diff --git a/api/test/opentelemetry/trace/trace_flags_test.rb b/api/test/opentelemetry/trace/trace_flags_test.rb index d949a51d00..3d454fe248 100644 --- a/api/test/opentelemetry/trace/trace_flags_test.rb +++ b/api/test/opentelemetry/trace/trace_flags_test.rb @@ -5,7 +5,7 @@ describe OpenTelemetry::Trace::TraceFlags do describe '.new' do it 'is private' do - _(-> { OpenTelemetry::Trace::TraceFlags.new(0) })\ + _(-> { OpenTelemetry::Trace::TraceFlags.new(0) }) .must_raise(NoMethodError) end end diff --git a/api/test/opentelemetry/trace/tracestate_test.rb b/api/test/opentelemetry/trace/tracestate_test.rb index 55108dd41a..d93b64f56d 100644 --- a/api/test/opentelemetry/trace/tracestate_test.rb +++ b/api/test/opentelemetry/trace/tracestate_test.rb @@ -5,7 +5,7 @@ describe OpenTelemetry::Trace::Tracestate do describe '.new' do it 'is private' do - _(-> { OpenTelemetry::Trace::Tracestate.new({}) })\ + _(-> { OpenTelemetry::Trace::Tracestate.new({}) }) .must_raise(NoMethodError) end end diff --git a/metrics_sdk/.rubocop.yml b/metrics_sdk/.rubocop.yml index 54a042e341..7ea0fb5481 100644 --- a/metrics_sdk/.rubocop.yml +++ b/metrics_sdk/.rubocop.yml @@ -11,19 +11,24 @@ Metrics/CyclomaticComplexity: Naming/FileName: Exclude: - "lib/opentelemetry-metrics-sdk.rb" +Lint/AmbiguousOperatorPrecedence: Lint/AmbiguousRange: Enabled: false Naming/BlockForwarding: Enabled: false Naming/PredicateMethod: Enabled: false +Performance/CollectionLiteralInLoop: Style/ArgumentsForwarding: Enabled: false +Style/CollectionQuerying: Style/EmptyClassDefinition: Enabled: false Style/FetchEnvVar: Enabled: false Style/MapIntoArray: Enabled: false +Style/NilLambda: Style/SuperArguments: Enabled: false +Lint/SymbolConversion: diff --git a/sdk/.rubocop.yml b/sdk/.rubocop.yml index 30509ae4c7..3d887be965 100644 --- a/sdk/.rubocop.yml +++ b/sdk/.rubocop.yml @@ -10,6 +10,8 @@ Style/ExplicitBlockArgument: Enabled: false Lint/AmbiguousOperatorPrecedence: Enabled: false +Lint/EmptyClass: + Enabled: false Minitest/UselessAssertion: Enabled: false Naming/BlockForwarding: @@ -20,6 +22,8 @@ Style/ArgumentsForwarding: Enabled: false Style/EmptyClassDefinition: Enabled: false +Style/HashConversion: + Enabled: false Style/NegatedIfElseCondition: Enabled: false Style/PredicateWithKind: From 7e7a7a421eaaea2495801cb6cdcf5e160219aea7 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 7 May 2026 16:57:33 +1000 Subject: [PATCH 08/11] typo fix --- metrics_sdk/.rubocop.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/metrics_sdk/.rubocop.yml b/metrics_sdk/.rubocop.yml index 7ea0fb5481..b43862aad6 100644 --- a/metrics_sdk/.rubocop.yml +++ b/metrics_sdk/.rubocop.yml @@ -12,6 +12,7 @@ Naming/FileName: Exclude: - "lib/opentelemetry-metrics-sdk.rb" Lint/AmbiguousOperatorPrecedence: + Enabled: false Lint/AmbiguousRange: Enabled: false Naming/BlockForwarding: @@ -19,9 +20,11 @@ Naming/BlockForwarding: Naming/PredicateMethod: Enabled: false Performance/CollectionLiteralInLoop: + Enabled: false Style/ArgumentsForwarding: Enabled: false Style/CollectionQuerying: + Enabled: false Style/EmptyClassDefinition: Enabled: false Style/FetchEnvVar: @@ -29,6 +32,8 @@ Style/FetchEnvVar: Style/MapIntoArray: Enabled: false Style/NilLambda: + Enabled: false Style/SuperArguments: Enabled: false Lint/SymbolConversion: + Enabled: false From bd74052ea813f9c7ebbf530ca2877a021dd6ff5e Mon Sep 17 00:00:00 2001 From: James Thompson Date: Fri, 8 May 2026 11:09:55 +1000 Subject: [PATCH 09/11] Update rack_env_getter.rb Co-authored-by: Kayla Reopelle <87386821+kaylareopelle@users.noreply.github.com> --- api/lib/opentelemetry/context/propagation/rack_env_getter.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb index d81637d005..8b601dfc39 100644 --- a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb +++ b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb @@ -32,7 +32,6 @@ def keys(carrier) private def to_rack_key(key) - # Use + for mutable string interpolation in pre-Ruby 3.0. ret = "HTTP_#{key}" ret.tr!('-', '_') ret.upcase! From 6ae29825e6d19f25f3a234abac26ff676df032dc Mon Sep 17 00:00:00 2001 From: James Thompson Date: Sat, 9 May 2026 11:34:59 +1000 Subject: [PATCH 10/11] Update .rubocop.yml --- logs_api/.rubocop.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/logs_api/.rubocop.yml b/logs_api/.rubocop.yml index 50f675185c..53fdb4b20f 100644 --- a/logs_api/.rubocop.yml +++ b/logs_api/.rubocop.yml @@ -12,3 +12,5 @@ Naming/FileName: - "lib/opentelemetry-logs-api.rb" Lint/EmptyClass: Enabled: false +Style/ReduceToHash: + Enabled: false From b6805d53852b04a04a4f00efd5d9fda7f9195ca0 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Wed, 13 May 2026 11:54:13 +1000 Subject: [PATCH 11/11] bump where necessary --- api/Gemfile | 2 +- logs_api/Gemfile | 2 +- metrics_api/Gemfile | 2 +- metrics_sdk/Gemfile | 2 +- sdk/Gemfile | 2 +- sdk_experimental/Gemfile | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/Gemfile b/api/Gemfile index 20463b7eb2..c65a396f3f 100644 --- a/api/Gemfile +++ b/api/Gemfile @@ -12,7 +12,7 @@ group :test, :development do gem 'benchmark-ips', '~> 2.14.0' gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1' diff --git a/logs_api/Gemfile b/logs_api/Gemfile index 79ff8feb51..d1a0063cbb 100644 --- a/logs_api/Gemfile +++ b/logs_api/Gemfile @@ -13,7 +13,7 @@ group :test, :development do gem 'logger', '~> 1.7.0' # should move to appraisals gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1' diff --git a/metrics_api/Gemfile b/metrics_api/Gemfile index 71f599ebd9..9740ff19b8 100644 --- a/metrics_api/Gemfile +++ b/metrics_api/Gemfile @@ -12,7 +12,7 @@ group :test, :development do gem 'benchmark-ips', '~> 2.14.0' gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1' diff --git a/metrics_sdk/Gemfile b/metrics_sdk/Gemfile index d2b9bd2a4c..677c913ef0 100644 --- a/metrics_sdk/Gemfile +++ b/metrics_sdk/Gemfile @@ -11,7 +11,7 @@ gemspec group :test, :development do gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1' diff --git a/sdk/Gemfile b/sdk/Gemfile index 383e2b6c56..8624a951bb 100644 --- a/sdk/Gemfile +++ b/sdk/Gemfile @@ -12,7 +12,7 @@ group :test, :development do gem 'opentelemetry-instrumentation-base', '~> 0.26.0' gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1' diff --git a/sdk_experimental/Gemfile b/sdk_experimental/Gemfile index 8cfc44c34a..0e982bf0b8 100644 --- a/sdk_experimental/Gemfile +++ b/sdk_experimental/Gemfile @@ -11,7 +11,7 @@ gemspec group :test, :development do gem 'minitest', '~> 5.27.0' gem 'rake', '~> 13.3.0' - gem 'rubocop', '~> 1.75.0' + gem 'rubocop', '~> 1.86.0' gem 'rubocop-minitest', '~> 0.38.0' gem 'rubocop-performance', '~> 1.25.0' gem 'rubocop-rake', '~> 0.7.1'