mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 05:45:12 +00:00
switch modules to new diagnostics
This commit is contained in:
parent
fcca35969d
commit
3fb88e95aa
8 changed files with 156 additions and 135 deletions
|
@ -3,7 +3,20 @@ use std::{fmt, any::Any};
|
|||
use ra_syntax::{SyntaxNodePtr, AstPtr, ast};
|
||||
|
||||
use crate::HirFileId;
|
||||
use relative_path::RelativePathBuf;
|
||||
|
||||
/// Diagnostic defines hir API for errors and warnings.
|
||||
///
|
||||
/// It is used as a `dyn` object, which you can downcast to a concrete
|
||||
/// diagnostic. Diagnostics are structured, meaning that they include rich
|
||||
/// information which can be used by IDE to create fixes. Diagnostics are
|
||||
/// expressed in terms of macro-expanded syntax tree nodes (so, it's a bad idea
|
||||
/// to diagnostic in a salsa value).
|
||||
///
|
||||
/// Internally, various subsystems of hir produce diagnostics specific to a
|
||||
/// subsytem (typically, an `enum`), which are safe to store in salsa but do not
|
||||
/// include source locations. Such internal diagnostic are transformed into an
|
||||
/// instance of `Diagnostic` on demand.
|
||||
pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static {
|
||||
fn file(&self) -> HirFileId;
|
||||
fn syntax_node(&self) -> SyntaxNodePtr;
|
||||
|
@ -34,14 +47,8 @@ impl Diagnostics {
|
|||
|
||||
#[derive(Debug)]
|
||||
pub struct NoSuchField {
|
||||
pub(crate) file: HirFileId,
|
||||
pub(crate) field: AstPtr<ast::NamedField>,
|
||||
}
|
||||
|
||||
impl NoSuchField {
|
||||
pub fn field(&self) -> AstPtr<ast::NamedField> {
|
||||
self.field
|
||||
}
|
||||
pub file: HirFileId,
|
||||
pub field: AstPtr<ast::NamedField>,
|
||||
}
|
||||
|
||||
impl Diagnostic for NoSuchField {
|
||||
|
@ -58,3 +65,25 @@ impl Diagnostic for NoSuchField {
|
|||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct UnresolvedModule {
|
||||
pub file: HirFileId,
|
||||
pub decl: AstPtr<ast::Module>,
|
||||
pub candidate: RelativePathBuf,
|
||||
}
|
||||
|
||||
impl Diagnostic for UnresolvedModule {
|
||||
fn file(&self) -> HirFileId {
|
||||
self.file
|
||||
}
|
||||
fn syntax_node(&self) -> SyntaxNodePtr {
|
||||
self.decl.into()
|
||||
}
|
||||
fn message(&self) -> String {
|
||||
"unresolved module".to_string()
|
||||
}
|
||||
fn as_any(&self) -> &(Any + Send + 'static) {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue