fix: retain semantic colors across editable diff updates
This commit is contained in:
@@ -2357,6 +2357,50 @@ fn lsp_semantics_coalesce_changed_text_and_refresh_without_decoding_stale_payloa
|
||||
&& frame.get("result").is_some()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lsp_semantic_colors_survive_edits_and_polling_until_a_current_reply() {
|
||||
let fixture = Fixture::new();
|
||||
let mut session = fixture.open("controlled-semantic");
|
||||
until(&mut session, &fixture, |_| {
|
||||
fixture.method_count("textDocument/semanticTokens/full") == 1
|
||||
});
|
||||
semantic_reply(
|
||||
&mut session,
|
||||
&fixture,
|
||||
1,
|
||||
json!({"result": {"data": [0, 0, 1, 4, 0]}}),
|
||||
);
|
||||
let original = session.editor().semantic_tokens().to_vec();
|
||||
assert_eq!(original[0].kind, SemanticTokenKind::Type);
|
||||
session.handle(Input::Char('A'));
|
||||
session.handle(Input::Char('!'));
|
||||
until(&mut session, &fixture, |_| {
|
||||
fixture.method_count("textDocument/semanticTokens/full") == 2
|
||||
});
|
||||
assert_eq!(session.editor().semantic_tokens(), original);
|
||||
session.handle(Input::Char('?'));
|
||||
semantic_reply(
|
||||
&mut session,
|
||||
&fixture,
|
||||
2,
|
||||
json!({"result": {"data": ["stale malformed data"]}}),
|
||||
);
|
||||
until(&mut session, &fixture, |_| {
|
||||
fixture.method_count("textDocument/semanticTokens/full") == 3
|
||||
});
|
||||
assert_eq!(session.editor().semantic_tokens(), original);
|
||||
semantic_reply(
|
||||
&mut session,
|
||||
&fixture,
|
||||
3,
|
||||
json!({"result": {"data": [0, 1, 2, 2, 0]}}),
|
||||
);
|
||||
let tokens = session.editor().semantic_tokens();
|
||||
assert_eq!(tokens[0].kind, SemanticTokenKind::Function);
|
||||
assert_eq!(tokens[0].start, TextPosition { row: 0, column: 1 });
|
||||
assert_eq!(tokens[0].end, TextPosition { row: 0, column: 2 });
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lsp_semantics_discard_queued_same_revision_rename_and_close_outputs() {
|
||||
let fixture = Fixture::new();
|
||||
|
||||
Reference in New Issue
Block a user