Re: [Rd] R CMD check may not detect a code/documentation mismatch

2009-12-16 Thread Peter Dalgaard
[orig. correspondence below]

Brian and Kurt have been sinking their teeth further into this. It
turned out that there was a gotcha with the .Primitive functions like
`:`, `.C`, etc., for which formals() always returns NULL. However,
replacement with a  check for typeof(f) == "closure" made things work,
and revealed a handful of undetected issues in CRAN packages.

So this has now been committed to r-devel. Thanks for chasing this up.

-pd


Petr Savicky wrote:
> On Mon, Dec 14, 2009 at 09:24:12AM +0100, Kurt Hornik wrote:
>>> Peter Dalgaard writes:
> [...]
>>> Hmm, looks more like a thinko in this code inside codoc():
>>>  functions_in_code <- Filter(function(f) {
>>>  f <- get(f, envir = code_env)
>>>  is.function(f) && (length(formals(f)) > 0L)
>>>  }, objects_in_code)
>>> which, further down the line, causes functions with no formal arguments 
>>> to be skipped when compared to the usage section.
>>> Browse[2]>
>>> debug: ind <- (!functions %in% functions_to_be_ignored & functions %in%
>>>  functions_in_code)
>>> Browse[2]> functions
>>> [1] "testCoreClass""testCoreAttrEval" "testCoreReg" 
>>> "testCoreNA"
>>> Browse[2]>
>>> debug: bad_functions <- mapply(functions[ind], exprs[ind], FUN = 
>>> function(x,
>>>  y) check_codoc(x, as.pairlist(as.alist.call(y[-1L]))), SIMPLIFY = 
>>> FALSE)
>>> Browse[2]> ind
>>> [1]  TRUE  TRUE  TRUE FALSE
>>> I.e. testCoreNA is never tested by check_codoc. There may of course be
>>> a rationale for this, but it escapes me...
>> Well, I am sure I had good reasons when I wrote the code many years ago,
>> but of course I no longer recall what they were.
>>
>> Did you try the effect of removing the length(formals(f)) test?
> 
> I understand this as the question, what is the influence of the following 
> patch
> (indented by two spaces).
> 
>   diff --minimal -U 3 -r R-devel_2009-12-13/src/library/tools/R/QC.R 
> R-devel_length_formals/src/library/tools/R/QC.R
>   --- R-devel_2009-12-13/src/library/tools/R/QC.R 2009-10-27 
> 02:59:10.0 +0100
>   +++ R-devel_length_formals/src/library/tools/R/QC.R 2009-12-14 
> 18:45:55.0 +0100
>   @@ -398,7 +398,7 @@
>functions_in_code <-
>Filter(function(f) {
>   f <- get(f, envir = code_env)
>   -   is.function(f) && (length(formals(f)) > 0L)
>   +   is.function(f)
>   },
>   objects_in_code)
>## Sourcing all R code files in the package is a problem for base,
> 
> Since i do not know this part of R code, i simply applied the patch to the
> current R-devel and run "make" and "make check" (both OK) and compared
> the output of
> 
>   R CMD check XML_2.6-0.tar.gz
>   R CMD check randomForest_4.5-33.tar.gz
>   R CMD check tree_1.0-27.tar.gz
>   R CMD check survival_2.35-7.tar.gz
> 
> with R being both original R-devel and the modified one. The results were 
> identical
> in all four cases (empty diff) on two Linux machines (CentOS and openSUSE).
> 
> On the other hand, for the package
>   http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
> which demonstrates the problem, the modified R detected the code/doc mismatch.
> The diff of the two outputs of R CMD check was
> 
>   [savi...@uivtx test]$ diff original modified 
>   35c35,42
>   < * checking for code/documentation mismatches ... OK
>   ---
>   > * checking for code/documentation mismatches ... WARNING
>   > Codoc mismatches from documentation object 'testCore':
>   > testCoreNA
>   >   Code: function()
>   >   Docs: function(verbose = 0)
>   >   Argument names in docs not in code:
>   > verbose
>   > 
>   39a47,50
>   > WARNING: There was 1 warning, see
>   >   /home/savicky/tmp/test/something.Rcheck/00check.log
>   > for details
>   > 
> 
> Petr Savicky.
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
   O__   Peter Dalgaard Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark  Ph:  (+45) 35327918
