mirror of https://github.com/lark-parser/lark.git
Fixed Discard, broken in 0.6.6 (Issue #337)
This commit is contained in:
parent
e16bb35576
commit
2b3fabd01c
|
@ -40,7 +40,7 @@ class Transformer:
|
||||||
return f(tree)
|
return f(tree)
|
||||||
else:
|
else:
|
||||||
return f(children)
|
return f(children)
|
||||||
except GrammarError:
|
except (GrammarError, Discard):
|
||||||
raise
|
raise
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise VisitError(tree, e)
|
raise VisitError(tree, e)
|
||||||
|
|
|
@ -6,7 +6,7 @@ import copy
|
||||||
import pickle
|
import pickle
|
||||||
|
|
||||||
from lark.tree import Tree
|
from lark.tree import Tree
|
||||||
from lark.visitors import Transformer, Interpreter, visit_children_decor, v_args
|
from lark.visitors import Transformer, Interpreter, visit_children_decor, v_args, Discard
|
||||||
|
|
||||||
|
|
||||||
class TestTrees(TestCase):
|
class TestTrees(TestCase):
|
||||||
|
@ -144,6 +144,26 @@ class TestTrees(TestCase):
|
||||||
res = T().transform(t)
|
res = T().transform(t)
|
||||||
self.assertEqual(res, 2.9)
|
self.assertEqual(res, 2.9)
|
||||||
|
|
||||||
|
def test_discard(self):
|
||||||
|
class MyTransformer(Transformer):
|
||||||
|
def a(self, args):
|
||||||
|
return 1 # some code here
|
||||||
|
|
||||||
|
def b(cls, args):
|
||||||
|
raise Discard()
|
||||||
|
|
||||||
|
t = Tree('root', [
|
||||||
|
Tree('b', []),
|
||||||
|
Tree('a', []),
|
||||||
|
Tree('b', []),
|
||||||
|
Tree('c', []),
|
||||||
|
Tree('b', []),
|
||||||
|
])
|
||||||
|
t2 = Tree('root', [1, Tree('c', [])])
|
||||||
|
|
||||||
|
x = MyTransformer().transform( t )
|
||||||
|
self.assertEqual(x, t2)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue