about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-05-18 02:09:55 +0000
committerbors <bors@rust-lang.org>2023-05-18 02:09:55 +0000
commit72a1796615a26b373c459ebfa79484987d53f1d8 (patch)
tree17c1c8521a250a556ff26146b438a692ca142781
parentd0768aad62e13ec63cba9d857c8b3fe7657dfb33 (diff)
parent77be56b691c9a2d9739d9b4e360cae148b0e0972 (diff)
downloadrust-72a1796615a26b373c459ebfa79484987d53f1d8.tar.gz
rust-72a1796615a26b373c459ebfa79484987d53f1d8.zip
Auto merge of #14819 - weihanglo:divided-by-zero, r=lnicola
fix(analysis-stats): divided by zero error

## What does this PR try to resolve?

2023-05-15 rust-analyzer suffers from

```
 thread 'main' panicked at 'attempt to divide by zero', crates/rust-analyzer/src/cli/analysis_stats.rs:230:56
```

This commit <https://github.com/rust-lang/rust-analyzer/pull/14808/commits/51e8b8ff14de3507d5e21d80b750577da52b6fdd> might be the culprit.

This PR uses `percentage` function to avoid the classic “division by zero” bug.

## Reproducer

```console
cargo new ra-test
pushd ra-test
echo "pub type Foo = u32;" >> src/lib.rs
rust-analyzer analysis-stats .
```
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index b12568b0bd9..f7f49188662 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -227,7 +227,7 @@ impl flags::AnalysisStats {
             fail += 1;
         }
         eprintln!("{:<20} {}", "Data layouts:", sw.elapsed());
-        eprintln!("Failed data layouts: {fail} ({}%)", fail * 100 / all);
+        eprintln!("Failed data layouts: {fail} ({}%)", percentage(fail, all));
         report_metric("failed data layouts", fail, "#");
     }
 
@@ -254,7 +254,7 @@ impl flags::AnalysisStats {
             fail += 1;
         }
         eprintln!("{:<20} {}", "Const evaluation:", sw.elapsed());
-        eprintln!("Failed const evals: {fail} ({}%)", fail * 100 / all);
+        eprintln!("Failed const evals: {fail} ({}%)", percentage(fail, all));
         report_metric("failed const evals", fail, "#");
     }
 
@@ -280,7 +280,7 @@ impl flags::AnalysisStats {
             fail += 1;
         }
         eprintln!("{:<20} {}", "MIR lowering:", sw.elapsed());
-        eprintln!("Mir failed bodies: {fail} ({}%)", fail * 100 / all);
+        eprintln!("Mir failed bodies: {fail} ({}%)", percentage(fail, all));
         report_metric("mir failed bodies", fail, "#");
     }