使用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: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁潜力:创建支持Actions接口调用的高级GPTs

如何创建带有Actions接口调用的GPTs 在本篇博客中&#xff0c;我们将介绍如何创建一个带有Actions接口调用的GPTs &#xff0c;以及如何进行配置和使用。我们将以 https://chat.openai.com/g/g-GMrQhe7ka-gptssearch 为例&#xff0c;演示整个过程。 Ps: 数据来源&#xff1a…

Go 以小端字节序修改文件

如果你想将修改的值以小端字节序存储&#xff0c;你需要注意以下几点&#xff1a; 确保你的操作系统和硬件使用小端字节序。 大多数现代系统都使用小端字节序&#xff0c;但有些特殊情况下可能会使用大端字节序。 将数据转换为小端字节序。 Go语言的标准库提供了binary.Little…

Linux:wget后台下载/查看后台任务进度

1. 后台下载 使用wget -b url&#xff1a; wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip后台任务启动后&#xff0c;会返回两段话&#xff0c;第一段返回一个pid&#xff0c;代表这个后台任务的进程&#xff0c;并且我们可以kill掉这个id来终止此次下载&#x…

下拉框的watch监听与change事件

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; watch监听是在赋值的时候就会触发&#xff0c;回显也是赋值&#xff0c;也会触发 change在值变更的时候才会触发&#xff0c;回显不属于值的变更&#xff0c;不会触发 问题描述 提示&#xff1a;这…

Vue2系列 -- 组件自动化全局注册(require.context)

参考官网&#xff1a;https://v2.cn.vuejs.org/v2/guide/components-registration.html 1 作用 省略 import 引入组件 省略 在main.js 中注册 实现自动化引入组件 2 自定义文件夹 在 src 下新建一个 components/base 文件夹&#xff0c;用于存放要自动注册的组件 3 在 base…

【Docker】从零开始:1.Docker概述

【Docker】从零开始&#xff1a;1.Docker概述 1.什么是Docker2.为什么要使用Docker3.传统虚拟机技术与Linux容器技术的区别(1).传统虚拟机技术(2).Linux容器 4.Docker的特点一次构建、随处运行a.更快速的应用交付和部署b.更便捷的升级和扩缩容&#xff1a;c.更简单的系统运维d.…

边缘计算是如何为元宇宙提供动力的?

构建元宇宙虚拟世界并不简单&#xff0c;也并不便宜&#xff0c;但是还是有许多大型公司正在转移大量资源来开发他们的元宇宙业务&#xff0c;当然大部分企业注意力都围绕着 VR 耳机、AR 眼镜、触觉手套和其他沉浸式虚拟现实体验所需的可穿戴硬件。虽然这种沉浸式的体验是最终结…

特殊token的特殊用途

特殊token的特殊用途 特殊voc设计传统的特殊token 用途特殊用途例子特殊voc设计 普通token1 。。。。普通token1000,特殊token1,,,,,特殊token100 ,特殊指示token1,,,特殊指示token100 传统的特殊token 用途 在您提供的示例中,有1000个普通 token(从普通 token …

2023.11.20 关于 Spring MVC 详解

目录 MVC 工作流程 Spring MVC 掌握三个功能 创建 Spring MVC 项目 推荐安装插件 EditStarters 安装步骤 使用方法 实现连接功能 基础注解 RequestMapping 指定 GET 和 POST 方法类型 ResponseBody 获取参数 传递 单个 或 多个参数 参数重命名 RequestParam …

加油站[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 在一条环路上有n个加油站&#xff0c;其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车&#xff0c;从第i个加油站开往第i1个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。给…

洛谷 模板汇总 算法基础 python解析

文章目录 P1226 【模板】快速幂题目分析代码 P3367 【模板】并查集题目分析代码 P3378 【模板】堆题目分析代码 P3383 【模板】线性筛素数题目分析代码 P3366 【模板】最小生成树题目分析代码 P3390 【模板】矩阵快速幂题目分析代码 【模板】单源最短路径题目分析代码 P1226 【…

5.基于飞蛾扑火算法(MFO)优化的VMD参数(MFO-VMD)

代码的使用说明 基于飞蛾扑火算法优化的VMD参数 优化算法代码原理 飞蛾扑火优化算法&#xff08;Moth-Flame Optimization&#xff0c;MFO&#xff09;是一种新型元启发式优化算法&#xff0c;该算法是受飞蛾围绕火焰飞行启发而提出的&#xff0c;具有搜索速度快、寻优能力强的…

事件溯源(Event Sourcing)和命令查询责任分离(CQRS)经验

这篇文章是实现一个基于 CQRS 和事件溯源原则的应用程序&#xff0c;描述这个过程的方式&#xff0c;我相信分享我面临的挑战和问题可能对一些人有用。特别是如果你正在开始自己的旅程。 业务背景 项目的背景与空中交通管理&#xff08;ATM&#xff09;领域相关。我们为一个 …

C++优先队列的使用

1. 什么是priority_queue priority_queue是C中的容器&#xff0c;实现优先队列。由于底层采用堆实现&#xff0c;所以插入和删除操作的时间复杂度为O(logn)&#xff0c;查找队首元素的时间复杂度为O(1)。 2. 构造priority_queue 【1】使用priority_queue需要先包含头文件<…

C++学习 --list

目录 1&#xff0c; 什么是list 2&#xff0c; 创建 2-1&#xff0c; 标准数据类型 2-2&#xff0c; 自定义数据类型 2-3&#xff0c; 其他创建方式 3&#xff0c; 操作list 3-1&#xff0c; 赋值 3-2&#xff0c; 添加元素 3-2-1&#xff0c; 添加元素(assign) 3-2-…

动手学深度学习——循环神经网络的简洁实现(代码详解)

文章目录 循环神经网络的简洁实现1. 定义模型2. 训练与预测 循环神经网络的简洁实现 # 使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, …

卷积核的形象化解释

卷积核是在卷积神经网络&#xff08;CNN&#xff09;中使用的一种重要工具&#xff0c;它可以对输入数据进行特征提取和特征映射。在图像处理中&#xff0c;卷积核通常用于检测图像中的边缘、纹理、颜色等特征&#xff0c;从而帮助网络识别图像中的物体或模式。 为了形象化地解…

【蓝桥杯单片机(27)】超声波测距

一、简要说明 超声波测距传感器,一个发出超声波(A),另一个接收超声波(B) A如何发出超声波?给A的引脚一个持续的高低电平(方波)即可发出超声波。 B如何确认超声波已收到?B的一个引脚由低电平变为高电平即是收到了超声波。 因此,超声波测距分为两步,第一步发出超声波…