Я наконец-то вернулся к конкретизации режима сообщений GitCommit, который я хочу добавить в YI, но мне кажется, что мне не хватает чего-то базового.Кажется, я не могу сопоставить один символ в грамматике, все мои правила работают, только если они соответствуют всей строке.Я знаю, что это должно быть возможно, потому что другие грамматики в YI, очевидно, делают это, но делать то же самое, похоже, не работает.
Я хочу иметь режим фиксации, который в конечном итоге будет очень похож на режим vim,Одна из полезных функций в режиме vim - выделение ключевых слов внутри комментариев.Git помещает кучу информации в комментарии почти во всем, что делает (коммит, ребазинг и т. Д.), Так что это полезно.Мое мышление соответствовало начальному символу «#» в комментариях git и переключалось в другой контекст, который будет соответствовать ключевым словам.Однако я не могу создать правило, которое соответствует просто '#', правило переключается на стиль комментария в строках, которые only содержат '#', но в строках, которые содержатвсе, что после '#', не меняет стили.
То, что у меня сейчас есть, это:
<0> {
\# { m (const $ LineComment) Style.commentStyle }
$commitChars*$ { c Style.defaultStyle }
}
<lineComment> {
$nl { m (const Digest) Style.defaultStyle }
· { c Style.regexStyle }
}
Детали опущены, очевидно.Идея состоит в том, чтобы переключиться в режим 'lineComment', когда мы увидим '#' и по-разному оформляем вещи, пока не увидим конец строки.Согласно документации и примерам, должен быть способ сделать то, что я хочу.Я попробовал почти все перестановки, которые я могу придумать для шаблона '#', но ничего не меняет поведение, которое я вижу.
Что очевидного мне не хватает?
Редактировать: приведенный выше кодот реализации внутри моей ветви YI.У меня есть автономный анализатор, который показывает ту же проблему здесь .Если вы запустите alex GitCommit.x && ghc --make GitCommit.hs && ./GitCommit < shortmsg
, вы увидите строки комментариев с содержимым, проанализированным как MessageLine
, и пустые строки комментариев, отмеченные правильно CommentStart
.