Merge consecutive string literals

finchie
Oct 31, 2023, 3:46 PM
QPZ6QNIEGMSQWN65HB7T44HUM42XSXZ6F5JOWEOTFPNDP2PQEKKQC

Dependencies

  • [2] RAWT2FQS Nest Xilem tuples longer than 10 elements
  • [3] BA5Y6VSE Output Rust code using `syn`
  • [4] 2N3KOCP7 Create MVP Pandoc->Rust compiler
  • [5] FLIMM2YM Return `syn::Expr` instead of `&str` from `transform_inline`

Change contents

  • edit in crates/typst_rust_gen/src/lib.rs at line 401
    [2.1078]
    [3.2607]
    }
    fn extract_literal_string(expression: &syn::ExprLit) -> String {
    if let syn::Lit::Str(lit_str) = &expression.lit {
    lit_str.value()
    } else {
    unreachable!()
    }
  • replacement in crates/typst_rust_gen/src/lib.rs at line 412
    [3.4565][2.1079:1191]()
    let expressions = inlines
    .into_iter()
    .map(transform_inline)
    .collect::<Vec<_>>();
    [3.4565]
    [3.4699]
    let expressions =
    inlines
    .into_iter()
    .map(transform_inline)
    .fold(Vec::new(), |mut state, inline| {
    if let syn::Expr::Lit(current_literal) = &inline {
    if let Some(syn::Expr::Lit(ref mut prev_literal)) = state.last_mut() {
    let prev_string = extract_literal_string(&prev_literal);
    let current_string = extract_literal_string(&current_literal);
    let merged_string = prev_string + &current_string;
    *prev_literal = literal_string(merged_string.as_str());
    return state;
    }
    }
  • edit in crates/typst_rust_gen/src/lib.rs at line 427
    [3.4700]
    [3.510]
    state.push(inline);
    state
    });