readme_sync/
codemap_files.rs1use std::collections::HashMap;
2use std::sync::Arc;
3
4use crate::{File, FileDocs};
5
6#[derive(Debug, Default)]
8pub struct CodemapFiles {
9 codemap: codemap::CodeMap,
10 files: HashMap<Arc<File>, Arc<codemap::File>>,
11 file_docs: HashMap<Arc<FileDocs>, Arc<codemap::File>>,
12}
13
14impl CodemapFiles {
15 pub fn new() -> Self {
17 Self::default()
18 }
19
20 pub fn codemap(&self) -> &codemap::CodeMap {
22 &self.codemap
23 }
24
25 pub fn files(&self) -> &HashMap<Arc<File>, Arc<codemap::File>> {
27 &self.files
28 }
29
30 pub fn file_docs(&self) -> &HashMap<Arc<FileDocs>, Arc<codemap::File>> {
32 &self.file_docs
33 }
34
35 pub fn get_or_insert_codemap_file(&mut self, file: &Arc<File>) -> &Arc<codemap::File> {
37 use std::string::ToString;
38
39 let codemap = &mut self.codemap;
40 self.files.entry(Arc::clone(file)).or_insert_with(|| {
41 let path = file.path().to_string_lossy().into_owned();
42 codemap.add_file(path, file.text().to_string())
43 })
44 }
45
46 pub fn get_or_insert_codemap_docs_file(
48 &mut self,
49 file_docs: &Arc<FileDocs>,
50 ) -> &Arc<codemap::File> {
51 use std::string::ToString;
52
53 let codemap = &mut self.codemap;
54 self.file_docs
55 .entry(Arc::clone(file_docs))
56 .or_insert_with(|| {
57 let path = file_docs.file().path().to_string_lossy().into_owned() + "/parsed";
58 codemap.add_file(path, file_docs.docs().to_string())
59 })
60 }
61}