Skip to main content

code_moniker_cli/
extract.rs

1use 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}