Class: Parslet::ErrorReporter::Deepest
- Inherits:
-
Object
- Object
- Parslet::ErrorReporter::Deepest
- Defined in:
- lib/parslet/error_reporter/deepest.rb
Overview
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.
Instance Attribute Summary collapse
-
#deepest_cause ⇒ Object
readonly
Returns the cause that is currently deepest.
Instance Method Summary collapse
-
#deepest(cause) ⇒ Object
Checks to see if the lineage of the cause given includes a cause with an error position deeper than the current deepest cause stored.
-
#err(atom, source, message, children = nil) ⇒ Cause
Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).
-
#err_at(atom, source, message, pos, children = nil) ⇒ Cause
Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).
-
#initialize ⇒ Deepest
constructor
A new instance of Deepest.
Constructor Details
#initialize ⇒ Deepest
Returns a new instance of Deepest.
15 16 17 |
# File 'lib/parslet/error_reporter/deepest.rb', line 15 def initialize @deepest_cause = nil end |
Instance Attribute Details
#deepest_cause ⇒ Object (readonly)
Returns the cause that is currently deepest. Mainly for specs.
54 55 56 |
# File 'lib/parslet/error_reporter/deepest.rb', line 54 def deepest_cause @deepest_cause end |
Instance Method Details
#deepest(cause) ⇒ Object
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.
61 62 63 64 65 66 67 68 69 70 71 |
# 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) ⇒ Cause
Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).
29 30 31 32 33 |
# File 'lib/parslet/error_reporter/deepest.rb', line 29 def err(atom, source, , children=nil) position = source.pos cause = Cause.format(source, position, , children) return deepest(cause) end |
#err_at(atom, source, message, pos, children = nil) ⇒ Cause
Produces an error cause that combines the message at the current level with the errors that happened at a level below (children).
46 47 48 49 50 |
# File 'lib/parslet/error_reporter/deepest.rb', line 46 def err_at(atom, source, , pos, children=nil) position = pos cause = Cause.format(source, position, , children) return deepest(cause) end |