Summary
FormulaVisitor.calculateDependencies(tsCode) in packages/markdown-template/src/FormulaVisitor.ts is a stub (// TODO!!) that always returns []. It's invoked during TemplateMark typing (templatemarkutil.ts → templateMarkTypingGen), which sets dependencies on every FormulaDefinition / ConditionalDefinition, and the value is serialized through markdown-html (ToHtmlStringVisitor.ts writes the dependencies attribute, rules.ts reads it back). Today that attribute is always an empty array.
Continuing the working discussion with @mttrbrts
Current state / safety
Traced consumers of the field across the org:
markdown-transform: only written (HTML attr), read back (rules.ts), or stripped (markdown-cicero/ToCommonMarkVisitor.ts deletes it).
template-engine: only TemplateMarkInterpreter.ts does delete context.dependencies.
No code branches on the values, so implementing real extraction is self-contained with no regression surface — it only populates a field that is currently always empty.
Proposed approach
Extract root identifiers from the formula's TypeScript source (the param is named tsCode) via the AST rather than regex:
- Collect root identifiers that reference template variables / model, excluding locally-bound names, function params, and built-ins.
- Handle optional chaining (
a?.b?.c → root a).
- Return
[] on parse failure or unrecognized constructs (note: this changes the current catch, which throws — flagging so it's an explicit decision).
Open questions to scope before implementation
- Runtime parser:
typescript is currently a devDependency of markdown-template. Preference for promoting the TS compiler API to a runtime dep vs. a lighter parser (e.g. @typescript-eslint/typescript-estree)?
- Dependency definition: which identifier classes count — model/variable refs only, and are locally-declared bindings and function params always excluded?
- Cross-formula references: Devanshi noted formulas lack stable user-facing names, so these look out-of-scope for v1 — agreed to defer?
I can't make the Wednesday call, so opening this for async discussion per your
suggestion. Once (1) the runtime parser and (2) the dependency-definition
question are settled here, I'll scope the PR to those decisions.
Summary
FormulaVisitor.calculateDependencies(tsCode)inpackages/markdown-template/src/FormulaVisitor.tsis a stub (// TODO!!) that always returns[]. It's invoked during TemplateMark typing (templatemarkutil.ts→templateMarkTypingGen), which setsdependencieson everyFormulaDefinition/ConditionalDefinition, and the value is serialized through markdown-html (ToHtmlStringVisitor.tswrites thedependenciesattribute,rules.tsreads it back). Today that attribute is always an empty array.Continuing the working discussion with @mttrbrts
Current state / safety
Traced consumers of the field across the org:
markdown-transform: only written (HTML attr), read back (rules.ts), or stripped (markdown-cicero/ToCommonMarkVisitor.tsdeletes it).template-engine: onlyTemplateMarkInterpreter.tsdoesdelete context.dependencies.No code branches on the values, so implementing real extraction is self-contained with no regression surface — it only populates a field that is currently always empty.
Proposed approach
Extract root identifiers from the formula's TypeScript source (the param is named
tsCode) via the AST rather than regex:a?.b?.c→ roota).[]on parse failure or unrecognized constructs (note: this changes the currentcatch, which throws — flagging so it's an explicit decision).Open questions to scope before implementation
typescriptis currently a devDependency of markdown-template. Preference for promoting the TS compiler API to a runtime dep vs. a lighter parser (e.g.@typescript-eslint/typescript-estree)?I can't make the Wednesday call, so opening this for async discussion per your
suggestion. Once (1) the runtime parser and (2) the dependency-definition
question are settled here, I'll scope the PR to those decisions.