Skip to content

Releases: elixir-crab/rustq

v1.0.0-rc.9

v1.0.0-rc.9 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 07 Sep 09:15

Added

  • Support named fields and attributes on Rust enum variants, and attributes on
    match arms, enabling feature-gated event declarations and dispatch.
  • Add explicit move captures with move(fn ... end), tuple-pattern closure
    parameters, and structural closure arguments with optional Rust types.
  • Add R.impl for native callable types using ordinary Elixir function
    signatures, with :fn, :fn_mut, and :fn_once kinds, additional traits,
    and explicit lifetime bounds.
  • Preserve foreign callable-trait parameter and return types, and specialize
    supported generic method arguments from known receiver and argument types.
  • Expand supported source-defined Rust type aliases for receiver inference,
    including generic aliases and grouped imports. Resolve known standard-library
    shared pointers, mutex lock results, and guard receivers without guessing
    from unrelated method names.

Fixed

  • Render matching struct-field bindings in shorthand form for Clippy-clean
    generated patterns while preserving explicit renamed bindings.
  • Reject enum variants that mix tuple and named fields.
  • Preserve reference and unary-expression precedence in method receivers.
  • Infer borrows for dereferenced values and supported String and Vec clone
    results, including expressions derived from typed callback parameters.
  • Keep closure parameter types scoped to the callback instead of inheriting
    shadowed outer-variable types.
  • Omit redundant unit returns, use struct-expression field shorthand, and
    simplify supported ignored-error result matches for Clippy-clean output.
  • Avoid unnecessary mutable bindings for local references while preserving
    explicit mutation requirements.
  • Respect generic-parameter shadowing during alias expansion, refresh aliases
    after source edits, and diagnose conflicting generic substitutions.
  • Reject unsupported lifetime-alias expansion and inconsistent specialization
    of opaque foreign trait bounds rather than silently changing their meaning.
    Defer unsupported nested or ambiguous alias diagnostics until expansion
    requests them.

v1.0.0-rc.8

v1.0.0-rc.8 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 06 Sep 15:33

Added

  • Add @cfg for conditional Rust helper, method, and NIF implementations with
    shared signatures and separate clause groups.
  • Support nested attribute metadata, including not, all, and any
    predicates, with typed path, name/value, and list representations.
  • Select conditional functions with RustQ.Meta.AST.function!/3 and a :cfg
    option.

Changed

  • Reject ambiguous function selectors instead of choosing the first conditional
    implementation.
  • Diagnose stacked or dangling conditions, duplicate conditions, mixed
    unconditional/conditional definitions, and inconsistent NIF scheduling policies.

Fixed

  • Preserve authored receiver names and lexical shadowing in defrustimpl
    methods through a local binding to the Rust receiver.
  • Gate generated NIF result codecs and implementation helpers consistently
    with their conditional entrypoints while retaining one Elixir export.

v1.0.0-rc.7

v1.0.0-rc.7 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 06 Sep 11:34

Changed

  • Reject integer operands for / with an actionable diagnostic; use explicit
    floating-point conversion when floating-point division is intended.
  • Validate generated Cargo dependency names, options, and duplicates, and
    serialize manifests with a TOML encoder for correct string escaping.

Fixed

  • Load generated native libraries correctly on macOS.
  • Preserve native result types through NIF boundary encoding, recursive calls,
    composed calls, closures, and named captures; diagnose generated-name conflicts.
  • Preserve expected result types in cond branches and typed Enum.map closures.
  • Resolve local type aliases in decoding expressions and external struct
    constructor paths consistently with their remote typespecs.
  • Infer the decoded value type for return-position .decode() and optional
    return types for checked integer arithmetic methods.
  • Preserve argument evaluation and infer result propagation for shape queries.
  • Refresh callable metadata after provider recompilation and source changes,
    including same-size edits with unchanged timestamps.
  • Render nested conditionals as else if where appropriate for Clippy-clean output.

Security

  • Update maintainer HTTP dependencies to versions without the reported security
    advisories and remove unused dependency lock entries.

v1.0.0-rc.6

v1.0.0-rc.6 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 27 Jul 18:23
  • Infer mutable owned Rust arguments from mutating collection method calls and
    render them directly as mut parameters, including metadata-backed mutable
    receivers and supported Vec and set/map insertion methods.

