mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-03 13:37:37 +00:00

It lints against features that are inteded to be internal to the compiler and standard library. Implements MCP #596. We allow `internal_features` in the standard library and compiler as those use many features and this _is_ the standard library from the "internal to the compiler and standard library" after all. Marking some features as internal wasn't exactly the most scientific approach, I just marked some mostly obvious features. While there is a categorization in the macro, it's not very well upheld (should probably be fixed in another PR). We always pass `-Ainternal_features` in the testsuite About 400 UI tests and several other tests use internal features. Instead of throwing the attribute on each one, just always allow them. There's nothing wrong with testing internal features^^
113 lines
3.1 KiB
Rust
113 lines
3.1 KiB
Rust
//! The "main crate" of the Rust compiler. This crate contains common
|
|
//! type definitions that are used by the other crates in the rustc
|
|
//! "family". Some prominent examples (note that each of these modules
|
|
//! has their own README with further details).
|
|
//!
|
|
//! - **HIR.** The "high-level (H) intermediate representation (IR)" is
|
|
//! defined in the `hir` module.
|
|
//! - **MIR.** The "mid-level (M) intermediate representation (IR)" is
|
|
//! defined in the `mir` module. This module contains only the
|
|
//! *definition* of the MIR; the passes that transform and operate
|
|
//! on MIR are found in `rustc_const_eval` crate.
|
|
//! - **Types.** The internal representation of types used in rustc is
|
|
//! defined in the `ty` module. This includes the **type context**
|
|
//! (or `tcx`), which is the central context during most of
|
|
//! compilation, containing the interners and other things.
|
|
//!
|
|
//! For more information about how rustc works, see the [rustc dev guide].
|
|
//!
|
|
//! [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/
|
|
//!
|
|
//! # Note
|
|
//!
|
|
//! This API is completely unstable and subject to change.
|
|
|
|
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
|
|
#![feature(allocator_api)]
|
|
#![feature(array_windows)]
|
|
#![feature(assert_matches)]
|
|
#![feature(box_patterns)]
|
|
#![feature(core_intrinsics)]
|
|
#![feature(discriminant_kind)]
|
|
#![feature(exhaustive_patterns)]
|
|
#![feature(generators)]
|
|
#![feature(get_mut_unchecked)]
|
|
#![feature(if_let_guard)]
|
|
#![feature(inline_const)]
|
|
#![feature(iter_from_generator)]
|
|
#![feature(local_key_cell_methods)]
|
|
#![feature(negative_impls)]
|
|
#![feature(never_type)]
|
|
#![feature(extern_types)]
|
|
#![feature(new_uninit)]
|
|
#![feature(let_chains)]
|
|
#![feature(min_specialization)]
|
|
#![feature(trusted_len)]
|
|
#![feature(type_alias_impl_trait)]
|
|
#![feature(strict_provenance)]
|
|
#![feature(associated_type_bounds)]
|
|
#![feature(rustc_attrs)]
|
|
#![feature(control_flow_enum)]
|
|
#![feature(trait_upcasting)]
|
|
#![feature(trusted_step)]
|
|
#![feature(try_blocks)]
|
|
#![feature(try_reserve_kind)]
|
|
#![feature(nonzero_ops)]
|
|
#![feature(decl_macro)]
|
|
#![feature(extract_if)]
|
|
#![feature(intra_doc_pointers)]
|
|
#![feature(yeet_expr)]
|
|
#![feature(result_option_inspect)]
|
|
#![feature(const_option)]
|
|
#![feature(trait_alias)]
|
|
#![feature(ptr_alignment_type)]
|
|
#![feature(macro_metavar_expr)]
|
|
#![recursion_limit = "512"]
|
|
#![allow(rustc::potential_query_instability)]
|
|
#![cfg_attr(not(bootstrap), allow(internal_features))]
|
|
|
|
#[macro_use]
|
|
extern crate bitflags;
|
|
#[macro_use]
|
|
extern crate rustc_macros;
|
|
#[macro_use]
|
|
extern crate rustc_data_structures;
|
|
#[macro_use]
|
|
extern crate tracing;
|
|
#[macro_use]
|
|
extern crate smallvec;
|
|
|
|
use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage};
|
|
use rustc_fluent_macro::fluent_messages;
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
#[macro_use]
|
|
mod macros;
|
|
|
|
#[macro_use]
|
|
pub mod arena;
|
|
pub mod error;
|
|
pub mod hir;
|
|
pub mod infer;
|
|
pub mod lint;
|
|
pub mod metadata;
|
|
pub mod middle;
|
|
pub mod mir;
|
|
pub mod thir;
|
|
pub mod traits;
|
|
pub mod ty;
|
|
pub mod util;
|
|
mod values;
|
|
|
|
#[macro_use]
|
|
pub mod query;
|
|
#[macro_use]
|
|
pub mod dep_graph;
|
|
|
|
// Allows macros to refer to this crate as `::rustc_middle`
|
|
extern crate self as rustc_middle;
|
|
|
|
fluent_messages! { "../messages.ftl" }
|