61 Commits

Author SHA1 Message Date
Nickolay Bukreyev
0f095d6b7c Overload toOption for Result
Necessary for the `=?` operator to work.
2023-11-14 10:52:45 +01:00
Nickolay Bukreyev
cdf639c4ea Support binding closure iterators (except on Nim == 2.0)
See nim-lang/Nim#22932.
2023-11-14 10:52:45 +01:00
Nickolay Bukreyev
fe47a19825 Create identifiers with genSym 2023-11-14 10:52:45 +01:00
Nickolay Bukreyev
440debc7c3 Accept only optional and reference types as RHS of =?
The fact that `option(x)` works for non-reference types (being an alias
for `some`) is an stdlib's design mistake that bites us here.
2023-11-14 10:52:45 +01:00
Mark Spanbroek
52e11f2011 Fix compilation issue with Nim 1.6.16
Workaround for https://github.com/nim-lang/Nim/issues/22897
2023-11-08 10:09:10 +01:00
Mark Spanbroek
5c8d422ac8 fix error binding in without statement on multiple threads 2023-08-30 11:02:37 +02:00
Mark Spanbroek
e56cf86c4a Indexing of strings and sequences should not catch Defect
Catching a Defect does not always work, depending on how
it's compiled.
2023-08-03 15:17:40 +02:00
Tomasz Bekas
416b6dd566 Support seq indexing 2023-08-03 12:56:12 +02:00
Mark Spanbroek
9af4ce1ca1 Better compilation error when calling without with wrong parameter 2023-08-03 09:41:43 +02:00
Mark Spanbroek
0d7ce8efde Provide conversion to string $ for Results 2023-06-26 10:04:02 +02:00
Mark Spanbroek
8daae27089 Do not edit AST nodes, make a copy first
Fixes error "typechecked nodes may not be modified"
2023-06-26 09:59:14 +02:00
Mark Spanbroek
b18444a6d0 Support renamed 'results' library 2023-06-05 17:26:46 +02:00
Eric Mastro
096ca864b0
tuple binding and unpacking support (#29)
* tuple binding and unpacking support

* support tuple binding in nim < 1.6

* Use ? instead of Option[] in tests

* Test binding of optional tuple, not just tuple

* Add tests for tuple unpacking of Result

* Remove unused import

* Rearrange tuple binding code

Introduce separate proc for creation of unpacking
statement.

Use `quote do` to make code as similar as possible
to the `bindLet` and `bindVar` templates.

* Add tests for failed tuple bindings

---------

Co-authored-by: Mark Spanbroek <mark@spanbroek.net>
2023-02-14 09:56:32 +11:00
Mark Spanbroek
f78bdd9d58 Fix redefinition of 'T`gensymXX' error
In rare instances, the Nim compiler will generate the same
symbol more than once. Adding a block works around this issue.

Reproducing this behavior in a unit test has proved elusive.
2022-10-20 05:10:44 -05:00
Mark Spanbroek
4d631b1ba9 Fix: ensure that options and results are only evaluated once 2022-09-28 11:36:28 +02:00
Mark Spanbroek
9e3a822877 Fix: disregard early symbol lookup for error variable 2022-08-10 13:35:47 +02:00
Mark Spanbroek
cfe17ca899 Fix error when using an existing name as error variable 2022-08-10 13:35:47 +02:00
Mark Spanbroek
90ea780ba9 Fix: nested without calls in generic code 2022-08-10 13:29:09 +02:00
Mark Spanbroek
4abeef5c36 Fix: without statement with error works in nested calls 2022-08-10 13:29:09 +02:00
Mark Spanbroek
22f2c9761a Disable warning about DotLikeOps
Give a clear compiler error when questionable
is used with the -d:nimPreviewDotLikeOps flag.

Reason: the option is likely to be deprecated
or removed. More info:
https://github.com/nim-lang/Nim/pull/19919
2022-08-10 13:28:52 +02:00
Mark Spanbroek
13c7ff7671 Retrieve optional error from Result 2022-08-04 13:52:07 +02:00
Tanguy
b0666ba4f1
Fixes for styleCheck:usages (#16)
* Fixes for styleCheck:usages
* Bump nim 1.2 in CI
2022-08-03 15:21:00 +02:00
Mark Spanbroek
0895a9c065 Fix: without statement with error works in generic code 2022-07-04 09:53:02 +02:00
Nickolay Bukreyev
361948499b Fix deprecation warning when importing errorban inside the library
`errorban` module [has been deprecated][deprecation] since v0.5.0.
The library continued to use it internally, but because of that, it
was triggering its own deprecation warning. This commit splits
`errorban.nim` into two pieces: the warning and actual code.

[deprecation]: https://github.com/status-im/questionable/commit/e66cd2439b
2022-04-04 09:52:01 +02:00
Mark Spanbroek
a748d22350 Fix: ensure that overridden =? operator does not remain in scope 2022-01-12 17:54:24 +01:00
Mark Spanbroek
ef29000f94 Without statement for Results provides access to errors 2022-01-12 17:54:24 +01:00
Mark Spanbroek
cfe4c6fc95 Ensure that =? works with types that do not have a default value 2021-12-04 17:26:08 +01:00
Mark Spanbroek
56a4bca641 Fix typo 2021-08-30 18:13:43 +02:00
Mark Spanbroek
4967084d22 Better errors when using a proc without a return type in a .? chain 2021-08-30 15:58:29 +02:00
Mark Spanbroek
8feb684574 Fix "unused variable" warnings 2021-07-07 09:19:44 +02:00
Mark Spanbroek
4a1783c472 Add documentation comments 2021-06-04 17:34:48 +02:00
Mark Spanbroek
a2ded4f01a Simplify 2021-06-04 16:38:44 +02:00
Mark Spanbroek
93f5c919fb Ensure that optional binding works with closures 2021-05-31 16:24:21 +02:00
Mark Spanbroek
d18580bb68 Better error message when adding a void result to a .? chain 2021-05-06 17:28:58 +02:00
Mark Spanbroek
2700038316 Fix use of =? in generic code 2021-05-06 17:12:52 +02:00
Mark Spanbroek
8bf4f27f30 Avoid wrapping option in option when using .?[] operator 2021-05-04 16:17:09 +02:00
Mark Spanbroek
e8ab268758 Ensure that .? chains work in generic code 2021-05-04 15:55:05 +02:00
Mark Spanbroek
0569625f6a Replace .get with operator !
Rationale: when looking for code that might crash it's
easier to spot exclamation marks than invocations of get.
2021-04-19 15:52:07 +02:00
Mark Spanbroek
fa56587bcd Avoid wrapping option in option and result in result 2021-04-17 19:50:02 +02:00
Mark Spanbroek
ef5f796463 without statement 2021-04-16 12:27:17 +02:00
Mark Spanbroek
827214f7a9 questionable/results also exports chaining and indexing 2021-04-16 12:10:10 +02:00
Mark Spanbroek
144c70580a Calling success without arguments returns ?!void result 2021-04-15 11:04:26 +02:00
Mark Spanbroek
89850aab50 Makes |?, =? and .option compatible with other types of Result 2021-04-15 10:54:50 +02:00
Mark Spanbroek
fd73ff713f Adds failure overload that uses result to determine type 2021-04-15 09:47:08 +02:00
Mark Spanbroek
86bfcc1a47 Use failure and success instead of ok and err
- Adds `isFailure` and `isSuccess`.
- No longer exports `ok`, `err`, `isErr` and `isOk`.
2021-04-15 09:39:37 +02:00
Mark Spanbroek
e66cd2439b Remove errorban from public api
Reason: pushing pragmas in included files can have
unexpected side-effects.
2021-04-12 16:07:56 +02:00
Mark Spanbroek
3e92c35a85 Rename chaining and indexing operators
Chaining operator is now `.?`
Indexing operator is now `.?[]`

Reason: interoperability with the binding `=?` operator.
Chaining and indexing now have lower operator precedence
than binding, ensuring that expressions such as `if a =? b.?c`
work as expected.
2021-04-12 16:07:56 +02:00
Mark Spanbroek
40f5b4f1b8 Allow indexing of tables with ?[] 2021-03-18 17:58:48 +01:00
Mark Spanbroek
91f97c73ef Evaluate =? expressions only once 2021-03-18 16:59:55 +01:00
Mark Spanbroek
aef59c42eb Allow optional binding to vars 2021-03-18 09:50:06 +01:00