Erlang Typer生成注解时的异常行为问题咨询
Typer/Dialyzer 文件路径带
.前缀时无法生成类型注解的问题 使用OTP 25.0.4版本的Dialyzer typer_core模块自动推断类型规范时,发现一个路径相关的异常行为:指定当前目录下的Erlang文件时,路径带./前缀会导致类型注解无法正常生成;不带前缀则工作正常。该问题仅影响当前执行目录下的文件,子目录文件不受影响。
测试模块示例
-module(test). is_a_ok(a) -> ok.
复现步骤
Erlang REPL 场景
带./前缀的情况
% 生成的注释文件无类型注解 typer_core:run(#{mode => annotate, files => ["./test.erl"]}). % 输出: % Processing file: "./test.erl" % Saved as: "./typer_ann/test.ann.erl" % 原地注解操作无效果 typer_core:run(#{mode => annotate_in_place, files => ["./test.erl"]}). % 输出: % Processing file: "./test.erl" % Saved as: "./test.erl"
不带./前缀的情况
% 生成的注释文件包含正确的类型注解 typer_core:run(#{mode => annotate, files => ["test.erl"]}). % 输出: % Processing file: "test.erl" % Saved as: "./typer_ann/test.ann.erl" % 原地注解操作正常生效 typer_core:run(#{mode => annotate_in_place, files => ["test.erl"]}). % 输出: % Processing file: "test.erl" % Saved as: "test.erl"
递归处理当前目录的情况
% 递归处理当前目录,所有当前目录下的文件都无法生成注解 typer_core:run(#{mode => annotate_in_place, files_r => ["."]}). % 输出: % Processing file: "./test.erl" % Saved as: "./test.erl"
命令行 Typer 场景
带./前缀的情况
# 原地注解无效果 $ typer --annotate-in-place ./test.erl # 输出: # Processing file: "./test.erl" # Saved as: "./test.erl" # 递归当前目录,当前目录文件无注解 $ typer --annotate-in-place -r . # 输出: # Processing file: "./test.erl" # Saved as: "./test.erl"
正常工作的对照场景
# 不带前缀,原地注解正常生效 $ typer --annotate-in-place test.erl # 输出: # Processing file: "test.erl" # Saved as: "test.erl" # 子目录文件带./前缀,注解正常生成 $ typer --annotate-in-place ./typer_test/test.erl # 输出: # Processing file: "./typer_test/test.erl" # Saved as: "./typer_test/test.erl"
可能原因
该问题大概率是Typer在路径解析或模块关联环节的逻辑缺陷:当文件路径以./开头指向当前目录文件时,Typer可能没有正确将类型推断结果与目标文件绑定,或者在模块名匹配、路径规范化过程中出现了不一致,导致注解无法写入。
解决建议
- 规避路径写法:对当前目录下的文件,直接使用不带
./前缀的文件名(如test.erl)作为参数,绕过路径解析问题。 - 绕开递归参数限制:递归处理时,可通过
find命令配合xargs替代-r参数,比如:find . -maxdepth 1 -name "*.erl" -type f | xargs typer --annotate-in-place - 升级OTP版本:尝试升级到OTP 25的后续补丁版本(如OTP 25.3+)或更高主版本(如OTP 26),这类路径相关的bug通常会在后续版本中修复。
- 提交bug报告:如果需要官方修复,可整理上述复现步骤提交到Erlang/OTP的官方issue追踪系统,帮助开发团队定位问题。
内容的提问来源于stack exchange,提问作者Duncan Paul
相关产品推荐
相关产品推荐

