Skip to content

Commit 471d44e

Browse files
bors[bot]matklad
andauthored
Merge #5014
5014: Use only one code-path for parsing fixtures r=matklad a=matklad This removes leading newlines everywhere, shifting all ranges in tests by one bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 44cf263 + d016cb4 commit 471d44e

File tree

17 files changed

+2814
-2848
lines changed

17 files changed

+2814
-2848
lines changed

crates/ra_assists/src/handlers/add_function.rs

+1
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,7 @@ fn main() {
986986
",
987987
r"
988988
989+
989990
pub(crate) fn bar() {
990991
${0:todo!()}
991992
}",

crates/ra_assists/src/handlers/fill_match_arms.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -763,9 +763,9 @@ mod tests {
763763
fn foo(opt: Option<i32>) {
764764
match opt<|> {
765765
}
766-
}"#;
767-
let before =
768-
&format!("//- /main.rs crate:main deps:core\n{}{}", before, FamousDefs::FIXTURE);
766+
}
767+
"#;
768+
let before = &format!("//- /main.rs crate:main deps:core{}{}", before, FamousDefs::FIXTURE);
769769

770770
check_assist(
771771
fill_match_arms,

crates/ra_assists/src/handlers/introduce_variable.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -226,27 +226,31 @@ fn foo() {
226226
mark::check!(test_introduce_var_last_expr);
227227
check_assist(
228228
introduce_variable,
229-
"
229+
r#"
230230
fn foo() {
231231
bar(<|>1 + 1<|>)
232-
}",
233-
"
232+
}
233+
"#,
234+
r#"
234235
fn foo() {
235236
let $0var_name = 1 + 1;
236237
bar(var_name)
237-
}",
238+
}
239+
"#,
238240
);
239241
check_assist(
240242
introduce_variable,
241-
"
243+
r#"
242244
fn foo() {
243245
<|>bar(1 + 1)<|>
244-
}",
245-
"
246+
}
247+
"#,
248+
r#"
246249
fn foo() {
247250
let $0var_name = bar(1 + 1);
248251
var_name
249-
}",
252+
}
253+
"#,
250254
)
251255
}
252256

crates/ra_assists/src/handlers/raw_string.rs

+24-24
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,16 @@ mod test {
158158
check_assist(
159159
make_raw_string,
160160
r#"
161-
fn f() {
162-
let s = <|>"random\nstring";
163-
}
164-
"#,
161+
fn f() {
162+
let s = <|>"random\nstring";
163+
}
164+
"#,
165165
r##"
166-
fn f() {
167-
let s = r#"random
166+
fn f() {
167+
let s = r#"random
168168
string"#;
169-
}
170-
"##,
169+
}
170+
"##,
171171
)
172172
}
173173

@@ -193,16 +193,16 @@ string"#;
193193
check_assist(
194194
make_raw_string,
195195
r###"
196-
fn f() {
197-
let s = <|>"#random##\nstring";
198-
}
199-
"###,
196+
fn f() {
197+
let s = <|>"#random##\nstring";
198+
}
199+
"###,
200200
r####"
201-
fn f() {
202-
let s = r#"#random##
201+
fn f() {
202+
let s = r#"#random##
203203
string"#;
204-
}
205-
"####,
204+
}
205+
"####,
206206
)
207207
}
208208

@@ -211,16 +211,16 @@ string"#;
211211
check_assist(
212212
make_raw_string,
213213
r###"
214-
fn f() {
215-
let s = <|>"#random\"##\nstring";
216-
}
217-
"###,
214+
fn f() {
215+
let s = <|>"#random\"##\nstring";
216+
}
217+
"###,
218218
r####"
219-
fn f() {
220-
let s = r###"#random"##
219+
fn f() {
220+
let s = r###"#random"##
221221
string"###;
222-
}
223-
"####,
222+
}
223+
"####,
224224
)
225225
}
226226

crates/ra_assists/src/tests.rs

+11-21
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ use hir::Semantics;
44
use ra_db::{fixture::WithFixture, FileId, FileRange, SourceDatabaseExt};
55
use ra_ide_db::RootDatabase;
66
use ra_syntax::TextRange;
7-
use test_utils::{
8-
assert_eq_text, extract_offset, extract_range, extract_range_or_offset, RangeOrOffset,
9-
};
7+
use test_utils::{assert_eq_text, extract_offset, extract_range};
108

