如何打印 construct_runtime 在运行时构建的代码?

How can I print the code that is built at runtime by construct_runtime?

我克隆了底物存储库。在 bin/node-template/runtime/src/lib.rs 中,调用 construct_runtime! 创建运行时。我在frame/support/procedural/src/construct_runtime/mod.rs中找到了construct_runtime的定义。它调用 construct_runtime_parsed 在运行时构建代码块。

let res = quote!(
        #scrate_decl

        #[derive(Clone, Copy, PartialEq, Eq, #scrate::sp_runtime::RuntimeDebug)]
        pub struct #name;
        impl #scrate::sp_runtime::traits::GetNodeBlockType for #name {
            type NodeBlock = #node_block;
        }
        impl #scrate::sp_runtime::traits::GetRuntimeBlockType for #name {
            type RuntimeBlock = #block;
        }

        #outer_event

        #outer_origin

        #all_modules

        #module_to_index

        #dispatch

        #metadata

        #outer_config

        #inherent

        #validate_unsigned

        #integrity_test
    );

有什么方法可以打印或检查由 construct_runtime_parsed 构建的传递给 quote! 的代码?

您可以将 cargo expand 指向 runtime/src/lib.rs 文件,它将输出扩展的源代码。