我正在寻找一种类似C(++)#if 0
的方法,能够注释掉整个Scala源代码,以便暂时保留实验或过期代码。
我尝试了几种替代方案,并希望听到您使用的内容,以及是否有更好的方法?
// Simply block-marking N lines by '//' is one way...
// <tags> """ anything
我的编辑器让这很简单,但事实并非如此。它很容易与实际的一行评论混合在一起。
然后我认为有原生的XML支持,所以:
<!--
... did not work
-->
在XML中包装有效,除非您在块中有<tags>
:
class none { val a= <ignore>
...
cannot have //<tags> <here> (not even in end-of-line comments!)
</ignore> }
对于多行字符串来说,这似乎是最好的,但是有很多样板(在Scala中不是时髦的)来取悦编译器(如果你在一个类或一个对象中这样做,那就少了):
object none { val ignore= """ This seems like
...
<truly> <anything goes> but three "'s of course
""" }
“正确”的方法可能是:
/***
/*
... works but not properly syntax highlighed in SubEthaEdit (or StackOverflow)
*/
***/
..但仅匹配/*
和*/
,而不是/***
与***/
。这意味着块内的注释需要平衡。而且 - 目前SubEthaEdit的Scala语法高亮模式在这方面失败了。
作为对比,Lua --[==[
匹配]==]
等等。我想我被宠坏了?
那么 - 我正在监督一些有用的技巧吗?
答案 0 :(得分:5)
为什么不直接使用源代码控制机制?保持代码分开,将其作为单独的文件检查并忘记它。我不希望我的日常代码库充满了这种东西。
但请注意,如果您不经常使用此代码(例如在自动化测试等中),则会受到code rot的影响。一旦你评论或以其他方式搁置这些东西,依赖关系将继续前进,你会发现它不久就不会链接到现有的代码库。
答案 1 :(得分:4)
我修改了Scala模式的SyntaxDefinition.xml
以支持/***...***/
样式评论。
这与Scala解析器对嵌套/*...*/
注释的支持不同,但我没有找到一种方法来表达我的编辑器。
如果有人想要这样做,请点击:
<!-- AK 30-Nov-2012
-
- The Scala parser handles nested '/*...*/' style comments, but the SEE
- syntax highlighting seems not.
-
- We introduce '/***...***/' style comments (starting with three asterisks
- since JavaDoc uses '/**..*/' style) and deeper levels, to be used for
- blocking out code blocks, even if they contain '/*..*/' comments within.
-
- Note: Original comment handling misses a 'type="comment"' field. Is that vital?
-
- Test: If this works right, the following will be highlighted as a single comment:
- <<
- /***
- */
- ***/ <- green, not black (note: Scala parses these differently; this is just to test the mode)
- <<
-->
<state id="Multilevel Comment AK" color="#236E25" type="comment" font-style="italic">
<begin><regex>/\*\*(?'commentCatch'\*+)</regex></begin>
<end><regex>(?#see-insert-start-group:commentCatch)\*\*/</regex></end>
<import mode="Base" state="EmailAndURLContainerState" keywords-only="yes"/>
</state>
您可能还想将type="comment"
添加到现有的几条评论突出显示规则中。我不确定这是否至关重要(除了Scala之外的其他模式)。
有关SubEthaEdit modes的信息。
答案 2 :(得分:3)
还有一个选项,你已经遗漏了。任何类型的评论都有禁用语法突出显示的缺点,以及不包含在IDE重构(Emacs + Ensime,IDEA,Eclipse等)或其他代码智能工具中,因此我更喜欢以下方法:
def ignore(block: => Any) = ()
def ignoreIf(cond: Boolean)(block: => Any): Unit = if (!cond) block
ignore {
// experimental and/or disabled code
syntaxHighlightingEnabled(true, 3, "foobar")
}
ignoreIf(SomeFeatureEnabled) {
// experimental and conditionally enabled code
syntaxHighlightingEnabled(true, 3, "foobar")
}
答案 3 :(得分:0)
我使用&#39;删除程度&#39;。 (1)评论出来。 (2)如果它的代码我不再需要但可能在以后/其他地方找到有用的,我有一个&#39; .boneyard&#39;文件夹我抛出代码片段(就在生产源代码树之外) - 非常方便。 (3)只要删除它,并依赖源控制,如果事实证明我毕竟需要它。
答案 4 :(得分:0)
受我使用的Lua编程语言启发:
def */ = () // noop function, def or val
/*
println("Hello world!")
// more code
*/
要启用整个代码块,只需在“ / *”上添加一个“ /”即可,即
def */ = () // noop function
//*
println("Hello world!")
// more code
*/
现在它会显示“ Hello world!”。