Должен ли Checklist поддерживать синтаксис чекбоксов GFM?

Итак, я заметил, что на моём экземпляре есть некоторые существующие чек-листы, в которых используется старый синтаксис со звёздочками. Я решил запустить указанную задачу rake, но они не обновляются.

Насколько я помню, большинство других чек-листов были автоматически перенесены на новый синтаксис в процессе обновления Discourse за последние несколько недель. Но, похоже, есть некоторые странные случаи, которые задача rake оставляет без изменений. У кого-нибудь есть идеи, почему это может происходить?

Готов предоставить дополнительную информацию, если это поможет в отладке.

Обновление: Похоже, что в одном из таких постов использовался синтаксис [\*] (тот, который автоматически генерируется при отметке чекбокса в интерфейсе). Возможно, именно этот случай не обрабатывается задачей rake?

4 лайка

@k4rtik, если я не ошибаюсь, задача rake изменяет только флажки в начале строки.

Все страницы, которые я вижу, имеют флажки в начале строки. Вопрос в том, меняет ли задача как [*], так и [\*], или только первый синтаксис?

Эта строка должна срабатывать, если чекбокс находится в первых трёх символах строки. Я только что проверил регулярное выражение, и оно, похоже, корректно сопоставляется.

3 лайка

Разве списки задач всегда начинаются с маркера пункта (* или -)? [1, 2] Следовательно, регулярное выражение должно соответствовать:
- [\*]
Из-за этого такой случай пропускается, так как теперь он не находится в первых трёх символах.

Позже я нашёл другие случаи, когда у меня есть вложенные флажки. Таким образом, предположение о том, что они находятся в начале строки, приведёт к пропуску множества валидных сценариев использования.

PS: Я осознал, что автор оригинального поста здесь не использует синтаксис списков задач GFM (хотя это изменилось 4 августа после обновления вики пользователем @sam), но я использую его уже очень давно. Спецификация CommonMark, на которую, похоже, опирается Discourse в своей документации по Markdown, пока что не поддерживает списки задач. Неужели Discourse придумывает свой собственный вариант синтаксиса списков задач? Я бы предпочёл придерживаться широко распространённого синтаксиса GFM, а не создавать новые вариации.

Пожалуйста, предоставьте ссылку на спецификацию синтаксиса GFM-списков?

Я ссылался на него выше, но вот он снова:

Здесь всё выглядит правильно. Вот два примера из ссылки выше:

- [ ] foo
- [x] bar

выводит:

  • foo
  • bar

а

- [x] foo
  - [ ] bar
  - [x] baz
- [ ] bim

выводит:

  • foo
    • bar
    • baz
  • bim

Так что я не совсем понимаю, в чём проблема? Можете уточнить?

Извините, это может сбить с толку, так как недавно всё изменилось. Я имею в виду скриншот, показанный на странице плагина, который не отображает синтаксис маркированного списка задач (и который, похоже, не поддерживается задачей rake migrate):

Вот скриншот с разницей, который иллюстрирует это изменение:

Трудно разглядеть, но слева есть маркированные чекбоксы, тогда как справа на текущей версии маркеры убраны, что предполагает другой синтаксис чекбоксов по умолчанию для новых пользователей.


Добавлено позже:

Иными словами, теперь плагин checklist поддерживает все следующие варианты:

[] first
-[] second
- [] third

отображается как:

first
- second

  • third

В то время как спецификация GFM tasklist допускает только третий вариант (поскольку tasklist является списком):

Элемент списка задач — это элемент списка, в котором первый блок представляет собой абзац, начинающийся с маркера элемента списка задач и как минимум одного пробельного символа перед любым другим содержимым.

Маркер элемента списка задач состоит из необязательного количества пробелов, левой квадратной скобки ([), либо пробельного символа, либо буквы x (в нижнем или верхнем регистре), а затем правой квадратной скобки (]).

Если кто-то хочет соответствовать спецификации расширения GFM tasklist, то первые два варианта не должны быть разрешены и не должны продвигаться в документации плагина.

1 лайк

Поддержка случая GFM не означает отказ от поддержки других случаев. Если бы вы применили эту логику дальше, это потребовало бы множества негативных изменений в том, как Discourse обрабатывает все виды форматирования Markdown.

Существует множество приложений, которые генерируют чекбоксы в формате Markdown; очень удобно иметь возможность вставлять списки в сообщения Discourse. Какой смысл нарушать совместимость?

1 лайк

Одна из главных проблем Markdown — отсутствие единого стандарта (над этим работает CommonMark), что приводит к множеству несовместимых реализаций. Раз уже существует крайне популярное расширение для чек-листов в виде GFM, зачем нужно изобретать ещё одно? У меня сложилось впечатление, что разработчики Discourse заинтересованы в CommonMark и стандартизации Markdown.

Моя проблема не в поддержке альтернативного синтаксиса — я верю в закон Постела (хотя считаю, что вышеупомянутый вопрос следовало учесть при внесении последних изменений в синтаксис, то есть при переходе от [*] к [x]). Проблема в том, что в документации плагина продвигается несовместимый с GFM синтаксис, а также отсутствует поддержка лёгкой миграции синтаксиса списков задач, похожего на GFM, в новый формат. Это привело к поломке множества моих страниц на моём экземпляре Discourse, см. мой первый пост.

3 лайка

Мы действительно внесли изменения, чтобы упростить синтаксис. Теперь вы можете использовать [] в любом месте поста для создания флажка. Мы не планируем снова менять это в ближайшее время. Однако вы вполне можете создать форк плагина и реализовать то, что вам нужно.

2 лайка