Commit Graph

204 Commits

Author SHA1 Message Date
Sebastian Schmidt
a3faefb893 Fix panic when adding number to string
For no reason, unwraps were used in the operator module.

Fixes #59
2019-08-29 13:36:18 +03:00
Sebastian Schmidt
d8eed924cc Add documentation about operator assignments 2019-08-29 13:21:54 +03:00
Sebastian Schmidt
b7233a3337 Implement operator assignments
Implements #34
2019-08-29 13:10:12 +03:00
Sebastian Schmidt
b9c4b34a2f Make builtin len support tuples
Implements #41
2019-08-29 11:10:54 +03:00
Sebastian Schmidt
95ba26a2cd Fix doctest for context creation macro
Relates to #48
2019-08-29 10:50:32 +03:00
Sebastian Schmidt
60b6cdf180 Add documentation about context creation macro
Implements #48
2019-08-29 10:47:58 +03:00
Sebastian Schmidt
3670bcaf63 Add comments to code in docs 2019-08-29 10:33:12 +03:00
Sebastian Schmidt
88559d5493 Add some information about contexts to docs 2019-08-29 10:30:55 +03:00
Sebastian Schmidt
2399df16a1 Run rustfmt 2019-08-29 10:02:05 +03:00
Sebastian Schmidt
6ace829117 Create mutable context when using eval functions without context
While this is a tiny hit on performance, it is something that the user probably wants.
It specifically prevents the user from seeing ContextNotManipulable errors when using the full power of evalexpr in the simplest eval calls.

Implements #45
2019-08-29 09:44:14 +03:00
Sebastian Schmidt
6b1706f68f Run rustfix
Relates to #55
2019-08-29 09:03:31 +03:00
Sebastian Schmidt
fa0a021d71 Update use statements to Rust 2018
Relates to #55
2019-08-29 09:02:15 +03:00
Sebastian Schmidt
0c5d032b37 Merge remote-tracking branch 'origin/master' 2019-08-29 08:57:07 +03:00
Sebastian Schmidt
2ee1f8f62c Deny missing docs 2019-08-29 08:56:58 +03:00
Sebastian Schmidt
e6c19077b6 Implement value decomposition API
* Removed expect_... methods and replaced them with .as_...() methods. This removes the need to import the free-standing methods every time and makes the code cleaner.
 * Changed all the examples appropriately.

Implements #53
2019-08-29 08:56:49 +03:00
Atul Bhosale
311c70a823
Update crate for Rust 2018 using 'cargo fix --edition' 2019-06-06 23:23:30 +05:30
Sebastian Schmidt
502ec0adce Format code 2019-05-04 13:54:19 +02:00
Sebastian Schmidt
6f533ca925 Merge branch '52_remove_automatic_function_argument_decomposition' 2019-05-04 13:53:47 +02:00
Sebastian Schmidt
f6c2ef2fb6 Remove automatic function argument decomposition
Relates to #52
2019-05-04 13:43:29 +02:00
Sebastian Schmidt
2ca7209d22 Remove debug output 2019-05-04 13:43:05 +02:00
Sebastian Schmidt
21b308f3ae Format code 2019-04-26 17:37:59 +02:00
ISibboI
b85e8e1b75
Merge pull request #49 from lovasoa/master
Use the new context macro in the README examples
2019-04-26 17:36:15 +02:00
Sebastian Schmidt
bc826e5bf2 Use context_map macro in lib.rs documentation as well
Should have used `cargo sync-readme` to begin with, but that was not
documented at the time of this pull request.
2019-04-26 17:33:59 +02:00
Sebastian Schmidt
8432058052 Execute serde doctest only if serde_support is enabled
Relates to #50
2019-04-24 18:36:30 +02:00
Sebastian Schmidt
6f77471354 Fixed aggregation operator
Manage sequence operators, which currently are `Chain` and `Token` on the stack without ever inserting unfinished sequence operator nodes into another node.

