Hi Scott,

As you requested, here's a summary of expression evaluator discussion:

Ian, Gert, Martin - can you please correct me if I'm wrong anywhere in the
summary.

========================================================
There are 2 questions:

QUESTION 1:
How should expressions be written?

A) <echo message="aaa" if="${length(propertyname)=3}" />
B) <echo message="aaa" if="${length($propertyname)=3}" />
C) <echo message="aaa" if="${length(${propertyname})=3}" />

Variant A - is clean and compatible with current approach to accessing
properties. Properties can still be accessed as ${propertyname}.

This may have the following problems:

- it may be hard to distinguish between property and function names because
they only differ by () (Java, C#, C++ also have this problem).
- we may no be able to access some properties (like
nant.task.cvs-checkout.location) because they contain dashes which cannot be
distinguished from "minus" operator. "a-b" could either be "a" MINUS "b" or
a property named "a-b". Fortunately there are only 6 such properties in NAnt
(so this could be quite easily resolved):

nant.tasks.cvs-update
nant.tasks.cvs-checkout
nant.tasks.delay-sign
nant.tasks.cvs-update.location
nant.tasks.cvs-checkout.location
nant.tasks.delay-sign.location

There was a suggestion to disallow such property names and formally define
them as:

property name => identifier { DOT identifier } *
identifier => [a-zA-Z_][a-zA-Z0-9_]*

In English:

"property name" is a sequence of "identifiers" separated by dots
"identifier" starts with a latin letter or an underscore and contains only
letters, digits underscores (like in C#, C++, Java, VB, JavaScript...)

- we may not be compatible with property names which are numeric. I was told
that currently a property can be named "1234". There seems to be an
agreement that this should be disallowed asap. I suggest that we disallow
properties containing dashes in their names at the same time.
- one could always use use propertyvalue('propertyname') function to access
weird-names properties

Variant B - prefix properties with '$' - similar to PERL

- is still quite clean, yet there are some dollars starting to appear
- this solves the first problem (the properties can be distinguished because
they are prefixed with $)
- accessing properties with dashes can still be tricky:

$property-name-with-dashes  // access property
$property-name-with-dashes(1) // $property-name-with MINUS dashes(1)

Variant C - enclose properties in ${...}

- it's difficult to read, especially when using proportional font,
- it's unambiguous
- no problem accessing any property

Opinions on Q1:

Jarek: A
Martin: A
Ian: A or B
Gert: B or C

QUESTION 2:
Should we always require ${} (or anything else we use for quoting) to be
written around expressions, or should we allow unquoted expressions in some
places?

Variant A (quote all expressions)

<if test="${length(someproperty)=3}">
    ...
</if>

<echo message="test" if ="${length(someproperty)=3}" />
<echo message="test" unless ="${length(someproperty)=3}" />

- it's simple
- you ALWAYS use quotes around expressions (both embedded in strings and
stand-alone)
- you can easily spot the expressions in your build file
- this may allow for easy implementation of syntax highlighting (actually I
already did this for VIM)

Variant B: allow for unquoted expressions in some places where non-string
values are expected:

Like "<if test="..." /> <... if="..." /> <... unless="..." />

<if test="length(someproperty)=3">
    ...
</if>
<echo message="test" if="length(someproperty)=3" />
<echo message="test" unless="length(someproperty)=3" />

- this is somewhat more readable (less dollars)
- it may be hard to find expressions in the build file.
- it may not be clear when to use quotes and when not to use them

Variant C: skip quotes for <if test="..." /> - keep for everything else

- this is implemented in "test1"

Opinions on Q2:

Jarek: A
Martin: A

CURRENT STATUS:

1. Expression evaluator is in CVS in branch "EE-patches"
2. It implements variants: Q1:A and Q2:C

A binary release of this is available at

http://jaak.sav.net/nant-ee/nant-ee-test1.zip

It contains some test cases written as a build file.

Jarek



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to