mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 22:01:37 +00:00
Cleanup
This commit is contained in:
parent
88267c86c0
commit
8a39519e1c
5 changed files with 81 additions and 79 deletions
|
@ -479,3 +479,77 @@ fn analysis_is_send() {
|
||||||
fn is_send<T: Send>() {}
|
fn is_send<T: Send>() {}
|
||||||
is_send::<Analysis>();
|
is_send::<Analysis>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{display::NavigationTarget, mock_analysis::single_file, Query};
|
||||||
|
use ra_syntax::{
|
||||||
|
SmolStr,
|
||||||
|
SyntaxKind::{FN_DEF, STRUCT_DEF},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_world_symbols_with_no_container() {
|
||||||
|
let code = r#"
|
||||||
|
enum FooInner { }
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let mut symbols = get_symbols_matching(code, "FooInner");
|
||||||
|
|
||||||
|
let s = symbols.pop().unwrap();
|
||||||
|
|
||||||
|
assert_eq!(s.name(), "FooInner");
|
||||||
|
assert!(s.container_name().is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_world_symbols_include_container_name() {
|
||||||
|
let code = r#"
|
||||||
|
fn foo() {
|
||||||
|
enum FooInner { }
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let mut symbols = get_symbols_matching(code, "FooInner");
|
||||||
|
|
||||||
|
let s = symbols.pop().unwrap();
|
||||||
|
|
||||||
|
assert_eq!(s.name(), "FooInner");
|
||||||
|
assert_eq!(s.container_name(), Some(&SmolStr::new("foo")));
|
||||||
|
|
||||||
|
let code = r#"
|
||||||
|
mod foo {
|
||||||
|
struct FooInner;
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let mut symbols = get_symbols_matching(code, "FooInner");
|
||||||
|
|
||||||
|
let s = symbols.pop().unwrap();
|
||||||
|
|
||||||
|
assert_eq!(s.name(), "FooInner");
|
||||||
|
assert_eq!(s.container_name(), Some(&SmolStr::new("foo")));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_world_symbols_are_case_sensitive() {
|
||||||
|
let code = r#"
|
||||||
|
fn foo() {}
|
||||||
|
|
||||||
|
struct Foo;
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let symbols = get_symbols_matching(code, "Foo");
|
||||||
|
|
||||||
|
let fn_match = symbols.iter().find(|s| s.name() == "foo").map(|s| s.kind());
|
||||||
|
let struct_match = symbols.iter().find(|s| s.name() == "Foo").map(|s| s.kind());
|
||||||
|
|
||||||
|
assert_eq!(fn_match, Some(FN_DEF));
|
||||||
|
assert_eq!(struct_match, Some(STRUCT_DEF));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_symbols_matching(text: &str, query: &str) -> Vec<NavigationTarget> {
|
||||||
|
let (analysis, _) = single_file(text);
|
||||||
|
analysis.symbol_search(Query::new(query.into())).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
//! FIXME: write short doc here
|
//! This crate defines the core datastructure representing IDE state -- `RootDatabase`.
|
||||||
|
//!
|
||||||
|
//! It is mainly a `HirDatabase` for semantic analysis, plus a `SymbolsDatabase`, for fuzzy search.
|
||||||
|
|
||||||
pub mod line_index;
|
pub mod line_index;
|
||||||
pub mod line_index_utils;
|
pub mod line_index_utils;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
//! FIXME: write short doc here
|
//! `LineIndex` maps flat `TextUnit` offsets into `(Line, Column)`
|
||||||
|
//! representation.
|
||||||
|
|
||||||
use ra_syntax::TextUnit;
|
use ra_syntax::TextUnit;
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
|
|
|
@ -18,7 +18,7 @@ struct LineIndexStepIter<'a> {
|
||||||
utf16_chars: Option<(TextUnit, std::slice::Iter<'a, Utf16Char>)>,
|
utf16_chars: Option<(TextUnit, std::slice::Iter<'a, Utf16Char>)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> LineIndexStepIter<'a> {
|
impl LineIndexStepIter<'_> {
|
||||||
fn from(line_index: &LineIndex) -> LineIndexStepIter {
|
fn from(line_index: &LineIndex) -> LineIndexStepIter {
|
||||||
let mut x = LineIndexStepIter { line_index, next_newline_idx: 0, utf16_chars: None };
|
let mut x = LineIndexStepIter { line_index, next_newline_idx: 0, utf16_chars: None };
|
||||||
// skip first newline since it's not real
|
// skip first newline since it's not real
|
||||||
|
@ -27,7 +27,7 @@ impl<'a> LineIndexStepIter<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Iterator for LineIndexStepIter<'a> {
|
impl Iterator for LineIndexStepIter<'_> {
|
||||||
type Item = Step;
|
type Item = Step;
|
||||||
fn next(&mut self) -> Option<Step> {
|
fn next(&mut self) -> Option<Step> {
|
||||||
self.utf16_chars
|
self.utf16_chars
|
||||||
|
|
|
@ -369,78 +369,3 @@ fn to_file_symbol(node: &SyntaxNode, file_id: FileId) -> Option<FileSymbol> {
|
||||||
container_name: None,
|
container_name: None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix this
|
|
||||||
#[cfg(never)]
|
|
||||||
mod tests {
|
|
||||||
use crate::{display::NavigationTarget, mock_analysis::single_file, Query};
|
|
||||||
use ra_syntax::{
|
|
||||||
SmolStr,
|
|
||||||
SyntaxKind::{FN_DEF, STRUCT_DEF},
|
|
||||||
};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_world_symbols_with_no_container() {
|
|
||||||
let code = r#"
|
|
||||||
enum FooInner { }
|
|
||||||
"#;
|
|
||||||
|
|
||||||
let mut symbols = get_symbols_matching(code, "FooInner");
|
|
||||||
|
|
||||||
let s = symbols.pop().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(s.name(), "FooInner");
|
|
||||||
assert!(s.container_name().is_none());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_world_symbols_include_container_name() {
|
|
||||||
let code = r#"
|
|
||||||
fn foo() {
|
|
||||||
enum FooInner { }
|
|
||||||
}
|
|
||||||
"#;
|
|
||||||
|
|
||||||
let mut symbols = get_symbols_matching(code, "FooInner");
|
|
||||||
|
|
||||||
let s = symbols.pop().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(s.name(), "FooInner");
|
|
||||||
assert_eq!(s.container_name(), Some(&SmolStr::new("foo")));
|
|
||||||
|
|
||||||
let code = r#"
|
|
||||||
mod foo {
|
|
||||||
struct FooInner;
|
|
||||||
}
|
|
||||||
"#;
|
|
||||||
|
|
||||||
let mut symbols = get_symbols_matching(code, "FooInner");
|
|
||||||
|
|
||||||
let s = symbols.pop().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(s.name(), "FooInner");
|
|
||||||
assert_eq!(s.container_name(), Some(&SmolStr::new("foo")));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_world_symbols_are_case_sensitive() {
|
|
||||||
let code = r#"
|
|
||||||
fn foo() {}
|
|
||||||
|
|
||||||
struct Foo;
|
|
||||||
"#;
|
|
||||||
|
|
||||||
let symbols = get_symbols_matching(code, "Foo");
|
|
||||||
|
|
||||||
let fn_match = symbols.iter().find(|s| s.name() == "foo").map(|s| s.kind());
|
|
||||||
let struct_match = symbols.iter().find(|s| s.name() == "Foo").map(|s| s.kind());
|
|
||||||
|
|
||||||
assert_eq!(fn_match, Some(FN_DEF));
|
|
||||||
assert_eq!(struct_match, Some(STRUCT_DEF));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_symbols_matching(text: &str, query: &str) -> Vec<NavigationTarget> {
|
|
||||||
let (analysis, _) = single_file(text);
|
|
||||||
analysis.symbol_search(Query::new(query.into())).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue