One more thing which I forgot:

Q1 there's a problem where:

B: ${$propertyname} and ${propertyname}
C: ${${propertyname}} and ${propertyname}

both are legal forms to express a property. Variant A has no such problem.

Jarek


----- Original Message ----- 
From: "Jaroslaw Kowalski" <[EMAIL PROTECTED]>
To: "Scott Hernandez" <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
Sent: Saturday, December 06, 2003 11:40 AM
Subject: [nant-dev] SUMMARY: Expression Syntax


> 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
>



-------------------------------------------------------
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