rust/compiler
bors 3e018ce194 Auto merge of #87264 - mystor:expand_literal, r=petrochenkov
proc_macro: Add an expand_expr method to TokenStream

This feature is aimed at giving proc macros access to powers similar to those used by builtin macros such as `format_args!` or `concat!`. These macros are able to accept macros in place of string literal parameters, such as the format string, as they perform recursive macro expansion while being expanded.

This can be especially useful in many cases thanks to helper macros like `concat!`, `stringify!` and `include_str!` which are often used to construct string literals at compile-time in user code.

For now, this method only allows expanding macros which produce literals, although more expressions will be supported before the method is stabilized.

In earlier versions of this PR, this method exclusively returned `Literal`, and spans on returned literals were stripped of expansion context before being returned to be as conservative as possible about permission leakage. The method's naming has been generalized to eventually support arbitrary expressions, and the context stripping has been removed (https://github.com/rust-lang/rust/pull/87264#discussion_r674863279), which should allow for more general APIs like "format_args_implicits" (https://github.com/rust-lang/rust/issues/67984) to be supported as well.

## API Surface

```rust
impl TokenStream {
    pub fn expand_expr(&self) -> Result<TokenStream, ExpandError>;
}

#[non_exhaustive]
pub struct ExpandError;

impl Debug for ExpandError { ... }
impl Display for ExpandError { ... }
impl Error for ExpandError {}
impl !Send for ExpandError {}
impl !Sync for ExpandError {}
```
2021-11-13 08:22:52 +00:00
..
rustc Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_apfloat Revert "Auto merge of #89709 - clemenswasser:apply_clippy_suggestions_2, r=petrochenkov" 2021-10-15 11:28:23 +02:00
rustc_arena Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_ast Auto merge of #89316 - asquared31415:multiple-clobber-abi, r=Amanieu 2021-11-12 16:29:25 +00:00
rustc_ast_lowering Add support for specifying multiple clobber_abi in asm! 2021-11-10 01:06:03 -05:00
rustc_ast_passes rustc_feature: Convert BuiltinAttribute from tuple to a struct 2021-11-12 20:15:14 +08:00
rustc_ast_pretty Add support for specifying multiple clobber_abi in asm! 2021-11-10 01:06:03 -05:00
rustc_attr Correct typo 2021-10-16 13:36:05 -07:00
rustc_borrowck Rollup merge of #89561 - nbdd0121:const_typeck, r=nikomatsakis 2021-11-09 19:00:40 +01:00
rustc_builtin_macros Add support for specifying multiple clobber_abi in asm! 2021-11-10 01:06:03 -05:00
rustc_codegen_cranelift Make hash_result an Option. 2021-10-20 18:29:18 +02:00
rustc_codegen_gcc Auto merge of #89652 - rcvalle:rust-cfi, r=nagisa 2021-10-27 09:19:42 +00:00
rustc_codegen_llvm Rollup merge of #88868 - calebzulawski:feature/simd_bitmask, r=workingjubilee 2021-11-10 18:52:27 +01:00
rustc_codegen_ssa Rollup merge of #90701 - michaelwoerister:more-artifact-sizes, r=davidtwco 2021-11-09 19:00:45 +01:00
rustc_const_eval Auto merge of #88670 - camelid:miri-uninit-num, r=RalfJung 2021-11-10 09:36:03 +00:00
rustc_data_structures more clippy fixes 2021-11-07 16:59:05 +01:00
rustc_driver Don't proceed to codegen if there are lint errors 2021-11-08 01:22:28 +00:00
rustc_error_codes Update Copy/Clone documentation WRT arrays 2021-11-08 13:11:59 -05:00
rustc_errors Don't abort compilation after giving a lint error 2021-11-08 01:22:28 +00:00
rustc_expand proc_macro: Add an expand_expr method to TokenStream 2021-11-12 15:41:40 -05:00
rustc_feature rustc_feature: Convert BuiltinAttribute from tuple to a struct 2021-11-12 20:15:14 +08:00
rustc_fs_util Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_graphviz Revert "Auto merge of #89709 - clemenswasser:apply_clippy_suggestions_2, r=petrochenkov" 2021-10-15 11:28:23 +02:00
rustc_hir Give inline const separate DefKind 2021-11-07 03:59:06 +00:00
rustc_hir_pretty Auto merge of #89124 - cjgillot:owner-info, r=michaelwoerister 2021-10-18 19:53:05 +00:00
rustc_incremental Remove rustc_incremental::persist::fs::dep_graph_path_from 2021-11-09 10:58:11 -06:00
rustc_index update cfg(bootstrap) 2021-10-23 21:55:57 -04:00
rustc_infer Auto merge of #90648 - matthewjasper:assoc-item-cleanup, r=cjgillot 2021-11-11 15:15:15 +00:00
rustc_interface Auto merge of #83846 - torhovland:issue-10971, r=davidtwco 2021-11-11 02:52:32 +00:00
rustc_lexer use matches!() macro in more places 2021-11-06 16:13:14 +01:00
rustc_lint rustc_feature: Convert BuiltinAttribute from tuple to a struct 2021-11-12 20:15:14 +08:00
rustc_lint_defs Properly register text_direction_codepoint_in_comment lint. 2021-11-05 20:12:40 +01:00
rustc_llvm PassWrapper: additional sanitizer update to match clang 2021-11-11 09:05:21 -05:00
rustc_macros more clippy fixes 2021-11-07 16:59:05 +01:00
rustc_metadata Add ty::Visibility::is_public() 2021-11-09 18:35:00 -08:00
rustc_middle Auto merge of #90648 - matthewjasper:assoc-item-cleanup, r=cjgillot 2021-11-11 15:15:15 +00:00
rustc_mir_build Auto merge of #90813 - notriddle:notriddle/vec-extend, r=GuillaumeGomez 2021-11-12 12:13:32 +00:00
rustc_mir_dataflow Remove MaybeMutBorrowedLocals 2021-11-03 16:43:12 +01:00
rustc_mir_transform impl Copy/Clone for arrays in std, not in compiler 2021-11-08 13:11:58 -05:00
rustc_monomorphize Rollup merge of #90701 - michaelwoerister:more-artifact-sizes, r=davidtwco 2021-11-09 19:00:45 +01:00
rustc_parse rustc_feature: Convert BuiltinAttribute from tuple to a struct 2021-11-12 20:15:14 +08:00
rustc_parse_format Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_passes rustc_feature: Convert BuiltinAttribute from tuple to a struct 2021-11-12 20:15:14 +08:00
rustc_plugin_impl Move rustc_middle::middle::cstore to rustc_session. 2021-10-03 16:08:51 +02:00
rustc_privacy Add ty::Visibility::is_public() 2021-11-09 18:35:00 -08:00
rustc_query_impl Revert "Add rustc lint, warning when iterating over hashmaps" 2021-10-28 11:01:42 -04:00
rustc_query_system Auto merge of #90361 - Mark-Simulacrum:always-verify, r=michaelwoerister 2021-11-08 13:38:08 +00:00
rustc_resolve Rollup merge of #90826 - petrochenkov:binattr, r=cjgillot 2021-11-12 19:17:34 +01:00
rustc_save_analysis Give inline const separate DefKind 2021-11-07 03:59:06 +00:00
rustc_serialize Revert "Auto merge of #89709 - clemenswasser:apply_clippy_suggestions_2, r=petrochenkov" 2021-10-15 11:28:23 +02:00
rustc_session Auto merge of #83846 - torhovland:issue-10971, r=davidtwco 2021-11-11 02:52:32 +00:00
rustc_span Auto merge of #90485 - camsteffen:fmt-args-less-bind, r=m-ou-se 2021-11-09 05:33:16 +00:00
rustc_symbol_mangling Revert "Add rustc lint, warning when iterating over hashmaps" 2021-10-28 11:01:42 -04:00
rustc_target Rollup merge of #90494 - Meziu:armv6k-3ds-target, r=sanxiyn 2021-11-08 15:15:22 +01:00
rustc_trait_selection Auto merge of #90648 - matthewjasper:assoc-item-cleanup, r=cjgillot 2021-11-11 15:15:15 +00:00
rustc_traits Make select_* methods return Vec for TraitEngine 2021-11-08 23:35:23 +08:00
rustc_ty_utils impl Copy/Clone for arrays in std, not in compiler 2021-11-08 13:11:58 -05:00
rustc_type_ir Add two inline annotations for hot functions 2021-10-03 12:43:43 -04:00
rustc_typeck Auto merge of #90648 - matthewjasper:assoc-item-cleanup, r=cjgillot 2021-11-11 15:15:15 +00:00