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.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#deepest_cause ⇒ Object
readonly
Returns the value of attribute deepest_cause.
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.
-
#succ(source) ⇒ Object
Notification that an expression successfully parsed not used, see ErrorReporter::Contextual.
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 value of attribute deepest_cause.
59 60 61 |
# File 'lib/parslet/error_reporter/deepest.rb', line 59 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.
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/parslet/error_reporter/deepest.rb', line 66 def deepest(cause) _, 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 |
#succ(source) ⇒ Object
Notification that an expression successfully parsed not used, see ErrorReporter::Contextual
56 57 |
# File 'lib/parslet/error_reporter/deepest.rb', line 56 def succ(source) end |