From eec74360dce0be790b537ab41239bd9b876741d2 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Fri, 31 Aug 2018 00:04:23 -0700 Subject: [PATCH] Accept 2015 and 2018 instead of Edition2015 and Edition2018 for edition option --- .travis.yml | 2 +- Configurations.md | 6 ++--- README.md | 2 +- rustfmt.toml | 2 +- src/config/options.rs | 45 +++++++++++++++++++++++------------ tests/source/async_block.rs | 2 +- tests/source/async_fn.rs | 2 +- tests/source/catch.rs | 2 +- tests/source/issue-2927-2.rs | 2 +- tests/source/issue-2927.rs | 2 +- tests/target/async_block.rs | 2 +- tests/target/async_closure.rs | 2 +- tests/target/async_fn.rs | 2 +- tests/target/catch.rs | 2 +- tests/target/issue-2927-2.rs | 2 +- tests/target/issue-2927.rs | 2 +- 16 files changed, 47 insertions(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2d4dcf1c6011..f5242b79d5c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ matrix: - env: INTEGRATION=stdsimd - env: INTEGRATION=tempdir allow_failures: - # Needs `edition = "Edition2018"` in rustfmt.toml + # Needs `edition = "2018"` in rustfmt.toml - env: INTEGRATION=chalk # Fails tests, don't know why - env: INTEGRATION=crater diff --git a/Configurations.md b/Configurations.md index ab91f11be04e..ae8ea2b3c6d2 100644 --- a/Configurations.md +++ b/Configurations.md @@ -2176,8 +2176,8 @@ ignore = [ Specifies which edition is used by the parser. -- **Default value**: `Edition2015` -- **Possible values**: `Edition2015`, `Edition2018` +- **Default value**: `2015` +- **Possible values**: `2015`, `2018` - **Stable**: No ### Example @@ -2185,7 +2185,7 @@ Specifies which edition is used by the parser. If you want to format code that requires edition 2018, add the following to your config file: ```toml -edition = "Edition2018" +edition = "2018" ``` ## `emit_mode` diff --git a/README.md b/README.md index 37fdad5b9756..8d8bfcc1e019 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ cargo +nightly fmt To format code that requires edition 2018, create a `rustfmt.toml` [configuration](#configuring-rustfmt) file containing: ```toml -edition = "Edition2018" +edition = "2018" ``` ## Limitations diff --git a/rustfmt.toml b/rustfmt.toml index 6abb5a9ef6d1..94f741636522 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,3 @@ error_on_line_overflow = true error_on_unformatted = true -edition = "Edition2018" +edition = "2018" diff --git a/src/config/options.rs b/src/config/options.rs index d2a74f546776..ac80116e0d0d 100644 --- a/src/config/options.rs +++ b/src/config/options.rs @@ -20,7 +20,15 @@ use std::path::{Path, PathBuf}; /// Macro for deriving implementations of Serialize/Deserialize for enums #[macro_export] macro_rules! impl_enum_serialize_and_deserialize { - ( $e:ident, $( $x:ident ),* ) => { + (@stringify $variant:ident) => ( + stringify!($variant) + ); + + (@stringify $_variant:ident: $value:expr) => ( + stringify!($value) + ); + + ( $e:ident, $( $variant:ident $(: $value:expr)* ),* ) => { impl ::serde::ser::Serialize for $e { fn serialize(&self, serializer: S) -> Result where S: ::serde::ser::Serializer @@ -31,7 +39,9 @@ macro_rules! impl_enum_serialize_and_deserialize { #[allow(unreachable_patterns)] match *self { $( - $e::$x => serializer.serialize_str(stringify!($x)), + $e::$variant => serializer.serialize_str( + impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*) + ), )* _ => { Err(S::Error::custom(format!("Cannot serialize {:?}", self))) @@ -59,11 +69,13 @@ macro_rules! impl_enum_serialize_and_deserialize { } let s = d.deserialize_string(StringOnly::(PhantomData))?; $( - if stringify!($x).eq_ignore_ascii_case(&s) { - return Ok($e::$x); + if impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*) + .eq_ignore_ascii_case(&s) { + return Ok($e::$variant); } )* - static ALLOWED: &'static[&str] = &[$(stringify!($x),)*]; + static ALLOWED: &'static[&str] = &[ + $(impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*),)*]; Err(D::Error::unknown_variant(&s, ALLOWED)) } } @@ -73,8 +85,9 @@ macro_rules! impl_enum_serialize_and_deserialize { fn from_str(s: &str) -> Result { $( - if stringify!($x).eq_ignore_ascii_case(s) { - return Ok($e::$x); + if impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*) + .eq_ignore_ascii_case(s) { + return Ok($e::$variant); } )* Err("Bad variant") @@ -85,7 +98,9 @@ macro_rules! impl_enum_serialize_and_deserialize { fn doc_hint() -> String { let mut variants = Vec::new(); $( - variants.push(stringify!($x)); + variants.push( + impl_enum_serialize_and_deserialize!(@stringify $variant $(: $value)*) + ); )* format!("[{}]", variants.join("|")) } @@ -93,15 +108,15 @@ macro_rules! impl_enum_serialize_and_deserialize { }; } -macro_rules! configuration_option_enum{ - ($e:ident: $( $x:ident ),+ $(,)*) => { +macro_rules! configuration_option_enum { + ($e:ident: $( $name:ident $(: $value:expr)* ),+ $(,)*) => ( #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub enum $e { - $( $x ),+ + $( $name ),+ } - impl_enum_serialize_and_deserialize!($e, $( $x ),+); - } + impl_enum_serialize_and_deserialize!($e, $( $name $(: $value)* ),+); + ); } configuration_option_enum! { NewlineStyle: @@ -412,8 +427,8 @@ pub trait CliOptions { /// The edition of the compiler (RFC 2052) configuration_option_enum!{ Edition: - Edition2015, - Edition2018, + Edition2015: 2015, + Edition2018: 2018, } impl Edition { diff --git a/tests/source/async_block.rs b/tests/source/async_block.rs index 5e05e58c6c12..a7018316812d 100644 --- a/tests/source/async_block.rs +++ b/tests/source/async_block.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 fn main() { let x = async { diff --git a/tests/source/async_fn.rs b/tests/source/async_fn.rs index cae9d5badafa..f77dc73acd98 100644 --- a/tests/source/async_fn.rs +++ b/tests/source/async_fn.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 async fn bar() -> Result<(), ()> { Ok(()) diff --git a/tests/source/catch.rs b/tests/source/catch.rs index 6674e7eebe4b..541db1dc90c2 100644 --- a/tests/source/catch.rs +++ b/tests/source/catch.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 #![feature(try_blocks)] fn main() { diff --git a/tests/source/issue-2927-2.rs b/tests/source/issue-2927-2.rs index 0a8969c48370..d87761fdc9c3 100644 --- a/tests/source/issue-2927-2.rs +++ b/tests/source/issue-2927-2.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2015 +// rustfmt-edition: 2015 #![feature(rust_2018_preview, uniform_paths)] use futures::prelude::*; use http_03::cli::Cli; diff --git a/tests/source/issue-2927.rs b/tests/source/issue-2927.rs index 69871b484968..a7df32084f3b 100644 --- a/tests/source/issue-2927.rs +++ b/tests/source/issue-2927.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 #![feature(rust_2018_preview, uniform_paths)] use futures::prelude::*; use http_03::cli::Cli; diff --git a/tests/target/async_block.rs b/tests/target/async_block.rs index 611c719e95f7..5c1649373ade 100644 --- a/tests/target/async_block.rs +++ b/tests/target/async_block.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 fn main() { let x = async { Ok(()) }; diff --git a/tests/target/async_closure.rs b/tests/target/async_closure.rs index 1728460eb66e..db6405482c59 100644 --- a/tests/target/async_closure.rs +++ b/tests/target/async_closure.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 fn main() { let async_closure = async { diff --git a/tests/target/async_fn.rs b/tests/target/async_fn.rs index e23f04d28c02..bba220ee2504 100644 --- a/tests/target/async_fn.rs +++ b/tests/target/async_fn.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 async fn bar() -> Result<(), ()> { Ok(()) diff --git a/tests/target/catch.rs b/tests/target/catch.rs index 6987a19bcadb..ffe694f8e725 100644 --- a/tests/target/catch.rs +++ b/tests/target/catch.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 #![feature(try_blocks)] fn main() { diff --git a/tests/target/issue-2927-2.rs b/tests/target/issue-2927-2.rs index c9fdcdea2394..e895783ba8bb 100644 --- a/tests/target/issue-2927-2.rs +++ b/tests/target/issue-2927-2.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2015 +// rustfmt-edition: 2015 #![feature(rust_2018_preview, uniform_paths)] use futures::prelude::*; use http_03::cli::Cli; diff --git a/tests/target/issue-2927.rs b/tests/target/issue-2927.rs index 1aa34f017415..3267be28d7b7 100644 --- a/tests/target/issue-2927.rs +++ b/tests/target/issue-2927.rs @@ -1,4 +1,4 @@ -// rustfmt-edition: Edition2018 +// rustfmt-edition: 2018 #![feature(rust_2018_preview, uniform_paths)] use ::log::{error, info, log}; use futures::prelude::*;