mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-01 22:31:47 +00:00

* Infer target-version from project metadata * Fix requires-python with ">=3.8.16" * Load requires-python at runtime * Use upstream VersionSpecifiers * Add debug information when parsing ruff.toml * Display debug only if target_version is not set * Bump pep440-rs to add impl Error for Pep440Error
68 lines
1.9 KiB
Rust
68 lines
1.9 KiB
Rust
//! Utility to generate Ruff's `pyproject.toml` section from a Flake8 INI file.
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use anyhow::Result;
|
|
use clap::Parser;
|
|
use configparser::ini::Ini;
|
|
|
|
use ruff::flake8_to_ruff::{self, ExternalConfig};
|
|
use ruff::logging::{set_up_logging, LogLevel};
|
|
|
|
#[derive(Parser)]
|
|
#[command(
|
|
about = "Convert existing Flake8 configuration to Ruff.",
|
|
long_about = None
|
|
)]
|
|
struct Args {
|
|
/// Path to the Flake8 configuration file (e.g., `setup.cfg`, `tox.ini`, or
|
|
/// `.flake8`).
|
|
#[arg(required = true)]
|
|
file: PathBuf,
|
|
/// Optional path to a `pyproject.toml` file, used to ensure compatibility
|
|
/// with Black.
|
|
#[arg(long)]
|
|
pyproject: Option<PathBuf>,
|
|
/// List of plugins to enable.
|
|
#[arg(long, value_delimiter = ',')]
|
|
plugin: Option<Vec<flake8_to_ruff::Plugin>>,
|
|
}
|
|
|
|
fn main() -> Result<()> {
|
|
set_up_logging(&LogLevel::Default)?;
|
|
|
|
let args = Args::parse();
|
|
|
|
// Read the INI file.
|
|
let mut ini = Ini::new_cs();
|
|
ini.set_multiline(true);
|
|
let config = ini.load(args.file).map_err(|msg| anyhow::anyhow!(msg))?;
|
|
|
|
// Read the pyproject.toml file.
|
|
let pyproject = args.pyproject.map(flake8_to_ruff::parse).transpose()?;
|
|
let external_config = pyproject
|
|
.as_ref()
|
|
.and_then(|pyproject| pyproject.tool.as_ref())
|
|
.map(|tool| ExternalConfig {
|
|
black: tool.black.as_ref(),
|
|
isort: tool.isort.as_ref(),
|
|
..Default::default()
|
|
})
|
|
.unwrap_or_default();
|
|
let external_config = ExternalConfig {
|
|
project: pyproject
|
|
.as_ref()
|
|
.and_then(|pyproject| pyproject.project.as_ref()),
|
|
..external_config
|
|
};
|
|
|
|
// Create Ruff's pyproject.toml section.
|
|
let pyproject = flake8_to_ruff::convert(&config, &external_config, args.plugin)?;
|
|
|
|
#[allow(clippy::print_stdout)]
|
|
{
|
|
println!("{}", toml::to_string_pretty(&pyproject)?);
|
|
}
|
|
|
|
Ok(())
|
|
}
|