~~ - (p.dalga...@biostat.ku.dk)  FAX: (+45) 35327907

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] R CMD check may not detect a code/documentation mismatch

2009-12-14 Thread Petr Savicky
On Mon, Dec 14, 2009 at 09:24:12AM +0100, Kurt Hornik wrote:
> > Peter Dalgaard writes:
[...]
> > Hmm, looks more like a thinko in this code inside codoc():
> 
> >  functions_in_code <- Filter(function(f) {
> >  f <- get(f, envir = code_env)
> >  is.function(f) && (length(formals(f)) > 0L)
> >  }, objects_in_code)
> 
> > which, further down the line, causes functions with no formal arguments 
> > to be skipped when compared to the usage section.
> 
> > Browse[2]>
> > debug: ind <- (!functions %in% functions_to_be_ignored & functions %in%
> >  functions_in_code)
> > Browse[2]> functions
> > [1] "testCoreClass""testCoreAttrEval" "testCoreReg" 
> > "testCoreNA"
> > Browse[2]>
> > debug: bad_functions <- mapply(functions[ind], exprs[ind], FUN = 
> > function(x,
> >  y) check_codoc(x, as.pairlist(as.alist.call(y[-1L]))), SIMPLIFY = 
> > FALSE)
> > Browse[2]> ind
> > [1]  TRUE  TRUE  TRUE FALSE
> 
> > I.e. testCoreNA is never tested by check_codoc. There may of course be
> > a rationale for this, but it escapes me...
> 
> Well, I am sure I had good reasons when I wrote the code many years ago,
> but of course I no longer recall what they were.
> 
> Did you try the effect of removing the length(formals(f)) test?

I understand this as the question, what is the influence of the following patch
(indented by two spaces).

  diff --minimal -U 3 -r R-devel_2009-12-13/src/library/tools/R/QC.R 
R-devel_length_formals/src/library/tools/R/QC.R
  --- R-devel_2009-12-13/src/library/tools/R/QC.R   2009-10-27 
02:59:10.0 +0100
  +++ R-devel_length_formals/src/library/tools/R/QC.R   2009-12-14 
18:45:55.0 +0100
  @@ -398,7 +398,7 @@
   functions_in_code <-
   Filter(function(f) {
  f <- get(f, envir = code_env)
  -   is.function(f) && (length(formals(f)) > 0L)
  +   is.function(f)
  },
  objects_in_code)
   ## Sourcing all R code files in the package is a problem for base,

Since i do not know this part of R code, i simply applied the patch to the
current R-devel and run "make" and "make check" (both OK) and compared
the output of

  R CMD check XML_2.6-0.tar.gz
  R CMD check randomForest_4.5-33.tar.gz
  R CMD check tree_1.0-27.tar.gz
  R CMD check survival_2.35-7.tar.gz

with R being both original R-devel and the modified one. The results were 
identical
in all four cases (empty diff) on two Linux machines (CentOS and openSUSE).

On the other hand, for the package
  http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
which demonstrates the problem, the modified R detected the code/doc mismatch.
The diff of the two outputs of R CMD check was

  [savi...@uivtx test]$ diff original modified 
  35c35,42
  < * checking for code/documentation mismatches ... OK
  ---
  > * checking for code/documentation mismatches ... WARNING
  > Codoc mismatches from documentation object 'testCore':
  > testCoreNA
  >   Code: function()
  >   Docs: function(verbose = 0)
  >   Argument names in docs not in code:
  > verbose
  > 
  39a47,50
  > WARNING: There was 1 warning, see
  >   /home/savicky/tmp/test/something.Rcheck/00check.log
  > for details
  > 

Petr Savicky.

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] R CMD check may not detect a code/documentation mismatch