Relates to #44
2019-04-22 19:08:55 +02:00
Sebastian Schmidt
2e929ae0fe Replace manual type_id with builtin function of trait Any
Relates to #44
2019-04-22 16:24:26 +02:00
Sebastian Schmidt
d576cec9b9 Add flattening of operator chains when building operator tree
Relates to #44
2019-04-22 16:20:33 +02:00
Sebastian Schmidt
531b7b72a0 Make Operator::max_argument_amount optional
Relates to #44
2019-04-22 16:17:02 +02:00
Sebastian Schmidt
0eaeb3f6ab Improve context_map macro docs
Relates to #48
2019-04-16 20:52:18 +02:00
Ophir LOJKINE
bb827c55ce Add a macro for easy context definition 2019-04-15 00:07:07 +02:00
Sebastian Schmidt
6c078c49e5 Refactor operators into an enum
(This commit is not formatted properly)

Relates to #46
2019-04-14 16:54:35 +02:00
Sebastian Schmidt
697fbb5d45 Implement iterators over variable and function identifiers
Relates to #37
2019-04-13 20:16:05 +02:00
Sebastian Schmidt
83386c03d3 Improve documentation of builtin functions
Relates to #38
2019-04-13 18:12:33 +02:00
ISibboI
2f7d1c2dfe
Merge pull request #38 from bittrance/string-operators
String operators and builtin functions
2019-04-13 18:02:24 +02:00
Quest
dbf3949af6 Namespace string builtins into "str::". 2019-04-12 23:45:29 +02:00
Quest
d72334c246 Rename builtin upcase,downcase -> to_uppercase, to_lowercase. 2019-04-12 23:45:29 +02:00
Quest
7c6b6d4319 Rename matches,replace -> regex_{matches,replace}.
Also simplify their error handling.
2019-04-12 23:45:29 +02:00
Quest
be54931f76 Builtin string functions - downcase, len, match(regex), replace(regex), trim, upcase. New dependency regex. 2019-04-12 23:35:33 +02:00
Sebastian Schmidt
e328adb97b Implement Node::iter_identifiers()
This commit implements an iterator over the identifiers in an expression.
The identifiers are iterated pre-order, meaning that higher nodes in the tree are emitted first.
The identifier iterator is based on a general iterator over all nodes in an operator tree, which can be used for further featues.

Relates to #37
2019-04-12 19:27:34 +02:00
Sebastian Schmidt
7545d1f31e Fix ExpectedNumber error message
Relates to #40
2019-04-12 18:48:27 +02:00
Sebastian Schmidt
15313f7341 Update target release 2019-04-12 18:45:46 +02:00
Quest
a9c45307dd Support addition and comparison of strings. 2019-04-05 23:07:54 +02:00
Sebastian Schmidt
2caf000584 Export expect_function_argument_amount 2019-03-31 15:46:22 +02:00
Sebastian Schmidt
67d68cd974 Add string constants
* Implement string parsing in tokenizer
 * Implement escape sequences `\"` and `\\`
 * Document changes
 * Update change log

Relates to #35
2019-03-30 11:54:26 +01:00
Sebastian Schmidt
c63206fa17 Add derive(Default) to HashMapContext 2019-03-28 15:44:25 +01:00
Sebastian Schmidt
17bedddb11 Add serde support for HashMapContext
Relates to #33
2019-03-28 15:40:02 +01:00
Sebastian Schmidt
606c358cc9 Make operator table one-columned 2019-03-28 15:01:20 +01:00
Sebastian Schmidt
aeb584edca Add quickstart documentation with chain and assign features 2019-03-28 12:09:46 +01:00
Sebastian Schmidt
44152533c3 Set release target to major 2019-03-28 11:49:06 +01:00
Sebastian Schmidt
ab49531306 Document chain operator
Relates to #26
2019-03-28 11:46:56 +01:00
Sebastian Schmidt
9d27969eac Implement and test chain operator
Relates to #26
2019-03-28 11:34:54 +01:00
Sebastian Schmidt
4838a21a57 Add default implementation for Operator::is_left_to_right 2019-03-28 11:14:55 +01:00
Sebastian Schmidt
83269068a2 Add the assignment operator
Relates to #25
2019-03-28 11:12:47 +01:00
Sebastian Schmidt
13420ed745 Document the empty type
Relates to #28
2019-03-28 10:38:16 +01:00
Sebastian Schmidt
5bc4bcb702 Add crate level shortcut evaluations for Value::Empty
Relates to #28
2019-03-28 10:32:42 +01:00
Sebastian Schmidt
7d36ebe8df Add Node shortcut evaluations for Value::Empty
Relates to #28
2019-03-28 10:26:49 +01:00
Sebastian Schmidt
a7b5f602d5 Do not require expressions to have content
* Make parser return implicit toplevel node
 * Make `RootNode` return `Value::Empty` if it has no arguments instead of failing

