Rollup merge of #130819 - bjoernager:char-must-use-len-utf, r=Noratrieb

Add `must_use` attribute to `len_utf8` and `len_utf16`.

The `len_utf8` and `len_utf16` methods in `char` should have the `must_use` attribute.

The somewhat similar method `<[T]>::len` has had this attribute since #95274. Considering that these two methods would most likely be used to test the size of a buffer (before a call to `encode_utf8` or `encode_utf16`), *not* using their return values could indicate a bug.

According to ["When to add `#[must_use]`](https://std-dev-guide.rust-lang.org/policy/must-use.html), this is **not** considered a breaking change (and could be reverted again at a later time).
This commit is contained in:
Matthias Krüger 2024-09-25 20:11:00 +02:00 committed by GitHub
commit 3b2580914b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -606,6 +606,7 @@ impl char {
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "const_char_len_utf", since = "1.52.0")]
#[inline]
#[must_use]
pub const fn len_utf8(self) -> usize {
len_utf8(self as u32)
}
@ -637,6 +638,7 @@ impl char {
#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "const_char_len_utf", since = "1.52.0")]
#[inline]
#[must_use]
pub const fn len_utf16(self) -> usize {
len_utf16(self as u32)
}
@ -1738,6 +1740,7 @@ impl EscapeDebugExtArgs {
}
#[inline]
#[must_use]
const fn len_utf8(code: u32) -> usize {
match code {
..MAX_ONE_B => 1,
@ -1748,6 +1751,7 @@ const fn len_utf8(code: u32) -> usize {
}
#[inline]
#[must_use]
const fn len_utf16(code: u32) -> usize {
if (code & 0xFFFF) == code { 1 } else { 2 }
}