Skip to content

Références de liens : prendre en compte les définitions dans les blockquotes et colonnes - #48

Merged
jmcollin merged 1 commit into
mainfrom
fix/link-definitions-in-containers
Oct 8, 2026
Merged

jmcollin merged 1 commit into
mainfrom
fix/link-definitions-in-containers

Conversation

@jmcollin

@jmcollin jmcollin commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Problème

Une définition de lien placée dans un blockquote ou dans un bloc :::columns était perdue sans erreur, et toutes les références vers elle restaient du texte littéral :

[foo]

> [foo]: /url

Sortie avant : <p>[foo]</p>. Attendu : <p><a href="/url">foo</a></p>.

La cause : le contenu des conteneurs n'est lexé qu'au moment de construire le bloc, donc après la collecte des définitions. parseBlocks() ignorait ensuite ces tokens LINK_DEFINITION.

Correctif

extractLinkDefinitions() parcourt aussi les séquences de blockquote et les conteneurs de colonnes. Il lexe leur contenu (récursivement, profondeur plafonnée à 32) et enregistre les définitions trouvées dans l'ordre du document. Selon CommonMark §4.7, les définitions sont globales. La première définition gagne toujours, et le contrôle de sécurité des URL est inchangé (test dédié avec javascript:).

Tests

  • Nouveau tests/Integration/NestedLinkDefinitionTest.php (6 cas) : blockquote, blockquote imbriqué avec titre, colonne, usage dans la même citation, priorité de la première définition, URL dangereuse rejetée.
  • Spec CommonMark : Link reference definitions 13/27 → 14/27, sans régression (389 → 390/652).
  • PHPUnit OK, PHPStan et Psalm sans erreur.

Note : cette PR et #47 touchent toutes deux extractLinkDefinitions(), mais pas les mêmes lignes. Un conflit éventuel serait trivial.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CPcuaaxrCottkeL1ykoSWe


Generated by Claude Code

Container content is lexed per block, after reference definitions have
been collected, so a definition inside a blockquote or a column was
silently dropped and every reference to it stayed literal text.

extractLinkDefinitions() now also walks blockquote runs and columns
containers (lexing their content, recursively, depth-capped) and
registers the definitions found there in document order. Definitions
are global per CommonMark §4.7; first definition still wins and the
URL safety check is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPcuaaxrCottkeL1ykoSWe
@jmcollin
jmcollin merged commit e79f347 into main Oct 8, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants