raiki_dev’s blog

右も左も分かりませんが、よろしくお願いいたします。

vscode-plantumlのフォーマッタでbreakを使うと崩れる

breakが崩れる

breakを使うとインデントが崩れた。。 下記は公式のissueでまだcloseされていない。 そもそも公式の見解としては致命的な問題があるので、vscodeの設定で保存時自動フォーマットの設定をONにしていると、フォーマットが機能しないようになっている。 それでもフォーマット使いたかったので、一旦自動保存フォーマットの設定をOFFにしてみたが、案の定問題に遭遇したという経緯

The 'break' keyword causes problems when formatting · Issue #477 · qjebbs/vscode-plantuml · GitHub

issueによると、以下のようで解決が難しそう。 breakの代案としてlabelを使ってみたが、うまくいかない場合が多いので断念。

アクティビティ図のbreakが崩れる例についてはチケットを参考に。

Before formatting:

@startuml
start
repeat
    if (Abort?) then (yes)
      :Cleanup;
      break
    endif
    :Do Something;
repeat while (Completed?) is (no)
stop
@enduml

After formatting:

@startuml
start
repeat
  if (Abort?) then (yes)
    :Cleanup;
    break
    endif
    :Do Something;
  repeat while (Completed?) is (no)
  stop
  @enduml

ソースコードの「FormatRules.ts」を少し確認しました。 この問題は、PlantUMLの「break」キーワードがシーケンス図ではブロックキーワードであるが、アクティビティ図ではブロックキーワードではないことが原因です。 しかし、キーワードベースのフォーマッタでは、同じキーワードを異なるコンテキストとして考慮する必要があるため、この問題を解決するのは簡単ではないようです。

while(名前)が崩れる

before

while(フラグがtrueになるまで)
        :処理;
endwhile

after

while
        (フラグがtrueになるまで)
        :処理;
endwhile

別の記事でも崩れる事例あり

別の日本の記事でもフォーマットが崩れる事案があった。

VS CodeでPlantUMLのフォーマットを行うとインデントが崩れる場合の回避方法

結論

おとなしくフォーマッタを切るしかないのかな。。。。。。。。。。