Confusing error reporting after parse errors

2012-11-01 11:52, Dragan Laban wrote under Subject: CSS Validator caching:

> Need to add option 'revalidate'. Wrong caching.
>
> The error in my css is corrected but validator stil reprting it.
>
> http://laban.rs/scrap/converters/con_sr_lat
> http://laban.rs/_css/_defs.css

After some email discussion with the poster, I think I understand what 
the issue is. It wasn't really about caching but about constructs like this:

h1 {
   margin-top: 0;}
   margin-bottom: 0.4em;}
h2 {margin-top: 0.4em;}

The real error is the spurious semicolon after the second line. It 
closes the rule prematurely.

The CSS Validator reports an error, but it is somewhat confusing, since 
it is reported as relating to the fourth line, and it says:

Parse Error [: 0.4em;} h2]

It seems that on line 3, "margin-bottom" is parsed as a selector, and 
then ":" is an error, but the validator tries to parse the longest 
possible construct in order to report the error well. It stops when it 
reaches the "{", since that's a symbol that may validly follow a selector.

If you remove the string ": 0.4em;} h2" that appears in the error 
message, then the style sheet validates, though its meaning is of course 
different from what was meant:

h1 {
   margin-top : 0;
}
margin-bottom {
   margin-top : 0.4em;
}

(This is valid as CSS, since "margin-bottom" is a perfectly valid 
selector, even though HTML has no element named that way.)

I wonder if the CSS Validator could be modified to report, in case of a 
parse error, the line where the unparseable construct *started*, rather 
than its end. I suppose this is unrealistic, but may a description of 
the issue could be added to the validator's FAQ. Perhaps something like 
this:

What does "Parse error ..." mean?

It usually means that in analyzing the style sheet, the validator 
encountered a construct that is not allowed in the context. In such 
situations, the validator skips characters until it reaches a recovery 
point, such as a brace, where it will try to resume normal processing.

In such cases, the error message contains the string skipped, and the 
message is presented as relating to the line where the string ends.

Yucca

Received on Sunday, 4 November 2012 13:48:30 UTC