From 1183d28b1519c2b5fe92d6375baf9e0abfd6c7a2 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 28 Sep 2019 02:05:18 +0200 Subject: [PATCH 1/5] Remove uses of async_stream_block --- src/commands/autoview.rs | 8 +++- src/commands/clip.rs | 8 ++-- src/commands/plugin.rs | 8 +++- src/commands/save.rs | 79 +++++++++++++++++++++------------------- src/commands/table.rs | 7 +++- 5 files changed, 63 insertions(+), 47 deletions(-) diff --git a/src/commands/autoview.rs b/src/commands/autoview.rs index e715491e91..c3702b3f13 100644 --- a/src/commands/autoview.rs +++ b/src/commands/autoview.rs @@ -1,7 +1,6 @@ use crate::commands::{RawCommandArgs, WholeStreamCommand}; use crate::errors::ShellError; use crate::prelude::*; -use futures_async_stream::async_stream_block; pub struct Autoview; @@ -35,7 +34,7 @@ pub fn autoview( mut context: RunnableContext, raw: RawCommandArgs, ) -> Result { - Ok(OutputStream::new(async_stream_block! { + Ok(OutputStream::new(async_stream! { let input = context.input.drain_vec().await; if input.len() > 0 { @@ -89,6 +88,11 @@ pub fn autoview( result.collect::>().await; } } + + // Needed for async_stream to type check + if false { + yield ReturnSuccess::value(Value::nothing().tagged_unknown()); + } })) } diff --git a/src/commands/clip.rs b/src/commands/clip.rs index 2ef5bfac1d..ac3ded1d4b 100644 --- a/src/commands/clip.rs +++ b/src/commands/clip.rs @@ -5,7 +5,6 @@ pub mod clipboard { use crate::errors::ShellError; use crate::prelude::*; use futures::stream::StreamExt; - use futures_async_stream::async_stream_block; use clipboard::{ClipboardContext, ClipboardProvider}; @@ -40,10 +39,13 @@ pub mod clipboard { ClipArgs {}: ClipArgs, RunnableContext { input, name, .. }: RunnableContext, ) -> Result { - let stream = async_stream_block! { + let stream = async_stream! { let values: Vec> = input.values.collect().await; - inner_clip(values, name).await; + let mut clip_stream = inner_clip(values, name).await; + while let Some(value) = clip_stream.next().await { + yield value; + } }; let stream: BoxStream<'static, ReturnValue> = stream.boxed(); diff --git a/src/commands/plugin.rs b/src/commands/plugin.rs index 4e30b68f45..e769a7b5c7 100644 --- a/src/commands/plugin.rs +++ b/src/commands/plugin.rs @@ -3,7 +3,6 @@ use crate::errors::ShellError; use crate::parser::registry; use crate::prelude::*; use derive_new::new; -use futures_async_stream::async_stream_block; use log::trace; use serde::{self, Deserialize, Serialize}; use std::io::prelude::*; @@ -298,7 +297,7 @@ pub fn sink_plugin( let args = args.evaluate_once(registry)?; let call_info = args.call_info.clone(); - let stream = async_stream_block! { + let stream = async_stream! { let input: Vec> = args.input.values.collect().await; let request = JsonRpc::new("sink", (call_info.clone(), input)); @@ -313,6 +312,11 @@ pub fn sink_plugin( .expect("Failed to spawn child process"); let _ = child.wait(); + + // Needed for async_stream to type check + if false { + yield ReturnSuccess::value(Value::nothing().tagged_unknown()); + } }; Ok(OutputStream::new(stream)) } diff --git a/src/commands/save.rs b/src/commands/save.rs index 982e578a8a..e41116d682 100644 --- a/src/commands/save.rs +++ b/src/commands/save.rs @@ -2,13 +2,12 @@ use crate::commands::{UnevaluatedCallInfo, WholeStreamCommand}; use crate::data::Value; use crate::errors::ShellError; use crate::prelude::*; -use futures_async_stream::async_stream_block; use std::path::{Path, PathBuf}; pub struct Save; macro_rules! process_string { - ($input:ident, $name_tag:ident) => {{ + ($scope:tt, $input:ident, $name_tag:ident) => {{ let mut result_string = String::new(); for res in $input { match res { @@ -19,11 +18,11 @@ macro_rules! process_string { result_string.push_str(&s); } _ => { - yield core::task::Poll::Ready(Err(ShellError::labeled_error( + break $scope Err(ShellError::labeled_error( "Save could not successfully save", "unexpected data during save", $name_tag, - ))); + )); } } } @@ -32,7 +31,7 @@ macro_rules! process_string { } macro_rules! process_string_return_success { - ($result_vec:ident, $name_tag:ident) => {{ + ($scope:tt, $result_vec:ident, $name_tag:ident) => {{ let mut result_string = String::new(); for res in $result_vec { match res { @@ -43,11 +42,11 @@ macro_rules! process_string_return_success { result_string.push_str(&s); } _ => { - yield core::task::Poll::Ready(Err(ShellError::labeled_error( + break $scope Err(ShellError::labeled_error( "Save could not successfully save", "unexpected data during text save", $name_tag, - ))); + )); } } } @@ -56,7 +55,7 @@ macro_rules! process_string_return_success { } macro_rules! process_binary_return_success { - ($result_vec:ident, $name_tag:ident) => {{ + ($scope:tt, $result_vec:ident, $name_tag:ident) => {{ let mut result_binary: Vec = Vec::new(); for res in $result_vec { match res { @@ -69,11 +68,11 @@ macro_rules! process_binary_return_success { } } _ => { - yield core::task::Poll::Ready(Err(ShellError::labeled_error( + break $scope Err(ShellError::labeled_error( "Save could not successfully save", "unexpected data during binary save", $name_tag, - ))); + )); } } } @@ -131,7 +130,7 @@ fn save( let name_tag = name; let source_map = source_map.clone(); - let stream = async_stream_block! { + let stream = async_stream! { let input: Vec> = input.values.collect().await; if path.is_none() { // If there is no filename, check the metadata for the origin filename @@ -171,39 +170,43 @@ fn save( } } - let content : Result, ShellError> = if !save_raw { - if let Some(extension) = full_path.extension() { - let command_name = format!("to-{}", extension.to_str().unwrap()); - if let Some(converter) = registry.get_command(&command_name) { - let new_args = RawCommandArgs { - host, - shell_manager, - call_info: UnevaluatedCallInfo { - args: crate::parser::hir::Call { - head: raw_args.call_info.args.head, - positional: None, - named: None - }, - source: raw_args.call_info.source, - source_map: raw_args.call_info.source_map, - name_tag: raw_args.call_info.name_tag, + // TODO use label_break_value once it is stable: + // https://github.com/rust-lang/rust/issues/48594 + let content : Result, ShellError> = 'scope: loop { + break if !save_raw { + if let Some(extension) = full_path.extension() { + let command_name = format!("to-{}", extension.to_str().unwrap()); + if let Some(converter) = registry.get_command(&command_name) { + let new_args = RawCommandArgs { + host, + shell_manager, + call_info: UnevaluatedCallInfo { + args: crate::parser::hir::Call { + head: raw_args.call_info.args.head, + positional: None, + named: None + }, + source: raw_args.call_info.source, + source_map: raw_args.call_info.source_map, + name_tag: raw_args.call_info.name_tag, + } + }; + let mut result = converter.run(new_args.with_input(input), ®istry, false); + let result_vec: Vec> = result.drain_vec().await; + if converter.is_binary() { + process_binary_return_success!('scope, result_vec, name_tag) + } else { + process_string_return_success!('scope, result_vec, name_tag) } - }; - let mut result = converter.run(new_args.with_input(input), ®istry, false); - let result_vec: Vec> = result.drain_vec().await; - if converter.is_binary() { - process_binary_return_success!(result_vec, name_tag) } else { - process_string_return_success!(result_vec, name_tag) + process_string!('scope, input, name_tag) } } else { - process_string!(input, name_tag) + process_string!('scope, input, name_tag) } } else { - process_string!(input, name_tag) - } - } else { - Ok(string_from(&input).into_bytes()) + Ok(string_from(&input).into_bytes()) + }; }; match content { diff --git a/src/commands/table.rs b/src/commands/table.rs index 4efd6f821f..e9fbe35f2e 100644 --- a/src/commands/table.rs +++ b/src/commands/table.rs @@ -2,7 +2,6 @@ use crate::commands::WholeStreamCommand; use crate::errors::ShellError; use crate::format::TableView; use crate::prelude::*; -use futures_async_stream::async_stream_block; pub struct Table; @@ -32,7 +31,7 @@ impl WholeStreamCommand for Table { } pub fn table(_args: TableArgs, context: RunnableContext) -> Result { - let stream = async_stream_block! { + let stream = async_stream! { let input: Vec> = context.input.into_vec().await; if input.len() > 0 { let mut host = context.host.lock().unwrap(); @@ -41,6 +40,10 @@ pub fn table(_args: TableArgs, context: RunnableContext) -> Result Date: Sat, 28 Sep 2019 02:07:09 +0200 Subject: [PATCH 2/5] Remove use of nightly features --- src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ef7f3c3812..b17e6c0b38 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(generators)] -#![feature(proc_macro_hygiene)] #![recursion_limit = "512"] #[macro_use] From 1801c006ec893fbe6ad373b17987e3ab81401cf7 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 28 Sep 2019 02:07:28 +0200 Subject: [PATCH 3/5] Remove futures-async-stream dependency --- Cargo.lock | 43 ------------------------------------------- Cargo.toml | 1 - 2 files changed, 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c0730ef123..47348cd570 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -739,26 +739,6 @@ name = "futures" version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "futures-async-stream" -version = "0.1.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures-async-stream-macro 0.1.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "futures-async-stream-macro" -version = "0.1.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.1 (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.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "futures-channel-preview" version = "0.3.0-alpha.18" @@ -1553,7 +1533,6 @@ dependencies = [ "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "dunce 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "enum-utils 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-async-stream 0.1.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", "futures-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)", "futures-timer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures_codec 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1784,24 +1763,6 @@ dependencies = [ "ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "pin-project" -version = "0.4.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pin-project-internal 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pin-project-internal" -version = "0.4.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.1 (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.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "pin-utils" version = "0.1.0-alpha.4" @@ -3100,8 +3061,6 @@ dependencies = [ "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" "checksum futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "45dc39533a6cae6da2b56da48edae506bb767ec07370f86f70fc062e9d435869" -"checksum futures-async-stream 0.1.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f6311b428f208a8e7294aad3ddfa695cd68163e49880f4a3c3705e94c613c99b" -"checksum futures-async-stream-macro 0.1.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c7665811c2ea29c7fd309e48b1c1f52538b50fda641616a11eedadcf23ad29da" "checksum futures-channel-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "f477fd0292c4a4ae77044454e7f2b413207942ad405f759bb0b4698b7ace5b12" "checksum futures-core-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "4a2f26f774b81b3847dcda0c81bd4b6313acfb4f69e5a0390c7cb12c058953e9" "checksum futures-executor-preview 0.3.0-alpha.18 (registry+https://github.com/rust-lang/crates.io-index)" = "80705612926df8a1bc05f0057e77460e29318801f988bf7d803a734cf54e7528" @@ -3203,8 +3162,6 @@ dependencies = [ "checksum output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" "checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" -"checksum pin-project 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c6e7dd6a2ad14b55463a4b80ca7b6c3b373921310b61fcb3de5455ad2dea21f7" -"checksum pin-project-internal 0.4.0-alpha.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8cbe07d1ffd722968221af234aff370f5d02de3dea17decf536df93ee9af2fd3" "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" "checksum pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c1d2cfa5a714db3b5f24f0915e74fcdf91d09d496ba61329705dda7774d2af" "checksum platforms 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6cfec0daac55b13af394ceaaad095d17c790f77bdc9329264f06e49d6cd3206c" diff --git a/Cargo.toml b/Cargo.toml index 84b84ca416..7899b2db8f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,6 @@ chrono-humanize = "0.0.11" byte-unit = "3.0.1" base64 = "0.10.1" futures-preview = { version = "=0.3.0-alpha.18", features = ["compat", "io-compat"] } -futures-async-stream = "=0.1.0-alpha.5" async-stream = "0.1.1" futures_codec = "0.2.5" num-traits = "0.2.8" From 02d6614ae2e11787d1c33d0eb9e3da91f8161479 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 28 Sep 2019 02:59:04 +0200 Subject: [PATCH 4/5] Use language-reporting from git as it supports Rust stable --- Cargo.lock | 12 ++++++------ Cargo.toml | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47348cd570..267876726f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1214,12 +1214,12 @@ dependencies = [ [[package]] name = "language-reporting" version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/wycats/language-reporting#1e2100290fec96f69646e1e61482d80f7a8e7855" dependencies = [ "derive-new 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "render-tree 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "render-tree 0.1.1 (git+https://github.com/wycats/language-reporting)", "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1544,7 +1544,7 @@ dependencies = [ "image 0.22.2 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "language-reporting 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "language-reporting 0.3.1 (git+https://github.com/wycats/language-reporting)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "natural 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2117,7 +2117,7 @@ dependencies = [ [[package]] name = "render-tree" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/wycats/language-reporting#1e2100290fec96f69646e1e61482d80f7a8e7855" dependencies = [ "itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3105,7 +3105,7 @@ dependencies = [ "checksum jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b7d43206b34b3f94ea9445174bda196e772049b9bddbc620c9d29b2d20110d" "checksum js-sys 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "1efc4f2a556c58e79c5500912e221dd826bec64ff4aabd8ce71ccef6da02d7d4" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum language-reporting 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "628912b84af4304e1e7e78ebb6a1f503f3a973cba79d072d12e6eb40e7f815db" +"checksum language-reporting 0.3.1 (git+https://github.com/wycats/language-reporting)" = "" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" @@ -3202,7 +3202,7 @@ dependencies = [ "checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" "checksum regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b143cceb2ca5e56d5671988ef8b15615733e7ee16cd348e064333b251b89343f" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum render-tree 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "68ed587df09cfb7ce1bc6fe8f77e24db219f222c049326ccbfb948ec67e31664" +"checksum render-tree 0.1.1 (git+https://github.com/wycats/language-reporting)" = "" "checksum result 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560" "checksum roxmltree 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "153c367ce9fb8ef7afe637ef92bd083ba0f88b03ef3fcf0287d40be05ae0a61c" "checksum rusqlite 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2a194373ef527035645a1bc21b10dc2125f73497e6e155771233eb187aedd051" diff --git a/Cargo.toml b/Cargo.toml index 7899b2db8f..a3a5514dd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,8 @@ serde-hjson = "0.9.1" serde_yaml = "0.8" serde_bytes = "0.11.2" getset = "0.0.8" -language-reporting = "0.3.1" +#language-reporting = "0.3.1" +language-reporting = { git = "https://github.com/wycats/language-reporting" } app_dirs = "1.2.1" csv = "1.1" toml = "0.5.3" From b123f35d4b928c55e9f8e1bc5320e7a8ee917ff7 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 28 Sep 2019 02:22:21 +0200 Subject: [PATCH 5/5] Switch pinned compiler to Rust beta --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index 8f93bd146e..c3a3f37794 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2019-09-11 +beta-2019-09-25