v1.0.0-rc.5

v1.0.0-rc.5 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 27 Jul 17:39
  • Add focused RustQ.Meta.AST selectors for generated Rust items, type items,
    enums, structs, and inherent or trait implementation blocks.

v1.0.0-rc.4

v1.0.0-rc.4 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 27 Jul 16:19
  • Add defrustimpl for generating inherent and trait Rust implementation
    methods directly from typed Rusty-Elixir, including &self and &mut self
    receiver inference and implementation visibility, attributes, and lifetimes.

v1.0.0-rc.3

v1.0.0-rc.3 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 17 Jul 12:25
  • Generate optional Rustler term filters with typed Option::filter calls for
    compatibility with Rust 1.97 Clippy.
  • Highlight fenced Rust examples in generated HexDocs.

RustQ 1.0.0-rc.2

RustQ 1.0.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 17 Jul 10:58
  • Add composable RustQ.Test.rust_source!/1,2 and nif_exported?/3 helpers that preserve ordinary ExUnit assertions and diffs; reorganize the suite around focused source values, parameterized schema/corpus cases, compiled support fixtures, and ExUnit-managed temporary directories.
  • Decode precise-capturing impl Trait + use<'a> bounds without relying on pre-existing runtime atoms, as exercised by current skia-safe metadata.
  • Funnel compiled defrust AST access and internal rendering through the documented RustQ.Meta.AST and RustQ.Rust boundaries.
  • Preserve inferred tuple types as structural RustQ.Rust.AST.TypeTuple nodes instead of raw rendered type strings.
  • Preserve imported Rust reference lifetimes and fixed-array lengths, lowering them through structural TypeRef, TypeArray, and TypePath nodes.
  • Add structural bare-function types with bound lifetimes, unsafe and ABI qualifiers, named input metadata, variadics, and return types.
  • Preserve ordered Rust path generic arguments and impl Trait bounds in Syn metadata, and lower complete bound lists through structural TypeImplTrait.
  • Document defnif normal, dirty CPU, and dirty IO scheduler policy and the preferred @nif schedule: :dirty_cpu | :dirty_io spelling.
  • Replace the README reference manual with a focused project overview and move template, AST, splice, metadata, and validation details into a generation guide.
  • Lower supported remote calls in Elixir pipelines and carry expected collection types through materialized Enum stages, preserving eager semantics while avoiding ambiguous Rust collect() inference.

v1.0.0-rc.1

v1.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@dannote dannote released this 16 Jul 14:11
  • Define the RustQ 1.x compatibility contract and ship the policy with the
    package, HexDocs, and agent skill.
  • Add RustQ.Native, public defnif, private defrustp, generated Cargo
    crates, native loading, Cargo dependency metadata, and dirty-scheduler
    normalization for zero-handwritten-bridge-Rust NIFs.
  • Derive directional Rustler boundaries for scalars, strings, binaries, tuples,
    lists, options, tagged results, typed maps, Elixir structs and exceptions,
    structural unions, unit enums, and explicitly declared resources.
  • Expand Rusty-Elixir lowering with multiple clauses, recursion, list/map/struct
    patterns, guards, comprehensions, and structural slice-pattern AST support;
    normalize semantics-preserving Kernel, Enum, List, typed Map, String, Tuple,
    and Range calls through focused hidden lowerers with call-specific typing.
  • Add external/precompiled-crate native preparation through
    use RustQ.Native, build: false, load: false, with public
    RustQ.Native.items/1 and implicit nif_env/0 injection that preserves BEAM
    arity.
  • Add packaged RustQ.Test ExUnit assertions for focused defrust source,
    defnif exports/attributes, and generated Rust validity.
  • Expose all compiled defrust function AST nodes through the documented
    RustQ.Meta.AST.functions/1 generator boundary.
  • Validate documented public APIs, package contents, checked generation, and a
    formatted, Clippy-clean zero-Rust native crate through structured external
    consumer fixtures containing no checked-in Rust or Cargo files.

v0.11.1

Choose a tag to compare

@dannote dannote released this 15 Jul 15:11
  • Lower named Enum.map/2 function captures and multi-statement closure bodies,
    and dogfood them for generated native AST collection decoders.
  • Generate Rustler term decoders structurally, including cached struct keys, and
    add an AST-backed unsafe block for isolated low-level Rustler operations.