From: Ian M. <ianm@ActiveState.com> - 2003-12-07 16:21:19
|
This is one of the more compelling arguments for me. I'm leaning towards option A with {} used everywhere - for clarity and consistency.- and ease of syntax highlighting. Ian Jaroslaw Kowalski wrote: >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" <ja...@zd...> >To: "Scott Hernandez" <sk...@eo...>; ><nan...@li...> >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 >>nan...@li... >>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 >nan...@li... >https://lists.sourceforge.net/lists/listinfo/nant-developers > > -- Ian MacLean, Developer, ActiveState, a division of Sophos http://www.ActiveState.com |