Commit Graph

19 Commits

Author SHA1 Message Date
Dylan DPC
31f532092c Rollup merge of #83478 - jyn514:fine-grained-files, r=Mark-Simulacrum
rustdoc: Add unstable option to only emit shared/crate-specific files

The intended use case is for docs.rs, which can now copy exactly the
files it cares about, rather than having to guess based on whether they
have a resource suffix or not. In particular, some files have a resource
suffix but cannot be shared between crates: https://github.com/rust-lang/docs.rs/pull/1312#issuecomment-798783688

The end goal is to fix rust-lang/docs.rs#1327 by reverting rust-lang/docs.rs#1324.

This obsoletes `--print=unversioned-files`, which I plan to remove as
soon as docs.rs stops using it.

I recommend reviewing this one commit at a time.

r? ``@GuillaumeGomez`` cc ``@Nemo157`` ``@pietroalbini``
2021-04-02 19:57:30 +02:00
Joshua Nelson
f77ebd4ffa Add unstable option to only emit shared/crate-specific files
The intended use case is for docs.rs, which can now copy exactly the
files it cares about, rather than having to guess based on whether they
have a resource suffix or not. In particular, some files have a resource
suffix but cannot be shared between crates: https://github.com/rust-lang/docs.rs/pull/1312#issuecomment-798783688

The end goal is to fix https://github.com/rust-lang/docs.rs/issues/1327
by reverting https://github.com/rust-lang/docs.rs/pull/1324.

This obsoletes `--print=unversioned-files`, which I plan to remove as
soon as docs.rs stops using it.
2021-03-25 20:03:44 -04:00
Joshua Nelson
7c89cc4a6f Add SharedResource abstraction and use it in write_shared
This cleans up the code quite a bit, and also makes the next commit much
easier.
2021-03-25 11:40:32 -04:00
Nixon Enraght-Moony
9ba92972ed Don't call item on modules for json renderer
Closes #80664
2021-03-24 16:54:13 +00:00
Dylan DPC
5c0d880e4b Rollup merge of #83415 - camelid:remove-crate-module-option, r=jyn514
Remove unnecessary `Option` wrapping around `Crate.module`

I'm wondering if it was originally there so that we could `take` the
module which enables `after_krate` to take an `&Crate`. However, the two
impls of `after_krate` only use `Crate.name`, so we can pass just the
name instead.
2021-03-24 01:52:36 +01:00
Camelid
68244fc521 Remove unnecessary Option wrapping around Crate.module
I'm wondering if it was originally there so that we could `take` the
module which enables `after_krate` to take an `&Crate`. However, the two
impls of `after_krate` only use `Crate.name`, so we can pass just the
name instead.
2021-03-23 11:04:09 -07:00
Camelid
8b9b106cdc Rename clean::Item.source to span
Its type is called `clean::Span`, and also the name in the rest of
rustdoc and rustc for this kind of field is `span`.
2021-03-21 19:47:11 -07:00
Camelid
5b74097975 Undo addition of boxes
I don't think the boxing helped performance, in fact I think it
potentially made it worse. The data was still being copied, but now it
was through a pointer. Thinking about it more, I think boxing might only
help when you're passing a big object around by value all the time,
rather than the slowdown being that you're cloning it.
2021-03-05 20:01:52 -08:00
Camelid
c09d9d34f0 Don't unnecessarily clone some fields in Context
There was no need to clone `id_map` because it was reset before each
item was rendered. `deref_id_map` was not reset, but it was keyed by
`DefId` and thus was unlikely to have collisions (at least for now).

Now we just clone the fields that need to be cloned, and instead create
fresh versions of the others.
2021-03-05 19:41:37 -08:00
Camelid
ff39c46959 Box some fields to reduce Context size
Reduced from 152 bytes to 88 bytes.
2021-03-05 19:41:27 -08:00
Camelid
4c51a66d67 Don't share id_map and deref_id_map
All the tests passed, so it doesn't seem they need to be shared.
Plus they should be item/page-specific.

I'm not sure why they were shared before. I think the reason `id_map`
worked as a shared value before is that it is cleared before rendering
each item (in `render_item`). And then I'm guessing `deref_id_map`
worked because it's a hashmap keyed by `DefId`, so there was no overlap
(though I'm guessing we could have had issues in the future).

Note that `id_map` currently still has to be cleared because otherwise
child items would inherit the `id_map` of their parent. I'm hoping to
figure out a way to stop cloning `Context`, but until then we have to
reset `id_map`.
2021-03-05 19:40:54 -08:00
Camelid
3bc879e76b rustdoc: Add static size assertion for Context
It's cloned a lot, so we don't want it to grow in size unexpectedly.

Only run the assert on x86-64 since the size is architecture-dependent.
2021-03-05 19:39:17 -08:00
Camelid
b3d2a371bb rustdoc: Make a bunch of fields private
Also create issue for removing shared mutable state.
2021-03-05 19:39:08 -08:00
Camelid
c4bb66c284 rustdoc: Replace Arc around SharedContext with Rc
It doesn't look like it's shared across threads, so it doesn't need to
be thread-safe. Of course, since we're using Rust, we'll get an error if
we try to share it across threads, so this should be safe :)
2021-03-05 18:08:01 -08:00
Camelid
9763eb87a3 rustdoc: Move most shared fields to SharedContext
...and remove `Rc`s for the moved fields.

The only shared one that I didn't move was `cache`; see the doc-comment
I added to `cache` for details.
2021-03-05 17:57:58 -08:00
Nicholas-Baron
fd14e38612 Moved write_shared to its own file 2021-03-04 10:24:56 -08:00
Nicholas-Baron
14983b9812 Moved the make_item_keywords function to context.rs as it is only used there 2021-03-04 10:01:22 -08:00
Nicholas-Baron
6c7d7a6bf4 Moved print_item and helpers to a separate file 2021-03-04 10:01:22 -08:00
Nicholas-Baron
48167c499a Moved Context and its impls to a separate file 2021-03-04 10:01:22 -08:00