在VSCode中,当编写javascript / typescript时,我经常会写没有花括号的ifs。特别是对于早期退出。
foo() {
...
if(...)
return;
...
for(...) {
...
if(...)
continue;
...
}
...
}
在VSCode中,返回/继续/我放在新行上的任何内容都不会缩进。有什么设置吗?
我只有Chrome扩展程序的图标和调试程序。
这是VSCode格式化的方式:
事实证明这不是唯一一个奇怪的缩进!
这看起来不错:
但是,如果我把args放在不同的行上。 (可能需要长变量名称):
该函数的其余部分最终缩进,文件的其余部分也是如此。
我尝试重新安装VSCode,没有帮助。
有什么建议吗?
答案 0 :(得分:2)
这不会回答你关于如何让VS Code做你想做的事情的问题,但如果我可以提供一些建议:省略花括号可能会很危险。这导致了Apple实施SSL的一个重大安全漏洞:臭名昭着的goto fail漏洞。
这是他们遇到麻烦的代码:
if ((err = SSLFreeBuffer(&hashCtx)) != 0)
goto fail;
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
看到问题?
大括号不是完美保护,以防止这样的错误,但它们肯定有帮助。使用它们时,你不太可能有自己的goto fail
错误。
一些开发人员(包括我自己)认为,当您将if
语句写为单行时,可以省略大括号 。如果你只是提前退出一个函数,这很好:
if( ... ) return;
当它在单行上时,你创建goto fail
错误的可能性要小得多。但是当你把它分成两行时,需要花括号:
if( ... ) {
return;
}
或:
if( ... ) {
console.log( 'debug message' );
return;
}
让我们尝试没有花括号。首先我们有:
if( ... )
return;
不用担心,此代码按预期工作。现在让我们添加调试消息:
if( ... )
console.log( 'debug message' );
return;
糟糕!
由于您将开放的花括号放在与if
语句相同的行上(我完全同意),因此只需要额外增加一行来添加结束花括号。要么让你的早期回归单行,要么使用花括号。这样可以避免最终导致goto fail
错误的风险。