Git Product home page Git Product logo

yaml's People

Contributors

devvypaws avatar maybejustjames avatar terezka avatar ypyl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

yaml's Issues

Incorrectly parses a plain scalar containing a colon as a mapping

From the YAML documentation:

Normally, YAML insists the “:” mapping value indicator be separated from the value by white space.
A benefit of this restriction is that the “:” character can be used inside plain scalars, as long as it is
not followed by white space. This allows for unquoted URLs and timestamps. It is also a potential
source for confusion as “a:1” is a plain scalar and not a key: value pair.

Failing example:

Yaml.fromString Yaml.string "a:b"

Expected result

"a:b"

Actual result

Expected string, got: { a: \"b\" }

Fails to encode multi-line strings (and other yaml string bugs)

I need to encode multi-line strings within a record, that often contain quotes. As well, I have octal permissions such as 0644 that yaml would parse as an octal numeric literal. I would expect Encode.string to either properly escape and quote this, or generate a yaml multi-line string block.

escapeme: "0700"
oneline: "multi line string\nwith \"quoted\" text"
multiline: |-
  multi line string
  with "quoted" text

For now I'm working around this with the following:

safeEncodeString : String -> YE.Encoder
safeEncodeString =
    encodeNewlines
        >> encodeQuotes
        >> String.Extra.quote
        >> YE.string


encodeNewlines : String -> String
encodeNewlines =
    String.replace "\n" "\\n"


encodeQuotes : String -> String
encodeQuotes s =
    if String.contains "\"" s then
        String.replace "\"" "\\\"" s

    else
        s

Edit:

While reading https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell for other potential pitfalls, I've noted:

  • record keys may be parsed in odd ways, and the easy approach may just be to quote them all
  • strings starting with an asterisk (references), exclamation point (tags), and ampersand (anchors) must be quoted

I'm of the opinion that yaml encoding here should be as aggressively safe as possible, and parsing and encoded document should be identical regardless of the yaml specification used when parsing. String escaping and quoting should probably be the default, and multi-line strings might just be too problematic to deal with (at the minimum, needing to handle trailing newlines properly)

Feature Completeness overview

An overview of completeness in comparison to elm/json would be great!

codec support
string
bool
array
...

Empty records or dict with indention

It seems like the library only put empty line for such cases:
image
It seems that it is better to use inline type of dict or record in such cases, like:
image

What do you think?

Multi-line string

it seems the parser converts multiline string to simple string, e.g.

description: |
  Some information

will be saved internally as

description: | Some description

My assumption is that it should be like

description: |\n  Some description

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.