Skip to content

Commit 854caf3

Browse files
authored
Merge pull request rust-lang#18757 from roife/fix-17812
feat: support updating snapshot tests with codelens/hovering/runnables
2 parents 1334961 + dbf07ba commit 854caf3

File tree

13 files changed

+540
-97
lines changed

13 files changed

+540
-97
lines changed

src/tools/rust-analyzer/crates/hir/src/lib.rs

+6
Original file line numberDiff line numberDiff line change
@@ -5933,6 +5933,12 @@ impl HasCrate for Adt {
59335933
}
59345934
}
59355935

5936+
impl HasCrate for Impl {
5937+
fn krate(&self, db: &dyn HirDatabase) -> Crate {
5938+
self.module(db).krate()
5939+
}
5940+
}
5941+
59365942
impl HasCrate for Module {
59375943
fn krate(&self, _: &dyn HirDatabase) -> Crate {
59385944
Module::krate(*self)

src/tools/rust-analyzer/crates/ide/src/annotations.rs

+54-14
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,11 @@ fn main() {
316316
},
317317
kind: Bin,
318318
cfg: None,
319+
update_test: UpdateTest {
320+
expect_test: false,
321+
insta: false,
322+
snapbox: false,
323+
},
319324
},
320325
),
321326
},
@@ -401,6 +406,11 @@ fn main() {
401406
},
402407
kind: Bin,
403408
cfg: None,
409+
update_test: UpdateTest {
410+
expect_test: false,
411+
insta: false,
412+
snapbox: false,
413+
},
404414
},
405415
),
406416
},
@@ -537,6 +547,11 @@ fn main() {
537547
},
538548
kind: Bin,
539549
cfg: None,
550+
update_test: UpdateTest {
551+
expect_test: false,
552+
insta: false,
553+
snapbox: false,
554+
},
540555
},
541556
),
542557
},
@@ -597,6 +612,11 @@ fn main() {}
597612
},
598613
kind: Bin,
599614
cfg: None,
615+
update_test: UpdateTest {
616+
expect_test: false,
617+
insta: false,
618+
snapbox: false,
619+
},
600620
},
601621
),
602622
},
@@ -709,6 +729,11 @@ fn main() {
709729
},
710730
kind: Bin,
711731
cfg: None,
732+
update_test: UpdateTest {
733+
expect_test: false,
734+
insta: false,
735+
snapbox: false,
736+
},
712737
},
713738
),
714739
},
@@ -744,6 +769,20 @@ mod tests {
744769
"#,
745770
expect![[r#"
746771
[
772+
Annotation {
773+
range: 3..7,
774+
kind: HasReferences {
775+
pos: FilePositionWrapper {
776+
file_id: FileId(
777+
0,
778+
),
779+
offset: 3,
780+
},
781+
data: Some(
782+
[],
783+
),
784+
},
785+
},
747786
Annotation {
748787
range: 3..7,
749788
kind: Runnable(
@@ -760,23 +799,14 @@ mod tests {
760799
},
761800
kind: Bin,
762801
cfg: None,
802+
update_test: UpdateTest {
803+
expect_test: false,
804+
insta: false,
805+
snapbox: false,
806+
},
763807
},
764808
),
765809
},
766-
Annotation {
767-
range: 3..7,
768-
kind: HasReferences {
769-
pos: FilePositionWrapper {
770-
file_id: FileId(
771-
0,
772-
),
773-
offset: 3,
774-
},
775-
data: Some(
776-
[],
777-
),
778-
},
779-
},
780810
Annotation {
781811
range: 18..23,
782812
kind: Runnable(
@@ -796,6 +826,11 @@ mod tests {
796826
path: "tests",
797827
},
798828
cfg: None,
829+
update_test: UpdateTest {
830+
expect_test: false,
831+
insta: false,
832+
snapbox: false,
833+
},
799834
},
800835
),
801836
},
@@ -822,6 +857,11 @@ mod tests {
822857
},
823858
},
824859
cfg: None,
860+
update_test: UpdateTest {
861+
expect_test: false,
862+
insta: false,
863+
snapbox: false,
864+
},
825865
},
826866
),
827867
},

src/tools/rust-analyzer/crates/ide/src/hover/tests.rs

