Skip to content

Commit b2fcdc2

Browse files
committed
chore(alef): v0.16.23 final fixes — kotlin-android tests + audit display-tag + go types snapshot
- alef-backend-kotlin-android: update sealed-variant gen_bindings test + refresh snapshot_test snapshots for ktfmt 100-char single-line shape (variant data classes that fit within 100 chars are now emitted single-line; multi-line form is exercised separately). - alef-backend-ffi gen_bindings/mod.rs + alef-backend-go gen_bindings/ types.rs: incremental codegen polish from the iter-11 regen loop. - alef-snippets audit: keep is_known_display_tag fallback alongside the documentation-module validators so unknown-language errors remain scoped to genuine typos. - alef-snippets validators: format reflow on csharp/go/java/json tests to match the new oxfmt-rust output.
1 parent 3ecf65d commit b2fcdc2

11 files changed

Lines changed: 44 additions & 30 deletions

File tree

crates/alef-backend-ffi/src/gen_bindings/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@ fn gen_lib_rs(api: &ApiSurface, prefix: &str, config: &ResolvedCrateConfig) -> S
116116
// Unsafe extern "C" functions generated here do not have `# Safety` sections in their
117117
// rustdoc because the safety contract is documented at the C header level (cbindgen output).
118118
// Doc list indentation reflects the source format and is intentional in generated code.
119-
builder.add_inner_attribute("allow(clippy::missing_safety_doc, clippy::doc_lazy_continuation, clippy::doc_overindented_list_items)");
119+
builder.add_inner_attribute(
120+
"allow(clippy::missing_safety_doc, clippy::doc_lazy_continuation, clippy::doc_overindented_list_items)",
121+
);
120122

121123
// Imports
122124
builder.add_import("std::ffi::{c_char, CStr, CString}");

