|
13 | 13 | |------|-------------| |
14 | 14 | | `context.go` | `EvalContext` 接口 (含 `Services()`) 与 `MemoryContext` 测试实现; 含环形 `History` (容量自定, 默认 16) | |
15 | 15 | | `services.go` | 动作函数所需依赖接口集: `ClipboardService` / `KeyInjector` / `URLOpener` / `ProcessRunner` (含 `Shell` + `ShellEx(cmd, flags)`) / `DictService` / `IMEController` / `SearchEngine` 与 `Services` 聚合; `ErrServiceUnavailable` 用于缺失服务降级 | |
| 16 | +| `escape.go` | `DecodeEscapes(s)` 宽松转义解码器: `\n \r \t \\` 解码, 未知 `\X` 原样保留; 供 dict 短语层解码纯字面短语转义。详见 docs/design/command-bar-escape-support.md | |
16 | 17 | | `registry.go` | `FuncSpec` 元信息 + 线程安全 `Registry`; Category / Deterministic / Deprecated / AliasOf / Description / ExampleSrc 字段; `ListFuncs()` 返回完整 spec 列表供 wind_setting 渲染函数手册; 默认注册命名宪法新名 (proc.run / proc.shell / dict.add / setting.open / web.search) 为 Pure=false stub, 等 `funcs.RegisterActions` 调用后被真实实现覆盖。2026-05-18: 旧名 alias (run/shell/dict.addword/ime.setting/search) 已彻底删除 (发布前清理, 不留迁移负担); `Deprecated` / `AliasOf` 字段保留供未来潜在 alias 使用 | |
17 | 18 | | `ast/ast.go` | `Expr` / `Phrase` 节点定义 (`StringLit`/`NumberLit`/`Ident`/`Call`/`ObjectLit` + `LiteralPhrase`/`TemplatePhrase`/`CommandPhrase`/`ArrayPhrase`); `CommandPhrase` 同时实现 Expr (用于嵌入 `$SS` 元素位置) 与 Phrase 接口, 带 `Modifiers map[string]any` 字段 (2026-05-16 引入, 详见 follow-up §3.2); `ObjectLit` 是 trailing options bag 字面量; `ArrayPhrase` 是 `$SS(name, elem...)` 字符串数组短语, Elements 类型为 `[]Expr` (StringLit 或 CommandPhrase) | |
18 | | -| `parser/lexer.go` | 手写词法; 字符串内 `{...}` 切出 interp 段, 支持 `\" \\ \{ \} \( \) \n \t \r` 转义; 表达式位置 (字符串外) `{` `}` `:` 作为 ObjectLit 标点 token | |
19 | | -| `parser/parser.go` | 入口 `Parse(src) (Phrase, error)`; 顶层 `findTopLevelMarker` 识别 `$CC(` / `$CC1(` / `$SS(` 三种 marker (与 `{` interpolation 互斥), 分流到 `parseCommandPhrase` 或 `parseArrayPhrase`; marker syntax sugar (`$CC1` ≡ `$CC + {prefix:true}`, `$SS` 隐含 `{prefix:true, expand:"exact", nav:true}`) 在 `markerDefaults` 表里, parser 自动合并显式 options; `parseArrayPhrase` 用 `splitArrayArgs` 按顶层 `,` 切元素, 每个 span 自识别 `$CC(` 走 embedded CommandPhrase 路径, 嵌套深度上限 1 (内层 `$CC` 禁用 prefix modifier) | |
| 19 | +| `parser/lexer.go` | 手写词法; 字符串内 `{...}` 切出 interp 段, 支持 `\" \\ \{ \} \( \) \n \t \r` 转义; 表达式位置 (字符串外) `{` `}` `:` 作为 ObjectLit 标点 token; 未知转义原样保留 (宽松白名单) | |
| 20 | +| `parser/parser.go` | 入口 `Parse(src) (Phrase, error)`; 顶层 `findTopLevelMarker` 识别 `$CC(` / `$CC1(` / `$SS(` 三种 marker (与 `{` interpolation 互斥), 分流到 `parseCommandPhrase` 或 `parseArrayPhrase`; marker syntax sugar (`$CC1` ≡ `$CC + {prefix:true}`, `$SS` 隐含 `{prefix:true, expand:"exact", nav:true}`) 在 `markerDefaults` 表里, parser 自动合并显式 options; `parseArrayPhrase` 用 `splitArrayArgs` 按顶层 `,` 切元素, 每个 span 自识别 `$CC(` 走 embedded CommandPhrase 路径, 嵌套深度上限 1 (内层 `$CC` 禁用 prefix modifier); 未知转义原样保留 (宽松白名单) | |
20 | 21 | | `eval/eval.go` | `Evaluate(phrase, ctx, reg)` → display + actions (支持 LiteralPhrase / TemplatePhrase / CommandPhrase, 显式拒绝 ArrayPhrase 引导调用方走 ExpandArray); `ExpandArray(ArrayPhrase, ctx, reg)` 把 $SS 展开为 N 个 `ArrayElement` (Display + Actions + ElementModifiers), string lit 元素 Actions=nil, 嵌入 CommandPhrase 走完整 Evaluate | |
21 | 22 | | `action.go` | P5 引入的 `ResolvedAction` 模型 (`Kind ActionEffect/ActionText` + `Run func() (string, error)`), 把动作区分为纯副作用与文本上屏 | |
22 | 23 | | `funcs/value.go` | §3.1 取值函数 (`code/tail/last/clip/sel/app/title/date/time/now/env`); `code` 返回触发候选时的 inputBuffer 快照, 旧名 `input` 已迁移。**注意**: `code()` / `tail(code, n)` 在 cmdbar 短语场景实际不可用 — 短语精确码触发, 输入码偏移即脱离命中, 不存在 "prefix 命中后追加输入"。这两个函数与 `calc(tail(...))` 组合在短语 yaml 中不应出现, 仅在外部脚本上下文有意义。详见 docs/design/command-bar-design.md §3.1 caveat 节 | |
|
0 commit comments