Relates to #28
2019-03-28 10:10:16 +01:00
Sebastian Schmidt
88ab1e1987 Add Value::Empty and ValueType::Empty
Relates to #28
2019-03-28 09:56:44 +01:00
Sebastian Schmidt
3c108d5960 Add crate shortcut methods to eval with context mut
Relates to #30
2019-03-28 09:48:12 +01:00
Sebastian Schmidt
e266f4fc0d Merge ContextMut with Context and add eval_<type>_with_context_mut methods
Trait objects of `ContextMut` cannot be converted into `Context`, even though `ContextMut` requires `Context`.

Relates to #30
2019-03-28 09:22:48 +01:00
Sebastian Schmidt
6bd68e6491 Add eval_mut function to Operator trait
Relates to #30
2019-03-28 08:52:49 +01:00
Sebastian Schmidt
0acbcd8958 Format code 2019-03-28 08:44:04 +01:00
Sebastian Schmidt
ece22c6b35 Fix typo 2019-03-28 08:41:46 +01:00
Sebastian Schmidt
83451a9028 Use as_number in quickstart example
Otherwise the example would not allow mixed float and int arguments.
2019-03-28 08:41:16 +01:00
Sebastian Schmidt
6f31d69d7d Prepare 2.0.0 release 2019-03-27 19:14:24 +01:00
Sebastian Schmidt
d77fa15864 Use EvalexprResult<T> everywhere
Relates to #31
2019-03-27 19:09:58 +01:00
Sebastian Schmidt
d5544cdbf2 Add eval_number[_with_context] crate methods
Relates to #20
2019-03-27 18:59:06 +01:00
Sebastian Schmidt
720b2f90c2 Add Node::eval_number[_with_context] methods
Relates to #20
2019-03-27 18:55:51 +01:00
Sebastian Schmidt
7d0abc8406 Rename as_float to as_number and add strict as_float
Relates to #20
2019-03-27 18:49:02 +01:00
Sebastian Schmidt
b18521b8aa Format code 2019-03-27 18:35:16 +01:00
Sebastian Schmidt
24ca11e52a Document how to enable serde feature flag
Relates to #21
2019-03-27 18:35:00 +01:00
Sebastian Schmidt
9283d5412f Rename Context to ContextMut and Configuration to Context
Get rid of two different words for the same concept.

Relates to #22
2019-03-27 18:09:33 +01:00
Sebastian Schmidt
7decb7c895 Make ValueType public 2019-03-27 17:55:05 +01:00
Sebastian Schmidt
44041b03db Make TupleType alias public 2019-03-27 17:53:48 +01:00
Sebastian Schmidt
3da6019dae Add Context trait
* Rename `HashMapConfiguration` to `HashMapContext`
 * Rename `EmptyConfiguration` to `EmptyContext`
 * Implement `Context` for both predefined contexts
 * Update tests and doctests

