Roslyn 中区分前导和尾随琐事的设计决策是什么?

问题描述 投票:0回答:1
在 Roslyn 中,每个语法标记都有与之相关的前导和尾随琐事。添加

both前导和尾随琐事,而不是单独前导琐事和 EOF 空标记的决定是什么?

两者的存在是否比单一类型的琐事提供一些优势?

简单的谷歌搜索告诉我,第一个 roslyn 于 2011 年发布,而第一个 Typescript 于 2012 年发布。在 Roslyn 之前,没有“琐事”的概念,所以我认为 TS 的一些工作是基于 Roslyn 的。

TS 官方 github 上的这条评论证实了,在 TS 中只有尾随琐事。

基于此,我得出的结论是,Roslyn 中最初区分前导琐事和尾随琐事的做法是一个错误,TS 解决了这个问题。这是正确的吗?

我的直觉告诉我,TS 采用的模型更容易维护(例如,在处理前一个令牌的尾随琐事和下一个令牌的前导琐事时没有边缘情况)。

c# typescript roslyn
1个回答
0
投票
同时拥有两者的原因是为了使编写重构变得更容易。例如,考虑您的重构是“删除未使用的本地”;你想如何处理评论?在这种情况下:

// This boolean stores whether we have connected bool connected; int bytesReceived;
用户可能希望注释能够逻辑地应用于布尔值,因此它会被视为主要琐事。在这种情况下:

bool connected; // This boolean stores whether we have connected int bytesReceived;
它现在是尾随琐事,但仍然附加到局部变量,您可能在逻辑上认为它附加到。

现在,在很多情况下启发式不起作用,我们的决定是保持解析器的逻辑一致,而不是添加一堆特殊情况。最后,我们确实必须在 IDE 中创建一堆辅助方法来处理这些情况。我们的团队座右铭最终变成了“琐事并非微不足道”。

© www.soinside.com 2019 - 2024. All rights reserved.