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

Add YamlLoader::load_from_str_with_markers to provide AST with source markers #125

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Mar 26, 2019

  1. Add YamlLoader::load_from_str_with_markers to provide AST with sour…

    …ce markers
    
    fixes chyh1990#103, replaces chyh1990#105
    
    The new function produces an alternative representation for YAML
    documents where each YAML node is paired with a `Marker` to indicate the
    corresponding line and column in the source markup. The new
    representation takes the form of two new types, `Node` and `YamlMarked`.
    
    `Node` is a pair of `YamlMarked` and `Marker`.
    
    `YamlMarked` mimics the existing `Yaml` enum; the difference is that array
    elements and hash keys and values are `Node` values instead of `Yaml` or
    `YamlMarked` values. I created a new enum because I did not know of a way
    to switch child nodes in `Yaml` between `Yaml` and `Node` types without
    backward-incompatible changes to the `Yaml` enum.
    
    The the behavior of the existing `load_from_str` function and `Yaml`
    enum are unchanged, so pattern matching on results from `load_from_str`
    will work as before.
    
    To ensure consistent behavior for the `Node` and `Yaml` I moved methods
    from the `impl Yaml` block to a new trait called `YamlNode` which is
    implemented by `Yaml`, `Node`, and `YamlMarked`. This is a breaking
    change since it means that consumers will have to import `YamlNode` to
    use methods like `.as_str()` and `.is_array()`.
    
    I want to present this pull request as one proposal. I think there is also
    an argument for changing the existing `Yaml` type to incorporate source
    location markers instead of maintaining two parallel enums.
    
    While making changes I split up `yaml.rs` into three nested modules.
    I can put it back the way it was if that is preferable.
    Jesse Hallett committed Mar 26, 2019
    Configuration menu
    Copy the full SHA
    5216abe View commit details
    Browse the repository at this point in the history