Relates to #22
2019-03-27 17:45:06 +01:00
Sebastian Schmidt
fd879193b6 Rename Error to EvalexprError and add EvalexprResult
Relates to #27
2019-03-27 16:33:46 +01:00
Sebastian Schmidt
8a49bf9c11 Get rid of some unwraps
Relates to #14
2019-03-27 16:16:40 +01:00
Sebastian Schmidt
49da58976e Improve serde readme
Relates to #18
2019-03-23 15:39:19 +02:00
Sebastian Schmidt
b302ad112d Format code 2019-03-23 15:34:24 +02:00
Sebastian Schmidt
cba49f7bba Rename Error::Custom to Error::CustomMessage 2019-03-23 15:30:34 +02:00
Sebastian Schmidt
16a79cd567 Remove serde:🇩🇪:Error implementation for error::Error
Serde forces us to be generic over which error our visitor returns, so we cannot return our error type.
So the implementation of serde's error trait is useless to us at this state.

Relates to #18
2019-03-23 15:27:18 +02:00
Sebastian Schmidt
a7ca4c717d Implement, test and document serde Deserialize for expressions
Relates to #18
2019-03-23 15:20:43 +02:00
Sebastian Schmidt
3d440524a5 Fix checking for serde feature flag in code
Relates to #18
2019-03-23 14:29:53 +02:00
Sebastian Schmidt
a4d1a34a0c Implement Display and std::error::Error for Error
Relates to #19
2019-03-23 14:27:44 +02:00
Sebastian Schmidt
16bde54aa5 Implement display for Token and PartialToken
Relates to #19
2019-03-23 14:22:50 +02:00
Sebastian Schmidt
5e491f6771 Add serde feature
Relates to #18
2019-03-23 12:46:52 +02:00
Sebastian Schmidt
3a816fa7e7 Add highlighting to readme 2019-03-21 09:40:50 +02:00
Sebastian Schmidt
1375134e9f Document operations on values
Relates to #16
2019-03-20 17:30:37 +02:00
Sebastian Schmidt
d3deef1f53 Provide more methods for value conversions
+ Provide is_[type] for each value type
 + Provide as_[type] for each value type

Related to #16
2019-03-20 17:30:14 +02:00
Sebastian Schmidt
d4359d71bf Document the shortcut functions for direct evaluation into types
Related to #15
2019-03-20 17:06:47 +02:00
Sebastian Schmidt
c980e49014 Add shortcut functions to evaluate Node into value types
+ Add functions `Node::eval_[type]` and `Node::eval_[type]_with_configuration` to evaluate a node directly into a value type

Partially implements #15
2019-03-20 16:57:21 +02:00
Sebastian Schmidt
e337520805 Introduce TupleType type alias for representing tuples 2019-03-20 16:40:57 +02:00
Sebastian Schmidt
98ca788910 Reword documentation of shortcut methods to be more direct
Changed `expecting a type` to `into a type` to be more clear that the function actually returns a result of the respecting type.

Related to #15
2019-03-20 16:34:23 +02:00
Sebastian Schmidt
2dac0576a7 Add shortcut functions for evaluating directly into a value type
+ Added shortcut functions `eval_[type]` and `eval_[type]_with_configuration` for each value type
 + Added integration tests for the above

 Partially implements #15
2019-03-20 16:29:50 +02:00
Sebastian Schmidt
5549f1bba5 Make internal value type aliases for float and int public 2019-03-20 16:18:52 +02:00
Sebastian Schmidt
36a65c470b Refactor lib.rs
* Move tests into integration test folder
 * Move crate methods into interface module
2019-03-20 15:48:05 +02:00
Sebastian Schmidt
4177ae7e77 Prepare 1.0.0 release 2019-03-20 15:04:59 +02:00
Sebastian Schmidt
6f17e481aa Ensure no-panic for operators
Partially implements #11
2019-03-20 12:52:11 +02:00
Sebastian Schmidt
58e8603194 Rename Node::eval to Node::eval_with_configuration for consistency.
* Rename `Node::eval` to `Node::eval_with_configuration`
 + Add `Node::eval` that calls `Node::eval_with_configuration` with an `EmptyConfiguration`
 + Improve documentation of `Node` and the changed methods

Implements #5
2019-03-20 11:58:08 +02:00
Sebastian Schmidt
e387d3370b Fix a typo 2019-03-20 11:50:09 +02:00