internal: diagnostic code is mandatory

This commit is contained in:
Aleksey Kladov 2021-06-13 22:17:05 +03:00
parent b404b91da6
commit 500c909c76
3 changed files with 17 additions and 29 deletions

View File

@ -51,28 +51,26 @@ impl DiagnosticCode {
#[derive(Debug)]
pub struct Diagnostic {
// pub name: Option<String>,
pub code: DiagnosticCode,
pub message: String,
pub range: TextRange,
pub severity: Severity,
pub fixes: Option<Vec<Assist>>,
pub unused: bool,
pub code: Option<DiagnosticCode>,
pub experimental: bool,
pub fixes: Option<Vec<Assist>>,
}
impl Diagnostic {
fn new(code: &'static str, message: impl Into<String>, range: TextRange) -> Diagnostic {
let message = message.into();
let code = Some(DiagnosticCode(code));
Self {
Diagnostic {
code: DiagnosticCode(code),
message,
range,
severity: Severity::Error,
fixes: None,
unused: false,
code,
experimental: false,
fixes: None,
}
}
@ -181,15 +179,8 @@ pub(crate) fn diagnostics(
}
res.retain(|d| {
if let Some(code) = d.code {
if ctx.config.disabled.contains(code.as_str()) {
return false;
}
}
if ctx.config.disable_experimental && d.experimental {
return false;
}
true
!ctx.config.disabled.contains(d.code.as_str())
&& !(ctx.config.disable_experimental && d.experimental)
});
res

View File

@ -65,9 +65,14 @@ mod baz {}
expect![[r#"
[
Diagnostic {
code: DiagnosticCode(
"unresolved-module",
),
message: "unresolved module",
range: 0..8,
severity: Error,
unused: false,
experimental: false,
fixes: Some(
[
Assist {
@ -98,13 +103,6 @@ mod baz {}
},
],
),
unused: false,
code: Some(
DiagnosticCode(
"unresolved-module",
),
),
experimental: false,
},
]
"#]],

View File

@ -1229,14 +1229,13 @@ pub(crate) fn publish_diagnostics(
.map(|d| Diagnostic {
range: to_proto::range(&line_index, d.range),
severity: Some(to_proto::diagnostic_severity(d.severity)),
code: d.code.map(|d| d.as_str().to_owned()).map(NumberOrString::String),
code_description: d.code.and_then(|code| {
lsp_types::Url::parse(&format!(
code: Some(NumberOrString::String(d.code.as_str().to_string())),
code_description: Some(lsp_types::CodeDescription {
href: lsp_types::Url::parse(&format!(
"https://rust-analyzer.github.io/manual.html#{}",
code.as_str()
d.code.as_str()
))
.ok()
.map(|href| lsp_types::CodeDescription { href })
.unwrap(),
}),
source: Some("rust-analyzer".to_string()),
message: d.message,