Skip to content

Restrict evaluation of string attributes, support empty paren expressions and other parser improvements#2405

Merged
tbabej merged 10 commits into2.6.0from
parser-issues
Jan 31, 2021
Merged

Restrict evaluation of string attributes, support empty paren expressions and other parser improvements#2405
tbabej merged 10 commits into2.6.0from
parser-issues

Conversation

@tbabej
Copy link
Copy Markdown
Member

@tbabej tbabej commented Jan 31, 2021

This MR implements more restricted behaviour when evaluating and desugaring filter string attributes, namely:

Also implements support for dealing with empty parentheses expressions, see #1896.

Closes #2388.
Closes #2386.
Closes #2257.
Closes #1908.
Closes #1896.

…to be evaluated

Attribute names are often words from natural language (such as start,
end or entry). The ColumnTypeString supports resolving DOM references,
such that task commands like 'task add proj:3.proj' work.

However, the current implementation of the ColumnTypeString::modify
only looks at the first token to determine whether the input is a DOM
reference or not. This mischaracterizes inputs like 'task add
"description:start something"', where the first token of the attribute
value looks like a DOM reference (the 'start' attribute), but is in
fact, a part of larger string.

Since all DOM references are single tokens, only interpret the input as
a possible DOM reference if and only if one token was found.

Closes #1908.
It could be argued we should not support this syntax (i.e. the ')'
character needs to be surrounded by a space. Note that the ability to
contain ')' as part of the attribute value was explicitly requested (as
a bug report) in TW-1455 (#1481).
Since taskwarrior is a CLI tool, it is likely that it is interacted with
programmatically. As such, expressions that a human would not type, but
are syntactically correct are bound to occur. In particular, task
currently is not able to handle empty parentheses expressions:

    task +PENDING '(' ')'

This is due to "and" operator being injected between +PENDING (which
translates to '( status = pending )' and '('.

Modify the insertJunctions to not insert the 'and' operator between two
sub-expressions if one of them is an empty parentheses expression.

Closes #1896.
@tbabej tbabej changed the title Restrict evaluation of string attributes Restrict evaluation of string attributes, support empty paren expressions and other parser improvements Jan 31, 2021
@tbabej tbabej merged commit bf11ef3 into 2.6.0 Jan 31, 2021
@tbabej tbabej deleted the parser-issues branch January 31, 2021 02:45
tbabej added a commit that referenced this pull request Aug 21, 2021
This is already fixed on 2.6.0 thanks to #2405, but it never hurts to
have more tests.

Closes #2577.
@tbabej tbabej mentioned this pull request Aug 21, 2021
tbabej added a commit that referenced this pull request Aug 21, 2021
This is already fixed on 2.6.0 thanks to #2405, but it never hurts to
have more tests.

Closes #2577.
tbabej added a commit that referenced this pull request Aug 21, 2021
This is already fixed on 2.6.0 thanks to #2405, but it never hurts to
have more tests.

Closes #2577.
tbabej added a commit that referenced this pull request Aug 21, 2021
This is already fixed on 2.6.0 thanks to #2405, but it never hurts to
have more tests.

Closes #2577.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant