[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Fwd: I-D ACTION:draft-freed-sieve-environment-ihave-00.txt]
On Thu, Nov 16, 2006 at 08:38:33AM -0800, Aaron Stone wrote:
>
> Let's say we dropped Ned's suggested requirement that actions must be
> used inside of ihave blocks testing for them.
That would be my quibble with 'ihave' as well. While it might be
interesting to have a capability enabled for a block scope, I don't
think that doing this via a side-effect of a test inside of 'if' would
be the way to go about it. It creates too much of a magical connection
between the evaluation of the test inside of the 'if' and the code block
that follows the 'if', and I think that would cause confusion to script
writers and Sieve language implementers, both. It also asks for too
much context to be known inside the 'if' expression evaluator, e.g.:
if not ihave "vacation" { ... }
elsif something-else { ... # is vacation enabled here? }
else { ... # how about here? }
the "ihave" has to know a lot about what's around it, like if there's a
'not' out there that, at least in my implementation, would actually be
applied after the 'ihave' test was already disposed of. That's only a
very simple perversion, I can imagine others more complex :) While I
could implement it, I wouldn't like to...
If one wants block scope of capabilities, I would think there are other
ways to accomplish it. One way would be to have a new control command
with an attached block that could be else'd, e.g.:
enable "vacation" { ... }
else { ... }
Or simply separate the test and the enable, e.g.:
if ihave ["vacation", "notify" ] {
enable ["vacation", "notify"];
...
}
If desired, this could be defined so that the effect of the enable went
away when its containing block ended. I dunno if I would want that, I
guess I'd have to think about it; I tend to prefer more explicit
twiddling (e.g. by also having a complementary "unenable"). Then again,
I don't really see why one would want the capability to go away once
enabled.
Also I wonder about this bit:
> Ihave is designed to be used with extensions that add tests, actions,
> or comparators. It MUST NOT be used with extensions that change how
> the content of Sieve scripts are interpreted such as the variables
> extension [I-D.ietf-sieve-variables]
Why?
mm