1.5 KiB
1.5 KiB
date
date |
---|
2025-07-22 17:00 |
#programming-language
一般的なコードフォーマッターの実装について。
1行当たり最大文字数がこのくらい、としたときに、どういう戦略で折り返すかは結構難しい問題。
文字列→トークン→ASTという順番で変換されるので、この逆順が良いのかとも思ったが、
AST→フォーマッタ用の専用の木構造みたいな中間表現を一度挟んだほうが賢いのかもしれない
Rustのprettyクレートがコンビネーターとして定義してあるやつ
Tree-sitterを使った汎用フォーマッターTopiaryとかいうのもある
Exprの途中に差し込まれたトリビア(主にコメント)をどうやって抽出するか
ExprNodeIdに対するSecondary MapがSpanに対して作れているのだから、Trailng Triviaとしてコメントを保持するのは一応できるか?
パーサコンビネータでどうにか処理できるもんか?
fn parse_expr_top<Output>()->impl Parser<Token,Output,Error>{
not(comment()).padded_by(comment().repeated())
}
map_with
使えばいけるかしら
Stateにトリビアを書き込んでおけばいいのか