Class: Parslet::ErrorReporter::Deepest

### Home Classes Methods

### In Files

- lib/parslet/error_reporter/deepest.rb

### Parent

Object

### Methods

- ::new
- #deepest
- #err
- #err_at

### Files

- README

### Class/Module Index

Quicksearch

- Parslet
- Parslet::Atoms
- Parslet::Atoms::Alternative
- Parslet::Atoms::Base
- Parslet::Atoms::CanFlatten
- Parslet::Atoms::Capture
- Parslet::Atoms::Context
- Parslet::Atoms::DSL
- Parslet::Atoms::Dynamic
- Parslet::Atoms::Entity
- Parslet::Atoms::Lookahead
- Parslet::Atoms::Named
- Parslet::Atoms::Precedence
- Parslet::Atoms::Re
- Parslet::Atoms::Repetition
- Parslet::Atoms::Scope
- Parslet::Atoms::Sequence
- Parslet::Atoms::Str
- Parslet::Cause
- Parslet::ClassMethods
- Parslet::DelayedMatchConstructor
- Parslet::ErrorReporter
- Parslet::ErrorReporter::Deepest
- Parslet::ErrorReporter::Tree
- Parslet::Expression
- Parslet::Expression::Treetop
- Parslet::Expression::Treetop::Parser
- Parslet::Expression::Treetop::Transform
- Parslet::ParseFailed
- Parslet::Parser
- Parslet::Parser::PrettyPrinter
- Parslet::Parser::Visitors
- Parslet::Parser::Visitors::Citrus
- Parslet::Parser::Visitors::Treetop
- Parslet::Pattern
- Parslet::Pattern::SequenceBind
- Parslet::Pattern::SimpleBind
- Parslet::Pattern::SubtreeBind
- Parslet::Scope
- Parslet::Scope::Binding
- Parslet::Scope::NotFound
- Parslet::Slice
- Parslet::Source
- Parslet::Source::LineCache
- Parslet::Source::RangeSearch
- Parslet::Transform
- Parslet::Transform::Context

No matching classes.

# Parslet::ErrorReporter::Deepest

Instead of reporting the latest error that happens like {Tree} does, this class reports the deepest error. Depth is defined here as how advanced into the input an error happens. The errors close to the greatest depth tend to be more relevant to the end user, since they specify what could be done to make them go away.

More specifically, errors produced by this reporter won't be related to the structure of the grammar at all. The positions of the errors will be advanced and convey at every grammar level what the deepest rule was to fail.

### Attributes

deepest_cause[R]

Returns the cause that is currently deepest. Mainly for specs.

### Public Class Methods

new() click to toggle source

    # File lib/parslet/error_reporter/deepest.rb, line 15
    def initialize
      @deepest_cause = nil
    end

### Public Instance Methods

deepest(cause) click to toggle source

Checks to see if the lineage of the cause given includes a cause with an error position deeper than the current deepest cause stored. If yes, it passes the cause through to the caller. If no, it returns the current deepest error that was saved as a reference.

    # File lib/parslet/error_reporter/deepest.rb, line 61
    def deepest(cause)
      rank, leaf = deepest_child(cause)

      if !deepest_cause || leaf.pos >= deepest_cause.pos
        # This error reaches deeper into the input, save it as reference.
        @deepest_cause = leaf
        return cause
      end

      return deepest_cause
    end

err(atom, source, message, children=nil) click to toggle source

Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).

@param atom [Parslet::Atoms::Base] parslet that failed @param source [Source] Source that we're using for this parse. (line

    number information...)

@param message [String, Array] Error message at this level. @param children [Array] A list of errors from a deeper level (or nil). @return [Cause] An error tree combining children with message.

    # File lib/parslet/error_reporter/deepest.rb, line 29
    def err(atom, source, message, children=nil)
      position = source.pos
      cause = Cause.format(source, position, message, children)
      return deepest(cause)
    end

err_at(atom, source, message, pos, children=nil) click to toggle source

Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).

@param atom [Parslet::Atoms::Base] parslet that failed @param source [Source] Source that we're using for this parse. (line

    number information...)

@param message [String, Array] Error message at this level. @param pos [Fixnum] The real position of the error. @param children [Array] A list of errors from a deeper level (or nil). @return [Cause] An error tree combining children with message.

    # File lib/parslet/error_reporter/deepest.rb, line 46
    def err_at(atom, source, message, pos, children=nil)
      position = pos
      cause = Cause.format(source, position, message, children)
      return deepest(cause)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.