on master help sign in
lsp: Wire up didClose notification on editor.close.
commit54a7e893b704b268f7d9d8b4692d3722db6a98df authorBlaž Hrastnik <blaz@mxxn.io> dateTue 16 Mar 2021, 16:20 (6 years ago) parenteca2a73
2 files changed+17−3
helix-term/src/commands.rs+1−1 helix-view/src/editor.rs+16−2
helix-term/src/commands.rs+1−1
@@ -691,7 +691,7 @@ pub fn command_mode(cx: &mut Context) {
691691
692692 match *parts.as_slice() {
693693 ["q"] | ["quit"] => {
694− editor.tree.remove(editor.view().id);
694+ editor.close(editor.view().id, executor);
695695 // editor.should_close = true,
696696 }
697697 ["o", path] | ["open", path] => {
helix-view/src/editor.rs+16−2
@@ -48,7 +48,7 @@ impl Editor {
4848
4949 let language_id = doc
5050 .language()
51− .and_then(|s| s.split(".").last()) // source.rust
51+ .and_then(|s| s.split('.').last()) // source.rust
5252 .map(ToOwned::to_owned)
5353 .unwrap_or_default();
5454
@@ -66,7 +66,21 @@ impl Editor {
6666 Ok(())
6767 }
6868
69− pub fn close(&mut self, id: Key) {
69+ pub fn close(&mut self, id: Key, executor: &smol::Executor) {
70+ let view = self.tree.get(self.tree.focus);
71+ // get around borrowck issues
72+ let language_servers = &mut self.language_servers;
73+
74+ let doc = &view.doc;
75+
76+ let language_server = doc
77+ .language
78+ .as_ref()
79+ .and_then(|language| language_servers.get(language, &executor));
80+
81+ if let Some(language_server) = language_server {
82+ smol::block_on(language_server.text_document_did_close(doc.identifier())).unwrap();
83+ }
7084 self.tree.remove(id)
7185 }
7286