diff options
-rw-r--r-- | Cargo.lock | 31 | ||||
-rw-r--r-- | crates/hir_def/src/body/tests.rs | 41 | ||||
-rw-r--r-- | crates/hir_def/src/item_tree/lower.rs | 4 |
3 files changed, 50 insertions, 26 deletions
diff --git a/Cargo.lock b/Cargo.lock index 9f7a1d019..bf1b9e417 100644 --- a/Cargo.lock +++ b/Cargo.lock | |||
@@ -77,15 +77,15 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" | |||
77 | 77 | ||
78 | [[package]] | 78 | [[package]] |
79 | name = "backtrace" | 79 | name = "backtrace" |
80 | version = "0.3.55" | 80 | version = "0.3.56" |
81 | source = "registry+https://github.com/rust-lang/crates.io-index" | 81 | source = "registry+https://github.com/rust-lang/crates.io-index" |
82 | checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" | 82 | checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" |
83 | dependencies = [ | 83 | dependencies = [ |
84 | "addr2line", | 84 | "addr2line", |
85 | "cfg-if 1.0.0", | 85 | "cfg-if 1.0.0", |
86 | "libc", | 86 | "libc", |
87 | "miniz_oxide", | 87 | "miniz_oxide", |
88 | "object 0.22.0", | 88 | "object", |
89 | "rustc-demangle", | 89 | "rustc-demangle", |
90 | ] | 90 | ] |
91 | 91 | ||
@@ -418,13 +418,13 @@ dependencies = [ | |||
418 | 418 | ||
419 | [[package]] | 419 | [[package]] |
420 | name = "filetime" | 420 | name = "filetime" |
421 | version = "0.2.13" | 421 | version = "0.2.14" |
422 | source = "registry+https://github.com/rust-lang/crates.io-index" | 422 | source = "registry+https://github.com/rust-lang/crates.io-index" |
423 | checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" | 423 | checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" |
424 | dependencies = [ | 424 | dependencies = [ |
425 | "cfg-if 1.0.0", | 425 | "cfg-if 1.0.0", |
426 | "libc", | 426 | "libc", |
427 | "redox_syscall", | 427 | "redox_syscall 0.2.4", |
428 | "winapi 0.3.9", | 428 | "winapi 0.3.9", |
429 | ] | 429 | ] |
430 | 430 | ||
@@ -1094,12 +1094,6 @@ dependencies = [ | |||
1094 | 1094 | ||
1095 | [[package]] | 1095 | [[package]] |
1096 | name = "object" | 1096 | name = "object" |
1097 | version = "0.22.0" | ||
1098 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1099 | checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" | ||
1100 | |||
1101 | [[package]] | ||
1102 | name = "object" | ||
1103 | version = "0.23.0" | 1097 | version = "0.23.0" |
1104 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1105 | checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" | 1099 | checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" |
@@ -1136,7 +1130,7 @@ dependencies = [ | |||
1136 | "cfg-if 1.0.0", | 1130 | "cfg-if 1.0.0", |
1137 | "instant", | 1131 | "instant", |
1138 | "libc", | 1132 | "libc", |
1139 | "redox_syscall", | 1133 | "redox_syscall 0.1.57", |
1140 | "smallvec", | 1134 | "smallvec", |
1141 | "winapi 0.3.9", | 1135 | "winapi 0.3.9", |
1142 | ] | 1136 | ] |
@@ -1263,7 +1257,7 @@ dependencies = [ | |||
1263 | "libloading", | 1257 | "libloading", |
1264 | "mbe", | 1258 | "mbe", |
1265 | "memmap", | 1259 | "memmap", |
1266 | "object 0.23.0", | 1260 | "object", |
1267 | "proc_macro_api", | 1261 | "proc_macro_api", |
1268 | "proc_macro_test", | 1262 | "proc_macro_test", |
1269 | "serde_derive", | 1263 | "serde_derive", |
@@ -1371,6 +1365,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||
1371 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" | 1365 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" |
1372 | 1366 | ||
1373 | [[package]] | 1367 | [[package]] |
1368 | name = "redox_syscall" | ||
1369 | version = "0.2.4" | ||
1370 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1371 | checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" | ||
1372 | dependencies = [ | ||
1373 | "bitflags", | ||
1374 | ] | ||
1375 | |||
1376 | [[package]] | ||
1374 | name = "regex" | 1377 | name = "regex" |
1375 | version = "1.4.3" | 1378 | version = "1.4.3" |
1376 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" |
diff --git a/crates/hir_def/src/body/tests.rs b/crates/hir_def/src/body/tests.rs index de77d5fc9..2e5d0a01e 100644 --- a/crates/hir_def/src/body/tests.rs +++ b/crates/hir_def/src/body/tests.rs | |||
@@ -6,18 +6,24 @@ use crate::{test_db::TestDB, ModuleDefId}; | |||
6 | use super::*; | 6 | use super::*; |
7 | 7 | ||
8 | fn lower(ra_fixture: &str) -> Arc<Body> { | 8 | fn lower(ra_fixture: &str) -> Arc<Body> { |
9 | let (db, file_id) = crate::test_db::TestDB::with_single_file(ra_fixture); | 9 | let db = crate::test_db::TestDB::with_files(ra_fixture); |
10 | 10 | ||
11 | let krate = db.crate_graph().iter().next().unwrap(); | 11 | let krate = db.crate_graph().iter().next().unwrap(); |
12 | let def_map = db.crate_def_map(krate); | 12 | let def_map = db.crate_def_map(krate); |
13 | let module = def_map.modules_for_file(file_id).next().unwrap(); | 13 | let mut fn_def = None; |
14 | let module = &def_map[module]; | 14 | 'outer: for (_, module) in def_map.modules() { |
15 | let fn_def = match module.scope.declarations().next().unwrap() { | 15 | for decl in module.scope.declarations() { |
16 | ModuleDefId::FunctionId(it) => it, | 16 | match decl { |
17 | _ => panic!(), | 17 | ModuleDefId::FunctionId(it) => { |
18 | }; | 18 | fn_def = Some(it); |
19 | break 'outer; | ||
20 | } | ||
21 | _ => {} | ||
22 | } | ||
23 | } | ||
24 | } | ||
19 | 25 | ||
20 | db.body(fn_def.into()) | 26 | db.body(fn_def.unwrap().into()) |
21 | } | 27 | } |
22 | 28 | ||
23 | fn check_diagnostics(ra_fixture: &str) { | 29 | fn check_diagnostics(ra_fixture: &str) { |
@@ -42,6 +48,25 @@ fn main() { n_nuple!(1,2,3); } | |||
42 | } | 48 | } |
43 | 49 | ||
44 | #[test] | 50 | #[test] |
51 | fn macro_resolve() { | ||
52 | // Regression test for a path resolution bug introduced with inner item handling. | ||
53 | lower( | ||
54 | r" | ||
55 | macro_rules! vec { | ||
56 | () => { () }; | ||
57 | ($elem:expr; $n:expr) => { () }; | ||
58 | ($($x:expr),+ $(,)?) => { () }; | ||
59 | } | ||
60 | mod m { | ||
61 | fn outer() { | ||
62 | let _ = vec![FileSet::default(); self.len()]; | ||
63 | } | ||
64 | } | ||
65 | ", | ||
66 | ); | ||
67 | } | ||
68 | |||
69 | #[test] | ||
45 | fn cfg_diagnostics() { | 70 | fn cfg_diagnostics() { |
46 | check_diagnostics( | 71 | check_diagnostics( |
47 | r" | 72 | r" |
diff --git a/crates/hir_def/src/item_tree/lower.rs b/crates/hir_def/src/item_tree/lower.rs index 61cbbbc8f..ce470fc3b 100644 --- a/crates/hir_def/src/item_tree/lower.rs +++ b/crates/hir_def/src/item_tree/lower.rs | |||
@@ -37,7 +37,6 @@ pub(super) struct Ctx { | |||
37 | file: HirFileId, | 37 | file: HirFileId, |
38 | source_ast_id_map: Arc<AstIdMap>, | 38 | source_ast_id_map: Arc<AstIdMap>, |
39 | body_ctx: crate::body::LowerCtx, | 39 | body_ctx: crate::body::LowerCtx, |
40 | inner_items: Vec<ModItem>, | ||
41 | forced_visibility: Option<RawVisibilityId>, | 40 | forced_visibility: Option<RawVisibilityId>, |
42 | } | 41 | } |
43 | 42 | ||
@@ -49,7 +48,6 @@ impl Ctx { | |||
49 | file, | 48 | file, |
50 | source_ast_id_map: db.ast_id_map(file), | 49 | source_ast_id_map: db.ast_id_map(file), |
51 | body_ctx: crate::body::LowerCtx::new(db, file), | 50 | body_ctx: crate::body::LowerCtx::new(db, file), |
52 | inner_items: Vec::new(), | ||
53 | forced_visibility: None, | 51 | forced_visibility: None, |
54 | } | 52 | } |
55 | } | 53 | } |
@@ -73,8 +71,6 @@ impl Ctx { | |||
73 | } | 71 | } |
74 | 72 | ||
75 | fn lower_mod_item(&mut self, item: &ast::Item, inner: bool) -> Option<ModItems> { | 73 | fn lower_mod_item(&mut self, item: &ast::Item, inner: bool) -> Option<ModItems> { |
76 | assert!(inner || self.inner_items.is_empty()); | ||
77 | |||
78 | // Collect inner items for 1-to-1-lowered items. | 74 | // Collect inner items for 1-to-1-lowered items. |
79 | match item { | 75 | match item { |
80 | ast::Item::Struct(_) | 76 | ast::Item::Struct(_) |