mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-01 04:18:20 +00:00
Split out ExpressionStore from Body
This commit is contained in:
parent
db6d23c0e5
commit
55d1d5dd8b
28 changed files with 530 additions and 444 deletions
|
|
@ -411,7 +411,7 @@ impl AnyDiagnostic {
|
|||
pub(crate) fn body_validation_diagnostic(
|
||||
db: &dyn HirDatabase,
|
||||
diagnostic: BodyValidationDiagnostic,
|
||||
source_map: &hir_def::body::BodySourceMap,
|
||||
source_map: &hir_def::expr_store::BodySourceMap,
|
||||
) -> Option<AnyDiagnostic> {
|
||||
match diagnostic {
|
||||
BodyValidationDiagnostic::RecordMissingFields { record, variant, missed_fields } => {
|
||||
|
|
@ -547,7 +547,7 @@ impl AnyDiagnostic {
|
|||
def: DefWithBodyId,
|
||||
d: &InferenceDiagnostic,
|
||||
outer_types_source_map: &TypesSourceMap,
|
||||
source_map: &hir_def::body::BodySourceMap,
|
||||
source_map: &hir_def::expr_store::BodySourceMap,
|
||||
) -> Option<AnyDiagnostic> {
|
||||
let expr_syntax = |expr| {
|
||||
source_map.expr_syntax(expr).inspect_err(|_| stdx::never!("synthetic syntax")).ok()
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@ use arrayvec::ArrayVec;
|
|||
use base_db::{CrateDisplayName, CrateId, CrateOrigin};
|
||||
use either::Either;
|
||||
use hir_def::{
|
||||
body::BodyDiagnostic,
|
||||
data::{adt::VariantData, TraitFlags},
|
||||
expr_store::ExpressionStoreDiagnostics,
|
||||
generics::{LifetimeParamData, TypeOrConstParamData, TypeParamProvenance},
|
||||
hir::{BindingAnnotation, BindingId, Expr, ExprId, ExprOrPatId, LabelId, Pat},
|
||||
item_tree::{AttrOwner, FieldParent, ItemTreeFieldId, ItemTreeNode},
|
||||
|
|
@ -1892,10 +1892,10 @@ impl DefWithBody {
|
|||
|
||||
for diag in source_map.diagnostics() {
|
||||
acc.push(match diag {
|
||||
BodyDiagnostic::InactiveCode { node, cfg, opts } => {
|
||||
ExpressionStoreDiagnostics::InactiveCode { node, cfg, opts } => {
|
||||
InactiveCode { node: *node, cfg: cfg.clone(), opts: opts.clone() }.into()
|
||||
}
|
||||
BodyDiagnostic::MacroError { node, err } => {
|
||||
ExpressionStoreDiagnostics::MacroError { node, err } => {
|
||||
let RenderedExpandError { message, error, kind } =
|
||||
err.render_to_string(db.upcast());
|
||||
|
||||
|
|
@ -1919,20 +1919,22 @@ impl DefWithBody {
|
|||
}
|
||||
.into()
|
||||
}
|
||||
BodyDiagnostic::UnresolvedMacroCall { node, path } => UnresolvedMacroCall {
|
||||
macro_call: (*node).map(|ast_ptr| ast_ptr.into()),
|
||||
precise_location: None,
|
||||
path: path.clone(),
|
||||
is_bang: true,
|
||||
ExpressionStoreDiagnostics::UnresolvedMacroCall { node, path } => {
|
||||
UnresolvedMacroCall {
|
||||
macro_call: (*node).map(|ast_ptr| ast_ptr.into()),
|
||||
precise_location: None,
|
||||
path: path.clone(),
|
||||
is_bang: true,
|
||||
}
|
||||
.into()
|
||||
}
|
||||
.into(),
|
||||
BodyDiagnostic::AwaitOutsideOfAsync { node, location } => {
|
||||
ExpressionStoreDiagnostics::AwaitOutsideOfAsync { node, location } => {
|
||||
AwaitOutsideOfAsync { node: *node, location: location.clone() }.into()
|
||||
}
|
||||
BodyDiagnostic::UnreachableLabel { node, name } => {
|
||||
ExpressionStoreDiagnostics::UnreachableLabel { node, name } => {
|
||||
UnreachableLabel { node: *node, name: name.clone() }.into()
|
||||
}
|
||||
BodyDiagnostic::UndeclaredLabel { node, name } => {
|
||||
ExpressionStoreDiagnostics::UndeclaredLabel { node, name } => {
|
||||
UndeclaredLabel { node: *node, name: name.clone() }.into()
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use crate::{
|
|||
};
|
||||
use either::Either;
|
||||
use hir_def::{
|
||||
body::{
|
||||
expr_store::{
|
||||
scope::{ExprScopes, ScopeId},
|
||||
Body, BodySourceMap, HygieneId,
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue