Skip to main content

Command Palette

Search for a command to run...

深度理解之三:ctx.ctx.tcx.sess.source_map()

Published
•1 min read•View as Markdown

You want to print the source code of the expression given its Span. The Span object defines a range in the source code, so you can retrieve the source code that it covers. The following will show you how to print the source code of the expression in addition to the existing information:

https://doc.rust-lang.org/stable/nightly-rustc/rustc_middle/dep_graph/trait.DepContext.html#tymethod.sess

Returns the source snippet as String corresponding to the given Span.

let span = arg.span;
let lo = ctx.ctx.tcx.sess.source_map().lookup_char_pos(span.lo());
let hi = ctx.ctx.tcx.sess.source_map().lookup_char_pos(span.hi());

// Extract the source code given the span.
let source_code = ctx.ctx.tcx.sess.source_map().span_to_snippet(span).unwrap_or("<source code extraction failed>".to_string());

More from this blog

c_void到u8 - laertes-2023

为什么把c_void重命名为u8? 类型大小: u8通常代表一个单字节(8位)的无符号整数。c_void作为一个“空”类型,通常也被当作一个单字节进行处理(尽管这取决于具体的实现)。因此,这两者在大小上是匹配的。 类型转换简便: u8是一个非常基础的类型,与之进行类型转换通常比较方便。 操作简单: u8类型上可用的操作相对简单,可能更容易进行后续的代码分析或转换。 为什么不把其他东西重命名为u8? 类型语义: 其他类型可能具有其自己的语义和操作,这些可能不适用或不等价于u8。 数据...

Sep 5, 20231 min read

Retriever's blog

48 posts