@@ -51,46 +51,7 @@ impl Editor {
5151 }
5252 }
5353
54− pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
55− let id = self
56− .documents()
57− .find(|doc| doc.path() == Some(&path))
58− .map(|doc| doc.id);
59−
60− let id = if let Some(id) = id {
61− id
62− } else {
63− let mut doc = Document::load(path, self.theme.scopes())?;
64−
65− // try to find a language server based on the language name
66− let language_server = doc
67− .language
68− .as_ref()
69− .and_then(|language| self.language_servers.get(language, self.executor));
70−
71− if let Some(language_server) = language_server {
72− doc.set_language_server(Some(language_server.clone()));
73−
74− let language_id = doc
75− .language()
76− .and_then(|s| s.split('.').last()) // source.rust
77− .map(ToOwned::to_owned)
78− .unwrap_or_default();
79−
80− smol::block_on(language_server.text_document_did_open(
81− doc.url().unwrap(),
82− doc.version(),
83− doc.text(),
84− language_id,
85− ))
86− .unwrap();
87− }
88−
89− let id = self.documents.insert(doc);
90− self.documents[id].id = id;
91− id
92− };
93−
54+ fn _open(&mut self, id: DocumentId, action: Action) -> Result<DocumentId, Error> {
9455 use crate::tree::Layout;
9556 use helix_core::Selection;
9657 match action {
@@ -134,6 +95,57 @@ impl Editor {
13495 Ok(id)
13596 }
13697
98+ pub fn new_file(&mut self, action: Action) -> Result<DocumentId, Error> {
99+ use helix_core::Rope;
100+ let doc = Document::new(Rope::from("\n"));
101+ let id = self.documents.insert(doc);
102+ self.documents[id].id = id;
103+ self._open(id, action)
104+ }
105+
106+ pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
107+ let id = self
108+ .documents()
109+ .find(|doc| doc.path() == Some(&path))
110+ .map(|doc| doc.id);
111+
112+ let id = if let Some(id) = id {
113+ id
114+ } else {
115+ let mut doc = Document::load(path, self.theme.scopes())?;
116+
117+ // try to find a language server based on the language name
118+ let language_server = doc
119+ .language
120+ .as_ref()
121+ .and_then(|language| self.language_servers.get(language, self.executor));
122+
123+ if let Some(language_server) = language_server {
124+ doc.set_language_server(Some(language_server.clone()));
125+
126+ let language_id = doc
127+ .language()
128+ .and_then(|s| s.split('.').last()) // source.rust
129+ .map(ToOwned::to_owned)
130+ .unwrap_or_default();
131+
132+ smol::block_on(language_server.text_document_did_open(
133+ doc.url().unwrap(),
134+ doc.version(),
135+ doc.text(),
136+ language_id,
137+ ))
138+ .unwrap();
139+ }
140+
141+ let id = self.documents.insert(doc);
142+ self.documents[id].id = id;
143+ id
144+ };
145+
146+ self._open(id, action)
147+ }
148+
137149 pub fn close(&mut self, id: ViewId) {
138150 let view = self.tree.get(self.tree.focus);
139151 // get around borrowck issues