    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    use internals::ast::Container;
    use syn::{Path, PathArguments, Token};

    pub fn this_type(cont: &Container) -> Path {
        if let Some(remote) = cont.attrs.remote() {
            let mut this = remote.clone();
            for segment in &mut this.segments {
                if let PathArguments::AngleBracketed(arguments) = &mut segment.arguments {
                    arguments.colon2_token = None;
                }
            }
            this
        } else {
            Path::from(cont.ident.clone())
        }
    }

    pub fn this_value(cont: &Container) -> Path {
        if let Some(remote) = cont.attrs.remote() {
            let mut this = remote.clone();
            for segment in &mut this.segments {
                if let PathArguments::AngleBracketed(arguments) = &mut segment.arguments {
                    if arguments.colon2_token.is_none() {
                        arguments.colon2_token = Some(Token![::](arguments.lt_token.span));
                    }
                }
            }
            this
        } else {
            Path::from(cont.ident.clone())
        }
    }