annotaterb commit log (20260510)

annotaterb commit log (20260411) | odentakashi からの差分コミットログを読みました。


Migrate issue templates to folder-based format (#320) · drwl/annotaterb@05af4be

Issue テンプレートが.github/ISSUE_TEMPLATE.mdのように単一ファイルとして配置されていましたが、これは以前の書き方であり Issue テンプレートが反映されていませんでした。
反映させるために .github/ISSUE_TEMPLATE/ の配下に複数ファイルを置く形式に修正しています。


Add unit tests for AnnotateRb::Helper by OdenTakashi · Pull Request #321 · drwl/annotaterb

annotation のそれぞれの文字に対して横幅などを計算する module である AnnotateRb::Helper のテストを追加しています。


fix potential ReDoS in route annotator regex by OdenTakashi · Pull Request #325 · drwl/annotaterb

routes.rbへの annotation 付与時の処理内にて、コメント行かを判断する正規表現マッチングにおいて、ReDos の可能性があったものを修正しています。

元々は /\s*#/ という正規表現を使っていたため、各位置から「空白が0個以上あり#がある」という条件を探すため、大量のマッチングが行われる可能性がありました。
ただ、基本的には先頭から見れば十分であるため、/\A\s*#/ のように先頭をしていするアンカーを追加しています。


Fall back to current task when no top-level task is set by jordan-brough · Pull Request #328 · drwl/annotaterb

Rake の CLI parser を経由しない形で Rake タスクが実行された際に、top_level_tasks が取得できずエラーになっていた問題を修正しています。

下記のように、Ruby のコードとして呼ばれた場合に、top_level_tasks が取得できないため現在実行している task を取得し、そこに annotaterb のエンドポイントを叩く処理を enhance するように対応しています。

$ rails runner '
    require "rake"
    Rails.application.load_tasks
    Rake::Task["db:migrate"].invoke
  '

Preserve indentation when re-running annotaterb on nested-position annotations. by yamat47 · Pull Request #333 · drwl/annotaterb

--nested-positionオプションを使用して、annotation を付与し、再度同様のコマンドを実行した際に annotation が更新されてしまう問題を修正しています。
またその問題に加え、--nested-positionオプション使用時にスキーマが追加された場合に、indent がうまく入らない問題があり、それも修正されています。

原因としては、--nested-positionオプションを利用して再実行した際、diff の判定がうまくいかずスキーマ情報は変わっていないにもかかわらず別物として扱われてしまい、更新されてしまっていました。

ここでは、diff 判定を修正し、新たに annotation 付与時に indent を追加するよう修正しています。


Fix annotation placement in nested files and around trailing user comments by yamat47 · Pull Request #334 · drwl/annotaterb

以下の2つの問題を修正しています。

  • annotation に手動で付与されたコメントをannotationの終端として扱ってしまう
  • require などの上に annotation が追加されてしまう

1つ目に関しては、終端コードである # を起点にして annotation の範囲を絞っていましたが、それだとユーザーのコメントも削除されてしまうため、下記のものに該当するかで終端を判定するようにしています。\

  • #
  • schema information 系の header
  • indexes / Foreign Keys / Check Constraints などの見出し文言
  • #後に 2 つの空白があるか

こうすることでユーザーのコメントを annotation と認識しないように修正しています。

2つ目に関しては、annotation 開始位置判定ロジックから require, require_relative, load などを除外し、class, module からのみ判定するように修正しています。


Fix --show-migration option not working on Rails 7.2+. by OdenTakashi · Pull Request #327 · drwl/annotaterb

--show-migrationオプションが Rails7.2+ で動いていなかった問題を修正しています。

migration_contextAPI が ConnectionAdapter から ConnectionPool に移動したので、それに追従し Rails7.2 以前では ConnectionAdapter に fallback させ、7.2+ では ConnectionPool を見るように修正しています。


Respect `--config-path` during config loading by OdenTakashi · Pull Request #331 · drwl/annotaterb

--config-pathオプション使用時に、指定した path の config ファイルを見にいかないバグの修正をしています。

--config-pathオプションを parse する前に、設定ファイルを読み込んでいたため、指定した path を先に parse してそちらの path から設定を読み取るように修正しています。


Exit with non-zero code when database is not accessible by OdenTakashi · Pull Request #326 · drwl/annotaterb

DB 接続が存在しないエラーを握りつぶしていたため、0 コードが返ってしまっていた問題を修正しています。


Support opt-in display of PostgreSQL enum types in annotations by OdenTakashi · Pull Request #324 · drwl/annotaterb

PostgreSQL 使用時かつ、enum 型を使用している際にオプトインで enum の annotation を出力するオプションを追加しています。

# == Schema Information
#
# Table name: orders
#
#  id      :bigint           not null, primary key
#  status  :enum             not null, enum_type: order_status
#  billing :enum             enum_type: billing_method
#
# Enums
#
#  billing_method  agency_bill, direct_bill_to_insured
#  order_status    pending, shipped, delivered
#

Drop Ruby < 3.3 from CI matrix by drwl · Pull Request #335 · drwl/annotaterb

EOL を迎えているため、CI matrix から Ruby3.0, 3.1, 3.2 を削除しています。