diff --git a/src/librustdoc/html/escape.rs b/src/librustdoc/html/escape.rs
index 72ad42c2bd0..31a2701f06a 100644
--- a/src/librustdoc/html/escape.rs
+++ b/src/librustdoc/html/escape.rs
@@ -108,6 +108,16 @@ impl<'a> fmt::Display for EscapeBodyTextWithWbr<'a> {
|| pk.map_or(true, |(_, t)| t.chars().any(|c| c.is_uppercase()));
let next_is_underscore = || pk.map_or(true, |(_, t)| t.contains('_'));
let next_is_colon = || pk.map_or(true, |(_, t)| t.contains(':'));
+ // Check for CamelCase.
+ //
+ // `i - last > 3` avoids turning FmRadio into FmRadio, which is technically
+ // correct, but needlessly bloated.
+ //
+ // is_uppercase && !next_is_uppercase checks for camelCase. HTTPSProxy,
+ // for example, should become HTTPSProxy.
+ //
+ // !next_is_underscore avoids turning TEST_RUN into TEST_RUN, which is also
+ // needlessly bloated.
if i - last > 3 && is_uppercase() && !next_is_uppercase() && !next_is_underscore() {
EscapeBodyText(&text[last..i]).fmt(fmt)?;
fmt.write_str("")?;