Manipulate markers in Frama-C ACSL annotations properly

Merged
JS
2mo ago
+353-51

Summary by cubic

Splits glued closing */ markers in Frama-C ACSL annotations onto their own line, and fixes the packer deleting a rule run stranded at a paragraph's end.

ACSL closer handling

  • Moves a glued */ onto its own line, aligned under the opener's *, while keeping every token of the annotation intact.
  • Whitespace between the last clause and the closer moves with it; whitespace inside the body is never touched.
  • Vetoes the split for trailing annotations, bare CRs, interior cppcheck suppressions, and closer spellings already using @*/.

Rule borrowing fix

  • Tries every split point (not just one word) when borrowing from the line above, and folds a stranded rule run onto that line so the next pass can't remove it.