rust/src
Guillaume Gomez b7654a3258
Rollup merge of #85749 - GuillaumeGomez:revert-smart-extern-crate-load, r=jyn514
Revert "Don't load all extern crates unconditionally"

Fixes https://github.com/rust-lang/rust/issues/84738.

This reverts https://github.com/rust-lang/rust/pull/83738.

For the "smart" load of external crates, we need to be able to access their items in order to check their doc comments, which seems, if not impossible, quite complicated using only the AST.

For some context, I first tried to extend the `IntraLinkCrateLoader` visitor by adding `visit_foreign_item`. Unfortunately, it never enters into this call, so definitely not the right place...

I then added `visit_use_tree` to then check all the imports outside with something like this:

```rust
let mut loader = crate::passes::collect_intra_doc_links::IntraLinkCrateLoader::new(resolver);
    ast::visit::walk_crate(&mut loader, krate);

    let mut items = Vec::new();
    for import in &loader.imports_to_check {
        if let Some(item) = krate.items.iter().find(|i| i.id == *import) {
            items.push(item);
        }
    }
    for item in items {
        ast::visit::walk_item(&mut item);
        for attr in &item.attrs {
            loader.check_attribute(attr);
        }
    }
```

This was, of course, a failure. We find the items without problems, but we still can't go into the external crate to check its items' attributes.

Finally, `@jyn514` suggested to look into the [`CrateLoader`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/creader/struct.CrateLoader.html), but it only seems to provide metadata (I went through [`CStore`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/creader/struct.CStore.html) and [`CrateMetadata`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/decoder/struct.CrateMetadata.html)).

I think we are too limited here (with AST only) to be able to determine the crates we actually need to import, but it's very likely that I missed something. Maybe `@petrochenkov` or `@Aaron1011` have an idea?

So until we find a way to make it work completely, we need to revert it to fix the ICE. Once merged, we'll need to re-open #68427.

r? `@jyn514`
2021-07-02 11:35:27 +02:00
..
bootstrap copy rust-lld as ld in dist 2021-06-30 16:30:40 +10:00
build_helper
ci Update container browser-ui-test@0.4.1 2021-07-01 10:22:03 +02:00
doc Update to new bootstrap compiler 2021-06-28 11:30:49 -04:00
etc Hide Crate Version on narrow Screens 2021-06-24 16:46:15 +02:00
librustdoc Rollup merge of #85749 - GuillaumeGomez:revert-smart-extern-crate-load, r=jyn514 2021-07-02 11:35:27 +02:00
llvm-project@39c5555872
rustdoc-json-types
test Rollup merge of #85749 - GuillaumeGomez:revert-smart-extern-crate-load, r=jyn514 2021-07-02 11:35:27 +02:00
tools Auto merge of #86782 - flip1995:clippyup, r=Manishearth 2021-07-02 02:56:45 +00:00
README.md
stage0.txt Update to new bootstrap compiler 2021-06-28 11:30:49 -04:00
version

This directory contains the source code of the rust project, including:

  • The test suite
  • The bootstrapping build system
  • Various submodules for tools, like rustdoc, rls, etc.

For more information on how various parts of the compiler work, see the rustc dev guide.