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