0__*_*0__ 14 scala scala-compiler
所以我googl'ed了一点,但除了稀疏之外没有其他信息:
-Yrangepos Use range positions for syntax trees.
Run Code Online (Sandbox Code Playgroud)
好.而且我知道如果我想在宏中捕获源片段,我需要使用它.
现在我的两个问题是:
当 makro 被拼写为 Burmak(r)o 时引入-Yrangepos
的问题是由您的用例引起的。
一个-X
选项表示永久性,而 a-Y
可能随时消失,这意味着它可能成为默认行为。
也许它没有因为错误和崩溃。
范围位置 [马丁]
尊重范围位置 - ide 中的衰减与打字机或解析器中的转换不尊重范围位置的事实有关
- 每次签入更改 - 自动检查范围位置
- 范围位置 = 不仅仅是一个位置点,而是开始和结束,包含在树节点中(RangePosition 是 Position 的子类)
- CompilationUnit 中有 RangePositions 的映射
不变量:
- 子节点的范围位置包含在父节点的范围位置中
- 无重叠(透明范围位置除外)
- rangepos 涵盖整个程序
问题:
- 模板
- 为了
检查文件包含位置
rangeposition(start,point,end).focus == offsetposition(point) // 脱离非重叠不变式
2012年PR验证-Yrangepos
频繁失败;它是固定的,但变成了夜间验证以减少资源。
休伯特提供了这些笔记:
关于 rangepos 的一些事情:
- 如果您尝试使用 'scalac -Ybrowse:typer -Yrangepos FILE.scala' 运行任何代码,您将看到大多数树都有范围位置。
- 有些没有,是的,这有点不幸,但我们正在努力改进这一点 - 实际上,每当您在 Yrangepos 模式中发现这样的情况时,它都可能是一个错误。情况从 2.9 到 2.10.0 快照有了显着改善。
- 句法树通常被分配偏移位置(这是你可能遇到的事情,但我必须看一个例子)
- 对于编译器,我们只关心范围位置是否有效直到(并包括)打字机。在那之后,我们不在乎。根据我所见,您在 refchecks 之后运行您的工具,这可能会干扰在 refchecks 中发生的一些转换,这些转换可以操纵/分配范围或偏移位置。
这似乎很容易切换到位置范围,因为基本的数学,但仍有漏洞像这样的演示所产生的额外劳动的合成或重组树时指定位置。
尽管表示编译器需要范围位置,但它们不在批处理编译的关键路径中。有了更多资源来提高健壮性,也许他们可以翻转开关。