javascript - VSCode 如果省略大括號時縮排
在 VSCode 中,當寫 JavaScript/TypeScript 時,我經常寫沒有花括號的 if 語句。特別是用於提前退出的情況。
foo() {
...
if(...)
return;
...
for(...) {
...
if(...)
continue;
...
}
...
}
在 VSCode 中,我在新行上輸入的 return/continue/其他符號不會自動縮排。這有相關的設定嗎?
我只有圖示和 Chrome 延伸功能的偵錯工具。
這是 VSCode 格式化的方式:
事實上,結果發現這並不是唯一出現的奇怪縮排!
這看起來還可以:
但是,如果我將參數放在不同的行上。(對於較長的變數名稱可能是必需的):
那個函數的其餘部分最終會被縮排,檔案的其餘部分也是如此。
我已經嘗試重新安裝 VSCode,但沒有幫助。
有什麼建議嗎?
答案#1
這不會回答你如何讓 VS Code 做你想要的事情的問題,但如果我可以給一些建議:省略大括號可能是危險的。它導致了蘋果在 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錯誤的風險。


