On Mon, 2011-06-27 at 16:43 +0100, Matthew Booth wrote: > The above could be parsed as: > > * terminal > * #error = -timeout=5 > * serial > * console > * default = 0 > * #error = frobnicate --foobaz > * hiddenmenu > > This is, of course, dependent on implementing this behaviour in each > lens. The advantage of this is that arbitrary errors which don't cause > failure can be ignored if desired, or highlighted otherwise. > Specifically for virt-v2v, a misconfigured grub serial console won't > prevent me from working out which kernel is supposed to be booted.
Yes, I absolutely agree that doing more than just throwing your hands up in the air and saying "there's something wrong with this file" is desirable. I don't see a good way to do this automatically though; error recovery in parsers is a thorny subject that I know very little about. The basic issue is that creating the #error nodes has to happen in a way that makes the typechecker happy. In particular, there are two ways in which lenses are combined: union (l1|l2) and concatenation (l1 . l2) To do error recovery automatically, we'd introduce a new lens combinator 'error: LENS -> LENS'; the semantics are that 'error l' produces a new lens that behaves like l wherever l matches and like '[ label "#error" . store some_re ]' whenever it does not match. As a consequence, 'error l' is a lens that matches everything - and that makes it impossible to form unions (error l1 | error l2) and concatenations (error l1 . error l2) since these lenses won't typecheck. That really only leaves some sort of manual intervention; that can become quite tedious. But I'd love to be proven wrong ;) David _______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
