code_moniker_cli/
extract.rs1use std::path::Path;
2
3use code_moniker_core::core::code_graph::CodeGraph;
4use code_moniker_core::core::moniker::{Moniker, MonikerBuilder};
5use code_moniker_core::lang::Lang;
6
7pub fn extract(lang: Lang, source: &str, path: &Path) -> CodeGraph {
8 let uri = path.to_str().unwrap_or("single-file");
9 let anchor = anchor_moniker();
10 let deep = true;
11 match lang {
12 Lang::Ts => code_moniker_core::lang::ts::extract(
13 uri,
14 source,
15 &anchor,
16 deep,
17 &code_moniker_core::lang::ts::Presets::default(),
18 ),
19 Lang::Rs => code_moniker_core::lang::rs::extract(
20 uri,
21 source,
22 &anchor,
23 deep,
24 &code_moniker_core::lang::rs::Presets::default(),
25 ),
26 Lang::Java => code_moniker_core::lang::java::extract(
27 uri,
28 source,
29 &anchor,
30 deep,
31 &code_moniker_core::lang::java::Presets::default(),
32 ),
33 Lang::Python => code_moniker_core::lang::python::extract(
34 uri,
35 source,
36 &anchor,
37 deep,
38 &code_moniker_core::lang::python::Presets::default(),
39 ),
40 Lang::Go => code_moniker_core::lang::go::extract(
41 uri,
42 source,
43 &anchor,
44 deep,
45 &code_moniker_core::lang::go::Presets::default(),
46 ),
47 Lang::Cs => code_moniker_core::lang::cs::extract(
48 uri,
49 source,
50 &anchor,
51 deep,
52 &code_moniker_core::lang::cs::Presets::default(),
53 ),
54 Lang::Sql => code_moniker_core::lang::sql::extract(
55 uri,
56 source,
57 &anchor,
58 deep,
59 &code_moniker_core::lang::sql::Presets::default(),
60 ),
61 }
62}
63
64fn anchor_moniker() -> Moniker {
65 let mut b = MonikerBuilder::new();
66 b.project(b".");
67 b.build()
68}
69
70pub fn file_uri(path: &Path) -> String {
71 let abs = path.canonicalize().unwrap_or_else(|_| path.to_path_buf());
72 format!("file://{}", abs.display())
73}