リストアイテム単体のフォーマット解除が正しく動作するよう修正

basecamp/lexxy

Lexxy のリストツールバーで、複数項目からなるリストのうち 1 つだけの箇条書きを解除しようとすると、リスト全体が段落に変換されてしまうバグを、選択範囲の拡張ロジックを修正して解消しました。

背景

問題は、リスト内の単一アイテムだけに対してリスト解除操作を行っても、リスト全体が平坦化されてしまう点にあります。 ユーザーが中間項目にカーソルを置いてツールバーの箇条書きボタンをクリックすると、期待通りその行だけが <p> に変換されず、残りの項目までが段落へ変換されていました。この挙動はエディタの粒度の細かい編集を阻害し、実務での利用体験を著しく損ねていました。

根本原因は、`applyParagraphFormatが内部で呼び出す$expandSelectionToLineBreaksAndSplitAtEdgesが、リスト内でフォールバックとしてnode.getTopLevelElement()` を使用していたことです。 getTopLevelElement() はリスト項目の親である ListNode を返すため、選択範囲がリスト全体に拡大され、続く **$setBlocksType** がすべての項目を段落に変換していました。

この問題を修正することで、リスト内の任意の項目だけを独立した段落に変換でき、エディタの操作感が向上します。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
deacf429

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文、背景での問題・原因・修正の説明、そして結論的な効果が記述されており、総論→各論→結論の構成が満たされています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

カスタムMarkdown構文の誤りはなく、コードブロックやGitHubリンクの記法に問題はありません。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

エンジニア向けに専門用語と実装詳細が記載されており、過度な初心者向け説明はありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各段落がトピックセンテンスで始まり、1段落1トピック、適切な長さで空行で区切られています。

Diff内容との照合 ⚠ WARNING

コードブロックとDiff内容の一致

記事本文にコードブロックがなく、Diffの具体的な変更が直接提示されていません。記述はDiff内容と合致していますが、コード例が欠如している点が改善点です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

PRで使用されている関数名や変数名が正確に記事内で使用されており、誤用はありません。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

問題点、根本原因、修正内容がPRの説明と一致しており、技術的に正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事の全ての主張がPRのタイトル、説明、Diffで裏付けられており、ハルシネーションは検出されません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

数値や固有名詞の誤りはありません。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトルはPRの内容(単一リスト項目のフォーマット解除修正)を適切に表現しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

PRに記載されていない外部情報は記事に含まれていません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

時間表現に関する記述はなく、矛盾はありません。