首页 > 其他分享 >YakSSA和语法提示

YakSSA和语法提示

时间:2023-10-20 11:34:17浏览次数:28  
标签:YakSSA 变量 错误 提示 语法 Yak SSA 函数

前言

距离上次和大家分享 SSA 相关的知识已经过去了许久,在这大概两个月的时间里,牛牛可是丝毫没有摸鱼!兢兢业业的完成几个大型 PR 后,在最近的更新的 v1.2.7-sp 2 中,SSA终于从科普文章中的屠龙刀变成了Yak中解析代码的利器。

 

 

有了 SSA 现在我们能做啥!

目前 YakSSA 模块可以完整解析 Yak代码并生成对应的 SSA 格式数据流和控制流分离的指令集,基于此可以方便的进行数据流分析,同时重建的类型系统更进一步提高了静态分析能力。

简而言之!YakSSA 模块提供了非常不错的程序分析能力!如果经常使用 Yak Runner 的朋友们可能已经注意到,目前的 Yak Runner 错误提示功能已经不只有编译语法报错了,这就得益于 SSA 模块的加入。通过静态分析的错误提示,在大家编写代码的时候可以边写边进行修正,以后再也不用等运行时报错再修改代码了!

 

动图封面  

目前的 YakRunner 支持以下的程序错误检查:

 

1、变量未定义

SSA 在生成时就会计算变量的 use-def 链,因此对于各种未定义变量的使用的定位手到擒来!从最简单的单纯使用未定义变量:

到在 a.$b 形式的索引:

再到数据流交汇时可能出现的未定义变量:

甚至在模板字符串中的未定义变量使用:

再进一步,如果在闭包函数中使用到了外部变量,但是其实外部根本没有定义该变量呢?或者定义闭包函数时定义了变量,但调用函数时外部变量不存在了呢?YakSSA 仍然可以帮到你!

 

2、函数参数和返回值检查

在之前,对于大家经常使用(并且真的非常好用)的标准库函数的检查一直不到位,很多时候不熟悉的函数需要查找文档甚至代码的定义才能确定参数以及返回值。现在有了 YakSSA 的检查,将会对这些统统进行静态检查!大家遇到报错也可以立刻修正!对于返回值个数的检查:

对于参数的检查:

 

3、函数错误追踪

另一个经常出现在标准库函数调用的问题就是错误处理, 大家可能会在调用函数时将几个参数全部使用同一个变量接受,这当然是可行的,这个变量将会成为一个列表。但是很多时候大家直接忘记了该函数返回的错误,当这个错误存在的时候,可能该列表其他数据都是无意义甚至引起错误的。错误必须要得到处理,YakSSA 贯彻了这个思路,并且得益于数据流分析,无论这个错误被如何传递,YakSSA可以将这个错误追踪的相当准确。

当然处理错误仍然是非常简单的,在 Yak 内只需要 die(err) 或者使用 ~ 形式的函数调用即可,比 Golang 方便得多,又保证程序流程的正确性,何乐不为呢。

 

4、函数~ 调用

当使用 ~ 调用的时候,函数最后的错误将会被自动处理,此时的函数返回值将会少一个错误。这大家都知道,但是这意味着我们需要记住大部分函数的返回值数量么?当然不是,现在 YakSSA 将会自动检查函数返回值的数量,包括使用 ~ 调用的情况,同样会去除最后一个错误。

但是如果一个函数并没有返回错误的话,是不应该对其使用 ~ 形式的调用的!

 

下一步!

目前的 YakSSA 静态分析能力已经在 YakRunner 中初步使用起来,但这只是一小步,接下来的一段时间内 Yak 将会继续加强对代码的静态检查,基于此我们还可以做很多有趣的事情!

 

标签:YakSSA,变量,错误,提示,语法,Yak,SSA,函数
From: https://www.cnblogs.com/yaklang/p/17776655.html

