racer 2.1.37

Code completion for Rust
Documentation
use racer_testutils::*;

#[test]
fn completes_pub_fn_from_local_package() {
    let src = "
    extern crate fixtures;

    use fixtures::foo;

    fn main() {
        let x = foo::~
    }
    ";

    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_one_completion(src, Some(srcdir));
        assert_eq!("test", got.matchstr);
    })
}

#[test]
fn completes_pub_fn_from_local_submodule_package() {
    let src = "
    extern crate fixtures;

    use fixtures::bar;

    fn main() {
        let x = bar::~
    }
    ";

    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_one_completion(src, Some(srcdir));
        assert_eq!("bartest", got.matchstr);
    })
}

#[test]
fn follows_use_local_package() {
    let src = "
    extern crate fixtures;

    use fixtures::~
    ";

    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_all_completions(src, Some(srcdir));
        assert!(got.into_iter().any(|ma| ma.matchstr == "foo"));
    })
}

#[test]
fn follows_use_local_package_2018() {
    let src = "
    use test_crat~
    ";

    with_test_project(|dir| {
        let cratedir = dir.nested_dir("test-crate4");
        let testdir = cratedir.nested_dir("tests");
        let got = get_all_completions(src, Some(testdir));
        assert!(got.into_iter().any(|ma| ma.matchstr == "test_crate4"));
    })
}

#[test]
fn finds_extern_crate() {
    let src = "
    extern crate fixtures;
    f~ixtures
    ";

    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_definition(src, Some(srcdir));
        assert_eq!(got.matchstr, "fixtures");
    })
}

// regression test for #800
#[test]
fn completes_typedef_in_external_crate() {
    let src = "
    extern crate fixtures;

    use fixtures::Usize~
    ";

    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_only_completion(src, Some(srcdir));
        assert_eq!(got.matchstr, "UsizeVec");
        assert_eq!(got.contextstr, "pub type UsizeVec = Vec<usize>;");
    })
}

#[test]
fn follows_external_re_export() {
    let src = "
    extern crate rayon;
    fn main() {
        rayon::sco~
    }
    ";
    with_test_project(|dir| {
        let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
        let got = get_only_completion(src, Some(src_dir));
        assert_eq!(got.matchstr, "scope");
    });
}

#[test]
fn follows_rand_crate() {
    let src = "
    extern crate rand;
    use rand::{Rng, thread_rng};
    fn main() {
        let mut rng: Box<Rng> = Box::new(thread_rng());
        rng.gen_rang~
    }
    ";
    with_test_project(|dir| {
        let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
        let got = get_only_completion(src, Some(src_dir));
        assert_eq!(got.matchstr, "gen_range");
    });
}

// For issue 826
#[test]
fn find_crate_doc() {
    let src = "
    extern crate fixtures;
    use fixtur~
    ";
    let doc_str = r#"This is a test project for racer.

# Example:
Basic Usage.

```
extern crate fixtures;
use fixtures::foo;
fn main {
    println!("Racer")
}
```

## Notes:
- We should check racer can parse rust doc style comments
- and some comments..."#;
    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_one_completion(src, Some(srcdir));
        assert_eq!(doc_str, got.docs);
    })
}

// test for re-export
#[test]
fn follows_use_for_reexport() {
    let src = "
    extern crate fixtures;

    use fixtures::use~;
    ";
    with_test_project(|dir| {
        let srcdir = dir.nested_dir("src");
        let got = get_only_completion(src, Some(srcdir));
        assert_eq!(got.matchstr, "useless_func");
    })
}

#[test]
fn completes_cratename_without_extern() {
    let src = "
    fn main() {
        rayon::sco~
    }
    ";
    with_test_project(|dir| {
        let src_dir = dir.nested_dir("test-crate4").nested_dir("src");
        let got = get_only_completion(src, Some(src_dir));
        assert_eq!(got.matchstr, "scope");
    });
}

#[test]
fn doesnt_complete_cratename_without_extern_in_2015() {
    let src = "
    fn main() {
        rayon::sco~
    }
    ";
    with_test_project(|dir| {
        let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
        let got = get_all_completions(src, Some(src_dir));
        assert!(got.is_empty());
    });
}

#[test]
fn complete_extern_crate() {
    let src = "
    extern crate ray~
    ";
    with_test_project(|dir| {
        let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
        let got = get_only_completion(src, Some(src_dir));
        assert_eq!(got.matchstr, "rayon");
    });
}