Skip to content

feat(templates): support format syntax in the template path (#620)#1337

Merged
chhoumann merged 4 commits into
masterfrom
chhoumann/620-format-syntax-template-path
Jun 13, 2026
Merged

feat(templates): support format syntax in the template path (#620)#1337
chhoumann merged 4 commits into
masterfrom
chhoumann/620-format-syntax-template-path

Conversation

@chhoumann

@chhoumann chhoumann commented Jun 13, 2026

Copy link
Copy Markdown
Owner

Closes #620

What & why

Using QuickAdd format syntax in a Template choice's Template Path (e.g.
Templates/{{value:collectionName}} Template.md) previously failed with
Template file not found — the path was the one note-creation input never run through the
formatter (file name, folder, and body already were). This makes the template path dynamic,
extending the recently-shipped {{FOLDER}}/{{VALUE}} work.

Approach

Resolve the path once at each engine's entry and thread the resolved value into both
target-path construction (extension/name) and the content read — so the file that's created
and the template that's read can never disagree (a token expanding to .canvas creates a canvas
file, not .md). getTemplateContent takes a pre-resolved path and no longer formats (avoids
double-evaluating {{date}}/{{random}}).

New CompleteFormatter.formatTemplateFilePath is a deliberately path-safe subset of format():
resolves value/date/time/field/global/selected/clipboard/vdate/random/math, but does not run
macros, inline JavaScript, or {{TEMPLATE:}} inclusion (a file-path lookup shouldn't execute code).
It guards {{title}} (incl. when injected via a global var), leaves {{FOLDER}}/{{FILENAMECURRENT}}
literal, and trims.

Covered flows

  • Template choice — create / overwrite / append (resolved path drives the target extension/name).
  • Capture choice — create file with template.
  • Insert template into the active note + the move/rename offer.
  • Apply-template-to-note & the API — now re-validate the resolved extension so a token that
    resolves to .canvas/.base is not applied to a markdown note.
  • Preflight (one-page input modal + CLI quickadd:check/quickadd:run) — collects tokens in the
    template path via a shared scanTemplateSource (template choices and capture create-with-template).
  • Choice builder — shows a neutral "Contains format syntax — resolved at run time" hint instead of a
    false "Template not found".

Tests

pnpm test (1901 pass), pnpm lint, pnpm build, and cd docs && pnpm build all green. Added unit
coverage for formatTemplateFilePath (path-safe allowlist, {{title}} guard incl. global-injected,
trim), the resolved-extension match in TemplateChoiceEngine, preflight path-token collection
(template + capture), and the hasTemplatePathSyntax helper.

Verified in the dev vault (e2e)

Real Obsidian, current build:

  • quickadd:check reports collectionName (the path token) as a required input.
  • quickadd:run id=… value-collectionName=Games creates the output file from the resolved
    Templates/Games Template.md (and the body's {{value:collectionName}} reuses the same answer).

Docs

Documented on the Template choice page (both next and the served version-2.13.1 snapshot),
including the path-safe restrictions and the known limitations below.

Known limitations (documented, intentional)

  • {{TEMPLATE:}} inclusion with a tokenized path isn't supported (the token regex can't capture a
    path containing }}).
  • A dynamic template path can't be auto-bundled when exporting a QuickAdd package (it isn't a literal
    file).
  • One-page preflight can't pre-scan the body of a template whose path is dynamic (the path depends
    on answers still being collected); those prompts surface at run time.
  • Anonymous {{value}} (vs named {{value:x}}) in a path may re-prompt across the capture→template
    boundary.

Review

Design and implementation were each adversarially reviewed (opposite-model + multi-lens). The seam
choice (resolve-at-entry vs. formatting inside the read) and the resolved-extension validation came
directly from that review.

Summary by CodeRabbit

  • New Features

    • Template paths support QuickAdd format syntax and are resolved once at run time so file extension and collision behavior match the resolved template.
  • Bug Fixes

    • Applying a template re-checks the resolved path and prevents non-markdown templates, showing a notice instead of proceeding.
  • Validation

    • Validators detect template-path syntax and display a neutral “resolved at run time” hint rather than performing existence checks.
  • Documentation

    • Clarified supported tokens, path-safe formatting rules, and limits for dynamic template paths.
  • Tests

    • Added coverage and mocks for template-path formatting, resolution, and preflight scanning.

Resolve QuickAdd format tokens (e.g. {{value:collectionName}}, {{date:YYYY}}) in
a template's source path so a choice can point at
"Templates/{{value:collectionName}} Template.md". The path is resolved once at
each engine's entry via a new path-safe CompleteFormatter.formatTemplateFilePath
and threaded into both target-path construction (extension/name) and the content
read, so the created file and the read template can never disagree.

