fix: defer diagnostic display until leaving Insert mode

This commit is contained in:
2026-10-10 22:34:38 +02:00
parent 3f05287d79
commit f6da7922a1
5 changed files with 67 additions and 7 deletions
+58 -4
View File
@@ -2098,6 +2098,47 @@ mod tests {
ratatui::layout::Position::new(4, 0),
);
editor.handle(Input::Char('i'));
terminal
.draw(|frame| viewports.draw(frame, &editor))
.unwrap();
assert_eq!(editor.diagnostics().count(), 0);
assert!(!screen_text(&terminal).contains("E:1"));
assert!(!screen_text(&terminal).contains("E: point"));
assert_ne!(terminal.backend().buffer()[(0, 0)].fg, Color::Red);
assert!(
!terminal.backend().buffer()[(4, 0)]
.modifier
.contains(Modifier::UNDERLINED)
);
for message in ["intermediate", "latest"] {
editor
.replace_diagnostics(
"fixture",
editor.buffer_id(),
editor.text_revision(),
vec![annotation(
(0, 0),
(0, 3),
DiagnosticSeverity::Error,
message,
)],
)
.unwrap();
}
editor.handle(Input::Escape);
terminal
.draw(|frame| viewports.draw(frame, &editor))
.unwrap();
assert!(screen_text(&terminal).contains("E:1"));
assert!(screen_text(&terminal).contains("E: latest"));
assert!(!screen_text(&terminal).contains("intermediate"));
assert_eq!(terminal.backend().buffer()[(0, 0)].fg, Color::Red);
assert!(
terminal.backend().buffer()[(3, 0)]
.modifier
.contains(Modifier::UNDERLINED)
);
editor.handle(Input::Char('i'));
editor.handle(Input::Char('!'));
assert_eq!(editor.mode(), Mode::Insert);
@@ -2111,6 +2152,8 @@ mod tests {
.modifier
.contains(Modifier::UNDERLINED)
);
editor.handle(Input::Escape);
assert_eq!(editor.diagnostics().count(), 0);
}
#[test]
@@ -2153,7 +2196,8 @@ Thread.new do
end
end
Vamp.publish([{type: "diagnostics", buffer_id: document.fetch("id"),
revision: document.fetch("revision"), items: items}])
revision: document.fetch("revision"), items: items},
{type: "message", text: "diagnostic revision #{document.fetch('revision')}"}])
else
target = documents.values.find { |document| document["path"] == Vamp.options.fetch("target") }
raise "Target document is not open" unless target
@@ -2220,16 +2264,26 @@ end
assert_eq!(session.editor().mode(), Mode::Insert);
assert_eq!(session.editor().lines(), &["broken TARGET!"]);
poll_until(&mut session, &mut terminal, &mut viewports, |editor| {
editor.diagnostics().count() == 1
editor.message() == "diagnostic revision 1"
});
assert_eq!(session.editor().diagnostics().count(), 0);
assert!(!screen_text(&terminal).contains("E:1"));
assert!(
!terminal.backend().buffer()[(2, 0)]
.modifier
.contains(Modifier::UNDERLINED)
);
assert_eq!(session.editor().mode(), Mode::Insert);
session.handle(Input::Escape);
terminal
.draw(|frame| viewports.draw(frame, session.editor()))
.unwrap();
assert!(screen_text(&terminal).contains("E:1"));
assert!(
terminal.backend().buffer()[(2, 0)]
.modifier
.contains(Modifier::UNDERLINED)
);
assert_eq!(session.editor().mode(), Mode::Insert);
session.handle(Input::Escape);
session.handle(Input::Char('u'));
assert_eq!(session.editor().lines(), &["broken TARGET"]);
assert_eq!(session.editor().diagnostics().count(), 0);