1
Fork 0
Commit graph

414 commits

Author SHA1 Message Date
Aaron Hill
1498608135
Improve Rustdoc's handling of procedural macros
Fixes #58700
Fixes #58696
Fixes #49553
Fixes #52210

This commit removes the special rustdoc handling for proc macros, as we
can now
retrieve their span and attributes just like any other item.

A new command-line option is added to rustdoc: `--crate-type`. This
takes the same options as rustc's `--crate-type` option. However, all
values other than `proc-macro` are treated the same. This allows Rustdoc
to enable 'proc macro mode' when handling a proc macro crate.

In compiletest, a new 'rustdoc-flags' option is added. This allows us to
pass in the '--proc-macro-crate' flag in the absence of Cargo.

I've opened [an additional PR to
Cargo](https://github.com/rust-lang/cargo/pull/7159) to support passing
in this flag.
These two PRS can be merged in any order - the Cargo changes will not
take effect until the 'cargo' submodule is updated in this repository.
2019-08-24 13:11:57 -04:00
Shotaro Yamada
b78367d8e8 Support impl Trait in inlined documentation 2019-08-19 17:49:54 +09:00
Mark Rousskov
eea2f879af Use a HashSet instead of Vec 2019-08-11 10:36:46 -04:00
Mark Rousskov
c57481001e Remove ReentrantMutex
This drops the parking_lot dependency; the ReentrantMutex type appeared
to be unused (at least, no compilation failures occurred).

This is technically a possible change in behavior of its users, as
lock() would wait on other threads releasing their guards, but since we
didn't actually remove any threading or such in this code, it appears
that we never used that behavior (the behavior change is only noticeable
if the type previously was used in two threads, in a single thread
ReentrantMutex is useless).
2019-08-11 10:36:46 -04:00
Mark Rousskov
00d7bc7688 Remove crate_name from DocContext
tcx.crate_name is the appropriate way to retrieve the crate name.
2019-08-11 10:36:46 -04:00
Mark Rousskov
78d9088e77 Replace is_doc_reachable with is_public 2019-08-10 07:52:07 -04:00
Aaron Hill
7ee9b7a410
Use doc comments from 'pub use' statements
Split off from #62855

Currently, rustdoc ignores any doc comments found on 'pub use'
statements. As described in issue #58700, this makes it impossible to
properly document procedural macros. Any doc comments must be written on
the procedural macro definition, which must occur in a dedicated
proc-macro crate. This means that any doc comments or doc tests cannot
reference items defined in re-exporting crate, despite the fact that
such items may be required to use the procedural macro.

To solve this issue, this commit allows doc comments to be written on
'pub use' statements. For consistency, this applies to *all* 'pub use'
statements, not just those importing procedural macros.

When inlining documentation, documentation on 'pub use' statements will
be prepended to the documentation of the inlined item. For example,
the following items:

```rust

mod other_mod {
    /// Doc comment from definition
    pub struct MyStruct;
}

/// Doc comment from 'pub use'
///
pub use other_mod::MyStruct;
```

will caues the documentation for the re-export of 'MyStruct' to be
rendered as:

```
Doc comment from 'pub use'
Doc comment from definition
```

Note the empty line in the 'pub use' doc comments - because doc comments
are concatenated as-is, this ensure that the doc comments on the
definition start on a new line.
2019-07-27 14:35:14 -04:00
Vadim Petrochenkov
961ba8f9ef syntax: Factor out common fields from SyntaxExtension variants 2019-06-18 10:48:56 +03:00
ljedrz
d996c4d5a3 remove _by_hir_id if there is no NodeId counterpart 2019-06-17 18:57:21 +02:00
Vadim Petrochenkov
93eb63c9a5 syntax: Rename variants of SyntaxExtension for consistency 2019-06-10 21:34:26 +03:00
Nicholas Nethercote
fb084a48e2 Pass a Symbol to check_name, emit_feature_err, and related functions. 2019-05-13 09:29:22 +10:00
Eduard-Mihai Burtescu
ff174fe09e rustc: rename hir::def::Def to Res (short for "resolution"). 2019-05-03 22:50:19 +03:00
Eduard-Mihai Burtescu
a3fcab36d2 rustc: factor most DefId-containing variants out of Def and into DefKind. 2019-05-03 22:48:27 +03:00
Vadim Petrochenkov
53ffcd96b7 Remove mutability from Def::Static 2019-04-21 15:05:55 +03:00
Guillaume Gomez
ddd034aa6f Fix invalid bounds string generation in rustdoc 2019-03-31 15:32:25 +02:00
Guillaume Gomez
f131f042c2
Rollup merge of #59004 - GuillaumeGomez:generics-handling, r=QuietMisdreavus
[rustdoc] Improve "in parameters" search and search more generally

Fixes #58230.

r? @QuietMisdreavus
2019-03-26 22:26:36 +01:00
David Wood
5c3d1e5d76 Separate variant id and variant constructor id.
This commit makes two changes - separating the `NodeId` that identifies
an enum variant from the `NodeId` that identifies the variant's
constructor; and no longer creating a `NodeId` for `Struct`-style enum
variants and structs.

Separation of the variant id and variant constructor id will allow the
rest of RFC 2008 to be implemented by lowering the visibility of the
variant's constructor without lowering the visbility of the variant
itself.

No longer creating a `NodeId` for `Struct`-style enum variants and
structs mostly simplifies logic as previously this `NodeId` wasn't used.
There were various cases where the `NodeId` wouldn't be used unless
there was an unit or tuple struct or enum variant but not all uses of
this `NodeId` had that condition, by removing this `NodeId`, this must
be explicitly dealt with. This change mostly applied cleanly, but there
were one or two cases in name resolution and one case in type check
where the existing logic required a id for `Struct`-style enum variants
and structs.
2019-03-24 12:10:16 +03:00
Guillaume Gomez
aefe75095a Add bounds for return types as well 2019-03-21 22:49:43 +01:00
Guillaume Gomez
64382f4b78 Greatly improve generics handling in rustdoc search 2019-03-21 22:49:42 +01:00
John Kåre Alsaker
51938c61f6 Make the rustc driver and interface demand driven 2019-03-10 04:49:45 +01:00
ljedrz
cd06038b54 HirIdification: replace NodeId method calls 2019-03-07 09:22:43 +01:00
bors
f573049729 Auto merge of #58232 - ljedrz:HirIdification_continued, r=Zoxc
HirId-ify intravisit

A big step towards https://github.com/rust-lang/rust/pull/57578.

This affects mostly `hir::{collector, intravisit}` and `rustc::lint`.
2019-02-24 00:24:16 +00:00
Hirokazu Hata
1fe87df104 Fix tidy check errors 2019-02-23 17:02:57 +09:00
Hirokazu Hata
1932d7a52d Transition librustdoc to 2018 edition 2019-02-23 16:40:07 +09:00
ljedrz
f5bba2c6d7 HirIdification: change some NodeId to HirId calls 2019-02-20 11:00:43 +01:00
QuietMisdreavus
c955f172b2 don't try to get a DefId for a Def that doesn't have one 2019-02-01 11:17:33 -06:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Guillaume Gomez
170f068103 Don't render const keyword on stable 2018-12-18 20:36:15 +01:00
John Kåre Alsaker
a70babed03 Use a function to access the Hir map to be able to turn it into a query later 2018-12-06 17:24:36 +01:00
Oliver Scherer
3c9258e604 Prefer Default::default over FxHash*::default in struct constructors 2018-10-19 14:34:44 +02:00
Oliver Scherer
ee81739dc1 Deprecate the FxHashMap() and FxHashSet() constructor function hack 2018-10-19 14:34:44 +02:00
QuietMisdreavus
27429d9415 add derive macros' helper attributes to doc output 2018-09-26 13:40:08 -05:00
QuietMisdreavus
f05b744b08 disable proc-macro re-export inlining
Proc-macros don't emit their attributes or source spans across crates.
This means that rustdoc can't actually see the docs of a proc-macro if
it wasn't defined in the active crate, and attempting to inline it
creates an empty page with no docs or source link. In lieu of attempting
to fix that immediately, this commit forces proc-macro re-exports to
never inline, which at least creates usable links to complete
documentation.
2018-09-25 16:15:32 -05:00
QuietMisdreavus
aea1bd0a59 handle proc-macros as macros instead of functions 2018-09-25 14:56:43 -05:00
QuietMisdreavus
354507e61f shuffle ownership of external_traits
constraints:

- clean/inline.rs needs this map to fill in traits when inlining
- fold.rs needs this map to allow passes to fold trait items
- html/render.rs needs this map to seed the Cache.traits map of all
  known traits

The first two are the real problem, since `DocFolder` only operates on
`clean::Crate` but `clean/inline.rs` only sees the `DocContext`. The
introduction of early passes means that these two now exist at the same
time, so they need to share ownership of the map. Even better, the use
of `Crate` in a rustc thread pool means that it needs to be Sync, so it
can't use `Lrc<Lock>` to manually activate thread-safety.

`parking_lot` is reused from elsewhere in the tree to allow use of its
`ReentrantMutex`, as the relevant parts of rustdoc are still
single-threaded and this allows for easier use in that context.
2018-09-20 05:54:26 -05:00
QuietMisdreavus
c754e8240c refactor: move access_levels into RenderInfo 2018-09-20 05:42:38 -05:00
QuietMisdreavus
87760e5f5e collect auto-/blanket-impls during collect-trait-impls 2018-09-20 05:42:37 -05:00
QuietMisdreavus
e79780f18f don't check visibility when inlining local impls
those get handled properly in strip-hidden anyway
2018-09-20 05:42:33 -05:00
QuietMisdreavus
de6a89783c pull impl generics from HIR if available 2018-09-20 05:42:31 -05:00
QuietMisdreavus
fe26efe748 collect impl items from the HIR if available 2018-09-20 05:42:30 -05:00
QuietMisdreavus
978c13aa02 pull local types from the HIR instead of tcx 2018-09-20 05:42:29 -05:00
QuietMisdreavus
bfd2b34454 handle local names when registering FQNs 2018-09-20 05:42:28 -05:00
QuietMisdreavus
a893117f38 add a bunch of debug prints 2018-09-20 05:42:27 -05:00
QuietMisdreavus
50fa16f5b5 undo some tweaks to build_impl 2018-09-20 05:42:26 -05:00
QuietMisdreavus
804a1a6fa9 don't record an external trait if it's not external 2018-09-20 05:42:25 -05:00
QuietMisdreavus
5e0f9be670 print local inlined consts via the HIR map 2018-09-20 05:42:21 -05:00
QuietMisdreavus
02bea3c581 rustdoc: collect trait impls as an early pass 2018-09-20 05:42:20 -05:00
F001
2157958b27 introduce SelfCtor 2018-09-13 12:27:29 +08:00
varkor
d0209c44a6 Replace TyForeign with ForeignTy 2018-08-22 16:08:49 +01:00
varkor
05cfb3f5b5 Rename Def::{Param, Foreign} to Def::{TyParam, TyForeign} 2018-08-22 16:08:49 +01:00