fix: defer diagnostic display until leaving Insert mode
This commit is contained in:
+58
-4
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user