]> git.lizzy.rs Git - rust.git/blob - src/librustc_metadata/lib.rs
Simplify SaveHandler trait
[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_diagnostic_macros)]
12 #![feature(rustc_private)]
13 #![feature(slice_patterns)]
14 #![feature(specialization)]
15
16 #![recursion_limit="256"]
17
18 #![deny(rust_2018_idioms)]
19 #![deny(unused_lifetimes)]
20
21 extern crate libc;
22 extern crate proc_macro;
23
24 #[macro_use]
25 extern crate rustc;
26 #[macro_use]
27 extern crate rustc_data_structures;
28
29 mod error_codes;
30
31 mod index;
32 mod encoder;
33 mod decoder;
34 mod cstore_impl;
35 mod schema;
36 mod native_libs;
37 mod link_args;
38 mod foreign_modules;
39
40 pub mod creader;
41 pub mod cstore;
42 pub mod dynamic_lib;
43 pub mod locator;
44
45 pub fn validate_crate_name(
46     sess: Option<&rustc::session::Session>,
47     s: &str,
48     sp: Option<syntax_pos::Span>
49 ) {
50     let mut err_count = 0;
51     {
52         let mut say = |s: &str| {
53             match (sp, sess) {
54                 (_, None) => bug!("{}", s),
55                 (Some(sp), Some(sess)) => sess.span_err(sp, s),
56                 (None, Some(sess)) => sess.err(s),
57             }
58             err_count += 1;
59         };
60         if s.is_empty() {
61             say("crate name must not be empty");
62         }
63         for c in s.chars() {
64             if c.is_alphanumeric() { continue }
65             if c == '_'  { continue }
66             say(&format!("invalid character `{}` in crate name: `{}`", c, s));
67         }
68     }
69
70     if err_count > 0 {
71         sess.unwrap().abort_if_errors();
72     }
73 }
74
75 __build_diagnostic_array! { librustc_metadata, DIAGNOSTICS }