@calcit/procs 0.12.47 → 0.12.49
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-06-semantic-tree-navigation-rfc.md +569 -0
- package/RFCs/07-08-ffi-features-and-js-object-type-rfc.md +223 -0
- package/RFCs/README.md +21 -19
- package/editing-history/2026-06-27-0052-cli-improvements.md +41 -0
- package/editing-history/2026-06-27-0202-docs-indexing-improvements.md +22 -0
- package/editing-history/2026-06-27-0315-file-splits.md +17 -0
- package/editing-history/2026-06-27-0416-agent-advanced-split.md +15 -0
- package/editing-history/2026-07-07-0000-semantic-tree-navigation.md +49 -0
- package/editing-history/2026-07-08-1650-features-and-js-object-type.md +25 -0
- package/editing-history/202607040040-fix-format-cirru-edn-quoting.md +14 -0
- package/editing-history/archived/2026-06-29-0117-upgrade-doc-snapshot-migration.md +2 -0
- package/editing-history/archived/2026-06-29-calcit-cli.md +80 -0
- package/editing-history/archived/2026-06-29-typed-calcit-cli-schemas.md +23 -0
- package/editing-history/archived/20260630-duplication-analysis.md +116 -0
- package/lib/js-cirru.mjs +2 -4
- package/lib/package.json +1 -1
- package/package.json +1 -1
- package/ts-src/js-cirru.mts +2 -4
- /package/editing-history/{2026-0213-1841-trait-origin-structural-eq.md → 2026-02-13-1841-trait-origin-structural-eq.md} +0 -0
- /package/editing-history/{2026-0214-2050-js-codegen-recursion-tag-migration.md → 2026-02-14-2050-js-codegen-recursion-tag-migration.md} +0 -0
- /package/editing-history/{2026-0214-2358-emit-js-modularization-shift-left.md → 2026-02-14-2358-emit-js-modularization-shift-left.md} +0 -0
- /package/editing-history/{2026-0215-0000-diagnostics-consolidated.md → 2026-02-15-0000-diagnostics-consolidated.md} +0 -0
- /package/editing-history/{2026-0215-1941-macro-diagnostics-refinement.md → 2026-02-15-1941-macro-diagnostics-refinement.md} +0 -0
- /package/editing-history/{2026-0216-2043-core-api-docs-cleanup.md → 2026-02-16-2043-core-api-docs-cleanup.md} +0 -0
- /package/editing-history/{2026-0223-0834-migrate-to-defstruct.md → 2026-02-23-0834-migrate-to-defstruct.md} +0 -0
- /package/editing-history/{2026-0223-2321-ns-imports-code-fixes.md → 2026-02-23-2321-ns-imports-code-fixes.md} +0 -0
- /package/editing-history/{2026-0225-0002-language-behavior-eval-mode.md → 2026-02-25-0002-language-behavior-eval-mode.md} +0 -0
- /package/editing-history/{2026-0225-0111-guidebook-no-check-block-upgrades.md → 2026-02-25-0111-guidebook-no-check-block-upgrades.md} +0 -0
- /package/editing-history/{2026-0225-0113-runtime-type-validation-and-macro-quoting.md → 2026-02-25-0113-runtime-type-validation-and-macro-quoting.md} +0 -0
- /package/editing-history/{2026-0225-1131-check-md-eval-improvements.md → 2026-02-25-1131-check-md-eval-improvements.md} +0 -0
- /package/editing-history/{2026-0226-1324-check-md-inprocess-cache-and-path-labels.md → 2026-02-26-1324-check-md-inprocess-cache-and-path-labels.md} +0 -0
- /package/editing-history/{2026-0227-1640-unify-markdown-readers.md → 2026-02-27-1640-unify-markdown-readers.md} +0 -0
- /package/editing-history/{2026-0227-1958-tree-rewrite-command-and-reference-model.md → 2026-02-27-1958-tree-rewrite-command-and-reference-model.md} +0 -0
- /package/editing-history/{2026-0227-2200-split-def-command.md → 2026-02-27-2200-split-def-command.md} +0 -0
- /package/editing-history/{2026-0227-2212-tree-raise-wrap.md → 2026-02-27-2212-tree-raise-wrap.md} +0 -0
- /package/editing-history/{2026-0227-2223-calcit-agent-docs-optimize.md → 2026-02-27-2223-calcit-agent-docs-optimize.md} +0 -0
- /package/editing-history/{2026-0301-0212-query-search-entry-and-ffi-warning.md → 2026-03-01-0212-query-search-entry-and-ffi-warning.md} +0 -0
- /package/editing-history/{2026-0303-1934-check-types-and-core-annotations.md → 2026-03-03-1934-check-types-and-core-annotations.md} +0 -0
- /package/editing-history/{2026-0304-0000-generics-fn-typevar-identity.md → 2026-03-04-0000-generics-fn-typevar-identity.md} +0 -0
- /package/editing-history/{2026-0304-1331-tag-call-warning-and-dot-access-migration.md → 2026-03-04-1331-tag-call-warning-and-dot-access-migration.md} +0 -0
- /package/editing-history/{2026-0304-1548-impl-new-dot-method-input-and-doc-hints.md → 2026-03-04-1548-impl-new-dot-method-input-and-doc-hints.md} +0 -0
- /package/editing-history/{2026-0304-1645-calcit-eq-contract-refactor-and-macro-tests.md → 2026-03-04-1645-calcit-eq-contract-refactor-and-macro-tests.md} +0 -0
- /package/editing-history/{2026-0304-2200-assert-type-assert-traits-composable-runtime-checks.md → 2026-03-04-2200-assert-type-assert-traits-composable-runtime-checks.md} +0 -0
- /package/editing-history/{2026-0305-0042-type-inference-argtypes-and-core-hints.md → 2026-03-05-0042-type-inference-argtypes-and-core-hints.md} +0 -0
- /package/editing-history/{2026-0305-0115-calcit-core-generic-refinements.md → 2026-03-05-0115-calcit-core-generic-refinements.md} +0 -0
- /package/editing-history/{2026-0305-1930-schema-migration-cr-edit.md → 2026-03-05-1930-schema-migration-cr-edit.md} +0 -0
- /package/editing-history/{2026-0305-1939-query-schema-adaptation.md → 2026-03-05-1939-query-schema-adaptation.md} +0 -0
- /package/editing-history/{2026-0306-0120-schema-hint-migration-batch.md → 2026-03-06-0120-schema-hint-migration-batch.md} +0 -0
- /package/editing-history/{2026-0306-1416-core-macro-schema-migration.md → 2026-03-06-1416-core-macro-schema-migration.md} +0 -0
- /package/editing-history/{2026-0306-1552-core-schema-and-hintfn-migration.md → 2026-03-06-1552-core-schema-and-hintfn-migration.md} +0 -0
- /package/editing-history/{2026-0306-1936-schema-normalization-and-preprocess-preload.md → 2026-03-06-1936-schema-normalization-and-preprocess-preload.md} +0 -0
- /package/editing-history/{2026-0307-0000-migrate-hint-fn-to-schema.md → 2026-03-07-0000-migrate-hint-fn-to-schema.md} +0 -0
- /package/editing-history/{2026-0307-0000-remove-enum-prototype-field.md → 2026-03-07-0000-remove-enum-prototype-field.md} +0 -0
- /package/editing-history/{2026-0307-0000-schema-args-type-enforcement.md → 2026-03-07-0000-schema-args-type-enforcement.md} +0 -0
- /package/editing-history/{2026-0307-0142-unit-type-and-builtin-schemas.md → 2026-03-07-0142-unit-type-and-builtin-schemas.md} +0 -0
- /package/editing-history/{2026-0307-1652-decouple-snapshot-schema-to-calcit-type.md → 2026-03-07-1652-decouple-snapshot-schema-to-calcit-type.md} +0 -0
- /package/editing-history/{2026-0307-1821-snapshot-schema-validation.md → 2026-03-07-1821-snapshot-schema-validation.md} +0 -0
- /package/editing-history/{2026-0307-1959-schema-def-kind-arity-validation.md → 2026-03-07-1959-schema-def-kind-arity-validation.md} +0 -0
- /package/editing-history/{2026-0308-0031-schema-generics-quote-normalization.md → 2026-03-08-0031-schema-generics-quote-normalization.md} +0 -0
- /package/editing-history/{2026-0308-1905-schema-typeref-and-assert-migration.md → 2026-03-08-1905-schema-typeref-and-assert-migration.md} +0 -0
- /package/editing-history/{2026-0308-2033-schema-wrapper-migration.md → 2026-03-08-2033-schema-wrapper-migration.md} +0 -0
- /package/editing-history/{2026-0308-2315-late-schema-cleanup-and-warning-compat.md → 2026-03-08-2315-late-schema-cleanup-and-warning-compat.md} +0 -0
- /package/editing-history/{2026-0309-1753-schema-type-fail-tests.md → 2026-03-09-1753-schema-type-fail-tests.md} +0 -0
- /package/editing-history/{2026-0310-1040-edit-schema-primitive-tag-support.md → 2026-03-10-1040-edit-schema-primitive-tag-support.md} +0 -0
- /package/editing-history/{2026-0310-1754-ns-entry-snapshot-migration.md → 2026-03-10-1754-ns-entry-snapshot-migration.md} +0 -0
- /package/editing-history/{2026-0313-2216-validate-struct-type-arg-arity.md → 2026-03-13-2216-validate-struct-type-arg-arity.md} +0 -0
- /package/editing-history/{2026-0316-2353-runtime-boundary-cleanup.md → 2026-03-16-2353-runtime-boundary-cleanup.md} +0 -0
- /package/editing-history/{2026-0317-0150-runtime-boundary-lookup-cleanup.md → 2026-03-17-0150-runtime-boundary-lookup-cleanup.md} +0 -0
- /package/editing-history/{2026-0320-0116-json-builtins-and-runtime-docs.md → 2026-03-20-0116-json-builtins-and-runtime-docs.md} +0 -0
- /package/editing-history/{2026-0326-2013-docs-frontmatter-and-module-search.md → 2026-03-26-2013-docs-frontmatter-and-module-search.md} +0 -0
- /package/editing-history/{2026-0412-1524-js-codegen-map-to-record.md → 2026-04-12-1524-js-codegen-map-to-record.md} +0 -0
- /package/editing-history/{2026-0412-1549-map-to-record-field-validation.md → 2026-04-12-1549-map-to-record-field-validation.md} +0 -0
- /package/editing-history/{2026-0413-1600-tuple-to-enum-rewrite.md → 2026-04-13-1600-tuple-to-enum-rewrite.md} +0 -0
- /package/editing-history/{2026-0413-2309-typeslot-enum-compile-safety.md → 2026-04-13-2309-typeslot-enum-compile-safety.md} +0 -0
- /package/editing-history/{2026-0414-1500-loose-record-syntax.md → 2026-04-14-1500-loose-record-syntax.md} +0 -0
- /package/editing-history/{2026-0414-2259-bidir-type-check-refactor.md → 2026-04-14-2259-bidir-type-check-refactor.md} +0 -0
- /package/editing-history/{2026-0415-0120-match-syntax-exhaustiveness.md → 2026-04-15-0120-match-syntax-exhaustiveness.md} +0 -0
- /package/editing-history/{202604151211-record-nth-optimization.md → 2026-04-15-1211-record-nth-optimization.md} +0 -0
- /package/editing-history/{20260416-1936-predicate-narrowing-expansion.md → 2026-04-16-1936-predicate-narrowing-expansion.md} +0 -0
- /package/editing-history/{202604170132-monomorphize-map-filter.md → 2026-04-17-0132-monomorphize-map-filter.md} +0 -0
- /package/editing-history/{202604170135-monomorphize-includes-reverse.md → 2026-04-17-0135-monomorphize-includes-reverse.md} +0 -0
- /package/editing-history/{202604170140-fold-type-predicates.md → 2026-04-17-0140-fold-type-predicates.md} +0 -0
- /package/editing-history/{202604170154-generic-dispatch-records-tuples.md → 2026-04-17-0154-generic-dispatch-records-tuples.md} +0 -0
- /package/editing-history/{202604170520-simplify-generic-defns-via-method-dispatch.md → 2026-04-17-0520-simplify-generic-defns-via-method-dispatch.md} +0 -0
- /package/editing-history/{202605210055-tree-show-cr-config-and-edit-cleanup.md → 2026-05-21-0055-tree-show-cr-config-and-edit-cleanup.md} +0 -0
- /package/editing-history/{202605312052-macro-schema-roundtrip-and-weak-types.md → 2026-05-31-2052-macro-schema-roundtrip-and-weak-types.md} +0 -0
- /package/editing-history/{202605312105-map-generic-weak-types-followup.md → 2026-05-31-2105-map-generic-weak-types-followup.md} +0 -0
- /package/editing-history/{2026-0601-0003-update-callback-field-specialization.md → 2026-06-01-0003-update-callback-field-specialization.md} +0 -0
- /package/editing-history/{2026-0601-2317-data-definition-where-bounds.md → 2026-06-01-2317-data-definition-where-bounds.md} +0 -0
- /package/editing-history/{2026-0602-0114-data-definition-where-macro-followup.md → 2026-06-02-0114-data-definition-where-macro-followup.md} +0 -0
- /package/editing-history/{2026-0603-check-md-edn-errors.md → 2026-06-03-0000-check-md-edn-errors.md} +0 -0
- /package/editing-history/{2026-0603-1600-check-md-entry-modules.md → 2026-06-03-1600-check-md-entry-modules.md} +0 -0
- /package/editing-history/{2026-0604-check-md-app-main-init.md → 2026-06-04-0000-check-md-app-main-init.md} +0 -0
- /package/editing-history/{202606042218-compiled-executable-runtime-backfill.md → 2026-06-04-2218-compiled-executable-runtime-backfill.md} +0 -0
- /package/editing-history/{2026-0609-with-type-slot-scoped-binding.md → 2026-06-09-0000-with-type-slot-scoped-binding.md} +0 -0
- /package/editing-history/{2026-0609-1241-remove-bind-type.md → 2026-06-09-1241-remove-bind-type.md} +0 -0
- /package/editing-history/{2026-0609-1800-core-effect-tags.md → 2026-06-09-1800-core-effect-tags.md} +0 -0
- /package/editing-history/{2026-0610-1200-get-def-doc-schema-builtin.md → 2026-06-10-1200-get-def-doc-schema-builtin.md} +0 -0
- /package/editing-history/{2026-0615-1500-effects-graph-mvp.md → 2026-06-15-1500-effects-graph-mvp.md} +0 -0
- /package/editing-history/{202606161700-effects-graph-ste-tree.md → 2026-06-16-1700-effects-graph-ste-tree.md} +0 -0
- /package/editing-history/{2025-0412-1453-map-to-record-rewrite.md → archived/2025-04-12-1453-map-to-record-rewrite.md} +0 -0
- /package/editing-history/{202504160117-wasm-codegen-and-catalog-update.md → archived/2025-04-16-0117-wasm-codegen-and-catalog-update.md} +0 -0
- /package/editing-history/{202507160207-wasm-encoder-migration.md → archived/2025-07-16-0207-wasm-encoder-migration.md} +0 -0
- /package/editing-history/{202507161633-wasm-data-structures.md → archived/2025-07-16-1633-wasm-data-structures.md} +0 -0
- /package/editing-history/{2026-0213-1926-docs-tests-followup.md → archived/2026-02-13-1926-docs-tests-followup.md} +0 -0
- /package/editing-history/{2026-0216-2128-docs-smoke-and-trait-errors.md → archived/2026-02-16-2128-docs-smoke-and-trait-errors.md} +0 -0
- /package/editing-history/{2026-0225-1234-watch-mode-default-once.md → archived/2026-02-25-1234-watch-mode-default-once.md} +0 -0
- /package/editing-history/{2026-0307-1302-calcit-agent-docs-update.md → archived/2026-03-07-1302-calcit-agent-docs-update.md} +0 -0
- /package/editing-history/{2026-0309-1819-add-test-fail-script.md → archived/2026-03-09-1819-add-test-fail-script.md} +0 -0
- /package/editing-history/{2026-0309-1944-split-type-fail-tests.md → archived/2026-03-09-1944-split-type-fail-tests.md} +0 -0
- /package/editing-history/{2026-0316-1449-profiling-tools-reorg.md → archived/2026-03-16-1449-profiling-tools-reorg.md} +0 -0
- /package/editing-history/{2026-0317-2026-afternoon-runtime-boundary-optimization-summary.md → archived/2026-03-17-2026-afternoon-runtime-boundary-optimization-summary.md} +0 -0
- /package/editing-history/{2026-0318-1802-tips-level-and-overwrite-schema-preservation.md → archived/2026-03-18-1802-tips-level-and-overwrite-schema-preservation.md} +0 -0
- /package/editing-history/{2026-0320-1229-query-window-3-with-parent-preview.md → archived/2026-03-20-1229-query-window-3-with-parent-preview.md} +0 -0
- /package/editing-history/{2026-0323-1137-command-echo-tool-output-cleanup.md → archived/2026-03-23-1137-command-echo-tool-output-cleanup.md} +0 -0
- /package/editing-history/{2026-0410-0011-snapshot-empty-version-pipe-marker.md → archived/2026-04-10-0011-snapshot-empty-version-pipe-marker.md} +0 -0
- /package/editing-history/{202604160131-wasm-math-and-test-integration.md → archived/2026-04-16-0131-wasm-math-and-test-integration.md} +0 -0
- /package/editing-history/{202604161507-wasm-data-structures-and-rfc-rename.md → archived/2026-04-16-1507-wasm-data-structures-and-rfc-rename.md} +0 -0
- /package/editing-history/{202604161520-wasm-bitwise-and-match.md → archived/2026-04-16-1520-wasm-bitwise-and-match.md} +0 -0
- /package/editing-history/{202604161542-wasm-cross-ns-host-imports.md → archived/2026-04-16-1542-wasm-cross-ns-host-imports.md} +0 -0
- /package/editing-history/{20260417-0026-wasm-rest-args.md → archived/2026-04-17-0026-wasm-rest-args.md} +0 -0
- /package/editing-history/{202604170048-wasm-type-of.md → archived/2026-04-17-0048-wasm-type-of.md} +0 -0
- /package/editing-history/{202604170051-wasm-derived-predicates.md → archived/2026-04-17-0051-wasm-derived-predicates.md} +0 -0
- /package/editing-history/{202604172316-wasm-do-println-fixes.md → archived/2026-04-17-2316-wasm-do-println-fixes.md} +0 -0
- /package/editing-history/{202604181208-split-emit-wasm-and-bump-version.md → archived/2026-04-18-1208-split-emit-wasm-and-bump-version.md} +0 -0
- /package/editing-history/{202604181430-wasm-list-match-and-method-dispatch.md → archived/2026-04-18-1430-wasm-list-match-and-method-dispatch.md} +0 -0
- /package/editing-history/{202604182041-cr-wasm-split-and-runtime-stability.md → archived/2026-04-18-2041-cr-wasm-split-and-runtime-stability.md} +0 -0
- /package/editing-history/{202604182045-v0.12.23-ci-wasm-fix.md → archived/2026-04-18-2045-v0.12.23-ci-wasm-fix.md} +0 -0
- /package/editing-history/{202604211818-wasm-string-ops-v2.md → archived/2026-04-21-1818-wasm-string-ops-v2.md} +0 -0
- /package/editing-history/{202604212332-split-emit-wasm.md → archived/2026-04-21-2332-split-emit-wasm.md} +0 -0
- /package/editing-history/{2026-0422-0114-wasm-hof-intercepts-and-set-intersection.md → archived/2026-04-22-0114-wasm-hof-intercepts-and-set-intersection.md} +0 -0
- /package/editing-history/{2026-0422-0136-wasm-enum-tuple-bool-str-fixes.md → archived/2026-04-22-0136-wasm-enum-tuple-bool-str-fixes.md} +0 -0
- /package/editing-history/{202604221340-wasm-map-diff-new-and-let-intercept.md → archived/2026-04-22-1340-wasm-map-diff-new-and-let-intercept.md} +0 -0
- /package/editing-history/{202604231419-v0.12.26-wasm-bisection-fixes.md → archived/2026-04-23-1419-v0.12.26-wasm-bisection-fixes.md} +0 -0
- /package/editing-history/{202604231645-release-conventions.md → archived/2026-04-23-1645-release-conventions.md} +0 -0
- /package/editing-history/{202604251940-wasm-suite-multi-module-entry.md → archived/2026-04-25-1940-wasm-suite-multi-module-entry.md} +0 -0
- /package/editing-history/{202604252003-wasm-method-includes-string-and-set-refactor.md → archived/2026-04-25-2003-wasm-method-includes-string-and-set-refactor.md} +0 -0
- /package/editing-history/{202604252010-wasm-suite-add-fn-lens-edn.md → archived/2026-04-25-2010-wasm-suite-add-fn-lens-edn.md} +0 -0
- /package/editing-history/{202604252051-display-by.md → archived/2026-04-25-2051-display-by.md} +0 -0
- /package/editing-history/{202604281728-fix-gensym-stable.md → archived/2026-04-28-1728-fix-gensym-stable.md} +0 -0
- /package/editing-history/{202604291400-fix-bind-type-precompile.md → archived/2026-04-29-1400-fix-bind-type-precompile.md} +0 -0
- /package/editing-history/{2026-0526-0957-match-docs-check-md.md → archived/2026-05-26-0957-match-docs-check-md.md} +0 -0
- /package/editing-history/{202605312059-ci-docs-test-and-fn-helper-tightening.md → archived/2026-05-31-2059-ci-docs-test-and-fn-helper-tightening.md} +0 -0
- /package/editing-history/{2026-0601-0005-release-0.12.36.md → archived/2026-06-01-0005-release-0.12.36.md} +0 -0
- /package/editing-history/{2026-0601-2230-enum-struct-payload-docs.md → archived/2026-06-01-2230-enum-struct-payload-docs.md} +0 -0
- /package/editing-history/{2026-0603-1620-release-0.12.38.md → archived/2026-06-03-1620-release-0.12.38.md} +0 -0
- /package/editing-history/{2026-0604-release-0.12.39.md → archived/2026-06-04-0000-release-0.12.39.md} +0 -0
- /package/editing-history/{202606042230-release-0.12.40.md → archived/2026-06-04-2230-release-0.12.40.md} +0 -0
- /package/editing-history/{202606121525-weak-types-dots-format.md → archived/2026-06-12-1525-weak-types-dots-format.md} +0 -0
- /package/editing-history/{202606131200_primitive_schema_tags.md → archived/2026-06-13-1200-primitive_schema_tags.md} +0 -0
- /package/editing-history/{202606201142-ts-declaration-d-mts.md → archived/2026-06-20-1142-ts-declaration-d-mts.md} +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
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
|
+
```
|
package/lib/js-cirru.mjs
CHANGED
|
@@ -433,14 +433,12 @@ export let format_cirru_edn = (data, useInline = true) => {
|
|
|
433
433
|
return "\ndo nil" + "\n";
|
|
434
434
|
}
|
|
435
435
|
if (typeof data === "string") {
|
|
436
|
-
|
|
436
|
+
let quoted = writeCirruCode([[to_cirru_edn(data)]], { useInline: useInline }).trim();
|
|
437
|
+
return "\ndo " + quoted + "\n";
|
|
437
438
|
}
|
|
438
439
|
if (typeof data === "boolean") {
|
|
439
440
|
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
440
441
|
}
|
|
441
|
-
if (typeof data === "string") {
|
|
442
|
-
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
443
|
-
}
|
|
444
442
|
if (data instanceof CalcitSymbol) {
|
|
445
443
|
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
446
444
|
}
|
package/lib/package.json
CHANGED
package/package.json
CHANGED
package/ts-src/js-cirru.mts
CHANGED
|
@@ -437,14 +437,12 @@ export let format_cirru_edn = (data: CalcitValue, useInline: boolean = true): st
|
|
|
437
437
|
return "\ndo nil" + "\n";
|
|
438
438
|
}
|
|
439
439
|
if (typeof data === "string") {
|
|
440
|
-
|
|
440
|
+
let quoted = writeCirruCode([[to_cirru_edn(data)]], { useInline: useInline }).trim();
|
|
441
|
+
return "\ndo " + quoted + "\n";
|
|
441
442
|
}
|
|
442
443
|
if (typeof data === "boolean") {
|
|
443
444
|
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
444
445
|
}
|
|
445
|
-
if (typeof data === "string") {
|
|
446
|
-
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
447
|
-
}
|
|
448
446
|
if (data instanceof CalcitSymbol) {
|
|
449
447
|
return "\ndo " + to_cirru_edn(data) + "\n";
|
|
450
448
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/editing-history/{2026-0227-2212-tree-raise-wrap.md → 2026-02-27-2212-tree-raise-wrap.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/editing-history/{2026-0603-check-md-edn-errors.md → 2026-06-03-0000-check-md-edn-errors.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/editing-history/{2026-0609-1241-remove-bind-type.md → 2026-06-09-1241-remove-bind-type.md}
RENAMED
|
File without changes
|
/package/editing-history/{2026-0609-1800-core-effect-tags.md → 2026-06-09-1800-core-effect-tags.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/editing-history/{202604170048-wasm-type-of.md → archived/2026-04-17-0048-wasm-type-of.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/editing-history/{202604252051-display-by.md → archived/2026-04-25-2051-display-by.md}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|