Skip to content

Commit 5892d84

Browse files
committed
Replace trait IntoOsString with AsOsStr
to make std::path::Path also work
1 parent 1350a99 commit 5892d84

File tree

5 files changed

+22
-21
lines changed

5 files changed

+22
-21
lines changed

macros/src/lexer.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub fn scan_str_lit(lit: &Literal) -> TokenStream {
6464
}
6565
if !var.is_empty() {
6666
let var = syn::parse_str::<Ident>(&var).unwrap();
67-
output.extend(quote!(.append(&#var.into_os_string())));
67+
output.extend(quote!(.append(#var.as_os_str())));
6868
} else {
6969
output.extend(quote!(.append(&"$")));
7070
}
@@ -365,7 +365,7 @@ impl Lexer {
365365
let peek_no_gap = self.iter.peek_no_gap().map(|tt| tt.to_owned());
366366
// let peek_no_gap = None;
367367
if let Some(TokenTree::Ident(var)) = peek_no_gap {
368-
self.extend_last_arg(quote!(&#var.into_os_string()));
368+
self.extend_last_arg(quote!(#var.as_os_str()));
369369
} else if let Some(TokenTree::Group(g)) = peek_no_gap {
370370
if g.delimiter() != Delimiter::Brace && g.delimiter() != Delimiter::Bracket {
371371
abort!(
@@ -382,7 +382,7 @@ impl Lexer {
382382
abort!(span, "more than one variable in grouping");
383383
}
384384
if g.delimiter() == Delimiter::Brace {
385-
self.extend_last_arg(quote!(&#var.into_os_string()));
385+
self.extend_last_arg(quote!(#var.as_os_str()));
386386
} else {
387387
if !self.last_arg_str.is_empty() {
388388
abort!(span, "vector variable can only be used alone");

macros/src/lib.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ pub fn use_builtin_cmd(item: proc_macro::TokenStream) -> proc_macro::TokenStream
140140
pub fn run_cmd(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
141141
let cmds = lexer::Lexer::new(input.into()).scan().parse(false);
142142
quote! ({
143-
use ::cmd_lib::IntoOsString;
143+
use ::cmd_lib::AsOsStr;
144144
#cmds.run_cmd()
145145
})
146146
.into()
@@ -162,7 +162,7 @@ pub fn run_cmd(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
162162
pub fn run_fun(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
163163
let cmds = lexer::Lexer::new(input.into()).scan().parse(false);
164164
quote! ({
165-
use ::cmd_lib::IntoOsString;
165+
use ::cmd_lib::AsOsStr;
166166
#cmds.run_fun()
167167
})
168168
.into()
@@ -184,7 +184,7 @@ pub fn run_fun(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
184184
pub fn spawn(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
185185
let cmds = lexer::Lexer::new(input.into()).scan().parse(true);
186186
quote! ({
187-
use ::cmd_lib::IntoOsString;
187+
use ::cmd_lib::AsOsStr;
188188
#cmds.spawn()
189189
})
190190
.into()
@@ -196,7 +196,7 @@ pub fn spawn(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
196196
pub fn cmd_error(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
197197
let msg = parse_msg(input.into());
198198
quote!({
199-
use ::cmd_lib::IntoOsString;
199+
use ::cmd_lib::AsOsStr;
200200
::cmd_lib::log::error!("{}", #msg)
201201
})
202202
.into()
@@ -208,7 +208,7 @@ pub fn cmd_error(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
208208
pub fn cmd_warn(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
209209
let msg = parse_msg(input.into());
210210
quote!({
211-
use ::cmd_lib::IntoOsString;
211+
use ::cmd_lib::AsOsStr;
212212
::cmd_lib::log::warn!("{}", #msg)
213213
})
214214
.into()
@@ -220,7 +220,7 @@ pub fn cmd_warn(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
220220
pub fn cmd_echo(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
221221
let msg = parse_msg(input.into());
222222
quote!({
223-
use ::cmd_lib::IntoOsString;
223+
use ::cmd_lib::AsOsStr;
224224
println!("{}", #msg)
225225
})
226226
.into()
@@ -241,7 +241,7 @@ pub fn cmd_echo(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
241241
pub fn cmd_info(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
242242
let msg = parse_msg(input.into());
243243
quote!({
244-
use ::cmd_lib::IntoOsString;
244+
use ::cmd_lib::AsOsStr;
245245
::cmd_lib::log::info!("{}", #msg)
246246
})
247247
.into()
@@ -253,7 +253,7 @@ pub fn cmd_info(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
253253
pub fn cmd_debug(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
254254
let msg = parse_msg(input.into());
255255
quote!({
256-
use ::cmd_lib::IntoOsString;
256+
use ::cmd_lib::AsOsStr;
257257
::cmd_lib::log::debug!("{}", #msg)
258258
})
259259
.into()
@@ -265,7 +265,7 @@ pub fn cmd_debug(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
265265
pub fn cmd_trace(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
266266
let msg = parse_msg(input.into());
267267
quote!({
268-
use ::cmd_lib::IntoOsString;
268+
use ::cmd_lib::AsOsStr;
269269
::cmd_lib::log::trace!("{}", #msg)
270270
})
271271
.into()
@@ -290,7 +290,7 @@ pub fn cmd_trace(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
290290
pub fn cmd_die(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
291291
let msg = parse_msg(input.into());
292292
quote!({
293-
use ::cmd_lib::IntoOsString;
293+
use ::cmd_lib::AsOsStr;
294294
::cmd_lib::log::error!("FATAL: {}", #msg);
295295
std::process::exit(1)
296296
})

src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,7 @@ pub use child::CmdChildren;
337337
pub use log;
338338
pub use logger::init_builtin_logger;
339339
pub use process::{
340-
export_cmd, set_debug, set_pipefail, Cmd, CmdEnv, CmdString, Cmds, GroupCmds, IntoOsString,
341-
Redirect,
340+
export_cmd, set_debug, set_pipefail, AsOsStr, Cmd, CmdEnv, CmdString, Cmds, GroupCmds, Redirect,
342341
};
343342

344343
mod builtins;

src/process.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![allow(clippy::wrong_self_convention)]
21
use crate::child::{CmdChild, CmdChildren};
32
use crate::io::{CmdIn, CmdOut};
43
use crate::{builtin_true, CmdResult, FunResult};
@@ -536,12 +535,12 @@ impl Cmd {
536535
}
537536

538537
#[doc(hidden)]
539-
pub trait IntoOsString {
540-
fn into_os_string(&self) -> OsString;
538+
pub trait AsOsStr {
539+
fn as_os_str(&self) -> OsString;
541540
}
542541

543-
impl<T: ToString> IntoOsString for T {
544-
fn into_os_string(&self) -> OsString {
542+
impl<T: ToString> AsOsStr for T {
543+
fn as_os_str(&self) -> OsString {
545544
OsString::from(self.to_string())
546545
}
547546
}

tests/test_macros.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,9 @@ fn test_buitin_stdout_redirect() {
268268

269269
#[test]
270270
fn test_path_as_var() {
271-
let dir = std::path::PathBuf::from("/");
271+
let dir = std::path::Path::new("/");
272272
assert_eq!("/", run_fun!(cd $dir; pwd).unwrap());
273+
274+
let dir2 = std::path::PathBuf::from("/");
275+
assert_eq!("/", run_fun!(cd $dir2; pwd).unwrap());
273276
}

0 commit comments

Comments
 (0)