use super::sample_url_policy::{FixtureSampleUrl, PlaceholderClass};
use super::*;
use crate::core::config::e2e::{DocsSampleBaseUrl, SAMPLE_URL_MOCK_ONLY_CONFIG_KEY};
pub(super) struct RenderedSnippetBody {
pub body: String,
pub placeholder_class: Option<PlaceholderClass>,
}
pub(super) fn render_snippet_body(
extensions: &[Box<dyn crate::Extension>],
generator: &dyn E2eCodegen,
fixture: &Fixture,
language: &str,
context: &SnippetRenderContext<'_>,
sample_url: &FixtureSampleUrl<'_>,
) -> Result<RenderedSnippetBody> {
let docs_fixture = fixture.docs_call_fixture_with_sample_url(
sample_url.base().base(),
sample_url.template(),
sample_url.manifest(),
);
for extension in extensions {
if let Some(body) = extension
.render_e2e_snippet(
&docs_fixture,
context.e2e,
context.crate_config,
language,
context.type_defs,
context.enums,
)
.map_err(|error| anyhow::anyhow!("extension `{}` could not render snippet: {error:#}", extension.name()))?
{
if body.trim().is_empty() {
bail!("extension `{}` returned an empty snippet body", extension.name());
}
mock_harness_guard::reject_mock_harness_scaffolding(&body, &docs_fixture, language)?;
return Ok(rendered(body, sample_url));
}
}
let call = context.e2e.resolve_call_for_fixture(
docs_fixture.call.as_deref(),
&docs_fixture.id,
&docs_fixture.resolved_category(),
&docs_fixture.tags,
&docs_fixture.input,
);
let docs_fixture = mock_url_defaults::with_default_mock_url_literals(
docs_fixture,
call,
sample_url.base(),
sample_url.template(),
sample_url.manifest(),
);
let fixture = &docs_fixture;
if let Some(kind) = recipe_policy::extension_owned_recipe_kind(fixture, fixture.resolved_args(call)) {
bail!("{kind} fixture requires an extension-owned documentation recipe");
}
let effective_function = call
.effective_function(language)
.or_else(|| {
let skipped_for_language = fixture.skip.as_ref().is_some_and(|skip| skip.should_skip(language));
(!skipped_for_language && crate::e2e::fixture::canonical_language(language) == "c")
.then(|| crate::e2e::codegen::recipe::trait_bridge_function_identity(context.crate_config, fixture))
.flatten()
})
.unwrap_or_default();
if effective_function.trim().is_empty() {
bail!(
"built-in `{language}` snippet recipe has no function identity; configure a call function or provide an extension-owned documentation recipe"
);
}
let rendered_body = generator.render_snippet_body_with_functions(
fixture,
context.e2e,
context.crate_config,
context.type_defs,
context.enums,
context.functions,
context.errors,
);
if let Some(refusal) = crate::e2e::codegen::fixture_refusal::take_error(language) {
return Err(refusal);
}
let body = rendered_body
.map_err(|error| anyhow::anyhow!("built-in `{language}` snippet recipe is incompatible: {error:#}"))?;
if body.trim().is_empty() {
bail!("built-in `{language}` snippet recipe returned an empty body");
}
mock_harness_guard::reject_mock_harness_scaffolding(&body, fixture, language)?;
Ok(rendered(body, sample_url))
}
fn rendered(body: String, sample_url: &FixtureSampleUrl<'_>) -> RenderedSnippetBody {
let placeholder_class = sample_url.classify(&body);
RenderedSnippetBody {
body,
placeholder_class,
}
}
const PLACEHOLDER_SAMPLE_URL_FIXTURES_NAMED: usize = 10;
#[derive(Debug, Default)]
pub(super) struct PlaceholderSampleUrlLedger {
fixtures: BTreeSet<String>,
unconfigured: Vec<(String, String)>,
unresolved: Vec<(String, String)>,
}
impl PlaceholderSampleUrlLedger {
pub(super) fn record(
&mut self,
acknowledgements: &mut AcknowledgementLedger,
class: Option<PlaceholderClass>,
fixture_id: &str,
language: &str,
) {
let Some(class) = class else {
return;
};
let category = AcknowledgeableWarningCategory::DocSnippetReservedDomain;
if matches!(
acknowledgements.check(category, fixture_id, language),
AckOutcome::Acknowledged { .. }
) {
return;
}
self.fixtures.insert(fixture_id.to_string());
let occurrence = (fixture_id.to_string(), language.to_string());
match class {
PlaceholderClass::Unconfigured => self.unconfigured.push(occurrence),
PlaceholderClass::Unresolved => self.unresolved.push(occurrence),
}
}
pub(super) fn fixtures(&self) -> Vec<String> {
self.fixtures.iter().cloned().collect()
}
pub(super) fn report(&self, sample_base_url: DocsSampleBaseUrl<'_>) {
report_unconfigured_sample_urls(&self.unconfigured, sample_base_url);
report_unresolved_fixture_sample_urls(&self.unresolved);
}
}
fn named_occurrences(occurrences: &[(String, String)]) -> (String, usize) {
let named = occurrences
.iter()
.take(PLACEHOLDER_SAMPLE_URL_FIXTURES_NAMED)
.map(|(fixture_id, language)| {
format!(
"{fixture_id} ({language}, acknowledge with {})",
WarningAcknowledgement::config_entry_for(
AcknowledgeableWarningCategory::DocSnippetReservedDomain,
fixture_id,
language,
)
)
})
.collect::<Vec<_>>()
.join(", ");
(
named,
occurrences.len().saturating_sub(PLACEHOLDER_SAMPLE_URL_FIXTURES_NAMED),
)
}
fn more_suffix(remaining: usize) -> String {
if remaining > 0 {
format!(" (+{remaining} more)")
} else {
String::new()
}
}
fn report_unconfigured_sample_urls(occurrences: &[(String, String)], sample_base_url: DocsSampleBaseUrl<'_>) {
if occurrences.is_empty() {
return;
}
let (named, remaining) = named_occurrences(occurrences);
tracing::warn!(
target: "alef::e2e::snippets",
fixtures = occurrences.len(),
base_url = sample_base_url.base(),
config_key = crate::core::config::e2e::SAMPLE_BASE_URL_CONFIG_KEY,
"{} documentation snippet fixture/language occurrence(s) publish the reserved placeholder \
address `{}`, which serves nothing: a reader who copies them gets a request that cannot \
succeed. Set `{}` to a host that really serves your sample inputs; set `{}` if these \
sample inputs are mock-only and no such host exists; or acknowledge a specific \
fixture/language pair below -- a stale acknowledgement (one that matches nothing) fails \
the run. Affected: {named}{}",
occurrences.len(),
sample_base_url.base(),
crate::core::config::e2e::SAMPLE_BASE_URL_CONFIG_KEY,
SAMPLE_URL_MOCK_ONLY_CONFIG_KEY,
more_suffix(remaining)
);
}
fn report_unresolved_fixture_sample_urls(occurrences: &[(String, String)]) {
if occurrences.is_empty() {
return;
}
let (named, remaining) = named_occurrences(occurrences);
tracing::warn!(
target: "alef::e2e::snippets",
fixtures = occurrences.len(),
base_url = crate::core::config::e2e::DEFAULT_DOCS_SAMPLE_BASE_URL,
fixture_key = crate::core::config::e2e::DOCS_SAMPLE_URL_FIXTURE_KEY,
"{} documentation snippet fixture/language occurrence(s) declare `{}` but still publish \
the reserved placeholder address `{}`, so the declared address never reached the \
snippet. This is not the missing-sample-host warning and `{}` does not suppress it: a \
fixture that claims a public address is reporting a broken one, not the absence of one. \
Fix the declared value, or remove it to let the corpus default stand. Affected: \
{named}{}",
occurrences.len(),
crate::core::config::e2e::DOCS_SAMPLE_URL_FIXTURE_KEY,
crate::core::config::e2e::DEFAULT_DOCS_SAMPLE_BASE_URL,
SAMPLE_URL_MOCK_ONLY_CONFIG_KEY,
more_suffix(remaining)
);
}
pub(super) fn report_acknowledged_warnings(report: &crate::core::warning_ack::AcknowledgementReport) {
if report.matched_count == 0 {
return;
}
tracing::info!(
target: "alef::e2e::snippets",
matched = report.matched_count,
"{} documentation snippet warning occurrence(s) acknowledged via \
[crates.e2e.snippets].acknowledged_warnings: {}",
report.matched_count,
report.matched_entries.join(", ")
);
}