diff --git a/docs/contributing.md b/docs/contributing.md index 33eeb8a267..c9cfcf5fc8 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,16 +1,19 @@ -# Contributing Guide +# Development & Contributing Guide Thank you for your interest in contributing to the Enso IDE! We believe that only through community involvement can Enso be the best it can be! There are a whole host of ways to contribute, and every single one is appreciated. +
+ ## Reporting Issues -While it's never great to find a bug, they are a reality of software and software development! We -can't fix or improve on the things that we don't know about, so report as many bugs as you can! If -you're not sure whether something is a bug, file it anyway! **If you are concerned that your bug publicly presents a security risk to the users of Enso, please contact [security@enso.org](mailto:security@enso.org).** +While it's never great to find a bug, they are a reality of software and software development! We +can't fix or improve on the things that we don't know about, so report as many bugs as you can! If +you're not sure whether something is a bug, file it anyway! + Even though GitHub search can be a bit hard to use sometimes, we'd appreciate if you could [search](https://github.com/luna/enso/search?q=&type=Issues&utf8=%E2%9C%93) for your issue before filing a bug as it's possible that someone else has already reported the issue. We know the search @@ -25,6 +28,8 @@ The reproduction steps are particularly important, as the more easily we can rep faster we can fix the bug! It's also helpful to have the version of the IDE, as that will let us know if the bug is Operating System or Architecture specific. +
+ ## Development Environment The project builds on MacOS, Windows, and Linux. Cross-platform targets work well on all of these platforms, however, MacOS package will miss the right application icon if built on Linux or Windows @@ -39,6 +44,7 @@ need the following setup: rustup toolchain install nightly-2019-11-04 # Install the nightly channel. rustup override set nightly-2019-11-04 # Set it as the default toolchain for this folder. rustup component add clippy # Install the linter. + cargo install wasm-pack --version 0.8.1 # Install the wasm-pack toolkit. cargo install cargo-watch # To enable ./run watch utility ``` @@ -52,8 +58,6 @@ need the following setup: `nvm install --lts && nvm use --lts`.
-
-
## Working with sources Please note that you should not use a code auto-formatter in this codebase. Please read the @@ -63,7 +67,6 @@ guide. Be sure to carefully read the and the [Rust style guide 2](https://github.com/luna/enso/blob/master/doc/rust-style-guide.md) before contributing to the codebase. -
### Development As this is a multi-part project with many complex dependencies, it is equipped with a build script @@ -91,8 +94,6 @@ however, this doc will use the former form in order to stay cross-platform compa and installers use `node ./run dist` instead. The final packages will be located at `app/dist/native`. -
- ### Testing, Linting, and Validation After changing the code it's always a good idea to lint and test the code. We have prepared several scripts which maximally automate the process: diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index 43628c8516..17e133054b 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -16,7 +16,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "aho-corasick" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -34,7 +34,7 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -53,11 +53,11 @@ dependencies = [ "data 0.1.0", "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", "enso-prelude 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "utils 0.1.0", @@ -71,9 +71,42 @@ dependencies = [ "Inflector 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)", "enso-prelude 0.1.0", "macro-utils 0.1.0", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "async-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "async-task 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "async-task" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -81,8 +114,8 @@ name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -98,22 +131,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "backtrace" -version = "0.3.44" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -182,7 +215,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bumpalo" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -216,7 +249,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bzip2-sys 0.1.8+1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -225,15 +258,7 @@ version = "0.1.8+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "c2-chacha" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -248,12 +273,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "chrono" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -264,7 +289,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -285,15 +310,15 @@ dependencies = [ [[package]] name = "console" -version = "0.9.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -322,12 +347,12 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -335,16 +360,16 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.6.4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "core-foundation-sys" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -355,6 +380,15 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-channel" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-deque" version = "0.7.3" @@ -375,7 +409,7 @@ dependencies = [ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -403,12 +437,12 @@ name = "data" version = "0.1.0" dependencies = [ "enso-prelude 0.1.0", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "derivative" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", @@ -416,6 +450,16 @@ dependencies = [ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "derivative" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "derive_more" version = "0.15.0" @@ -431,12 +475,12 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.3" +version = "0.99.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -452,7 +496,7 @@ name = "download-lp" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "indicatif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", @@ -502,19 +546,19 @@ name = "enso-prelude" version = "0.1.0" dependencies = [ "boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "derive_more 0.99.3 (registry+https://github.com/rust-lang/crates.io-index)", + "derivative 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", "enclose 1.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "ifmt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "nalgebra 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", "weak-table 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "web-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", @@ -534,22 +578,22 @@ dependencies = [ "ensogl-core-embedded-fonts 0.1.0", "ensogl-core-msdf-sys 0.1.0", "ensogl-system-web 0.1.0", - "enum_dispatch 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "enum_dispatch 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "eval-tt 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "logger 0.1.0", "nalgebra 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "num_enum 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num_enum 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "optics 0.1.0", "palette 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-test 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -592,27 +636,29 @@ dependencies = [ name = "ensogl-system-web" version = "0.1.0" dependencies = [ + "async-std 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "data 0.1.0", "enso-prelude 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "logger 0.1.0", "nalgebra 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-futures 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-test 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "web-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "enum_dispatch" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -627,26 +673,26 @@ dependencies = [ name = "eval-tt" version = "0.1.0" dependencies = [ - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.44 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure_derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -659,13 +705,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "file-manager-client" version = "0.1.0" dependencies = [ - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "enso-prelude 0.1.0", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "json-rpc 0.1.0", - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "utils 0.1.0", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -675,15 +721,15 @@ dependencies = [ name = "file-manager-server" version = "0.1.0" dependencies = [ - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "enso-prelude 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "file-manager-client 0.1.0", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "json-rpc 0.1.0", - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "tungstenite 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "utils 0.1.0", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -691,12 +737,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -706,7 +752,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -808,10 +854,10 @@ name = "futures-macro" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -824,6 +870,11 @@ name = "futures-task" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "futures-timer" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "futures-util" version = "0.3.4" @@ -837,8 +888,8 @@ dependencies = [ "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -864,7 +915,7 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -921,7 +972,7 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -929,12 +980,12 @@ dependencies = [ "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -947,10 +998,10 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -965,7 +1016,7 @@ dependencies = [ [[package]] name = "http" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -990,7 +1041,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1047,15 +1098,15 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1063,7 +1114,7 @@ dependencies = [ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1076,7 +1127,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1086,9 +1137,9 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1104,7 +1155,7 @@ dependencies = [ "ensogl 0.1.0", "ensogl-core-msdf-sys 0.1.0", "ensogl-system-web 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "file-manager-client 0.1.0", "flo_stream 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1114,8 +1165,8 @@ dependencies = [ "nalgebra 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "parser 0.1.0", "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "utils 0.1.0", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1151,7 +1202,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ifmt-impl 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1160,7 +1211,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1193,7 +1244,7 @@ name = "indicatif" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "console 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "number_prefix 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1213,7 +1264,7 @@ name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1242,10 +1293,10 @@ name = "json-rpc" version = "0.1.0" dependencies = [ "enso-prelude 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "shapely 0.1.0", "shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "utils 0.1.0", @@ -1266,10 +1317,18 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "kv-log-macro" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "language-tags" version = "0.2.2" @@ -1282,7 +1341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.67" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1328,9 +1387,9 @@ dependencies = [ name = "macro-utils" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1358,10 +1417,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memoffset" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1404,7 +1463,7 @@ dependencies = [ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1412,6 +1471,16 @@ dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "miow" version = "0.2.1" @@ -1433,29 +1502,29 @@ dependencies = [ "generic-array 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "matrixmultiply 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand_distr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "native-tls" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1465,7 +1534,7 @@ version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1487,7 +1556,7 @@ dependencies = [ "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1508,7 +1577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1532,7 +1601,7 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1555,28 +1624,28 @@ name = "num_cpus" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num_enum" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num_enum_derive 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "derivative 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_enum_derive 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num_enum_derive" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-crate 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1599,15 +1668,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "openssl" -version = "0.10.28" +version = "0.10.29" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1617,12 +1686,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "openssl-sys" -version = "0.9.54" +version = "0.9.55" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1651,9 +1720,9 @@ name = "palette_derive" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1682,7 +1751,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1696,9 +1765,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1712,15 +1781,15 @@ dependencies = [ "data 0.1.0", "enso-prelude 0.1.0", "ensogl-build-utilities 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "utils 0.1.0", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1730,22 +1799,22 @@ dependencies = [ [[package]] name = "paste" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "paste-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "paste-impl 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "paste-impl" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1794,7 +1863,7 @@ name = "phf_shared" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1810,9 +1879,9 @@ name = "pin-project-internal" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1850,17 +1919,12 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.5.11" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "proc-macro-nested" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1873,7 +1937,7 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1901,10 +1965,10 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1913,7 +1977,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1931,8 +1995,8 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1949,10 +2013,10 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2014,7 +2078,7 @@ name = "rand_jitter" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2026,7 +2090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2088,7 +2152,7 @@ name = "regex" version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2117,7 +2181,7 @@ dependencies = [ "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2125,9 +2189,9 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2150,22 +2214,22 @@ dependencies = [ "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2199,7 +2263,7 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2209,7 +2273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "schannel" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2228,21 +2292,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "security-framework" -version = "0.3.4" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "security-framework-sys" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2260,30 +2326,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.104" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "1.0.104" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.48" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2293,7 +2359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2304,7 +2370,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2328,9 +2394,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "shapely" version = "0.1.0" dependencies = [ - "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "derivative 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "enso-prelude 0.1.0", - "paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "shapely-macros 0.1.0", "shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2343,9 +2409,9 @@ dependencies = [ "boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "macro-utils 0.1.0", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2355,9 +2421,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2367,14 +2433,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "siphasher" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2401,7 +2467,7 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2429,11 +2495,11 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2442,9 +2508,9 @@ name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2454,7 +2520,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2463,10 +2529,10 @@ dependencies = [ [[package]] name = "termios" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2482,7 +2548,7 @@ name = "time" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2507,11 +2573,12 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2574,9 +2641,9 @@ name = "tokio-macros" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2652,7 +2719,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2661,13 +2728,13 @@ name = "tokio-tls" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-util" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2675,7 +2742,7 @@ dependencies = [ "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2683,7 +2750,7 @@ name = "toml" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2717,11 +2784,11 @@ dependencies = [ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "input_buffer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2767,7 +2834,7 @@ name = "unicode-normalization" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2820,7 +2887,7 @@ name = "utils" version = "0.1.0" dependencies = [ "enso-prelude 0.1.0", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2839,7 +2906,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2888,8 +2955,8 @@ version = "0.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-macro 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2898,12 +2965,12 @@ name = "wasm-bindgen-backend" version = "0.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-shared 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2923,7 +2990,7 @@ name = "wasm-bindgen-macro" version = "0.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-macro-support 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2932,9 +2999,9 @@ name = "wasm-bindgen-macro-support" version = "0.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-shared 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2962,8 +3029,8 @@ name = "wasm-bindgen-test-macro" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2971,12 +3038,12 @@ name = "wasm-bindgen-webidl" version = "0.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "anyhow 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2991,7 +3058,7 @@ name = "web-sys" version = "0.3.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "anyhow 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3017,9 +3084,9 @@ dependencies = [ name = "web-test-proc-macro" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-test 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3034,7 +3101,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3107,7 +3174,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", "podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3115,15 +3182,17 @@ dependencies = [ [metadata] "checksum Inflector 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" "checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" -"checksum aho-corasick 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "d5e63fd144e18ba274ae7095c0197a870a7b9468abc801dd62f190d80817d2ec" +"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" "checksum alga 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" -"checksum anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "7825f6833612eb2414095684fcf6c635becf3ce97fe48cf6421321e93bfbd53c" +"checksum anyhow 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "d9a60d744a80c30fcb657dfe2c1b22bcb3e814c1a1e3674f32bf5820b570fbff" "checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +"checksum async-std 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "538ecb01eb64eecd772087e5b6f7540cbc917f047727339a472dafed2185b267" +"checksum async-task 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0ac2c016b079e771204030951c366db398864f5026f84a44dafb0ff20f02085d" "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" "checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum backtrace 0.3.44 (registry+https://github.com/rust-lang/crates.io-index)" = "e4036b9bf40f3cf16aba72a3d65e8a520fc4bafcdc7079aea8f848c58c5b5536" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" +"checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" +"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" @@ -3133,33 +3202,34 @@ dependencies = [ "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" "checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" "checksum boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" -"checksum bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" +"checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" "checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" "checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" "checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" "checksum bzip2-sys 0.1.8+1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "05305b41c5034ff0e93937ac64133d109b5a2660114ec45e9760bc6816d83038" -"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" "checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" +"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" "checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum console 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "45e0f3986890b3acbc782009e2629dfe2baa430ac091519ce3be26164a2ae6c0" +"checksum console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c" "checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" "checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" "checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" -"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" +"checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" "checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" "checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" "checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" "checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -"checksum derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a" +"checksum derivative 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3c6d883546668a3e2011b6a716a7330b82eabb0151b138217f632c8243e17135" +"checksum derivative 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eae4d76b7cefedd1b4f8cc24378b2fbd1ac1b66e3bbebe8e2192d3be81cb355" "checksum derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a141330240c921ec6d074a3e188a7c7ef95668bb95e7d44fa0e5778ec2a7afe" -"checksum derive_more 0.99.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a806e96c59a76a5ba6e18735b6cf833344671e61e7863f2edb5c518ea2cac95c" +"checksum derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2323f3f47db9a0e77ce7a300605d8d2098597fc451ed1a97bb1f6411bb550a7" "checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" "checksum download-lp 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c990fef441b9f1ce8e47b3854e4fbae08ee2d2022faffd101be0dfd3d81456a" "checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" @@ -3167,12 +3237,12 @@ dependencies = [ "checksum enclose 1.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1056f553da426e9c025a662efa48b52e62e0a3a7648aa2d15aeaaf7f0d329357" "checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" "checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" -"checksum enum_dispatch 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97c676e703d999177c8de93e98dc09d6f4f3f0bb087d4384c3deca69bbe6a99d" +"checksum enum_dispatch 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "733967190e01b0dcb64f2f42687a78af0e418e064489e993e16445643d088560" "checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" +"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" +"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" +"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" "checksum flo_stream 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b02e0d3667b27514149c1ac9b372d700f3e6df4bbaf6b7c5df12915de2996049" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" @@ -3190,22 +3260,23 @@ dependencies = [ "checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" "checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" "checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" +"checksum futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" "checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum generic-array 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" "checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47" +"checksum h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" +"checksum hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" "checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b" +"checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" "checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" "checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" "checksum hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" "checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5" +"checksum hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ed6081100e960d9d74734659ffc9cc91daf1c0fc7aceb8eaa94ee1a3f5046f2e" "checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" "checksum hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" @@ -3222,9 +3293,10 @@ dependencies = [ "checksum js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7889c7c36282151f6bf465be4700359318aef36baa951462382eae49e9577cf9" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum keyboard-types 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a989afac88279b0482f402d234b5fbd405bf1ad051308595b58de4e6de22346b" +"checksum kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" +"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" "checksum libm 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" "checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" @@ -3233,15 +3305,16 @@ dependencies = [ "checksum matrixmultiply 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f" "checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" "checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" +"checksum memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" "checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" "checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" "checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum nalgebra 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0abb021006c01b126a936a8dd1351e0720d83995f4fc942d0d426c654f990745" -"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" +"checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" "checksum num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" @@ -3249,25 +3322,25 @@ dependencies = [ "checksum num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" "checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" "checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" -"checksum num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" +"checksum num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" "checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" "checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" -"checksum num_enum 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "be601e38e20a6f3d01049d85801cb9b7a34a8da7a0da70df507bbde7735058c8" -"checksum num_enum_derive 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b59f30f6a043f2606adbd0addbf1eef6f2e28e8c4968918b63b7ff97ac0db2a7" +"checksum num_enum 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" +"checksum num_enum_derive 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" "checksum number_prefix 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbf9993e59c894e3c08aa1c2712914e9e6bf1fcbfc6bef283e2183df345a4fee" "checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" "checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -"checksum openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)" = "973293749822d7dd6370d6da1e523b0d1db19f06c459134c658b2a4261378b52" +"checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)" = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986" +"checksum openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)" = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" "checksum palette 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a05c0334468e62a4dfbda34b29110aa7d70d58c7fdb2c9857b5874dd9827cc59" "checksum palette_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b4b5f600e60dd3a147fb57b4547033d382d1979eb087af310e91cb45a63b1f4" "checksum parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" "checksum parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" -"checksum paste 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "63e1afe738d71b1ebab5f1207c055054015427dbfc7bbe9ee1266894156ec046" -"checksum paste-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc4a7f6f743211c5aab239640a65091535d97d43d92a52bca435a640892bb" +"checksum paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab4fb1930692d1b6a9cfabdde3d06ea0a7d186518e2f4d67660d8970e2fa647a" +"checksum paste-impl 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "a62486e111e571b1e93b710b61e8f493c0013be39629b714cb166bdb06aa5a8a" "checksum path-clean 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" @@ -3283,17 +3356,17 @@ dependencies = [ "checksum podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd" "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" "checksum proc-macro-crate 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" -"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" -"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" +"checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" +"checksum proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" "checksum publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" +"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" @@ -3319,40 +3392,40 @@ dependencies = [ "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" +"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" "checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -"checksum schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "507a9e6e8ffe0a4e0ebb9a10293e62fdf7657c06f1b8bb07a8fcf697d2abf295" +"checksum schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" "checksum scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" "checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df" -"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895" +"checksum security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "572dfa3a0785509e7a44b5b4bebcf94d41ba34e9ed9eb9df722545c3b3c4144a" +"checksum security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ddb15a5fec93b7021b8a9e96009c5d8d51c15673569f7c0f6b7204e5b7b404f" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25" +"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" +"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" +"checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" "checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" "checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" "checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" "checksum shrinkwraprs 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "83695fde96cbe9e08f0e4eb96b1b56fdbd44f2098ee27462dda964c7745fddc7" "checksum shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e63e6744142336dfb606fe2b068afa2e1cca1ee6a5d8377277a92945d81fa331" -"checksum siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d" +"checksum siphasher 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e88f89a550c01e4cd809f3df4f52dc9e939f3273a2017eabd5c6d12fd98bb23" "checksum sized-chunks 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d59044ea371ad781ff976f7b06480b9f0180e834eda94114f2afb4afc12b7718" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" +"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a" "checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" "checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" +"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625" +"checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2" "checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" "checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616" +"checksum tokio 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ee5a0dd887e37d37390c13ff8ac830f992307fe30a1fff0ab8427af67211ba28" "checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" "checksum tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" "checksum tokio-current-thread 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" @@ -3366,7 +3439,7 @@ dependencies = [ "checksum tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" "checksum tokio-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "354b8cd83825b3c20217a9dc174d6a0c67441a2fae5c41bcb1ea6679f6ae0f7c" "checksum tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828" -"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" +"checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" "checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" "checksum tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml index d264822023..3c1e88e24d 100644 --- a/src/rust/Cargo.toml +++ b/src/rust/Cargo.toml @@ -47,4 +47,4 @@ debug = false [profile.test] opt-level = 0 lto = false -debug = false +debug = true diff --git a/src/rust/ensogl/src/display/shape/text/text_field.rs b/src/rust/ensogl/src/display/shape/text/text_field.rs index b642477a0f..57692b214f 100644 --- a/src/rust/ensogl/src/display/shape/text/text_field.rs +++ b/src/rust/ensogl/src/display/shape/text/text_field.rs @@ -26,13 +26,13 @@ use crate::display::shape::text::glyph::font::FontRegistry; use crate::display::shape::text::text_field::render::TextFieldSprites; use crate::display::shape::text::text_field::render::assignment::GlyphLinesAssignmentUpdate; use crate::display::world::World; +use crate::system::web::text_input::KeyboardBinding; use data::text::TextChange; use data::text::TextLocation; use nalgebra::Vector2; use nalgebra::Vector3; use nalgebra::Vector4; -use crate::system::web::text_input::KeyboardBinding; @@ -148,28 +148,28 @@ shared! { TextField self.properties.size } - /// Scroll one page down. - pub fn page_down(&mut self) { - self.scroll(Vector2::new(0.0, -self.size().y)) - } - - /// Scroll one page up. - pub fn page_up(&mut self) { - self.scroll(Vector2::new(0.0, self.size().y)) - } - /// Scroll text by given offset in pixels. pub fn scroll(&mut self, offset:Vector2) { - let position_change = -Vector3::new(offset.x,offset.y,0.0); - self.rendered.display_object.mod_position(|pos| *pos += position_change); - let mut update = self.assignment_update(); - if offset.x != 0.0 { - update.update_after_x_scroll(offset.x); - } - if offset.y != 0.0 { - update.update_line_assignment(); + let scroll_position = self.scroll_position(); + let padding_lines = 2; + let lines = self.content.lines().len() + padding_lines; + let text_height = self.content.line_height * lines as f32; + let view_height = self.size().y; + let height = (text_height - view_height).max(0.0); + let offset_y = offset.y.min(scroll_position.y).max(scroll_position.y - height); + let offset = Vector2::new(offset.x, offset_y); + if offset.x != 0.0 || offset.y != 0.0 { + let position_change = -Vector3::new(offset.x,offset.y,0.0); + self.rendered.display_object.mod_position(|pos| *pos += position_change); + let mut update = self.assignment_update(); + if offset.x != 0.0 { + update.update_after_x_scroll(offset.x); + } + if offset.y != 0.0 { + update.update_line_assignment(); + } + self.rendered.update_glyphs(&mut self.content); } - self.rendered.update_glyphs(&mut self.content); } /// Get current scroll position. @@ -204,21 +204,51 @@ shared! { TextField /// Jump active cursor to point on the screen. pub fn jump_cursor(&mut self, point:Vector2, selecting:bool) { - let point_on_text = self.relative_position(point); - let content = &mut self.content; - let mut navigation = CursorNavigation {selecting, ..CursorNavigation::default(content)}; + let point_on_text = self.relative_position(point); + let text_field_size = self.size(); + let content = &mut self.content; + let mut navigation = CursorNavigation{selecting,content,text_field_size}; self.cursors.jump_cursor(&mut navigation,point_on_text); self.rendered.update_cursor_sprites(&self.cursors, &mut self.content,self.focused); } + /// Processes PageUp and PageDown, scrolling the page accordingly. + fn scroll_page(&mut self, step:Step) { + let page_height = self.size().y; + let scrolling = match step { + Step::PageUp => page_height, + Step::PageDown => -page_height, + _ => 0.0 + }; + + self.scroll(Vector2::new(0.0,scrolling)); + } + + /// Adjust the view to make the last cursor visible. + fn adjust_view(&mut self) { + let last_cursor = self.cursors.last_cursor(); + let scroll_y = self.scroll_position().y; + let view_size = self.size(); + let current_line = last_cursor.current_line(&mut self.content); + let current_line_pos = current_line.y_position(); + let next_line_pos = current_line_pos + current_line.height; + let y_scrolling = (scroll_y - next_line_pos + view_size.y).min(0.0); + let y_scrolling = (scroll_y - current_line_pos).max(y_scrolling); + let scrolling = Vector2::new(0.0,y_scrolling); + self.scroll(scrolling); + } + /// Move all cursors by given step. pub fn navigate_cursors(&mut self, step:Step, selecting:bool) { if !selecting { self.clear_word_occurrences() } - let content = &mut self.content; - let mut navigation = CursorNavigation {content,selecting}; + let text_field_size = self.size(); + let content = &mut self.content; + let mut navigation = CursorNavigation{content,selecting,text_field_size}; self.cursors.navigate_all_cursors(&mut navigation,step); + self.scroll_page(step); + self.adjust_view(); self.rendered.update_cursor_sprites(&self.cursors, &mut self.content,self.focused); } @@ -370,6 +400,7 @@ impl TextField { // TODO[ao] updates should be done only in one place and only once per frame // see https://github.com/luna/ide/issues/178 this.assignment_update().update_after_text_edit(); + this.adjust_view(); this.rendered.update_glyphs(&mut this.content); this.rendered.update_cursor_sprites(&this.cursors, &mut this.content, this.focused); }); @@ -385,11 +416,11 @@ impl TextField { /// For cursors with selection it will just remove the selected text. For the rest, it will /// remove all content covered by `step`. pub fn do_delete_operation(&self, step:Step) { + let text_field_size = self.size(); self.with_borrowed(|this| { let content = &mut this.content; let selecting = true; - let mut navigation = CursorNavigation - {selecting,..CursorNavigation::default(content)}; + let mut navigation = CursorNavigation{selecting,content,text_field_size}; let without_selection = |c:&Cursor| !c.has_selection(); this.cursors.navigate_cursors(&mut navigation,step,without_selection); }); diff --git a/src/rust/ensogl/src/display/shape/text/text_field/content/line.rs b/src/rust/ensogl/src/display/shape/text/text_field/content/line.rs index 9ecc13b3bd..14aa9400c3 100644 --- a/src/rust/ensogl/src/display/shape/text/text_field/content/line.rs +++ b/src/rust/ensogl/src/display/shape/text/text_field/content/line.rs @@ -8,7 +8,6 @@ use nalgebra::Vector2; use std::ops::Range; - // ============ // === Line === // ============ @@ -99,11 +98,16 @@ pub struct LineFullInfo<'a> { } impl<'a> LineFullInfo<'a> { + /// Get the y position of the top of the line. + pub fn y_position(&self) -> f32 { + self.height * self.line_id as f32 + } + /// Get the point where a _baseline_ of current line begins (The _baseline_ is a font specific /// term, for details see [freetype documentation] /// (https://www.freetype.org/freetype2/docs/glyphs/glyphs-3.html#section-1)). pub fn baseline_start(&self) -> Vector2 { - Vector2::new(0.0, (-(self.line_id as f32) - 0.85) * self.height) + Vector2::new(0.0, -self.y_position() - self.height * 0.85) } /// Get x position of character with given index. The position is in _text space_. diff --git a/src/rust/ensogl/src/display/shape/text/text_field/cursor.rs b/src/rust/ensogl/src/display/shape/text/text_field/cursor.rs index 0da1c3ceb1..4ef42d82f5 100644 --- a/src/rust/ensogl/src/display/shape/text/text_field/cursor.rs +++ b/src/rust/ensogl/src/display/shape/text/text_field/cursor.rs @@ -133,11 +133,14 @@ impl Cursor { /// Home, End, Ctrl+Home, etc.) #[derive(Copy,Clone,Debug,Eq,Hash,PartialEq)] #[allow(missing_docs)] -pub enum Step {Left,LeftWord,Right,RightWord,Up,Down,LineBegin,LineEnd,DocBegin,DocEnd} +pub enum Step +{Left,LeftWord,Right,RightWord,PageUp,Up,PageDown,Down,LineBegin,LineEnd,DocBegin,DocEnd} /// A struct for cursor navigation process. #[derive(Debug)] pub struct CursorNavigation<'a> { + /// A snapshot of TextField's size. + pub text_field_size: Vector2, /// A reference to text content. This is required to obtain the x positions of chars for proper /// moving cursors up and down. pub content: &'a mut TextFieldContent, @@ -146,12 +149,6 @@ pub struct CursorNavigation<'a> { } impl<'a> CursorNavigation<'a> { - /// Creates a new CursorNavigation with defaults. - pub fn default(content:&'a mut TextFieldContent) -> Self { - let selecting = default(); - Self {content,selecting} - } - /// Jump cursor directly to given position. pub fn move_cursor_to_position(&self, cursor:&mut Cursor, to:TextLocation) { cursor.position = to; @@ -220,16 +217,18 @@ impl<'a> CursorNavigation<'a> { /// Get cursor position one line above the given position, such the new x coordinate of /// displayed cursor on the screen will be nearest the current value. - pub fn line_up_position(&mut self, position:&TextLocation) -> Option { - let prev_line = position.line.checked_sub(1); - prev_line.map(|line| self.near_same_x_in_another_line(position,line)) + pub fn line_up_position(&mut self, position:&TextLocation, lines:usize) -> TextLocation { + let prev_line = position.line.checked_sub(lines); + let prev_line = prev_line.map(|line| self.near_same_x_in_another_line(position,line)); + prev_line.unwrap_or_else(TextLocation::at_document_begin) } /// Get cursor position one line behind the given position, such the new x coordinate of /// displayed cursor on the screen will be nearest the current value. - pub fn line_down_position(&mut self, position:&TextLocation) -> Option { - let next_line = Some(position.line + 1).filter(|l| *l < self.content.lines().len()); - next_line.map(|line| self.near_same_x_in_another_line(position,line)) + pub fn line_down_position(&mut self, position:&TextLocation, lines:usize) -> TextLocation { + let next_line = Some(position.line + lines).filter(|l| *l < self.content.lines().len()); + let next_line = next_line.map(|line| self.near_same_x_in_another_line(position,line)); + next_line.unwrap_or_else(|| self.content_end_position()) } /// Returns the next column if it exists. If it doesn't exist it attempts to return the @@ -277,6 +276,10 @@ impl<'a> CursorNavigation<'a> { Self::next_valid_text_location(line, previous_line, previous_column, line_end) } + fn get_lines_from_height(&self) -> usize { + (self.text_field_size.y / self.content.line_height) as usize + } + /// New position of cursor at `position` after applying `step`. fn new_position(&mut self, position: TextLocation, step:Step) -> TextLocation { match step { @@ -284,8 +287,10 @@ impl<'a> CursorNavigation<'a> { Step::RightWord => self.next_word_position(&position).unwrap_or(position), Step::Left => self.prev_char_position(&position).unwrap_or(position), Step::Right => self.next_char_position(&position).unwrap_or(position), - Step::Up => self.line_up_position(&position).unwrap_or(position), - Step::Down => self.line_down_position(&position).unwrap_or(position), + Step::PageUp => self.line_up_position(&position,self.get_lines_from_height()), + Step::PageDown => self.line_down_position(&position,self.get_lines_from_height()), + Step::Up => self.line_up_position(&position,1), + Step::Down => self.line_down_position(&position,1), Step::LineBegin => TextLocation::at_line_begin(position.line), Step::LineEnd => self.line_end_position(position.line), Step::DocBegin => TextLocation::at_document_begin(), @@ -587,13 +592,19 @@ mod test { expected_positions.insert(LineEnd, vec![(0,10),(1,10),(2,9)]); expected_positions.insert(DocBegin, vec![(0,0)]); expected_positions.insert(DocEnd, vec![(2,9)]); - - let mut fonts = FontRegistry::new(); - let properties = TextFieldProperties::default(&mut fonts); - let mut content = TextFieldContent::new(text,&properties); - let mut navigation = CursorNavigation::default(&mut content); - - for step in &[/*Left,Right,Up,*/Down,/*LineBegin,LineEnd,DocBegin,DocEnd*/] { + expected_positions.insert(PageUp, vec![(0,0),(0,9)]); + expected_positions.insert(PageDown, vec![(2,0),(2,9)]); + + let mut fonts = FontRegistry::new(); + let mut properties = TextFieldProperties::default(&mut fonts); + let two_lines_high = properties.text_size * 2.0; + properties.size = Vector2::new(10.0, two_lines_high); + let content = &mut TextFieldContent::new(text,&properties); + let text_field_size = properties.size; + let selecting = false; + let mut navigation = CursorNavigation{selecting,content,text_field_size}; + + for step in &[Left,Right,Up,Down,LineBegin,LineEnd,DocBegin,DocEnd,PageUp,PageDown] { let mut cursors = Cursors::mock(initial_cursors.clone()); cursors.navigate_all_cursors(&mut navigation,*step); let expected = expected_positions.get(step).unwrap(); @@ -613,16 +624,39 @@ mod test { let initial_cursors = vec![initial_cursor]; let new_position = TextLocation {line:1,column:10}; - let mut fonts = FontRegistry::new(); - let properties = TextFieldProperties::default(&mut fonts); - let mut content = TextFieldContent::new(text,&properties); - let mut navigation = CursorNavigation::default(&mut content); + let mut fonts = FontRegistry::new(); + let properties = TextFieldProperties::default(&mut fonts); + let content = &mut TextFieldContent::new(text,&properties); + let selecting = false; + let text_field_size = properties.size; + let mut navigation = CursorNavigation{content,text_field_size,selecting}; let mut cursors = Cursors::mock(initial_cursors.clone()); cursors.navigate_all_cursors(&mut navigation,LineEnd); assert_eq!(new_position, cursors.first_cursor().position); assert_eq!(new_position, cursors.first_cursor().selected_to); } + #[wasm_bindgen_test(async)] + async fn page_scrolling() { + ensogl_core_msdf_sys::initialized().await; + let text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19"; + let initial_cursor = Cursor::new(TextLocation::at_document_begin()); + let initial_cursors = vec![initial_cursor]; + let expected_position = TextLocation {line:6,column:0}; + + let mut fonts = FontRegistry::new(); + let mut properties = TextFieldProperties::default(&mut fonts); + properties.size = Vector2::new(100.0,100.0); + let content = &mut TextFieldContent::new(text,&properties); + let selecting = false; + let text_field_size = properties.size; + let mut navigation = CursorNavigation{selecting,content,text_field_size}; + let mut cursors = Cursors::mock(initial_cursors.clone()); + cursors.navigate_all_cursors(&mut navigation,PageDown); + assert_eq!(expected_position, cursors.first_cursor().position); + assert_eq!(expected_position, cursors.first_cursor().selected_to); + } + #[wasm_bindgen_test(async)] async fn moving_with_select() { ensogl_core_msdf_sys::initialized().await; @@ -631,11 +665,12 @@ mod test { let initial_cursors = vec![Cursor::new(initial_loc)]; let new_loc = TextLocation {line:0,column:9}; - let mut fonts = FontRegistry::new(); - let properties = TextFieldProperties::default(&mut fonts); - let mut content = TextFieldContent::new(text,&properties); - let mut navigation = CursorNavigation - {selecting:true, ..CursorNavigation::default(&mut content)}; + let mut fonts = FontRegistry::new(); + let properties = TextFieldProperties::default(&mut fonts); + let content = &mut TextFieldContent::new(text,&properties); + let selecting = true; + let text_field_size = properties.size; + let mut navigation = CursorNavigation{selecting,content,text_field_size}; let mut cursors = Cursors::mock(initial_cursors.clone()); cursors.navigate_all_cursors(&mut navigation,LineEnd); assert_eq!(new_loc , cursors.first_cursor().position); @@ -697,12 +732,14 @@ mod test { #[wasm_bindgen_test(async)] async fn step_into_word() { msdf_sys::initialized().await; - let content = "first sentence\r\nthis is a second sentence\r\nlast sentence\n"; - let content = &mut TextFieldContent::new(content,&mock_properties()); - let selecting = false; - let mut navigation = CursorNavigation{content,selecting}; - let mut location = TextLocation::at_document_begin(); - location = navigation.next_word_position(&location).unwrap(); + let content = "first sentence\r\nthis is a second sentence\r\nlast sentence\n"; + let properties = mock_properties(); + let content = &mut TextFieldContent::new(content,&properties); + let selecting = false; + let text_field_size = properties.size; + let mut navigation = CursorNavigation{content,selecting,text_field_size}; + let mut location = TextLocation::at_document_begin(); + location = navigation.next_word_position(&location).unwrap(); assert_eq!(location, TextLocation{line:0, column:5}); location = navigation.next_word_position(&location).unwrap(); assert_eq!(location, TextLocation{line:0, column:14}); diff --git a/src/rust/ensogl/src/display/shape/text/text_field/frp/keyboard.rs b/src/rust/ensogl/src/display/shape/text/text_field/frp/keyboard.rs index 84db91801f..44c89faef4 100644 --- a/src/rust/ensogl/src/display/shape/text/text_field/frp/keyboard.rs +++ b/src/rust/ensogl/src/display/shape/text/text_field/frp/keyboard.rs @@ -150,6 +150,8 @@ impl TextFieldKeyboardFrp { setter.set_navigation_action(&[ArrowRight], Step::Right); setter.set_navigation_action(&[ArrowUp], Step::Up); setter.set_navigation_action(&[ArrowDown], Step::Down); + setter.set_navigation_action(&[PageDown], Step::PageDown); + setter.set_navigation_action(&[PageUp], Step::PageUp); setter.set_navigation_action(&[Home], Step::LineBegin); setter.set_navigation_action(&[End], Step::LineEnd); setter.set_navigation_action(&[Control,Home], Step::DocBegin); @@ -161,8 +163,6 @@ impl TextFieldKeyboardFrp { setter.set_action(&[Delete], |t| t.do_delete_operation(Step::Right)); setter.set_action(&[Backspace], |t| t.do_delete_operation(Step::Left)); setter.set_action(&[Escape], |t| t.finish_multicursor_mode()); - setter.set_action(&[PageDown], |t| t.page_down()); - setter.set_action(&[PageUp], |t| t.page_up()); } } diff --git a/src/rust/ide/ast/impl/src/crumbs.rs b/src/rust/ide/ast/impl/src/crumbs.rs index 2215ac8e60..49ab1320ea 100644 --- a/src/rust/ide/ast/impl/src/crumbs.rs +++ b/src/rust/ide/ast/impl/src/crumbs.rs @@ -4,7 +4,9 @@ use crate::prelude::*; use crate::known; +use crate::HasTokens; use crate::Shape; +use crate::TokenConsumer; use utils::fail::FallibleResult; @@ -92,21 +94,21 @@ pub type Crumbs = Vec; // === InvalidSuffix === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct InvalidSuffixCrumb; // === TextLineFmt === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct TextLineFmtCrumb {pub segment_index:usize} // === TextBlockFmt === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct TextBlockFmtCrumb { pub text_line_index : usize, pub segment_index : usize @@ -116,7 +118,7 @@ pub struct TextBlockFmtCrumb { // === TextUnclosed === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct TextUnclosedCrumb { pub text_line_crumb : TextLineFmtCrumb } @@ -125,7 +127,7 @@ pub struct TextUnclosedCrumb { // === Prefix === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum PrefixCrumb { Func, Arg @@ -135,7 +137,7 @@ pub enum PrefixCrumb { // === Infix === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum InfixCrumb { LeftOperand, Operator, @@ -146,7 +148,7 @@ pub enum InfixCrumb { // === SectionLeft === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum SectionLeftCrumb { Arg, Opr @@ -156,7 +158,7 @@ pub enum SectionLeftCrumb { // === SectionRight === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum SectionRightCrumb { Opr, Arg @@ -166,21 +168,21 @@ pub enum SectionRightCrumb { // === SectionSides === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct SectionSidesCrumb; // === Module === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct ModuleCrumb {pub line_index:usize} // === Block === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum BlockCrumb { /// The first non-empty line in block. HeadLine, @@ -192,14 +194,14 @@ pub enum BlockCrumb { // === Import === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct ImportCrumb {pub index:usize} // === Mixfix === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum MixfixCrumb { Name {index:usize}, Args {index:usize} @@ -209,14 +211,14 @@ pub enum MixfixCrumb { // === Group === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub struct GroupCrumb; // === Def === #[allow(missing_docs)] -#[derive(Clone,Copy,Debug,PartialEq,Hash)] +#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] pub enum DefCrumb { Name, Args {index:usize}, @@ -239,6 +241,14 @@ macro_rules! from_crumb { Crumb::$id(crumb.clone()) } } + + impl IntoIterator for $crumb_id { + type Item = Crumb; + type IntoIter = std::iter::Once; + fn into_iter(self) -> Self::IntoIter { + std::iter::once(Crumb::from(self)) + } + } } } @@ -271,7 +281,7 @@ macro_rules! impl_crumbs { } /// Crumb identifies location of child AST in an AST node. Allows for a single step AST traversal. - #[derive(Clone,Copy,Debug,PartialEq,Hash)] + #[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)] #[allow(missing_docs)] pub enum Crumb { $($id($crumb_id),)* @@ -279,6 +289,15 @@ macro_rules! impl_crumbs { } } +impl IntoIterator for Crumb { + type Item = Crumb; + type IntoIter = std::iter::Once; + fn into_iter(self) -> Self::IntoIter { + std::iter::once(self) + } +} + + impl_crumbs!{ (InvalidSuffix,InvalidSuffixCrumb), (TextLineFmt ,TextLineFmtCrumb), @@ -306,7 +325,7 @@ impl_crumbs!{ /// Interface for items that allow getting/setting stored Ast located by arbitrary `Crumb`. pub trait Crumbable { /// Specific `Crumb` type used by `Self` to locate child Asts. - type Crumb : Into; + type Crumb : Into + IntoIterator; /// Retrieves `Ast` under the crumb. fn get(&self, crumb:&Self::Crumb) -> FallibleResult<&Ast>; @@ -860,7 +879,7 @@ pub fn non_empty_line_indices<'a, T:'a> // =============== /// Item which location is identified by `Crumbs`. -#[derive(Clone,Debug,Shrinkwrap)] +#[derive(Clone,Debug,Shrinkwrap,PartialEq,Eq,Hash)] pub struct Located { /// Crumbs from containing parent. pub crumbs : Crumbs, @@ -883,27 +902,32 @@ impl Located { Located {crumbs,item} } - /// Creates a new item in a root location (single crumb location). - pub fn new_direct_child(crumb:impl Into, item:T) -> Located { - let crumbs = vec![crumb.into()]; - Located {crumbs,item} - } - /// Uses given function to map over the item. pub fn map(self, f:impl FnOnce(T) -> U) -> Located { Located::new(self.crumbs, f(self.item)) } - /// Replaces the item, while pushing given crumbs on top of already present ones. - pub fn into_descendant(self, crumbs:Crumbs, item:U) -> Located { + /// Takes crumbs relative to self and item that will be wrapped. + pub fn descendant(&self, crumbs:Cs, child:U) -> Located + where Cs : IntoIterator>,{ + let crumbs_so_far = self.crumbs.iter().copied(); + let crumbs_to_add = crumbs.into_iter().map(|crumb| crumb.into()); + let crumbs = crumbs_so_far.chain(crumbs_to_add); + Located::new(crumbs, child) + } + + /// Maps into child, concatenating this crumbs and child crumbs. + pub fn into_descendant(self, child:Located) -> Located { + let Located {crumbs,item} = child; let mut ret = self.map(|_| item); ret.crumbs.extend(crumbs); ret } +} - /// Maps into child, concatenating this crumbs and child crumbs. - pub fn push_descendant(self, child:Located) -> Located { - self.into_descendant(child.crumbs,child.item) +impl HasTokens for Located { + fn feed_to(&self, consumer:&mut impl TokenConsumer) { + self.item.feed_to(consumer) } } @@ -1425,17 +1449,11 @@ mod tests { assert_eq!(item.item, "zero"); assert!(item.crumbs.is_empty()); - let item = item.into_descendant(vec![Crumb::Infix(InfixCrumb::LeftOperand)], 1); - assert_eq!(item.item, 1); - let (crumb0,) = item.crumbs.iter().expect_tuple(); - assert_eq!(crumb0,&Crumb::Infix(InfixCrumb::LeftOperand)); - - let child_item = Located::new_direct_child(InfixCrumb::Operator, "two"); - let item = item.push_descendant(child_item); + let child_item = Located::new(InfixCrumb::Operator, "two"); + let item = item.into_descendant(child_item); assert_eq!(item.item, "two"); - let (crumb0,crumb1) = item.crumbs.iter().expect_tuple(); - assert_eq!(crumb0,&Crumb::Infix(InfixCrumb::LeftOperand)); - assert_eq!(crumb1,&Crumb::Infix(InfixCrumb::Operator)); + let (crumb0,) = item.crumbs.iter().expect_tuple(); + assert_eq!(crumb0,&Crumb::Infix(InfixCrumb::Operator)); let item2 = item.clone().map(|item| item.len() ); assert_eq!(item2.item,3); diff --git a/src/rust/ide/ast/impl/src/lib.rs b/src/rust/ide/ast/impl/src/lib.rs index 7c1ce46d1e..b7d02cdff9 100644 --- a/src/rust/ide/ast/impl/src/lib.rs +++ b/src/rust/ide/ast/impl/src/lib.rs @@ -32,6 +32,7 @@ pub mod prelude { pub use crate::Ast; pub use crate::traits::*; + pub use utils::option::*; } use crate::prelude::*; diff --git a/src/rust/ide/ast/impl/src/opr.rs b/src/rust/ide/ast/impl/src/opr.rs index da85e6b346..a96d543533 100644 --- a/src/rust/ide/ast/impl/src/opr.rs +++ b/src/rust/ide/ast/impl/src/opr.rs @@ -3,28 +3,52 @@ use crate::prelude::*; use crate::Ast; +use crate::Shape; use crate::assoc::Assoc; +use crate::crumbs::Crumb; +use crate::crumbs::Located; use crate::known; -use crate::Shape; /// Identifiers of operators with special meaning for IDE. pub mod predefined { - /// Used to create bindings, e.g. `add a b = a + b` or `foo = 5`. - pub const ASSIGNMENT : &str = "="; /// Used to create type paths (like `Int.+` or `IO.println`). pub const ACCESS : &str = "."; + /// Used to create bindings, e.g. `add a b = a + b` or `foo = 5`. + pub const ASSIGNMENT : &str = "="; + /// Used to create lambda expressions, e.g. `a -> b -> a + b`. + pub const ARROW : &str = "->"; +} + +/// Checks if the given AST has Opr shape with the name matching given string. +pub fn is_opr_named(ast:&Ast, name:impl Str) -> bool { + let opr_opt = known::Opr::try_from(ast).ok(); + opr_opt.contains_if(|opr| opr.name == name.as_ref()) } /// Checks if given Ast is an assignment operator identifier. pub fn is_assignment_opr(ast:&Ast) -> bool { - let opr_opt = known::Opr::try_from(ast); - opr_opt.map(|opr| opr.name == predefined::ASSIGNMENT).unwrap_or(false) + is_opr_named(ast,predefined::ASSIGNMENT) } -/// If given Ast is an assignment operator, returns it as Some known::Infix. -pub fn to_assignment(ast:&Ast) -> Option { +/// Checks if given Ast is an assignment operator identifier. +pub fn is_arrow_opr(ast:&Ast) -> bool { + is_opr_named(ast,predefined::ARROW) +} + +/// If given Ast is a specific infix operator application, returns it. +pub fn to_specific_infix(ast:&Ast, name:&str) -> Option { let infix = known::Infix::try_from(ast).ok()?; - is_assignment_opr(&infix.opr).then(infix) + is_opr_named(&infix.opr,name).then(infix) +} + +/// If given Ast is an assignment infix expression, returns it as Some known::Infix. +pub fn to_assignment(ast:&Ast) -> Option { + to_specific_infix(ast,predefined::ASSIGNMENT) +} + +/// If given Ast is an arrow infix expression, returns it as Some known::Infix. +pub fn to_arrow(ast:&Ast) -> Option { + to_specific_infix(ast,predefined::ARROW) } /// Checks if a given node is an assignment infix expression. @@ -33,11 +57,33 @@ pub fn is_assignment(ast:&Ast) -> bool { infix.map(|infix| is_assignment_opr(&infix.opr)).unwrap_or(false) } + + +// =========================== +// === Chain-related types === +// =========================== + /// Infix operator operand. Optional, as we deal with Section* nodes as well. -pub type Operand = Option; +pub type Operand = Option>; /// Infix operator standing between (optional) operands. -pub type Operator = known::Opr; +pub type Operator = Located; + +/// Creates `Operand` from `ast` with position relative to the given `parent` node. +pub fn make_operand(parent:&Located, crumb:impl Into, child:&Ast) -> Operand { + Some(parent.descendant(crumb.into(),child.clone())) +} + +/// Creates `Operator` from `ast` with position relative to the given `parent` node. +pub fn make_operator(parent:&Located, crumb:impl Into, opr:&Ast) -> Option { + let opr = known::Opr::try_from(opr).ok()?; + Some(parent.descendant(crumb.into(),opr)) +} + +/// Describes associativity of the given operator AST. +fn assoc(ast:&known::Opr) -> Assoc { + Assoc::of(&ast.name) +} @@ -45,7 +91,7 @@ pub type Operator = known::Opr; // === GeneralizedInfix === // ======================== -/// An abstraction over `Infix` and all `SectionSth` nodes. +/// An abstraction over `Infix` and all `SectionSth` nodes. Stores crumb locations for all its ASTs. #[derive(Clone,Debug)] pub struct GeneralizedInfix { /// Left operand, if present. @@ -57,28 +103,38 @@ pub struct GeneralizedInfix { } impl GeneralizedInfix { + /// As `try_new` but assumes that this expression is located at the root crumb location. + pub fn try_new_root(ast:&Ast) -> Option { + GeneralizedInfix::try_new(&Located::new_root(ast.clone())) + } + /// Tries interpret given AST node as GeneralizedInfix. Returns None, if Ast is not any kind of /// application on infix operator. - pub fn try_new(ast:&Ast) -> Option { + pub fn try_new(ast:&Located) -> Option { + use crate::crumbs::InfixCrumb; + use crate::crumbs::SectionLeftCrumb; + use crate::crumbs::SectionRightCrumb; + use crate::crumbs::SectionSidesCrumb; + match ast.shape() { Shape::Infix(infix) => Some(GeneralizedInfix{ - left : Some(infix.larg.clone()), - opr : known::Opr::try_from(&infix.opr).ok()?, - right : Some(infix.rarg.clone()), + left : make_operand (ast,InfixCrumb::LeftOperand, &infix.larg), + opr : make_operator(ast,InfixCrumb::Operator, &infix.opr)?, + right : make_operand (ast,InfixCrumb::RightOperand,&infix.rarg), }), Shape::SectionLeft(left) => Some(GeneralizedInfix{ - left : Some(left.arg.clone()), - opr : known::Opr::try_from(&left.opr).ok()?, + left : make_operand (ast,SectionLeftCrumb::Arg,&left.arg), + opr : make_operator(ast,SectionLeftCrumb::Opr,&left.opr)?, right : None, }), Shape::SectionRight(right) => Some(GeneralizedInfix{ left : None, - opr : known::Opr::try_from(&right.opr).ok()?, - right : Some(right.arg.clone()), + opr : make_operator(ast,SectionRightCrumb::Opr,&right.opr)?, + right : make_operand (ast,SectionRightCrumb::Arg,&right.arg), }), Shape::SectionSides(sides) => Some(GeneralizedInfix{ left : None, - opr : known::Opr::try_from(&sides.opr).ok()?, + opr : make_operator(ast,SectionSidesCrumb,&sides.opr)?, right : None, }), _ => None, @@ -87,7 +143,7 @@ impl GeneralizedInfix { /// Associativity of the operator used in this infix expression. pub fn assoc(&self) -> Assoc { - Assoc::of(&self.name()) + assoc(&self.opr.item) } /// Identifier name of the operator used in this infix expression. @@ -127,7 +183,7 @@ impl GeneralizedInfix { let mut target_subtree_flat = match target_subtree_infix { Some(target_infix) if target_infix.name() == self.name() => target_infix.flatten(), - _ => Chain { target, args:Vec::new() }, + _ => Chain { target, args:Vec::new(), operator:self.opr.item.clone() }, }; target_subtree_flat.args.push(rest); @@ -149,20 +205,37 @@ pub struct Chain { pub target : Operand, /// Subsequent operands applied to the `target`. pub args : Vec, + /// Operator AST. Generally all operators in the chain should be the same (except for id). + /// It is not specified which exactly operator's in the chain this AST belongs to. + pub operator : known::Opr, } impl Chain { /// If this is infix, it flattens whole chain and returns result. /// Otherwise, returns None. pub fn try_new(ast:&Ast) -> Option { - GeneralizedInfix::try_new(ast).map(|infix| infix.flatten()) + GeneralizedInfix::try_new_root(&ast).map(|infix| infix.flatten()) } /// Flattens infix chain if this is infix application of given operator. pub fn try_new_of(ast:&Ast, operator:&str) -> Option { - let infix = GeneralizedInfix::try_new(ast)?; + let infix = GeneralizedInfix::try_new_root(&ast)?; (infix.name() == operator).as_some_from(|| infix.flatten()) } + + /// Iterates over &Located, beginning with target (this argument) and then subsequent + /// arguments. + pub fn enumerate_operands<'a>(&'a self) -> impl Iterator> + 'a { + let this = std::iter::once(&self.target); + let args = self.args.iter().map(|elem| &elem.operand); + this.chain(args).flatten() + } + + /// Iterates over &Located, beginning with target (this argument) and then subsequent + /// arguments. + pub fn enumerate_operators<'a>(&'a self) -> impl Iterator> + 'a { + self.args.iter().map(|elem| &elem.operator) + } } /// Element of the infix application chain, i.e. operator and its operand. @@ -175,3 +248,43 @@ pub struct ChainElement { /// or on the left side of operator. pub operand : Operand, } + + +#[cfg(test)] +mod tests { + use super::*; + + fn expect_at(root_ast:&Ast, operand:&Operand, expected_ast:&Ast) { + assert_eq!(&operand.as_ref().unwrap().item,expected_ast); + let crumbs = &operand.as_ref().unwrap().crumbs; + let ast = root_ast.get_traversing(crumbs).unwrap(); + assert_eq!(ast, expected_ast, "expected `{}` at crumbs `{:?}` for `{}`", + expected_ast.repr(), crumbs, root_ast.repr()); + } + + #[test] + fn infix_chain_tests() { + let a = Ast::var("a"); + let b = Ast::var("b"); + let c = Ast::var("c"); + let a_plus_b = Ast::infix(a.clone(),"+",b.clone()); + let a_plus_b_plus_c = Ast::infix(a_plus_b.clone(),"+",c.clone()); + let chain = Chain::try_new(&a_plus_b_plus_c).unwrap(); + expect_at(&a_plus_b_plus_c,&chain.target,&a); + expect_at(&a_plus_b_plus_c,&chain.args[0].operand,&b); + expect_at(&a_plus_b_plus_c,&chain.args[1].operand,&c); + } + + #[test] + fn infix_chain_tests_right() { + let a = Ast::var("a"); + let b = Ast::var("b"); + let c = Ast::var("c"); + let b_comma_c = Ast::infix(b.clone(),",",c.clone()); + let a_comma_b_comma_c = Ast::infix(a.clone(),",",b_comma_c.clone()); + let chain = Chain::try_new(&a_comma_b_comma_c).unwrap(); + expect_at(&a_comma_b_comma_c,&chain.target,&c); + expect_at(&a_comma_b_comma_c,&chain.args[0].operand,&b); + expect_at(&a_comma_b_comma_c,&chain.args[1].operand,&a); + } +} diff --git a/src/rust/ide/ast/impl/src/prefix.rs b/src/rust/ide/ast/impl/src/prefix.rs index fe36d9b989..87eed1a54c 100644 --- a/src/rust/ide/ast/impl/src/prefix.rs +++ b/src/rust/ide/ast/impl/src/prefix.rs @@ -2,8 +2,12 @@ use crate::prelude::*; -use crate::known; use crate::Ast; +use crate::crumbs::Located; +use crate::crumbs::PrefixCrumb; +use crate::known; + +use utils::vec::VecExt; #[derive(Clone,Debug)] /// Result of flattening a sequence of prefix applications. @@ -35,6 +39,11 @@ impl Chain { Chain {func,args} } + /// Like `new` but returns None if given Ast is not of a Prefix shape. + pub fn try_new(ast:&Ast) -> Option { + known::Prefix::try_from(ast).as_ref().map(Chain::new).ok() + } + /// As new but if the AST is not a prefix, interprets is a function with an /// empty arguments list. pub fn new_non_strict(ast:&Ast) -> Chain { @@ -55,4 +64,48 @@ impl Chain { Chain {func,args} } } + + /// Iterates over all arguments, left-to right. + pub fn enumerate_args<'a>(&'a self) -> impl Iterator> + 'a { + // Location is always like [Func,Func,…,Func,Arg]. + // We iterate beginning from the deeply nested args. So we can just create crumbs + // location once and then just pop initial crumb when traversing arguments. + let func_crumbs = std::iter::repeat(PrefixCrumb::Func).take(self.args.len()); + let mut crumbs = func_crumbs.collect_vec(); + crumbs.push(PrefixCrumb::Arg); + self.args.iter().map(move |arg| { + crumbs.pop_front(); + Located::new(&crumbs, arg) + }) + } +} + + + +#[cfg(test)] +mod tests { + use super::*; + + use utils::test::ExpectTuple; + + #[test] + fn prefix_chain() { + let a = Ast::var("a"); + let b = Ast::var("b"); + let c = Ast::var("c"); + + let a_b = Ast::prefix(a.clone(),b.clone()); + let a_b_c = Ast::prefix(a_b.clone(),c.clone()); + + let chain = Chain::try_new(&a_b_c).unwrap(); + assert_eq!(chain.func, a); + assert_eq!(chain.args[0], b); + assert_eq!(chain.args[1], c); + + let (arg1,arg2) = chain.enumerate_args().expect_tuple(); + assert_eq!(arg1.item, &b); + assert_eq!(a_b_c.get_traversing(&arg1.crumbs).unwrap(), &b); + assert_eq!(arg2.item, &c); + assert_eq!(a_b_c.get_traversing(&arg2.crumbs).unwrap(), &c); + } } diff --git a/src/rust/ide/parser/tests/ast.rs b/src/rust/ide/parser/tests/ast.rs index 54b2ddf394..0e42910eba 100644 --- a/src/rust/ide/parser/tests/ast.rs +++ b/src/rust/ide/parser/tests/ast.rs @@ -43,7 +43,7 @@ pub fn generalized_infix_test() { let make_gen_infix = |code:&str| { let ast = parser.parse(code.to_string(),default()).unwrap(); let line = expect_single_line(&ast); - GeneralizedInfix::try_new(line) + GeneralizedInfix::try_new_root(line) }; let infix = make_gen_infix("a+b").unwrap(); diff --git a/src/rust/ide/src/double_representation/alias_analysis.rs b/src/rust/ide/src/double_representation/alias_analysis.rs index 4f419ac8de..5aac7bb67e 100644 --- a/src/rust/ide/src/double_representation/alias_analysis.rs +++ b/src/rust/ide/src/double_representation/alias_analysis.rs @@ -3,13 +3,20 @@ use crate::prelude::*; +use crate::double_representation::definition::DefinitionInfo; +use crate::double_representation::definition::ScopeKind; use crate::double_representation::node::NodeInfo; +use ast::crumbs::Crumb; +use ast::crumbs::InfixCrumb; +use ast::crumbs::Located; +use std::borrow::Borrow; + #[cfg(test)] pub mod test_utils; -/// Identifier with its ast crumb location (relative to the node's ast). -pub type LocatedIdentifier = ast::crumbs::Located; +/// Case-insensitive identifier with its ast crumb location (relative to the node's ast). +pub type LocatedName = Located; @@ -51,12 +58,12 @@ impl PartialEq for NormalizedName { // ======================= /// Description of how some node is interacting with the graph's scope. -#[derive(Clone,Debug)] +#[derive(Clone,Debug,Default)] pub struct IdentifierUsage { /// Identifiers from the graph's scope that node is using. - pub introduced : Vec, + pub introduced : Vec, /// Identifiers that node introduces into the parent scope. - pub used : Vec, + pub used : Vec, } @@ -65,26 +72,258 @@ pub struct IdentifierUsage { // === Analysis === // ================ + +// === Helper Datatypes === + +/// Says whether the identifier occurrence introduces it into scope or uses it from scope. +#[allow(missing_docs)] +#[derive(Clone,Copy,Debug,Display,PartialEq)] +pub enum OccurrenceKind { Used, Introduced } + +/// If the current context in the AST processor is a pattern context. +// TODO [mwu] Refer to the specification once it is merged. +#[allow(missing_docs)] +#[derive(Clone,Copy,Debug,Display,PartialEq)] +pub enum Context { NonPattern, Pattern } + +/// Represents scope and information about identifiers usage within it. +#[derive(Clone,Debug,Default)] +pub struct Scope { + #[allow(missing_docs)] + pub symbols : IdentifierUsage, +} + +impl Scope { + /// Iterates over identifiers that are used in this scope but are not introduced in this scope + /// i.e. the identifiers that parent scope must provide. + pub fn used_from_parent(self) -> impl Iterator { + let available = self.symbols.introduced.into_iter().map(|located_name| located_name.item); + let available : HashSet = HashSet::from_iter(available); + let all_used = self.symbols.used.into_iter(); + all_used.filter(move |name| !available.contains(&name.item)) + } + + /// Drops the information about nested child scope by: + /// 1) disregarding any usage of identifiers introduced in the child scope; + /// 2) propagating all non-shadowed identifier usage from this scope into this scope usage list. + fn coalesce_child(&mut self, child:Scope) { + let symbols_to_use = child.used_from_parent(); + self.symbols.used.extend(symbols_to_use); + } +} + + +// === AliasAnalyzer === + +/// Traverser AST and analyzes identifier usage. +#[derive(Clone,Debug,Default)] +pub struct AliasAnalyzer { + /// Root scope for this analyzer. + root_scope : Scope, + /// Stack of scopes that shadow the root one. + shadowing_scopes : Vec, + /// Stack of context. Lack of any context information is considered non-pattern context. + context : Vec, + /// Current location, relative to the input AST root. + location : Vec, +} + +impl AliasAnalyzer { + /// Creates a new analyzer. + pub fn new() -> AliasAnalyzer { + AliasAnalyzer::default() + } + + /// Adds items to the target vector, calls the callback `f` then removes the items. + fn with_items_added + ( &mut self + , vec : impl Fn(&mut Self) -> &mut Vec + , items : impl IntoIterator> + , f : impl FnOnce(&mut Self) -> R + ) -> R { + let original_count = vec(self).len(); + vec(self).extend(items.into_iter().map(|item| item.into())); + let ret = f(self); + vec(self).truncate(original_count); + ret + } + + /// Pushes a new scope, then runs a given `f` function. Once it finished, scope is removed and + /// its unshadowed variable usage propagated onto the current scope. + fn in_new_scope(&mut self, f:impl FnOnce(&mut Self)) { + let scope = Scope::default(); + self.shadowing_scopes.push(scope); + f(self); + let scope = self.shadowing_scopes.pop().unwrap(); + self.current_scope_mut().coalesce_child(scope); + } + + /// Temporarily sets contest and invokes `f` within it. + fn in_context(&mut self, context:Context, f:impl FnOnce(&mut Self)) { + self.with_items_added(|this| &mut this.context, std::iter::once(context), f); + } + + /// Enters a new location (relative to the current one), invokes `f`, leaves the location. + fn in_location(&mut self, crumbs:Cs, f:F) -> R + where Cs : IntoIterator, + F : FnOnce(&mut Self) -> R { + self.with_items_added(|this| &mut this.location, crumbs, f) + } + + /// Enters a new location (relative to the current one), invokes `f`, leaves the location. + fn in_location_of(&mut self, located_item:&Located, f:F) -> R + where F:FnOnce(&mut Self) -> R { + self.in_location(located_item.crumbs.iter().copied(), f) + } + + /// Obtains a mutable reference to the current scope. + fn current_scope_mut(&mut self) -> &mut Scope { + self.shadowing_scopes.last_mut().unwrap_or(&mut self.root_scope) + } + + /// Returns the current context kind. (pattern or not) + fn current_context(&self) -> Context { + self.context.last().copied().unwrap_or(Context::NonPattern) + } + + /// Records identifier occurrence in the current scope. + fn record_identifier(&mut self, kind: OccurrenceKind, identifier:NormalizedName) { + let identifier = LocatedName::new(self.location.clone(), identifier); + let scope_index = self.shadowing_scopes.len(); + let symbols = &mut self.current_scope_mut().symbols; + let target = match kind { + OccurrenceKind::Used => &mut symbols.used, + OccurrenceKind::Introduced => &mut symbols.introduced, + }; + println!("Name {} is {} in scope @{}",identifier.item.0,kind,scope_index); + target.push(identifier) + } + + /// Checks if we are currently in the pattern context. + fn is_in_pattern(&self) -> bool { + self.current_context() == Context::Pattern + } + + /// If given AST is an identifier, records its occurrence. + /// Returns boolean saying if the identifier was recorded. + fn try_recording_identifier(&mut self, kind: OccurrenceKind, ast:&Ast) -> bool { + let name = NormalizedName::try_from_ast(ast); + name.map(|name| self.record_identifier(kind, name)).is_some() + } + + /// If the given located AST-like entity is an identifier, records its occurrence. + fn store_if_name(&mut self, kind:OccurrenceKind, located:&Located) -> bool + where for<'a> &'a T : Into<&'a Ast> { + let ast = (&located.item).into(); + self.in_location_of(located, |this| this.try_recording_identifier(kind, ast)) + } + + /// Processes the given AST, while crumb is temporarily pushed to the current location. + fn process_subtree_at(&mut self, crumb:impl Into, subtree:&Ast) { + self.in_location(crumb.into(), |this| this.process_ast(subtree)) + } + + /// Processes the given AST, while crumb is temporarily pushed to the current location. + fn process_located_ast(&mut self, located_ast:&Located>) { + self.in_location_of(&located_ast, |this| this.process_ast(located_ast.item.borrow())) + } + + /// Processes all subtrees of the given AST in their respective locations. + fn process_subtrees(&mut self, ast:&Ast) { + for (crumb,ast) in ast.enumerate() { + self.process_subtree_at(crumb, ast) + } + } + + /// Processes the given AST, along with its subtree. + /// + /// This is the primary function that is recursively being called as the AST is being traversed. + pub fn process_ast(&mut self, ast:&Ast) { + if let Some(definition) = DefinitionInfo::from_line_ast(&ast,ScopeKind::NonRoot,default()) { + // If AST looks like definition, we disregard its arguments and body, as they cannot + // form connections in the analyzed graph. However, we need to record the name, because + // it may shadow identifier from parent scope. + let name = NormalizedName::new(definition.name.name); + self.record_identifier(OccurrenceKind::Introduced,name); + } else if let Some(assignment) = ast::opr::to_assignment(ast) { + self.process_assignment(&assignment); + } else if let Some(lambda) = ast::opr::to_arrow(ast) { + self.process_lambda(&lambda); + } else if self.is_in_pattern() { + // We are in the pattern (be it a lambda's or assignment's left side). Three options: + // 1) This is a destructuring pattern match using infix syntax, like `head,tail`. + // 2) This is a destructuring pattern match with prefix syntax, like `Point x y`. + // 3) This is a single AST node, like `foo` or `Foo`. + // (the possibility of definition has been already excluded) + if let Some(infix_chain) = ast::opr::Chain::try_new(ast) { + // Infix always acts as pattern-match in left-side. + for operand in infix_chain.enumerate_operands() { + self.process_located_ast(operand) + } + for operator in infix_chain.enumerate_operators() { + // Operators in infix positions are treated as constructors, i.e. they are used. + self.store_if_name(OccurrenceKind::Used, operator); + } + } else if let Some(prefix_chain) = ast::prefix::Chain::try_new(ast) { + // Arguments introduce names, we ignore function name. + // Arguments will just introduce names in pattern context. + for argument in prefix_chain.enumerate_args() { + self.process_located_ast(&argument) + } + } else { + // Single AST node on the assignment LHS. Deal with identifiers, otherwise + // recursively process subtrees. + match ast.shape() { + ast::Shape::Cons(_) => { + self.try_recording_identifier(OccurrenceKind::Used,ast); + } ast::Shape::Var(_) => { + self.try_recording_identifier(OccurrenceKind::Introduced,ast); + } _ => { + self.process_subtrees(ast); + } + } + } + } else { + // Non-pattern context. + if ast::known::Block::try_from(ast).is_ok() { + self.in_new_scope(|this| this.process_subtrees(ast)) + } else if self.try_recording_identifier(OccurrenceKind::Used,ast) { + // Plain identifier: we just added as the condition side-effect. + // No need to do anything more. + } else { + self.process_subtrees(ast); + } + } + } + + /// Processes the assignment AST node. Left side is pattern, right side is business as usual. + fn process_assignment(&mut self, assignment:&ast::known::Infix) { + self.in_context(Context::Pattern, |this| + this.process_subtree_at(InfixCrumb::LeftOperand, &assignment.larg) + ); + self.process_subtree_at(InfixCrumb::RightOperand, &assignment.rarg); + } + + /// Processes the assignment AST node. Left side is pattern, right side is business as usual. + /// Additionally, the whole lambda is a new scope. + // TODO [mwu] + // Depending on the eventual decision, this might need to be rewritten to use macros. + fn process_lambda(&mut self, lambda:&ast::known::Infix) { + self.in_new_scope(|this| { + this.in_context(Context::Pattern, |this| + this.process_subtree_at(InfixCrumb::LeftOperand, &lambda.larg) + ); + this.process_subtree_at(InfixCrumb::RightOperand, &lambda.rarg); + }) + } +} + /// Describes identifiers that nodes introduces into the graph and identifiers from graph's scope /// that node uses. This logic serves as a base for connection discovery. pub fn analyse_identifier_usage(node:&NodeInfo) -> IdentifierUsage { - analyse_identifier_usage_mock(node) -} - -/// Hardcoded proper result for `sum = a + b`. -/// TODO [mwu] remove when real implementation is present -fn analyse_identifier_usage_mock(_:&NodeInfo) -> IdentifierUsage { - use ast::crumbs::InfixCrumb::LeftOperand; - use ast::crumbs::InfixCrumb::RightOperand; - let sum = NormalizedName::new("sum"); - let a = NormalizedName::new("a"); - let b = NormalizedName::new("b"); - let introduced = vec![LocatedIdentifier::new(&[LeftOperand], sum)]; - let used = vec![ - LocatedIdentifier::new(&[RightOperand, LeftOperand], a), - LocatedIdentifier::new(&[RightOperand, RightOperand], b), - ]; - IdentifierUsage {introduced,used} + let mut analyzer = AliasAnalyzer::new(); + analyzer.process_ast(node.ast()); + analyzer.root_scope.symbols } @@ -98,58 +337,65 @@ mod tests { use super::*; use super::test_utils::*; - use wasm_bindgen_test::wasm_bindgen_test; - use wasm_bindgen_test::wasm_bindgen_test_configure; - wasm_bindgen_test_configure!(run_in_browser); /// Checks if actual observed sequence of located identifiers matches the expected one. /// Expected identifiers are described as code spans in the node's text representation. fn validate_identifiers - (node:&NodeInfo, expected:Vec>, actual:&Vec) { - let mut checker = IdentifierValidator::new(node,expected); + (name:impl Str, node:&NodeInfo, expected:Vec>, actual:&Vec) { + let mut checker = IdentifierValidator::new(name,node,expected); checker.validate_identifiers(actual); } /// Runs the test for the given test case description. fn run_case(parser:&parser::Parser, case:Case) { + println!("\n===========================================================================\n"); + println!("Case: {}",&case.code); let ast = parser.parse_line(&case.code).unwrap(); let node = NodeInfo::from_line_ast(&ast).unwrap(); let result = analyse_identifier_usage(&node); - validate_identifiers(&node, case.expected_introduced, &result.introduced); - validate_identifiers(&node, case.expected_used, &result.used); + println!("Analysis results: {:?}", result); + validate_identifiers("introduced",&node, case.expected_introduced, &result.introduced); + validate_identifiers("used", &node, case.expected_used, &result.used); } /// Runs the test for the test case expressed using markdown notation. See `Case` for details. - fn run_markdown_case(parser:&parser::Parser, marked_code:impl Str) { + fn run_markdown_case(parser:&parser::Parser, marked_code:impl AsRef) { println!("Running test case for {}", marked_code.as_ref()); - let case = Case::from_markdown(marked_code); + let case = Case::from_markdown(marked_code.as_ref()); run_case(parser,case) } - #[wasm_bindgen_test] fn test_alias_analysis() { let parser = parser::Parser::new_or_panic(); - - // TODO [mwu] Uncomment and make them pass. And add more. -// let test_cases = vec![ -// "«sum» = »a« + »b«", -// "«foo» = »bar«", -// "«foo» a b = a + b", -// "Foo «a» «b» = »bar«", -// "a.«hello» = »print« 'Hello'", -// "«log_name» object = »print« object.»name«", -// "«log_name» = object -> »print« object.»name«", -// "«log_name» = object -> »print« $ »name« object", -// "«^» a n = a * a ^ (n - 1)", -// ]; -// for case in test_cases { -// run_markdown_case(&parser,case) -// } - - - let code = "«sum» = »a« + »b«"; - run_markdown_case(&parser, code); + let test_cases = [ + "»foo«", + "«five» = 5", + "»Five« = 5", + "«foo» = »bar«", + "«foo» = »foo« »+« »bar«", + "«foo» = »Bar«", + "5 = »Bar«", + "«sum» = »a« »+« »b«", + "Point «x» «u» = »point«", + "«x» »,« «y» = »pair«", + + r"«inc» = + »foo« »+« 1", + + r"«inc» = + foo = 2 + foo »+« 1", + + // Below should know that "foo + 1" does not uses "foo" from scope. + // That requires at least partial support for definitions. + r"«inc» = + foo x = 2 + foo »+« 1", + ]; + for case in &test_cases { + run_markdown_case(&parser,case) + } } } diff --git a/src/rust/ide/src/double_representation/alias_analysis/test_utils.rs b/src/rust/ide/src/double_representation/alias_analysis/test_utils.rs index cc4c59f3f2..55c1936f5e 100644 --- a/src/rust/ide/src/double_representation/alias_analysis/test_utils.rs +++ b/src/rust/ide/src/double_representation/alias_analysis/test_utils.rs @@ -1,8 +1,9 @@ +//! Utilities to facilitate testing of alias-analysis-related code. use crate::prelude::*; use crate::double_representation::alias_analysis::NormalizedName; -use crate::double_representation::alias_analysis::LocatedIdentifier; +use crate::double_representation::alias_analysis::LocatedName; use crate::double_representation::node::NodeInfo; use regex::Captures; @@ -34,7 +35,7 @@ impl Case { /// AST in which all identifiers introduced into the graph's scope are marked like `«foo»`, and /// all identifiers used from graph's scope are marked like `»sum«`. pub fn from_markdown(marked_code:impl Str) -> Case { - // Regexp that matches either «sth» or »sth« into a group names `introduced` or `used`, + // Regexp that matches either «sth» or »sth« into a group named `introduced` or `used`, // respectively. See: https://regex101.com/r/pboF8O/2 for detailed explanation. let regex = format!(r"«(?P<{}>[^»]*)»|»(?P<{}>[^«]*)«",INTRODUCED,USED); // As this is test utils, we don't try nicely handling failure nor reusing the compiled @@ -100,7 +101,7 @@ impl MarkdownReplacer { } } -// Processes every single match for a marged entity. +// Processes every single match for a marked entity. impl Replacer for MarkdownReplacer { fn replace_append(&mut self, captures: &Captures, dst: &mut String) { let (kind,matched) = if let Some(introduced) = captures.name(INTRODUCED) { @@ -133,14 +134,17 @@ enum HasBeenValidated {No,Yes} /// Helper test structure that requires that each given identifier is validated at least once. /// Otherwise, it shall panic when dropped. #[derive(Clone,Debug)] -pub struct IdentifierValidator { - validations:HashMap +pub struct IdentifierValidator<'a> { + name : String, + node : &'a NodeInfo, + validations : HashMap, } -impl IdentifierValidator { +impl<'a> IdentifierValidator<'a> { /// Creates a new checker, with identifier set obtained from given node's representation /// spans. - pub fn new(node:&NodeInfo,spans:Vec>) -> IdentifierValidator { + pub fn new(name:impl Str, node:&NodeInfo,spans:Vec>) -> IdentifierValidator { + let name = name.into(); let ast = node.ast(); let repr = ast.repr(); let mut validations = HashMap::default(); @@ -148,30 +152,42 @@ impl IdentifierValidator { let name = NormalizedName::new(&repr[span]); validations.insert(name, HasBeenValidated::No); } - IdentifierValidator {validations} + IdentifierValidator {name,node,validations} } /// Marks given identifier as checked. pub fn validate_identifier(&mut self, name:&NormalizedName) { - let err = || iformat!("unexpected identifier `{name}` validated"); - let used = self.validations.get_mut(&name).expect(&err()); + let err = iformat!("{self.name}: unexpected identifier `{name}` validated"); + let used = self.validations.get_mut(&name).expect(&err); *used = HasBeenValidated::Yes; } /// Marks given sequence of identifiers as checked. - pub fn validate_identifiers<'a> - (&mut self, identifiers:impl IntoIterator) { + pub fn validate_identifiers + (&mut self, identifiers:impl IntoIterator) { for identifier in identifiers { - self.validate_identifier(&identifier.item) + self.validate_identifier(&identifier.item); + + let crumbs = &identifier.crumbs; + let ast_result = self.node.ast().get_traversing(&crumbs); + let ast = ast_result.expect("failed to retrieve ast from crumb"); + let name_err = || iformat!("Failed to use AST {ast.repr()} as an identifier name"); + let name = NormalizedName::try_from_ast(ast).expect(&name_err()); + assert_eq!(name,identifier.item) } } } /// Panics if there are remaining identifiers that were not checked. -impl Drop for IdentifierValidator { +impl<'a> Drop for IdentifierValidator<'a> { fn drop(&mut self) { - for elem in &self.validations { - assert_eq!(elem.1, &HasBeenValidated::Yes, "identifier `{}` was not validated)", elem.0) + if !std::thread::panicking() { + for elem in &self.validations { + assert_eq!(elem.1, &HasBeenValidated::Yes, + "{}: identifier `{}` was not validated)", self.name,elem.0) + } + } else { + println!("Skipping identifier validation, because thread is already in panic."); } } } diff --git a/src/rust/ide/src/double_representation/definition.rs b/src/rust/ide/src/double_representation/definition.rs index cb990a1aa4..6b6a630987 100644 --- a/src/rust/ide/src/double_representation/definition.rs +++ b/src/rust/ide/src/double_representation/definition.rs @@ -154,16 +154,24 @@ impl DefinitionName { let accessor_chain = opr::Chain::try_new_of(ast,opr::predefined::ACCESS); let (extended_target,name) = match accessor_chain { Some(accessor_chain) => { - let mut args = vec![ast::identifier::name(&accessor_chain.target?)?.clone()]; + let mut args = vec![ast::identifier::name(&*accessor_chain.target?)?.clone()]; for arg in accessor_chain.args.iter() { let arg_ast = arg.operand.as_ref()?; - args.push(ast::identifier::name(arg_ast)?.clone()) + args.push(ast::identifier::name(&*arg_ast)?.clone()) } let name = args.pop()?; (args,name) } None => { - (Vec::new(), ast::identifier::name(ast)?.clone()) + let name = match ast.shape() { + ast::Shape::Var (var) => Some(&var.name), + ast::Shape::Opr (opr) => Some(&opr.name), + ast::Shape::SectionSides(sides) => ast::identifier::name(&sides.opr), + // Shape::Cons is intentionally omitted. + // It serves to pattern-match, not as definition name. + _ => None + }?; + (Vec::new(), name.clone()) } }; Some(DefinitionName {extended_target,name}) @@ -308,7 +316,7 @@ pub type ChildDefinition = ast::crumbs::Located; /// Its crumbs will accumulate both current crumbs and the passed one. pub fn resolve_single_name(def:ChildDefinition, id:&Crumb) -> FallibleResult { let child = def.item.def_iter().find_by_name(id)?; - Ok(def.push_descendant(child)) + Ok(def.into_descendant(child)) } @@ -384,7 +392,7 @@ pub trait DefinitionProvider { pub fn ast_direct_children<'a> (ast:&'a impl Crumbable) -> Box>+'a> { let iter = ast.enumerate().map(|(crumb,ast)| { - ChildAst::new_direct_child(crumb,ast) + ChildAst::new(crumb,ast) }); Box::new(iter) } @@ -451,6 +459,8 @@ impl DefinitionProvider for DefinitionInfo { mod tests { use super::*; + use crate::double_representation::INDENT; + use utils::test::ExpectTuple; use wasm_bindgen_test::wasm_bindgen_test; @@ -470,6 +480,29 @@ mod tests { iformat!(" {line}") } + #[test] + fn match_is_not_definition() { + let cons = Ast::cons("Foo"); + let arg = Ast::number(5); + let lhs = Ast::prefix(cons, arg.clone()); + let rhs = Ast::var("bar"); + let ast = Ast::infix(lhs, "=", rhs.clone()); + + // Not a definition, it is a pattern match/ + assert_eq!(ast.repr(), "Foo 5 = bar"); + let def_opt = DefinitionInfo::from_line_ast(&ast,ScopeKind::NonRoot,INDENT); + assert!(def_opt.is_none()); + + let var = Ast::var("foo"); + let lhs = Ast::prefix(var, arg); + let ast = Ast::infix(lhs, "=", rhs); + + // Now it is a definition. + assert_eq!(ast.repr(), "foo 5 = bar"); + let def_opt = DefinitionInfo::from_line_ast(&ast,ScopeKind::NonRoot,INDENT); + assert!(def_opt.is_some()); + } + #[wasm_bindgen_test] fn list_definition_test() { let parser = parser::Parser::new_or_panic(); diff --git a/src/rust/ide/src/double_representation/graph.rs b/src/rust/ide/src/double_representation/graph.rs index 043ef92049..56df7e6fa4 100644 --- a/src/rust/ide/src/double_representation/graph.rs +++ b/src/rust/ide/src/double_representation/graph.rs @@ -338,9 +338,11 @@ mod tests { main = foo = node foo a = not_node - Int.= a = node node "; + // TODO [mwu] + // Add case like `Int.+ a = not_node` once https://github.com/luna/enso/issues/565 is fixed + let graph = main_graph(&mut parser, program); let nodes = graph.nodes(); assert_eq!(nodes.len(), 2); diff --git a/src/rust/ide/src/lib.rs b/src/rust/ide/src/lib.rs index 50c9d457b6..c23dd730f9 100644 --- a/src/rust/ide/src/lib.rs +++ b/src/rust/ide/src/lib.rs @@ -1,6 +1,7 @@ //! Main library crate for IDE. It includes implementation of //! controllers, view logic and code that wraps them all together. - +//! +#![feature(associated_type_bounds)] #![feature(bool_to_option)] #![feature(cell_update)] #![feature(drain_filter)] @@ -48,6 +49,10 @@ pub mod prelude { pub use utils::fail::FallibleResult; pub use utils::option::OptionExt; pub use utils::vec::VecExt; + + + #[cfg(test)] pub use wasm_bindgen_test::wasm_bindgen_test; + #[cfg(test)] pub use wasm_bindgen_test::wasm_bindgen_test_configure; } use crate::prelude::*; diff --git a/src/rust/ide/src/view/text_editor.rs b/src/rust/ide/src/view/text_editor.rs index 0b18b26874..76ba29af9d 100644 --- a/src/rust/ide/src/view/text_editor.rs +++ b/src/rust/ide/src/view/text_editor.rs @@ -77,7 +77,7 @@ impl TextEditor { let font = fonts.get_or_load_embedded_font("DejaVuSansMono").unwrap(); let padding = default(); let position = zero(); - let size = Vector2::new(screen.width, screen.height); + let size = Vector2::new(screen.width, screen.height / 2.0); let black = Vector4::new(0.0,0.0,0.0,1.0); let base_color = black; let text_size = 16.0; diff --git a/src/rust/ide/utils/src/vec.rs b/src/rust/ide/utils/src/vec.rs index f1ede5e04a..d56d58d54d 100644 --- a/src/rust/ide/utils/src/vec.rs +++ b/src/rust/ide/utils/src/vec.rs @@ -16,6 +16,13 @@ pub trait VecExt : AsMut> { fn pop_front(&mut self) -> Option { self.try_remove(0) } + + /// Removes the last `n` elements from the vector. Returns true if the elements were removed. + fn remove_last_n(&mut self, n:usize) -> bool { + let vec = self.as_mut(); + let new_size = vec.len().checked_sub(n); + new_size.map(|new_size| vec.truncate(new_size)).is_some() + } } impl VecExt for Vec {} diff --git a/src/rust/lib/data/src/text.rs b/src/rust/lib/data/src/text.rs index a897581efb..1d0285ada8 100644 --- a/src/rust/lib/data/src/text.rs +++ b/src/rust/lib/data/src/text.rs @@ -126,29 +126,13 @@ impl Span { } } -impl From> for Span { - fn from(range:Range) -> Self { - Span::from_indices(Index::new(range.start), Index::new(range.end)) - } -} - -impl From<&Range> for Span { - fn from(range:&Range) -> Self { - Span::from_indices(Index::new(range.start), Index::new(range.end)) - } -} +impls! { From + &From > for Span { |range| + Span::from_indices(Index::new(range.start), Index::new(range.end)) +}} -impl Into> for Span { - fn into(self) -> Range { - self.range() - } -} - -impl Into> for &Span { - fn into(self) -> Range { - self.range() - } -} +impls! { Into + &Into > for Span { |this| + this.range() +}} impl PartialEq> for Span { fn eq(&self, other:&Range) -> bool { diff --git a/src/rust/lib/debug-scenes/Cargo.toml b/src/rust/lib/debug-scenes/Cargo.toml index c91f4e89ec..b64ac28e4f 100644 --- a/src/rust/lib/debug-scenes/Cargo.toml +++ b/src/rust/lib/debug-scenes/Cargo.toml @@ -16,10 +16,10 @@ enso-frp = { version = "0.1.0" , path = "../frp" } ide = { version = "0.1.0" , path = "../../ide" } graph-editor = { version = "0.1.0" , path = "../graph-editor" } -enso-prelude = { version = "0.1.0" , path = "../prelude" } +enso-prelude = { version = "0.1.0" , path = "../prelude" } wasm-bindgen = { version = "=0.2.58" , features = ["nightly"] } -nalgebra = { version = "0.19.0" } -js-sys = { version = "0.3.28" } +nalgebra = { version = "0.19.0" } +js-sys = { version = "0.3.28" } im-rc = "14.3.0" diff --git a/src/rust/lib/prelude/src/macros.rs b/src/rust/lib/prelude/src/macros.rs index 65c932f7ee..c2c66b92e1 100644 --- a/src/rust/lib/prelude/src/macros.rs +++ b/src/rust/lib/prelude/src/macros.rs @@ -20,6 +20,11 @@ /// ``` /// /// This macro is meant to support many standard traits (like From) and should grow in the future. +/// Currently supported ones are: +/// * From<…> +/// * From + &From<…> +/// * Into + &Into<…> +/// * PhantomFrom<…> #[macro_export] macro_rules! impls { ($([$($impl_params:tt)*])? From<$ty:ty> for $target:ty $(where [$($bounds:tt)*])? { @@ -53,6 +58,26 @@ macro_rules! impls { } }; + ($([$($impl_params:tt)*])? Into + &Into <$ty:ty> for $target:ty $(where [$($bounds:tt)*])? { + |$arg:tt| $($result:tt)* + } ) => { + #[allow(clippy::redundant_closure_call)] + #[allow(clippy::identity_conversion)] + impl <$($($impl_params)*)?> Into <$ty> for $target $(where $($bounds)*)? { + fn into(self) -> $ty { + (|$arg:Self| $($result)*)(self) + } + } + + #[allow(clippy::redundant_closure_call)] + #[allow(clippy::identity_conversion)] + impl <$($($impl_params)*)?> Into <$ty> for &$target $(where $($bounds)*)? { + fn into(self) -> $ty { + (|$arg:Self| $($result)*)(self) + } + } + }; + ($([$($impl_params:tt)*])? PhantomFrom<$ty:ty> for $target:ty { $($result:tt)* } ) => { diff --git a/src/rust/lib/system/web/Cargo.toml b/src/rust/lib/system/web/Cargo.toml index 4e0bbc623c..1d1366cee2 100644 --- a/src/rust/lib/system/web/Cargo.toml +++ b/src/rust/lib/system/web/Cargo.toml @@ -10,15 +10,19 @@ edition = "2018" default = ["console_error_panic_hook"] [dependencies] -data = { version = "0.1.0" , path = "../../data" } -enso-prelude = { version = "0.1.0" , path = "../../prelude" } -logger = { version = "0.1.0" , path = "../../logger" } -js-sys = { version = "0.3.28" } -wasm-bindgen = { version = "=0.2.58" , features = ["nightly"] } -failure = { version = "0.1.5" } -nalgebra = { version = "0.19.0" } +data = { version = "0.1.0" , path = "../../data" } +enso-prelude = { version = "0.1.0" , path = "../../prelude" } +logger = { version = "0.1.0" , path = "../../logger" } +js-sys = { version = "0.3.28" } +wasm-bindgen = { version = "=0.2.58" , features = ["nightly"] } +failure = { version = "0.1.5" } +nalgebra = { version = "0.19.0" } +wasm-bindgen-futures = { version = "0.4.8" } console_error_panic_hook = { version = "0.1.1", optional = true } +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +async-std = { version = "1.5.0" } + [dependencies.web-sys] version = "0.3.4" features = [ diff --git a/src/rust/lib/system/web/src/lib.rs b/src/rust/lib/system/web/src/lib.rs index 4fca5f4212..e5b39db48f 100644 --- a/src/rust/lib/system/web/src/lib.rs +++ b/src/rust/lib/system/web/src/lib.rs @@ -33,6 +33,8 @@ pub use web_sys::Node; pub use web_sys::Performance; pub use web_sys::WebGl2RenderingContext; pub use web_sys::Window; +pub use std::time::Duration; +pub use std::time::Instant; @@ -481,3 +483,87 @@ pub mod traits { pub use super::NodeInserter; pub use super::NodeRemover; } + +/// Sleeps for the specified amount of time. +/// +/// This function might sleep for slightly longer than the specified duration but never less. +/// +/// This function is an async version of std::thread::sleep, its timer starts just after the +/// function call. +#[cfg(target_arch = "wasm32")] +pub async fn sleep(duration:Duration) { + use wasm_bindgen_futures::JsFuture; + + let performance = performance(); + let call_milliseconds = performance.now(); + let future : JsFuture = js_sys::Promise::new(&mut |resolve:Function,_| { + let milliseconds_from_call = ((performance.now() - call_milliseconds) * 1000.0) as i32; + let duration = duration.as_millis() as i32; + let duration = (duration - milliseconds_from_call).max(0); + let window = window(); + let err = "Calling setTimeout failed."; + window.set_timeout_with_callback_and_timeout_and_arguments_0(&resolve,duration).expect(err); + }).into(); + // We don't expect any error coming from this Promise. + future.await.expect("setTimeout's future failed."); +} + +#[cfg(not(target_arch = "wasm32"))] +pub use async_std::task::sleep; + + + +// ============ +// === Test === +// ============ + +#[cfg(test)] +mod tests { + use super::*; + + use wasm_bindgen_test::wasm_bindgen_test; + use wasm_bindgen_test::wasm_bindgen_test_configure; + + wasm_bindgen_test_configure!(run_in_browser); + + #[cfg(target_arch = "wasm32")] + mod helpers { + type Instant = f64; + + pub fn now() -> Instant { + super::performance().now() + } + + pub fn elapsed(instant: Instant) -> f64 { + super::performance().now() - instant + } + } + + #[cfg(not(target_arch = "wasm32"))] + mod helpers { + use std::time::Instant; + + pub fn now() -> Instant { + Instant::now() + } + + pub fn elapsed(instant: Instant) -> f64 { + instant.elapsed().as_secs_f64() + } + } + + #[wasm_bindgen_test(async)] + async fn async_sleep() { + let instant = helpers::now(); + sleep(Duration::new(1,0)).await; + assert!(helpers::elapsed(instant) >= 1.0); + sleep(Duration::new(2,0)).await; + assert!(helpers::elapsed(instant) >= 3.0); + } + + #[test] + #[cfg(not(target_arch = "wasm32"))] + fn async_sleep_native() { + async_std::task::block_on(async_sleep()) + } +}