mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 11:37:39 +00:00
Rollup merge of #95566 - eduardosm:std_char_consts_and_methods, r=Mark-Simulacrum
Avoid duplication of doc comments in `std::char` constants and functions For those consts and functions, only the summary is kept and a reference to the `char` associated const/method is included. Additionaly, re-exported functions have been converted to function definitions that call the previously re-exported function. This makes it easier to add a deprecated attribute to these functions in the future.
This commit is contained in:
commit
c0655dec7e
@ -6,52 +6,10 @@ use crate::fmt;
|
|||||||
use crate::mem::transmute;
|
use crate::mem::transmute;
|
||||||
use crate::str::FromStr;
|
use crate::str::FromStr;
|
||||||
|
|
||||||
/// Converts a `u32` to a `char`.
|
/// Converts a `u32` to a `char`. See [`char::from_u32`].
|
||||||
///
|
|
||||||
/// Note that all [`char`]s are valid [`u32`]s, and can be cast to one with
|
|
||||||
/// `as`:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// let c = '💯';
|
|
||||||
/// let i = c as u32;
|
|
||||||
///
|
|
||||||
/// assert_eq!(128175, i);
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// However, the reverse is not true: not all valid [`u32`]s are valid
|
|
||||||
/// [`char`]s. `from_u32()` will return `None` if the input is not a valid value
|
|
||||||
/// for a [`char`].
|
|
||||||
///
|
|
||||||
/// For an unsafe version of this function which ignores these checks, see
|
|
||||||
/// [`from_u32_unchecked`].
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// Basic usage:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// let c = char::from_u32(0x2764);
|
|
||||||
///
|
|
||||||
/// assert_eq!(Some('❤'), c);
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// Returning `None` when the input is not a valid [`char`]:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// let c = char::from_u32(0x110000);
|
|
||||||
///
|
|
||||||
/// assert_eq!(None, c);
|
|
||||||
/// ```
|
|
||||||
#[doc(alias = "chr")]
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
pub(super) const fn from_u32(i: u32) -> Option<char> {
|
||||||
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
|
||||||
pub const fn from_u32(i: u32) -> Option<char> {
|
|
||||||
// FIXME: once Result::ok is const fn, use it here
|
// FIXME: once Result::ok is const fn, use it here
|
||||||
match char_try_from_u32(i) {
|
match char_try_from_u32(i) {
|
||||||
Ok(c) => Some(c),
|
Ok(c) => Some(c),
|
||||||
@ -59,44 +17,11 @@ pub const fn from_u32(i: u32) -> Option<char> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts a `u32` to a `char`, ignoring validity.
|
/// Converts a `u32` to a `char`, ignoring validity. See [`char::from_u32_unchecked`].
|
||||||
///
|
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
||||||
/// Note that all [`char`]s are valid [`u32`]s, and can be cast to one with
|
|
||||||
/// `as`:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// let c = '💯';
|
|
||||||
/// let i = c as u32;
|
|
||||||
///
|
|
||||||
/// assert_eq!(128175, i);
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// However, the reverse is not true: not all valid [`u32`]s are valid
|
|
||||||
/// [`char`]s. `from_u32_unchecked()` will ignore this, and blindly cast to
|
|
||||||
/// [`char`], possibly creating an invalid one.
|
|
||||||
///
|
|
||||||
/// # Safety
|
|
||||||
///
|
|
||||||
/// This function is unsafe, as it may construct invalid `char` values.
|
|
||||||
///
|
|
||||||
/// For a safe version of this function, see the [`from_u32`] function.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// Basic usage:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// let c = unsafe { char::from_u32_unchecked(0x2764) };
|
|
||||||
///
|
|
||||||
/// assert_eq!('❤', c);
|
|
||||||
/// ```
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "char_from_unchecked", since = "1.5.0")]
|
pub(super) const unsafe fn from_u32_unchecked(i: u32) -> char {
|
||||||
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
|
||||||
pub const unsafe fn from_u32_unchecked(i: u32) -> char {
|
|
||||||
// SAFETY: the caller must guarantee that `i` is a valid char value.
|
// SAFETY: the caller must guarantee that `i` is a valid char value.
|
||||||
if cfg!(debug_assertions) { char::from_u32(i).unwrap() } else { unsafe { transmute(i) } }
|
if cfg!(debug_assertions) { char::from_u32(i).unwrap() } else { unsafe { transmute(i) } }
|
||||||
}
|
}
|
||||||
@ -317,60 +242,10 @@ impl fmt::Display for CharTryFromError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts a digit in the given radix to a `char`.
|
/// Converts a digit in the given radix to a `char`. See [`char::from_digit`].
|
||||||
///
|
|
||||||
/// A 'radix' here is sometimes also called a 'base'. A radix of two
|
|
||||||
/// indicates a binary number, a radix of ten, decimal, and a radix of
|
|
||||||
/// sixteen, hexadecimal, to give some common values. Arbitrary
|
|
||||||
/// radices are supported.
|
|
||||||
///
|
|
||||||
/// `from_digit()` will return `None` if the input is not a digit in
|
|
||||||
/// the given radix.
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// Panics if given a radix larger than 36.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// Basic usage:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// let c = char::from_digit(4, 10);
|
|
||||||
///
|
|
||||||
/// assert_eq!(Some('4'), c);
|
|
||||||
///
|
|
||||||
/// // Decimal 11 is a single digit in base 16
|
|
||||||
/// let c = char::from_digit(11, 16);
|
|
||||||
///
|
|
||||||
/// assert_eq!(Some('b'), c);
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// Returning `None` when the input is not a digit:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// let c = char::from_digit(20, 10);
|
|
||||||
///
|
|
||||||
/// assert_eq!(None, c);
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// Passing a large radix, causing a panic:
|
|
||||||
///
|
|
||||||
/// ```should_panic
|
|
||||||
/// use std::char;
|
|
||||||
///
|
|
||||||
/// // this panics
|
|
||||||
/// let c = char::from_digit(1, 37);
|
|
||||||
/// ```
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
pub(super) const fn from_digit(num: u32, radix: u32) -> Option<char> {
|
||||||
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
|
||||||
pub const fn from_digit(num: u32, radix: u32) -> Option<char> {
|
|
||||||
if radix > 36 {
|
if radix > 36 {
|
||||||
panic!("from_digit: radix is too high (maximum 36)");
|
panic!("from_digit: radix is too high (maximum 36)");
|
||||||
}
|
}
|
||||||
|
@ -30,54 +30,9 @@ pub struct DecodeUtf16Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Creates an iterator over the UTF-16 encoded code points in `iter`,
|
/// Creates an iterator over the UTF-16 encoded code points in `iter`,
|
||||||
/// returning unpaired surrogates as `Err`s.
|
/// returning unpaired surrogates as `Err`s. See [`char::decode_utf16`].
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// Basic usage:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char::decode_utf16;
|
|
||||||
///
|
|
||||||
/// // 𝄞mus<invalid>ic<invalid>
|
|
||||||
/// let v = [
|
|
||||||
/// 0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834,
|
|
||||||
/// ];
|
|
||||||
///
|
|
||||||
/// assert_eq!(
|
|
||||||
/// decode_utf16(v.iter().cloned())
|
|
||||||
/// .map(|r| r.map_err(|e| e.unpaired_surrogate()))
|
|
||||||
/// .collect::<Vec<_>>(),
|
|
||||||
/// vec![
|
|
||||||
/// Ok('𝄞'),
|
|
||||||
/// Ok('m'), Ok('u'), Ok('s'),
|
|
||||||
/// Err(0xDD1E),
|
|
||||||
/// Ok('i'), Ok('c'),
|
|
||||||
/// Err(0xD834)
|
|
||||||
/// ]
|
|
||||||
/// );
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// A lossy decoder can be obtained by replacing `Err` results with the replacement character:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::char::{decode_utf16, REPLACEMENT_CHARACTER};
|
|
||||||
///
|
|
||||||
/// // 𝄞mus<invalid>ic<invalid>
|
|
||||||
/// let v = [
|
|
||||||
/// 0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834,
|
|
||||||
/// ];
|
|
||||||
///
|
|
||||||
/// assert_eq!(
|
|
||||||
/// decode_utf16(v.iter().cloned())
|
|
||||||
/// .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
|
|
||||||
/// .collect::<String>(),
|
|
||||||
/// "𝄞mus<75>ic<69>"
|
|
||||||
/// );
|
|
||||||
/// ```
|
|
||||||
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn decode_utf16<I: IntoIterator<Item = u16>>(iter: I) -> DecodeUtf16<I::IntoIter> {
|
pub(super) fn decode_utf16<I: IntoIterator<Item = u16>>(iter: I) -> DecodeUtf16<I::IntoIter> {
|
||||||
DecodeUtf16 { iter: iter.into_iter(), buf: None }
|
DecodeUtf16 { iter: iter.into_iter(), buf: None }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,18 +23,12 @@ mod decode;
|
|||||||
mod methods;
|
mod methods;
|
||||||
|
|
||||||
// stable re-exports
|
// stable re-exports
|
||||||
#[stable(feature = "char_from_unchecked", since = "1.5.0")]
|
|
||||||
pub use self::convert::from_u32_unchecked;
|
|
||||||
#[stable(feature = "try_from", since = "1.34.0")]
|
#[stable(feature = "try_from", since = "1.34.0")]
|
||||||
pub use self::convert::CharTryFromError;
|
pub use self::convert::CharTryFromError;
|
||||||
#[stable(feature = "char_from_str", since = "1.20.0")]
|
#[stable(feature = "char_from_str", since = "1.20.0")]
|
||||||
pub use self::convert::ParseCharError;
|
pub use self::convert::ParseCharError;
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
|
||||||
pub use self::convert::{from_digit, from_u32};
|
|
||||||
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
||||||
pub use self::decode::{decode_utf16, DecodeUtf16, DecodeUtf16Error};
|
pub use self::decode::{DecodeUtf16, DecodeUtf16Error};
|
||||||
#[stable(feature = "unicode_version", since = "1.45.0")]
|
|
||||||
pub use crate::unicode::UNICODE_VERSION;
|
|
||||||
|
|
||||||
// perma-unstable re-exports
|
// perma-unstable re-exports
|
||||||
#[unstable(feature = "char_internals", reason = "exposed only for libstd", issue = "none")]
|
#[unstable(feature = "char_internals", reason = "exposed only for libstd", issue = "none")]
|
||||||
@ -89,30 +83,57 @@ const MAX_THREE_B: u32 = 0x10000;
|
|||||||
Cn Unassigned a reserved unassigned code point or a noncharacter
|
Cn Unassigned a reserved unassigned code point or a noncharacter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/// The highest valid code point a `char` can have, `'\u{10FFFF}'`.
|
/// The highest valid code point a `char` can have, `'\u{10FFFF}'`. Use [`char::MAX`] instead.
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// # fn something_which_returns_char() -> char { 'a' }
|
|
||||||
/// let c: char = something_which_returns_char();
|
|
||||||
/// assert!(c <= char::MAX);
|
|
||||||
///
|
|
||||||
/// let value_at_max = char::MAX as u32;
|
|
||||||
/// assert_eq!(char::from_u32(value_at_max), Some('\u{10FFFF}'));
|
|
||||||
/// assert_eq!(char::from_u32(value_at_max + 1), None);
|
|
||||||
/// ```
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
pub const MAX: char = char::MAX;
|
pub const MAX: char = char::MAX;
|
||||||
|
|
||||||
/// `U+FFFD REPLACEMENT CHARACTER` (<28>) is used in Unicode to represent a
|
/// `U+FFFD REPLACEMENT CHARACTER` (<28>) is used in Unicode to represent a
|
||||||
/// decoding error.
|
/// decoding error. Use [`char::REPLACEMENT_CHARACTER`] instead.
|
||||||
///
|
|
||||||
/// It can occur, for example, when giving ill-formed UTF-8 bytes to
|
|
||||||
/// [`String::from_utf8_lossy`](../../std/string/struct.String.html#method.from_utf8_lossy).
|
|
||||||
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
||||||
pub const REPLACEMENT_CHARACTER: char = char::REPLACEMENT_CHARACTER;
|
pub const REPLACEMENT_CHARACTER: char = char::REPLACEMENT_CHARACTER;
|
||||||
|
|
||||||
|
/// The version of [Unicode](https://www.unicode.org/) that the Unicode parts of
|
||||||
|
/// `char` and `str` methods are based on. Use [`char::UNICODE_VERSION`] instead.
|
||||||
|
#[stable(feature = "unicode_version", since = "1.45.0")]
|
||||||
|
pub const UNICODE_VERSION: (u8, u8, u8) = char::UNICODE_VERSION;
|
||||||
|
|
||||||
|
/// Creates an iterator over the UTF-16 encoded code points in `iter`, returning
|
||||||
|
/// unpaired surrogates as `Err`s. Use [`char::decode_utf16`] instead.
|
||||||
|
#[stable(feature = "decode_utf16", since = "1.9.0")]
|
||||||
|
#[inline]
|
||||||
|
pub fn decode_utf16<I: IntoIterator<Item = u16>>(iter: I) -> DecodeUtf16<I::IntoIter> {
|
||||||
|
self::decode::decode_utf16(iter)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts a `u32` to a `char`. Use [`char::from_u32`] instead.
|
||||||
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
||||||
|
#[must_use]
|
||||||
|
#[inline]
|
||||||
|
pub const fn from_u32(i: u32) -> Option<char> {
|
||||||
|
self::convert::from_u32(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts a `u32` to a `char`, ignoring validity. Use [`char::from_u32_unchecked`].
|
||||||
|
/// instead.
|
||||||
|
#[stable(feature = "char_from_unchecked", since = "1.5.0")]
|
||||||
|
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
||||||
|
#[must_use]
|
||||||
|
#[inline]
|
||||||
|
pub const unsafe fn from_u32_unchecked(i: u32) -> char {
|
||||||
|
// SAFETY: the safety contract must be upheld by the caller.
|
||||||
|
unsafe { self::convert::from_u32_unchecked(i) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts a digit in the given radix to a `char`. Use [`char::from_digit`] instead.
|
||||||
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
#[rustc_const_unstable(feature = "const_char_convert", issue = "89259")]
|
||||||
|
#[must_use]
|
||||||
|
#[inline]
|
||||||
|
pub const fn from_digit(num: u32, radix: u32) -> Option<char> {
|
||||||
|
self::convert::from_digit(num, radix)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns an iterator that yields the hexadecimal Unicode escape of a
|
/// Returns an iterator that yields the hexadecimal Unicode escape of a
|
||||||
/// character, as `char`s.
|
/// character, as `char`s.
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user