Make #[doc(include)] paths behave like other paths

This makes them relative to the containing file instead of the crate
root
This commit is contained in:
Jonas Schievink 2019-05-18 15:56:53 +02:00
parent ba78db310b
commit 138e08ccf6
2 changed files with 34 additions and 21 deletions

View file

@ -8,7 +8,8 @@
#![stable(feature = "raw_os", since = "1.1.0")]
#[doc(include = "os/raw/char.md")]
#[cfg_attr(stage0, doc(include = "os/raw/char.md"))]
#[cfg_attr(not(stage0), doc(include = "char.md"))]
#[cfg(any(all(target_os = "linux", any(target_arch = "aarch64",
target_arch = "arm",
target_arch = "powerpc",
@ -31,7 +32,8 @@
target_arch = "powerpc")),
all(target_os = "fuchsia", target_arch = "aarch64")))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_char = u8;
#[doc(include = "os/raw/char.md")]
#[cfg_attr(stage0, doc(include = "os/raw/char.md"))]
#[cfg_attr(not(stage0), doc(include = "char.md"))]
#[cfg(not(any(all(target_os = "linux", any(target_arch = "aarch64",
target_arch = "arm",
target_arch = "powerpc",
@ -54,37 +56,51 @@
target_arch = "powerpc")),
all(target_os = "fuchsia", target_arch = "aarch64"))))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_char = i8;
#[doc(include = "os/raw/schar.md")]
#[cfg_attr(stage0, doc(include = "os/raw/schar.md"))]
#[cfg_attr(not(stage0), doc(include = "schar.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_schar = i8;
#[doc(include = "os/raw/uchar.md")]
#[cfg_attr(stage0, doc(include = "os/raw/uchar.md"))]
#[cfg_attr(not(stage0), doc(include = "uchar.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_uchar = u8;
#[doc(include = "os/raw/short.md")]
#[cfg_attr(stage0, doc(include = "os/raw/short.md"))]
#[cfg_attr(not(stage0), doc(include = "short.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_short = i16;
#[doc(include = "os/raw/ushort.md")]
#[cfg_attr(stage0, doc(include = "os/raw/ushort.md"))]
#[cfg_attr(not(stage0), doc(include = "ushort.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ushort = u16;
#[doc(include = "os/raw/int.md")]
#[cfg_attr(stage0, doc(include = "os/raw/int.md"))]
#[cfg_attr(not(stage0), doc(include = "int.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_int = i32;
#[doc(include = "os/raw/uint.md")]
#[cfg_attr(stage0, doc(include = "os/raw/uint.md"))]
#[cfg_attr(not(stage0), doc(include = "uint.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_uint = u32;
#[doc(include = "os/raw/long.md")]
#[cfg_attr(stage0, doc(include = "os/raw/long.md"))]
#[cfg_attr(not(stage0), doc(include = "long.md"))]
#[cfg(any(target_pointer_width = "32", windows))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_long = i32;
#[doc(include = "os/raw/ulong.md")]
#[cfg_attr(stage0, doc(include = "os/raw/ulong.md"))]
#[cfg_attr(not(stage0), doc(include = "ulong.md"))]
#[cfg(any(target_pointer_width = "32", windows))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulong = u32;
#[doc(include = "os/raw/long.md")]
#[cfg_attr(stage0, doc(include = "os/raw/long.md"))]
#[cfg_attr(not(stage0), doc(include = "long.md"))]
#[cfg(all(target_pointer_width = "64", not(windows)))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_long = i64;
#[doc(include = "os/raw/ulong.md")]
#[cfg_attr(stage0, doc(include = "os/raw/ulong.md"))]
#[cfg_attr(not(stage0), doc(include = "ulong.md"))]
#[cfg(all(target_pointer_width = "64", not(windows)))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulong = u64;
#[doc(include = "os/raw/longlong.md")]
#[cfg_attr(stage0, doc(include = "os/raw/longlong.md"))]
#[cfg_attr(not(stage0), doc(include = "longlong.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_longlong = i64;
#[doc(include = "os/raw/ulonglong.md")]
#[cfg_attr(stage0, doc(include = "os/raw/ulonglong.md"))]
#[cfg_attr(not(stage0), doc(include = "ulonglong.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_ulonglong = u64;
#[doc(include = "os/raw/float.md")]
#[cfg_attr(stage0, doc(include = "os/raw/float.md"))]
#[cfg_attr(not(stage0), doc(include = "float.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_float = f32;
#[doc(include = "os/raw/double.md")]
#[cfg_attr(stage0, doc(include = "os/raw/double.md"))]
#[cfg_attr(not(stage0), doc(include = "double.md"))]
#[stable(feature = "raw_os", since = "1.1.0")] pub type c_double = f64;
#[stable(feature = "raw_os", since = "1.1.0")]

View file

@ -17,6 +17,7 @@ use crate::symbol::{sym, Symbol};
use crate::tokenstream::{TokenStream, TokenTree};
use crate::visit::{self, Visitor};
use crate::util::map_in_place::MapInPlace;
use crate::util::path;
use errors::{Applicability, FatalError};
use smallvec::{smallvec, SmallVec};
@ -1253,7 +1254,7 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
return noop_visit_attribute(at, self);
}
let filename = self.cx.root_path.join(file.to_string());
let filename = path::resolve(&*file.as_str(), it.span(), self.cx.source_map());
match fs::read_to_string(&filename) {
Ok(src) => {
let src_interned = Symbol::intern(&src);
@ -1302,10 +1303,6 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
);
err.span_label(lit.span, "couldn't read file");
if e.kind() == ErrorKind::NotFound {
err.help("external doc paths are relative to the crate root");
}
err.emit();
}
}