Function rustc_metadata::rmeta::encoder::rendered_const

source ·
pub fn rendered_const<'tcx>(tcx: TyCtxt<'tcx>, body: BodyId) -> String
Expand description

Build a textual representation of an unevaluated constant expression.

If the const expression is too complex, an underscore _ is returned. For const arguments, it’s { _ } to be precise. This means that the output is not necessarily valid Rust code.

Currently, only

  • literals (optionally with a leading -)
  • unit ()
  • blocks ({ … }) around simple expressions and
  • paths without arguments

are considered simple enough. Simple blocks are included since they are necessary to disambiguate unit from the unit type. This list might get extended in the future.

Without this censoring, in a lot of cases the output would get too large and verbose. Consider match expressions, blocks and deeply nested ADTs. Further, private and doc(hidden) fields of structs would get leaked since HIR datatypes like the body parameter do not contain enough semantic information for this function to be able to hide them – at least not without significant performance overhead.

Whenever possible, prefer to evaluate the constant first and try to use a different method for pretty-printing. Ideally this function should only ever be used as a fallback.