119
use crate::{handlers::Handler, Assist, AssistConfig, AssistContext, Assists};
10+
use stdx::trim_indent;
1211

1312
pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) {
1413
RootDatabase::with_single_file(text)
1514
}
1615

1716
pub(crate) fn check_assist(assist: Handler, ra_fixture_before: &str, ra_fixture_after: &str) {
18-
check(assist, ra_fixture_before, ExpectedResult::After(ra_fixture_after));
17+
let ra_fixture_after = trim_indent(ra_fixture_after);
18+
check(assist, ra_fixture_before, ExpectedResult::After(&ra_fixture_after));
1919
}
2020

2121
// FIXME: instead of having a separate function here, maybe use
@@ -30,8 +30,9 @@ pub(crate) fn check_assist_not_applicable(assist: Handler, ra_fixture: &str) {
3030
}
3131

3232
fn check_doc_test(assist_id: &str, before: &str, after: &str) {
33-
let (selection, before) = extract_range_or_offset(before);
34-
let (db, file_id) = crate::tests::with_single_file(&before);
33+
let after = trim_indent(after);
34+
let (db, file_id, selection) = RootDatabase::with_range_or_offset(&before);
35+
let before = db.file_text(file_id).to_string();
3536
let frange = FileRange { file_id, range: selection.into() };
3637

3738
let mut assist = Assist::resolved(&db, &AssistConfig::default(), frange)
@@ -51,11 +52,11 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) {
5152

5253
let actual = {
5354
let change = assist.source_change.source_file_edits.pop().unwrap();
54-
let mut actual = before.clone();
55+
let mut actual = before;
5556
change.edit.apply(&mut actual);
5657
actual
5758
};
58-
assert_eq_text!(after, &actual);
59+
assert_eq_text!(&after, &actual);
5960
}
6061

6162
enum ExpectedResult<'a> {
@@ -65,19 +66,8 @@ enum ExpectedResult<'a> {
6566
}
6667

