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