Patch

Struct Patch 

Source
pub struct Patch<'a> { /* private fields */ }
Expand description

Suggested edit to the Snippet

See Snippet::patch

§Example

use annotate_snippets::{
    renderer::DecorStyle, AnnotationKind, Group, Level, Patch, Renderer, Snippet,
};

fn main() {
    let source = r#"
#![allow(dead_code)]
struct U <T> {
    wtf: Option<Box<U<T>>>,
    x: T,
}
fn main() {
    U {
        wtf: Some(Box(U {
            wtf: None,
            x: (),
        })),
        x: ()
    };
    let _ = std::collections::HashMap(); 
    let _ = std::collections::HashMap {};
    let _ = Box {};
}
"#;

    let report = &[
        Group::with_title(Level::ERROR.primary_title(
            "cannot construct `Box<_, _>` with struct literal syntax due to private fields",
        ))
        .element(
            Snippet::source(source)
                .path("$DIR/multi-suggestion.rs")
                .annotation(AnnotationKind::Primary.span(295..298)),
        )
        .element(Level::NOTE.message("private fields `0` and `1` that were not provided")),
        Group::with_title(Level::HELP.secondary_title(
            "you might have meant to use an associated function to build this type",
        ))
        .element(
            Snippet::source(source)
                .path("$DIR/multi-suggestion.rs")
                .patch(Patch::new(298..301, "::new(_)")),
        )
        .element(
            Snippet::source(source)
                .path("$DIR/multi-suggestion.rs")
                .patch(Patch::new(298..301, "::new_uninit()")),
        )
        .element(
            Snippet::source(source)
                .path("$DIR/multi-suggestion.rs")
                .patch(Patch::new(298..301, "::new_zeroed()")),
        )
        .element(
            Snippet::source(source)
                .path("$DIR/multi-suggestion.rs")
                .patch(Patch::new(298..301, "::new_in(_, _)")),
        )
        .element(Level::NOTE.no_name().message("and 12 other candidates")),
        Group::with_title(Level::HELP.secondary_title("consider using the `Default` trait"))
            .element(
                Snippet::source(source)
                    .path("$DIR/multi-suggestion.rs")
                    .patch(Patch::new(295..295, "<"))
                    .patch(Patch::new(
                        298..301,
                        " as std::default::Default>::default()",
                    )),
            ),
    ];

    let renderer = Renderer::styled().decor_style(DecorStyle::Unicode);
    anstream::println!("{}", renderer.render(report));
}
error: cannot construct `Box<_, _>` with struct literal syntax due to private fields ╭▸ $DIR/multi-suggestion.rs:17:13 17 let _ = Box {}; ━━━ note: private fields `0` and `1` that were not provided help: you might have meant to use an associated function to build this type ╭╴ 17 - let _ = Box {}; 17 + let _ = Box::new(_); ├╴ 17 - let _ = Box {}; 17 + let _ = Box::new_uninit(); ├╴ 17 - let _ = Box {}; 17 + let _ = Box::new_zeroed(); ├╴ 17 - let _ = Box {}; 17 + let _ = Box::new_in(_, _); and 12 other candidates help: consider using the `Default` trait ╭╴ 17 - let _ = Box {}; 17 + let _ = <Box as std::default::Default>::default(); ╰╴

Implementations§

Source§

impl<'a> Patch<'a>

Source

pub fn new(span: Range<usize>, replacement: impl Into<Cow<'a, str>>) -> Self

Splice replacement into the Snippet at the specified byte span

Text passed to this function is considered “untrusted input”, as such all text is passed through a normalization function. Pre-styled text is not allowed to be passed to this function.

Trait Implementations§

Source§

impl<'a> Clone for Patch<'a>

Source§

fn clone(&self) -> Patch<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for Patch<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Patch<'a>

§

impl<'a> RefUnwindSafe for Patch<'a>

§

impl<'a> Send for Patch<'a>

§

impl<'a> Sync for Patch<'a>

§

impl<'a> Unpin for Patch<'a>

§

impl<'a> UnwindSafe for Patch<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.