- formatTemplateFilePath: path-safe token subset (value/date/time/field/global/
  selected/clipboard/vdate/random/math); does not run macros, inline JS, or
  {{TEMPLATE:}} inclusion; guards {{title}}; leaves {{FOLDER}} literal; trims.
- Covers all template-resolution flows: Template create/overwrite/append,
  Capture create-with-template, Insert template, and apply-to-active-note
  (which re-validates the resolved extension so a token resolving to
  .canvas/.base is not applied to a markdown note).
- Preflight (one-page input + CLI) collects tokens in the template path via a
  shared scanTemplateSource (template choices and capture create-with-template).
- Choice builder shows a neutral "resolved at run time" hint instead of a false
  "Template not found" for format-syntax paths.

Closes #620
@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9272e90a-a018-4e22-b246-be2335e0d2d1

📥 Commits

Reviewing files that changed from the base of the PR and between 1787458 and 00dac66.

📒 Files selected for processing (1)
  • src/engine/TemplateEngine.ts

📝 Walkthrough

Walkthrough

This PR enables template paths to contain QuickAdd format tokens and resolves them safely at run time. It threads a memoized, path-safe resolved template source path through formatter helpers, template engines, preflight scanning, UI validators, styles, and tests so extension/lookup and content loading remain consistent.

Changes

Template path dynamic resolution

Layer / File(s) Summary
Template path syntax detection utility
src/utils/templatePathSyntax.ts, src/utils/templatePathSyntax.test.ts
hasTemplatePathSyntax() detects {{...}} tokens in template paths; tests verify detection across token and non-token patterns.
Formatter path-safe token resolution
src/formatters/completeFormatter.ts, src/formatters/completeFormatter.test.ts
CompleteFormatter.formatTemplateFilePath() resolves a path-safe subset of tokens (expands globals first, rejects {{title}}, disallows macros/{{TEMPLATE:...}} execution) and trims the result; tests cover safety rules and token cases.
Base template engine path resolution
src/engine/TemplateEngine.ts, src/engine/SingleTemplateEngine.ts
TemplateEngine.resolveTemplateSourcePath() added; getTemplateContent() now expects a resolved path; SingleTemplateEngine.run() resolves before loading.
TemplateInsertEngine resolved path memoization
src/engine/TemplateInsertEngine.ts, src/engine/TemplateInsertEngine.test.ts, src/engine/applyTemplateToActiveNote.ts, src/engine/applyTemplateToActiveNote.test.ts
TemplateInsertEngine.getResolvedTemplatePath() memoizes resolution and is used for overwrite mode, target-path computation, and content loading; applyTemplateToNote re-validates the resolved path and returns null if it’s not a markdown template.
TemplateChoiceEngine resolved path threading
src/engine/TemplateChoiceEngine.ts, src/engine/TemplateChoiceEngine.collision.test.ts, src/engine/TemplateChoiceEngine.folderSorting.test.ts, src/engine/TemplateChoiceEngine.notice.test.ts
run() resolves the template source path once and threads it into normalization and file-create/update calls so the resolved path determines extension and template content; collision test validates extension-driven behavior.
Preflight requirement scanning for tokenized paths
src/preflight/collectChoiceRequirements.ts, src/preflight/collectChoiceRequirements.test.ts
scanTemplateSource() added: tokenized paths collect token requirements and skip body inspection; literal paths recursively scan template bodies and nested {{TEMPLATE:...}}. Template and Capture preflight call this helper; tests verify both branches.
UI validator refactoring for format syntax
src/gui/ChoiceBuilder/components/ValidatedInput.svelte, src/gui/ChoiceBuilder/components/ValidatedInput.test.ts, src/gui/ChoiceBuilder/TemplateChoiceForm.svelte, src/gui/ChoiceBuilder/CaptureChoiceForm.svelte, src/styles.css
ValidatedInput now surfaces neutral hints (setHint) for valid-but-runtime-resolved messages; TemplateChoiceForm and CaptureChoiceForm use hasTemplatePathSyntax to return a runtime-resolution hint instead of an immediate file-exists error. Added .qa-field-hint--neutral styling and tests.
User documentation for dynamic template paths
docs/docs/Choices/TemplateChoice.md
Documentation updated to explain Template Path format syntax support, the path-safe token subset (excluding macros/JS and {{title}}), how resolved path determines created file extension, and limitations for exporting and prompt timing.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • chhoumann/quickadd#1129: Main PR’s updates to src/preflight/collectChoiceRequirements.ts (adding scanTemplateSource + hasTemplatePathSyntax to skip template-body inspection for tokenized template paths) build directly on the retrieved PR’s preflight refactor/centralization in the same module.
  • chhoumann/quickadd#1293: The main PR updates the existing-note flow introduced in #1293—specifically TemplateInsertEngine and applyTemplateToActiveNote—to resolve tokenized template paths via resolveTemplateSourcePath/getResolvedTemplatePath and re-validate the resolved markdown template type, so it directly builds on those codepaths.
  • chhoumann/quickadd#1122: Both PRs modify the template engine’s handling of template paths/extensions (including content lookup) — the main PR threads a resolved template source path through TemplateEngine operations, while the retrieved PR extends TemplateEngine/related logic to recognize .base templates — so the changes are code-level related in the same template-path/content resolution area.

