2013-05-28 15:44:53 -05:00
|
|
|
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
|
|
|
|
// file at the top-level directory of this distribution and at
|
|
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
|
|
// option. This file may not be copied, modified, or distributed
|
|
|
|
// except according to those terms.
|
|
|
|
|
|
|
|
// When denying at the crate level, be sure to not get random warnings from the
|
|
|
|
// injected intrinsics by the compiler.
|
2014-10-27 17:37:07 -05:00
|
|
|
#![deny(missing_docs)]
|
2014-03-21 20:05:05 -05:00
|
|
|
#![allow(dead_code)]
|
librustc: Make `Copy` opt-in.
This change makes the compiler no longer infer whether types (structures
and enumerations) implement the `Copy` trait (and thus are implicitly
copyable). Rather, you must implement `Copy` yourself via `impl Copy for
MyType {}`.
A new warning has been added, `missing_copy_implementations`, to warn
you if a non-generic public type has been added that could have
implemented `Copy` but didn't.
For convenience, you may *temporarily* opt out of this behavior by using
`#![feature(opt_out_copy)]`. Note though that this feature gate will never be
accepted and will be removed by the time that 1.0 is released, so you should
transition your code away from using it.
This breaks code like:
#[deriving(Show)]
struct Point2D {
x: int,
y: int,
}
fn main() {
let mypoint = Point2D {
x: 1,
y: 1,
};
let otherpoint = mypoint;
println!("{}{}", mypoint, otherpoint);
}
Change this code to:
#[deriving(Show)]
struct Point2D {
x: int,
y: int,
}
impl Copy for Point2D {}
fn main() {
let mypoint = Point2D {
x: 1,
y: 1,
};
let otherpoint = mypoint;
println!("{}{}", mypoint, otherpoint);
}
This is the backwards-incompatible part of #13231.
Part of RFC #3.
[breaking-change]
2014-12-05 19:01:33 -06:00
|
|
|
#![allow(missing_copy_implementations)]
|
2013-05-28 15:44:53 -05:00
|
|
|
|
2013-11-26 00:12:14 -06:00
|
|
|
//! Some garbage docs for the crate here
|
2014-03-21 20:05:05 -05:00
|
|
|
#![doc="More garbage"]
|
2013-11-26 00:12:14 -06:00
|
|
|
|
2014-12-04 22:20:09 -06:00
|
|
|
type Typedef = String;
|
|
|
|
pub type PubTypedef = String; //~ ERROR: missing documentation
|
|
|
|
|
2013-05-28 15:44:53 -05:00
|
|
|
struct Foo {
|
|
|
|
a: int,
|
2014-01-24 13:02:03 -06:00
|
|
|
b: int,
|
2013-05-28 15:44:53 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
pub struct PubFoo { //~ ERROR: missing documentation
|
2014-03-28 13:09:31 -05:00
|
|
|
pub a: int, //~ ERROR: missing documentation
|
|
|
|
b: int,
|
2013-05-28 15:44:53 -05:00
|
|
|
}
|
|
|
|
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)]
|
2013-05-28 15:44:53 -05:00
|
|
|
pub struct PubFoo2 {
|
2014-03-28 13:09:31 -05:00
|
|
|
pub a: int,
|
|
|
|
pub c: int,
|
2013-05-28 15:44:53 -05:00
|
|
|
}
|
|
|
|
|
2013-10-12 21:02:46 -05:00
|
|
|
mod module_no_dox {}
|
|
|
|
pub mod pub_module_no_dox {} //~ ERROR: missing documentation
|
|
|
|
|
2013-05-28 15:44:53 -05:00
|
|
|
/// dox
|
|
|
|
pub fn foo() {}
|
|
|
|
pub fn foo2() {} //~ ERROR: missing documentation
|
|
|
|
fn foo3() {}
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)] pub fn foo4() {}
|
2013-05-28 15:44:53 -05:00
|
|
|
|
|
|
|
/// dox
|
2013-11-11 22:17:47 -06:00
|
|
|
pub trait A {
|
|
|
|
/// dox
|
2013-08-09 03:25:24 -05:00
|
|
|
fn foo();
|
2013-11-11 22:17:47 -06:00
|
|
|
/// dox
|
|
|
|
fn foo_with_impl() {}
|
2013-05-28 15:44:53 -05:00
|
|
|
}
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)]
|
2013-11-11 22:17:47 -06:00
|
|
|
trait B {
|
|
|
|
fn foo();
|
|
|
|
fn foo_with_impl() {}
|
|
|
|
}
|
|
|
|
pub trait C { //~ ERROR: missing documentation
|
|
|
|
fn foo(); //~ ERROR: missing documentation
|
|
|
|
fn foo_with_impl() {} //~ ERROR: missing documentation
|
|
|
|
}
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)] pub trait D {}
|
2013-05-28 15:44:53 -05:00
|
|
|
|
|
|
|
impl Foo {
|
2013-11-20 17:15:34 -06:00
|
|
|
pub fn foo() {}
|
|
|
|
fn bar() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl PubFoo {
|
2013-05-28 15:44:53 -05:00
|
|
|
pub fn foo() {} //~ ERROR: missing documentation
|
|
|
|
/// dox
|
|
|
|
pub fn foo1() {}
|
|
|
|
fn foo2() {}
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)] pub fn foo3() {}
|
2013-05-28 15:44:53 -05:00
|
|
|
}
|
|
|
|
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)]
|
2013-05-28 15:44:53 -05:00
|
|
|
trait F {
|
2013-08-09 03:25:24 -05:00
|
|
|
fn a();
|
2013-05-28 15:44:53 -05:00
|
|
|
fn b(&self);
|
|
|
|
}
|
|
|
|
|
|
|
|
// should need to redefine documentation for implementations of traits
|
|
|
|
impl F for Foo {
|
2013-08-09 03:25:24 -05:00
|
|
|
fn a() {}
|
2013-05-28 15:44:53 -05:00
|
|
|
fn b(&self) {}
|
|
|
|
}
|
|
|
|
|
2014-10-27 17:37:07 -05:00
|
|
|
// It sure is nice if doc(hidden) implies allow(missing_docs), and that it
|
2013-05-28 16:53:43 -05:00
|
|
|
// applies recursively
|
|
|
|
#[doc(hidden)]
|
|
|
|
mod a {
|
|
|
|
pub fn baz() {}
|
|
|
|
pub mod b {
|
|
|
|
pub fn baz() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-10-02 01:26:45 -05:00
|
|
|
enum Baz {
|
|
|
|
BazA {
|
|
|
|
a: int,
|
2014-01-24 13:02:03 -06:00
|
|
|
b: int
|
2013-10-02 01:26:45 -05:00
|
|
|
},
|
|
|
|
BarB
|
|
|
|
}
|
|
|
|
|
|
|
|
pub enum PubBaz { //~ ERROR: missing documentation
|
|
|
|
PubBazA { //~ ERROR: missing documentation
|
2014-11-15 19:57:54 -06:00
|
|
|
a: int, //~ ERROR: missing documentation
|
2013-10-02 01:26:45 -05:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
/// dox
|
|
|
|
pub enum PubBaz2 {
|
|
|
|
/// dox
|
|
|
|
PubBaz2A {
|
|
|
|
/// dox
|
2014-11-15 19:57:54 -06:00
|
|
|
a: int,
|
2013-10-02 01:26:45 -05:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2014-10-27 17:37:07 -05:00
|
|
|
#[allow(missing_docs)]
|
2013-10-02 01:26:45 -05:00
|
|
|
pub enum PubBaz3 {
|
|
|
|
PubBaz3A {
|
2014-03-28 13:09:31 -05:00
|
|
|
b: int
|
2013-10-02 01:26:45 -05:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2013-05-28 16:53:43 -05:00
|
|
|
#[doc(hidden)]
|
|
|
|
pub fn baz() {}
|
|
|
|
|
2013-11-11 22:17:47 -06:00
|
|
|
mod internal_impl {
|
|
|
|
/// dox
|
|
|
|
pub fn documented() {}
|
|
|
|
pub fn undocumented1() {} //~ ERROR: missing documentation
|
|
|
|
pub fn undocumented2() {} //~ ERROR: missing documentation
|
|
|
|
fn undocumented3() {}
|
|
|
|
/// dox
|
|
|
|
pub mod globbed {
|
|
|
|
/// dox
|
|
|
|
pub fn also_documented() {}
|
|
|
|
pub fn also_undocumented1() {} //~ ERROR: missing documentation
|
|
|
|
fn also_undocumented2() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// dox
|
|
|
|
pub mod public_interface {
|
2014-08-12 21:25:05 -05:00
|
|
|
pub use internal_impl::documented as foo;
|
|
|
|
pub use internal_impl::undocumented1 as bar;
|
2013-11-11 22:17:47 -06:00
|
|
|
pub use internal_impl::{documented, undocumented2};
|
|
|
|
pub use internal_impl::globbed::*;
|
|
|
|
}
|
|
|
|
|
2013-05-28 15:44:53 -05:00
|
|
|
fn main() {}
|