[ESS-bugs] OOps! ESS partly fails in non-English locales!
Stephen Eglen
S.J.Eglen at damtp.cam.ac.uk
Tue Aug 2 22:39:24 CEST 2005
Martin Maechler writes:
> >>>>> "StEgl" == Stephen Eglen <S.J.Eglen at damtp.cam.ac.uk>
> >>>>> on Tue, 2 Aug 2005 12:31:40 +0100 writes:
>
> StEgl> thanks for follow up Martin.
>
> >> One thing: May be it is not "more problematic" than the problem I
> >> reported. The "only" mistake is the mini-buffer message "Not a
> >> syntax error", but then one at least gets to see a relatively
> >> simply to understand message.
>
> StEgl> Yes, agree - sorry, "problematic" was a bad choice of wording from me.
>
> StEgl> I can fix the regexp for this particular error:
>
> StEgl> Error in parse(file, n = -1, NULL, "?") : syntax error on line 3
>
> StEgl> perhaps by a regexp searching for
>
> StEgl> syntax error on line [line number]
>
> StEgl> but is that likely to be good enough for catching all R errors?
>
> not all R errors for sure.
>
> But for C-c C-l, we know that R (and S-plus) uses source(),
> so we have to think about the errors that happen from source().
>
> There, the syntax error is really a special interesting case,
> because that one can be pointed to by a line number.
> For R, it will always happen from
> .Internal(parse(file, n = -1, NULL, "?")))
>
> now that leads to calling do_parse in source.c, i.e.
> https://svn.R-project.org/R/trunk/src/main/source.c
>
> which shows you
>
> if (status != PARSE_OK)
> errorcall(call, _("syntax error on line %d"), R_ParseError);
>
> The "errorcall(call, ..)" part entails that the message (in an
> English locale!) will be
>
> Error in parse(.....) : syntax error on line <n>
>
> In a German locale, it's e.g.
>
> Fehler in parse(file, n = -1, NULL, "?") : Syntaxfehler in Zeile 1
>
> --
>
> Hence, for English
>
> "^Error .* syntax error"
> or German
> "^Fehler .* Syntaxfehler"
>
> would work.
> I think ideally, one would make use of the things we have
> already
> ess-dump-error-re ( == "[Ee]rror" for English)
>
> and/or better of something derived from
>
> (defvar ess-R-message-prefixes
> '("Error:" "Error in"
> "Warning:" "Warning in"
> "Warning messages?"))
>
> (which would need to be put in two parts: one for errors the
> other for warnings).
Ok, I can take a look at this tomorrow, to at least get the errors
detected again.
> I still think the best solution would be that R (or S-plus or
> ...) at startup of "inferior-*"
> produces these errors on purpose by eval-ing erronous examples
> i.e. sends some commands to R such as
>
> parse(text="1]")
> eval(parse(text="rpois(-1)"))
> eval(parse(text="rpois(-1,1)"))
> cat("1]", file=(.tf <- tempfile())) ; try(parse(file=.tf)); unlink(.tf)
>
> and out of the R (or S+ ..)
> error message auto-produces the relevant pattern to use.
>
> This way, ESS adapts to the system, including locale setting,
> also for future systems / locales.
That sounds like a really neat idea if we can add that!
Stephen
More information about the ESS-bugs
mailing list