2009-12-14 Thread Peter Dalgaard
Kurt Hornik wrote:
>> Peter Dalgaard writes:
> 
>> Petr Savicky wrote:
>>> For the package at
>>> http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
>>> which is a minor part of some other package only to demonstrate the
>>> problem, i get (under R version 2.11.0 Under development 2009-12-12 r50714
>>> and also under R-2.9.2, openSUSE 11.1 (x86_64) and CentOS release 5.2)
>>>
>>> R CMD check something_0.0.0.tar.gz
>>>
>>> ...
>>> * checking Rd files ... OK
>>> * checking Rd metadata ... OK
>>> * checking Rd cross-references ... OK
>>> * checking for missing documentation entries ... OK
>>> * checking for code/documentation mismatches ... OK
>>> * checking Rd \usage sections ... OK
>>> * checking examples ... NONE
>>> * checking PDF version of manual ... OK
>>>
>>> although the package code contains
>>>
>>> testCoreNA <- function()
>>>
>>> and the documentation contains
>>>
>>> \usage{
>>> testCoreClass(verbose=0)
>>> testCoreAttrEval(verbose=0)
>>> testCoreReg(verbose=0)
>>> testCoreNA(verbose=0)
>>> }
>>>
>>> There is a mismatch between code and documentation of testCoreNA(). Is the 
>>> problem caused by having four entries in \usage{} section?
> 
>> Hmm, looks more like a thinko in this code inside codoc():
> 
>>  functions_in_code <- Filter(function(f) {
>>  f <- get(f, envir = code_env)
>>  is.function(f) && (length(formals(f)) > 0L)
>>  }, objects_in_code)
> 
>> which, further down the line, causes functions with no formal arguments 
>> to be skipped when compared to the usage section.
> 
>> Browse[2]>
>> debug: ind <- (!functions %in% functions_to_be_ignored & functions %in%
>>  functions_in_code)
>> Browse[2]> functions
>> [1] "testCoreClass""testCoreAttrEval" "testCoreReg" 
>> "testCoreNA"
>> Browse[2]>
>> debug: bad_functions <- mapply(functions[ind], exprs[ind], FUN = 
>> function(x,
>>  y) check_codoc(x, as.pairlist(as.alist.call(y[-1L]))), SIMPLIFY = 
>> FALSE)
>> Browse[2]> ind
>> [1]  TRUE  TRUE  TRUE FALSE
> 
>> I.e. testCoreNA is never tested by check_codoc. There may of course be
>> a rationale for this, but it escapes me...
> 
> Well, I am sure I had good reasons when I wrote the code many years ago,
> but of course I no longer recall what they were.
> 
> Did you try the effect of removing the length(formals(f)) test?

Not yet. Priorities

-p

-- 
   O__   Peter Dalgaard Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark  Ph:  (+45) 35327918
~~ - (p.dalga...@biostat.ku.dk)  FAX: (+45) 35327907

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] R CMD check may not detect a code/documentation mismatch

2009-12-14 Thread Kurt Hornik
> Peter Dalgaard writes:

> Petr Savicky wrote:
>> For the package at
>> http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
>> which is a minor part of some other package only to demonstrate the
>> problem, i get (under R version 2.11.0 Under development 2009-12-12 r50714
>> and also under R-2.9.2, openSUSE 11.1 (x86_64) and CentOS release 5.2)
>> 
>> R CMD check something_0.0.0.tar.gz
>> 
>> ...
>> * checking Rd files ... OK
>> * checking Rd metadata ... OK
>> * checking Rd cross-references ... OK
>> * checking for missing documentation entries ... OK
>> * checking for code/documentation mismatches ... OK
>> * checking Rd \usage sections ... OK
>> * checking examples ... NONE
>> * checking PDF version of manual ... OK
>> 
>> although the package code contains
>> 
>> testCoreNA <- function()
>> 
>> and the documentation contains
>> 
>> \usage{
>> testCoreClass(verbose=0)
>> testCoreAttrEval(verbose=0)
>> testCoreReg(verbose=0)
>> testCoreNA(verbose=0)
>> }
>> 
>> There is a mismatch between code and documentation of testCoreNA(). Is the 
>> problem caused by having four entries in \usage{} section?

> Hmm, looks more like a thinko in this code inside codoc():

>  functions_in_code <- Filter(function(f) {
>  f <- get(f, envir = code_env)
>  is.function(f) && (length(formals(f)) > 0L)
>  }, objects_in_code)

> which, further down the line, causes functions with no formal arguments 
> to be skipped when compared to the usage section.

> Browse[2]>
> debug: ind <- (!functions %in% functions_to_be_ignored & functions %in%
>  functions_in_code)
> Browse[2]> functions
> [1] "testCoreClass""testCoreAttrEval" "testCoreReg" 
> "testCoreNA"
> Browse[2]>
> debug: bad_functions <- mapply(functions[ind], exprs[ind], FUN = 
> function(x,
>  y) check_codoc(x, as.pairlist(as.alist.call(y[-1L]))), SIMPLIFY = 
> FALSE)
> Browse[2]> ind
> [1]  TRUE  TRUE  TRUE FALSE