相关文章

  • eas_客户端查询提示过滤条件不完整或比较值过长请检查
    问题如图所示,这里票据号码是标准元数据字段,查看客户端dep,显示字段长度为30,这里实际测试,查询超过30位就会提示这个,这里需要修改2个元数据,复制并修改xxx.entity和xxx.table文件里的对应字段的长度,然后打包成私包,部署到server/lib/metas/sp的目录下,元数据的路径和原来保持一致 ......
  • OpenCV4.1.0编译时提示“CV_BGR2GRAY”: 未声明的标识符
    OpenCV版本为4.1.0使用CV_BGR2GRAY时报错:“CV_BGR2GRAY”:未声明的标识符解决方法一:添加头文件:#include<opencv2/imgproc/types_c.h>解决方法二:在新版本中,CV_BGR2GRAY被COLOR_BGR2GRAY替换,只需将CV改成COLOR即可。翻译搜索复制......
  • Java语法之运算符二(附练习和答案)
    10.自增自减运算符分类:++自增运算符--自减运算符++:就是把变量里面的值+1--:就是把变量里面的值-1使用方式:放在变量的前面,我们叫做先++。比如:++a放在变量的后面,我们叫做后++。比如:a++注意点:不管是先++,还是后++。单独写在一行的时候,运算结果是一模一样的。案例://++inta=10;......
  • C++基本语法:
    C++基本语法:C++程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。对象:对象具有状态和行为。例如:一只猫的状态(颜色、名称、品种、行为、摇动、叫唤、吃),对象是类的实例。类:类可以定义为描述对象行为(或者状态)的模版(或者蓝图)。方法:从基本上说,一个方法表示一种行为。......
  • 基本语法——lower/upper_bound 学习笔记
    基本语法——lower/upper_bound学习笔记正文本文保证:你看了也不懂\(\texttt{lower\_bound}\)\(\texttt{upper\_bound}\)默认比较函数返回第一个\(\cancel{<}\text{value}\)的元素返回第一个\(>\text{value}\)的元素自定义比较函数返回第一个\(\texttt{f......
  • Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)
    一、命令行提示符格式内容因shell类型而异Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为:tc@box:/$其中,tc为当前用户名,box为主机名,/为当前目录路径,$表示当前用户类型是普通用户 。 二、环境变量PS1存储了命令行提......
  • markdown基本使用语法(适合做笔记)
    markdown基础语法编辑器推荐vscode支持大量的插件,包括makrdown语法展示效果的插件。当安装这个插件之后,能够将文档和显示效果分成两个页面,就可以一边编辑代码,一边查看显示效果了,更大的优点是,纯文本状态下,无需考虑显示效果,加载速度更高,如果使用typora的话,当笔记达到两万字左右就......
  • 关闭小米手机的USB安装提示弹窗(及开发者模式找不到MIUI优化的解决办法)
    结论: 1.设置-更多设置-开发者选项(划到最底部)-关闭“MIUI优化”2.如果没有这个选项,在开发者选项界面底部,找一个重置默认设置之类的按钮,多点几次就出来了。(或执行 adbshellsettingsandputsecuremiui_optimization0 Source:https://xiaomilive.com/how-to-dis......
  • 实现Springboot中MyBatisplus使用分页“@P0”附近有语法错误selectPage, IPage和Page分
    说明:QueryWrapper<Banner> warapper=newQueryWrapper<>();Page<Banner>page=newPage<>(1,1);IPage<Banner>iPage=bannerMapper.selectPage(page,warapper);输出结果还是全部的,没有limit效果。 解决:查了一天发现网上有说,没有进行配置分页插件,加上这个分页插件配置类......
  • 如何使用markdown语法展示纯文本效果,不考虑特殊字符带来的英雄
    作者希望能够像xml中的![CDATA[纯文本内容]]那样,里面包裹的内容就是纯文本的,因为有时候我不想因为一些特殊字符比如:#这种字符导致文字变大加粗网上查找了资料,不知道是这方面的内容少还是我输入的关键字有误,查到的资料寥寥无几,有效的是让你使用\(反斜杠)来转义内容,还有就是使用......