[ESS] = and test suites (was: Re: indentation when using = rather than <-)
Martin Maechler
maechler at stat.math.ethz.ch
Sat Feb 4 12:43:37 CET 2006
>>>>> "tony" == A J Rossini <blindglobe at gmail.com>
>>>>> on Sat, 4 Feb 2006 11:10:56 +0100 writes:
tony> Tim - That's a hard one. Despite the fact that I
tony> think that the use of "=" (or "_") for assignment is a
tony> cardinal sin,
INDEED!!
<sermon>
You just throw away part of the expressiveness of the S
language.
In S, we have assignment by "<-"
and function argument naming by "=" {both in function calls
and function definitions for the default values}.
And it's very useful to differentiate the two, and it does make
sense to fontify the assignment operator, but it's much less
sensical to fontify all "=" !
In the languages that use "=" assignment,
there is no other use of "=" and hence no language ambiguity in
things like
plot(x = y)
</sermon>
tony> I am not sure that the ESS code is
tony> factored well to allow for simple replacement /
tony> additions of "=" as assignment, and it should be.
Indeed. I must admit to have been startled by Tim's example
leading to bad indentations;
Of course I never misuse the "=" operator (*), and so don't see
examples, but still; why is our indentation not guided by the
"(...)" parentheses matching?
(*): Recent version of ESS for a good reason have the function
M-x ess-fix-EQ-assign
which tries to guess at least some of the misuses of "="
and replace them by " <- "
ess-fix-EQ-assign is part of the M-x ess-MM-fix-src
function which I use every time I get S source files from
other people.
tony> What I'd think about is looking for uses of "_" for
tony> assignment in the lisp code for S/S-PLUS, and when
tony> appropriate, replaceing them with "=".
(or just run under R where "_" will give syntax errors in most cases)
Also, ESS has M-x ess-fix-miscellaneous
which replaces quite a few of the "_" uses by " <- "
tony> On a side note, we really ought to have a test suite
tony> for font-locking.
and for indentation, and ... good idea, but how
can one do automated testing {via 'make' i.e. scripts !} of such
emacs / ESS features?
tony> I know we have (had?) some for SAS,
tony> but it would be good to have some for the various
tony> "allowable" (heinous) approaches for coding that
tony> S-PLUS and R allow, to make sure we get indentation
tony> right for unbelievers.
tony> On 3 Feb 2006 14:27:37 -0800, Tim Hesterberg
tony> <timh at insightful.com> wrote:
>> I'm trying to move away from using _ for assignment, but
>> rather than <- I want to use = (for a number of reasons,
>> the biggest of which is that <- is a barrier to new users
>> adopting the S language).
>>
>> Unfortunately, ESS does not treat <- and = the same for
>> indentation (example below).
>>
>> How would I get ESS to treat "=" the same as "<-" for
>> purposes of indentation?
>>
>> I tried adding "=" to the ess-S-assign-ops variable, but
>> that didn't seem to affect indentation. There is a
>> comment in the definition of the variable suggesting the
>> omission of "=" is intentional, so I'm wondering about
>> possible negative ramifications of modifying the ESS code
>> to make indentation work as I like.
>>
>> --------------------------------------------------
>> Example:
>>
>> If I create the following functions with no initial
>> blanks, then run ess-indent-exp from the beginning of
>> each function, I get the following; I'd like indenting
>> the second version to be similar to indenting the first.
>> f <- function(x) {
>> a
>> if(b) {
>> c <- foo1(x = 2, y = 3, foo2(z = mean(x)),
>> a, b = 5)
>> for(i in 1:n)
>> d[i] <- foo3(z, foo4(a = 3,
>> b =
>> 5, c, foo5(d)))
>> }
>> }
>>
>> f = function(x) {
>> a
>> if(b){
>> c = foo1(x = 2, y = 3, foo2(z = mean(x)),
>> a, b = 5)
>> for(i in 1:n)
>> d[i] = foo3(z, foo4(a = 3,
>> b =
>> 5, c, foo5(d)))
>> }
>> }
More information about the ESS-help
mailing list