apple / apple/pkl

Output path placeholders don't expose `ValueRenderer.extension`

Open
#501 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
11.5k
Forks
402
Avg merge
1d 15h
Merged PRs (30d)
20

Description

The [`--output-path` flag](https://pkl-lang.org/main/current/pkl-cli/index.html#output-path) supports placeholders for generating the output filename from inputs. Unfortunately there is no placeholder that will provide the file extension. `%{outputFormat}` exists but it corresponds to the `--format` flag rather than the actual `ValueRenderer` subclass used, and it's the name of the format rather than the extension (which is the same for some formats, but not for others).

I'd like to see two things. First, a new placeholder `%{outputExtension}` that evaluates to `if (output.renderer.extension != null) ".\(output.renderer.extension)" else ""`. The inclusion of the leading period here is because `ValueRenderer.extension` is optional. This way I can write something like `pkl eval -o 'config%{outputExtension}' config.pkl` and get the appropriate extension no matter how it's rendering. The second is a shorthand for `%{moduleName}%{outputExtension}`. This could be another placeholder, but for ease of use I'd prefer a separate flag `-O, --output-dir` that takes a directory (supporting placeholders). So with this, `-O dir` would be equivalent to saying `-o dir/%{moduleName}%{outputExtension}`.

Given that the [Pkl Style Guide](https://pkl-lang.org/main/current/style-guide/index.html#filename) recommends that Pkl files representing static config files be named to match the target filename, this means the `-O` flag would be the simplest way to render static config files.

Contributor guide

Open the contributing guide

Research direction

Trace the Pkl CLI's --output-path placeholder handling and the ValueRenderer.extension property first. Verify the requested outputExtension behavior and the -O/--output-dir equivalent using the example commands, then add coverage showing extensions and module-name output paths are generated correctly.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.