diff options
| author | Yacin Tmimi <yacintmimi@gmail.com> | 2024-09-10 01:15:02 -0400 |
|---|---|---|
| committer | Yacin Tmimi <yacintmimi@gmail.com> | 2024-09-10 01:15:02 -0400 |
| commit | 348a499e8bdd693df5be60bca4e6d9cef5230d0c (patch) | |
| tree | cd61736b244e71c4e0f55c78a30366b3307c6f86 /src/test | |
| parent | e1712ea92f008e3e58cecda8716cfb669f4e62ca (diff) | |
| parent | 182a20378b3a844e3677ff93d96f8ac70b9f009a (diff) | |
| download | rust-348a499e8bdd693df5be60bca4e6d9cef5230d0c.tar.gz rust-348a499e8bdd693df5be60bca4e6d9cef5230d0c.zip | |
Merge remote-tracking branch 'upstream/master' into subtree-push-nightly-2024-09-10
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/configuration_snippet.rs | 4 | ||||
| -rw-r--r-- | src/test/mod.rs | 64 |
2 files changed, 56 insertions, 12 deletions
diff --git a/src/test/configuration_snippet.rs b/src/test/configuration_snippet.rs index e4a390ada66..5b93703de0b 100644 --- a/src/test/configuration_snippet.rs +++ b/src/test/configuration_snippet.rs @@ -4,9 +4,9 @@ use std::io::{BufRead, BufReader, Write}; use std::iter::Enumerate; use std::path::{Path, PathBuf}; -use super::{print_mismatches, write_message, DIFF_CONTEXT_SIZE}; +use super::{DIFF_CONTEXT_SIZE, print_mismatches, write_message}; use crate::config::{Config, EmitMode, Verbosity}; -use crate::rustfmt_diff::{make_diff, Mismatch}; +use crate::rustfmt_diff::{Mismatch, make_diff}; use crate::{Input, Session}; const CONFIGURATIONS_FILE_NAME: &str = "Configurations.md"; diff --git a/src/test/mod.rs b/src/test/mod.rs index 286e8b8760a..28f95ee54e5 100644 --- a/src/test/mod.rs +++ b/src/test/mod.rs @@ -6,14 +6,17 @@ use std::iter::Peekable; use std::mem; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; -use std::str::Chars; +use std::str::{Chars, FromStr}; use std::thread; use crate::config::{Color, Config, EmitMode, FileName, NewlineStyle}; use crate::formatting::{ReportedErrors, SourceFile}; -use crate::rustfmt_diff::{make_diff, print_diff, DiffLine, Mismatch, ModifiedChunk, OutputWriter}; +use crate::rustfmt_diff::{DiffLine, Mismatch, ModifiedChunk, OutputWriter, make_diff, print_diff}; use crate::source_file; -use crate::{is_nightly_channel, FormatReport, FormatReportFormatterBuilder, Input, Session}; +use crate::{ + Edition, FormatReport, FormatReportFormatterBuilder, Input, Session, StyleEdition, Version, + is_nightly_channel, +}; use rustfmt_config_proc_macro::nightly_only_test; use tracing::{debug, warn}; @@ -711,13 +714,24 @@ fn print_mismatches<T: Fn(u32) -> String>( fn read_config(filename: &Path) -> Config { let sig_comments = read_significant_comments(filename); + let (edition, style_edition, version) = get_editions_from_comments(&sig_comments); // Look for a config file. If there is a 'config' property in the significant comments, use // that. Otherwise, if there are no significant comments at all, look for a config file with // the same name as the test file. let mut config = if !sig_comments.is_empty() { - get_config(sig_comments.get("config").map(Path::new)) + get_config( + sig_comments.get("config").map(Path::new), + edition, + style_edition, + version, + ) } else { - get_config(filename.with_extension("toml").file_name().map(Path::new)) + get_config( + filename.with_extension("toml").file_name().map(Path::new), + edition, + style_edition, + version, + ) }; for (key, val) in &sig_comments { @@ -748,13 +762,31 @@ enum IdempotentCheckError { Parse, } +fn get_editions_from_comments( + comments: &HashMap<String, String>, +) -> (Option<Edition>, Option<StyleEdition>, Option<Version>) { + ( + comments + .get("edition") + .map(|e| Edition::from_str(e).expect(&format!("invalid edition value: '{}'", e))), + comments.get("style_edition").map(|se| { + StyleEdition::from_str(se).expect(&format!("invalid style_edition value: '{}'", se)) + }), + comments + .get("version") + .map(|v| Version::from_str(v).expect(&format!("invalid version value: '{}'", v))), + ) +} + fn idempotent_check( filename: &PathBuf, opt_config: &Option<PathBuf>, ) -> Result<FormatReport, IdempotentCheckError> { let sig_comments = read_significant_comments(filename); let config = if let Some(ref config_file_path) = opt_config { - Config::from_toml_path(config_file_path).expect("`rustfmt.toml` not found") + let (edition, style_edition, version) = get_editions_from_comments(&sig_comments); + Config::from_toml_path(config_file_path, edition, style_edition, version) + .expect("`rustfmt.toml` not found") } else { read_config(filename) }; @@ -778,14 +810,19 @@ fn idempotent_check( // Reads test config file using the supplied (optional) file name. If there's no file name or the // file doesn't exist, just return the default config. Otherwise, the file must be read // successfully. -fn get_config(config_file: Option<&Path>) -> Config { +fn get_config( + config_file: Option<&Path>, + edition: Option<Edition>, + style_edition: Option<StyleEdition>, + version: Option<Version>, +) -> Config { let config_file_name = match config_file { - None => return Default::default(), + None => return Config::default_for_possible_style_edition(style_edition, edition, version), Some(file_name) => { let mut full_path = PathBuf::from("tests/config/"); full_path.push(file_name); if !full_path.exists() { - return Default::default(); + return Config::default_for_possible_style_edition(style_edition, edition, version); }; full_path } @@ -797,7 +834,14 @@ fn get_config(config_file: Option<&Path>) -> Config { .read_to_string(&mut def_config) .expect("Couldn't read config"); - Config::from_toml(&def_config, Path::new("tests/config/")).expect("invalid TOML") + Config::from_toml_for_style_edition( + &def_config, + Path::new("tests/config/"), + edition, + style_edition, + version, + ) + .expect("invalid TOML") } // Reads significant comments of the form: `// rustfmt-key: value` into a hash map. |
