@elastic/pretty-printer

中文文档
4.39.0发布于 2026/11/11Elastic-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 54.9万

一个通用的Wadler-Lindig文档代数和布局引擎,用于宽度感知的漂亮打印.

中文使用文档
文档目录12 节
  1. 安装
  2. 如何运作
  3. layout(tree, opts?)
  4. 组合符/命令
  5. 初级
  6. 换行符
  7. 分组
  8. 缩进
  9. 有条件的内容
  10. 注释行后缀( L)
  11. 杂项
  12. 倾斜

@ 有弹性/ 漂亮- 打印器

基于 Wadler- Lindig 文档的通用美化打印库 代数( Philip Wadler, "一个更漂亮的打印机", 2003; 克里斯蒂安·林迪格严格 (第3条)。 执行在很大程度上取自普雷蒂埃的内部 doc-printer。 。 。 .

它没有包含ESQQL, PromQL, 或其他域知识—— 它是独立的 使用的布局引擎 @elastic/esql画得很漂亮,出版过很多 工程可以在同一项目上构建宽度认识格式 Doc IR (英语).

安装

npm install @elastic/pretty-printer

如何运作

漂亮印刷是一个两相过程:

  1. 构建 (单位:千美元) 文档树 (单位:千美元)Doc)使用组合器(见下文)。 树 描述 结构 它没有混凝土线 断裂或缩进.
  2. 版式 树变成一串混凝土 排版引擎是否适合 尽可能在每一行(最多 printWidth),断开 group 平面显示会超过可用宽度的节点.

示例

import { text, group, indent, line, softline, join, layout } from '@elastic/pretty-printer';

const doc = group([
  text('SELECT'),
  indent([line, join(
    [text(','), line],
    [text('a'), text('b'), text('c')])]
  ),
  line,
  text('FROM t'),
]);

layout(doc, { printWidth: 40 });
// SELECT
//   a,
//   b,
//   c
// FROM t

layout(doc, { printWidth: 80 });
// SELECT a, b, c FROM t

layout(tree, opts?)

主入门. 需要一个 打印树 并返回已格式化的字符串.

选项 :

选项类型默认说明
printWidthnumber80目标最大行宽.
tabWidthnumber2每个缩进的空格 .
useTabsbooleanfalse缩进分页而不是空格.
endOfLine'\n' | '\r\n' | '\r''\n'线起字符.

组合符/命令

打印机提供一组用于构建打印的梳理器( 或“ 命令 ”) 树 这些是描述产出结构的构件.

初级

  • text(string) ——文字,以正字印刷. 必须 没有 包含 新行字符.
  • Doc[] (阵)——协和. 将一系列文件剩余到 对.

换行符

  • line —空间 " " 平面模式; 新行 + 缩进 在中断模式中.
  • softline - 没什么 "" 平面模式; 新行 + 缩进 在中断模式中.
  • hardline 总是 新行 + 缩进。强迫附件组 中断.
  • hardlineWithoutBreakParent - 喜欢 hardline 但确实 没有 部队 要打破的母组.
  • literalline - 硬线断开后缩进 根号 职位 (设置于 markAsRoot)取而代之的是目前的筑巢水平. 保留 正在沿着白色空间。 包围各集团的军队要瓦解.
  • literallineWithoutBreakParent - 喜欢 literalline 但确实 没有 强制母组断开.

分组

  • group(tree, opts?) ——核心断裂决定单元. 尝试制作 打印树节点平平(单行)。 如果超过所剩宽度,则开关 以中断模式。 选项 : shouldBreak (断力), id (符号表示 与 ifBreak编号 :indentIfBreak) (中文(简体) ).
  • conditionalGroup(states, opts?) ——多州集团. 提供 从最紧凑到最扩展的替代布局。 发动机各试一试 顺序并使用第一个适合的;如果一个适合,最后一个状态是 以中断模式提供.
  • fill(parts) ——包装布局. parts 在内容和 换行文件 : [item, line, item, line, ...]填充每行 许多在断裂前合适的物品——不同于 group,这是所有或什么都没有.

