mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-04 18:40:57 +03:00
ac5f595d0a
I've been working on improving the diagnostic registration system so that it can:
* Check uniqueness of error codes *across the whole compiler*. The current method using `errorck.py` is prone to failure as it relies on simple text search - I found that it breaks when referencing an error's ident within a string (e.g. `"See also E0303"`).
* Provide JSON output of error metadata, to eventually facilitate HTML output, as well as tracking of which errors need descriptions. The current schema is:
```
<error code>: {
"description": <long description>,
"use_site": {
"filename": <filename where error is used>,
"line": <line in file where error is used>
}
}
```
[Here's][metadata-dump] a pretty-printed sample dump for `librustc`.
One thing to note is that I had to move the diagnostics arrays out of the diagnostics modules. I really wanted to be able to capture error usage information, which only becomes available as a crate is compiled. Hence all invocations of `__build_diagnostics_array!` have been moved to the ends of their respective `lib.rs` files. I tried to avoid moving the array by making a plugin that expands to nothing but couldn't invoke it in item position and gave up on hackily generating a fake item. I also briefly considered using a lint, but it seemed like it would impossible to get access to the data stored in the thread-local storage.
The next step will be to generate a web page that lists each error with its rendered description and use site. Simple mapping and filtering of the metadata files also allows us to work out which error numbers are absent, which errors are unused and which need descriptions.
[metadata-dump]: https://gist.github.com/michaelsproul/3246846ff1bea71bd049
129 lines
3.0 KiB
Rust
129 lines
3.0 KiB
Rust
// Copyright 2012-2013 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.
|
|
|
|
//! The Rust parser and macro expander.
|
|
//!
|
|
//! # Note
|
|
//!
|
|
//! This API is completely unstable and subject to change.
|
|
|
|
// Do not remove on snapshot creation. Needed for bootstrap. (Issue #22364)
|
|
#![cfg_attr(stage0, feature(custom_attribute))]
|
|
#![crate_name = "syntax"]
|
|
#![unstable(feature = "rustc_private")]
|
|
#![staged_api]
|
|
#![crate_type = "dylib"]
|
|
#![crate_type = "rlib"]
|
|
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
|
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
|
|
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
|
|
|
#![feature(associated_consts)]
|
|
#![feature(collections)]
|
|
#![feature(core)]
|
|
#![feature(libc)]
|
|
#![feature(rustc_private)]
|
|
#![feature(staged_api)]
|
|
#![feature(str_char)]
|
|
#![feature(unicode)]
|
|
|
|
extern crate arena;
|
|
extern crate fmt_macros;
|
|
extern crate serialize;
|
|
extern crate term;
|
|
extern crate libc;
|
|
#[macro_use] extern crate log;
|
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
|
|
|
extern crate serialize as rustc_serialize; // used by deriving
|
|
|
|
// A variant of 'try!' that panics on Err(FatalError). This is used as a
|
|
// crutch on the way towards a non-panic!-prone parser. It should be used
|
|
// for fatal parsing errors; eventually we plan to convert all code using
|
|
// panictry to just use normal try
|
|
macro_rules! panictry {
|
|
($e:expr) => ({
|
|
use std::result::Result::{Ok, Err};
|
|
use diagnostic::FatalError;
|
|
match $e {
|
|
Ok(e) => e,
|
|
Err(FatalError) => panic!(FatalError)
|
|
}
|
|
})
|
|
}
|
|
|
|
pub mod util {
|
|
pub mod interner;
|
|
#[cfg(test)]
|
|
pub mod parser_testing;
|
|
pub mod small_vector;
|
|
}
|
|
|
|
pub mod diagnostics {
|
|
pub mod macros;
|
|
pub mod plugin;
|
|
pub mod registry;
|
|
pub mod metadata;
|
|
}
|
|
|
|
pub mod syntax {
|
|
pub use ext;
|
|
pub use parse;
|
|
pub use ast;
|
|
}
|
|
|
|
pub mod abi;
|
|
pub mod ast;
|
|
pub mod ast_map;
|
|
pub mod ast_util;
|
|
pub mod attr;
|
|
pub mod codemap;
|
|
pub mod config;
|
|
pub mod diagnostic;
|
|
pub mod feature_gate;
|
|
pub mod fold;
|
|
pub mod owned_slice;
|
|
pub mod parse;
|
|
pub mod ptr;
|
|
pub mod show_span;
|
|
pub mod std_inject;
|
|
pub mod str;
|
|
pub mod test;
|
|
pub mod visit;
|
|
|
|
pub mod print {
|
|
pub mod pp;
|
|
pub mod pprust;
|
|
}
|
|
|
|
pub mod ext {
|
|
pub mod asm;
|
|
pub mod base;
|
|
pub mod build;
|
|
pub mod cfg;
|
|
pub mod concat;
|
|
pub mod concat_idents;
|
|
pub mod deriving;
|
|
pub mod env;
|
|
pub mod expand;
|
|
pub mod format;
|
|
pub mod log_syntax;
|
|
pub mod mtwt;
|
|
pub mod quote;
|
|
pub mod source_util;
|
|
pub mod trace_macros;
|
|
|
|
pub mod tt {
|
|
pub mod transcribe;
|
|
pub mod macro_parser;
|
|
pub mod macro_rules;
|
|
}
|
|
}
|