This PR makes two changes:
1. parser will give IDs to nodes' expressions (unless already set);
2. `ASTOf.equals` will not compare IDs
Both were already agreed to and implemented as part of `wip/mwu/graph-syntax` branch (though 1. in quite different shape). However, it was abandoned after Rust was selected as the technology for IDE "backend". Now, as we are reimplementing double representation in Rust we need parts of the technology back in the parser.
Prerequisite for https://github.com/luna/ide/issues/186.
Implements https://github.com/luna/ide/issues/228.
* removed IDE code
* updated readme, removed ide dir
* typo
* Update README.md
Co-Authored-By: Ara Adkins <iamrecursion@users.noreply.github.com>
* flatten common/scala to scala
Co-authored-by: Ara Adkins <iamrecursion@users.noreply.github.com>
This PR adds `json-rpc` crate — a library facilitating writing clients using JSON-RPC 2.0 protocol.
This library is meant to be used in implementation of File Manager and, in future, of Language Server clients.
The library is agnostic about `Transport` — but the interface has been designed in compliance with web-sys websockets, as this will be primary platform.
The RPC clients implemented on top of this library are expected to provide Future-based asynchronous API.
Client is designed to work in a single-thread environment,
Implements #426.
Provides implementation of `HasSpan` and (newly introduced) `HasRepr` for all relevant Ast types.
Implements #379.
Wherever feasible, I tried to reduce boilerplate with macros. Certainly more can be done in that regard but that'd require spending more time on this task than we allocated.
This adds support for using `derive(Iterator)` to iterate over such structures like
```rust
struct Foo<T> {
a:(T,U,T),
b:Option<T>
}
```
i.e. where fields are dependent over last type argument, however they do not store it directly.
Dependent types like `Option<T>` are required to provide a compatible `iter` method.
Implements #407.
This PR extends `derive(Iterator)` proc macro to support enumeration type when they have variants with a single unnamed field, that implements `IntoIterator`.
Thanks to that, it is now finally possible to derive iterator for the `Shape` type and similar enum types used in AST.
Implements #385
This pull request adjusts AST data structures in Scala and Rust to be compatible, while also fixing a number of JSON format mismatches find along the way. This implements #336.
This commit adds support for suspended blocks in the interpreter and also fixes
a major performance issue with nested thunks that was causing quadratic
evaluation time.
This PR updates JSON serialization in Scala in Rust, so they are compatible, implementing #297. The parser wrapper now uses the real AST in API. Still most of non-trivial use-cases will fail. Once #336 is done, it should finally work.
* save a questionable bit of code
* Fix indentation manager by introducing stack of indents
* more fixes
* ui wip
* HTML Rendering change - first module name, then documentation, last
module functions
* Apply changes requested by @wdanilo
AST lives in `ast` package, that relies significantly on `ast-macros` to generate boilerplate.
Additional `macro-utils` library was split out from `shapely-macros` and `ast-macros`.
The implementation was contributed by @wdanilo , I basically just did some refactoring, documenting and testing.
### Important Notes
* AST is known to be incomplete structurally, finishing it is #336
* AST is missing a number of necessary functions, some of them explicitly marked as FIXME in the code, finishing them is #338
* while I have written some tests, they are not yet part of CI — I want to this smart way (i.e. allowing tests that rely on parser), it is tracked as #340
* AST JSON serialization is incompatible with Scala, solving this is #297
* there is some non-deterministic issue with CI on Windows — I need to look into this closer but it seems to not be related to any Rust parts