Import items from `syn`

finchie
Oct 31, 2023, 4:39 PM
YKL5NCLHVHFQMBIWC6HW4NFPPYK5DR6XTCKJ5VBHNLVP2RO3H24AC

Dependencies

  • [2] QPZ6QNIE Merge consecutive string literals
  • [3] JCYJWUI3 Add support for various text formats
  • [4] GYTRFADR Support Typst subdirectories
  • [5] 4MMVEN5Y Move generated docs inside of parent `docs` module
  • [6] 2N3KOCP7 Create MVP Pandoc->Rust compiler
  • [7] BA5Y6VSE Output Rust code using `syn`
  • [8] HEUMSBES Ouput use statements in generated file
  • [9] FLIMM2YM Return `syn::Expr` instead of `&str` from `transform_inline`
  • [10] RAWT2FQS Nest Xilem tuples longer than 10 elements

Change contents

  • edit in crates/typst_rust_gen/src/lib.rs at line 7
    [4.113]
    [4.1130]
    use syn::{
    token, AngleBracketedGenericArguments, Expr, ExprCall, ExprLit, ExprPath, ExprTuple,
    GenericArgument, GenericParam, Generics, Ident, Item, ItemFn, ItemMod, ItemUse, Lit, LitStr,
    PathArguments, PathSegment, ReturnType, Signature, Stmt, TraitBound, TraitBoundModifier,
    TypeImplTrait, TypeParam, TypeParamBound, TypePath, UseGroup, UseName, UsePath, UseTree,
    Visibility,
    };
  • replacement in crates/typst_rust_gen/src/lib.rs at line 59
    [4.1122][3.0:108]()
    fn xilem_html_element(name: &str, expression: syn::Expr) -> syn::Expr {
    syn::Expr::Call(syn::ExprCall {
    [4.1122]
    [3.108]
    fn xilem_html_element(name: &str, expression: Expr) -> Expr {
    Expr::Call(ExprCall {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 63
    [3.176][3.176:227]()
    paren_token: syn::token::Paren::default(),
    [3.176]
    [3.227]
    paren_token: token::Paren::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 79
    [4.1412][4.1412:1505]()
    fn nth_deepest_module(global_module: &mut syn::ItemMod, limit: usize) -> &mut syn::ItemMod {
    [4.1412]
    [4.1505]
    fn nth_deepest_module(global_module: &mut ItemMod, limit: usize) -> &mut ItemMod {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 86
    [4.1726][4.1726:1768]()
    syn::Item::Mod(next) => next,
    [4.1726]
    [4.1768]
    Item::Mod(next) => next,
  • replacement in crates/typst_rust_gen/src/lib.rs at line 96
    [4.1862][4.1862:1925]()
    fn new_module(name: &str) -> syn::ItemMod {
    syn::ItemMod {
    [4.1862]
    [4.1925]
    fn new_module(name: &str) -> ItemMod {
    ItemMod {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 99
    [4.1952][4.1952:2018]()
    vis: syn::Visibility::Public(syn::token::Pub::default()),
    [4.1952]
    [4.2018]
    vis: Visibility::Public(token::Pub::default()),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 101
    [4.2042][4.2042:2159]()
    mod_token: syn::token::Mod::default(),
    ident: syn::Ident::new(name, proc_macro2::Span::call_site()),
    [4.2042]
    [4.2159]
    mod_token: token::Mod::default(),
    ident: Ident::new(name, proc_macro2::Span::call_site()),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 104
    [4.2183][4.2183:2272]()
    syn::token::Brace::default(),
    vec![syn::Item::Use(syn::ItemUse {
    [4.2183]
    [4.2272]
    token::Brace::default(),
    vec![Item::Use(ItemUse {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 107
    [4.2307][4.2307:2411]()
    vis: syn::Visibility::Inherited,
    use_token: syn::token::Use::default(),
    [4.2307]
    [4.2411]
    vis: Visibility::Inherited,
    use_token: token::Use::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 110
    [4.2448][4.2448:2887]()
    tree: syn::UseTree::Path(syn::UsePath {
    ident: syn::Ident::new("xilem_html", proc_macro2::Span::call_site()),
    colon2_token: syn::token::PathSep::default(),
    tree: Box::new(syn::UseTree::Group(syn::UseGroup {
    brace_token: syn::token::Brace::default(),
    items: Punctuated::<syn::UseTree, syn::token::Comma>::from_iter(
    [4.2448]
    [4.2887]
    tree: UseTree::Path(UsePath {
    ident: Ident::new("xilem_html", proc_macro2::Span::call_site()),
    colon2_token: token::PathSep::default(),
    tree: Box::new(UseTree::Group(UseGroup {
    brace_token: token::Brace::default(),
    items: Punctuated::<UseTree, token::Comma>::from_iter(
  • replacement in crates/typst_rust_gen/src/lib.rs at line 117
    [4.2921][4.2921:3210]()
    syn::UseTree::Name(syn::UseName {
    ident: syn::Ident::new(
    "elements",
    proc_macro2::Span::call_site(),
    ),
    [4.2921]
    [4.3210]
    UseTree::Name(UseName {
    ident: Ident::new("elements", proc_macro2::Span::call_site()),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 120
    [4.3246][4.3246:3372]()
    syn::UseTree::Name(syn::UseName {
    ident: syn::Ident::new(
    [4.3246]
    [4.3372]
    UseTree::Name(UseName {
    ident: Ident::new(
  • replacement in crates/typst_rust_gen/src/lib.rs at line 131
    [4.3719][4.3719:3776]()
    semi_token: syn::token::Semi::default(),
    [4.3719]
    [4.3776]
    semi_token: token::Semi::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 150
    [4.1631][4.4077:4136]()
    fn files_to_modules(mut files: Vec<String>) -> syn::Item {
    [4.1631]
    [4.4136]
    fn files_to_modules(mut files: Vec<String>) -> Item {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 186
    [4.5502][4.5502:5551]()
    .push(syn::Item::Mod(new_module(
    [4.5502]
    [4.5551]
    .push(Item::Mod(new_module(
  • replacement in crates/typst_rust_gen/src/lib.rs at line 201
    [4.6047][4.6047:6125]()
    .get_or_insert(&mut ((syn::token::Brace::default()), Vec::new()))
    [4.6047]
    [4.6125]
    .get_or_insert(&mut ((token::Brace::default()), Vec::new()))
  • replacement in crates/typst_rust_gen/src/lib.rs at line 213
    [4.6410][4.6410:6437]()
    syn::Item::Mod(global)
    [4.6410]
    [4.6437]
    Item::Mod(global)
  • replacement in crates/typst_rust_gen/src/lib.rs at line 230
    [4.1782][4.6625:6730]()
    fn blocks_to_function(name: &str, blocks: Vec<syn::Expr>) -> syn::Item {
    syn::Item::Fn(syn::ItemFn {
    [4.1782]
    [4.1871]
    fn blocks_to_function(name: &str, blocks: Vec<Expr>) -> Item {
    Item::Fn(ItemFn {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 233
    [4.1898][4.6731:6827]()
    vis: syn::Visibility::Public(syn::token::Pub::default()),
    sig: syn::Signature {
    [4.1898]
    [4.6827]
    vis: Visibility::Public(token::Pub::default()),
    sig: Signature {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 239
    [4.6936][4.6936:7456]()
    fn_token: syn::token::Fn::default(),
    ident: syn::Ident::new(name, proc_macro2::Span::call_site()),
    generics: syn::Generics { lt_token: None, params: Punctuated::from_iter(vec![syn::GenericParam::Type(syn::TypeParam { attrs: Vec::new(), ident: syn::Ident::new("T", proc_macro2::Span::call_site()), colon_token: None, bounds: Punctuated::new(), eq_token: None, default: None })].into_iter()), gt_token: None, where_clause: None },
    paren_token: syn::token::Paren::default(),
    [4.6936]
    [4.7456]
    fn_token: token::Fn::default(),
    ident: Ident::new(name, proc_macro2::Span::call_site()),
    generics: Generics { lt_token: None, params: Punctuated::from_iter(vec![GenericParam::Type(TypeParam { attrs: Vec::new(), ident: Ident::new("T", proc_macro2::Span::call_site()), colon_token: None, bounds: Punctuated::new(), eq_token: None, default: None })].into_iter()), gt_token: None, where_clause: None },
    paren_token: token::Paren::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 245
    [4.7523][4.7523:7741]()
    output: syn::ReturnType::Type(
    syn::token::RArrow::default(),
    Box::new(syn::Type::ImplTrait(syn::TypeImplTrait {
    impl_token: syn::token::Impl::default(),
    [4.7523]
    [4.7741]
    output: ReturnType::Type(
    token::RArrow::default(),
    Box::new(syn::Type::ImplTrait(TypeImplTrait {
    impl_token: token::Impl::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 250
    [4.7792][4.7792:7866]()
    vec![syn::TypeParamBound::Trait(syn::TraitBound {
    [4.7792]
    [4.7866]
    vec![TypeParamBound::Trait(TraitBound {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 252
    [4.7913][4.7913:7982]()
    modifier: syn::TraitBoundModifier::None,
    [4.7913]
    [4.7982]
    modifier: TraitBoundModifier::None,
  • replacement in crates/typst_rust_gen/src/lib.rs at line 257
    [4.8191][4.8191:8315]()
    vec![syn::PathSegment {
    ident: syn::Ident::new(
    [4.8191]
    [4.8315]
    vec![PathSegment {
    ident: Ident::new(
  • replacement in crates/typst_rust_gen/src/lib.rs at line 262
    [4.8494][4.8494:8663]()
    arguments: syn::PathArguments::AngleBracketed(
    syn::AngleBracketedGenericArguments {
    [4.8494]
    [4.8663]
    arguments: PathArguments::AngleBracketed(
    AngleBracketedGenericArguments {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 265
    [4.8731][4.8731:8816]()
    lt_token: syn::token::Lt::default(),
    [4.8731]
    [4.8816]
    lt_token: token::Lt::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 267
    [4.8893][4.8893:9066]()
    vec![syn::GenericArgument::Type(
    syn::Type::Path(syn::TypePath {
    [4.8893]
    [4.9066]
    vec![GenericArgument::Type(
    syn::Type::Path(TypePath {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 272
    [4.9302][4.9302:9536]()
    segments: Punctuated::from_iter(vec![syn::PathSegment { ident: syn::Ident::new("T", proc_macro2::Span::call_site()), arguments: syn::PathArguments::None }].into_iter()),
    [4.9302]
    [4.9536]
    segments: Punctuated::from_iter(vec![PathSegment { ident: Ident::new("T", proc_macro2::Span::call_site()), arguments: PathArguments::None }].into_iter()),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 278
    [4.9831][4.9831:9916]()
    gt_token: syn::token::Gt::default(),
    [4.9831]
    [4.9916]
    gt_token: token::Gt::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 292
    [4.10250][4.10250:10396]()
    brace_token: syn::token::Brace::default(),
    stmts: vec![syn::Stmt::Expr(
    syn::Expr::Tuple(syn::ExprTuple {
    [4.10250]
    [4.2135]
    brace_token: token::Brace::default(),
    stmts: vec![Stmt::Expr(
    Expr::Tuple(ExprTuple {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 296
    [4.2174][4.10397:10460]()
    paren_token: syn::token::Paren::default(),
    [4.2174]
    [4.10460]
    paren_token: token::Paren::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 305
    [4.3113][4.3113:3307]()
    fn path_segment(segment: &str) -> syn::PathSegment {
    syn::PathSegment {
    ident: syn::Ident::new(segment, proc_macro2::Span::call_site()),
    arguments: syn::PathArguments::None,
    [4.3113]
    [4.3307]
    fn path_segment(segment: &str) -> PathSegment {
    PathSegment {
    ident: Ident::new(segment, proc_macro2::Span::call_site()),
    arguments: PathArguments::None,
  • replacement in crates/typst_rust_gen/src/lib.rs at line 312
    [4.3316][4.3316:3449]()
    fn expr_path(name: &str) -> syn::Expr {
    let mut segments: Punctuated<syn::PathSegment, syn::token::PathSep> = Punctuated::new();
    [4.3316]
    [4.1947]
    fn expr_path(name: &str) -> Expr {
    let mut segments: Punctuated<PathSegment, token::PathSep> = Punctuated::new();
  • replacement in crates/typst_rust_gen/src/lib.rs at line 320
    [4.3583][4.3583:3619]()
    let expr_path = syn::ExprPath {
    [4.3583]
    [4.3619]
    let expr_path = ExprPath {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 329
    [4.3767][4.3767:3798]()
    syn::Expr::Path(expr_path)
    [4.3767]
    [4.1959]
    Expr::Path(expr_path)
  • replacement in crates/typst_rust_gen/src/lib.rs at line 332
    [4.1962][4.10608:10669]()
    fn pandoc_to_xilem(block: &pandoc_ast::Block) -> syn::Expr {
    [4.1962]
    [3.298]
    fn pandoc_to_xilem(block: &pandoc_ast::Block) -> Expr {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 348
    [4.2421][4.0:143]()
    fn literal_string(value: &str) -> syn::ExprLit {
    let lit_str = syn::LitStr::new(value, proc_macro2::Span::call_site());
    syn::ExprLit {
    [4.2421]
    [4.143]
    fn literal_string(value: &str) -> ExprLit {
    let lit_str = LitStr::new(value, proc_macro2::Span::call_site());
    ExprLit {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 352
    [4.170][4.170:207]()
    lit: syn::Lit::Str(lit_str),
    [4.170]
    [4.207]
    lit: Lit::Str(lit_str),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 356
    [4.216][4.216:280]()
    fn transform_inline(inline: &pandoc_ast::Inline) -> syn::Expr {
    [4.216]
    [4.107]
    fn transform_inline(inline: &pandoc_ast::Inline) -> Expr {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 359
    [4.2489][4.281:369](),[4.369][4.126:245](),[4.245][3.456:466]()
    pandoc_ast::Inline::Str(text) => syn::Expr::Lit(literal_string(text.as_str())),
    pandoc_ast::Inline::Space | pandoc_ast::Inline::SoftBreak => {
    syn::Expr::Lit(literal_string(" "))
    }
    [4.2489]
    [3.466]
    pandoc_ast::Inline::Str(text) => Expr::Lit(literal_string(text.as_str())),
    pandoc_ast::Inline::Space | pandoc_ast::Inline::SoftBreak => Expr::Lit(literal_string(" ")),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 380
    [4.366][4.366:430]()
    fn split_tuple(expressions: Vec<syn::Expr>) -> Vec<syn::Expr> {
    [4.366]
    [4.430]
    fn split_tuple(expressions: Vec<Expr>) -> Vec<Expr> {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 385
    [4.509][4.509:560]()
    let mut elements: Vec<syn::Expr> = Vec::new();
    [4.509]
    [4.560]
    let mut elements: Vec<Expr> = Vec::new();
  • replacement in crates/typst_rust_gen/src/lib.rs at line 388
    [4.625][4.625:755]()
    let expression_group: Vec<syn::Expr> = expression_chunk.to_vec();
    elements.push(syn::Expr::Tuple(syn::ExprTuple {
    [4.625]
    [4.755]
    let expression_group: Vec<Expr> = expression_chunk.to_vec();
    elements.push(Expr::Tuple(ExprTuple {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 391
    [4.786][4.786:841]()
    paren_token: syn::token::Paren::default(),
    [4.786]
    [4.841]
    paren_token: token::Paren::default(),
  • replacement in crates/typst_rust_gen/src/lib.rs at line 403
    [2.3][2.3:122]()
    fn extract_literal_string(expression: &syn::ExprLit) -> String {
    if let syn::Lit::Str(lit_str) = &expression.lit {
    [2.3]
    [2.122]
    fn extract_literal_string(expression: &ExprLit) -> String {
    if let Lit::Str(lit_str) = &expression.lit {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 411
    [4.2610][4.4494:4565]()
    fn transform_inlines(inlines: &Vec<pandoc_ast::Inline>) -> syn::Expr {
    [4.2610]
    [2.189]
    fn transform_inlines(inlines: &Vec<pandoc_ast::Inline>) -> Expr {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 417
    [2.339][2.339:497]()
    if let syn::Expr::Lit(current_literal) = &inline {
    if let Some(syn::Expr::Lit(ref mut prev_literal)) = state.last_mut() {
    [2.339]
    [2.497]
    if let Expr::Lit(current_literal) = &inline {
    if let Some(Expr::Lit(ref mut prev_literal)) = state.last_mut() {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 435
    [4.1298][4.1298:1345]()
    _ => syn::Expr::Tuple(syn::ExprTuple {
    [4.1298]
    [4.1345]
    _ => Expr::Tuple(ExprTuple {
  • replacement in crates/typst_rust_gen/src/lib.rs at line 437
    [4.1376][4.1376:1431]()
    paren_token: syn::token::Paren::default(),
    [4.1376]
    [4.1431]
    paren_token: token::Paren::default(),