Suggested labels

released

"🐰 A template path grows wings,
Tokens hum and tidy the line,
Resolved at runtime, extensions align,
Hints whisper 'resolved at run',
Hop, the files form in time."

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main feature: enabling format syntax support in template paths. It is concise, specific, and directly reflects the primary change across the entire changeset.
Linked Issues check ✅ Passed The PR fully implements #620 (format syntax in template paths) and #39 (capture with template application) through resolveTemplateSourcePath, formatTemplateFilePath, and preflight scanning. All core requirements are met.
Out of Scope Changes check ✅ Passed All changes are directly aligned with enabling format syntax in template paths: formatTemplateFilePath, engine resolution flows, preflight scanning, builder validation hints, and related tests. No unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chhoumann/620-format-syntax-template-path

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install timed out. The project may have too many dependencies for the sandbox.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 13, 2026

Copy link
Copy Markdown

Deploying quickadd with  Cloudflare Pages  Cloudflare Pages

Latest commit: 00dac66
Status: ✅  Deploy successful!
Preview URL: https://e9500bab.quickadd.pages.dev
Branch Preview URL: https://chhoumann-620-format-syntax.quickadd.pages.dev

View logs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
docs/docs/Choices/TemplateChoice.md (1)

14-20: ⚡ Quick win

Missing documentation of unsupported note-relative tokens in template paths.

Both the unreleased and versioned documentation have the same gap: they don't clarify that note-relative tokens ({{FOLDER}}, {{FILENAMECURRENT}}, {{LINKCURRENT}}) cannot be used in template paths and will be left literal, causing file-creation failures. Unlike {{title}}, which raises an explicit error, these tokens fail silently with cryptic "invalid filename" errors.

  • docs/docs/Choices/TemplateChoice.md#L14-L20: Add clarifying note after line 16 that note-relative tokens don't work in template paths.
  • docs/versioned_docs/version-2.13.1/Choices/TemplateChoice.md#L14-L20: Apply the same clarification (keep synchronized per guidelines).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/docs/Choices/TemplateChoice.md` around lines 14 - 20, The docs fail to
mention that note-relative tokens are unsupported in dynamic template paths;
update both affected files to add a clarifying sentence after line 16 explaining
that note-relative tokens ({{FOLDER}}, {{FILENAMECURRENT}}, {{LINKCURRENT}}) are
not resolved in template paths and will be left literal (which can produce
"invalid filename" failures), unlike {{title}} which raises an explicit error.
Change needed in docs/docs/Choices/TemplateChoice.md (lines 14-20) — insert the
clarification after line 16; make the identical insertion in
docs/versioned_docs/version-2.13.1/Choices/TemplateChoice.md (lines 14-20) so
the versioned docs stay synchronized.
src/engine/TemplateEngine.ts (1)

700-707: ⚡ Quick win

Propagate resolvedTemplatePath naming across local helper signatures.