> I.e. testCoreNA is never tested by check_codoc. There may of course be
> a rationale for this, but it escapes me...

Well, I am sure I had good reasons when I wrote the code many years ago,
but of course I no longer recall what they were.

Did you try the effect of removing the length(formals(f)) test?

-k


> -- 
> O__   Peter Dalgaard Øster Farimagsgade 5, Entr.B
>c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
>   (*) \(*) -- University of Copenhagen   Denmark  Ph:  (+45) 35327918
> ~~ - (p.dalga...@biostat.ku.dk)  FAX: (+45) 35327907

> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] R CMD check may not detect a code/documentation mismatch

2009-12-13 Thread Peter Dalgaard

Petr Savicky wrote:

For the package at
  http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
which is a minor part of some other package only to demonstrate the
problem, i get (under R version 2.11.0 Under development 2009-12-12 r50714
and also under R-2.9.2, openSUSE 11.1 (x86_64) and CentOS release 5.2)

  R CMD check something_0.0.0.tar.gz

  ...
  * checking Rd files ... OK
  * checking Rd metadata ... OK
  * checking Rd cross-references ... OK
  * checking for missing documentation entries ... OK
  * checking for code/documentation mismatches ... OK
  * checking Rd \usage sections ... OK
  * checking examples ... NONE
  * checking PDF version of manual ... OK

although the package code contains

  testCoreNA <- function()

and the documentation contains

  \usage{
  testCoreClass(verbose=0)
  testCoreAttrEval(verbose=0)
  testCoreReg(verbose=0)
  testCoreNA(verbose=0)
  }

There is a mismatch between code and documentation of testCoreNA(). Is the 
problem caused by having four entries in \usage{} section?


Hmm, looks more like a thinko in this code inside codoc():

functions_in_code <- Filter(function(f) {
f <- get(f, envir = code_env)
is.function(f) && (length(formals(f)) > 0L)
}, objects_in_code)

which, further down the line, causes functions with no formal arguments 
to be skipped when compared to the usage section.


Browse[2]>
debug: ind <- (!functions %in% functions_to_be_ignored & functions %in%
functions_in_code)
Browse[2]> functions
[1] "testCoreClass""testCoreAttrEval" "testCoreReg" 
"testCoreNA"

Browse[2]>
debug: bad_functions <- mapply(functions[ind], exprs[ind], FUN = 
function(x,
y) check_codoc(x, as.pairlist(as.alist.call(y[-1L]))), SIMPLIFY = 
FALSE)

Browse[2]> ind
[1]  TRUE  TRUE  TRUE FALSE

I.e. testCoreNA is never tested by check_codoc. There may of course be a 
rationale for this, but it escapes me...



--
   O__   Peter Dalgaard Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark  Ph:  (+45) 35327918
~~ - (p.dalga...@biostat.ku.dk)  FAX: (+45) 35327907

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] R CMD check may not detect a code/documentation mismatch

2009-12-13 Thread Petr Savicky
For the package at
  http://www.cs.cas.cz/~savicky/R-devel/something_0.0.0.tar.gz
which is a minor part of some other package only to demonstrate the
problem, i get (under R version 2.11.0 Under development 2009-12-12 r50714
and also under R-2.9.2, openSUSE 11.1 (x86_64) and CentOS release 5.2)

  R CMD check something_0.0.0.tar.gz

  ...
  * checking Rd files ... OK
  * checking Rd metadata ... OK
  * checking Rd cross-references ... OK
  * checking for missing documentation entries ... OK
  * checking for code/documentation mismatches ... OK
  * checking Rd \usage sections ... OK
  * checking examples ... NONE
  * checking PDF version of manual ... OK

although the package code contains

  testCoreNA <- function()

and the documentation contains

  \usage{
  testCoreClass(verbose=0)
  testCoreAttrEval(verbose=0)
  testCoreReg(verbose=0)
  testCoreNA(verbose=0)
  }

There is a mismatch between code and documentation of testCoreNA(). Is the 
problem caused by having four entries in \usage{} section?

Petr Savicky.

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel