mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 22:01:37 +00:00
cleanup
This commit is contained in:
parent
3fb88e95aa
commit
79df62bc74
6 changed files with 70 additions and 51 deletions
|
@ -8,19 +8,19 @@ 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
|
||||
/// diagnostic. DiagnosticSink are structured, meaning that they include rich
|
||||
/// information which can be used by IDE to create fixes. DiagnosticSink 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
|
||||
/// subsystem (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 message(&self) -> String;
|
||||
fn file(&self) -> HirFileId;
|
||||
fn syntax_node(&self) -> SyntaxNodePtr;
|
||||
fn message(&self) -> String;
|
||||
fn as_any(&self) -> &(Any + Send + 'static);
|
||||
}
|
||||
|
||||
|
@ -31,17 +31,17 @@ impl dyn Diagnostic {
|
|||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct Diagnostics {
|
||||
pub struct DiagnosticSink {
|
||||
data: Vec<Box<dyn Diagnostic>>,
|
||||
}
|
||||
|
||||
impl Diagnostics {
|
||||
impl DiagnosticSink {
|
||||
pub fn push(&mut self, d: impl Diagnostic) {
|
||||
self.data.push(Box::new(d))
|
||||
}
|
||||
|
||||
pub fn iter<'a>(&'a self) -> impl Iterator<Item = &'a dyn Diagnostic> + 'a {
|
||||
self.data.iter().map(|it| it.as_ref())
|
||||
pub fn into_diagnostics(self) -> Vec<Box<dyn Diagnostic>> {
|
||||
self.data
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,15 +52,15 @@ pub struct NoSuchField {
|
|||
}
|
||||
|
||||
impl Diagnostic for NoSuchField {
|
||||
fn message(&self) -> String {
|
||||
"no such field".to_string()
|
||||
}
|
||||
fn file(&self) -> HirFileId {
|
||||
self.file
|
||||
}
|
||||
fn syntax_node(&self) -> SyntaxNodePtr {
|
||||
self.field.into()
|
||||
}
|
||||
fn message(&self) -> String {
|
||||
"no such field".to_string()
|
||||
}
|
||||
fn as_any(&self) -> &(Any + Send + 'static) {
|
||||
self
|
||||
}
|
||||
|
@ -74,15 +74,15 @@ pub struct UnresolvedModule {
|
|||
}
|
||||
|
||||
impl Diagnostic for UnresolvedModule {
|
||||
fn message(&self) -> String {
|
||||
"unresolved module".to_string()
|
||||
}
|
||||
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