aboutsummaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
* | "Fix" mbe to work with decomposed tokensAleksey Kladov2019-09-105-84/+45
| | | | | | | | We regressed $i * 2 where $i = 1 + 1, need to fix that!
* | WIP: switch to fully decomposed tokens internallyAleksey Kladov2019-09-1012-280/+423
|/
* introduce bump as a better-checked alternative to bump_anyAleksey Kladov2019-09-092-2/+8
|
* rename bump -> bump_anyAleksey Kladov2019-09-0916-132/+132
|
* Merge #1795bors[bot]2019-09-097-239/+393
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1795: Make macro scope a real name scope and fix some details r=matklad a=uHOOCCOOHu This PR make macro's module scope a real name scope in `PerNs`, instead of handling `Either<PerNs, MacroDef>` everywhere. In `rustc`, the macro scope behave exactly the same as type and value scope. It is valid that macros, types and values having exact the same name, and a `use` statement will import all of them. This happened to module `alloc::vec` and macro `alloc::vec!`. So `Either` is not suitable here. There is a trap that not only does `#[macro_use]` import all `#[macro_export] macro_rules`, but also imports all macros `use`d in the crate root. In other words, it just _imports all macros in the module scope of crate root_. (Visibility of `use` doesn't matter.) And it also happened to `libstd` which has `use alloc_crate::vec;` in crate root to re-export `alloc::vec`, which it both a module and a macro. The current implementation of `#[macro_use] extern crate` doesn't work here, so that is why only macros directly from `libstd` like `dbg!` work, while `vec!` from `liballoc` doesn't. This PR fixes this. Another point is that, after some tests, I figure out that _`macro_rules` does NOT define macro in current module scope at all_. It defines itself in legacy textual scope. And if `#[macro_export]` is given, it also is defined ONLY in module scope of crate root. (Then being `macro_use`d, as mentioned above) (Well, the nightly [Declarative Macro 2.0](https://github.com/rust-lang/rust/issues/39412) simply always define in current module scope only, just like normal items do. But it is not yet supported by us) After this PR, in my test, all non-builtin macros are resolved now. (Hover text for documentation is available) So it fixes #1688 . Since compiler builtin macros are marked as `#[rustc_doc_only_macro]` instead of `#[macro_export]`, we can simply tweak the condition to let it resolved, but it may cause expansion error. Some critical notes are also given in doc-comments. <img width="447" alt="Screenshot_20190909_223859" src="https://user-images.githubusercontent.com/14816024/64540366-ac1ef600-d352-11e9-804f-566ba7559206.png"> Co-authored-by: uHOOCCOOHu <[email protected]>
| * StripuHOOCCOOHu2019-09-092-12/+3
| |
| * Make macro scope a real name scopeuHOOCCOOHu2019-09-098-236/+399
| | | | | | | | Fix some details about module scoping
* | modify testsNiko Matsakis2019-09-091-6/+6
| | | | | | | | | | | | | | | | Some method resolution tests now yield `{unknown}` where they did not before. Other tests now succeed, likely because this is helping the solver steer its efforts.
* | also make "unknown" case non-enumerableNiko Matsakis2019-09-091-1/+1
| |
* | make all traits non-enumerableNiko Matsakis2019-09-091-9/+1
| | | | | | | | | | As discussed on Zulip, this actually matches the present behavior of rustc.
* | Merge #1789bors[bot]2019-09-0911-19/+185
|\ \ | | | | | | | | | | | | | | | | | | | | | 1789: Debug r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | document moduleAleksey Kladov2019-09-092-8/+27
| | |
| * | introduce hir debugging infraAleksey Kladov2019-09-0910-18/+165
| |/ | | | | | | | | | | | | | | | | | | | | | | This is to make debugging rust-analyzer easier. The idea is that `dbg!(krate.debug(db))` will print the actual, fuzzy crate name, instead of precise ID. Debug printing infra is a separate thing, to make sure that the actual hir doesn't have access to global information. Do not use `.debug` for `log::` logging: debugging executes queries, and might introduce unneded dependencies to the crate graph
* / tiny simplificationAleksey Kladov2019-09-094-5/+8
|/
* Merge #1793bors[bot]2019-09-093-2/+44
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1793: Fix outer doc-comments of `macro_rules` r=matklad a=uHOOCCOOHu Document comments of `macro_rules!` is currently parsed outside the `MACRO_CALL` node, which makes `DocCommentsOwner::doc_comments()` always empty. For the input: ```rust /// Some docs macro_rules! foo { () => {}; } ``` Current parsing tree is: ``` SOURCE_FILE COMMENT // <- This should be children of MACRO_CALL WHITESPACE MACRO_CALL PATH <...omitted...> ``` It should be: ``` SOURCE_FILE MACRO_CALL COMMENT WHITESPACE PATH <...omitted...> ``` Co-authored-by: uHOOCCOOHu <[email protected]>
| * Fix outer doc-comments of `macro_rules`uHOOCCOOHu2019-09-093-2/+44
| |
* | Fix testuHOOCCOOHu2019-09-081-3/+0
| |
* | Rename `textual_macro` -> `legacy_macro`uHOOCCOOHu2019-09-084-29/+39
| | | | | | | | Add comments
* | Revert "Replace with immutable map to avoid heavy cloning"uHOOCCOOHu2019-09-083-9/+2
| | | | | | | | | | | | This reverts commit 2c494eb803c88ef5d23607c3b156fce60c2b8076. See: https://github.com/rust-analyzer/rust-analyzer/pull/1784#issuecomment-529119924
* | Replace with immutable map to avoid heavy cloninguHOOCCOOHu2019-09-083-2/+9
| |
* | Resolve textual scoped macros inside itemuHOOCCOOHu2019-09-084-9/+65
| |
* | Support textual scoped macrosuHOOCCOOHu2019-09-084-34/+158
|/
* Minor typo fix for ra_assists code docNelson Chen2019-09-081-1/+1
|
* cleanup hir db importsAleksey Kladov2019-09-0824-43/+65
|
* don't cycle when processing macros from prelude in preludeAleksey Kladov2019-09-072-2/+33
|
* Fix crash for super trait cyclesFlorian Diebold2019-09-073-19/+39
|
* Fix Chalk environmentsFlorian Diebold2019-09-072-3/+4
| | | | | The clauses need to be wrapped in `FromEnv` clauses for elaboration (i.e. things like inferring `T: Clone` from `T: Copy`) to work correctly.
* Use traits from where clauses for method resolutionFlorian Diebold2019-09-074-21/+44
| | | | | E.g. if we have `T: some::Trait`, we can call methods from that trait without it needing to be in scope.
* Lower `Fn(X, Y) -> Z` pathsFlorian Diebold2019-09-074-13/+55
|
* Lower bounds on trait definition, and resolve assoc types from super traitsFlorian Diebold2019-09-0710-38/+101
|
* Add some more testsFlorian Diebold2019-09-071-0/+205
|
* simplifyAleksey Kladov2019-09-061-38/+40
|
* don't deadlock on shutdownAleksey Kladov2019-09-063-4/+4
| | | | | | | Specifically, when we tear down IO threads, we should take care to dispose connection. closes #1775
* add option to disable notifyAleksey Kladov2019-09-068-66/+134
|
* Merge #1779bors[bot]2019-09-062-49/+51
|\ | | | | | | | | | | | | | | 1779: minor r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * minorAleksey Kladov2019-09-062-49/+51
| |
* | make source_root API more abstractAleksey Kladov2019-09-067-17/+31
|/
* Merge #1772bors[bot]2019-09-051-1/+1
|\ | | | | | | | | | | | | | | 1772: switch to rustc_lexer crate r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * switch to rustc_lexer crateAleksey Kladov2019-09-051-1/+1
| |
* | Merge #1771bors[bot]2019-09-053-18/+91
|\ \ | |/ |/| | | | | | | | | | | | | | | | | 1771: Further tweak for macro_use on extern crate r=matklad a=uHOOCCOOHu Some more tweaks to #1743 to behave more like `rustc` 1. Hoist macros from `#[macro_use] extern crate`, so that they can be used before `extern crate`. 2. Implicit `#[macro_use]` for `prelude` if exists Co-authored-by: uHOOCCOOHu <[email protected]>
| * Hoist macros from extern crate with macro_useuHOOCCOOHu2019-09-052-14/+20
| |
| * Consider prelude to be `macro_use`uHOOCCOOHu2019-09-053-4/+71
| |
* | Merge #1770bors[bot]2019-09-055-184/+191
|\ \ | | | | | | | | | | | | | | | | | | | | | 1770: rename test file to match impl file r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | rename test file to match impl fileAleksey Kladov2019-09-052-1/+1
| | |
| * | move mod resolution to a separate fileAleksey Kladov2019-09-053-183/+190
| | |
* | | fix renaming of modulesAleksey Kladov2019-09-053-80/+92
| | |
* | | better error recovery for use treesAleksey Kladov2019-09-055-3/+65
|/ /
* | Merge #1766bors[bot]2019-09-051-357/+357
|\ \ | | | | | | | | | | | | | | | | | | | | | 1766: always use \n newlines r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | always use \n newlinesAleksey Kladov2019-09-051-357/+357
| | |
* | | close #1763ivfranco2019-09-051-1/+1
| | |