## Summary This PR updates the formatter and linter to use the `PythonVersion` struct from the `ruff_python_ast` crate internally. While this doesn't remove the need for the `linter::PythonVersion` enum, it does remove the `formatter::PythonVersion` enum and limits the use in the linter to deserializing from CLI arguments and config files and moves most of the remaining methods to the `ast::PythonVersion` struct. ## Test Plan Existing tests, with some inputs and outputs updated to reflect the new (de)serialization format. I think these are test-specific and shouldn't affect any external (de)serialization. --------- Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
58 lines
1.9 KiB
Rust
58 lines
1.9 KiB
Rust
use ruff_linter::display_settings;
|
|
use ruff_linter::settings::types::{ExtensionMapping, FilePatternSet, PreviewMode};
|
|
use ruff_macros::CacheKey;
|
|
use ruff_python_ast::PythonVersion;
|
|
use std::collections::BTreeMap;
|
|
use std::fmt;
|
|
use std::path::PathBuf;
|
|
|
|
#[derive(Debug, Default, Clone, CacheKey)]
|
|
pub struct AnalyzeSettings {
|
|
pub exclude: FilePatternSet,
|
|
pub preview: PreviewMode,
|
|
pub target_version: PythonVersion,
|
|
pub detect_string_imports: bool,
|
|
pub include_dependencies: BTreeMap<PathBuf, (PathBuf, Vec<String>)>,
|
|
pub extension: ExtensionMapping,
|
|
}
|
|
|
|
impl fmt::Display for AnalyzeSettings {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
writeln!(f, "\n# Analyze Settings")?;
|
|
display_settings! {
|
|
formatter = f,
|
|
namespace = "analyze",
|
|
fields = [
|
|
self.exclude,
|
|
self.preview,
|
|
self.target_version,
|
|
self.detect_string_imports,
|
|
self.extension | debug,
|
|
self.include_dependencies | debug,
|
|
]
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, CacheKey)]
|
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
|
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
|
|
pub enum Direction {
|
|
/// Construct a map from module to its dependencies (i.e., the modules that it imports).
|
|
#[default]
|
|
Dependencies,
|
|
/// Construct a map from module to its dependents (i.e., the modules that import it).
|
|
Dependents,
|
|
}
|
|
|
|
impl fmt::Display for Direction {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
Self::Dependencies => write!(f, "\"dependencies\""),
|
|
Self::Dependents => write!(f, "\"dependents\""),
|
|
}
|
|
}
|
|
}
|