Often find myself getting frustrated editing yaml, and it seems to be used everywhere for some reason I cannot fathom

I have an idea to write an editor plugin that will, when opening a yaml file, convert it to json (or some other less painful configuration language), then convert back on save. I don’t know enough about yaml syntax to know if that’s possible or if there’s some quirk that makes them not completely cross compatible

Or alternatively if it exists a better CLI tool for editing yaml than just a normal text editor because I’m getting sick of pasting in a block of yaml and then having to fix the 8 indentation errors that somehow spawn from that

  • wisplike_sustainer@suppo.fi
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    2
    ·
    9 months ago

    YAML to JSON is probably doable, JSON back to YAML not so much.

    There are multiple ways to mark multiline strings in YAML. Then there are anchors, like bionicjoey mentioned. Also comments, YAML has them. You’d have to have some way to retain the extra information, if you want to make the full round trip.

    Here’s an example:

    def-db: &def-db
        # here be dragons
        login: admin
        passwd: nimda
        
    prod:
        db: *def-db
        desc: |
            I'm a teapot
            short and stout
    
    dev:
        db: 
            <<: *def-db
            passwd: pass
        desc: "I'm a teapot\nshort and stout\n"
    

    converted to JSON looks like this

    {
        "def-db": {
            "login": "admin",
            "passwd": "nimda"
        },
        "prod": {
            "db": {
                "login": "admin",
                "passwd": "nimda"
            },
            "desc": "I'm a teapot\nshort and stout\n"
        },
        "dev": {
            "db": {
                "login": "admin",
                "passwd": "pass"
            },
            "desc": "I'm a teapot\nshort and stout\n"
        }
    }
    
    • 5C5C5C@programming.dev
      link
      fedilink
      English
      arrow-up
      2
      ·
      9 months ago

      All JSON is valid YAML, so after you’ve converted the file to JSON, just… save it with a YAML file extension and call it a day…?

    • flashgnash@lemm.eeOP
      link
      fedilink
      English
      arrow-up
      1
      arrow-down
      1
      ·
      9 months ago

      Comments are an issue I’d have to think about. Would prebuilt libraries for importing/exporting data from/to these languages not handle the multiline strings for me?

      What do anchors do in yaml I’ve never heard of them before

    • girsaysdoom
      link
      fedilink
      English
      arrow-up
      0
      ·
      edit-2
      9 months ago

      I think the difference is that it sounds they are just looking for something JSON-like, just enough to edit and save a change. It might not need to be valid.

      • wisplike_sustainer@suppo.fi
        link
        fedilink
        English
        arrow-up
        3
        ·
        9 months ago

        So, a new not-a-markup-language, only human readable and editable, and objectively better than its predecessor? Well, it’s all according to tradition. I believe YAML got its start the same way.

      • flashgnash@lemm.eeOP
        link
        fedilink
        English
        arrow-up
        1
        arrow-down
        1
        ·
        edit-2
        9 months ago

        No, I was thinking of actual JSON because it makes it easier to write a plugin (just use built in libraries to import and export configurations)

        That said I suppose I could use the built in library and then re-inject comments after the fact

          • flashgnash@lemm.eeOP
            link
            fedilink
            English
            arrow-up
            1
            arrow-down
            1
            ·
            9 months ago

            Not a terrible idea to add bits into the JSON but it makes it much harder to program, going for a quick and easy fix here rather than writing my own parser

            • girsaysdoom
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              9 months ago

              Maybe a 3rd file would work? You could add all of the relevant data there and when translating between one language or the other it would prune any comments or unsupported features as the output is generated.

              • flashgnash@lemm.eeOP
                link
                fedilink
                English
                arrow-up
                1
                ·
                edit-2
                9 months ago

                My plan is not to have multiple files at all and only have the JSON be in memory, or at least if there is a second one have it be temporary and deleted on exit

                The problem with the approach of having an intermediary format is I need to create the intermediate format, and given yaml starts for yet another markup language that doesn’t seem like a good idea (also a ton of effort to reinvent the wheel)