Checklist 是否应支持 GFM 复选框语法?

我注意到我的实例中存在一些显示旧版星号语法的检查清单。于是决定运行上述 rake 任务,但它们并未更新。

据我回忆,过去几周升级 Discourse 时,大多数其他检查清单已自动迁移到新语法。但似乎有一些特殊情况未被 rake 任务处理。有人知道可能是什么原因吗?

如有需要,我很乐意提供更多详细信息以协助排查问题。

更新: 看起来其中一条帖子使用了 [\*] 语法(即通过 UI 勾选复选框时自动生成的格式)。这是否可能是 rake 任务未覆盖的情况?

4 个赞

@k4rtik 如果我没记错的话,rake 任务只会更改行首的复选框。

我看到的页面在每行开头都有复选框。问题是该任务会同时更改 [*][\*],还是仅更改前者语法?

这一行应该检查复选框是否位于行的前三个字符内。我刚刚检查了正则表达式,看起来匹配是正确的。

3 个赞

任务列表不总是以项目符号标记(*-)开头吗 [1, 2]?因此,正则表达式应匹配:
- [\*]
这意味着由于它不再位于前三个字符内,该情况会被跳过。

后来我发现还有其他情况,其中包含嵌套的复选框。因此,假设它们位于行首也会跳过许多有效的用例。

附言:我意识到这里的原始发帖人(OP)并未使用 GFM 任务列表语法(尽管自 8 月 4 日 @sam 将维基更改后开始使用),但我一直使用该语法。Discourse 在 Markdown 文档中似乎引用的 CommonMark 规范 似乎尚未支持任务列表。Discourse 是否在发明自己的任务列表语法变体?我倾向于坚持使用广泛流行的 GFM 语法,而不是进一步使其多样化。

请提供 GFM 复选框语法规范的链接。

我在上面已经提供了链接,这里再发一次:

在我看来这里看起来是正确的,粘贴上面链接中的两个示例:

- [ ] foo
- [x] bar

生成

  • foo
  • bar

以及

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

生成

  • foo
    • bar
    • baz
  • bim

所以我不确定问题出在哪里?你能说得更具体一些吗?

抱歉,这看起来有些令人困惑,因为情况最近发生了相当大的变化。我指的是插件页面上显示的截图,其中并未显示带项目符号的清单语法(而且 rake migrate 任务似乎也不支持):

以下是展示此次变更的 diff 截图:

虽然不太容易看清,但左侧显示的是带项目符号的复选框,而当前的右侧则去除了项目符号,这暗示了新用户的默认复选框语法有所不同。


后续补充:

换句话说,现在清单插件支持以下所有语法:

[] first
-[] second
- [] third

渲染结果为:

first
- second

  • third

而 GFM 任务列表 规范仅允许第三种变体(因为任务列表是一种列表):

任务列表项 是一种 列表项,其第一个块是一个段落,该段落以 任务列表项标记 开头,并在任何其他内容之前至少包含一个空白字符。

任务列表项标记 由可选数量的空格、左方括号([)、一个空白字符或字母 x(小写或大写均可),以及右方括号(])组成。

如果希望符合 GFM 任务列表扩展规范,则前两种变体不应被允许,也不应在插件文档中予以推广。

1 个赞

支持 GFM 的情况并不意味着不支持其他情况。如果将这种逻辑推而广之,将会导致 Discourse 处理各种 Markdown 格式的方式发生大量负面变化。

有许多应用程序会生成 Markdown 复选框,能够直接将列表粘贴到 Discourse 帖子中非常便利。破坏兼容性又有什么价值呢?

1 个赞

Markdown 的一个主要问题在于缺乏统一标准(CommonMark 正在解决这一问题),从而导致存在多种互不兼容的实现。既然已经存在像 GFM 这样广受欢迎的任务列表扩展,为什么还需要发明另一个?我原本以为 Discourse 开发者致力于 CommonMark 和 Markdown 的标准化。

我的问题不在于支持替代语法。我相信波斯特尔定律(尽管我认为在进行最新的语法更改时,即从 [*] 改为 [x],本应考虑到上述问题),而在于插件文档中推广与 GFM 不兼容的语法,且未支持将类 GFM 的任务列表语法轻松迁移到新版本格式,这导致我在 Discourse 实例上的许多页面失效,详见我的原始帖子。

3 个赞

我们确实做了调整,让语法更简洁。你可以在帖子的任何位置使用 [] 来创建复选框。我们预计近期不会再对此进行修改。不过,如果您希望实现自己的需求,完全可以自行分叉(fork)该插件进行开发。

2 个赞