+127-21
Original file line numberDiff line numberDiff line change
@@ -3260,6 +3260,11 @@ fn foo_$0test() {}
32603260
},
32613261
},
32623262
cfg: None,
3263+
update_test: UpdateTest {
3264+
expect_test: false,
3265+
insta: false,
3266+
snapbox: false,
3267+
},
32633268
},
32643269
),
32653270
]
@@ -3277,28 +3282,33 @@ mod tests$0 {
32773282
}
32783283
"#,
32793284
expect![[r#"
3280-
[
3281-
Runnable(
3282-
Runnable {
3283-
use_name_in_title: false,
3284-
nav: NavigationTarget {
3285-
file_id: FileId(
3286-
0,
3287-
),
3288-
full_range: 0..46,
3289-
focus_range: 4..9,
3290-
name: "tests",
3291-
kind: Module,
3292-
description: "mod tests",
3293-
},
3294-
kind: TestMod {
3295-
path: "tests",
3296-
},
3297-
cfg: None,
3285+
[
3286+
Runnable(
3287+
Runnable {
3288+
use_name_in_title: false,
3289+
nav: NavigationTarget {
3290+
file_id: FileId(
3291+
0,
3292+
),
3293+
full_range: 0..46,
3294+
focus_range: 4..9,
3295+
name: "tests",
3296+
kind: Module,
3297+
description: "mod tests",
32983298
},
3299-
),
3300-
]
3301-
"#]],
3299+
kind: TestMod {
3300+
path: "tests",
3301+
},
3302+
cfg: None,
3303+
update_test: UpdateTest {
3304+
expect_test: false,
3305+
insta: false,
3306+
snapbox: false,
3307+
},
3308+
},
3309+
),
3310+
]
3311+
"#]],
33023312
);
33033313
}
33043314

@@ -10029,3 +10039,99 @@ fn bar() {
1002910039
"#]],
1003010040
);
1003110041
}
10042+
10043+
#[test]
10044+
fn test_runnables_with_snapshot_tests() {
10045+
check_actions(
10046+
r#"
10047+
//- /lib.rs crate:foo deps:expect_test,insta,snapbox
10048+
use expect_test::expect;
10049+
use insta::assert_debug_snapshot;
10050+
use snapbox::Assert;
10051+
10052+
#[test]
10053+
fn test$0() {
10054+
let actual = "new25";
10055+
expect!["new25"].assert_eq(&actual);
10056+
Assert::new()
10057+
.action_env("SNAPSHOTS")
10058+
.eq(actual, snapbox::str!["new25"]);
10059+
assert_debug_snapshot!(actual);
10060+
}
10061+
10062+
//- /lib.rs crate:expect_test
10063+
struct Expect;
10064+
10065+
impl Expect {
10066+
fn assert_eq(&self, actual: &str) {}
10067+
}
10068+
10069+
#[macro_export]
10070+
macro_rules! expect {
10071+
($e:expr) => Expect; // dummy
10072+
}
10073+
10074+
//- /lib.rs crate:insta
10075+
#[macro_export]
10076+
macro_rules! assert_debug_snapshot {
10077+
($e:expr) => {}; // dummy
10078+
}
10079+
10080+
//- /lib.rs crate:snapbox
10081+
pub struct Assert;
10082+
10083+
impl Assert {
10084+
pub fn new() -> Self { Assert }
10085+
10086+
pub fn action_env(&self, env: &str) -> &Self { self }
10087+
10088+
pub fn eq(&self, actual: &str, expected: &str) {}
10089+
}
10090+
10091+
#[macro_export]
10092+
macro_rules! str {
10093+
($e:expr) => ""; // dummy
10094+
}
10095+
"#,
10096+
expect![[r#"
10097+
[
10098+
Reference(
10099+
FilePositionWrapper {
10100+
file_id: FileId(
10101+
0,
10102+
),
10103+
offset: 92,
10104+
},
10105+
),
10106+
Runnable(
10107+
Runnable {
10108+
use_name_in_title: false,
10109+
nav: NavigationTarget {
10110+
file_id: FileId(
10111+
0,
10112+
),
10113+
full_range: 81..301,
10114+
focus_range: 92..96,
10115+
name: "test",
10116+
kind: Function,
10117+
},
10118+
kind: Test {
10119+
test_id: Path(
10120+
"test",
10121+
),
10122+
attr: TestAttr {
10123+
ignore: false,
10124+
},
10125+
},
10126+
cfg: None,
10127+
update_test: UpdateTest {
10128+
expect_test: true,
10129+
insta: true,
10130+
snapbox: true,
10131+
},
10132+
},
10133+
),
10134+
]
10135+
"#]],
10136+
);
10137+
}

0 commit comments

Comments
 (0)