use crate::core::config::Language;
use crate::docs::clean_doc;
pub(crate) fn emit_cleaned_dartdoc(out: &mut String, doc: &str, indent: &str) {
if doc.is_empty() {
return;
}
let cleaned = clean_doc(doc, Language::Dart);
crate::codegen::doc_emission::emit_dartdoc(out, &cleaned, indent);
}
pub(crate) fn widen_opaque_wrapper_cfg(cfg: &str) -> String {
const ANDROID_X86_64_EXCLUSION: &str = r#"not(all(target_os = "android", target_arch = "x86_64"))"#;
if !cfg.contains(ANDROID_X86_64_EXCLUSION) {
return cfg.to_string();
}
let with_leading = format!(", {ANDROID_X86_64_EXCLUSION}");
let with_trailing = format!("{ANDROID_X86_64_EXCLUSION}, ");
if cfg.contains(&with_leading) {
cfg.replace(&with_leading, "")
} else if cfg.contains(&with_trailing) {
cfg.replace(&with_trailing, "")
} else {
cfg.replace(ANDROID_X86_64_EXCLUSION, "")
}
}
#[cfg(test)]
mod tests {
use super::widen_opaque_wrapper_cfg;
#[test]
fn strips_android_x86_64_exclusion_when_trailing_clause() {
let cfg = r#"all(feature = "ner-llm", not(target_arch = "wasm32"), not(all(target_os = "android", target_arch = "x86_64")))"#;
let widened = widen_opaque_wrapper_cfg(cfg);
assert_eq!(
widened, r#"all(feature = "ner-llm", not(target_arch = "wasm32"))"#,
"android-x86_64 exclusion must be removed from the wrapper cfg"
);
}
#[test]
fn strips_android_x86_64_exclusion_when_leading_clause() {
let cfg = r#"all(not(all(target_os = "android", target_arch = "x86_64")), feature = "ner-llm")"#;
let widened = widen_opaque_wrapper_cfg(cfg);
assert_eq!(widened, r#"all(feature = "ner-llm")"#);
}
#[test]
fn leaves_unrelated_cfg_untouched() {
let cfg = r#"all(feature = "ner-llm", not(target_arch = "wasm32"))"#;
assert_eq!(widen_opaque_wrapper_cfg(cfg), cfg);
}
#[test]
fn empty_cfg_is_passthrough() {
assert_eq!(widen_opaque_wrapper_cfg(""), "");
}
}