簡體   English   中英

搜索並替換沒有大括號的if語句以包括大括號

[英]Search and replace if statements without braces to include braces

我最近一直在使用聲納進行代碼分析。 當我徹底違反鑽取時,我發現許多帶有if語句的java文件沒有大括號(數千個地方)。 是否有一種簡單的方法可以替換或添加if語句的大括號,或者我可以執行哪些步驟來完成此任務,而無需在每個文件中手動執行。

我目前正在使用intelliJ。

是否有一種簡單的方法可以替換或添加if語句的大括號,或者我可以執行哪些步驟來完成此任務,而無需在每個文件中手動執行。

我不知道是否有自動執行此操作的工具。 (可能有...)但是假設存在這樣的工具,我不相信這是正確的方法。

退一步,考慮為什么代碼分析報告這是一個問題。 很多人(比如@pst和我)認為括號總是應該在那里,即使各種風格指南都不堅持這一點。 這有一個很好的理由......除了“它看起來很難看”。 請考慮以下示例代碼段:

if (i == 1) 
    i++;
    doSomething();

while (i < 1)
    i++;
    doSomething();

如果你不仔細閱讀那些,你的眼睛會欺騙你認為doSomething(); 有條件地稱為...由於不正確的縮進。 它發生了。

(除此之外:因誤讀代碼沒有幫助而將某人標記為“無能為力”。如果你拼命想要解決一個停止錯誤並且你已經連續工作了14個小時,那么你很可能會錯過這種事情並不是因為你是無能為力的。一旦你遇到過這種情況,這一課就會陷入......)

好的,現在假設你運行一個自動工具來添加大括號。 你會得到的是:

 if (i == 1) {
    i++;
 }
    doSomething();

 while (i < 1) {
    i++;
 }
    doSomething();

它意味着與原始代碼完全相同。 但是 ......如果原始代碼實際上是一個錯誤怎么辦? 如果程序員希望 doSomething()調用是有條件的,該怎么辦?

簡而言之,通過自動添加括號,我們掩蓋了原始程序員的意圖,並使這些錯誤更難以追蹤。


底線 - 我認為手動審查每一個事件是謹慎的 ......而不是僅僅自動“修復”它們。 事實上,我認為如果你沒有時間或耐心手動審查它們,最好不要單獨留下代碼。 最好關掉警告...... IMO。

我可以重新格式化代碼以使intelliJ為我做的事情,但我需要瀏覽所有文件並重新格式化。 是的,我可能會關閉支票,但想知道是否有一個很好的工具來完成任務。 我有一套很好的測試來檢查它是否在這個過程中引入了bug。

如果您確定有一些方法可以測試不會引入錯誤,那么請使用IntelliJ 重新格式代碼功能。

只需確保您在IntelliJ中的代碼樣式符合您公司的政策。 否則你也會把你的風格強加給別人。

要強制括號只是將它們標記為Always在在的IntelliJ的代碼樣式設置對話框中的包裝和標簽大括號

在項目視圖中標記源文件夾,然后按Ctrl-Alt-L 彈出一個對話框,您可以在其中選擇All files in directory <...>

然后按Run並查看會發生什么。 如果您不滿意,請從您的VCS恢復。

IntelliJ IDEA也對此進行了檢查,並且可以快速修復以自動添加括號。

調用Analyze | Run Inspection by Name Analyze | Run Inspection by Name並輸入檢驗名稱Control flow statement without braces 在項目的所需部分上運行它。 在檢查結果中,您可以將快速修復Add braces to statement

請注意,此檢查還將報告除if之外的控制流語句,例如while語句。 調用快速修復程序還會為這些語句添加大括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM