1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
12 html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
13 html_root_url = "https://doc.rust-lang.org/nightly/")]
15 #![feature(box_patterns)]
18 #![feature(proc_macro_internals)]
19 #![feature(proc_macro_quote)]
21 #![feature(rustc_diagnostic_macros)]
22 #![feature(slice_sort_by_cached_key)]
23 #![feature(crate_visibility_modifier)]
24 #![feature(specialization)]
25 #![feature(rustc_private)]
27 #![recursion_limit="256"]
33 extern crate stable_deref_trait;
36 extern crate syntax_pos;
38 extern crate serialize as rustc_serialize; // used by deriving
39 extern crate rustc_errors as errors;
40 extern crate syntax_ext;
41 extern crate proc_macro;
45 extern crate rustc_target;
47 extern crate rustc_data_structures;
67 pub fn validate_crate_name(
68 sess: Option<&rustc::session::Session>,
70 sp: Option<syntax_pos::Span>
72 let mut err_count = 0;
74 let mut say = |s: &str| {
76 (_, None) => bug!("{}", s),
77 (Some(sp), Some(sess)) => sess.span_err(sp, s),
78 (None, Some(sess)) => sess.err(s),
83 say("crate name must not be empty");
86 if c.is_alphanumeric() { continue }
87 if c == '_' { continue }
88 say(&format!("invalid character `{}` in crate name: `{}`", c, s));
93 sess.unwrap().abort_if_errors();
97 __build_diagnostic_array! { librustc_metadata, DIAGNOSTICS }