emmylua_ls 0.8.2

A language server for emmylua.
#[cfg(test)]
mod tests {

    use crate::handlers::test_lib::{ProviderVirtualWorkspace, VirtualCompletionResolveItem};

    #[test]
    fn test_1() {
        let mut ws = ProviderVirtualWorkspace::new();

        assert!(ws.check_completion_resolve(
            r#"
                ---@overload fun(event: "AAA", callback: fun(trg: string, data: number)): number
                ---@overload fun(event: "BBB", callback: fun(trg: string, data: string)): string
                ---@param event string
                ---@param callback fun(trg: string, data: number)
                ---@return number
                local function test(event, callback)
                    if event == "" then
                    end
                end

                test<??>
        "#,
            VirtualCompletionResolveItem {
                detail:
                    "local function test(event: string, callback: fun(trg: string, data: number)) -> number (+2 overloads)"
                        .to_string(),
            },
        ));
    }
    #[test]
    fn test_2() {
        let mut ws = ProviderVirtualWorkspace::new();

        assert!(ws.check_completion_resolve(
            r#"
            ---@class Hover.Test2
            ---@field event fun(event: "游戏-初始化")
            ---@field event fun(event: "游戏-恢复", key: string)
            local Test2 = {}

            Test2.<??>
        "#,
            VirtualCompletionResolveItem {
                detail: "(field) Test2.event(event: \"游戏-初始化\") (+1 overloads)".to_string(),
            },
        ));
    }

    #[test]
    fn test_table_field_function_1() {
        let mut ws = ProviderVirtualWorkspace::new();
        assert!(ws.check_completion_resolve(
            r#"
            ---@class T
            ---@field func fun(self:string) 注释注释

            ---@type T
            local t = {
                <??>
            }
            "#,
            VirtualCompletionResolveItem {
                detail: "(field) T.func(self: string)".to_string(),
            },
        ));
    }

    #[test]
    fn test_table_field_function_2() {
        let mut ws = ProviderVirtualWorkspace::new();
        assert!(ws.check_completion_resolve(
            r#"
            ---@class T
            ---@field func fun(self: T) 注释注释

            ---@type T
            local t = {
                <??>
            }
            "#,
            VirtualCompletionResolveItem {
                detail: "(method) T:func()".to_string(),
            },
        ));
    }
}