Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] Render to INI-style formats #137

Open
1 of 4 tasks
moritz-t-w opened this issue Feb 13, 2024 · 8 comments
Open
1 of 4 tasks

[feat] Render to INI-style formats #137

moritz-t-w opened this issue Feb 13, 2024 · 8 comments
Labels
help wanted Extra attention is needed

Comments

@moritz-t-w
Copy link

moritz-t-w commented Feb 13, 2024

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:

Feel free to suggest more and I'll add them to the list

@holzensp holzensp added the help wanted Extra attention is needed label Feb 13, 2024
@holzensp
Copy link
Contributor

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.

@Madmegsox1
Copy link

Hi, ill have a look at starting to create a INIRenderer.

@moritz-t-w
Copy link
Author

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 💀 but I might get into making some other renderers at a later point, sounds like a fun challenge

@Madmegsox1
Copy link

Madmegsox1 commented Feb 13, 2024

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.

@Madmegsox1
Copy link

Its now outputting correctly and handles escape chars. Is there anywhere else i need to add the IniRenderer to?

@bioball
Copy link
Contributor

bioball commented Feb 14, 2024

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:

  1. Create the stdlib module itself; stdlib/ini.pkl
  2. Create a new class in org.pkl.core.runtime that extends StdlibModule, and add it to org.pkl.core.runtime.ModuleCache#getOrLoad (see the existing source code to look at what's currently already there).
  3. Create a class RendererNodes in new package org.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/

@moritz-t-w
Copy link
Author

Also make sure that you follow the contribution guidelines

@Madmegsox1
Copy link

Created PR. Ill create the new in-language renderer soon and open another PR.

Thank you for the help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants