From murdoch at stats.uwo.ca  Tue Apr 22 00:08:58 2008
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Mon, 21 Apr 2008 18:08:58 -0400
Subject: [Rd] AddComment (gram.y)
In-Reply-To: <20080421041554.GA32674@klutometis.wikitex.org>
References: <20080419050915.GA1820@klutometis.wikitex.org>	<4809D46D.2030308@stats.uwo.ca>	<20080419185707.GA10684@klutometis.wikitex.org>	<480A5A28.60302@stats.uwo.ca>
	<20080421041554.GA32674@klutometis.wikitex.org>
Message-ID: <480D107A.3070102@stats.uwo.ca>

Peter Danenberg wrote:
>> They aren't "cannibalized", they are still there, where the source
>> ref says they are.
>>     
>
> I was thinking along the lines of using parse() to unambiguously
> associate a comment block with a code object; sure, srcref() retains
> them: but that's no different than parsing a text file.
>
> If I can't associate comment with code in parse(), I don't see how I
> can avoid reimplementing the R parser; at least far enough to identify
> top-level objects (but why stop there?).
>
> By "cannibalizing", I'm referring to the following; take trivial.R:
>
>    # Comment relevant to foo
>    foo <- "bar"
>
> attributes(parse("trivial.R"))$srcref[[1]] returns:
>
>    foo <- "bar"
>
> which is consistent with SkipComment.

That's not the way to do it.  Currently there is no easy way to print 
the comments, but one could certainly be written.  If you look at all 
the srcref values, they identify the start and end of the expressions 
that were parsed.  The source outside those identified regions are the 
comments.  (There may also be embedded comments within
those regions, e.g.

  foo <-   # about foo
      "bar"


For example, when I parse your file above and save the srcrefs, I get

 > unclass(srcref[[1]])
[1]  2  4  2 15
attr(,"srcfile")
trivial.R

This says that everything before line 2, column 4 is whitespace/comment, 
and everything after line 2 column 15 is the same.  If you want to adopt 
a style that says comments precede their target, then you should be 
looking for a comment in line 1.  R can't put a comment in the first few 
chars of a line.  If you want your comments
to follow the object, then look in line 2 after column 15, or in line 3 
or later.

I think a parser modification that returned the location of all # 
markers that start comments would be reasonable, but the parser 
shouldn't decide which expression these
are attached to.  That's not part of the language, that's a convention 
added on top of it.

Duncan Murdoch



[Rd] AddComment (gram.y)
Duncan Murdoch