From e261f3c50d0e06860ffbeee0178381fa789dfd96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= <blaz@mxxn.io>
Date: Thu, 18 Mar 2021 14:40:22 +0900
Subject: [PATCH] Expose doc.language_server as an accessor.

---
 helix-term/src/commands.rs | 14 +++++++-------
 helix-view/src/document.rs |  8 ++++++--
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index f3847eda..9179a5ce 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -888,7 +888,7 @@ fn goto(cx: &mut Context, locations: Vec<lsp::Location>) {
 
 pub fn goto_definition(cx: &mut Context) {
     let doc = cx.doc();
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
@@ -904,7 +904,7 @@ pub fn goto_definition(cx: &mut Context) {
 
 pub fn goto_type_definition(cx: &mut Context) {
     let doc = cx.doc();
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
@@ -920,7 +920,7 @@ pub fn goto_type_definition(cx: &mut Context) {
 
 pub fn goto_implementation(cx: &mut Context) {
     let doc = cx.doc();
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
@@ -936,7 +936,7 @@ pub fn goto_implementation(cx: &mut Context) {
 
 pub fn goto_reference(cx: &mut Context) {
     let doc = cx.doc();
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
@@ -1179,7 +1179,7 @@ pub fn format_selections(cx: &mut Context) {
         .collect();
 
     for range in ranges {
-        let language_server = match doc.language_server.as_ref() {
+        let language_server = match doc.language_server() {
             Some(language_server) => language_server,
             None => return,
         };
@@ -1279,7 +1279,7 @@ pub fn save(cx: &mut Context) {
 pub fn completion(cx: &mut Context) {
     let doc = cx.doc();
 
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
@@ -1378,7 +1378,7 @@ pub fn hover(cx: &mut Context) {
 
     let doc = cx.doc();
 
-    let language_server = match doc.language_server.as_ref() {
+    let language_server = match doc.language_server() {
         Some(language_server) => language_server,
         None => return,
     };
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index ffbe8930..36bca5fe 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -40,7 +40,7 @@ pub struct Document {
     version: i32, // should be usize?
 
     pub diagnostics: Vec<Diagnostic>,
-    pub language_server: Option<Arc<helix_lsp::Client>>,
+    language_server: Option<Arc<helix_lsp::Client>>,
 }
 
 /// Like std::mem::replace() except it allows the replacement value to be mapped from the
@@ -172,7 +172,7 @@ impl Document {
         self.state.selection = selection;
     }
 
-    pub fn _apply(&mut self, transaction: &Transaction) -> bool {
+    fn _apply(&mut self, transaction: &Transaction) -> bool {
         let old_doc = self.text().clone();
 
         let success = transaction.apply(&mut self.state);
@@ -288,6 +288,10 @@ impl Document {
         self.version
     }
 
+    pub fn language_server(&self) -> Option<&helix_lsp::Client> {
+        self.language_server.as_deref()
+    }
+
     #[inline]
     pub fn path(&self) -> Option<&PathBuf> {
         self.path.as_ref()