Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate documentation for auto-trait impls #47833

Merged
merged 11 commits into from
Feb 22, 2018

Commits on Feb 18, 2018

  1. Generate documentation for auto-trait impls

    A new section is added to both both struct and trait doc pages.
    
    On struct/enum pages, a new 'Auto Trait Implementations' section displays any
    synthetic implementations for auto traits. Currently, this is only done
    for Send and Sync.
    
    On trait pages, a new 'Auto Implementors' section displays all types
    which automatically implement the trait. Effectively, this is a list of
    all public types in the standard library.
    
    Synthesized impls for a particular auto trait ('synthetic impls') take
    into account generic bounds. For example, a type 'struct Foo<T>(T)' will
    have 'impl<T> Send for Foo<T> where T: Send' generated for it.
    
    Manual implementations of auto traits are also taken into account. If we have
    the following types:
    
    'struct Foo<T>(T)'
    'struct Wrapper<T>(Foo<T>)'
    'unsafe impl<T> Send for Wrapper<T>' // pretend that Wrapper<T> makes
    this sound somehow
    
    Then Wrapper will have the following impl generated:
    'impl<T> Send for Wrapper<T>'
    reflecting the fact that 'T: Send' need not hold for 'Wrapper<T>: Send'
    to hold
    
    Lifetimes, HRTBS, and projections (e.g. '<T as Iterator>::Item') are
    taken into account by synthetic impls
    
    However, if a type can *never* implement a particular auto trait
    (e.g. 'struct MyStruct<T>(*const T)'), then a negative impl will be
    generated (in this case, 'impl<T> !Send for MyStruct<T>')
    
    All of this means that a user should be able to copy-paste a synthetic
    impl into their code, without any observable changes in behavior
    (assuming the rest of the program remains unchanged).
    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    6728f21 View commit details
    Browse the repository at this point in the history
  2. Fix merge conflicts

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    9d7165f View commit details
    Browse the repository at this point in the history
  3. Cleanup formatting

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    1531fbe View commit details
    Browse the repository at this point in the history
  4. More formatting fixes

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    0bfbe24 View commit details
    Browse the repository at this point in the history
  5. More formatting fixups

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    94fd4f3 View commit details
    Browse the repository at this point in the history
  6. Fix inlining

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    64a1f6f View commit details
    Browse the repository at this point in the history
  7. Remove extra whitespace

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    298d703 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    0c6ad46 View commit details
    Browse the repository at this point in the history
  9. Remove extra space in test

    Aaron1011 committed Feb 18, 2018
    Configuration menu
    Copy the full SHA
    2aead59 View commit details
    Browse the repository at this point in the history

Commits on Feb 19, 2018

  1. Fix submodule ref

    Aaron1011 committed Feb 19, 2018
    Configuration menu
    Copy the full SHA
    8788179 View commit details
    Browse the repository at this point in the history

Commits on Feb 20, 2018

  1. Sort synthetic impls bounds before rendering

    This removes the implicit dependency on the iteration
    order of FxHashMap
    Aaron1011 committed Feb 20, 2018
    Configuration menu
    Copy the full SHA
    44d07df View commit details
    Browse the repository at this point in the history