X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fconfig%2Foptions.rs;h=c0491630c000e2bdd4c5bbbdc87cd80b20a46aa2;hb=612e8d5b9be72713a081370c85cc5bed30b6fae6;hp=028ad2d37572fbcfcd8699adebc04c19b27a6996;hpb=d6a220b70a375ae722c7d6c1c069fbf6298b6260;p=rust.git diff --git a/src/config/options.rs b/src/config/options.rs index 028ad2d3757..c0491630c00 100644 --- a/src/config/options.rs +++ b/src/config/options.rs @@ -1,6 +1,7 @@ use std::collections::{hash_set, HashSet}; use std::fmt; use std::path::{Path, PathBuf}; +use std::str::FromStr; use itertools::Itertools; use rustfmt_config_proc_macro::config_type; @@ -99,6 +100,31 @@ pub fn to_list_tactic(self, len: usize) -> ListTactic { } } +#[config_type] +/// Configuration for import groups, i.e. sets of imports separated by newlines. +pub enum GroupImportsTactic { + /// Keep groups as they are. + Preserve, + /// Discard existing groups, and create new groups for + /// 1. `std` / `core` / `alloc` imports + /// 2. other imports + /// 3. `self` / `crate` / `super` imports + StdExternalCrate, +} + +#[config_type] +/// How to merge imports. +pub enum ImportGranularity { + /// Do not merge imports. + Preserve, + /// Use one `use` statement per crate. + Crate, + /// Use one `use` statement per module. + Module, + /// Use one `use` statement per imported item. + Item, +} + #[config_type] pub enum ReportTactic { Always, @@ -350,7 +376,7 @@ pub fn rustfmt_toml_path(&self) -> &Path { } } -impl ::std::str::FromStr for IgnoreList { +impl FromStr for IgnoreList { type Err = &'static str; fn from_str(_: &str) -> Result { @@ -376,6 +402,10 @@ pub enum Edition { #[doc_hint = "2018"] /// Edition 2018. Edition2018, + #[value = "2021"] + #[doc_hint = "2021"] + /// Edition 2021. + Edition2021, } impl Default for Edition { @@ -384,15 +414,22 @@ fn default() -> Edition { } } -impl Edition { - pub(crate) fn to_libsyntax_pos_edition(self) -> rustc_span::edition::Edition { - match self { - Edition::Edition2015 => rustc_span::edition::Edition::Edition2015, - Edition::Edition2018 => rustc_span::edition::Edition::Edition2018, +impl From for rustc_span::edition::Edition { + fn from(edition: Edition) -> Self { + match edition { + Edition::Edition2015 => Self::Edition2015, + Edition::Edition2018 => Self::Edition2018, + Edition::Edition2021 => Self::Edition2021, } } } +impl PartialOrd for Edition { + fn partial_cmp(&self, other: &Edition) -> Option { + rustc_span::edition::Edition::partial_cmp(&(*self).into(), &(*other).into()) + } +} + /// Controls how rustfmt should handle leading pipes on match arms. #[config_type] pub enum MatchArmLeadingPipe {