Build all on initialize
This commit is contained in:
@@ -134,8 +134,14 @@ impl LanguageServer for Backend {
|
|||||||
|
|
||||||
let analyzer = self.rust_analyzer.clone();
|
let analyzer = self.rust_analyzer.clone();
|
||||||
|
|
||||||
|
let documents = self.documents.clone();
|
||||||
|
|
||||||
|
let mapping = self.mapping.clone();
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
if let Some(root) = &*workspace_folder.lock().await {
|
if let Some(root) = &*workspace_folder.lock().await {
|
||||||
|
let src_root = root.join("src");
|
||||||
|
|
||||||
transpiler::build(root);
|
transpiler::build(root);
|
||||||
|
|
||||||
analyzer
|
analyzer
|
||||||
@@ -145,6 +151,30 @@ impl LanguageServer for Backend {
|
|||||||
.await
|
.await
|
||||||
.expect("Failed to initialize rust analyzer");
|
.expect("Failed to initialize rust analyzer");
|
||||||
|
|
||||||
|
// ---- LOAD ALL .MIST FILES ----
|
||||||
|
let mut files = Vec::new();
|
||||||
|
collect_mist_files(&src_root, &mut files);
|
||||||
|
|
||||||
|
for file in files {
|
||||||
|
if let Ok(text) = std::fs::read_to_string(&file) {
|
||||||
|
if let Ok(transpiled) = transpiler::transpile_text(&text) {
|
||||||
|
let rust_path = from_mist_to_rust(file.clone());
|
||||||
|
|
||||||
|
// store document
|
||||||
|
documents
|
||||||
|
.lock()
|
||||||
|
.await
|
||||||
|
.insert(file.clone(), Rope::from_str(&text));
|
||||||
|
|
||||||
|
// store mapping
|
||||||
|
mapping
|
||||||
|
.lock()
|
||||||
|
.await
|
||||||
|
.insert(rust_path, rev_mapper::get_mapping(&transpiled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
eprintln!("Ready to use");
|
eprintln!("Ready to use");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -227,7 +257,7 @@ impl LanguageServer for Backend {
|
|||||||
},
|
},
|
||||||
end: Position {
|
end: Position {
|
||||||
line,
|
line,
|
||||||
character: column + 1,
|
character: u32::MAX,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
severity: Some(severity),
|
severity: Some(severity),
|
||||||
@@ -624,3 +654,19 @@ fn simplify_item(mut item: CompletionItem) -> CompletionItem {
|
|||||||
|
|
||||||
item
|
item
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn collect_mist_files(dir: &PathBuf, out: &mut Vec<PathBuf>) {
|
||||||
|
let Ok(entries) = std::fs::read_dir(dir) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
for entry in entries.flatten() {
|
||||||
|
let path = entry.path();
|
||||||
|
|
||||||
|
if path.is_dir() {
|
||||||
|
collect_mist_files(&path, out);
|
||||||
|
} else if path.extension().and_then(|e| e.to_str()) == Some("mist") {
|
||||||
|
out.push(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user