Add unit test to illustrate how language server renames should work
This commit is contained in:
parent
e697ffbbf0
commit
9188f51993
1 changed files with 97 additions and 23 deletions
|
@ -4970,7 +4970,7 @@ mod tests {
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let project = Project::test(fs, cx);
|
let project = Project::test(fs.clone(), cx);
|
||||||
project.update(cx, |project, _| {
|
project.update(cx, |project, _| {
|
||||||
project.languages.add(Arc::new(rust_language));
|
project.languages.add(Arc::new(rust_language));
|
||||||
project.languages.add(Arc::new(json_language));
|
project.languages.add(Arc::new(json_language));
|
||||||
|
@ -5122,6 +5122,80 @@ mod tests {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Renames are reported only to servers matching the buffer's language.
|
||||||
|
fs.rename(
|
||||||
|
Path::new("/the-root/test2.rs"),
|
||||||
|
Path::new("/the-root/test3.rs"),
|
||||||
|
Default::default(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
fake_rust_server
|
||||||
|
.receive_notification::<lsp::notification::DidCloseTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::TextDocumentIdentifier::new(
|
||||||
|
lsp::Url::from_file_path("/the-root/test2.rs").unwrap()
|
||||||
|
),
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
fake_rust_server
|
||||||
|
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::TextDocumentItem {
|
||||||
|
uri: lsp::Url::from_file_path("/the-root/test3.rs").unwrap(),
|
||||||
|
version: 0,
|
||||||
|
text: rust_buffer2.read_with(cx, |buffer, _| buffer.text()),
|
||||||
|
language_id: Default::default()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
// When the rename changes the extension of the file, the buffer gets closed on the old
|
||||||
|
// language server and gets opened on the new one.
|
||||||
|
fs.rename(
|
||||||
|
Path::new("/the-root/test3.rs"),
|
||||||
|
Path::new("/the-root/test3.json"),
|
||||||
|
Default::default(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
fake_rust_server
|
||||||
|
.receive_notification::<lsp::notification::DidCloseTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::TextDocumentIdentifier::new(
|
||||||
|
lsp::Url::from_file_path("/the-root/test3.json").unwrap(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
fake_json_server
|
||||||
|
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::TextDocumentItem {
|
||||||
|
uri: lsp::Url::from_file_path("/the-root/test3.json").unwrap(),
|
||||||
|
version: 0,
|
||||||
|
text: rust_buffer2.read_with(cx, |buffer, _| buffer.text()),
|
||||||
|
language_id: Default::default()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
// The renamed file's version resets after changing language server.
|
||||||
|
rust_buffer2.update(cx, |buffer, cx| buffer.edit([0..0], "// ", cx));
|
||||||
|
assert_eq!(
|
||||||
|
fake_json_server
|
||||||
|
.receive_notification::<lsp::notification::DidChangeTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::VersionedTextDocumentIdentifier::new(
|
||||||
|
lsp::Url::from_file_path("/the-root/test3.json").unwrap(),
|
||||||
|
1
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Restart language servers
|
// Restart language servers
|
||||||
project.update(cx, |project, cx| {
|
project.update(cx, |project, cx| {
|
||||||
project.restart_language_servers_for_buffers(
|
project.restart_language_servers_for_buffers(
|
||||||
|
@ -5139,48 +5213,48 @@ mod tests {
|
||||||
let mut fake_rust_server = fake_rust_servers.next().await.unwrap();
|
let mut fake_rust_server = fake_rust_servers.next().await.unwrap();
|
||||||
let mut fake_json_server = fake_json_servers.next().await.unwrap();
|
let mut fake_json_server = fake_json_servers.next().await.unwrap();
|
||||||
|
|
||||||
// Ensure both rust documents are reopened in new rust language server without worrying about order
|
// Ensure rust document is reopened in new rust language server
|
||||||
|
assert_eq!(
|
||||||
|
fake_rust_server
|
||||||
|
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
||||||
|
.await
|
||||||
|
.text_document,
|
||||||
|
lsp::TextDocumentItem {
|
||||||
|
uri: lsp::Url::from_file_path("/the-root/test.rs").unwrap(),
|
||||||
|
version: 1,
|
||||||
|
text: rust_buffer.read_with(cx, |buffer, _| buffer.text()),
|
||||||
|
language_id: Default::default()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Ensure json documents are reopened in new json language server
|
||||||
assert_set_eq!(
|
assert_set_eq!(
|
||||||
[
|
[
|
||||||
fake_rust_server
|
fake_json_server
|
||||||
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
||||||
.await
|
.await
|
||||||
.text_document,
|
.text_document,
|
||||||
fake_rust_server
|
fake_json_server
|
||||||
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
||||||
.await
|
.await
|
||||||
.text_document,
|
.text_document,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
lsp::TextDocumentItem {
|
lsp::TextDocumentItem {
|
||||||
uri: lsp::Url::from_file_path("/the-root/test.rs").unwrap(),
|
uri: lsp::Url::from_file_path("/the-root/package.json").unwrap(),
|
||||||
version: 1,
|
version: 0,
|
||||||
text: rust_buffer.read_with(cx, |buffer, _| buffer.text()),
|
text: json_buffer.read_with(cx, |buffer, _| buffer.text()),
|
||||||
language_id: Default::default()
|
language_id: Default::default()
|
||||||
},
|
},
|
||||||
lsp::TextDocumentItem {
|
lsp::TextDocumentItem {
|
||||||
uri: lsp::Url::from_file_path("/the-root/test2.rs").unwrap(),
|
uri: lsp::Url::from_file_path("/the-root/test3.json").unwrap(),
|
||||||
version: 1,
|
version: 1,
|
||||||
text: rust_buffer2.read_with(cx, |buffer, _| buffer.text()),
|
text: rust_buffer2.read_with(cx, |buffer, _| buffer.text()),
|
||||||
language_id: Default::default()
|
language_id: Default::default()
|
||||||
},
|
}
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Ensure json document is reopened in new json language server
|
|
||||||
assert_eq!(
|
|
||||||
fake_json_server
|
|
||||||
.receive_notification::<lsp::notification::DidOpenTextDocument>()
|
|
||||||
.await
|
|
||||||
.text_document,
|
|
||||||
lsp::TextDocumentItem {
|
|
||||||
uri: lsp::Url::from_file_path("/the-root/package.json").unwrap(),
|
|
||||||
version: 0,
|
|
||||||
text: json_buffer.read_with(cx, |buffer, _| buffer.text()),
|
|
||||||
language_id: Default::default()
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Close notifications are reported only to servers matching the buffer's language.
|
// Close notifications are reported only to servers matching the buffer's language.
|
||||||
cx.update(|_| drop(json_buffer));
|
cx.update(|_| drop(json_buffer));
|
||||||
let close_message = lsp::DidCloseTextDocumentParams {
|
let close_message = lsp::DidCloseTextDocumentParams {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue