lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Feature request: Fix cascading error messages


From: Christopher Heckman
Subject: Re: Feature request: Fix cascading error messages
Date: Mon, 28 Mar 2022 17:34:30 -0700

On Mon, Mar 28, 2022 at 4:58 PM David Kastrup <dak@gnu.org> wrote:
>
> Christopher Heckman <christopher.heckman@asu.edu> writes:
>
> > I have a request concerning Lilypond that has bothered me for a while,
> > but which I haven't seen any one else complain about. It is the
> > cascade of error messages you get when you leave out a right-brace or
> > some other symbol.
> >
> > Maybe this could be added as an option to lilypond?
> >
> > lilypond --cascade-level=N file.ly
> >
> > which, for any given line, prints the first N error messages, and
> > after that a message saying that further error messages have been
> > suppressed. A default value for N might be 3 or 4.
> >
> > What does everyone think?
>
> The problems from followup errors do not magically disappear because
> they are not reported.  The only thing that would make sense is better
> error recovery (which is pretty hard but can partly be achieved by
> inserting "error" productions matching typical error scenarios into the
> grammar: that causes a more targeted recovery and is arguably
> underutilised in LilyPond's grammar) but not pretending to be fine.
>

I'm not saying that LilyPond should say that everything is fine, just
that it not report every single error for a line. If you have 8 or 9
errors on one line, there's something wrong a basic level.

For instance, suppose I misspell markuplist on line 94. The next few
errors look like

SyntacticStructuresInMusic.ly:94:1: error: unknown escaped string: `\markuplst'

\markuplst {
SyntacticStructuresInMusic.ly:94:12: error: syntax error, unexpected
'{', expecting '.' or '='
\markuplst
           {
SyntacticStructuresInMusic.ly:100:1: error: unknown escaped string:
`\new-chapter'

\new-chapter { Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:1: error: string outside of text
script or \lyricmode

\new-chapter { Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:16: error: not a note name: Chapter
\new-chapter {
               Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:27: error: not a note name: The
\new-chapter { Chapter 1.
                          The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:31: error: not a note name: Basic
\new-chapter { Chapter 1. The
                              Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:37: error: not a note name: Syntactic
\new-chapter { Chapter 1. The Basic
                                    Syntactic Structure }
SyntacticStructuresInMusic.ly:100:47: error: not a note name: Structure
\new-chapter { Chapter 1. The Basic Syntactic
                                              Structure }
SyntacticStructuresInMusic.ly:102:1: error: unknown escaped string: `\flushpar'

\flushpar {
SyntacticStructuresInMusic.ly:102:1: error: string outside of text
script or \lyricmode

--- (If you're upset that this is looks illegible in an email, then
you understand my point; it doesn't look much nicer in a Terminal set
to 108 characters wide.)

What I'm saying is that the errors for line 100 should look like the
following instead (when N = 4) ---

SyntacticStructuresInMusic.ly:100:1: error: unknown escaped string:
`\new-chapter'

\new-chapter { Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:1: error: string outside of text
script or \lyricmode

\new-chapter { Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:16: error: not a note name: Chapter
\new-chapter {
               Chapter 1. The Basic Syntactic Structure }
SyntacticStructuresInMusic.ly:100:27: error: not a note name: The
\new-chapter { Chapter 1.
                          The Basic Syntactic Structure }
Warning: Lilypond has possibly suppressed further error messages for line 100.

SyntacticStructuresInMusic.ly:102:1: error: unknown escaped string: `\flushpar'

\flushpar {

--- and so on.

> The problem with the followup errors is that there is no way that
> LilyPond can actually be sure that they are followup errors.
>

True, but if you have a cascade of errors on a particular line, you
definitely need to fix what's causing the cascade. Once you've done
this, and you re-run Lilypond, it will now report only the errors that
aren't followups.

--- Christopher Heckman

> Good heuristics for error recovery productions in the grammar are tricky
> to do, and since they are only relevant for erroneous input, they tend
> not to be assigned a high priority.
>
> On the other hand, I found excellent error recovery to be of high
> importance when the normal workflow was sucking a stack of punch cards
> through the reader and then checking your output shelf hours later for a
> stack of line printer paper with the results of your compilation (and
> hopefully execution, possibly accompanied by a post mortem dump listing
> the COMPASS assembly instructions running into problems).
>
> I rarely find myself working an error log off sequentially these days
> rather than just restarting compilation after fixing a limited set of
> problems.
>
> --
> David Kastrup



reply via email to

[Prev in Thread] Current Thread [Next in Thread]