crates/alef-backend-go/src/gen_bindings/types.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,8 +1125,7 @@ pub(super) fn gen_struct_type(
11251125
// they must never be wrapped in a pointer. `*AuthConfig` is "pointer to interface",
11261126
// not "interface", and the two are not assignable. Emit the bare interface name
11271127
// for both optional and non-optional positions.
1128-
let is_sealed_interface =
1129-
matches!(&field.ty, TypeRef::Named(n) if data_enum_names.contains(n.as_str()));
1128+
let is_sealed_interface = matches!(&field.ty, TypeRef::Named(n) if data_enum_names.contains(n.as_str()));
11301129

11311130
let field_type = if is_sealed_interface {
11321131
go_type(&field.ty)
@@ -1681,8 +1680,7 @@ pub(super) fn gen_config_options(
16811680
// Sealed-interface (data enum) fields are also already-nullable interface values; their
16821681
// struct field is `T` (not `*T`), so the assignment must not take the address.
16831682
let is_slice_or_map = matches!(&field.ty, TypeRef::Vec(_) | TypeRef::Map(_, _));
1684-
let is_sealed_interface =
1685-
matches!(&field.ty, TypeRef::Named(n) if data_enum_names.contains(n.as_str()));
1683+
let is_sealed_interface = matches!(&field.ty, TypeRef::Named(n) if data_enum_names.contains(n.as_str()));
16861684
let use_ptr = !is_visitor_field
16871685
&& (field.optional || needs_omitempty_pointer(field))
16881686
&& !is_slice_or_map

crates/alef-backend-kotlin-android/tests/gen_bindings_test.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -989,27 +989,30 @@ fn sealed_variant_tuple_params_use_payload_derived_names() {
989989

990990
let content = &format_metadata_kt.content;
991991

992-
// Pdf(PdfMetadata) should derive "metadata" by stripping "Pdf" prefix
992+
// Pdf(PdfMetadata) should derive "metadata" by stripping "Pdf" prefix.
993+
// Per the ktfmt 100-char heuristic introduced in v0.16.22, short
994+
// declarations are emitted single-line; the assertions below check the
995+
// single-line shape (the long multi-line form is exercised elsewhere).
993996
assert!(
994-
content.contains("data class Pdf(\n val metadata: PdfMetadata\n )"),
997+
content.contains("data class Pdf(val metadata: PdfMetadata)"),
995998
"Pdf variant should use payload-derived name 'metadata', got:\n{content}"
996999
);
9971000

9981001
// Custom(String) should use generic "value" for primitive
9991002
assert!(
1000-
content.contains("data class Custom(\n val value: String\n )"),
1003+
content.contains("data class Custom(val value: String)"),
10011004
"Custom variant should use generic name 'value' for primitive payload, got:\n{content}"
10021005
);
10031006

10041007
// Multi(String, Int) should use "value0" and "value1"
10051008
assert!(
1006-
content.contains("data class Multi(\n val value0: String,\n val value1: Int\n )"),
1009+
content.contains("data class Multi(val value0: String, val value1: Int)"),
10071010
"Multi variant should use generic names 'value0', 'value1', got:\n{content}"
10081011
);
10091012

10101013
// Struct { reason: String } should use the original field name
10111014
assert!(
1012-
content.contains("data class Struct(\n val reason: String\n )"),
1015+
content.contains("data class Struct(val reason: String)"),
10131016
"Struct variant should preserve the field name 'reason', got:\n{content}"
10141017
);
10151018

crates/alef-backend-kotlin-android/tests/snapshots/snapshot_test__snapshot_basic__packages__kotlin_android__src__main__kotlin__dev__kreuzberg__Config.kt.snap

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,4 @@ package dev.kreuzberg
99
/**
1010
* A demo configuration struct.
1111
*/
12-
data class Config(
13-
val value: Int,
14-
val label: String,
15-
val tag: String??
16-
)
12+
data class Config(val value: Int, val label: String, val tag: String??)

crates/alef-backend-kotlin-android/tests/snapshots/snapshot_test__snapshot_basic__packages__kotlin_android__src__main__kotlin__dev__kreuzberg__DemoBridge.kt.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ package dev.kreuzberg
1010
object DemoBridge {
1111
init { System.loadLibrary("demo_jni") }
1212

13+
@Throws(DemoBridgeException::class)
1314
external fun nativeProcess(input: String, count: Int): String
1415
}

crates/alef-backend-swift/src/gen_rust_crate/cargo.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ ignored = ["async-trait", "serde"]
7171
7272
[lib]
7373
crate-type = ["cdylib", "staticlib"]
74+
# The `extern "Swift"` block emits linker references that are only resolvable
75+
# when the crate is linked into a Swift target. `cargo test --workspace` on
76+
# pure-Rust runners (e.g. windows-latest) would otherwise fail with
77+
# undefined `__swift_bridge__$*$alef_visit_*` symbols.
78+
test = false
79+
doctest = false
80+
bench = false
7481
7582
[dependencies]
7683
{source_crate_name} = {{ path = "{core_path}"{features_block}{package_rename_block} }}

crates/alef-snippets/src/audit.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,7 @@ fn audit_fences(path: &Path, content: &str) -> Vec<AuditIssue> {
202202
index + 1,
203203
"fenced code block is missing a language tag".to_string(),
204204
));
205-
} else if Language::from_fence_tag(&tag) == Language::Unknown
206-
&& !is_known_display_tag(&tag)
207-
{
205+
} else if Language::from_fence_tag(&tag) == Language::Unknown && !is_known_display_tag(&tag) {
208206
issues.push(issue(
209207
AuditIssueKind::UnknownLanguage,
210208
path,

crates/alef-snippets/src/validators/csharp.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ impl SnippetValidator for CsharpValidator {
5656
let mut command = std::process::Command::new("dotnet");
5757
match level {
5858
ValidationLevel::Syntax | ValidationLevel::Compile => {
59-
command.args(["build", "--nologo", "-v", "quiet"]).current_dir(dir.path());
59+
command
60+
.args(["build", "--nologo", "-v", "quiet"])
61+
.current_dir(dir.path());
6062
}
6163
ValidationLevel::Run => {
6264
command.args(["run", "--nologo"]).current_dir(dir.path());

crates/alef-snippets/src/validators/go.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl GoValidator {
4949
continue;
5050
}
5151
if trimmed.starts_with("import (") {
52-
while let Some(import_line) = lines.next() {
52+
for import_line in lines.by_ref() {
5353
imports.push(import_line);
5454
if import_line.trim() == ")" {
5555
break;
@@ -103,7 +103,9 @@ impl SnippetValidator for GoValidator {
103103
ValidationLevel::Compile => {
104104
std::fs::write(dir.path().join("go.mod"), "module snippet\n\ngo 1.21\n")?;
105105
let mut command = std::process::Command::new("go");
106-
command.args(["build", "-o", "/dev/null", "./..."]).current_dir(dir.path());
106+
command
107+
.args(["build", "-o", "/dev/null", "./..."])
108+
.current_dir(dir.path());
107109
command
108110
}
109111
ValidationLevel::Run => {
@@ -115,9 +117,7 @@ impl SnippetValidator for GoValidator {
115117
};
116118

117119
let (success, output) = run_command(&mut command, timeout_secs)?;
118-
if success && output.trim().is_empty() {
119-
Ok((SnippetStatus::Pass, None))
120-
} else if success {
120+
if success {
121121
Ok((SnippetStatus::Pass, None))
122122
} else {
123123
Ok((SnippetStatus::Fail, Some(output)))

crates/alef-snippets/src/validators/java.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ impl JavaValidator {
4646
let mut past_imports = false;
4747
for line in code.lines() {
4848
let trimmed = line.trim();
49-
if !past_imports && (trimmed.is_empty() || trimmed.starts_with("import ") || trimmed.starts_with("package ")) {
49+
if !past_imports
50+
&& (trimmed.is_empty() || trimmed.starts_with("import ") || trimmed.starts_with("package "))
51+
{
5052
imports.push(line);
5153
} else {
5254
past_imports = true;
@@ -79,7 +81,9 @@ impl JavaValidator {
7981
} else {
8082
format!("{imports}\n\n")
8183
};
82-
format!("{imports_block}public class Snippet {{\n public static void main(String[] args) throws Exception {{\n{body_inner}\n }}\n}}\n")
84+
format!(
85+
"{imports_block}public class Snippet {{\n public static void main(String[] args) throws Exception {{\n{body_inner}\n }}\n}}\n"
86+
)
8387
}
8488
}
8589

@@ -133,7 +137,6 @@ impl SnippetValidator for JavaValidator {
133137
}
134138

135139
fn is_dependency_error(&self, output: &str) -> bool {
136-
output.contains("cannot find symbol")
137-
|| output.contains("package") && output.contains("does not exist")
140+
output.contains("cannot find symbol") || output.contains("package") && output.contains("does not exist")
138141
}
139142
}

0 commit comments

Comments
 (0)