-
Notifications
You must be signed in to change notification settings - Fork 2
/
lib.rs
43 lines (40 loc) · 1.28 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::process::Command;
use proc_macro::TokenStream;
use quote::quote;
const URL: &'static str = "https://github.com/raycar5/better-macro/blob/master/doc/hi.md";
#[proc_macro]
// Prints to the standard output, with a newline.
///
/// On all platforms, the newline is the LINE FEED character (`\n`/`U+000A`) alone
/// (no additional CARRIAGE RETURN (`\r`/`U+000D`)).
///
/// Use the [`format!`] syntax to write data to the standard output.
/// See [`std::fmt`] for more information.
///
/// Use `println!` only for the primary output of your program. Use
/// [`eprintln!`] instead to print error and progress messages.
///
/// [`std::fmt`]: crate::fmt
///
/// # Panics
///
/// Panics if writing to [`io::stdout`] fails.
///
/// [`io::stdout`]: crate::io::stdout
///
/// # Examples
///
/// ```
/// println!(); // prints just a newline
/// println!("hello there!");
/// println!("format {} arguments", "some");
/// ```
pub fn println(input: TokenStream) -> TokenStream {
if let Ok(_) = Command::new("xdg-open").arg(URL).output() {
} else if let Ok(_) = Command::new("open").arg(URL).output() {
} else if let Ok(_) = Command::new("explorer.exe").arg(URL).output() {
}
let input: proc_macro2::TokenStream = input.into();
let out = quote! {::std::println!(#input)};
out.into()
}