Implement non-mod.rs mod statements
This commit is contained in:
parent
b39c4bc123
commit
07f51fb868
56 changed files with 605 additions and 62 deletions
|
@ -687,7 +687,7 @@ impl<'a> ExtCtxt<'a> {
|
||||||
mark: Mark::root(),
|
mark: Mark::root(),
|
||||||
depth: 0,
|
depth: 0,
|
||||||
module: Rc::new(ModuleData { mod_path: Vec::new(), directory: PathBuf::new() }),
|
module: Rc::new(ModuleData { mod_path: Vec::new(), directory: PathBuf::new() }),
|
||||||
directory_ownership: DirectoryOwnership::Owned,
|
directory_ownership: DirectoryOwnership::Owned { relative: None },
|
||||||
},
|
},
|
||||||
expansions: HashMap::new(),
|
expansions: HashMap::new(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -976,7 +976,8 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
|
||||||
|
|
||||||
if inline_module {
|
if inline_module {
|
||||||
if let Some(path) = attr::first_attr_value_str_by_name(&item.attrs, "path") {
|
if let Some(path) = attr::first_attr_value_str_by_name(&item.attrs, "path") {
|
||||||
self.cx.current_expansion.directory_ownership = DirectoryOwnership::Owned;
|
self.cx.current_expansion.directory_ownership =
|
||||||
|
DirectoryOwnership::Owned { relative: None };
|
||||||
module.directory.push(&*path.as_str());
|
module.directory.push(&*path.as_str());
|
||||||
} else {
|
} else {
|
||||||
module.directory.push(&*item.ident.name.as_str());
|
module.directory.push(&*item.ident.name.as_str());
|
||||||
|
@ -988,8 +989,11 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
|
||||||
other => PathBuf::from(other.to_string()),
|
other => PathBuf::from(other.to_string()),
|
||||||
};
|
};
|
||||||
let directory_ownership = match path.file_name().unwrap().to_str() {
|
let directory_ownership = match path.file_name().unwrap().to_str() {
|
||||||
Some("mod.rs") => DirectoryOwnership::Owned,
|
Some("mod.rs") => DirectoryOwnership::Owned { relative: None },
|
||||||
_ => DirectoryOwnership::UnownedViaMod(false),
|
Some(_) => DirectoryOwnership::Owned {
|
||||||
|
relative: Some(item.ident),
|
||||||
|
},
|
||||||
|
None => DirectoryOwnership::UnownedViaMod(false),
|
||||||
};
|
};
|
||||||
path.pop();
|
path.pop();
|
||||||
module.directory = path;
|
module.directory = path;
|
||||||
|
|
|
@ -100,7 +100,7 @@ pub fn expand_include<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[tokenstream::T
|
||||||
};
|
};
|
||||||
// The file will be added to the code map by the parser
|
// The file will be added to the code map by the parser
|
||||||
let path = res_rel_file(cx, sp, file);
|
let path = res_rel_file(cx, sp, file);
|
||||||
let directory_ownership = DirectoryOwnership::Owned;
|
let directory_ownership = DirectoryOwnership::Owned { relative: None };
|
||||||
let p = parse::new_sub_parser_from_file(cx.parse_sess(), &path, directory_ownership, None, sp);
|
let p = parse::new_sub_parser_from_file(cx.parse_sess(), &path, directory_ownership, None, sp);
|
||||||
|
|
||||||
struct ExpandResult<'a> {
|
struct ExpandResult<'a> {
|
||||||
|
|
|
@ -35,7 +35,7 @@ use visit::{self, FnKind, Visitor};
|
||||||
use parse::ParseSess;
|
use parse::ParseSess;
|
||||||
use symbol::{keywords, Symbol};
|
use symbol::{keywords, Symbol};
|
||||||
|
|
||||||
use std::env;
|
use std::{env, path};
|
||||||
|
|
||||||
macro_rules! set {
|
macro_rules! set {
|
||||||
(proc_macro) => {{
|
(proc_macro) => {{
|
||||||
|
@ -435,6 +435,9 @@ declare_features! (
|
||||||
|
|
||||||
// Resolve absolute paths as paths from other crates
|
// Resolve absolute paths as paths from other crates
|
||||||
(active, extern_absolute_paths, "1.24.0", Some(44660)),
|
(active, extern_absolute_paths, "1.24.0", Some(44660)),
|
||||||
|
|
||||||
|
// `foo.rs` as an alternative to `foo/mod.rs`
|
||||||
|
(active, non_modrs_mods, "1.24.0", Some(44660)),
|
||||||
);
|
);
|
||||||
|
|
||||||
declare_features! (
|
declare_features! (
|
||||||
|
@ -1302,6 +1305,31 @@ fn contains_novel_literal(item: &ast::MetaItem) -> bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> PostExpansionVisitor<'a> {
|
||||||
|
fn whole_crate_feature_gates(&mut self) {
|
||||||
|
for &(ident, span) in &*self.context.parse_sess.non_modrs_mods.borrow() {
|
||||||
|
if !span.allows_unstable() {
|
||||||
|
let cx = &self.context;
|
||||||
|
let level = GateStrength::Hard;
|
||||||
|
let has_feature = cx.features.non_modrs_mods;
|
||||||
|
let name = "non_modrs_mods";
|
||||||
|
debug!("gate_feature(feature = {:?}, span = {:?}); has? {}",
|
||||||
|
name, span, has_feature);
|
||||||
|
|
||||||
|
if !has_feature && !span.allows_unstable() {
|
||||||
|
leveled_feature_err(
|
||||||
|
cx.parse_sess, name, span, GateIssue::Language,
|
||||||
|
"mod statements in non-mod.rs files are unstable", level
|
||||||
|
)
|
||||||
|
.help(&format!("on stable builds, rename this file to {}{}mod.rs",
|
||||||
|
ident, path::MAIN_SEPARATOR))
|
||||||
|
.emit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||||
fn visit_attribute(&mut self, attr: &ast::Attribute) {
|
fn visit_attribute(&mut self, attr: &ast::Attribute) {
|
||||||
if !attr.span.allows_unstable() {
|
if !attr.span.allows_unstable() {
|
||||||
|
@ -1854,7 +1882,9 @@ pub fn check_crate(krate: &ast::Crate,
|
||||||
parse_sess: sess,
|
parse_sess: sess,
|
||||||
plugin_attributes,
|
plugin_attributes,
|
||||||
};
|
};
|
||||||
visit::walk_crate(&mut PostExpansionVisitor { context: &ctx }, krate);
|
let visitor = &mut PostExpansionVisitor { context: &ctx };
|
||||||
|
visitor.whole_crate_feature_gates();
|
||||||
|
visit::walk_crate(visitor, krate);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
|
|
|
@ -1754,6 +1754,7 @@ mod tests {
|
||||||
included_mod_stack: RefCell::new(Vec::new()),
|
included_mod_stack: RefCell::new(Vec::new()),
|
||||||
code_map: cm,
|
code_map: cm,
|
||||||
missing_fragment_specifiers: RefCell::new(HashSet::new()),
|
missing_fragment_specifiers: RefCell::new(HashSet::new()),
|
||||||
|
non_modrs_mods: RefCell::new(vec![]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,9 @@ pub struct ParseSess {
|
||||||
pub unstable_features: UnstableFeatures,
|
pub unstable_features: UnstableFeatures,
|
||||||
pub config: CrateConfig,
|
pub config: CrateConfig,
|
||||||
pub missing_fragment_specifiers: RefCell<HashSet<Span>>,
|
pub missing_fragment_specifiers: RefCell<HashSet<Span>>,
|
||||||
|
// Spans where a `mod foo;` statement was included in a non-mod.rs file.
|
||||||
|
// These are used to issue errors if the non_modrs_mods feature is not enabled.
|
||||||
|
pub non_modrs_mods: RefCell<Vec<(ast::Ident, Span)>>,
|
||||||
/// Used to determine and report recursive mod inclusions
|
/// Used to determine and report recursive mod inclusions
|
||||||
included_mod_stack: RefCell<Vec<PathBuf>>,
|
included_mod_stack: RefCell<Vec<PathBuf>>,
|
||||||
code_map: Rc<CodeMap>,
|
code_map: Rc<CodeMap>,
|
||||||
|
@ -70,6 +73,7 @@ impl ParseSess {
|
||||||
missing_fragment_specifiers: RefCell::new(HashSet::new()),
|
missing_fragment_specifiers: RefCell::new(HashSet::new()),
|
||||||
included_mod_stack: RefCell::new(vec![]),
|
included_mod_stack: RefCell::new(vec![]),
|
||||||
code_map,
|
code_map,
|
||||||
|
non_modrs_mods: RefCell::new(vec![]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +90,10 @@ pub struct Directory {
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub enum DirectoryOwnership {
|
pub enum DirectoryOwnership {
|
||||||
Owned,
|
Owned {
|
||||||
|
// None if `mod.rs`, `Some("foo")` if we're in `foo.rs`
|
||||||
|
relative: Option<ast::Ident>,
|
||||||
|
},
|
||||||
UnownedViaBlock,
|
UnownedViaBlock,
|
||||||
UnownedViaMod(bool /* legacy warnings? */),
|
UnownedViaMod(bool /* legacy warnings? */),
|
||||||
}
|
}
|
||||||
|
|
|
@ -514,7 +514,10 @@ impl<'a> Parser<'a> {
|
||||||
restrictions: Restrictions::empty(),
|
restrictions: Restrictions::empty(),
|
||||||
obsolete_set: HashSet::new(),
|
obsolete_set: HashSet::new(),
|
||||||
recurse_into_file_modules,
|
recurse_into_file_modules,
|
||||||
directory: Directory { path: PathBuf::new(), ownership: DirectoryOwnership::Owned },
|
directory: Directory {
|
||||||
|
path: PathBuf::new(),
|
||||||
|
ownership: DirectoryOwnership::Owned { relative: None }
|
||||||
|
},
|
||||||
root_module_name: None,
|
root_module_name: None,
|
||||||
expected_tokens: Vec::new(),
|
expected_tokens: Vec::new(),
|
||||||
token_cursor: TokenCursor {
|
token_cursor: TokenCursor {
|
||||||
|
@ -5731,7 +5734,7 @@ impl<'a> Parser<'a> {
|
||||||
fn push_directory(&mut self, id: Ident, attrs: &[Attribute]) {
|
fn push_directory(&mut self, id: Ident, attrs: &[Attribute]) {
|
||||||
if let Some(path) = attr::first_attr_value_str_by_name(attrs, "path") {
|
if let Some(path) = attr::first_attr_value_str_by_name(attrs, "path") {
|
||||||
self.directory.path.push(&path.as_str());
|
self.directory.path.push(&path.as_str());
|
||||||
self.directory.ownership = DirectoryOwnership::Owned;
|
self.directory.ownership = DirectoryOwnership::Owned { relative: None };
|
||||||
} else {
|
} else {
|
||||||
self.directory.path.push(&id.name.as_str());
|
self.directory.path.push(&id.name.as_str());
|
||||||
}
|
}
|
||||||
|
@ -5742,10 +5745,28 @@ impl<'a> Parser<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns either a path to a module, or .
|
/// Returns either a path to a module, or .
|
||||||
pub fn default_submod_path(id: ast::Ident, dir_path: &Path, codemap: &CodeMap) -> ModulePath {
|
pub fn default_submod_path(
|
||||||
|
id: ast::Ident,
|
||||||
|
relative: Option<ast::Ident>,
|
||||||
|
dir_path: &Path,
|
||||||
|
codemap: &CodeMap) -> ModulePath
|
||||||
|
{
|
||||||
|
// If we're in a foo.rs file instead of a mod.rs file,
|
||||||
|
// we need to look for submodules in
|
||||||
|
// `./foo/<id>.rs` and `./foo/<id>/mod.rs` rather than
|
||||||
|
// `./<id>.rs` and `./<id>/mod.rs`.
|
||||||
|
let relative_prefix_string;
|
||||||
|
let relative_prefix = if let Some(ident) = relative {
|
||||||
|
relative_prefix_string = format!("{}{}", ident.name.as_str(), path::MAIN_SEPARATOR);
|
||||||
|
&relative_prefix_string
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
|
|
||||||
let mod_name = id.to_string();
|
let mod_name = id.to_string();
|
||||||
let default_path_str = format!("{}.rs", mod_name);
|
let default_path_str = format!("{}{}.rs", relative_prefix, mod_name);
|
||||||
let secondary_path_str = format!("{}{}mod.rs", mod_name, path::MAIN_SEPARATOR);
|
let secondary_path_str = format!("{}{}{}mod.rs",
|
||||||
|
relative_prefix, mod_name, path::MAIN_SEPARATOR);
|
||||||
let default_path = dir_path.join(&default_path_str);
|
let default_path = dir_path.join(&default_path_str);
|
||||||
let secondary_path = dir_path.join(&secondary_path_str);
|
let secondary_path = dir_path.join(&secondary_path_str);
|
||||||
let default_exists = codemap.file_exists(&default_path);
|
let default_exists = codemap.file_exists(&default_path);
|
||||||
|
@ -5754,12 +5775,16 @@ impl<'a> Parser<'a> {
|
||||||
let result = match (default_exists, secondary_exists) {
|
let result = match (default_exists, secondary_exists) {
|
||||||
(true, false) => Ok(ModulePathSuccess {
|
(true, false) => Ok(ModulePathSuccess {
|
||||||
path: default_path,
|
path: default_path,
|
||||||
directory_ownership: DirectoryOwnership::UnownedViaMod(false),
|
directory_ownership: DirectoryOwnership::Owned {
|
||||||
|
relative: Some(id),
|
||||||
|
},
|
||||||
warn: false,
|
warn: false,
|
||||||
}),
|
}),
|
||||||
(false, true) => Ok(ModulePathSuccess {
|
(false, true) => Ok(ModulePathSuccess {
|
||||||
path: secondary_path,
|
path: secondary_path,
|
||||||
directory_ownership: DirectoryOwnership::Owned,
|
directory_ownership: DirectoryOwnership::Owned {
|
||||||
|
relative: None,
|
||||||
|
},
|
||||||
warn: false,
|
warn: false,
|
||||||
}),
|
}),
|
||||||
(false, false) => Err(Error::FileNotFoundForModule {
|
(false, false) => Err(Error::FileNotFoundForModule {
|
||||||
|
@ -5790,7 +5815,10 @@ impl<'a> Parser<'a> {
|
||||||
if let Some(path) = Parser::submod_path_from_attr(outer_attrs, &self.directory.path) {
|
if let Some(path) = Parser::submod_path_from_attr(outer_attrs, &self.directory.path) {
|
||||||
return Ok(ModulePathSuccess {
|
return Ok(ModulePathSuccess {
|
||||||
directory_ownership: match path.file_name().and_then(|s| s.to_str()) {
|
directory_ownership: match path.file_name().and_then(|s| s.to_str()) {
|
||||||
Some("mod.rs") => DirectoryOwnership::Owned,
|
Some("mod.rs") => DirectoryOwnership::Owned { relative: None },
|
||||||
|
Some(_) => {
|
||||||
|
DirectoryOwnership::Owned { relative: Some(id) }
|
||||||
|
}
|
||||||
_ => DirectoryOwnership::UnownedViaMod(true),
|
_ => DirectoryOwnership::UnownedViaMod(true),
|
||||||
},
|
},
|
||||||
path,
|
path,
|
||||||
|
@ -5798,49 +5826,69 @@ impl<'a> Parser<'a> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let paths = Parser::default_submod_path(id, &self.directory.path, self.sess.codemap());
|
let relative = match self.directory.ownership {
|
||||||
|
DirectoryOwnership::Owned { relative } => {
|
||||||
if let DirectoryOwnership::UnownedViaBlock = self.directory.ownership {
|
// Push the usage onto the list of non-mod.rs mod uses.
|
||||||
let msg =
|
// This is used later for feature-gate error reporting.
|
||||||
"Cannot declare a non-inline module inside a block unless it has a path attribute";
|
if let Some(cur_file_ident) = relative {
|
||||||
let mut err = self.diagnostic().struct_span_err(id_sp, msg);
|
self.sess
|
||||||
if paths.path_exists {
|
.non_modrs_mods.borrow_mut()
|
||||||
let msg = format!("Maybe `use` the module `{}` instead of redeclaring it",
|
.push((cur_file_ident, id_sp));
|
||||||
paths.name);
|
|
||||||
err.span_note(id_sp, &msg);
|
|
||||||
}
|
|
||||||
Err(err)
|
|
||||||
} else if let DirectoryOwnership::UnownedViaMod(warn) = self.directory.ownership {
|
|
||||||
if warn {
|
|
||||||
if let Ok(result) = paths.result {
|
|
||||||
return Ok(ModulePathSuccess { warn: true, ..result });
|
|
||||||
}
|
}
|
||||||
|
relative
|
||||||
|
},
|
||||||
|
DirectoryOwnership::UnownedViaBlock |
|
||||||
|
DirectoryOwnership::UnownedViaMod(_) => None,
|
||||||
|
};
|
||||||
|
let paths = Parser::default_submod_path(
|
||||||
|
id, relative, &self.directory.path, self.sess.codemap());
|
||||||
|
|
||||||
|
match self.directory.ownership {
|
||||||
|
DirectoryOwnership::Owned { .. } => {
|
||||||
|
paths.result.map_err(|err| self.span_fatal_err(id_sp, err))
|
||||||
|
},
|
||||||
|
DirectoryOwnership::UnownedViaBlock => {
|
||||||
|
let msg =
|
||||||
|
"Cannot declare a non-inline module inside a block \
|
||||||
|
unless it has a path attribute";
|
||||||
|
let mut err = self.diagnostic().struct_span_err(id_sp, msg);
|
||||||
|
if paths.path_exists {
|
||||||
|
let msg = format!("Maybe `use` the module `{}` instead of redeclaring it",
|
||||||
|
paths.name);
|
||||||
|
err.span_note(id_sp, &msg);
|
||||||
|
}
|
||||||
|
Err(err)
|
||||||
}
|
}
|
||||||
let mut err = self.diagnostic().struct_span_err(id_sp,
|
DirectoryOwnership::UnownedViaMod(warn) => {
|
||||||
"cannot declare a new module at this location");
|
if warn {
|
||||||
if id_sp != syntax_pos::DUMMY_SP {
|
if let Ok(result) = paths.result {
|
||||||
let src_path = self.sess.codemap().span_to_filename(id_sp);
|
return Ok(ModulePathSuccess { warn: true, ..result });
|
||||||
if let FileName::Real(src_path) = src_path {
|
}
|
||||||
if let Some(stem) = src_path.file_stem() {
|
}
|
||||||
let mut dest_path = src_path.clone();
|
let mut err = self.diagnostic().struct_span_err(id_sp,
|
||||||
dest_path.set_file_name(stem);
|
"cannot declare a new module at this location");
|
||||||
dest_path.push("mod.rs");
|
if id_sp != syntax_pos::DUMMY_SP {
|
||||||
err.span_note(id_sp,
|
let src_path = self.sess.codemap().span_to_filename(id_sp);
|
||||||
|
if let FileName::Real(src_path) = src_path {
|
||||||
|
if let Some(stem) = src_path.file_stem() {
|
||||||
|
let mut dest_path = src_path.clone();
|
||||||
|
dest_path.set_file_name(stem);
|
||||||
|
dest_path.push("mod.rs");
|
||||||
|
err.span_note(id_sp,
|
||||||
&format!("maybe move this module `{}` to its own \
|
&format!("maybe move this module `{}` to its own \
|
||||||
directory via `{}`", src_path.display(),
|
directory via `{}`", src_path.display(),
|
||||||
dest_path.display()));
|
dest_path.display()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if paths.path_exists {
|
||||||
|
err.span_note(id_sp,
|
||||||
|
&format!("... or maybe `use` the module `{}` instead \
|
||||||
|
of possibly redeclaring it",
|
||||||
|
paths.name));
|
||||||
|
}
|
||||||
|
Err(err)
|
||||||
}
|
}
|
||||||
if paths.path_exists {
|
|
||||||
err.span_note(id_sp,
|
|
||||||
&format!("... or maybe `use` the module `{}` instead \
|
|
||||||
of possibly redeclaring it",
|
|
||||||
paths.name));
|
|
||||||
}
|
|
||||||
Err(err)
|
|
||||||
} else {
|
|
||||||
paths.result.map_err(|err| self.span_fatal_err(id_sp, err))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern: cannot declare a new module at this location
|
// error-pattern: mod statements in non-mod.rs files are unstable
|
||||||
// error-pattern: will become a hard error
|
|
||||||
|
|
||||||
#[path="mod_file_not_owning_aux3.rs"]
|
#[path="mod_file_not_owning_aux3.rs"]
|
||||||
mod foo;
|
mod foo;
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Copyright 2017 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.
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Copyright 2017 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.
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern: cannot declare a new module at this location
|
// error-pattern: mod statements in non-mod.rs files are unstable
|
||||||
|
|
||||||
mod mod_file_not_owning_aux1;
|
mod mod_file_not_owning_aux1;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Copyright 2017 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.
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern: cannot declare a new module at this location
|
// error-pattern: mod statements in non-mod.rs files are unstable
|
||||||
|
|
||||||
// This is not a directory owner since the file name is not "mod.rs".
|
// This is not a directory owner since the file name is not "mod.rs".
|
||||||
#[path = "mod_file_not_owning_aux1.rs"]
|
#[path = "mod_file_not_owning_aux1.rs"]
|
||||||
|
|
14
src/test/run-pass/non_modrs_mods/foors_mod.rs
Normal file
14
src/test/run-pass/non_modrs_mods/foors_mod.rs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
//
|
||||||
|
// ignore-test: not a test, used by non_modrs_mods.rs
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
||||||
|
pub mod inner_foors_mod;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
12
src/test/run-pass/non_modrs_mods/modrs_mod/mod.rs
Normal file
12
src/test/run-pass/non_modrs_mods/modrs_mod/mod.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
||||||
|
pub mod inner_foors_mod;
|
24
src/test/run-pass/non_modrs_mods/non_modrs_mods.rs
Normal file
24
src/test/run-pass/non_modrs_mods/non_modrs_mods.rs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
#![feature(non_modrs_mods)]
|
||||||
|
|
||||||
|
pub mod modrs_mod;
|
||||||
|
pub mod foors_mod;
|
||||||
|
|
||||||
|
#[path = "some_crazy_attr_mod_dir/arbitrary_name.rs"]
|
||||||
|
pub mod attr_mod;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
modrs_mod::inner_modrs_mod::innest::foo();
|
||||||
|
modrs_mod::inner_foors_mod::innest::foo();
|
||||||
|
foors_mod::inner_modrs_mod::innest::foo();
|
||||||
|
foors_mod::inner_foors_mod::innest::foo();
|
||||||
|
attr_mod::inner_modrs_mod::innest::foo();
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -9,6 +9,7 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
// ignore-windows
|
||||||
|
|
||||||
// error-pattern: cannot declare a new module at this location
|
// error-pattern: cannot declare a new module at this location
|
||||||
// error-pattern: maybe move this module
|
// error-pattern: maybe move this module
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
error: cannot declare a new module at this location
|
error[E0583]: file not found for module `baz`
|
||||||
--> $DIR/auxiliary/foo/bar.rs:11:9
|
--> $DIR/auxiliary/foo/bar.rs:11:9
|
||||||
|
|
|
|
||||||
11 | pub mod baz;
|
11 | pub mod baz;
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
|
|
||||||
note: maybe move this module `$DIR/auxiliary/foo/bar.rs` to its own directory via `$DIR/auxiliary/foo/bar/mod.rs`
|
= help: name the file either bar/baz.rs or bar/baz/mod.rs inside the directory "$DIR/auxiliary/foo"
|
||||||
--> $DIR/auxiliary/foo/bar.rs:11:9
|
|
||||||
|
|
|
||||||
11 | pub mod baz;
|
|
||||||
| ^^^
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
13
src/test/ui/missing_non_modrs_mod/foo.rs
Normal file
13
src/test/ui/missing_non_modrs_mod/foo.rs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
//
|
||||||
|
// ignore-test this is just a helper for the real test in this dir
|
||||||
|
|
||||||
|
mod missing;
|
14
src/test/ui/missing_non_modrs_mod/missing_non_modrs_mod.rs
Normal file
14
src/test/ui/missing_non_modrs_mod/missing_non_modrs_mod.rs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
// ignore-windows
|
||||||
|
|
||||||
|
mod foo;
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,10 @@
|
||||||
|
error[E0583]: file not found for module `missing`
|
||||||
|
--> $DIR/foo.rs:13:5
|
||||||
|
|
|
||||||
|
13 | mod missing;
|
||||||
|
| ^^^^^^^
|
||||||
|
|
|
||||||
|
= help: name the file either foo/missing.rs or foo/missing/mod.rs inside the directory "$DIR"
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
14
src/test/ui/non_modrs_mods/foors_mod.rs
Normal file
14
src/test/ui/non_modrs_mods/foors_mod.rs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
//
|
||||||
|
// ignore-test: not a test, used by non_modrs_mods.rs
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
||||||
|
pub mod inner_foors_mod;
|
11
src/test/ui/non_modrs_mods/foors_mod/inner_foors_mod.rs
Normal file
11
src/test/ui/non_modrs_mods/foors_mod/inner_foors_mod.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
11
src/test/ui/non_modrs_mods/foors_mod/inner_modrs_mod/mod.rs
Normal file
11
src/test/ui/non_modrs_mods/foors_mod/inner_modrs_mod/mod.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
11
src/test/ui/non_modrs_mods/modrs_mod/inner_foors_mod.rs
Normal file
11
src/test/ui/non_modrs_mods/modrs_mod/inner_foors_mod.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
11
src/test/ui/non_modrs_mods/modrs_mod/inner_modrs_mod/mod.rs
Normal file
11
src/test/ui/non_modrs_mods/modrs_mod/inner_modrs_mod/mod.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
12
src/test/ui/non_modrs_mods/modrs_mod/mod.rs
Normal file
12
src/test/ui/non_modrs_mods/modrs_mod/mod.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
||||||
|
pub mod inner_foors_mod;
|
27
src/test/ui/non_modrs_mods/non_modrs_mods.rs
Normal file
27
src/test/ui/non_modrs_mods/non_modrs_mods.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
//
|
||||||
|
// Tests the formatting of the feature-gate errors for non_modrs_mods
|
||||||
|
//
|
||||||
|
// gate-test-non_modrs_mods
|
||||||
|
// ignore-windows
|
||||||
|
pub mod modrs_mod;
|
||||||
|
pub mod foors_mod;
|
||||||
|
|
||||||
|
#[path = "some_crazy_attr_mod_dir/arbitrary_name.rs"]
|
||||||
|
pub mod attr_mod;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
modrs_mod::inner_modrs_mod::innest::foo();
|
||||||
|
modrs_mod::inner_foors_mod::innest::foo();
|
||||||
|
foors_mod::inner_modrs_mod::innest::foo();
|
||||||
|
foors_mod::inner_foors_mod::innest::foo();
|
||||||
|
attr_mod::inner_modrs_mod::innest::foo();
|
||||||
|
}
|
47
src/test/ui/non_modrs_mods/non_modrs_mods.stderr
Normal file
47
src/test/ui/non_modrs_mods/non_modrs_mods.stderr
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
error: mod statements in non-mod.rs files are unstable (see issue #44660)
|
||||||
|
--> $DIR/modrs_mod/inner_foors_mod.rs:11:9
|
||||||
|
|
|
||||||
|
11 | pub mod innest;
|
||||||
|
| ^^^^^^
|
||||||
|
|
|
||||||
|
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
|
||||||
|
= help: on stable builds, rename this file to inner_foors_mod/mod.rs
|
||||||
|
|
||||||
|
error: mod statements in non-mod.rs files are unstable (see issue #44660)
|
||||||
|
--> $DIR/foors_mod.rs:13:9
|
||||||
|
|
|
||||||
|
13 | pub mod inner_modrs_mod;
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
|
||||||
|
= help: on stable builds, rename this file to foors_mod/mod.rs
|
||||||
|
|
||||||
|
error: mod statements in non-mod.rs files are unstable (see issue #44660)
|
||||||
|
--> $DIR/foors_mod.rs:14:9
|
||||||
|
|
|
||||||
|
14 | pub mod inner_foors_mod;
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
|
||||||
|
= help: on stable builds, rename this file to foors_mod/mod.rs
|
||||||
|
|
||||||
|
error: mod statements in non-mod.rs files are unstable (see issue #44660)
|
||||||
|
--> $DIR/foors_mod/inner_foors_mod.rs:11:9
|
||||||
|
|
|
||||||
|
11 | pub mod innest;
|
||||||
|
| ^^^^^^
|
||||||
|
|
|
||||||
|
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
|
||||||
|
= help: on stable builds, rename this file to inner_foors_mod/mod.rs
|
||||||
|
|
||||||
|
error: mod statements in non-mod.rs files are unstable (see issue #44660)
|
||||||
|
--> $DIR/some_crazy_attr_mod_dir/arbitrary_name.rs:11:9
|
||||||
|
|
|
||||||
|
11 | pub mod inner_modrs_mod;
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
|
||||||
|
= help: on stable builds, rename this file to attr_mod/mod.rs
|
||||||
|
|
||||||
|
error: aborting due to 5 previous errors
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod inner_modrs_mod;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub fn foo() {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
pub mod innest;
|
|
@ -93,7 +93,8 @@ pub fn check(path: &Path, bad: &mut bool, quiet: bool) {
|
||||||
&path.join("test/ui"),
|
&path.join("test/ui"),
|
||||||
&path.join("test/compile-fail"),
|
&path.join("test/compile-fail"),
|
||||||
&path.join("test/compile-fail-fulldeps"),
|
&path.join("test/compile-fail-fulldeps"),
|
||||||
&path.join("test/parse-fail"),],
|
&path.join("test/parse-fail"),
|
||||||
|
&path.join("test/ui"),],
|
||||||
&mut |path| super::filter_dirs(path),
|
&mut |path| super::filter_dirs(path),
|
||||||
&mut |file| {
|
&mut |file| {
|
||||||
let filename = file.file_name().unwrap().to_string_lossy();
|
let filename = file.file_name().unwrap().to_string_lossy();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue