Skip to content

Commit

Permalink
Simplify Diagnostic structure
Browse files Browse the repository at this point in the history
It's not entirely clear what subnode ranges should mean in the
presence of macros, so let's leave them out for now. We are not using
them heavily anyway.
  • Loading branch information
matklad committed Apr 17, 2020
1 parent a8196ff commit 146f6f5
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 51 deletions.
6 changes: 1 addition & 5 deletions crates/ra_hir_def/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,21 @@ use std::any::Any;

use hir_expand::diagnostics::Diagnostic;
use ra_db::RelativePathBuf;
use ra_syntax::{ast, AstPtr, SyntaxNodePtr, TextRange};
use ra_syntax::{ast, AstPtr, SyntaxNodePtr};

use hir_expand::{HirFileId, InFile};

#[derive(Debug)]
pub struct UnresolvedModule {
pub file: HirFileId,
pub decl: AstPtr<ast::Module>,
pub highlight_range: TextRange,
pub candidate: RelativePathBuf,
}

impl Diagnostic for UnresolvedModule {
fn message(&self) -> String {
"unresolved module".to_string()
}
fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}
fn source(&self) -> InFile<SyntaxNodePtr> {
InFile::new(self.file, self.decl.clone().into())
}
Expand Down
3 changes: 1 addition & 2 deletions crates/ra_hir_def/src/nameres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ pub enum ModuleSource {
mod diagnostics {
use hir_expand::diagnostics::DiagnosticSink;
use ra_db::RelativePathBuf;
use ra_syntax::{ast, AstNode, AstPtr};
use ra_syntax::{ast, AstPtr};

use crate::{db::DefDatabase, diagnostics::UnresolvedModule, nameres::LocalModuleId, AstId};

Expand Down Expand Up @@ -326,7 +326,6 @@ mod diagnostics {
sink.push(UnresolvedModule {
file: declaration.file_id,
decl: AstPtr::new(&decl),
highlight_range: decl.syntax().text_range(),
candidate: candidate.clone(),
})
}
Expand Down
3 changes: 1 addition & 2 deletions crates/ra_hir_expand/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

use std::{any::Any, fmt};

use ra_syntax::{SyntaxNode, SyntaxNodePtr, TextRange};
use ra_syntax::{SyntaxNode, SyntaxNodePtr};

use crate::{db::AstDatabase, InFile};

pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static {
fn message(&self) -> String;
fn highlight_range(&self) -> InFile<TextRange>;
fn source(&self) -> InFile<SyntaxNodePtr>;
fn as_any(&self) -> &(dyn Any + Send + 'static);
}
Expand Down
24 changes: 1 addition & 23 deletions crates/ra_hir_ty/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use std::any::Any;

use hir_expand::{db::AstDatabase, name::Name, HirFileId, InFile};
use ra_syntax::{ast, AstNode, AstPtr, SyntaxNodePtr, TextRange};
use ra_syntax::{ast, AstNode, AstPtr, SyntaxNodePtr};
use stdx::format_to;

pub use hir_def::{diagnostics::UnresolvedModule, expr::MatchArm};
Expand All @@ -13,18 +13,13 @@ pub use hir_expand::diagnostics::{AstDiagnostic, Diagnostic, DiagnosticSink};
pub struct NoSuchField {
pub file: HirFileId,
pub field: AstPtr<ast::RecordField>,
pub highlight_range: TextRange,
}

impl Diagnostic for NoSuchField {
fn message(&self) -> String {
"no such field".to_string()
}

fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}

fn source(&self) -> InFile<SyntaxNodePtr> {
InFile::new(self.file, self.field.clone().into())
}
Expand All @@ -38,7 +33,6 @@ impl Diagnostic for NoSuchField {
pub struct MissingFields {
pub file: HirFileId,
pub field_list: AstPtr<ast::RecordFieldList>,
pub highlight_range: TextRange,
pub missed_fields: Vec<Name>,
}

Expand All @@ -50,10 +44,6 @@ impl Diagnostic for MissingFields {
}
buf
}
fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}

fn source(&self) -> InFile<SyntaxNodePtr> {
InFile { file_id: self.file, value: self.field_list.clone().into() }
}
Expand All @@ -76,7 +66,6 @@ impl AstDiagnostic for MissingFields {
pub struct MissingPatFields {
pub file: HirFileId,
pub field_list: AstPtr<ast::RecordFieldPatList>,
pub highlight_range: TextRange,
pub missed_fields: Vec<Name>,
}

Expand All @@ -88,9 +77,6 @@ impl Diagnostic for MissingPatFields {
}
buf
}
fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}
fn source(&self) -> InFile<SyntaxNodePtr> {
InFile { file_id: self.file, value: self.field_list.clone().into() }
}
Expand All @@ -104,16 +90,12 @@ pub struct MissingMatchArms {
pub file: HirFileId,
pub match_expr: AstPtr<ast::Expr>,
pub arms: AstPtr<ast::MatchArmList>,
pub highlight_range: TextRange,
}

impl Diagnostic for MissingMatchArms {
fn message(&self) -> String {
String::from("Missing match arm")
}
fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}
fn source(&self) -> InFile<SyntaxNodePtr> {
InFile { file_id: self.file, value: self.match_expr.clone().into() }
}
Expand All @@ -126,16 +108,12 @@ impl Diagnostic for MissingMatchArms {
pub struct MissingOkInTailExpr {
pub file: HirFileId,
pub expr: AstPtr<ast::Expr>,
pub highlight_range: TextRange,
}

impl Diagnostic for MissingOkInTailExpr {
fn message(&self) -> String {
"wrap return expression in Ok".to_string()
}
fn highlight_range(&self) -> InFile<TextRange> {
InFile::new(self.file, self.highlight_range)
}
fn source(&self) -> InFile<SyntaxNodePtr> {
InFile { file_id: self.file, value: self.expr.clone().into() }
}
Expand Down
14 changes: 3 additions & 11 deletions crates/ra_hir_ty/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::sync::Arc;

use hir_def::{path::path, resolver::HasResolver, AdtId, FunctionId};
use hir_expand::diagnostics::DiagnosticSink;
use ra_syntax::{ast, AstNode, AstPtr};
use ra_syntax::{ast, AstPtr};
use rustc_hash::FxHashSet;

use crate::{
Expand Down Expand Up @@ -100,7 +100,6 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
self.sink.push(MissingFields {
file: source_ptr.file_id,
field_list: AstPtr::new(&field_list),
highlight_range: field_list.syntax().text_range(),
missed_fields,
})
}
Expand Down Expand Up @@ -131,7 +130,6 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
self.sink.push(MissingPatFields {
file: source_ptr.file_id,
field_list: AstPtr::new(&field_list),
highlight_range: field_list.syntax().text_range(),
missed_fields,
})
}
Expand Down Expand Up @@ -215,7 +213,6 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
file: source_ptr.file_id,
match_expr: AstPtr::new(&match_expr),
arms: AstPtr::new(&arms),
highlight_range: match_expr.syntax().text_range(),
})
}
}
Expand Down Expand Up @@ -247,13 +244,8 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
let (_, source_map) = db.body_with_source_map(self.func.into());

