cairo-language-server 2.18.0

The Cairo Language Server
Documentation
use lsp_types::Hover;

use crate::support::insta::{test_transform_plain, test_transform_with_macros};

#[test]
fn member_definition_name() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member<caret>1: felt252,
        member2: u256
    }
    ",@r#"
    source_context = """
        member<caret>1: felt252,
    """
    highlight = """
        <sel>member1</sel>: felt252,
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member1: felt252
    ```
    ---
    Docstring of member1."""
    "#)
}

#[test]
fn member_definition_name_macro() {
    test_transform_with_macros!(Hover,"
    #[complex_attribute_macro_v2]
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member<caret>1: felt252,
        member2: u256
    }
    ",@r#"
    source_context = """
        member<caret>1: felt252,
    """
    highlight = """
        <sel>member1</sel>: felt252,
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member1: felt252
    ```
    ---
    Docstring of member1."""
    "#)
}

#[test]
fn struct_init_first_member_name() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod happy_cases {
        use super::Struct;

        fn constructor() {
            let _s = Struct {  member1<caret>: 0, member2: 0 };
        }
    }
    ",@r#"
    source_context = """
            let _s = Struct {  member1<caret>: 0, member2: 0 };
    """
    highlight = """
            let _s = Struct {  <sel>member1</sel>: 0, member2: 0 };
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member1: felt252
    ```
    ---
    Docstring of member1."""
    "#)
}

#[test]
fn struct_init_second_member_name() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod happy_cases {
        use super::Struct;

        fn constructor() {
            let _s = Struct {  member1: 0, mem<caret>ber2: 0 };
        }
    }
    ",@r#"
    source_context = """
            let _s = Struct {  member1: 0, mem<caret>ber2: 0 };
    """
    highlight = """
            let _s = Struct {  member1: 0, <sel>member2</sel>: 0 };
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member2: u256
    ```
    """
    "#)
}

#[test]
fn struct_init_first_member_shorthand() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod happy_cases {
        use super::Struct;

        fn constructor() {
            let member1 = 0;
            let member2 = 0;
            let _s = Struct { mem<caret>ber1, member2 };
        }
    }
    ",@r#"
    source_context = """
            let _s = Struct { mem<caret>ber1, member2 };
    """
    highlight = """
            let _s = Struct { <sel>member1</sel>, member2 };
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member1: felt252
    ```
    ---
    Docstring of member1."""
    "#)
}
#[test]
fn struct_init_second_member_shorthand_after() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod happy_cases {
        use super::Struct;

        fn constructor() {
            let member1 = 0;
            let member2 = 0;
            let _s = Struct { member1, member2<caret> };
        }
    }
    ",@r#"
    source_context = """
            let _s = Struct { member1, member2<caret> };
    """
    highlight = """
            let _s = Struct { member1, <sel>member2</sel> };
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member2: u256
    ```
    """
    "#)
}

#[test]
fn struct_member_access_after_name() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod happy_cases {
        use super::Struct;

        fn member_access() {
            let s = Struct {  member1: 0, member2: 0 };
            let _ = s.member1<caret>;
        }
    }
    ",@r#"
    source_context = """
            let _ = s.member1<caret>;
    """
    highlight = """
            let _ = s.<sel>member1</sel>;
    """
    popover = """
    ```cairo
    hello::Struct
    ```
    ```cairo
    member1: felt252
    ```
    ---
    Docstring of member1."""
    "#)
}

#[test]
fn non_existent_struct_member_init() {
    test_transform_plain!(Hover,"
    /// Docstring of Struct.
    struct Struct {
        /// Docstring of member1.
        member1: felt252,
        member2: u256
    }

    mod unhappy_cases {
        fn non_existent_struct {
            let _ = NonExistentStruct { mem<caret>ber: 0 };
        }
    }
    ",@r#"
    source_context = """
            let _ = NonExistentStruct { mem<caret>ber: 0 };
    """
    "#)
}