@calcit/procs 0.12.55 → 0.12.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarn/install-state.gz +0 -0
- package/RFCs/07-31-unsafe-coerce-driven-static-type-boundary-plan.md +170 -0
- package/build.rs +36 -2
- package/editing-history/202607310224-strengthen-namespace-import-diagnostics.md +23 -0
- package/editing-history/202607311940-strengthen-unsafe-coerce-boundaries.md +20 -0
- package/editing-history/202608010103-warn-on-duplicate-imports.md +18 -0
- package/editing-history/202608010111-release-0.12.56.md +15 -0
- package/editing-history/202608011654-library-quality-gates.md +23 -0
- package/editing-history/202608011759-issue-routing-in-agent-guide.md +17 -0
- package/editing-history/202608011833-schema-type-symbols.md +20 -0
- package/editing-history/202608011852-wasm-dynamic-string-tag.md +7 -0
- package/editing-history/202608011908-consolidate-history.md +6 -0
- package/editing-history/202608012022-consolidate-cli-and-test-duplication.md +28 -0
- package/editing-history/202608012123-review-follow-up.md +18 -0
- package/editing-history/202608012320-release-0.12.57.md +5 -0
- package/editing-history/ARCHIVE.md +15 -0
- package/editing-history/README.md +21 -0
- package/lib/package.json +1 -1
- package/package.json +1 -1
- package/editing-history/2026-02-13-1841-trait-origin-structural-eq.md +0 -91
- package/editing-history/2026-02-14-2050-js-codegen-recursion-tag-migration.md +0 -39
- package/editing-history/2026-02-14-2358-emit-js-modularization-shift-left.md +0 -63
- package/editing-history/2026-02-15-0000-diagnostics-consolidated.md +0 -35
- package/editing-history/2026-02-15-1941-macro-diagnostics-refinement.md +0 -39
- package/editing-history/2026-02-16-2043-core-api-docs-cleanup.md +0 -40
- package/editing-history/2026-02-23-0834-migrate-to-defstruct.md +0 -91
- package/editing-history/2026-02-23-2321-ns-imports-code-fixes.md +0 -42
- package/editing-history/2026-02-25-0002-language-behavior-eval-mode.md +0 -93
- package/editing-history/2026-02-25-0111-guidebook-no-check-block-upgrades.md +0 -52
- package/editing-history/2026-02-25-0113-runtime-type-validation-and-macro-quoting.md +0 -41
- package/editing-history/2026-02-25-1131-check-md-eval-improvements.md +0 -13
- package/editing-history/2026-02-26-1324-check-md-inprocess-cache-and-path-labels.md +0 -7
- package/editing-history/2026-02-27-1640-unify-markdown-readers.md +0 -16
- package/editing-history/2026-02-27-1958-tree-rewrite-command-and-reference-model.md +0 -18
- package/editing-history/2026-02-27-2200-split-def-command.md +0 -29
- package/editing-history/2026-02-27-2212-tree-raise-wrap.md +0 -33
- package/editing-history/2026-02-27-2223-calcit-agent-docs-optimize.md +0 -41
- package/editing-history/2026-03-01-0212-query-search-entry-and-ffi-warning.md +0 -53
- package/editing-history/2026-03-03-1934-check-types-and-core-annotations.md +0 -17
- package/editing-history/2026-03-04-0000-generics-fn-typevar-identity.md +0 -30
- package/editing-history/2026-03-04-1331-tag-call-warning-and-dot-access-migration.md +0 -28
- package/editing-history/2026-03-04-1548-impl-new-dot-method-input-and-doc-hints.md +0 -33
- package/editing-history/2026-03-04-1645-calcit-eq-contract-refactor-and-macro-tests.md +0 -28
- package/editing-history/2026-03-04-2200-assert-type-assert-traits-composable-runtime-checks.md +0 -18
- package/editing-history/2026-03-05-0042-type-inference-argtypes-and-core-hints.md +0 -54
- package/editing-history/2026-03-05-0115-calcit-core-generic-refinements.md +0 -57
- package/editing-history/2026-03-05-1930-schema-migration-cr-edit.md +0 -30
- package/editing-history/2026-03-05-1939-query-schema-adaptation.md +0 -42
- package/editing-history/2026-03-06-0120-schema-hint-migration-batch.md +0 -38
- package/editing-history/2026-03-06-1416-core-macro-schema-migration.md +0 -20
- package/editing-history/2026-03-06-1552-core-schema-and-hintfn-migration.md +0 -63
- package/editing-history/2026-03-06-1936-schema-normalization-and-preprocess-preload.md +0 -12
- package/editing-history/2026-03-07-0000-migrate-hint-fn-to-schema.md +0 -29
- package/editing-history/2026-03-07-0000-remove-enum-prototype-field.md +0 -43
- package/editing-history/2026-03-07-0000-schema-args-type-enforcement.md +0 -66
- package/editing-history/2026-03-07-0142-unit-type-and-builtin-schemas.md +0 -82
- package/editing-history/2026-03-07-1652-decouple-snapshot-schema-to-calcit-type.md +0 -112
- package/editing-history/2026-03-07-1821-snapshot-schema-validation.md +0 -6
- package/editing-history/2026-03-07-1959-schema-def-kind-arity-validation.md +0 -96
- package/editing-history/2026-03-08-0031-schema-generics-quote-normalization.md +0 -35
- package/editing-history/2026-03-08-1905-schema-typeref-and-assert-migration.md +0 -34
- package/editing-history/2026-03-08-2033-schema-wrapper-migration.md +0 -45
- package/editing-history/2026-03-08-2315-late-schema-cleanup-and-warning-compat.md +0 -27
- package/editing-history/2026-03-09-1753-schema-type-fail-tests.md +0 -17
- package/editing-history/2026-03-10-1040-edit-schema-primitive-tag-support.md +0 -42
- package/editing-history/2026-03-10-1754-ns-entry-snapshot-migration.md +0 -66
- package/editing-history/2026-03-13-2216-validate-struct-type-arg-arity.md +0 -24
- package/editing-history/2026-03-16-2353-runtime-boundary-cleanup.md +0 -14
- package/editing-history/2026-03-17-0150-runtime-boundary-lookup-cleanup.md +0 -28
- package/editing-history/2026-03-20-0116-json-builtins-and-runtime-docs.md +0 -48
- package/editing-history/2026-03-26-2013-docs-frontmatter-and-module-search.md +0 -58
- package/editing-history/2026-04-07-1550-path-format-at-prefix-migration.md +0 -46
- package/editing-history/2026-04-12-1524-js-codegen-map-to-record.md +0 -26
- package/editing-history/2026-04-12-1549-map-to-record-field-validation.md +0 -29
- package/editing-history/2026-04-13-1600-tuple-to-enum-rewrite.md +0 -13
- package/editing-history/2026-04-13-2309-typeslot-enum-compile-safety.md +0 -45
- package/editing-history/2026-04-14-1500-loose-record-syntax.md +0 -32
- package/editing-history/2026-04-14-2259-bidir-type-check-refactor.md +0 -63
- package/editing-history/2026-04-15-0120-match-syntax-exhaustiveness.md +0 -20
- package/editing-history/2026-04-15-1211-record-nth-optimization.md +0 -44
- package/editing-history/2026-04-16-1936-predicate-narrowing-expansion.md +0 -31
- package/editing-history/2026-04-17-0132-monomorphize-map-filter.md +0 -50
- package/editing-history/2026-04-17-0135-monomorphize-includes-reverse.md +0 -31
- package/editing-history/2026-04-17-0140-fold-type-predicates.md +0 -44
- package/editing-history/2026-04-17-0154-generic-dispatch-records-tuples.md +0 -52
- package/editing-history/2026-04-17-0520-simplify-generic-defns-via-method-dispatch.md +0 -49
- package/editing-history/2026-05-21-0055-tree-show-cr-config-and-edit-cleanup.md +0 -81
- package/editing-history/2026-05-31-2052-macro-schema-roundtrip-and-weak-types.md +0 -6
- package/editing-history/2026-05-31-2105-map-generic-weak-types-followup.md +0 -15
- package/editing-history/2026-06-01-0003-update-callback-field-specialization.md +0 -19
- package/editing-history/2026-06-01-2317-data-definition-where-bounds.md +0 -6
- package/editing-history/2026-06-02-0114-data-definition-where-macro-followup.md +0 -21
- package/editing-history/2026-06-03-0000-check-md-edn-errors.md +0 -5
- package/editing-history/2026-06-03-1600-check-md-entry-modules.md +0 -6
- package/editing-history/2026-06-04-0000-check-md-app-main-init.md +0 -6
- package/editing-history/2026-06-04-2218-compiled-executable-runtime-backfill.md +0 -6
- package/editing-history/2026-06-09-0000-with-type-slot-scoped-binding.md +0 -83
- package/editing-history/2026-06-09-1241-remove-bind-type.md +0 -64
- package/editing-history/2026-06-09-1800-core-effect-tags.md +0 -57
- package/editing-history/2026-06-10-1200-get-def-doc-schema-builtin.md +0 -7
- package/editing-history/2026-06-15-1500-effects-graph-mvp.md +0 -30
- package/editing-history/2026-06-16-1700-effects-graph-ste-tree.md +0 -84
- package/editing-history/2026-06-27-0052-cli-improvements.md +0 -41
- package/editing-history/2026-06-27-0202-docs-indexing-improvements.md +0 -22
- package/editing-history/2026-06-27-0315-file-splits.md +0 -17
- package/editing-history/2026-06-27-0416-agent-advanced-split.md +0 -15
- package/editing-history/archived/2025-04-12-1453-map-to-record-rewrite.md +0 -33
- package/editing-history/archived/2025-04-16-0117-wasm-codegen-and-catalog-update.md +0 -40
- package/editing-history/archived/2025-07-16-0207-wasm-encoder-migration.md +0 -48
- package/editing-history/archived/2025-07-16-1633-wasm-data-structures.md +0 -61
- package/editing-history/archived/2026-02-13-1926-docs-tests-followup.md +0 -33
- package/editing-history/archived/2026-02-16-2128-docs-smoke-and-trait-errors.md +0 -20
- package/editing-history/archived/2026-02-25-1234-watch-mode-default-once.md +0 -5
- package/editing-history/archived/2026-03-07-1302-calcit-agent-docs-update.md +0 -32
- package/editing-history/archived/2026-03-09-1819-add-test-fail-script.md +0 -5
- package/editing-history/archived/2026-03-09-1944-split-type-fail-tests.md +0 -8
- package/editing-history/archived/2026-03-16-1449-profiling-tools-reorg.md +0 -13
- package/editing-history/archived/2026-03-17-2026-afternoon-runtime-boundary-optimization-summary.md +0 -87
- package/editing-history/archived/2026-03-18-1802-tips-level-and-overwrite-schema-preservation.md +0 -26
- package/editing-history/archived/2026-03-20-1229-query-window-3-with-parent-preview.md +0 -72
- package/editing-history/archived/2026-03-23-1137-command-echo-tool-output-cleanup.md +0 -71
- package/editing-history/archived/2026-04-10-0011-snapshot-empty-version-pipe-marker.md +0 -23
- package/editing-history/archived/2026-04-16-0131-wasm-math-and-test-integration.md +0 -28
- package/editing-history/archived/2026-04-16-1507-wasm-data-structures-and-rfc-rename.md +0 -27
- package/editing-history/archived/2026-04-16-1520-wasm-bitwise-and-match.md +0 -21
- package/editing-history/archived/2026-04-16-1542-wasm-cross-ns-host-imports.md +0 -38
- package/editing-history/archived/2026-04-17-0026-wasm-rest-args.md +0 -62
- package/editing-history/archived/2026-04-17-0048-wasm-type-of.md +0 -70
- package/editing-history/archived/2026-04-17-0051-wasm-derived-predicates.md +0 -34
- package/editing-history/archived/2026-04-17-2316-wasm-do-println-fixes.md +0 -41
- package/editing-history/archived/2026-04-18-1208-split-emit-wasm-and-bump-version.md +0 -15
- package/editing-history/archived/2026-04-18-1430-wasm-list-match-and-method-dispatch.md +0 -5
- package/editing-history/archived/2026-04-18-2041-cr-wasm-split-and-runtime-stability.md +0 -18
- package/editing-history/archived/2026-04-18-2045-v0.12.23-ci-wasm-fix.md +0 -13
- package/editing-history/archived/2026-04-21-1818-wasm-string-ops-v2.md +0 -57
- package/editing-history/archived/2026-04-21-2332-split-emit-wasm.md +0 -45
- package/editing-history/archived/2026-04-22-0114-wasm-hof-intercepts-and-set-intersection.md +0 -82
- package/editing-history/archived/2026-04-22-0136-wasm-enum-tuple-bool-str-fixes.md +0 -68
- package/editing-history/archived/2026-04-22-1340-wasm-map-diff-new-and-let-intercept.md +0 -53
- package/editing-history/archived/2026-04-23-1419-v0.12.26-wasm-bisection-fixes.md +0 -7
- package/editing-history/archived/2026-04-23-1645-release-conventions.md +0 -14
- package/editing-history/archived/2026-04-25-1940-wasm-suite-multi-module-entry.md +0 -53
- package/editing-history/archived/2026-04-25-2003-wasm-method-includes-string-and-set-refactor.md +0 -71
- package/editing-history/archived/2026-04-25-2010-wasm-suite-add-fn-lens-edn.md +0 -43
- package/editing-history/archived/2026-04-25-2051-display-by.md +0 -39
- package/editing-history/archived/2026-04-28-1728-fix-gensym-stable.md +0 -31
- package/editing-history/archived/2026-04-29-1400-fix-bind-type-precompile.md +0 -38
- package/editing-history/archived/2026-05-26-0957-match-docs-check-md.md +0 -24
- package/editing-history/archived/2026-05-31-2059-ci-docs-test-and-fn-helper-tightening.md +0 -3
- package/editing-history/archived/2026-06-01-0005-release-0.12.36.md +0 -16
- package/editing-history/archived/2026-06-01-2230-enum-struct-payload-docs.md +0 -4
- package/editing-history/archived/2026-06-03-1620-release-0.12.38.md +0 -6
- package/editing-history/archived/2026-06-04-0000-release-0.12.39.md +0 -4
- package/editing-history/archived/2026-06-04-2230-release-0.12.40.md +0 -5
- package/editing-history/archived/2026-06-12-1525-weak-types-dots-format.md +0 -15
- package/editing-history/archived/2026-06-13-1200-primitive_schema_tags.md +0 -9
- package/editing-history/archived/2026-06-20-1142-ts-declaration-d-mts.md +0 -5
- package/editing-history/archived/2026-06-29-0117-upgrade-doc-snapshot-migration.md +0 -2
- package/editing-history/archived/2026-06-29-calcit-cli.md +0 -80
- package/editing-history/archived/2026-06-29-typed-calcit-cli-schemas.md +0 -23
- package/editing-history/archived/20260630-duplication-analysis.md +0 -116
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Calcit Type schema primitive tags support expansion
|
|
2
|
-
|
|
3
|
-
## Timestamp: 202606131200
|
|
4
|
-
|
|
5
|
-
## Modification Summary:
|
|
6
|
-
- Expanded `PRIMITIVE_SCHEMA_TAGS` inside `/Users/chenyong/repo/calcit-lang/calcit/src/snapshot.rs` to include `"record"`, `"struct"`, `"enum"`, `"trait"`, `"impl"`.
|
|
7
|
-
- This ensures schema annotations utilizing these tags (e.g., `:trait` or `:enum` in code entries) pass verification rather than raising an unrecognized primitive tag validation error.
|
|
8
|
-
- Verified with the Calcit test suite which passed 223+85 integration and unit tests without error.
|
|
9
|
-
- Updated `respo/alerts` annotations using these tags to enforce more precise typing rules in the codebase.
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
- `tsconfig.json` 添加 `declaration: true`,使 `yarn compile` 生成 `.d.mts` 类型声明文件
|
|
2
|
-
- `yarn compile` 后 `lib/` 中与 `.mjs` 一一对应生成 18 个 `.d.mts` 文件
|
|
3
|
-
- `.npmignore` 不排除 `lib/`,这些声明文件在 npm publish 时会被包含
|
|
4
|
-
- 对 hovenia-editor:移除手动 `calcit-procs.d.ts`,改用上游生成的 `.d.mts`
|
|
5
|
-
- 本地验证:`cargo fmt` `cargo clippy` `yarn compile` `cargo test` `yarn check-all` 全部通过
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
- docs/run/upgrade.md: added snapshot migration section — documents the transition from two-file setup (calcit.cirru snapshot + compact.cirru compact code) to single calcit.cirru with compact code only, no separate snapshot file needed
|
|
2
|
-
- Recommended: delete old snapshot file, compact code saved directly in calcit.cirru for cr command to use directly
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# calcit.cli / cr exec 完整实现
|
|
2
|
-
|
|
3
|
-
## 概要
|
|
4
|
-
|
|
5
|
-
实现 `cr exec` + `calcit.cli/*` 内建函数(共 77 个),让 Agent 用 Cirru heredoc 调用常用 `cr query` / `edit` / `tree` / `analyze` / `docs` 能力,绕开 Shell 转义。RFC:`RFCs/06-29-cr-exec-cli-builtins-rfc.md`。
|
|
6
|
-
|
|
7
|
-
## 架构
|
|
8
|
-
|
|
9
|
-
- **运行时**:`src/bin/injection/mod.rs` 注册 handler;**单一 options map 参数**(arity 1)
|
|
10
|
-
- **参数解析**:`calcit_cli_args.rs` — `resolve_cli_args`、类型 coercion、默认值填充、command echo
|
|
11
|
-
- **参数规格**:`calcit_cli_specs.rs` — 每个函数的 `CliArgSpec` 列表(语义化键名)
|
|
12
|
-
- **元数据**:`src/cirru/calcit-core.cirru` 的 `|calcit.cli` — schema 为 `(:args $ [] (:: :map :tag :dynamic))`
|
|
13
|
-
- **同步**:`python3 scripts/gen_calcit_cli_core.py`(从 mod.rs + calcit_cli_specs.rs 生成)
|
|
14
|
-
- **约束**:`calcit_cli*` 不得依赖 `cli_handlers`(保证 `cr-wasm` 可编译)
|
|
15
|
-
|
|
16
|
-
### 调用约定(2026-06-29 重构)
|
|
17
|
-
|
|
18
|
-
```cirru
|
|
19
|
-
calcit.cli/peek-def $ {} (:file-path |calcit.cirru) (:target |app.main/main!)
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
- 唯一参数为 options map;键为 tag(`:file-path`、`:target`、`:lines` 等)
|
|
23
|
-
- 省略的可选键由 Rust 侧默认值填充;非 quiet 模式下 stderr echo 展示完整调用(含默认值)
|
|
24
|
-
- 位置参数已移除(breaking change)
|
|
25
|
-
|
|
26
|
-
| 文件 | 职责 |
|
|
27
|
-
|------|------|
|
|
28
|
-
| `calcit_cli_args.rs` | map 解析、echo、docs_hint 生成 |
|
|
29
|
-
| `calcit_cli_specs.rs` | 77 个函数的参数 spec 常量 |
|
|
30
|
-
| `calcit_cli.rs` | 基础 query/write、snapshot 读写、`load_calcit_snapshot_with_deps` |
|
|
31
|
-
| `calcit_cli_tree.rs` | AST 树变换(delete/insert/wrap/cp/mv…) |
|
|
32
|
-
| `calcit_cli_extra.rs` | edit/config/cirru 工具、trigger-inc、semver bump |
|
|
33
|
-
| `calcit_cli_program.rs` | 加载 snapshot+modules+core 并 preprocess(analyze/validate) |
|
|
34
|
-
| `calcit_cli_analyze.rs` | call/effects/count + check-types/weak-types |
|
|
35
|
-
| `calcit_cli_query.rs` | show-pkg/ns、list-defs-by-tag、validate-file、search-*、list-host-procs |
|
|
36
|
-
| `calcit_cli_docs.rs` | docs-agents/read/sections |
|
|
37
|
-
| `src/type_coverage.rs` | check-types / weak-types 共享逻辑(`cr analyze` 与 calcit.cli 共用) |
|
|
38
|
-
|
|
39
|
-
## 分批功能(合并记录)
|
|
40
|
-
|
|
41
|
-
### 第一批:树/定义/import 写操作(17)
|
|
42
|
-
|
|
43
|
-
`tree-delete` `tree-insert` `tree-wrap` `tree-unwrap` `tree-raise` `tree-cp` `tree-mv` `rename-def` `rm-def` `mv-def` `split-def` `add-ns` `edit-doc` `edit-schema` `add-example` `rm-import` `show-error`
|
|
44
|
-
|
|
45
|
-
要点:`tree-wrap` 用 `self` leaf;`position` 同 CLI(`|before` `|after` 等)。
|
|
46
|
-
|
|
47
|
-
### 第二批:edit/config/cirru(20)
|
|
48
|
-
|
|
49
|
-
`rm-ns` `set-imports` `format-file` `show-doc` `show-ns-doc` `list-tags` `set-tags` `rm-example` `clear-examples` `set-examples` `tree-replace-leaf` `tree-swap-*` `tree-batch-delete` `tree-rewrite` `set-config` `add/rm-module` `cirru-parse/format` `read-text-file`
|
|
50
|
-
|
|
51
|
-
修复:`build_ns_code` 对齐 `(ns name (:require ...))` 嵌套结构。
|
|
52
|
-
|
|
53
|
-
### 第三批:analyze / inc / docs 搜索(9)
|
|
54
|
-
|
|
55
|
-
`trigger-inc` `cirru-parse-edn` `cirru-show-guide` `docs-search` `tree-replace-leaf-regex` `analyze-call-graph` `analyze-effects-graph` `analyze-count-calls`
|
|
56
|
-
|
|
57
|
-
### 第四批:P0–P3(15)
|
|
58
|
-
|
|
59
|
-
- **P0**:`show-pkg` `show-ns` `list-defs-by-tag` `validate-file` `bump-version` `edit-ns-doc`
|
|
60
|
-
- **P1**:`search-project` `search-def-regex` `search-expr` `list-host-procs`
|
|
61
|
-
- **P2**:`analyze-check-types` `analyze-weak-types`(依赖 `type_coverage` 提取)
|
|
62
|
-
- **P3**:`docs-agents` `docs-read` `docs-sections`
|
|
63
|
-
|
|
64
|
-
### Core 声明 + 预处理
|
|
65
|
-
|
|
66
|
-
- core 可选参数 schema 用 `(:rest :dynamic)`,勿写 `:rest $ :dynamic`(EDN 解析失败)
|
|
67
|
-
- 预处理:`is_registered_proc` 必须在 `has_def_code` 之前,避免 core 元数据 stub 被当作普通 def 编译(`preprocess/mod.rs`)
|
|
68
|
-
|
|
69
|
-
## 验证
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
python3 scripts/gen_calcit_cli_core.py
|
|
73
|
-
unset CARGO_TARGET_DIR && cargo fmt
|
|
74
|
-
cargo clippy --all-targets -- -D warnings
|
|
75
|
-
cargo test --bin cr
|
|
76
|
-
./target/debug/cr calcit/test.cirru exec << 'EOF'
|
|
77
|
-
calcit.cli/show-pkg $ {} (:file-path |calcit/test.cirru)
|
|
78
|
-
calcit.cli/validate-file $ {} (:file-path |calcit/test.cirru)
|
|
79
|
-
EOF
|
|
80
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# calcit.cli 选项 map 类型化 schema(Rust spec 直检)
|
|
2
|
-
|
|
3
|
-
## 变更概要
|
|
4
|
-
|
|
5
|
-
- 选项 spec 收敛到 `src/builtins/cli_options.rs`(Rust 单一来源),注册时写入 `RegisteredProcDescriptor.cli_options`。
|
|
6
|
-
- preprocess 直接读 Rust spec 校验 options map,不再生成 defstruct / 不做 map→record 转换。
|
|
7
|
-
- core 中 `:args` 仍由脚本生成 inline 类型 map(供 query/docs),校验走 Rust 而非 Calcit 类型系统。
|
|
8
|
-
|
|
9
|
-
## 后续优化(Rust spec 直检)
|
|
10
|
-
|
|
11
|
-
- preprocess 热路径改用 `registered_proc_cli_options()`,不再 clone 整个 `RegisteredProcDescriptor`。
|
|
12
|
-
- `registered_proc_has_tag` 同样改为只读 map 查询。
|
|
13
|
-
- `check_cli_options_map` 与 `resolve_cli_args` 共用 `collect_validation_errors`,preprocess 侧用引用收集 map 条目,避免多余 clone。
|
|
14
|
-
- Registered 调用检查复用已有的 `processed_args`,去掉重复 `ys.drop_left()` 和 `alias` clone。
|
|
15
|
-
|
|
16
|
-
## 验证案例(cr eval)
|
|
17
|
-
|
|
18
|
-
| 案例 | 结果 |
|
|
19
|
-
|------|------|
|
|
20
|
-
| `:file-pth` 拼写错误 | `W_CLI_OPTION_UNKNOWN_KEY` |
|
|
21
|
-
| 缺少 `:file-path` | `W_CLI_OPTION_MISSING_REQUIRED` |
|
|
22
|
-
| `:lines \|bad` 类型错误 | `W_CLI_OPTION_TYPE_MISMATCH` |
|
|
23
|
-
| 正确调用 | Check passed |
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
# calcit.cli 与 CLI handlers 重复代码分析与重构方案
|
|
2
|
-
|
|
3
|
-
时间: 2026-06-30
|
|
4
|
-
作者: AI Agent
|
|
5
|
-
|
|
6
|
-
## 现状
|
|
7
|
-
|
|
8
|
-
### 两套独立实现
|
|
9
|
-
|
|
10
|
-
| 方面 | `injection/calcit_cli*.rs` | `cli_handlers/*.rs` |
|
|
11
|
-
|------|---------------------------|---------------------|
|
|
12
|
-
| 代码量 | ~2714 行 | ~5967 行 |
|
|
13
|
-
| 入口 | `fn(xs: Vec<Calcit>, _: &CallStackList) -> Result<Calcit, CalcitErr>` | `fn(opts: &SpecificCommandStruct, snapshot_file: &str) -> Result<(), String>` |
|
|
14
|
-
| 参数解析 | `resolve_cli_args()` → `ResolvedCliArgs` (从 Calcit Map 中提取) | argh 自动解析 CLI 参数到结构体 |
|
|
15
|
-
| 输出 | `Calcit::Str(...)` 返回给 Calcit 运行时 | `println!()` 直接输出 |
|
|
16
|
-
| 快照加载 | `load_calcit_snapshot()` | `load_snapshot()` |
|
|
17
|
-
| 快照保存 | `save_calcit_snapshot()` | `save_snapshot()` |
|
|
18
|
-
|
|
19
|
-
### 完全重复的辅助函数
|
|
20
|
-
|
|
21
|
-
| 函数 | injection/ 位置 | cli_handlers/ 位置 |
|
|
22
|
-
|------|----------------|-------------------|
|
|
23
|
-
| load_snapshot | calcit_cli.rs:1155 | edit.rs:101 |
|
|
24
|
-
| save_snapshot | calcit_cli.rs:1217 | edit.rs:109 |
|
|
25
|
-
| parse_path | calcit_cli.rs:933 | common.rs:182 |
|
|
26
|
-
| navigate_to_node | calcit_cli.rs:905 | edit.rs:1267 |
|
|
27
|
-
| parse_target | calcit_cli_args.rs (复用 cli_options) | edit.rs:22 |
|
|
28
|
-
| check_ns_editable | calcit_cli.rs:1033 | edit.rs:114 |
|
|
29
|
-
| apply_operation_at_path | calcit_cli_tree.rs | edit.rs:1152 |
|
|
30
|
-
| process_node_with_references | calcit_cli_tree.rs | edit.rs:1290 |
|
|
31
|
-
|
|
32
|
-
## 推荐的桥接方案
|
|
33
|
-
|
|
34
|
-
### 方案: 提取共享核心 + 让 calcit.cli 代理到 cli_handlers
|
|
35
|
-
|
|
36
|
-
不直接让 `calcit.cli` procs 调用 `cli_handlers`(因为接口类型不同),而是:
|
|
37
|
-
|
|
38
|
-
1. **将核心业务逻辑(load → modify → save)提取到共享函数**,放在 `snapshot.rs` 或新建 `src/snapshot_ops.rs`
|
|
39
|
-
2. **`cli_handlers` 调用共享函数**
|
|
40
|
-
3. **`calcit.cli` 内部转发到共享函数**,而不是自己再实现一遍
|
|
41
|
-
|
|
42
|
-
### 关键接口对齐
|
|
43
|
-
|
|
44
|
-
calcit.cli proc 的处理流程:
|
|
45
|
-
```
|
|
46
|
-
Vec<Calcit> → resolve_cli_args() → ResolvedCliArgs → 提取参数 → 业务逻辑 → Calcit
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
CLI handler 的处理流程:
|
|
50
|
-
```
|
|
51
|
-
CLI struct → 提取参数 → 业务逻辑 → println!
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
共同点: 都需要 `(file_path, target, path, code)` 等参数, 都调用 `load_snapshot` / `save_snapshot` / `navigate_to_path` / `apply_operation_at_path`
|
|
55
|
-
|
|
56
|
-
### 具体步骤
|
|
57
|
-
|
|
58
|
-
1. 把 `load_snapshot`, `save_snapshot`, `navigate_to_path`, `parse_path`, `check_ns_editable`, `apply_operation_at_path`, `process_node_with_references` 等辅助函数统一放到 `src/snapshot_ops.rs` (或 `src/bin/cli_handlers/ops.rs`)
|
|
59
|
-
2. 把每个业务操作(如 tree-replace、show-def、list-defs)提取为纯函数:
|
|
60
|
-
```rust
|
|
61
|
-
pub fn op_tree_replace(snapshot: &mut Snapshot, ns: &str, def: &str, path: &[usize], new_node: &Cirru) -> Result<(), String>
|
|
62
|
-
pub fn op_show_def(snapshot: &Snapshot, ns: &str, def: &str) -> Result<String, String>
|
|
63
|
-
```
|
|
64
|
-
3. `calcit.cli` 的每个 proc handler 变成薄薄的代理层:
|
|
65
|
-
```rust
|
|
66
|
-
pub fn tree_replace(xs: Vec<Calcit>, _cs: &CallStackList) -> Result<Calcit, CalcitErr> {
|
|
67
|
-
let args = resolve_cli_args("calcit.cli/tree-replace", &xs, TREE_REPLACE)?;
|
|
68
|
-
let mut snapshot = load_snapshot(&args.file_path()?)?;
|
|
69
|
-
let (ns, def) = args.target("target")?;
|
|
70
|
-
let path = parse_path(&args.string("path")?, false)?;
|
|
71
|
-
let code = args.cirru_quote("code")?;
|
|
72
|
-
ops::op_tree_replace(&mut snapshot, &ns, &def, &path, &code)?;
|
|
73
|
-
save_snapshot(&snapshot, &args.file_path()?)?;
|
|
74
|
-
Ok(Calcit::Str(Arc::from("replaced")))
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
4. CLI handlers 也变成薄代理:
|
|
78
|
-
```rust
|
|
79
|
-
fn handle_replace(opts: &TreeReplaceCommand, snapshot_file: &str) -> Result<(), String> {
|
|
80
|
-
let (ns, def) = parse_target(&opts.target)?;
|
|
81
|
-
let path = parse_path(&opts.path)?;
|
|
82
|
-
let code = parse_input_to_cirru(...)?;
|
|
83
|
-
let mut snapshot = load_snapshot(snapshot_file)?;
|
|
84
|
-
ops::op_tree_replace(&mut snapshot, ns, def, &path, &code)?;
|
|
85
|
-
save_snapshot(&snapshot, snapshot_file)?;
|
|
86
|
-
// print preview...
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### 收益
|
|
91
|
-
- 消除 ~2000 行重复代码
|
|
92
|
-
- 修复 bug 只需改一处
|
|
93
|
-
- 新功能只需写一次共享逻辑
|
|
94
|
-
|
|
95
|
-
### 风险
|
|
96
|
-
- 大规模重构需要充分测试
|
|
97
|
-
- 需要迁移 `calcit_cli_tree.rs` 中的复杂逻辑(rewrite with references)
|
|
98
|
-
- `calcit.cli` 的 `CalcitErr` 错误类型和 `cli_handlers` 的 `String` 错误类型需要对齐
|
|
99
|
-
|
|
100
|
-
## 代码规模统计
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
src/bin/injection/
|
|
104
|
-
calcit_cli.rs 1297 行 ← 需要拆解: 辅助函数 + proc handlers
|
|
105
|
-
calcit_cli_extra.rs 846 行 ← 同上
|
|
106
|
-
calcit_cli_tree.rs 232 行 ← 纯辅助函数, 可整体移出
|
|
107
|
-
calcit_cli_args.rs 147 行 ← 桥接层, 保留
|
|
108
|
-
calcit_cli_specs.rs 192 行 ← 参数规格定义, 保留
|
|
109
|
-
mod.rs ~60 行 ← 注册代码, 保留
|
|
110
|
-
|
|
111
|
-
src/bin/cli_handlers/
|
|
112
|
-
edit.rs 2026 行 ← 辅助函数 + handler 逻辑
|
|
113
|
-
tree.rs 1433 行 ← handler 逻辑
|
|
114
|
-
query.rs 2135 行 ← handler 逻辑
|
|
115
|
-
common.rs 373 行 ← 工具函数
|
|
116
|
-
```
|