From c826a94f698fcc8302e549e737d5cb01c766a5d9 Mon Sep 17 00:00:00 2001 From: Andreas Rottmann Date: Wed, 9 Jan 2019 00:44:18 +0100 Subject: Fix macros for selective import via `use` Allow the import of any macro with `use` while not requiring the user to import macros that are invoked by the imported macro. This feature was add with Rust 1.30, so adjust the travis build and README accordingly. This fixes issue #99. --- .travis.yml | 5 +---- README.md | 2 +- src/cell.rs | 2 +- src/lib.rs | 4 ++-- src/row.rs | 18 +++++++++--------- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index b9a554a..2ac8945 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,6 @@ language: rust rust: -- 1.26.2 -- 1.27.2 -- 1.28.0 -- 1.29.0 +- 1.30.0 - stable - beta - nightly diff --git a/README.md b/README.md index 7f3d2de..337f4c2 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Include the library as a dependency to your project by adding the following line prettytable-rs = "^0.8" ``` -The library requires at least `rust v1.26.0`. +The library requires at least `rust v1.30.0`. ## Basic usage diff --git a/src/cell.rs b/src/cell.rs index f27b1bd..61e71ca 100644 --- a/src/cell.rs +++ b/src/cell.rs @@ -314,7 +314,7 @@ macro_rules! cell { $crate::Cell::new(&$value.to_string()) }; ($style:ident -> $value:expr) => { - cell!($value).style_spec(stringify!($style)) + $crate::cell!($value).style_spec(stringify!($style)) }; } diff --git a/src/lib.rs b/src/lib.rs index 0674793..cc9dd0b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -567,7 +567,7 @@ impl<'a, T, E> Slice<'a, E> for T #[macro_export] macro_rules! table { ($([$($content:tt)*]), *) => ( - $crate::Table::init(vec![$(row![$($content)*]), *]) + $crate::Table::init(vec![$($crate::row![$($content)*]), *]) ); } @@ -578,7 +578,7 @@ macro_rules! table { macro_rules! ptable { ($($content:tt)*) => ( { - let tab = table!($($content)*); + let tab = $crate::table!($($content)*); tab.printstd(); tab } diff --git a/src/row.rs b/src/row.rs index 5f34a24..94c0d8e 100644 --- a/src/row.rs +++ b/src/row.rs @@ -304,15 +304,15 @@ impl Extend for Row { #[macro_export] macro_rules! row { (($($out:tt)*);) => (vec![$($out)*]); - (($($out:tt)*); $value:expr) => (vec![$($out)* cell!($value)]); - (($($out:tt)*); $value:expr, $($n:tt)*) => (row!(($($out)* cell!($value),); $($n)*)); - (($($out:tt)*); $style:ident -> $value:expr) => (vec![$($out)* cell!($style -> $value)]); - (($($out:tt)*); $style:ident -> $value:expr, $($n: tt)*) => (row!(($($out)* cell!($style -> $value),); $($n)*)); - - ($($content:expr), *) => ($crate::Row::new(vec![$(cell!($content)), *])); // This line may not be needed starting from Rust 1.20 - ($style:ident => $($content:expr), *) => ($crate::Row::new(vec![$(cell!($style -> $content)), *])); - ($style:ident => $($content:expr,) *) => ($crate::Row::new(vec![$(cell!($style -> $content)), *])); - ($($content:tt)*) => ($crate::Row::new(row!((); $($content)*))); + (($($out:tt)*); $value:expr) => (vec![$($out)* $crate::cell!($value)]); + (($($out:tt)*); $value:expr, $($n:tt)*) => ($crate::row!(($($out)* $crate::cell!($value),); $($n)*)); + (($($out:tt)*); $style:ident -> $value:expr) => (vec![$($out)* $crate::cell!($style -> $value)]); + (($($out:tt)*); $style:ident -> $value:expr, $($n: tt)*) => ($crate::row!(($($out)* $crate::cell!($style -> $value),); $($n)*)); + + ($($content:expr), *) => ($crate::Row::new(vec![$($crate::cell!($content)), *])); // This line may not be needed starting from Rust 1.20 + ($style:ident => $($content:expr), *) => ($crate::Row::new(vec![$($crate::cell!($style -> $content)), *])); + ($style:ident => $($content:expr,) *) => ($crate::Row::new(vec![$($crate::cell!($style -> $content)), *])); + ($($content:tt)*) => ($crate::Row::new($crate::row!((); $($content)*))); } #[cfg(test)] -- cgit v1.2.3