VSCode是否在留下花括号时缩进

时间:2018-01-29 10:09:53

标签: javascript typescript visual-studio-code indentation

在VSCode中,当编写javascript / typescript时,我经常会写没有花括号的ifs。特别是对于早期退出。

foo() {
  ...
  if(...) 
     return;
  ...
  for(...) {
    ...
    if(...)
      continue;
    ...
  }
  ...
}

在VSCode中,返回/继续/我放在新行上的任何内容都不会缩进。有什么设置吗?

我只有Chrome扩展程序的图标和调试程序。

这是VSCode格式化的方式:

enter image description here

事实证明这不是唯一一个奇怪的缩进!

这看起来不错:

enter image description here

但是,如果我把args放在不同的行上。 (可能需要长变量名称):

enter image description here

该函数的其余部分最终缩进,文件的其余部分也是如此。

我尝试重新安装VSCode,没有帮助。

有什么建议吗?

1 个答案:

答案 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错误的风险。