缩进

  • indent(tree) ——将缩进增加一个分页级别.
  • align(n, tree) 精确地增加缩进 n 空格( 不为 选项卡级别)。 特殊值 : -1 (第一级), Number.NEGATIVE_INFINITY (重置为根), { type: 'root' } (当前标记) 缩入为根).
  • dedent(tree) 将缩进减少一个级别。 简指 align(-1, tree)。 。 。 .
  • dedentToRoot(tree) ——将缩进重置为根(栏0或 职位设置 markAsRoot) (中文(简体) ).
  • markAsRoot(tree) ——将当前缩进标为"根" 职位 literalline。 。 。 .

有条件的内容

  • ifBreak(breakDoc, flatDoc?, opts?) - 释放 breakDoc 当 附加组(或引用的组) groupId处于中断模式; 否则会发射 flatDoc。 。 。 .
  • indentIfBreak(tree, opts) 有条件地缩进 doc 基于 引用组模式 。 优化形式 ifBreak(indent(tree), doc, { groupId })设置 negate: true 倒转.
  • breakParent ——强迫所有先辈群体决裂. 宣传期间 预通( :propagateBreaks) (中文(简体) ).

注释行后缀( L)

  • lineSuffix(tree) - 缓冲 doc 并放出在电流末端 线条,就在下行中断前。 用于跟踪评论.
  • lineSuffixBoundary - 强行取消任何待决事项 lineSuffix 内容. 防止跟踪评论泄露过去的合成边界.

杂项

  • label(lbl, tree) 注释一个不透明标签的医生 语言特异性heuristic introduction. 中国植物物种信息数据库. 没有影响布局 .
  • trim —— 从当前输出中删除所有后端的空白 立场.
  • cursor 用于光标位置跟踪的占位符。 排版引擎 发出一个监视器; 呼叫者可以找到它, 以保存光标位置 格式化.
  • join(separator, trees) - 加入一系列文件与 separator 每一对之间.
  • bracketedList(open, close, sep, items) - 分组的方便, 缩入括号内的清单。 平地 : (a, b, c)断开 :
    (
      a,
      b,
      c
    )
    
  • addAlignmentToDoc(doc, size, tabWidth) - 转换绝对值 缩入巢中大小 indent编号 :align 内部包装 dedentToRoot。 。 。 . 用于嵌入内容需要特定的缩进级.

倾斜

  • traverse(doc, { onEnter?, onExit? }) - 一般深度第一横贯 使用显式堆栈(不重复)的多克树。 返回时 false 从 onEnter 跳过节点的孩子.

版本与发布记录

@elastic/pretty-printer 共发布 38 个版本,首次发布于 2026/07/02;过去 12 个月发布了 38 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.39.0latest2026/11/112 天前
4.38.02026/11/094 天前
4.37.02026/11/057 天前
4.36.02026/11/0211 天前
4.35.02026/10/2915 天前
4.34.02026/10/2618 天前

关于 @elastic/pretty-printer 的常见问题

@elastic/pretty-printer 是什么?

一个通用的Wadler-Lindig文档代数和布局引擎,用于宽度感知的漂亮打印.

如何安装 @elastic/pretty-printer?

在项目目录运行 npm install @elastic/pretty-printer,或使用 pnpm add / yarn add / bun add。

@elastic/pretty-printer 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@elastic/pretty-printer 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@elastic/pretty-printer 可以商用吗?

@elastic/pretty-printer 使用 Elastic-2.0 许可。声明的许可为 Elastic-2.0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@elastic/pretty-printer 的下载量有多少?

根据 npm 官方下载统计,@elastic/pretty-printer 在 2026/10/14 – 2026/11/12 这 30 天内被下载 549,280 次,日均约 18,309 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@elastic/pretty-printer 还在维护吗?

最新版本 4.39.0 发布于 2026/11/11(2 天前);至今共发布 38 个版本,其中过去 12 个月发布了 38 个;首次发布于 2026/07/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。