rustc_session: implement latent TODO
This commit is contained in:
parent
45bad64ab4
commit
55393b6eca
@ -36,7 +36,7 @@ use rustc_middle::ty::{self, print::Printer, GenericArg, RegisteredTools, Ty, Ty
|
|||||||
use rustc_session::config::ExpectedValues;
|
use rustc_session::config::ExpectedValues;
|
||||||
use rustc_session::lint::{BuiltinLintDiagnostics, LintExpectationId};
|
use rustc_session::lint::{BuiltinLintDiagnostics, LintExpectationId};
|
||||||
use rustc_session::lint::{FutureIncompatibleInfo, Level, Lint, LintBuffer, LintId};
|
use rustc_session::lint::{FutureIncompatibleInfo, Level, Lint, LintBuffer, LintId};
|
||||||
use rustc_session::Session;
|
use rustc_session::{LintStoreMarker, Session};
|
||||||
use rustc_span::edit_distance::find_best_match_for_name;
|
use rustc_span::edit_distance::find_best_match_for_name;
|
||||||
use rustc_span::symbol::{sym, Ident, Symbol};
|
use rustc_span::symbol::{sym, Ident, Symbol};
|
||||||
use rustc_span::{BytePos, Span};
|
use rustc_span::{BytePos, Span};
|
||||||
@ -77,6 +77,8 @@ pub struct LintStore {
|
|||||||
lint_groups: FxHashMap<&'static str, LintGroup>,
|
lint_groups: FxHashMap<&'static str, LintGroup>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl LintStoreMarker for LintStore {}
|
||||||
|
|
||||||
/// The target of the `by_name` map, which accounts for renaming/deprecation.
|
/// The target of the `by_name` map, which accounts for renaming/deprecation.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum TargetLint {
|
enum TargetLint {
|
||||||
|
@ -30,8 +30,9 @@ use rustc_span::Span;
|
|||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
/// Extract the `LintStore` from the query context.
|
/// Extract the [`LintStore`] from [`Session`].
|
||||||
/// This function exists because we've erased `LintStore` as `dyn Any` in the session.
|
///
|
||||||
|
/// This function exists because [`Session::lint_store`] is type-erased.
|
||||||
pub fn unerased_lint_store(sess: &Session) -> &LintStore {
|
pub fn unerased_lint_store(sess: &Session) -> &LintStore {
|
||||||
let store: &Lrc<_> = sess.lint_store.as_ref().unwrap();
|
let store: &Lrc<_> = sess.lint_store.as_ref().unwrap();
|
||||||
let store: &dyn Any = &**store;
|
let store: &dyn Any = &**store;
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#![feature(min_specialization)]
|
#![feature(min_specialization)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(rustc_attrs)]
|
#![feature(rustc_attrs)]
|
||||||
|
#![cfg_attr(bootstrap, feature(trait_upcasting))]
|
||||||
#![recursion_limit = "256"]
|
#![recursion_limit = "256"]
|
||||||
#![deny(rustc::untranslatable_diagnostic)]
|
#![deny(rustc::untranslatable_diagnostic)]
|
||||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||||
|
@ -139,6 +139,8 @@ pub struct CompilerIO {
|
|||||||
pub temps_dir: Option<PathBuf>,
|
pub temps_dir: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait LintStoreMarker: Any + DynSync + DynSend {}
|
||||||
|
|
||||||
/// Represents the data associated with a compilation
|
/// Represents the data associated with a compilation
|
||||||
/// session for a single crate.
|
/// session for a single crate.
|
||||||
pub struct Session {
|
pub struct Session {
|
||||||
@ -171,10 +173,7 @@ pub struct Session {
|
|||||||
pub jobserver: Client,
|
pub jobserver: Client,
|
||||||
|
|
||||||
/// This only ever stores a `LintStore` but we don't want a dependency on that type here.
|
/// This only ever stores a `LintStore` but we don't want a dependency on that type here.
|
||||||
///
|
pub lint_store: Option<Lrc<dyn LintStoreMarker>>,
|
||||||
/// FIXME(Centril): consider `dyn LintStoreMarker` once
|
|
||||||
/// we can upcast to `Any` for some additional type safety.
|
|
||||||
pub lint_store: Option<Lrc<dyn Any + DynSync + DynSend>>,
|
|
||||||
|
|
||||||
/// Should be set if any lints are registered in `lint_store`.
|
/// Should be set if any lints are registered in `lint_store`.
|
||||||
pub registered_lints: bool,
|
pub registered_lints: bool,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user