Now that this method explicitly requires a pre-resolved path, using resolvedTemplatePath naming consistently in nearby helper method parameters (createFileWithTemplate, overwriteFileWithTemplate, appendToFileWithTemplate) would reduce accidental raw-path reuse in future edits.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/engine/TemplateEngine.ts` around lines 700 - 707, The helper methods that
accept a template path should use the same pre-resolved name to avoid confusion:
rename the template path parameter in createFileWithTemplate,
overwriteFileWithTemplate, and appendToFileWithTemplate to resolvedTemplatePath
(and update all internal references and callers inside TemplateEngine to pass
the already-resolved value returned/used by getTemplateContent), ensuring
parameter names, JSDoc/comments, and any local variables match the new name so
no callers accidentally pass or expect an unresolved/raw template path.
src/utils/templatePathSyntax.ts (1)

13-15: ⚡ Quick win

Use kebab-case for this utility filename to match repo convention.

The implementation is good, but the utility file name is camelCase. Please rename src/utils/templatePathSyntax.ts to kebab-case (and update imports accordingly) to stay aligned with repository naming rules.

As per coding guidelines, **/*: “Use kebab-case for directories and utilities.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/utils/templatePathSyntax.ts` around lines 13 - 15, Rename the utility
file from templatePathSyntax.ts to template-path-syntax.ts and update all
imports that reference it so they point to the new filename; keep the exported
function hasTemplatePathSyntax unchanged. Search the repo for
"templatePathSyntax" (imports and any index/barrel exports) and update those
import specifiers to "template-path-syntax" (and update any re-exports in
barrels). Run a quick TypeScript build or IDE import-fix to ensure no broken
references remain.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@docs/docs/Choices/TemplateChoice.md`:
- Around line 14-20: The docs fail to mention that note-relative tokens are
unsupported in dynamic template paths; update both affected files to add a
clarifying sentence after line 16 explaining that note-relative tokens
({{FOLDER}}, {{FILENAMECURRENT}}, {{LINKCURRENT}}) are not resolved in template
paths and will be left literal (which can produce "invalid filename" failures),
unlike {{title}} which raises an explicit error. Change needed in
docs/docs/Choices/TemplateChoice.md (lines 14-20) — insert the clarification
after line 16; make the identical insertion in
docs/versioned_docs/version-2.13.1/Choices/TemplateChoice.md (lines 14-20) so
the versioned docs stay synchronized.

In `@src/engine/TemplateEngine.ts`:
- Around line 700-707: The helper methods that accept a template path should use
the same pre-resolved name to avoid confusion: rename the template path
parameter in createFileWithTemplate, overwriteFileWithTemplate, and
appendToFileWithTemplate to resolvedTemplatePath (and update all internal
references and callers inside TemplateEngine to pass the already-resolved value
returned/used by getTemplateContent), ensuring parameter names, JSDoc/comments,
and any local variables match the new name so no callers accidentally pass or
expect an unresolved/raw template path.

In `@src/utils/templatePathSyntax.ts`:
- Around line 13-15: Rename the utility file from templatePathSyntax.ts to
template-path-syntax.ts and update all imports that reference it so they point
to the new filename; keep the exported function hasTemplatePathSyntax unchanged.
Search the repo for "templatePathSyntax" (imports and any index/barrel exports)
and update those import specifiers to "template-path-syntax" (and update any
re-exports in barrels). Run a quick TypeScript build or IDE import-fix to ensure
no broken references remain.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 785a23ee-c326-426e-9b07-86331127eda4

📥 Commits

Reviewing files that changed from the base of the PR and between eaa489d and bb6593c.

📒 Files selected for processing (21)
  • docs/docs/Choices/TemplateChoice.md
  • docs/versioned_docs/version-2.13.1/Choices/TemplateChoice.md
  • src/engine/SingleTemplateEngine.ts
  • src/engine/TemplateChoiceEngine.collision.test.ts
  • src/engine/TemplateChoiceEngine.folderSorting.test.ts
  • src/engine/TemplateChoiceEngine.notice.test.ts
  • src/engine/TemplateChoiceEngine.ts
  • src/engine/TemplateEngine.ts
  • src/engine/TemplateInsertEngine.test.ts
  • src/engine/TemplateInsertEngine.ts
  • src/engine/applyTemplateToActiveNote.test.ts
  • src/engine/applyTemplateToActiveNote.ts
  • src/formatters/completeFormatter.test.ts
  • src/formatters/completeFormatter.ts
  • src/gui/ChoiceBuilder/CaptureChoiceForm.svelte
  • src/gui/ChoiceBuilder/TemplateChoiceForm.svelte
  • src/gui/ChoiceBuilder/components/ValidatedInput.svelte
  • src/preflight/collectChoiceRequirements.test.ts
  • src/preflight/collectChoiceRequirements.ts
  • src/utils/templatePathSyntax.test.ts
  • src/utils/templatePathSyntax.ts

- Neutral builder hint no longer renders in error red (new
  .qa-field-hint--neutral modifier on a valid+message result).
- Move the {{title}} re-check to immediately after global-variable expansion so a
  global-injected {{title}} still throws the clear error, without false-positiving
  on a user value that merely contains the literal "{{title}}".
- Fix scanTemplateSource traversal: snapshot + clear the shared discovery set
  before recursing, so nested/sibling literal templates aren't dropped from
  preflight (previously the recursive walk mutated the set it was iterating).
- Drop the unreleased-feature note from the stable 2.13.1 docs snapshot (it ships
  in the version that contains it); keep it in the unreleased docs and document
  the note-relative tokens ({{FOLDER}}/{{FILENAMECURRENT}}/{{LINKCURRENT}}) left
  literal in a template path.
- Add a regression test for the apply-to-note resolved-extension guard and a
  neutral-hint test for ValidatedInput.
@chhoumann

Copy link
Copy Markdown
Owner Author

Review summary

This PR was reviewed in three passes (multi-lens ultracode workflow + opposite-model adversarial reviewers on the design, the implementation, and the final diff). No merge-blockers were found; the verified findings were addressed in 5befe327:

  • Neutral builder hint rendered error-red. The new "Contains format syntax — resolved at run time" hint reused .qa-field-hint (always --text-error). Added a .qa-field-hint--neutral modifier so a valid+message result shows muted, not red. (+ValidatedInput test)
  • {{title}} re-check ordering. Moved the post-global-expansion guard to run immediately after global expansion, before user-input substitution, so a global-injected {{title}} still errors clearly without false-positiving on a user value that contains literal {{title}}.
  • Preflight traversal bug. scanTemplateSource now snapshots + clears the shared templatesToScan set before recursing; the previous walk mutated the set it was iterating, which could drop nested/sibling literal templates.
  • Docs versioning. Dropped the unreleased-feature note from the stable version-2.13.1 snapshot (it ships in the version that contains it); kept it in the unreleased docs and documented the note-relative tokens ({{FOLDER}}/{{FILENAMECURRENT}}/{{LINKCURRENT}}) left literal in a path.
  • Test gap. Added a regression test for the apply-to-note resolved-extension guard (a markdown-looking path that resolves to .canvas/.base is rejected).

New behavior worth calling out: Capture create-with-template bodies are now pre-scanned at preflight via the shared scanTemplateSource (verified safe — variables are shared through the choice executor, so no re-prompting).

Verified: pnpm test (1903 pass), pnpm lint, pnpm build, and cd docs && pnpm build all green; dev-vault e2e confirms quickadd:run id=… value-collectionName=Games creates the file from the resolved path and quickadd:check collects the path token.

…t-syntax-template-path

# Conflicts:
#	src/preflight/collectChoiceRequirements.ts
…abbit)

Rename the templatePath parameter to resolvedTemplatePath in
createFileWithTemplate/overwriteFileWithTemplate/appendToFileWithTemplate to make
the 'must be pre-resolved' contract explicit end-to-end and prevent accidental
raw-path reuse.
@chhoumann

Copy link
Copy Markdown
Owner Author

@coderabbitai thanks — addressed the nitpicks:

  1. Note-relative tokens in docs — already documented in docs/docs/Choices/TemplateChoice.md (commit 5befe32): {{FOLDER}}/{{FILENAMECURRENT}}/{{LINKCURRENT}} are noted as left-literal in a template path. I intentionally did not mirror this into version-2.13.1 — that's the stable snapshot for an already-released version that does not contain this feature, so documenting it there would mislead 2.13.1 users. It'll ride into the next version's snapshot at release.
  2. resolvedTemplatePath param naming — done (this commit): renamed in createFileWithTemplate/overwriteFileWithTemplate/appendToFileWithTemplate.
  3. kebab-case filename — skipping: the closest sibling src/utils/valueSyntax.ts (same *Syntax.ts pattern, and many other src/utils/*.ts like fileOrdering.ts, pathValidation.ts) use camelCase, so templatePathSyntax.ts matches the de-facto local convention; renaming it alone would make it inconsistent with its neighbors.

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

@chhoumann, all three points are well-reasoned — thanks for the context.

  1. Docs versioning — agreed, the stable version-2.13.1 snapshot should only reflect what's in that release. Keeping the note-relative token callout in the unreleased docs only is the right call. Withdrawing the concern.
  2. resolvedTemplatePath param naming
  3. kebab-case filename — the camelCase convention in src/utils/ is clear from the neighbors you cited. Renaming templatePathSyntax.ts in isolation would be the inconsistent choice. Withdrawing the concern.

The PR looks great — all findings addressed. 🎉

(◕‿◕✿)

@chhoumann chhoumann merged commit c2ee449 into master Jun 13, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE REQUEST] Allow format syntax in template path input

1 participant