6768
fn check(handler: Handler, before: &str, expected: ExpectedResult) {
68-
let (text_without_caret, file_with_caret_id, range_or_offset, db) = if before.contains("//-") {
69-
let (db, position) = RootDatabase::with_position(before);
70-
(
71-
db.file_text(position.file_id).as_ref().to_owned(),
72-
position.file_id,
73-
RangeOrOffset::Offset(position.offset),
74-
db,
75-
)
76-
} else {
77-
let (range_or_offset, text_without_caret) = extract_range_or_offset(before);
78-
let (db, file_id) = with_single_file(&text_without_caret);
79-
(text_without_caret, file_id, range_or_offset, db)
80-
};
69+
let (db, file_with_caret_id, range_or_offset) = RootDatabase::with_range_or_offset(before);
70+
let text_without_caret = db.file_text(file_with_caret_id).to_string();
8171

8272
let frange = FileRange { file_id: file_with_caret_id, range: range_or_offset.into() };
8373

crates/ra_assists/src/utils.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,7 @@ pub(crate) struct FamousDefs<'a, 'b>(pub(crate) &'a Semantics<'b, RootDatabase>,
198198
#[allow(non_snake_case)]
199199
impl FamousDefs<'_, '_> {
200200
#[cfg(test)]
201-
pub(crate) const FIXTURE: &'static str = r#"
202-
//- /libcore.rs crate:core
201+
pub(crate) const FIXTURE: &'static str = r#"//- /libcore.rs crate:core
203202
pub mod convert {
204203
pub trait From<T> {
205204
fn from(T) -> Self;

crates/ra_db/src/fixture.rs

+18-53
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use std::{str::FromStr, sync::Arc};
6161

6262
use ra_cfg::CfgOptions;
6363
use rustc_hash::FxHashMap;
64-
use test_utils::{extract_offset, Fixture, CURSOR_MARKER};
64+
use test_utils::{extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER};
6565
use vfs::{file_set::FileSet, VfsPath};
6666

6767
use crate::{
@@ -74,8 +74,9 @@ pub const WORKSPACE: SourceRootId = SourceRootId(0);
7474
pub trait WithFixture: Default + SourceDatabaseExt + 'static {
7575
fn with_single_file(text: &str) -> (Self, FileId) {
7676
let mut db = Self::default();
77-
let file_id = with_single_file(&mut db, text);
78-
(db, file_id)
77+
let (_, files) = with_files(&mut db, text);
78+
assert_eq!(files.len(), 1);
79+
(db, files[0])
7980
}
8081

8182
fn with_files(ra_fixture: &str) -> Self {
@@ -86,9 +87,19 @@ pub trait WithFixture: Default + SourceDatabaseExt + 'static {
8687
}
8788

8889
fn with_position(ra_fixture: &str) -> (Self, FilePosition) {
90+
let (db, file_id, range_or_offset) = Self::with_range_or_offset(ra_fixture);
91+
let offset = match range_or_offset {
92+
RangeOrOffset::Range(_) => panic!(),
93+
RangeOrOffset::Offset(it) => it,
94+
};
95+
(db, FilePosition { file_id, offset })
96+
}
97+
98+
fn with_range_or_offset(ra_fixture: &str) -> (Self, FileId, RangeOrOffset) {
8999
let mut db = Self::default();
90100
let (pos, _) = with_files(&mut db, ra_fixture);
91-
(db, pos.unwrap())
101+
let (file_id, range_or_offset) = pos.unwrap();
102+
(db, file_id, range_or_offset)
92103
}
93104

94105
fn test_crate(&self) -> CrateId {
@@ -102,56 +113,10 @@ pub trait WithFixture: Default + SourceDatabaseExt + 'static {
102113

103114
impl<DB: SourceDatabaseExt + Default + 'static> WithFixture for DB {}
104115

105-
fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId {
106-
let file_id = FileId(0);
107-
let mut file_set = vfs::file_set::FileSet::default();
108-
file_set.insert(file_id, vfs::VfsPath::new_virtual_path("/main.rs".to_string()));
109-
110-
let source_root = SourceRoot::new_local(file_set);
111-
112-
let crate_graph = if let Some(meta) = ra_fixture.lines().find(|it| it.contains("//-")) {
113-
let entry = Fixture::parse_meta_line(meta.trim());
114-
let meta = match ParsedMeta::from(&entry) {
115-
ParsedMeta::File(it) => it,
116-
};
117-
118-
let mut crate_graph = CrateGraph::default();
119-
crate_graph.add_crate_root(
120-
file_id,
121-
meta.edition,
122-
meta.krate.map(|name| {
123-
CrateName::new(&name).expect("Fixture crate name should not contain dashes")
124-
}),
125-
meta.cfg,
126-
meta.env,
127-
Default::default(),
128-
);
129-
crate_graph
130-
} else {
131-
let mut crate_graph = CrateGraph::default();
132-
crate_graph.add_crate_root(
133-
file_id,
134-
Edition::Edition2018,
135-
None,
136-
CfgOptions::default(),
137-
Env::default(),
138-
Default::default(),
139-
);
140-
crate_graph
141-
};
142-
143-
db.set_file_text(file_id, Arc::new(ra_fixture.to_string()));
144-
db.set_file_source_root(file_id, WORKSPACE);
145-
db.set_source_root(WORKSPACE, Arc::new(source_root));
146-
db.set_crate_graph(Arc::new(crate_graph));
147-
148-
file_id
149-
}
150-
151116
fn with_files(
152117
db: &mut dyn SourceDatabaseExt,
153118
fixture: &str,
154-
) -> (Option<FilePosition>, Vec<FileId>) {
119+
) -> (Option<(FileId, RangeOrOffset)>, Vec<FileId>) {
155120
let fixture = Fixture::parse(fixture);
156121

157122
let mut files = Vec::new();
@@ -193,9 +158,9 @@ fn with_files(
193158
}
194159

195160
let text = if entry.text.contains(CURSOR_MARKER) {
196-
let (offset, text) = extract_offset(&entry.text);
161+
let (range_or_offset, text) = extract_range_or_offset(&entry.text);
197162
assert!(file_position.is_none());
198-
file_position = Some(FilePosition { file_id, offset });
163+
file_position = Some((file_id, range_or_offset));
199164
text.to_string()
200165
} else {
201166
entry.text.to_string()

0 commit comments

Comments
 (0)