From e1beebc71a53d5ad9203a71f8f2764efaac2f649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 26 Sep 2020 20:26:51 +0200 Subject: [PATCH] refactor: factor out check_unstable op helper (#7695) --- cli/ops/fs.rs | 59 +++++++++++-------------------------- cli/ops/mod.rs | 11 +++++++ cli/ops/net.rs | 12 ++++---- cli/ops/os.rs | 12 +++----- cli/ops/plugin.rs | 3 +- cli/ops/process.rs | 3 +- cli/ops/runtime_compiler.rs | 8 ++--- cli/ops/signal.rs | 6 ++-- cli/ops/tls.rs | 3 +- cli/ops/tty.rs | 4 +-- cli/ops/worker_host.rs | 4 +-- 11 files changed, 51 insertions(+), 74 deletions(-) diff --git a/cli/ops/fs.rs b/cli/ops/fs.rs index 7610231c74..c5d1458fc9 100644 --- a/cli/ops/fs.rs +++ b/cli/ops/fs.rs @@ -282,10 +282,7 @@ fn op_fdatasync_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.fdatasync"); - } + super::check_unstable(state, "Deno.fdatasync"); let args: FdatasyncArgs = serde_json::from_value(args)?; let rid = args.rid as u32; std_file_resource(state, rid, |r| match r { @@ -300,7 +297,7 @@ async fn op_fdatasync_async( args: Value, _zero_copy: BufVec, ) -> Result { - super::global_state2(&state).check_unstable("Deno.fdatasync"); + super::check_unstable2(&state, "Deno.fdatasync"); let args: FdatasyncArgs = serde_json::from_value(args)?; let rid = args.rid as u32; @@ -322,10 +319,7 @@ fn op_fsync_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.fsync"); - } + super::check_unstable(state, "Deno.fsync"); let args: FsyncArgs = serde_json::from_value(args)?; let rid = args.rid as u32; std_file_resource(state, rid, |r| match r { @@ -340,7 +334,7 @@ async fn op_fsync_async( args: Value, _zero_copy: BufVec, ) -> Result { - super::global_state2(&state).check_unstable("Deno.fsync"); + super::check_unstable2(&state, "Deno.fsync"); let args: FsyncArgs = serde_json::from_value(args)?; let rid = args.rid as u32; @@ -362,10 +356,7 @@ fn op_fstat_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.fstat"); - } + super::check_unstable(state, "Deno.fstat"); let args: FstatArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let metadata = std_file_resource(state, rid, |r| match r { @@ -380,7 +371,7 @@ async fn op_fstat_async( args: Value, _zero_copy: BufVec, ) -> Result { - super::global_state2(&state).check_unstable("Deno.fstat"); + super::check_unstable2(&state, "Deno.fstat"); let args: FstatArgs = serde_json::from_value(args)?; let rid = args.rid as u32; @@ -404,10 +395,7 @@ fn op_umask( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.umask"); - } + super::check_unstable(state, "Deno.umask"); let args: UmaskArgs = serde_json::from_value(args)?; // TODO implement umask for Windows // see https://github.com/nodejs/node/blob/master/src/node_process_methods.cc @@ -1134,8 +1122,7 @@ fn op_link_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.link"); + super::check_unstable(state, "Deno.link"); let args: LinkArgs = serde_json::from_value(args)?; let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); @@ -1154,8 +1141,7 @@ async fn op_link_async( args: Value, _zero_copy: BufVec, ) -> Result { - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.link"); + super::check_unstable2(&state, "Deno.link"); let args: LinkArgs = serde_json::from_value(args)?; let oldpath = PathBuf::from(&args.oldpath); @@ -1198,8 +1184,7 @@ fn op_symlink_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.symlink"); + super::check_unstable(state, "Deno.symlink"); let args: SymlinkArgs = serde_json::from_value(args)?; let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); @@ -1250,8 +1235,7 @@ async fn op_symlink_async( args: Value, _zero_copy: BufVec, ) -> Result { - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.symlink"); + super::check_unstable2(&state, "Deno.symlink"); let args: SymlinkArgs = serde_json::from_value(args)?; let oldpath = PathBuf::from(&args.oldpath); @@ -1356,10 +1340,7 @@ fn op_ftruncate_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.ftruncate"); - } + super::check_unstable(state, "Deno.ftruncate"); let args: FtruncateArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let len = args.len as u64; @@ -1375,7 +1356,7 @@ async fn op_ftruncate_async( args: Value, _zero_copy: BufVec, ) -> Result { - super::global_state2(&state).check_unstable("Deno.ftruncate"); + super::check_unstable2(&state, "Deno.ftruncate"); let args: FtruncateArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let len = args.len as u64; @@ -1628,10 +1609,7 @@ fn op_futime_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.futimeSync"); - } + super::check_unstable(state, "Deno.futimeSync"); let args: FutimeArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let atime = filetime::FileTime::from_unix_time(args.atime.0, args.atime.1); @@ -1656,8 +1634,7 @@ async fn op_futime_async( _zero_copy: BufVec, ) -> Result { let mut state = state.borrow_mut(); - let cli_state = super::global_state(&state); - cli_state.check_unstable("Deno.futime"); + super::check_unstable(&state, "Deno.futime"); let args: FutimeArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let atime = filetime::FileTime::from_unix_time(args.atime.0, args.atime.1); @@ -1689,8 +1666,7 @@ fn op_utime_sync( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.utime"); + super::check_unstable(state, "Deno.utime"); let args: UtimeArgs = serde_json::from_value(args)?; let path = PathBuf::from(&args.path); @@ -1708,8 +1684,7 @@ async fn op_utime_async( _zero_copy: BufVec, ) -> Result { let state = state.borrow(); - let cli_state = super::global_state(&state); - cli_state.check_unstable("Deno.utime"); + super::check_unstable(&state, "Deno.utime"); let args: UtimeArgs = serde_json::from_value(args)?; let path = PathBuf::from(&args.path); diff --git a/cli/ops/mod.rs b/cli/ops/mod.rs index cbaa932aa1..c6d5cc1dca 100644 --- a/cli/ops/mod.rs +++ b/cli/ops/mod.rs @@ -58,6 +58,17 @@ where rt.register_op(name, metrics_op(json_op_sync(op_fn))); } +/// Helper for checking unstable features. Used for sync ops. +pub fn check_unstable(state: &OpState, api_name: &str) { + state.borrow::>().check_unstable(api_name) +} + +/// Helper for checking unstable features. Used for async ops. +pub fn check_unstable2(state: &Rc>, api_name: &str) { + let state = state.borrow(); + state.borrow::>().check_unstable(api_name) +} + /// Helper for extracting the commonly used state. Used for sync ops. pub fn global_state(state: &OpState) -> Arc { state.borrow::>().clone() diff --git a/cli/ops/net.rs b/cli/ops/net.rs index c0cb84a9b6..2be65e1ec2 100644 --- a/cli/ops/net.rs +++ b/cli/ops/net.rs @@ -304,8 +304,7 @@ async fn op_connect( transport_args: ArgsEnum::Unix(args), } if transport == "unix" => { let address_path = Path::new(&args.path); - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.connect"); + super::check_unstable2(&state, "Deno.connect"); { let state_ = state.borrow(); state_.borrow::().check_read(&address_path)?; @@ -349,7 +348,7 @@ fn op_shutdown( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - super::global_state(state).check_unstable("Deno.shutdown"); + super::check_unstable(state, "Deno.shutdown"); let args: ShutdownArgs = serde_json::from_value(args)?; @@ -493,7 +492,6 @@ fn op_listen( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); let permissions = state.borrow::(); match serde_json::from_value(args)? { ListenArgs { @@ -502,7 +500,7 @@ fn op_listen( } => { { if transport == "udp" { - cli_state.check_unstable("Deno.listenDatagram"); + super::check_unstable(state, "Deno.listenDatagram"); } permissions.check_net(&args.hostname, args.port)?; } @@ -535,10 +533,10 @@ fn op_listen( let address_path = Path::new(&args.path); { if transport == "unix" { - cli_state.check_unstable("Deno.listen"); + super::check_unstable(state, "Deno.listen"); } if transport == "unixpacket" { - cli_state.check_unstable("Deno.listenDatagram"); + super::check_unstable(state, "Deno.listenDatagram"); } permissions.check_read(&address_path)?; permissions.check_write(&address_path)?; diff --git a/cli/ops/os.rs b/cli/ops/os.rs index 4b28f898e7..5265d4d086 100644 --- a/cli/ops/os.rs +++ b/cli/ops/os.rs @@ -122,8 +122,7 @@ fn op_loadavg( _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.loadavg"); + super::check_unstable(state, "Deno.loadavg"); state.borrow::().check_env()?; match sys_info::loadavg() { Ok(loadavg) => Ok(json!([loadavg.one, loadavg.five, loadavg.fifteen])), @@ -136,8 +135,7 @@ fn op_hostname( _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.hostname"); + super::check_unstable(state, "Deno.hostname"); state.borrow::().check_env()?; let hostname = sys_info::hostname().unwrap_or_else(|_| "".to_string()); Ok(json!(hostname)) @@ -148,8 +146,7 @@ fn op_os_release( _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.osRelease"); + super::check_unstable(state, "Deno.osRelease"); state.borrow::().check_env()?; let release = sys_info::os_release().unwrap_or_else(|_| "".to_string()); Ok(json!(release)) @@ -160,8 +157,7 @@ fn op_system_memory_info( _args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.systemMemoryInfo"); + super::check_unstable(state, "Deno.systemMemoryInfo"); state.borrow::().check_env()?; match sys_info::mem_info() { Ok(info) => Ok(json!({ diff --git a/cli/ops/plugin.rs b/cli/ops/plugin.rs index f929a89d3d..1f3669b6f0 100644 --- a/cli/ops/plugin.rs +++ b/cli/ops/plugin.rs @@ -42,8 +42,7 @@ pub fn op_open_plugin( let args: OpenPluginArgs = serde_json::from_value(args)?; let filename = PathBuf::from(&args.filename); - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.openPlugin"); + super::check_unstable(state, "Deno.openPlugin"); let permissions = state.borrow::(); permissions.check_plugin(&filename)?; diff --git a/cli/ops/process.rs b/cli/ops/process.rs index 48b945f07c..026c6833e2 100644 --- a/cli/ops/process.rs +++ b/cli/ops/process.rs @@ -227,8 +227,7 @@ fn op_kill( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); - cli_state.check_unstable("Deno.kill"); + super::check_unstable(state, "Deno.kill"); state.borrow::().check_run()?; let args: KillArgs = serde_json::from_value(args)?; diff --git a/cli/ops/runtime_compiler.rs b/cli/ops/runtime_compiler.rs index 91e638033e..b06e511575 100644 --- a/cli/ops/runtime_compiler.rs +++ b/cli/ops/runtime_compiler.rs @@ -34,9 +34,9 @@ async fn op_compile( args: Value, _data: BufVec, ) -> Result { - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.compile"); + super::check_unstable2(&state, "Deno.compile"); let args: CompileArgs = serde_json::from_value(args)?; + let cli_state = super::global_state2(&state); let global_state = cli_state.clone(); let permissions = { let state = state.borrow(); @@ -76,9 +76,9 @@ async fn op_transpile( args: Value, _data: BufVec, ) -> Result { - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.transpile"); + super::check_unstable2(&state, "Deno.transpile"); let args: TranspileArgs = serde_json::from_value(args)?; + let cli_state = super::global_state2(&state); let global_state = cli_state.clone(); let result = runtime_transpile(global_state, &args.sources, &args.options).await?; diff --git a/cli/ops/signal.rs b/cli/ops/signal.rs index 4159de84a0..be6bc0a355 100644 --- a/cli/ops/signal.rs +++ b/cli/ops/signal.rs @@ -52,7 +52,7 @@ fn op_signal_bind( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - super::global_state(state).check_unstable("Deno.signal"); + super::check_unstable(state, "Deno.signal"); let args: BindSignalArgs = serde_json::from_value(args)?; let rid = state.resource_table.add( "signal", @@ -72,7 +72,7 @@ async fn op_signal_poll( args: Value, _zero_copy: BufVec, ) -> Result { - super::global_state2(&state).check_unstable("Deno.signal"); + super::check_unstable2(&state, "Deno.signal"); let args: SignalArgs = serde_json::from_value(args)?; let rid = args.rid as u32; @@ -96,7 +96,7 @@ pub fn op_signal_unbind( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - super::global_state(state).check_unstable("Deno.signal"); + super::check_unstable(state, "Deno.signal"); let args: SignalArgs = serde_json::from_value(args)?; let rid = args.rid as u32; let resource = state.resource_table.get_mut::(rid); diff --git a/cli/ops/tls.rs b/cli/ops/tls.rs index 1b812c33f9..37fd8f2068 100644 --- a/cli/ops/tls.rs +++ b/cli/ops/tls.rs @@ -76,8 +76,7 @@ async fn op_start_tls( domain.push_str("localhost"); } { - let cli_state = super::global_state2(&state); - cli_state.check_unstable("Deno.startTls"); + super::check_unstable2(&state, "Deno.startTls"); let s = state.borrow(); let permissions = s.borrow::(); permissions.check_net(&domain, 0)?; diff --git a/cli/ops/tty.rs b/cli/ops/tty.rs index 7673090540..01ed73a051 100644 --- a/cli/ops/tty.rs +++ b/cli/ops/tty.rs @@ -64,7 +64,7 @@ fn op_set_raw( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - super::global_state(state).check_unstable("Deno.setRaw"); + super::check_unstable(state, "Deno.setRaw"); let args: SetRawArgs = serde_json::from_value(args)?; let rid = args.rid; @@ -275,7 +275,7 @@ fn op_console_size( args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { - super::global_state(state).check_unstable("Deno.consoleSize"); + super::check_unstable(state, "Deno.consoleSize"); let args: ConsoleSizeArgs = serde_json::from_value(args)?; let rid = args.rid; diff --git a/cli/ops/worker_host.rs b/cli/ops/worker_host.rs index 058ffaa315..60262b4f62 100644 --- a/cli/ops/worker_host.rs +++ b/cli/ops/worker_host.rs @@ -184,7 +184,6 @@ fn op_create_worker( args: Value, _data: &mut [ZeroCopyBuf], ) -> Result { - let cli_state = super::global_state(state); let args: CreateWorkerArgs = serde_json::from_value(args)?; let specifier = args.specifier.clone(); @@ -196,7 +195,7 @@ fn op_create_worker( let args_name = args.name; let use_deno_namespace = args.use_deno_namespace; if use_deno_namespace { - cli_state.check_unstable("Worker.deno"); + super::check_unstable(state, "Worker.deno"); } let permissions = state.borrow::().clone(); let worker_id = state.take::(); @@ -204,6 +203,7 @@ fn op_create_worker( let module_specifier = ModuleSpecifier::resolve_url(&specifier)?; let worker_name = args_name.unwrap_or_else(|| "".to_string()); + let cli_state = super::global_state(state); let (join_handle, worker_handle) = run_worker_thread( worker_id,