Итак, я заметил, что на моём экземпляре есть некоторые существующие чек-листы, в которых используется старый синтаксис со звёздочками. Я решил запустить указанную задачу rake, но они не обновляются.
Насколько я помню, большинство других чек-листов были автоматически перенесены на новый синтаксис в процессе обновления Discourse за последние несколько недель. Но, похоже, есть некоторые странные случаи, которые задача rake оставляет без изменений. У кого-нибудь есть идеи, почему это может происходить?
Готов предоставить дополнительную информацию, если это поможет в отладке.
Обновление: Похоже, что в одном из таких постов использовался синтаксис [\*] (тот, который автоматически генерируется при отметке чекбокса в интерфейсе). Возможно, именно этот случай не обрабатывается задачей rake?
Эта строка должна срабатывать, если чекбокс находится в первых трёх символах строки. Я только что проверил регулярное выражение, и оно, похоже, корректно сопоставляется.
Разве списки задач всегда начинаются с маркера пункта (* или -)? [1, 2] Следовательно, регулярное выражение должно соответствовать: - [\*]
Из-за этого такой случай пропускается, так как теперь он не находится в первых трёх символах.
Позже я нашёл другие случаи, когда у меня есть вложенные флажки. Таким образом, предположение о том, что они находятся в начале строки, приведёт к пропуску множества валидных сценариев использования.
PS: Я осознал, что автор оригинального поста здесь не использует синтаксис списков задач GFM (хотя это изменилось 4 августа после обновления вики пользователем @sam), но я использую его уже очень давно. Спецификация CommonMark, на которую, похоже, опирается Discourse в своей документации по Markdown, пока что не поддерживает списки задач. Неужели Discourse придумывает свой собственный вариант синтаксиса списков задач? Я бы предпочёл придерживаться широко распространённого синтаксиса GFM, а не создавать новые вариации.
Извините, это может сбить с толку, так как недавно всё изменилось. Я имею в виду скриншот, показанный на странице плагина, который не отображает синтаксис маркированного списка задач (и который, похоже, не поддерживается задачей rake migrate):
Вот скриншот с разницей, который иллюстрирует это изменение:
Трудно разглядеть, но слева есть маркированные чекбоксы, тогда как справа на текущей версии маркеры убраны, что предполагает другой синтаксис чекбоксов по умолчанию для новых пользователей.
Добавлено позже:
Иными словами, теперь плагин checklist поддерживает все следующие варианты:
[] first
-[] second
- [] third
отображается как:
first
- second
third
В то время как спецификация GFM tasklist допускает только третий вариант (поскольку tasklist является списком):
Маркер элемента списка задач состоит из необязательного количества пробелов, левой квадратной скобки ([), либо пробельного символа, либо буквы x (в нижнем или верхнем регистре), а затем правой квадратной скобки (]).
Если кто-то хочет соответствовать спецификации расширения GFM tasklist, то первые два варианта не должны быть разрешены и не должны продвигаться в документации плагина.
Поддержка случая GFM не означает отказ от поддержки других случаев. Если бы вы применили эту логику дальше, это потребовало бы множества негативных изменений в том, как Discourse обрабатывает все виды форматирования Markdown.
Существует множество приложений, которые генерируют чекбоксы в формате Markdown; очень удобно иметь возможность вставлять списки в сообщения Discourse. Какой смысл нарушать совместимость?
Одна из главных проблем Markdown — отсутствие единого стандарта (над этим работает CommonMark), что приводит к множеству несовместимых реализаций. Раз уже существует крайне популярное расширение для чек-листов в виде GFM, зачем нужно изобретать ещё одно? У меня сложилось впечатление, что разработчики Discourse заинтересованы в CommonMark и стандартизации Markdown.
Моя проблема не в поддержке альтернативного синтаксиса — я верю в закон Постела (хотя считаю, что вышеупомянутый вопрос следовало учесть при внесении последних изменений в синтаксис, то есть при переходе от [*] к [x]). Проблема в том, что в документации плагина продвигается несовместимый с GFM синтаксис, а также отсутствует поддержка лёгкой миграции синтаксиса списков задач, похожего на GFM, в новый формат. Это привело к поломке множества моих страниц на моём экземпляре Discourse, см. мой первый пост.
Мы действительно внесли изменения, чтобы упростить синтаксис. Теперь вы можете использовать [] в любом месте поста для создания флажка. Мы не планируем снова менять это в ближайшее время. Однако вы вполне можете создать форк плагина и реализовать то, что вам нужно.