]> git.lizzy.rs Git - rust.git/blob - src/librustc_metadata/lib.rs
Rollup merge of #64918 - GuillaumeGomez:long-err-explanation-E0551, r=oli-obk
[rust.git] / src / librustc_metadata / lib.rs
1 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
2
3 #![feature(box_patterns)]
4 #![feature(crate_visibility_modifier)]
5 #![feature(drain_filter)]
6 #![feature(in_band_lifetimes)]
7 #![feature(libc)]
8 #![feature(nll)]
9 #![feature(proc_macro_internals)]
10 #![feature(proc_macro_quote)]
11 #![feature(rustc_private)]
12 #![feature(slice_patterns)]
13 #![feature(specialization)]
14
15 #![recursion_limit="256"]
16
17 extern crate libc;
18 extern crate proc_macro;
19
20 #[macro_use]
21 extern crate rustc;
22 #[macro_use]
23 extern crate rustc_data_structures;
24
25 pub mod error_codes;
26
27 mod index;
28 mod encoder;
29 mod decoder;
30 mod cstore_impl;
31 mod schema;
32 mod native_libs;
33 mod link_args;
34 mod foreign_modules;
35 mod dependency_format;
36
37 pub mod creader;
38 pub mod cstore;
39 pub mod dynamic_lib;
40 pub mod locator;
41
42 pub fn validate_crate_name(
43     sess: Option<&rustc::session::Session>,
44     s: &str,
45     sp: Option<syntax_pos::Span>
46 ) {
47     let mut err_count = 0;
48     {
49         let mut say = |s: &str| {
50             match (sp, sess) {
51                 (_, None) => bug!("{}", s),
52                 (Some(sp), Some(sess)) => sess.span_err(sp, s),
53                 (None, Some(sess)) => sess.err(s),
54             }
55             err_count += 1;
56         };
57         if s.is_empty() {
58             say("crate name must not be empty");
59         }
60         for c in s.chars() {
61             if c.is_alphanumeric() { continue }
62             if c == '_'  { continue }
63             say(&format!("invalid character `{}` in crate name: `{}`", c, s));
64         }
65     }
66
67     if err_count > 0 {
68         sess.unwrap().abort_if_errors();
69     }
70 }