I've now committed changes in R-devel and R-patched to detect cases
where a call to switch() contains multiple unnamed alternatives. The
code only complains if the EXPR argument is a character string; unnamed
alternatives are fine with numeric switching.
Adding this check turned up 3 more typos like this in the base code
besides the one in parseNamespaceFile. I expect it will turn up quite a
few more in CRAN and Bioconductor packages.
Please let me know right away if you've got correct code that generates
the warnings or errors.
Duncan Murdoch
In R-devel they're an error, in R-patched they'll just give a warning.
On 27/11/2010 7:09 PM, Duncan Murdoch wrote:
On 27/11/2010 6:50 PM, Duncan Murdoch wrote:
On 27/11/2010 5:58 PM, Charles C. Berry wrote:
parseNamespaceFile() doesn't seem to detect misspelled directives. Looking
at its code I see
switch(as.character(e[[1L]]),
<lots of args omitted here>,
stop(gettextf("unknown namespace directive: %s",
deparse(e)), call. = FALSE, domain = NA))
but this doesn't seem to function as I expect, viz. to stop with an error
if I type a wrong directive.
You're right, there was a typo in parseNamespaceFile. (The typo was in
this line:
"=", "<-" = {
This should have been
"=" =, "<-" = {
Without the extra = sign, the "=" was taken as the default value of the
switch, and the stop() was never reached.
Conceivably switch() should complain if it is called with more than one
default.
I suspect when I fix this it's going to flush out some typos in packages
on CRAN...
Duncan Murdoch
Duncan Murdoch
Details:
# create dummy NAMESPACE file with two bad / one good directives
cat("blah( nada )\nblee( nil )\nexport( outDS )\n",file="NAMESPACE")
readLines("NAMESPACE")
[1] "blah( nada )" "blee( nil )" "export( outDS )"
parseNamespaceFile("",".") # now parse it
$imports
list()
$exports
[1] "outDS"
$exportPatterns
character(0)
$importClasses
list()
$importMethods
list()
$exportClasses
character(0)
$exportMethods
character(0)
$exportClassPatterns
character(0)
$dynlibs
character(0)
$nativeRoutines
list()
$S3methods
[,1] [,2] [,3]
So, it picked up 'export' and ignored the other two lines.
Chuck
p.s.
sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Charles C. Berry Dept of Family/Preventive Medicine
cbe...@tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
______________________________________________
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