VSCode 如果省略大括号时缩进

joo*_*ool 7 javascript indentation typescript visual-studio-code

在 VSCode 中,在编写 javascript/typescript 时,我经常编写不带大括号的 if。特别是对于提早退出。

foo() {
  ...
  if(...) 
     return;
  ...
  for(...) {
    ...
    if(...)
      continue;
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

在 VSCode 中,返回/继续/无论我放在新行上的内容都不会缩进。有这方面的设置吗?

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

这是 VSCode 格式化它的方式:

在此输入图像描述

事实上,这并不是唯一发生的奇怪的缩进!

这看起来不错:

在此输入图像描述

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

在此输入图像描述

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

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

有什么建议么?

Mic*_*ary 3

这不会回答您关于如何让 VS Code 执行您想要的操作的问题,但我可以提供一些建议:省略花括号可能很危险。它导致 Apple 实施 SSL 时出现重大安全缺陷:臭名昭著的goto 失败错误。

这是他们遇到麻烦的代码:

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;
Run Code Online (Sandbox Code Playgroud)

看到问题了吗?

大括号并不能完美地防止此类错误,但它们确实有帮助。goto fail当您使用它们时,您出现错误的可能性要小得多。

一些开发人员,包括我自己,认为只有当您将if语句写成一行语句时才可以省略大括号。如果您只是简单地从函数中提前退出,那么这样就可以了:

if( ... ) return;
Run Code Online (Sandbox Code Playgroud)

goto fail当它位于一行上时,产生错误的可能性要小得多。但是当你把它分成两行时,花括号是必需的:

if( ... ) {
    return;
}
Run Code Online (Sandbox Code Playgroud)

或者:

if( ... ) {
    console.log( 'debug message' );
    return;
}
Run Code Online (Sandbox Code Playgroud)

让我们尝试一下不带花括号的情况。首先我们有:

if( ... )
    return;
Run Code Online (Sandbox Code Playgroud)

不用担心,这段代码可以按预期工作。现在让我们添加调试消息:

if( ... )
    console.log( 'debug message' );
    return;
Run Code Online (Sandbox Code Playgroud)

哎呀!

由于您已经将左大括号与语句放在同一行if(我完全同意),因此只需要多花一行来添加右大括号。要么让你的早期返回单行,要么使用花括号。goto fail这将避免您自己最终出现错误的风险。

  • 感谢您的回答,我明白您的意思,但我并不是在寻找有关编码风格的建议。我更喜欢用这种方式编码,而且在 20 多年的编码生涯中我从未犯过这样的错误。具有自动缩进功能的编辑器或多或少使这变得不可能。我想避免使用大括号,因为我认为它们使代码更难阅读,而且我不喜欢内联返回/继续,因为它们最终可能会出现在文件的右侧。 (2认同)