J'ai finalement repris l'élaboration d'un mode de message GitCommit que je veux ajouter à YI mais il semble me manquer quelque chose de basique. Je ne peux pas sembler faire correspondre un seul caractère dans une grammaire, toutes mes règles ne fonctionnent que si elles correspondent à la ligne entière. Je sais que cela doit être possible car d'autres grammaires dans YI le font évidemment mais faire la même chose ne semble pas fonctionner.
Je veux avoir un mode de commit qui ressemble finalement beaucoup à celui de vim. Une des choses utiles dans le mode de vim est la mise en évidence des mots-clés à l'intérieur des commentaires. Git met un tas d'informations à l'intérieur des commentaires dans presque tout ce qu'il fait (commit, rebase, etc.) donc c'est utile. Ce que j'ai pensé était de faire correspondre le caractère '#' de début dans les commentaires git et passer à un autre contexte qui correspondrait à des mots-clés. Cependant, je ne semble pas pouvoir faire une règle qui correspond juste au '#', la règle passe en style commentaire sur les lignes qui ne contiennent qu'un '#' mais sur les lignes qui contiennent quelque chose après le '#' cela ne passe pas en style commentaire.
Ce que j'ai actuellement est :
<0> {
\# { m (const $ LineComment) Style.commentStyle }
$commitChars*$ { c Style.defaultStyle }
}
{
$nl { m (const Digest) Style.defaultStyle }
· { c Style.regexStyle }
}
Détails évidemment omis. L'idée est de passer en mode 'lineComment' quand on voit un '#' et de stylistiquement différencier les choses jusqu'à ce qu'on voit la fin de la ligne. Selon la documentation et les exemples il devrait y avoir un moyen de faire ce que je veux. J'ai essayé pratiquement toutes les permutations auxquelles je pense pour le motif '#', mais rien ne change le comportement que je constate.
Quelle chose évidente est-ce que je rate?
Édit: Le code ci-dessus provient de l'implémentation à l'intérieur de ma branche YI. J'ai un analyseur autonome qui présente le même problème ici. Si vous exécutez alex GitCommit.x && ghc --make GitCommit.hs && ./GitCommit < shortmsg
vous verrez des lignes de commentaires avec du contenu analysées comme MessageLine
et des lignes de commentaires vides marquées correctement comme CommentStart
.