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: Martín Rincón Botero
Subject: Re: Feature request: Fix cascading error messages
Date: Tue, 29 Mar 2022 08:46:42 +0200

+1. I think making it customizable (with a --cascade-level parameter) wouldn't add much value considering developing effort, though. Lilypond, like Python f. ex., should simply report the first error (and ideally immediately abort compilation). 

—Martín.

www.martinrinconbotero.com


On Mar 29, 2022 at 2:36 AM, <Christopher Heckman> wrote:

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]