From 4c7f4517b1ac9e88a4303531591ed35cf9873f2e Mon Sep 17 00:00:00 2001 From: Scott Gerring Date: Mon, 10 Mar 2025 13:08:13 +0100 Subject: [PATCH 1/2] chore: fix if-let-rescope lint --- Cargo.toml | 1 - opentelemetry-otlp/src/exporter/tonic/mod.rs | 6 ++--- opentelemetry-sdk/src/growable_array.rs | 6 ++--- .../src/logs/simple_log_processor.rs | 6 ++--- .../src/metrics/internal/aggregate.rs | 6 ++--- .../metrics/internal/exponential_histogram.rs | 12 +++++----- opentelemetry-sdk/src/metrics/internal/mod.rs | 24 +++++++++---------- .../src/metrics/meter_provider.rs | 12 +++++----- .../src/metrics/periodic_reader.rs | 12 +++++----- opentelemetry-sdk/src/trace/span_processor.rs | 6 ++--- opentelemetry-zipkin/src/exporter/mod.rs | 6 ++--- opentelemetry/src/context.rs | 12 +++++----- opentelemetry/src/global/metrics.rs | 12 +++++----- opentelemetry/src/trace/context.rs | 6 ++--- 14 files changed, 63 insertions(+), 64 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 510ab8d634..e8c7810e88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -89,7 +89,6 @@ opentelemetry-stdout = { path = "opentelemetry-stdout" } rust_2024_compatibility = { level = "warn", priority = -1 } # No need to enable those, because it either not needed or results in ugly syntax edition_2024_expr_fragment_specifier = "allow" -if_let_rescope = "allow" tail_expr_drop_order = "allow" [workspace.lints.clippy] diff --git a/opentelemetry-otlp/src/exporter/tonic/mod.rs b/opentelemetry-otlp/src/exporter/tonic/mod.rs index 140c17d534..a9e665ac77 100644 --- a/opentelemetry-otlp/src/exporter/tonic/mod.rs +++ b/opentelemetry-otlp/src/exporter/tonic/mod.rs @@ -244,15 +244,15 @@ impl TonicExporterBuilder { &self, env_override: &str, ) -> Result, crate::Error> { - if let Some(compression) = self.tonic_config.compression { + match self.tonic_config.compression { Some(compression) => { Ok(Some(compression.try_into()?)) - } else if let Ok(compression) = env::var(env_override) { + } _ => if let Ok(compression) = env::var(env_override) { Ok(Some(compression.parse::()?.try_into()?)) } else if let Ok(compression) = env::var(OTEL_EXPORTER_OTLP_COMPRESSION) { Ok(Some(compression.parse::()?.try_into()?)) } else { Ok(None) - } + }} } /// Build a new tonic log exporter diff --git a/opentelemetry-sdk/src/growable_array.rs b/opentelemetry-sdk/src/growable_array.rs index f174bedea2..f2f34f27be 100644 --- a/opentelemetry-sdk/src/growable_array.rs +++ b/opentelemetry-sdk/src/growable_array.rs @@ -73,11 +73,11 @@ impl< pub(crate) fn get(&self, index: usize) -> Option<&T> { if index < self.count { Some(&self.inline[index]) - } else if let Some(ref overflow) = self.overflow { + } else { match self.overflow { Some(ref overflow) => { overflow.get(index - MAX_INLINE_CAPACITY) - } else { + } _ => { None - } + }}} } /// Returns the number of elements in the `GrowableArray`. diff --git a/opentelemetry-sdk/src/logs/simple_log_processor.rs b/opentelemetry-sdk/src/logs/simple_log_processor.rs index f4b57ccc5f..a4c7a6e191 100644 --- a/opentelemetry-sdk/src/logs/simple_log_processor.rs +++ b/opentelemetry-sdk/src/logs/simple_log_processor.rs @@ -117,13 +117,13 @@ impl LogProcessor for SimpleLogProcessor { fn shutdown(&self) -> OTelSdkResult { self.is_shutdown .store(true, std::sync::atomic::Ordering::Relaxed); - if let Ok(mut exporter) = self.exporter.lock() { + match self.exporter.lock() { Ok(mut exporter) => { exporter.shutdown() - } else { + } _ => { Err(OTelSdkError::InternalFailure( "SimpleLogProcessor mutex poison at shutdown".into(), )) - } + }} } fn set_resource(&self, resource: &Resource) { diff --git a/opentelemetry-sdk/src/metrics/internal/aggregate.rs b/opentelemetry-sdk/src/metrics/internal/aggregate.rs index 4497ac2fd3..6e0fe029e6 100644 --- a/opentelemetry-sdk/src/metrics/internal/aggregate.rs +++ b/opentelemetry-sdk/src/metrics/internal/aggregate.rs @@ -114,13 +114,13 @@ impl AttributeSetFilter { } pub(crate) fn apply(&self, attrs: &[KeyValue], run: impl FnOnce(&[KeyValue])) { - if let Some(filter) = &self.filter { + match &self.filter { Some(filter) => { let filtered_attrs: Vec = attrs.iter().filter(|kv| filter(kv)).cloned().collect(); run(&filtered_attrs); - } else { + } _ => { run(attrs); - }; + }}; } } diff --git a/opentelemetry-sdk/src/metrics/internal/exponential_histogram.rs b/opentelemetry-sdk/src/metrics/internal/exponential_histogram.rs index 2680e945b1..6b680ef0ce 100644 --- a/opentelemetry-sdk/src/metrics/internal/exponential_histogram.rs +++ b/opentelemetry-sdk/src/metrics/internal/exponential_histogram.rs @@ -1469,7 +1469,7 @@ mod tests { test_name ); - if let Some(a) = a.as_any().downcast_ref::>() { + match a.as_any().downcast_ref::>() { Some(a) => { let b = b.as_any().downcast_ref::>().unwrap(); assert_eq!( a.data_points.len(), @@ -1480,7 +1480,7 @@ mod tests { for (a, b) in a.data_points.iter().zip(b.data_points.iter()) { assert_gauge_data_points_eq(a, b, "mismatching gauge data points", test_name); } - } else if let Some(a) = a.as_any().downcast_ref::>() { + } _ => { match a.as_any().downcast_ref::>() { Some(a) => { let b = b.as_any().downcast_ref::>().unwrap(); assert_eq!( a.temporality, b.temporality, @@ -1501,7 +1501,7 @@ mod tests { for (a, b) in a.data_points.iter().zip(b.data_points.iter()) { assert_sum_data_points_eq(a, b, "mismatching sum data points", test_name); } - } else if let Some(a) = a.as_any().downcast_ref::>() { + } _ => { match a.as_any().downcast_ref::>() { Some(a) => { let b = b.as_any().downcast_ref::>().unwrap(); assert_eq!( a.temporality, b.temporality, @@ -1517,7 +1517,7 @@ mod tests { for (a, b) in a.data_points.iter().zip(b.data_points.iter()) { assert_hist_data_points_eq(a, b, "mismatching hist data points", test_name); } - } else if let Some(a) = a.as_any().downcast_ref::>() { + } _ => { match a.as_any().downcast_ref::>() { Some(a) => { let b = b .as_any() .downcast_ref::>() @@ -1541,9 +1541,9 @@ mod tests { test_name, ); } - } else { + } _ => { panic!("Aggregation of unknown types") - } + }}}}}}}} } fn assert_sum_data_points_eq( diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index 6316c97b23..5f286daeb5 100644 --- a/opentelemetry-sdk/src/metrics/internal/mod.rs +++ b/opentelemetry-sdk/src/metrics/internal/mod.rs @@ -125,11 +125,11 @@ where // Recheck both the provided and sorted orders after acquiring the write lock // in case another thread has pushed an update in the meantime. - if let Some(tracker) = trackers.get(attributes) { + match trackers.get(attributes) { Some(tracker) => { tracker.update(value); - } else if let Some(tracker) = trackers.get(sorted_attrs.as_slice()) { + } _ => { match trackers.get(sorted_attrs.as_slice()) { Some(tracker) => { tracker.update(value); - } else if is_under_cardinality_limit(self.count.load(Ordering::SeqCst)) { + } _ => if is_under_cardinality_limit(self.count.load(Ordering::SeqCst)) { let new_tracker = Arc::new(A::create(&self.config)); new_tracker.update(value); @@ -138,16 +138,16 @@ where trackers.insert(sorted_attrs, new_tracker); self.count.fetch_add(1, Ordering::SeqCst); - } else if let Some(overflow_value) = trackers.get(stream_overflow_attributes().as_slice()) { + } else { match trackers.get(stream_overflow_attributes().as_slice()) { Some(overflow_value) => { overflow_value.update(value); - } else { + } _ => { let new_tracker = A::create(&self.config); new_tracker.update(value); trackers.insert(stream_overflow_attributes().clone(), Arc::new(new_tracker)); otel_warn!( name: "ValueMap.measure", message = "Maximum data points for metric stream exceeded. Entry added to overflow. Subsequent overflows to same metric until next collect will not be logged." ); - } + }}}}}} } /// Iterate through all attribute sets and populate `DataPoints` in readonly mode. @@ -187,14 +187,14 @@ where )); } - if let Ok(mut trackers_collect) = self.trackers_for_collect().write() { - if let Ok(mut trackers_current) = self.trackers.write() { + match self.trackers_for_collect().write() { Ok(mut trackers_collect) => { + match self.trackers.write() { Ok(mut trackers_current) => { swap(trackers_collect.deref_mut(), trackers_current.deref_mut()); self.count.store(0, Ordering::SeqCst); - } else { + } _ => { otel_warn!(name: "MeterProvider.InternalError", message = "Metric collection failed. Report this issue in OpenTelemetry repo.", details ="ValueMap trackers lock poisoned"); return; - } + }} let mut seen = HashSet::new(); for (attrs, tracker) in trackers_collect.drain() { @@ -202,9 +202,9 @@ where dest.push(map_fn(attrs, tracker.clone_and_reset(&self.config))); } } - } else { + } _ => { otel_warn!(name: "MeterProvider.InternalError", message = "Metric collection failed. Report this issue in OpenTelemetry repo.", details ="ValueMap trackers for collect lock poisoned"); - } + }} } } diff --git a/opentelemetry-sdk/src/metrics/meter_provider.rs b/opentelemetry-sdk/src/metrics/meter_provider.rs index a1cf2f9dec..e94edf7f85 100644 --- a/opentelemetry-sdk/src/metrics/meter_provider.rs +++ b/opentelemetry-sdk/src/metrics/meter_provider.rs @@ -191,14 +191,14 @@ impl MeterProvider for SdkMeterProvider { otel_info!(name: "MeterNameEmpty", message = "Meter name is empty; consider providing a meaningful name. Meter will function normally and the provided name will be used as-is."); }; - if let Ok(mut meters) = self.inner.meters.lock() { - if let Some(existing_meter) = meters.get(&scope) { + match self.inner.meters.lock() { Ok(mut meters) => { + match meters.get(&scope) { Some(existing_meter) => { otel_debug!( name: "MeterProvider.ExistingMeterReturned", meter_name = scope.name(), ); Meter::new(existing_meter.clone()) - } else { + } _ => { let new_meter = Arc::new(SdkMeter::new(scope.clone(), self.inner.pipes.clone())); meters.insert(scope.clone(), new_meter.clone()); otel_debug!( @@ -206,14 +206,14 @@ impl MeterProvider for SdkMeterProvider { meter_name = scope.name(), ); Meter::new(new_meter) - } - } else { + }} + } _ => { otel_debug!( name: "MeterProvider.NoOpMeterReturned", meter_name = scope.name(), ); Meter::new(Arc::new(NoopMeter::new())) - } + }} } } diff --git a/opentelemetry-sdk/src/metrics/periodic_reader.rs b/opentelemetry-sdk/src/metrics/periodic_reader.rs index 1e9f5bd16f..e91e3f51c5 100644 --- a/opentelemetry-sdk/src/metrics/periodic_reader.rs +++ b/opentelemetry-sdk/src/metrics/periodic_reader.rs @@ -358,12 +358,12 @@ impl PeriodicReaderInner { fn collect(&self, rm: &mut ResourceMetrics) -> MetricResult<()> { let producer = self.producer.lock().expect("lock poisoned"); - if let Some(p) = producer.as_ref() { + match producer.as_ref() { Some(p) => { p.upgrade() .ok_or_else(|| MetricError::Other("pipeline is dropped".into()))? .produce(rm)?; Ok(()) - } else { + } _ => { otel_warn!( name: "PeriodReader.MeterProviderNotRegistered", message = "PeriodicReader is not registered with MeterProvider. Metrics will not be collected. \ @@ -371,7 +371,7 @@ impl PeriodicReaderInner { by calling `.with_reader(reader)` on MeterProviderBuilder." ); Err(MetricError::Other("MeterProvider is not registered".into())) - } + }} } fn collect_and_export(&self) -> OTelSdkResult { @@ -429,16 +429,16 @@ impl PeriodicReaderInner { .send(Message::Flush(response_tx)) .map_err(|e| OTelSdkError::InternalFailure(e.to_string()))?; - if let Ok(response) = response_rx.recv() { + match response_rx.recv() { Ok(response) => { // TODO: call exporter's force_flush method. if response { Ok(()) } else { Err(OTelSdkError::InternalFailure("Failed to flush".into())) } - } else { + } _ => { Err(OTelSdkError::InternalFailure("Failed to flush".into())) - } + }} } fn shutdown(&self) -> OTelSdkResult { diff --git a/opentelemetry-sdk/src/trace/span_processor.rs b/opentelemetry-sdk/src/trace/span_processor.rs index b15db77763..f567c60864 100644 --- a/opentelemetry-sdk/src/trace/span_processor.rs +++ b/opentelemetry-sdk/src/trace/span_processor.rs @@ -155,13 +155,13 @@ impl SpanProcessor for SimpleSpanProcessor { } fn shutdown(&self) -> OTelSdkResult { - if let Ok(mut exporter) = self.exporter.lock() { + match self.exporter.lock() { Ok(mut exporter) => { exporter.shutdown() - } else { + } _ => { Err(OTelSdkError::InternalFailure( "SimpleSpanProcessor mutex poison at shutdown".into(), )) - } + }} } fn set_resource(&mut self, resource: &Resource) { diff --git a/opentelemetry-zipkin/src/exporter/mod.rs b/opentelemetry-zipkin/src/exporter/mod.rs index 24fe931c0e..c7e388e952 100644 --- a/opentelemetry-zipkin/src/exporter/mod.rs +++ b/opentelemetry-zipkin/src/exporter/mod.rs @@ -78,7 +78,7 @@ impl ZipkinExporterBuilder { pub fn build(self) -> Result { let endpoint = Endpoint::new(self.service_addr); - if let Some(client) = self.client { + match self.client { Some(client) => { let exporter = ZipkinExporter::new( endpoint, client, @@ -87,9 +87,9 @@ impl ZipkinExporterBuilder { .map_err::(Into::into)?, ); Ok(exporter) - } else { + } _ => { Err(Error::NoHttpClient.into()) - } + }} } /// Assign client implementation diff --git a/opentelemetry/src/context.rs b/opentelemetry/src/context.rs index 3707bd3758..e21b7b753a 100644 --- a/opentelemetry/src/context.rs +++ b/opentelemetry/src/context.rs @@ -214,15 +214,15 @@ impl Context { /// assert_eq!(cx_with_a_and_b.get::(), Some(&ValueB(42))); /// ``` pub fn with_value(&self, value: T) -> Self { - let entries = if let Some(current_entries) = &self.entries { + let entries = match &self.entries { Some(current_entries) => { let mut inner_entries = (**current_entries).clone(); inner_entries.insert(TypeId::of::(), Arc::new(value)); Some(Arc::new(inner_entries)) - } else { + } _ => { let mut entries = EntryMap::default(); entries.insert(TypeId::of::(), Arc::new(value)); Some(Arc::new(entries)) - }; + }}; Context { entries, #[cfg(feature = "trace")] @@ -336,12 +336,12 @@ impl fmt::Debug for Context { let mut entries = self.entries.as_ref().map_or(0, |e| e.len()); #[cfg(feature = "trace")] { - if let Some(span) = &self.span { + match &self.span { Some(span) => { dbg.field("span", &span.span_context()); entries += 1; - } else { + } _ => { dbg.field("span", &"None"); - } + }} } dbg.field("entries count", &entries).finish() diff --git a/opentelemetry/src/global/metrics.rs b/opentelemetry/src/global/metrics.rs index 450ba2d3bc..1db5bc76b9 100644 --- a/opentelemetry/src/global/metrics.rs +++ b/opentelemetry/src/global/metrics.rs @@ -24,24 +24,24 @@ where { // Try to set the global meter provider. If the RwLock is poisoned, we'll log an error. let mut global_provider = global_meter_provider().write(); - if let Ok(ref mut provider) = global_provider { + match global_provider { Ok(ref mut provider) => { **provider = Arc::new(new_provider); otel_info!(name: "MeterProvider.GlobalSet", message = "Global meter provider is set. Meters can now be created using global::meter() or global::meter_with_scope()."); - } else { + } _ => { otel_error!(name: "MeterProvider.GlobalSetFailed", message = "Setting global meter provider failed. Meters created using global::meter() or global::meter_with_scope() will not function. Report this issue in OpenTelemetry repo."); - } + }} } /// Returns an instance of the currently configured global [`MeterProvider`]. pub fn meter_provider() -> GlobalMeterProvider { // Try to get the global meter provider. If the RwLock is poisoned, we'll log an error and return a NoopMeterProvider. let global_provider = global_meter_provider().read(); - if let Ok(provider) = global_provider { + match global_provider { Ok(provider) => { provider.clone() - } else { + } _ => { otel_error!(name: "MeterProvider.GlobalGetFailed", message = "Getting global meter provider failed. Meters created using global::meter() or global::meter_with_scope() will not function. Report this issue in OpenTelemetry repo."); Arc::new(crate::metrics::noop::NoopMeterProvider::new()) - } + }} } /// Creates a named [`Meter`] via the currently configured global [`MeterProvider`]. diff --git a/opentelemetry/src/trace/context.rs b/opentelemetry/src/trace/context.rs index 125c96f5f5..ca0aaa7b7a 100644 --- a/opentelemetry/src/trace/context.rs +++ b/opentelemetry/src/trace/context.rs @@ -290,11 +290,11 @@ impl TraceContextExt for Context { } fn span(&self) -> SpanRef<'_> { - if let Some(span) = self.span.as_ref() { + match self.span.as_ref() { Some(span) => { SpanRef(span) - } else { + } _ => { SpanRef(&NOOP_SPAN) - } + }} } fn has_active_span(&self) -> bool { From ea416a084463bfccdd7fd90f89366fb52c4d48d7 Mon Sep 17 00:00:00 2001 From: Scott Gerring Date: Mon, 10 Mar 2025 13:11:16 +0100 Subject: [PATCH 2/2] chore: specify edition in expr fragments in macros, remove lint exception --- Cargo.toml | 1 - opentelemetry/src/common.rs | 4 ++-- opentelemetry/src/global/internal_logging.rs | 16 ++++++++-------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e8c7810e88..a2f9345d4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,7 +88,6 @@ opentelemetry-stdout = { path = "opentelemetry-stdout" } [workspace.lints.rust] rust_2024_compatibility = { level = "warn", priority = -1 } # No need to enable those, because it either not needed or results in ugly syntax -edition_2024_expr_fragment_specifier = "allow" tail_expr_drop_order = "allow" [workspace.lints.clippy] diff --git a/opentelemetry/src/common.rs b/opentelemetry/src/common.rs index 20f9f1a568..c552858def 100644 --- a/opentelemetry/src/common.rs +++ b/opentelemetry/src/common.rs @@ -197,7 +197,7 @@ fn display_array_str(slice: &[T], fmt: &mut fmt::Formatter<'_>) } macro_rules! into_array { - ($(($t:ty, $val:expr),)+) => { + ($(($t:ty, $val:expr_2021),)+) => { $( impl From<$t> for Array { fn from(t: $t) -> Self { @@ -332,7 +332,7 @@ impl Value { macro_rules! from_values { ( $( - ($t:ty, $val:expr); + ($t:ty, $val:expr_2021); )+ ) => { $( diff --git a/opentelemetry/src/global/internal_logging.rs b/opentelemetry/src/global/internal_logging.rs index dad083ac1f..ee3be8e868 100644 --- a/opentelemetry/src/global/internal_logging.rs +++ b/opentelemetry/src/global/internal_logging.rs @@ -20,7 +20,7 @@ // See issue: https://github.com/tokio-rs/tracing/issues/2774 #[macro_export] macro_rules! otel_info { - (name: $name:expr $(,)?) => { + (name: $name:expr_2021 $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::info!( name: $name, target: env!("CARGO_PKG_NAME"), name = $name, ""); @@ -30,7 +30,7 @@ macro_rules! otel_info { let _ = $name; // Compiler will optimize this out as it's unused. } }; - (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => { + (name: $name:expr_2021, $($key:ident = $value:expr_2021),+ $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::info!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, $($key = $value),+, ""); @@ -55,7 +55,7 @@ macro_rules! otel_info { /// ``` #[macro_export] macro_rules! otel_warn { - (name: $name:expr $(,)?) => { + (name: $name:expr_2021 $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::warn!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, ""); @@ -65,7 +65,7 @@ macro_rules! otel_warn { let _ = $name; // Compiler will optimize this out as it's unused. } }; - (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => { + (name: $name:expr_2021, $($key:ident = $value:expr_2021),+ $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::warn!(name: $name, @@ -97,7 +97,7 @@ macro_rules! otel_warn { /// ``` #[macro_export] macro_rules! otel_debug { - (name: $name:expr $(,)?) => { + (name: $name:expr_2021 $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::debug!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, ""); @@ -107,7 +107,7 @@ macro_rules! otel_debug { let _ = $name; // Compiler will optimize this out as it's unused. } }; - (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => { + (name: $name:expr_2021, $($key:ident = $value:expr_2021),+ $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::debug!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, $($key = $value),+, ""); @@ -132,7 +132,7 @@ macro_rules! otel_debug { /// ``` #[macro_export] macro_rules! otel_error { - (name: $name:expr $(,)?) => { + (name: $name:expr_2021 $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::error!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, ""); @@ -142,7 +142,7 @@ macro_rules! otel_error { let _ = $name; // Compiler will optimize this out as it's unused. } }; - (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => { + (name: $name:expr_2021, $($key:ident = $value:expr_2021),+ $(,)?) => { #[cfg(feature = "internal-logs")] { tracing::error!(name: $name,