diff options
author | uHOOCCOOHu <[email protected]> | 2019-09-06 17:55:58 +0100 |
---|---|---|
committer | uHOOCCOOHu <[email protected]> | 2019-09-08 18:33:28 +0100 |
commit | e0f305a6bf710f64f789f909da93a8c362823b67 (patch) | |
tree | c34e3c7e8973c5a7137d1e0cd06ce9903f67b710 /crates/ra_hir/src/nameres/tests/macros.rs | |
parent | 07e3976f426aaab93bfd3056374ec6ed32ffb255 (diff) |
Support textual scoped macros
Diffstat (limited to 'crates/ra_hir/src/nameres/tests/macros.rs')
-rw-r--r-- | crates/ra_hir/src/nameres/tests/macros.rs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/crates/ra_hir/src/nameres/tests/macros.rs b/crates/ra_hir/src/nameres/tests/macros.rs index c62152d26..8f0db95f2 100644 --- a/crates/ra_hir/src/nameres/tests/macros.rs +++ b/crates/ra_hir/src/nameres/tests/macros.rs | |||
@@ -277,3 +277,94 @@ fn prelude_cycle() { | |||
277 | ⋮crate::foo | 277 | ⋮crate::foo |
278 | "###); | 278 | "###); |
279 | } | 279 | } |
280 | |||
281 | #[test] | ||
282 | fn plain_macros_are_textual_scoped_between_modules() { | ||
283 | let map = def_map( | ||
284 | r#" | ||
285 | //- /main.rs | ||
286 | mod m1; | ||
287 | bar!(NotFoundNotMacroUse); | ||
288 | |||
289 | mod m2 { | ||
290 | foo!(NotFoundBeforeInside2); | ||
291 | } | ||
292 | |||
293 | macro_rules! foo { | ||
294 | ($x:ident) => { struct $x; } | ||
295 | } | ||
296 | foo!(Ok); | ||
297 | |||
298 | mod m3; | ||
299 | foo!(OkShadowStop); | ||
300 | bar!(NotFoundMacroUseStop); | ||
301 | |||
302 | #[macro_use] | ||
303 | mod m5 { | ||
304 | #[macro_use] | ||
305 | mod m6 { | ||
306 | macro_rules! foo { | ||
307 | ($x:ident) => { fn $x() {} } | ||
308 | } | ||
309 | } | ||
310 | } | ||
311 | foo!(ok_double_macro_use_shadow); | ||
312 | |||
313 | //- /m1.rs | ||
314 | foo!(NotFoundBeforeInside1); | ||
315 | macro_rules! bar { | ||
316 | ($x:ident) => { struct $x; } | ||
317 | } | ||
318 | |||
319 | //- /m3/mod.rs | ||
320 | foo!(OkAfterInside); | ||
321 | macro_rules! foo { | ||
322 | ($x:ident) => { fn $x() {} } | ||
323 | } | ||
324 | foo!(ok_shadow); | ||
325 | |||
326 | #[macro_use] | ||
327 | mod m4; | ||
328 | bar!(OkMacroUse); | ||
329 | |||
330 | //- /m3/m4.rs | ||
331 | foo!(ok_shadow_deep); | ||
332 | macro_rules! bar { | ||
333 | ($x:ident) => { struct $x; } | ||
334 | } | ||
335 | "#, | ||
336 | ); | ||
337 | assert_snapshot!(map, @r###" | ||
338 | ⋮crate | ||
339 | ⋮Ok: t v | ||
340 | ⋮OkShadowStop: t v | ||
341 | ⋮foo: m | ||
342 | ⋮m1: t | ||
343 | ⋮m2: t | ||
344 | ⋮m3: t | ||
345 | ⋮m5: t | ||
346 | ⋮ok_double_macro_use_shadow: v | ||
347 | ⋮ | ||
348 | ⋮crate::m1 | ||
349 | ⋮bar: m | ||
350 | ⋮ | ||
351 | ⋮crate::m5 | ||
352 | ⋮m6: t | ||
353 | ⋮ | ||
354 | ⋮crate::m5::m6 | ||
355 | ⋮foo: m | ||
356 | ⋮ | ||
357 | ⋮crate::m2 | ||
358 | ⋮ | ||
359 | ⋮crate::m3 | ||
360 | ⋮OkAfterInside: t v | ||
361 | ⋮OkMacroUse: t v | ||
362 | ⋮foo: m | ||
363 | ⋮m4: t | ||
364 | ⋮ok_shadow: v | ||
365 | ⋮ | ||
366 | ⋮crate::m3::m4 | ||
367 | ⋮bar: m | ||
368 | ⋮ok_shadow_deep: v | ||
369 | "###); | ||
370 | } | ||