[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Patterns for error messages

Victor 'Zverok' Shepelev

3/3/2008 9:22:00 AM

From: Stefano Crocco [mailto:stefano.crocco@alice.it]
Sent: Monday, March 03, 2008 10:42 AM
>
>Alle Monday 03 March 2008, Victor 'Zverok' Shepelev ha scritto:
>> >From: Stefano Crocco [mailto:stefano.crocco@alice.it]
>> >
>> >Alle Saturday 01 March 2008, Victor 'Zverok' Shepelev ha scritto:
>> >> Hello all.
>> >>
>> >> It seems that the question relates to interpreter "internals", but I'm
>> >> afraid of ask silly questions in ruby-core.
>> >>
>> >> The question is: why error messages of interpreter has inconsistent
>> >> addressing system of file and line?
>> >>
>> >> There are at many slightly different schemes (and all of them can be
>> >> present in the same error backtrace):
>> >>
>> >> path/file.rb:10: error text
>> >> path/file.rb:1:in `require': other-path/other-file.rb:31: error text
>> >> path/file.rb:7:in `method' error text
>> >> ^ from path/file.rb:12
>> >>
>> >> And so on. I can't invent one regexp for my output-capturing text
>editor
>> >> (EditPlus on Windows) for catch all cases and automatically extract
>file
>> >> and path for navigate me to this path.
>> >>
>> >> Thanks for the answers.
>> >>
>> >> v.
>> >
>> >I can't find the differences. If you want a regexp which gives the name
>of
>> >the
>> >file, I think you can simply use something like:
>> >
>> >/^.*(?=:\d+:)/
>>
>> For 4 of my cases it would find, respectively:
>> 1. path/file.rb:10: - OK
>> 2. path/file.rb:1: - when I wanted "the real error" address -
>> "other-path/other-file.rb:31:"
>> 3. path/file.rb:7: - OK
>> 4. nothing, because of there's no last ":" in the string with "^ from".
>> Even if you delete last ":" from regexp, the result will be
>unsatisfactory:
>> " ^ from path/file.rb:12" (There would be even more spaces, but you
>> understand the idea)
>>
>> It's a pain.
>>
>> V.
>
>Yes, now I see what you mean. Well, for the second case, it depends on how
>your editor works exactly. If it has support for regexp groups, you can use
>the following regexp:
>
>/^(?:.*:\d+:in\s+`require':\s+)?(.*)(?=:\d+:)/
>
>The name of the file is in the first group (this works also for the first
>case)

OK, but this regexp works for the second case ONLY (unfortunately, I have
only one "output pattern" setting, so, I am trying to invent the universal
one).

>Regarding the last case, I think (but I may be wrong) that the third and
>last
>one are a single message, split in two lines for some reason. You should
>try
>to understand why this happens and act consequently. If you post the full
>error messages, maybe with a piece of code which generates them, I can try
>to
>help you more.

Yes, it is like call stack: first line has something like case1-case3, other
lines has something like case4.

For ex:

D:/!work/home/!stuff/ruby-tricks/test.rb:1:in `require': ./tricks.rb:31:
syntax error, unexpected ']', expecting $end (SyntaxError)
p 1,2,3].inject(0){|sum, n| sum + n}
^ from D:/!work/home/!stuff/ruby-tricks/test.rb:1

And I'd be happy to browse all call-stack by clicking on output strings in
"Script Output" window of my editor.

Most of compilers have "parsing-friendly" output, having the same
"file:line: error" strings on each line.

Faithfully, I have a proposition to core team for thinking about it.

V.


1 Answer

Stefano Crocco

3/3/2008 9:41:00 AM

0

Alle Monday 03 March 2008, Victor 'Zverok' Shepelev ha scritto:
> OK, but this regexp works for the second case ONLY (unfortunately, I have
> only one "output pattern" setting, so, I am trying to invent the universal
> one).

It should work for all the first three cases (at least, it does in ruby, which
I'm using to test it).

>
> >Regarding the last case, I think (but I may be wrong) that the third and
> >last
> >one are a single message, split in two lines for some reason. You should
> >try
> >to understand why this happens and act consequently. If you post the full
> >error messages, maybe with a piece of code which generates them, I can try
> >to
> >help you more.
>
> Yes, it is like call stack: first line has something like case1-case3, other
> lines has something like case4.
>
> For ex:
>
> D:/!work/home/!stuff/ruby-tricks/test.rb:1:in `require': ./tricks.rb:31:
> syntax error, unexpected ']', expecting $end (SyntaxError)
> p 1,2,3].inject(0){|sum, n| sum + n}
> ^ from D:/!work/home/!stuff/ruby-tricks/test.rb:1
>

This should take care of all the four patterns:

/^(?:.*:\d+:in\s+`require':\s+|\s+\^\s+from\s+)?(.*)(?=:\d+)/

Stefano