| Age | Commit message (Collapse) | Author | Lines |
|
Remove short doc where it starts with a codeblock
Fixes #54975.
|
|
|
|
|
|
Choose predicates without inference variables over those with them
Fixes #54705
When constructing synthetic auto trait impls, we may come across
multiple predicates involving the same type, trait, and substitutions.
Since we can only display one of these, we pick the one with the 'most
strict' lifetime paramters. This ensures that the impl we render the
user is actually valid (that is, a struct matching that impl will
actually implement the auto trait in question).
This commit exapnds the definition of 'more strict' to take into account
inference variables. We always choose a predicate without inference
variables over a predicate with inference variables.
|
|
test that rustdoc doesn't overflow on a big enum
Adds a test to close #25295. The test case depended on `enum_primitive` so I just basically pulled its source into an auxiliary file, is that the right way to do it?
|
|
r=QuietMisdreavus
Hide default impls items
Follow up of #51885.
Fixes #54025.
cc @Mark-Simulacrum
r? @QuietMisdreavus
And screenshots of course:
<img width="1440" alt="screen shot 2018-09-12 at 23 30 35" src="https://user-images.githubusercontent.com/3050060/45454424-1ff8d500-b6e4-11e8-9257-030322495d58.png">
<img width="1440" alt="screen shot 2018-09-12 at 23 30 42" src="https://user-images.githubusercontent.com/3050060/45454431-2424f280-b6e4-11e8-8d65-db0d85ac18f0.png">
|
|
|
|
Add index page argument
@Mark-Simulacrum: I might need some help from you: in bootstrap, I want to add an argument (a new flag added into `rustdoc`) in order to generate the current index directly when `rustdoc` is documenting the `std` lib. However, my change in `bootstrap` didn't do it and I assume it must be moved inside the `Std` struct. But there, I don't see how to pass it to `rustdoc` through `cargo`. Did I miss anything?
r? @QuietMisdreavus
|
|
|
|
|
|
Fixes #54705
When constructing synthetic auto trait impls, we may come across
multiple predicates involving the same type, trait, and substitutions.
Since we can only display one of these, we pick the one with the 'most
strict' lifetime paramters. This ensures that the impl we render the
user is actually valid (that is, a struct matching that impl will
actually implement the auto trait in question).
This commit exapnds the definition of 'more strict' to take into account
inference variables. We always choose a predicate without inference
variables over a predicate with inference variables.
|
|
Rollup of 21 pull requests
Successful merges:
- #54816 (Don't try to promote already promoted out temporaries)
- #54824 (Cleanup rustdoc tests with `@!has` and `@!matches`)
- #54921 (Add line numbers option to rustdoc)
- #55167 (Add a "cheap" mode for `compute_missing_ctors`.)
- #55258 (Fix Rustdoc ICE when checking blanket impls)
- #55264 (Compile the libstd we distribute with -Ccodegen-unit=1)
- #55271 (Unimplement ExactSizeIterator for MIR traversing iterators)
- #55292 (Macro diagnostics tweaks)
- #55298 (Point at macro definition when no rules expect token)
- #55301 (List allowed tokens after macro fragments)
- #55302 (Extend the impl_stable_hash_for! macro for miri.)
- #55325 (Fix link to macros chapter)
- #55343 (rustbuild: fix remap-debuginfo when building a release)
- #55346 (Shrink `Statement`.)
- #55358 (Remove redundant clone (2))
- #55370 (Update mailmap for estebank)
- #55375 (Typo fixes in configure_cmake comments)
- #55378 (rustbuild: use configured linker to build boostrap)
- #55379 (validity: assert that unions are non-empty)
- #55383 (Use `SmallVec` for the queue in `coerce_unsized`.)
- #55391 (bootstrap: clean up a few clippy findings)
|
|
Report const eval error inside the query
Functional changes: We no longer warn about bad constants embedded in unused types. This relied on being able to report just a warning, not a hard error on that case, which we cannot do any more now that error reporting is consistently centralized.
r? @RalfJung
fixes #53561
|
|
Fix Rustdoc ICE when checking blanket impls
Fixes #55001, #54744
Previously, SelectionContext would unconditionally cache the selection
result for an obligation. This worked fine for most users of
SelectionContext, but it caused an issue when used by Rustdoc's blanket
impl finder.
The issue occured when SelectionContext chose a ParamCandidate which
contained inference variables. Since inference variables can change
between calls to select(), it's not safe to cache the selection result -
the chosen candidate might not be applicable for future results, leading
to an ICE when we try to run confirmation.
This commit prevents SelectionContext from caching any ParamCandidate
that contains inference variables. This should always be completely
safe, as trait selection should never depend on a particular result
being cached.
I've also added some extra debug!() statements, which I found helpful in
tracking down this bug.
|
|
Cleanup rustdoc tests with `@!has` and `@!matches`
Fixes #49713
Here's a _long_ list of all the places that include `@!has`. I have marked the ones I have looked at so far.
- [x] search-index.rs: fn priv_method() {} // @!has - priv_method
- [x] search-index.rs: fn trait_method(&self) {} // @!has - priv_method
- [x] search-index.rs: // @!has search-index.js Target
- [x] short-dockblock.rs:// @!has foo/index.html '//*[@class="docblock-short"]/p/h1' 'fooo'
- [x] short-dockblock.rs:// @!has foo/index.html '//*[@class="docblock-short"]/p/h2' 'mooood'
- [x] keyword.rs:// @!has foo/index.html '//a/@href' 'foo/index.html'
- [x] keyword.rs:// @!has foo/foo/index.html
- [x] keyword.rs:// @!has-dir foo/foo
- [x] issue-46380-2.rs:// @!has - '//*[@class="impl"]' 'impl PublicTrait<PrivateStruct> for PublicStruct'
- [x] escape-rust-expr.rs:// @!has escape_rust_expr/constant.CONST_S.html '//pre[@class="rust const"]' '"<script>"'
- [x] issue-33069.rs:// @!has - '//code' 'impl Bar for Foo'
- [x] playground-empty.rs:// @!has foo/index.html '//a[@class="test-arrow"]' "Run"
- [x] issue-34473.rs:// @!has - SomeTypeWithLongName
- [x] issue-34473.rs:// @!has - SomeTypeWithLongName
- [x] issue-34473.rs:// @!has foo/struct.SomeTypeWithLongName.html
- [x] issue-29584.rs:// @!has - 'impl Bar for'
- [x] hidden-line.rs:// @!has hidden_line/fn.foo.html invisible
- [x] manual_impl.rs:// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
- [x] manual_impl.rs:// @!has - '//*[@class="docblock"]' 'There is another line'
- [x] manual_impl.rs:// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
- [x] manual_impl.rs:// @!has - '//*[@class="docblock"]' 'Docs associated with the trait c_method definition.'
- [x] issue-19190-2.rs:// @!has - '//*[@id="method.new"]' 'fn new() -> String'
- [x] unneeded-trait-implementations-title.rs:// @!has foo/struct.Bar.html '//*[@id="implementations"]'
- [x] masked.rs:// @!has 'search-index.js' 'masked_method'
- [x] masked.rs:// @!has 'foo/struct.String.html' 'MaskedTrait'
- [x] masked.rs:// @!has 'foo/struct.String.html' 'masked_method'
- [x] masked.rs:// @!has 'foo/trait.Clone.html' 'MaskedStruct'
- [x] masked.rs:// @!has 'foo/struct.MyStruct.html' 'MaskedTrait'
- [x] masked.rs:// @!has 'foo/struct.MyStruct.html' 'masked_method'
- [x] masked.rs:// @!has 'foo/trait.MyTrait.html' 'MaskedStruct'
- [x] redirect.rs:// @!has - '//code/a' 'Qux'
- [x] issue-43701.rs:// @!has implementors/core/clone/trait.Clone.js
- [x] union.rs: // @!has - //pre "b: u16"
- [x] prim-title.rs:// @!has - '//head/title' 'foo'
- [x] empty-section.rs:// @!has - '//*[@class="synthetic-implementations"]' 'Auto Trait Implementations'
- [x] traits-in-bodies-private.rs:// @!has - '//code' 'impl HiddenTrait for SomeStruct'
- [x] playground-none.rs:// @!has foo/index.html '//a[@class="test-arrow"]' "Run"
- [x] issue-34025.rs:// @!has 'foo/sys/index.html'
- [x] issue-34025.rs:// @!has 'foo/sys/sidebar-items.js'
- [x] issue-34025.rs: // @!has 'foo/sys/fn.foo.html'
- [x] issue-23812.rs:// @!has - '/// Outer comment'
- [x] issue-23812.rs:// @!has - '//! Inner comment'
- [x] issue-23812.rs:// @!has - '/** Outer block comment */'
- [x] issue-23812.rs:// @!has - '/*! Inner block comment */'
- [x] pub-use-extern-macros.rs:// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::bar;'
- [x] pub-use-extern-macros.rs:// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::baz;'
- [x] pub-use-extern-macros.rs:// @!has pub_use_extern_macros/macro.quux.html
- [x] pub-use-extern-macros.rs:// @!has pub_use_extern_macros/index.html '//code' 'pub use macros::quux;'
- [x] issue-26606.rs:// @!has - '//a/@href' '../src/'
- [x] foreigntype-reexport.rs:// @!has foreigntype_reexport/foreigntype.X4.html
- [x] foreigntype-reexport.rs:// @!has foreigntype_reexport/index.html '//a[@class="foreigntype"]' 'X4'
- [x] issue-31899.rs:// @!has - 'rust rust-example-rendered'
- [x] issue-31899.rs:// @!has - 'use ndarray::arr2'
- [x] issue-31899.rs:// @!has - 'prohibited'
- [x] hidden-trait-struct-impls.rs:// @!has foo/struct.Bar.html '//*[@id="impl-Foo"]' 'impl Foo for Bar'
- [x] hidden-trait-struct-impls.rs:// @!has foo/struct.Bar.html '//*[@id="impl-Dark"]' 'impl Dark for Bar'
- [x] hidden-trait-struct-impls.rs:// @!has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Hidden'
- [x] hidden-impls.rs:// @!has - 'Foo'
- [x] hidden-impls.rs:// @!has - 'Foo'
- [x] module-impls.rs:// @!has foo/index.html 'Implementations'
- [x] issue-35169.rs:// @!has - '//*[@id="by_mut_ref.v"]' 'fn by_mut_ref(&mut self)'
- [x] issue-35169.rs:// @!has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
- [x] issue-35169.rs:// @!has - '//*[@id="by_explicit_mut_ref.v"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
- [x] issue-35169.rs:// @!has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
- [x] issue-35169.rs:// @!has - '//*[@id="by_explicit_box.v"]' 'fn by_explicit_box(self: Box<Foo>)'
- [x] issue-35169.rs:// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
- [x] issue-35169.rs:// @!has - '//*[@id="by_explicit_self_box.v"]' 'fn by_explicit_self_box(self: Box<Self>)'
- [x] issue-35169.rs:// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
- [x] issue-35169.rs:// @!has - '//*[@id="static_foo.v"]' 'fn static_foo()'
- [x] issue-35169.rs:// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
- [x] extern-links.rs:// @!has foo/index.html '//a' 'extern_links'
- [x] extern-links.rs:// @!has foo/index.html '//a' 'Foo'
- [x] extern-links.rs: // @!has foo/hidden/extern_links/index.html
- [x] extern-links.rs: // @!has foo/hidden/extern_links/struct.Foo.html
- [x] issue-33178-1.rs:// @!has - //a/@title empty
- [x] issue-33178-1.rs:// @!has - //a/@title variant_struct
- [x] issue-47038.rs:// @!has - '//*[@id="macros"]' 'Macros'
- [x] issue-47038.rs:// @!has - '//a/@href' 'macro.vec.html'
- [x] issue-47038.rs:// @!has 'foo/macro.vec.html'
- [x] issue-46766.rs:// @!has foo/index.html '//a/@href' './Enum/index.html'
- [x] issue-32395.rs:// @!has - 'pub qux'
- [x] issue-32395.rs:// @!has - 'pub Bar'
- [x] issue-32395.rs:// @!has - 'pub qux'
- [x] issue-32395.rs:// @!has - 'pub Bar'
- [x] hidden-methods.rs:// @!has - 'Methods'
- [x] hidden-methods.rs:// @!has - 'impl Foo'
- [x] hidden-methods.rs:// @!has - 'this_should_be_hidden'
- [x] hidden-methods.rs:// @!has - 'Methods'
- [x] hidden-methods.rs:// @!has - 'impl Bar'
- [x] hidden-methods.rs:// @!has - 'this_should_be_hidden'
- [x] structfields.rs: // @!has - //pre "b: ()"
- [x] structfields.rs: // @!has - //pre "c: usize"
- [x] structfields.rs: // @!has - //pre "// some fields omitted"
- [x] structfields.rs: // @!has - //pre "b: ()"
- [x] issue-46767.rs:// @!has foo/index.html '//a/@href' './private/index.html'
- [x] assoc-consts.rs: // @!has - FOO_HIDDEN
- [x] assoc-consts.rs: // @!has - FOO_HIDDEN
- [x] assoc-consts.rs: // @!has assoc_consts/struct.Bar.html 'BAR_PRIVATE'
- [x] assoc-consts.rs: // @!has assoc_consts/struct.Bar.html 'BAR_HIDDEN'
- [x] issue-53689.rs:// @!has - 'MyStruct'
- [x] search-index-summaries.rs:// @!has - 'www.example.com'
- [x] search-index-summaries.rs:// @!has - 'More Foo.'
- [x] impl-everywhere.rs:// @!has foo/fn.foo.html '//section[@id="main"]//pre' "x: &\'x impl Foo"
- [x] impl-everywhere.rs:// @!has foo/fn.foo.html '//section[@id="main"]//pre' "-> &\'x impl Foo {"
- [x] impl-everywhere.rs:// @!has foo/fn.foo2.html '//section[@id="main"]//pre' "x: &\'x impl Foo"
- [x] impl-everywhere.rs:// @!has foo/fn.foo2.html '//section[@id="main"]//pre' '-> impl Foo2 {'
- [x] impl-everywhere.rs:// @!has foo/fn.foo_foo.html '//section[@id="main"]//pre' '-> impl Foo + Foo2 {'
- [x] impl-everywhere.rs:// @!has foo/fn.foo2.html '//section[@id="main"]//pre' "x: &'x (impl Foo + Foo2)"
- [x] issue-19190.rs:// @!has - '//*[@id="static_foo.v"]' 'fn static_foo()'
- [x] issue-19190.rs:// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
- [x] deprecated-impls.rs: // @!has - 'fn_def_def_with_doc full'
- [x] deprecated-impls.rs: // @!has - 'fn_empty_with_doc full'
- [x] deprecated-impls.rs: // @!has - 'fn_def_with full'
- [x] deprecated-impls.rs: // @!has - 'fn_def_def_with_doc full'
- [x] issue-19190-3.rs:// @!has - '//*[@id="method.new"]' 'fn new() -> String'
- [x] issue-19190-3.rs:// @!has - '//*[@id="method.static_baz"]' 'fn static_baz()'
- [x] issue-19190-3.rs:// @!has - '//*[@id="method.static_baz"]' 'fn static_baz()'
- [x] sidebar-items.rs:// @!has - '//*[@class="sidebar-links"]/a' 'waza'
- [x] sidebar-items.rs:// @!has - '//*[@class="sidebar-links"]/a' 'waza'
- [x] issue-27104.rs:// @!has - 'extern crate std'
- [x] issue-27104.rs:// @!has - 'use std::prelude::'
- [x] issue-13698.rs:// @!has issue_13698/struct.Foo.html '//*[@id="method.foo"]' 'fn foo'
- [x] issue-13698.rs:// @!has issue_13698/struct.Foo.html '//*[@id="method.foo"]' 'fn bar'
- [x] issue-41783.rs:// @!has - 'space'
- [x] issue-41783.rs:// @!has - 'comment'
- [x] trait-self-link.rs:// @!has trait_self_link/trait.Foo.html //a/@href ../trait_self_link/trait.Foo.html
- [x] generic-impl.rs:// @!has foo/struct.Bar.html '//h3[@id="impl-ToString"]//code' 'impl<T> ToString for T'
- [x] all.rs:// @!has foo/all.html 'private_module'
- [x] issue-35169-2.rs:// @!has - '//*[@id="by_explicit_box.v"]' 'fn by_explicit_box(self: Box<Foo>)'
- [x] issue-35169-2.rs:// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
- [x] issue-35169-2.rs:// @!has - '//*[@id="by_explicit_self_box.v"]' 'fn by_explicit_self_box(self: Box<Self>)'
- [x] issue-35169-2.rs:// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
- [x] issue-35169-2.rs:// @!has - '//*[@id="static_foo.v"]' 'fn static_foo()'
- [x] issue-35169-2.rs:// @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
- [x] doc-cfg.rs:// @!has - '//*[@id="main"]/*[@class="stability"]/*[@class="stab portability"]' ''
- [x] inline_local/glob-private.rs:// @!has - "mod1"
- [x] inline_local/glob-private.rs:// @!has - "Mod1Private"
- [x] inline_local/glob-private.rs:// @!has - "mod2"
- [x] inline_local/glob-private.rs:// @!has - "Mod2Private"
- [x] inline_local/glob-private.rs:// @!has foo/struct.Mod1Private.html
- [x] inline_local/glob-private.rs:// @!has foo/struct.Mod2Private.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/index.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/struct.Mod1Private.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/struct.Mod2Public.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/struct.Mod2Private.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/mod2/index.html
- [x] inline_local/glob-private.rs:// @!has foo/mod1/mod2/struct.Mod2Private.html
- [x] inline_local/glob-private.rs:// @!has-dir foo/mod2
- [x] inline_local/glob-private.rs:// @!has foo/mod2/index.html
- [x] inline_local/glob-private.rs:// @!has foo/mod2/struct.Mod2Public.html
- [x] inline_local/glob-private.rs:// @!has foo/mod2/struct.Mod2Private.html
- [x] inline_local/hidden-use.rs:// @!has - 'private'
- [x] inline_local/hidden-use.rs:// @!has - 'Foo'
- [x] inline_local/hidden-use.rs:// @!has hidden_use/struct.Foo.html
- [x] inline_local/glob-extern-no-defaults.rs:// @!has - "private_fn"
- [x] inline_local/glob-extern-no-defaults.rs:// @!has foo/fn.private_fn.html
- [x] inline_local/issue-32343.rs:// @!has issue_32343/struct.Foo.html
- [x] inline_local/issue-32343.rs:// @!has - '//code/a' 'Foo'
- [x] inline_local/issue-32343.rs:// @!has issue_32343/struct.Bar.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has - "Mod1Private"
- [x] inline_local/glob-private-no-defaults.rs:// @!has - "mod2"
- [x] inline_local/glob-private-no-defaults.rs:// @!has - "Mod2Private"
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/struct.Mod1Private.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/struct.Mod2Private.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has - "Mod2Public"
- [x] inline_local/glob-private-no-defaults.rs:// @!has - "Mod2Private"
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/mod1/struct.Mod2Public.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/mod1/struct.Mod2Private.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/mod2/index.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/mod2/struct.Mod2Public.html
- [x] inline_local/glob-private-no-defaults.rs:// @!has foo/mod2/struct.Mod2Private.html
- [x] inline_local/glob-extern.rs:// @!has - "mod1"
- [x] inline_local/glob-extern.rs:// @!has - "private_fn"
- [x] inline_local/glob-extern.rs:// @!has foo/fn.private_fn.html
- [x] inline_local/glob-extern.rs:// @!has foo/mod1/index.html
- [x] inline_local/glob-extern.rs:// @!has foo/mod1/fn.private_fn.html
- [x] inline_local/please_inline.rs: // @!has - 'pub use foo::'
- [x] inline_local/please_inline.rs: // @!has please_inline/b/struct.Foo.html
- [x] inline_cross/hidden-use.rs:// @!has - 'rustdoc_hidden'
- [x] inline_cross/hidden-use.rs:// @!has - 'Bar'
- [x] inline_cross/hidden-use.rs:// @!has hidden_use/struct.Bar.html
- [x] inline_cross/inline_hidden.rs:// @!has - '//a/@title' 'Foo'
- [x] inline_cross/assoc-items.rs:// @!has - 'PrivateConst'
- [x] inline_cross/assoc-items.rs:// @!has - 'private_method'
- [x] inline_cross/cross-glob.rs:// @!has cross_glob/index.html '//code' 'pub use inner::*;'
- [x] inline_cross/macro-vis.rs:// @!has - '//pre' 'some_macro'
- [x] inline_cross/macro-vis.rs:// @!has macro_vis/macro.other_macro.html
- [x] inline_cross/macro-vis.rs:// @!has macro_vis/index.html '//a/@href' 'macro.other_macro.html'
- [x] inline_cross/macro-vis.rs:// @!has - '//code' 'pub use qwop::other_macro;'
- [x] inline_cross/macro-vis.rs:// @!has macro_vis/macro.super_macro.html
- [x] inline_cross/issue-31948.rs:// @!has - '//*[@class="impl"]//code' 'Bar for'
- [x] inline_cross/issue-31948.rs:// @!has - '//*[@class="impl"]//code' 'Qux for'
- [x] inline_cross/issue-31948.rs:// @!has - '//code' 'for Wibble'
- [x] inline_cross/issue-31948.rs:// @!has - '//code' 'for Wobble'
- [x] inline_cross/issue-31948.rs:// @!has - '//code' 'for Wibble'
- [x] inline_cross/issue-31948.rs:// @!has - '//code' 'for Wobble'
- [x] inline_cross/issue-31948.rs:// @!has issue_31948/trait.Bar.html
- [x] inline_cross/issue-31948.rs:// @!has issue_31948/trait.Qux.html
- [x] inline_cross/issue-31948.rs:// @!has issue_31948/struct.Wibble.html
- [x] inline_cross/issue-31948.rs:// @!has issue_31948/struct.Wobble.html
- [x] inline_cross/issue-31948-1.rs:// @!has - '//*[@class="impl"]//code' 'Bar for'
- [x] inline_cross/issue-31948-1.rs:// @!has - '//*[@class="impl"]//code' 'Qux for'
- [x] inline_cross/issue-31948-1.rs:// @!has - '//code' 'for Wibble'
- [x] inline_cross/issue-31948-1.rs:// @!has - '//code' 'for Wibble'
- [x] inline_cross/issue-31948-1.rs:// @!has issue_31948_1/trait.Bar.html
- [x] inline_cross/issue-31948-1.rs:// @!has issue_31948_1/trait.Qux.html
- [x] inline_cross/issue-28480.rs:// @!has - '//a/@title' 'Hidden'
- [x] inline_cross/issue-28480.rs:// @!has - '//a/@title' 'Hidden'
- [x] inline_cross/issue-31948-2.rs:// @!has - '//*[@class="impl"]//code' 'Bar for'
- [x] inline_cross/issue-31948-2.rs:// @!has issue_31948_2/trait.Bar.html
- [x] inline_cross/issue-31948-2.rs:// @!has issue_31948_2/trait.Woof.html
- [x] inline_cross/issue-31948-2.rs:// @!has issue_31948_2/trait.Bark.html
It doesn't look like `@!matches` is used anywhere.
|
|
Fixes #55321
When AutoTraitFinder begins examining a type, it checks for an explicit
negative impl. However, it wasn't checking for negative impls found when
calling 'select' on predicates found from nested obligations.
This commit makes AutoTraitFinder check for negative impls whenever it
makes a call to 'select'. If a negative impl is found, it immediately
bails out.
Normal users of SelectioContext don't need to worry about this, since
they stop as soon as an Unimplemented error is encountered. However, we
add predicates to our ParamEnv when we encounter this error, so we need
to handle negative impls specially (so that we don't try adding them to
our ParamEnv).
|
|
|
|
|
|
|
|
I confirmed that it fails on:
rustdoc 1.30.0-beta.12 (96a229824 2018-10-04)
and passes on:
rustdoc 1.31.0-nightly (f99911a4a 2018-10-23)
|
|
Fixes #55001, #54744
Previously, SelectionContext would unconditionally cache the selection
result for an obligation. This worked fine for most users of
SelectionContext, but it caused an issue when used by Rustdoc's blanket
impl finder.
The issue occured when SelectionContext chose a ParamCandidate which
contained inference variables. Since inference variables can change
between calls to select(), it's not safe to cache the selection result -
the chosen candidate might not be applicable for future results, leading
to an ICE when we try to run confirmation.
This commit prevents SelectionContext from caching any ParamCandidate
that contains inference variables. This should always be completely
safe, as trait selection should never depend on a particular result
being cached.
I've also added some extra debug!() statements, which I found helpful in
tracking down this bug.
|
|
|
|
|
|
The dyn keyword has been stable for a while now so rustdoc should start using it.
|
|
Fix spelling in the documentation to htmldocck.py
I was reading through htmldocck.py, and decided to attempt to clean it up a little bit. Let me know if you disagree with my edits.
|
|
There was an issue (#33025) which caused these tests to not work. The issue has
since been fixed in #33133, and so we can now include them.
|
|
|
|
The function is called `fn_def_with_doc`, not `fn_def_with`.
|
|
The link that is matched against is not the same as would be generated by
rustdoc. We should also check that the `foo/private` directory is not generated
at all.
|
|
The generated code would look like `<code>impl <a href="...">Foo</a></code>`
which the plain text matcher doesn't match. But by using the XPATH notation, the
nodes are flattened and we can correctly assert that `impl Foo` does not occur
in the generated docs.
|
|
The Auto Trait Implementation section is not wrapped in a
`synthetic-implementations` class. In fact, it is wrapped in a
`synthetic-implementations` id. However, we can generalize and completely remove
the `synthetic-implementations` requirement. We just have to verify that there's
no mention of "Auto Trait Implementations" anywhere.
|
|
Struct names are no longer encapsulated in `<code>` tags, which meant that the
test was not correctly verifying that it wasn't being show. I've also added a
check to make sure the documentation page for the redirect::Qux struct is not
generated at all.
|
|
The `@!has` command does not support specifying just a PATH and an XPATH. That
means that the previous test searched for the literal string
`//h2[@id="implementations"]` within the generated output, which obviously
didn't exist. Even after adding a trait implementation, the test still passed.
The correct way to check for the existence of a DOM element with the id
`implementations` is to use the `@count` keyword.
|
|
|
|
|
|
"Run" links to the playground are not added to the generated documentation if
the unstable `--playground-url` argument is not passed to rustdoc. Therefore,
without specifying `--playground-url` as a compile-flag, the test doesn't
correctly assert that `#![doc(html_playground_url = "")]` removes playground
links.
|
|
The old test was supposed to check for proper html escaping when showing the
contents of constants. This was changed as part of #53409. The revised test
asserts that the contents of the constant is not shown as part of the generated
documentation.
|
|
rustdoc: give proc-macros their own pages
related to https://github.com/rust-lang/rust/issues/49553 but i don't think it'll fix it
Currently, rustdoc doesn't expose proc-macros all that well. In the source crate, only their definition function is exposed, but when re-exported, they're treated as a macro! This is an awkward situation in all accounts. This PR checks functions to see whether they have any of `#[proc_macro]`, `#[proc_macro_attribute]`, or `#[proc_macro_derive]`, and exposes them as macros instead. In addition, attributes and derives are exposed differently than other macros, getting their own item-type, CSS class, and module heading.

Function-like proc-macros are lumped in with `macro_rules!` macros, but they get a different declaration block (i'm open to tweaking this, it's just what i thought of given how function-proc-macros operate):

Proc-macro attributes and derives get their own pages, with a representative declaration block. Derive macros also show off their helper attributes:


There's one wrinkle which this PR doesn't address, which is why i didn't mark this as fixing the linked issue. Currently, proc-macros don't expose their attributes or source span across crates, so while rustdoc knows they exist, that's about all the information it gets. This leads to an "inlined" macro that has absolutely no docs on it, and no `[src]` link to show you where it was declared.
The way i got around it was to keep proc-macro re-export disabled, since we do get enough information across crates to properly link to the source page:

Until we can get a proc-macro's docs (and ideally also its source span) across crates, i believe this is the best way forward.
|
|
|
|
overlook overflows in rustdoc trait solving
Context:
The new rustdoc "auto trait" feature walks across impls and tries to run trait solving on them with a lot of unconstrained variables. This is prone to overflows. These overflows used to cause an ICE because of a caching bug (fixed in this PR). But even once that is fixed, it means that rustdoc causes an overflow rather than generating docs.
This PR therefore adds a new helper that propagates the overflow error out. This requires rustdoc to then decide what to do when it encounters such an overflow: technically, an overflow represents neither "yes" nor "no", but rather a failure to make a decision. I've decided to opt on the side of treating this as "yes, implemented", since rustdoc already takes an optimistic view. This may prove to include too many items, but I *suspect* not.
We could probably reduce the rate of overflows by unifying more of the parameters from the impl -- right now we only seem to consider the self type. Moreover, in the future, as we transition to Chalk, overflow errors are expected to just "go away" (in some cases, though, queries might return an ambiguous result).
Fixes #52873
cc @QuietMisdreavus -- this is the stuff we were talking about earlier
cc @GuillaumeGomez -- this supersedes #53687
|
|
|
|
|
|
|
|
Support specifying edition in doc test
Fixes #52623
r? @QuietMisdreavus
|
|
|
|
|
|
|
|
those get handled properly in strip-hidden anyway
|
|
|
|
|