使用rustc_interface进行类型检查

rustc_span

Rust 编译器中用于源代码位置跟踪和定位的库。它提供了对源代码位置、跟踪、范围和跨文件的操作和查询的功能。这个库对于诊断、错误信息、编译器插件、代码检查等任务非常有用。

主要功能:

  • 源代码位置 (Span) 的表示
    rustc_span::Span 是一个表示源代码的位置范围和位置信息的结构体。它包含了文件名称、行号、列号以及start-end 的字节偏移等信息。Span 可以用于定位和标识源代码的特定部分

  • 范围操作和查询
    Span 结构体提供各种方法来处理和查询范围。可以合并不同的 Span、切割 Span、比较和检查 Span 是否重叠等。这些操作对于分析、处理和表示源代码位置和范围非常有用

  • 错误信息和诊断
    rustc_span 提供了错误信息和诊断报告的功能。可以使用 rustc_span::DiagnosticBuilder 来创建和生成错误、警告、提示等诊断消息,并将其与对应的 Span 相关联。这使得编译器能够在给出错误消息时同时提供程序的准确位置

  • 文件和文件位置的操作
    rustc_span 提供了一些操作文件和文件位置的功能。可以使用 rustc_span::source_map::SourceMap 来处理文件和文件位置,如获取文件路径、读取文件内容、将文件位置转换为 Span 等

通过使用 rustc_span 库,可以在编写编译器插件、代码检查工具或任何需要源代码位置信息的任务中准确地跟踪、定位和操作源代码。
对于静态分析、错误检测、调试等功能非常有用。

rustc_span::source_map

Types for tracking pieces of source code within a crate.
跟踪一个crate中的代码片段的类型
SourceMap 跟踪单个 crate 中使用的所有源代码,从整数字节位置映射到原始源代码位置(from integer byte positions to the original source code location)。
在 crate 解析期间解析的每一位源代码(通常是文件、内存中的字符串或宏扩展的各个位)覆盖 SourceMap 中的连续字节范围(cover a continuous range of bytes in the SourceMap),并由 SourceFiles 表示(are represented by SourceFiles)。
字节位置存储在 Span 中并在编译器中普遍使用(used pervasively in the compiler)。它们是 SourceMap 中的绝对位置(absolute positions),可以根据请求转换为行和列信息、源代码片段(source code snippets)等。

rustc_span::source_map::SourceMap

pub struct SourceMap {
   
    files: RwLock<SourceMapFiles>,
    file_loader: IntoDynSyncSend<Box<dyn FileLoader + Sync + Send>>,
    path_mapping: FilePathMapping,
    hash_kind: SourceFileHashAlgorithm,
}

rustc_interface::interface::Config

pub struct Config {
   
    pub opts: Options, // 这里的Options不是Option,它是 rustc_session::options::Options,是一个结构体
    pub crate_cfg: Vec<String>,
    pub crate_check_cfg: Vec<String>,
    pub input: Input,
    pub output_dir: Option<PathBuf>,
    pub output_file: Option<OutFileName>,
    pub ice_file: Option<PathBuf>,
    pub file_loader: Option<Box<dyn FileLoader + Send + Sync>>,
    pub locale_resources: &'static [&'static str],
    pub lint_caps: FxHashMap<LintId, Level>,
    pub parse_sess_created: Option<Box<dyn FnOnce(&mut ParseSess) + Send>>,
    pub hash_untracked_state: Option<Box<dyn FnOnce(&Session, &mut StableHasher) + Send>>,
    pub register_lints: Option<Box<dyn Fn(&Session, &mut LintStore) + Send + Sync>>,
    pub override_queries: Option<fn(_: &Session, _: &mut Providers)>,
    pub make_codegen_backend: Option<Box<dyn FnOnce(&Options) -> Box<dyn CodegenBackend> + Send>>,
    pub registry: 

你可能感兴趣的:(rust,rust,学习)