HTML 5 defines what a conforming parser should do in the face of invalid markup. Cunning.
Related Posts
Counter-intuitively, if you're writing a parser for a programming language, you need it to be a total function. As soon as you build IDE tooling, you need ASTs from invalid or incomplete input.
The parser should return (Ast, List<Error>) rather than Result<Ast, Error>.
Today I learnt that you can mix HTML inline in markdown! For example, the following is valid.
Foo <hr/>
I'd assumed that you needed HTML separately, like ``` blocks, but no: https://spec.commonmark.org/0.31.2/#raw-html
Admittedly HTML is very restricted on most sites, but it's helpful for SSGs.
I'm a huge fan of Swift's 'Error Handling Rationale' design document: https://github.com/swiftlang/swift/blob/9315673c003875158852579bd1f33480cdec5461/docs/ErrorHandlingRationale.md#fundamentals
It carefully defines terminology and compares with other languages, so you can understand Swift's position and preference in the design space.