在 VSCode 中,在编写 javascript/typescript 时,我经常编写不带花括号的 ifs。特别是对于提前退出。
foo() {
...
if(...)
return;
...
for(...) {
...
if(...)
continue;
...
}
...
}
在 VSCode 中,return/continue/我放在新行上的任何内容都不会缩进。有什么设置吗?
我只有图标和 Chrome 扩展程序的调试器。
这是 VSCode 格式化它的方式:
事实证明,这并不是唯一发生的奇怪缩进!
这看起来不错:
但是,如果我将参数放在不同的行上。 (长变量名可能需要):
该函数的其余部分最终缩进,文件的其余部分也是如此。
我尝试重新安装 VSCode,但没有帮助。
有什么建议吗?
最佳答案
这不会回答您有关如何让 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
错误的风险。
关于javascript - VSCode 如果在省略大括号时缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498740/