import core.reflect.reflect;
import core.reflect.transitiveVisitor;
int func(int a, int b)
{
return a + b;
}
static assert(!hasUnusedParameters(nodeFromName("func")));
int func2(int a, int b, int c)
{
return func(a, b);
}
static assert(hasUnusedParameters(nodeFromName("func2")));
bool hasUnusedParameters(const Node n)
{
bool result = false;
if (auto fd = cast(FunctionDeclaration) n)
{
result = hasUnusedParameters(fd);
}
return result;
}
bool hasUnusedParameters(const FunctionDeclaration fd)
{
bool[const(VariableDeclaration)] parameterUsageList;
foreach(p;fd.parameters)
{
parameterUsageList[p] = false;
}
class Marker : TransitiveVisitor
{
bool[const(VariableDeclaration)]* parameterUsageList;
this(bool[const(VariableDeclaration)] *parameterUsageList)
{
this.parameterUsageList = parameterUsageList;
}
alias visit = TransitiveVisitor.visit;
override void visit(VariableDeclaration vd)
{
if (auto b = vd in *parameterUsageList)
{
*b = true;
}
}
}
scope marker = new Marker(¶meterUsageList);
(cast()fd.fbody).accept(marker);
foreach(v, unused; parameterUsageList)
{
if (!unused) return true;
}
return false;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现