cairo-language-server 2.20.0

The Cairo Language Server
Documentation
use crate::code_actions::{quick_fix, quick_fix_with_macros};
use crate::support::insta::test_transform;

#[test]
fn single_segment() {
    test_transform!(quick_fix, "
    struct Mariusz {
        whatever: felt252
    }

    fn main() {
        let _x = Mar<caret>ius { whatever: 1 };
    }
    ", @r#"
    Title: Did you mean `Mariusz`?
    Add new text: "Mariusz"
    At: Range { start: Position { line: 5, character: 13 }, end: Position { line: 5, character: 19 } }
    "#);
}

#[test]
fn multi_segment_first_bad() {
    test_transform!(quick_fix, "
    fn main() {
        sra<caret>rknet::syscalls::emit_event_syscall(array![1].span(), array![2].span()).unwrap_syscall();
    }
    ", @r#"
    Title: Did you mean `starknet`?
    Add new text: "starknet"
    At: Range { start: Position { line: 1, character: 4 }, end: Position { line: 1, character: 12 } }
    "#);
}

#[test]
fn multi_segment_second_bad() {
    test_transform!(quick_fix, "
    fn main() {
        starknet::sysk<caret>ells::emit_event_syscall(array![1].span(), array![2].span()).unwrap_syscall();
    }
    ", @r#"
    Title: Did you mean `syscalls`?
    Add new text: "syscalls"
    At: Range { start: Position { line: 1, character: 14 }, end: Position { line: 1, character: 22 } }
    "#);
}

#[test]
fn multi_segment_third_bad() {
    test_transform!(quick_fix, "
    fn main() {
        starknet::syscalls::emil_event<caret>_syscal(array![1].span(), array![2].span()).unwrap_syscall();
    }
    ", @r#"
    Title: Did you mean `emit_event_syscall`?
    Add new text: "emit_event_syscall"
    At: Range { start: Position { line: 1, character: 24 }, end: Position { line: 1, character: 41 } }
    Title: Did you mean `storage_write_syscall`?
    Add new text: "storage_write_syscall"
    At: Range { start: Position { line: 1, character: 24 }, end: Position { line: 1, character: 41 } }
    Title: Did you mean `meta_tx_v0_syscall`?
    Add new text: "meta_tx_v0_syscall"
    At: Range { start: Position { line: 1, character: 24 }, end: Position { line: 1, character: 41 } }
    "#);
}

#[test]
fn multi_segment_with_trivia_comment() {
    test_transform!(quick_fix, "
    fn main() {
        starknet
        // this is a comment
        ::sysk<caret>alls::emit_event_syscall(array![1].span(), array![2].span()).unwrap_syscall();
    }
    ", @r#"
    Title: Did you mean `syscalls`?
    Add new text: "syscalls"
    At: Range { start: Position { line: 3, character: 6 }, end: Position { line: 3, character: 14 } }
    "#);
}

#[test]
fn multi_segment_with_trivia_whitespace() {
    test_transform!(quick_fix, "
    fn main() {
        starknet::    sysk<caret>ells    ::emit_event_syscall(array![1].span(), array![2].span()).unwrap_syscall();
    }
    ", @r#"
    Title: Did you mean `syscalls`?
    Add new text: "syscalls"
    At: Range { start: Position { line: 1, character: 18 }, end: Position { line: 1, character: 26 } }
    "#);
}

#[test]
fn in_proc_macro_controlled_code() {
    test_transform!(quick_fix_with_macros, "
    #[test]
    fn test_similar_identifier() {
        snforge_std::generate_<caret>rando_felt();
    }
    ", @r#"
    Title: Did you mean `generate_random_felt`?
    Add new text: "generate_random_felt"
    At: Range { start: Position { line: 2, character: 17 }, end: Position { line: 2, character: 36 } }
    "#);
}