if let Ok(source_ptr) = source_map.expr_syntax(id) {
let root = source_ptr.file_syntax(db.upcast());
let highlight_range = source_ptr.value.to_node(&root).syntax().text_range();
self.sink.push(MissingOkInTailExpr {
file: source_ptr.file_id,
expr: source_ptr.value,
highlight_range,
});
self.sink
.push(MissingOkInTailExpr { file: source_ptr.file_id, expr: source_ptr.value });
}
}
}
Expand Down
9 changes: 1 addition & 8 deletions crates/ra_hir_ty/src/infer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,6 @@ impl Expectation {
mod diagnostics {
use hir_def::{expr::ExprId, src::HasSource, FunctionId, Lookup};
use hir_expand::diagnostics::DiagnosticSink;
use ra_syntax::AstNode;

use crate::{db::HirDatabase, diagnostics::NoSuchField};

Expand All @@ -686,13 +685,7 @@ mod diagnostics {
let source = owner.lookup(db.upcast()).source(db.upcast());
let (_, source_map) = db.body_with_source_map(owner.into());
let field = source_map.field_syntax(*expr, *field);
let root = field.file_syntax(db.upcast());
let highlight_range = field.value.to_node(&root).syntax().text_range();
sink.push(NoSuchField {
file: source.file_id,
field: field.value,
highlight_range,
})
sink.push(NoSuchField { file: source.file_id, field: field.value })
}
}
}
Expand Down

0 comments on commit 146f6f5

Please sign in to comment.