code-moniker-core 0.4.0

Core symbol-graph types and per-language extractors for code-moniker.
Documentation
use std::path::Path;

use code_moniker_core::core::moniker::{Moniker, MonikerBuilder};
use code_moniker_core::lang::{self, LangExtractor, assert_conformance};

fn anchor() -> Moniker {
	MonikerBuilder::new().project(b"app").build()
}

fn check<L: LangExtractor>(path: &Path) {
	let src = std::fs::read_to_string(path).expect("read fixture");
	let uri = path
		.file_name()
		.expect("fixture has file name")
		.to_string_lossy()
		.into_owned();
	let a = anchor();
	let g = L::extract(&uri, &src, &a, false, &L::Presets::default());
	assert_conformance::<L>(&g, &a);
}

macro_rules! conformance_lang {
	($name:ident, $glob:literal, $lang:ty) => {
		#[test]
		fn $name() {
			insta::glob!($glob, |p| check::<$lang>(p));
		}
	};
}

conformance_lang!(
	conformance_ts,
	"fixtures/extractors/ts/*.{ts,tsx,jsx}",
	lang::ts::Lang
);
conformance_lang!(
	conformance_rs,
	"fixtures/extractors/rs/*.rs",
	lang::rs::Lang
);
conformance_lang!(
	conformance_python,
	"fixtures/extractors/python/*.py",
	lang::python::Lang
);
conformance_lang!(
	conformance_go,
	"fixtures/extractors/go/*.go",
	lang::go::Lang
);
conformance_lang!(
	conformance_java,
	"fixtures/extractors/java/*.java",
	lang::java::Lang
);
conformance_lang!(
	conformance_cs,
	"fixtures/extractors/cs/*.cs",
	lang::cs::Lang
);
conformance_lang!(
	conformance_sql,
	"fixtures/extractors/sql/*.sql",
	lang::sql::Lang
);