pkl
pkl copied to clipboard
[feat] Render to INI-style formats
I know your bandwidth is limited, just putting it out there. I would love to see support for INI-like formats, such as systemd configuration files or even just plain ini files.
Here are the INI-style formats I can think of:
- [x] Microsoft INI, implemented in #149
- [ ] Freedesktop desktop entry
- [ ] Freedesktop systemd config
- [ ] Editorconfig
Feel free to suggest more and I'll add them to the list
It's a totally legit ask. For other output formats, especially "simpler" ones, we recommend implementing them in Pkl itself. We did this with the TOML renderer, for example: https://github.com/apple/pkl-pantry/tree/main/packages/pkl.toml
Since bandwidth is indeed limited, you might want to have a go at it that way yourself; we're more than happy to support / review / etc. and since this can be written in Pkl itself, it doesn't require expertise about Pkl internals.
Hi, ill have a look at starting to create a INIRenderer
.
since this can be written in Pkl itself, it doesn't require expertise about Pkl internals.
I love that Unfortunately my bandwith is also limited :skull: but I might get into making some other renderers at a later point, sounds like a fun challenge
Its looking good so far the IniRenderer
renders ini files in the correct structure just need to handle escape codes and correctly formatting (breakline after each nest) the ini file. Here is a look at what the test outputted.
int = 123
float = 1.23
bool = true
string = Pigeon
unicodeString = abc😀abc😎abc
multiLineString = have a
great
day
[map]
one = 123
two = 1.23
three = true
four = Pigeon
five = abc😀abc😎abc
six = have a
great
day
[map.seven]
name = Pigeon
[mapping]
one = 123
two = 1.23
three = true
four = Pigeon
five = abc😀abc😎abc
six = have a
great
day
[mapping.seven]
name = Pigeon
[typedObject]
name = Pigeon
age = 30
[typedObject.address]
street = Folsom St.
[container]
name = Pigeon
age = 30
[container.address]
street = Folsom St.
Its now outputting correctly and handles escape chars. Is there anywhere else i need to add the IniRenderer
to?
Nice! Do you want to PR this? That will make it a little easier to iterate.
To add a new in-language renderer, you will need to create a new standard library module. To do that:
- Create the stdlib module itself;
stdlib/ini.pkl
- Create a new class in
org.pkl.core.runtime
that extendsStdlibModule
, and add it toorg.pkl.core.runtime.ModuleCache#getOrLoad
(see the existing source code to look at what's currently already there). - Create a
class RendererNodes
in new packageorg.pkl.core.stdlib.ini
(see the other stdlib packages that are in there for reference)
You will also need to add language snippet tests for this renderer, in pkl-core/src/test/files/LanguageSnippetTests/input/api/
Also make sure that you follow the contribution guidelines
Created PR. Ill create the new in-language renderer soon and open another PR.
Thank you for the help.