Skip to content

Import syntax design for external demo #6

Closed
@PeachScript

Description

@PeachScript

背景

如果仅提供在 .md 中写代码块来生成 demo 的方式,会有以下两个问题:

  1. 复杂组件的 demo 也会比较多,.md 会混乱难以管理
  2. 在 .md 中写 tsx/jsx 无法得到编辑器的各种辅助(lint、snippets、autocomplete & etc.),在编写复杂 demo 的时候效率会非常低

所以计划在 father-doc 中新增一种 markdown 扩展语法,使得编写者可以主动从外部导入 .tsx/jsx 文件生成 demo。

要求

语法的设计非常重要,因为关乎后续编写者的内容创作,一旦方案确定,后续再难修改。设想之下,大致有如下几点要求:

  1. 维持 markdown style,不能有违和感
  2. 支持传递文件路径
  3. (欢迎补充)

提案

加上 issue 中大家提出的方案,目前共有 5 种备选方案:

  1. 去骨去尾代码块方案: ```./demo/Hello.jsx
  2. 超链接/图片师出同门方案: $[](./demo/Hello.jsx)
  3. UBB 借鉴一刀流方案:[demo=./demo/Hello.jsx]
  4. HTML 注释方案:<!-- [demo=./demo/Hello.jsx] -->
  5. code 标签降级兼容方案:<code src="./demo/Hello.jsx">fallback 文本</code>

需要特殊说明的是第 3 种方案,此方案可以用类似的语法扩展出更多的自定义语法,一脉相承,比如:

  1. 自定义标签语法,渲染类似 antd 的标签组件: [badge=1.0.0-Beta.1 danger]
  2. 自定义警告块语法,渲染类似 antd 的 Alert 组件: [alert=天干物燥 title=小心火烛 warn]

讨论

目前前 3 种方案看起来都有一些小问题:

  1. 如果次行正好为另一个代码块,无论是 transformer 的 token 识别还是编写者肉眼识别,都会造成干扰
  2. 中间的方括号没有没有实际作用
  3. 历史感很浓重,毕竟是论坛时代的标签语法

如果大家对这 5 种方案有独特看法,或者有更好的方案,欢迎进行讨论。

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussSomething need to discusshelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions