Add schemars feature (#4305)

This commit is contained in:
Micha Reiser 2023-05-09 16:15:18 +02:00 committed by GitHub
parent e7dfb35778
commit 99a755f936
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 162 additions and 215 deletions

View file

@ -56,7 +56,7 @@ result-like = { version = "0.4.6" }
rustc-hash = { workspace = true } rustc-hash = { workspace = true }
rustpython-common = { workspace = true } rustpython-common = { workspace = true }
rustpython-parser = { workspace = true } rustpython-parser = { workspace = true }
schemars = { workspace = true } schemars = { workspace = true, optional = true }
semver = { version = "1.0.16" } semver = { version = "1.0.16" }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
@ -80,5 +80,6 @@ colored = { workspace = true, features = ["no-color"] }
[features] [features]
default = [] default = []
schemars = ["dep:schemars"]
logical_lines = [] logical_lines = []
jupyter_notebook = [] jupyter_notebook = []

View file

@ -1,9 +1,5 @@
use std::str::FromStr; use std::str::FromStr;
use itertools::Itertools;
use schemars::_serde_json::Value;
use schemars::schema::{InstanceType, Schema, SchemaObject};
use schemars::JsonSchema;
use serde::de::{self, Visitor}; use serde::de::{self, Visitor};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
@ -198,6 +194,17 @@ pub(crate) const fn prefix_to_selector(prefix: RuleCodePrefix) -> RuleSelector {
} }
} }
#[cfg(feature = "schemars")]
mod schema {
use crate::registry::RuleNamespace;
use crate::rule_selector::{Linter, Rule, RuleCodePrefix};
use crate::RuleSelector;
use itertools::Itertools;
use schemars::_serde_json::Value;
use schemars::schema::{InstanceType, Schema, SchemaObject};
use schemars::JsonSchema;
use strum::IntoEnumIterator;
impl JsonSchema for RuleSelector { impl JsonSchema for RuleSelector {
fn schema_name() -> String { fn schema_name() -> String {
"RuleSelector".to_string() "RuleSelector".to_string()
@ -253,6 +260,7 @@ impl JsonSchema for RuleSelector {
}) })
} }
} }
}
impl RuleSelector { impl RuleSelector {
pub(crate) fn specificity(&self) -> Specificity { pub(crate) fn specificity(&self) -> Specificity {

View file

@ -1,19 +1,17 @@
//! Settings for the `flake-annotations` plugin. //! Settings for the `flake-annotations` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::CacheKey; use ruff_macros::CacheKey;
use ruff_macros::ConfigurationOptions; use ruff_macros::ConfigurationOptions;
#[derive( #[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions)]
Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8AnnotationsOptions" rename = "Flake8AnnotationsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "false", default = "false",

View file

@ -1,6 +1,5 @@
//! Settings for the `flake8-bandit` plugin. //! Settings for the `flake8-bandit` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
@ -11,14 +10,13 @@ fn default_tmp_dirs() -> Vec<String> {
.to_vec() .to_vec()
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8BanditOptions" rename = "Flake8BanditOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "[\"/tmp\", \"/var/tmp\", \"/dev/shm\"]", default = "[\"/tmp\", \"/var/tmp\", \"/dev/shm\"]",

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-bugbear` plugin. //! Settings for the `flake8-bugbear` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions)]
Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8BugbearOptions" rename = "Flake8BugbearOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"[]"#, default = r#"[]"#,

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-builtins` plugin. //! Settings for the `flake8-builtins` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions)]
Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8BuiltinsOptions" rename = "Flake8BuiltinsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"[]"#, default = r#"[]"#,

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-comprehensions` plugin. //! Settings for the `flake8-comprehensions` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions)]
Debug, PartialEq, Eq, Default, Serialize, Deserialize, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8ComprehensionsOptions" rename = "Flake8ComprehensionsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "false", default = "false",

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-errmsg` plugin. //! Settings for the `flake8-errmsg` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8ErrMsgOptions" rename = "Flake8ErrMsgOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option(default = "0", value_type = "int", example = "max-string-length = 20")] #[option(default = "0", value_type = "int", example = "max-string-length = 20")]
/// Maximum string length for string literals in exception messages. /// Maximum string length for string literals in exception messages.

View file

@ -1,16 +1,14 @@
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8GetTextOptions" rename = "Flake8GetTextOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"["_", "gettext", "ngettext"]"#, default = r#"["_", "gettext", "ngettext"]"#,

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-implicit-str-concat` plugin. //! Settings for the `flake8-implicit-str-concat` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8ImplicitStrConcatOptions" rename = "Flake8ImplicitStrConcatOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"true"#, default = r#"true"#,

View file

@ -1,7 +1,6 @@
//! Settings for import conventions. //! Settings for import conventions.
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
@ -21,14 +20,13 @@ const CONVENTIONAL_ALIASES: &[(&str, &str)] = &[
("pyarrow", "pa"), ("pyarrow", "pa"),
]; ];
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8ImportConventionsOptions" rename = "Flake8ImportConventionsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"{"altair": "alt", "matplotlib": "mpl", "matplotlib.pyplot": "plt", "numpy": "np", "pandas": "pd", "seaborn": "sns", "tensorflow": "tf", "holoviews": "hv", "panel": "pn", "plotly.express": "px", "polars": "pl", "pyarrow": "pa"}"#, default = r#"{"altair": "alt", "matplotlib": "mpl", "matplotlib.pyplot": "plt", "numpy": "np", "pandas": "pd", "seaborn": "sns", "tensorflow": "tf", "holoviews": "hv", "panel": "pn", "plotly.express": "px", "polars": "pl", "pyarrow": "pa"}"#,

View file

@ -1,6 +1,5 @@
//! Settings for the `flake8-pytest-style` plugin. //! Settings for the `flake8-pytest-style` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
@ -21,14 +20,13 @@ fn default_broad_exceptions() -> Vec<String> {
.to_vec() .to_vec()
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8PytestStyleOptions" rename = "Flake8PytestStyleOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "true", default = "true",

View file

@ -1,11 +1,9 @@
use ruff_macros::CacheKey;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter}; use std::fmt::{Display, Formatter};
use schemars::JsonSchema; #[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize)]
use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
use ruff_macros::CacheKey;
#[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum ParametrizeNameType { pub enum ParametrizeNameType {
#[serde(rename = "csv")] #[serde(rename = "csv")]
Csv, Csv,
@ -31,7 +29,8 @@ impl Display for ParametrizeNameType {
} }
} }
#[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] #[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum ParametrizeValuesType { pub enum ParametrizeValuesType {
#[serde(rename = "tuple")] #[serde(rename = "tuple")]
Tuple, Tuple,
@ -54,7 +53,8 @@ impl Display for ParametrizeValuesType {
} }
} }
#[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] #[derive(Clone, Copy, Debug, CacheKey, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum ParametrizeValuesRowType { pub enum ParametrizeValuesRowType {
#[serde(rename = "tuple")] #[serde(rename = "tuple")]
Tuple, Tuple,

View file

@ -1,12 +1,12 @@
//! Settings for the `flake8-quotes` plugin. //! Settings for the `flake8-quotes` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, JsonSchema)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum Quote { pub enum Quote {
/// Use single quotes. /// Use single quotes.
Single, Single,
@ -20,14 +20,13 @@ impl Default for Quote {
} }
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8QuotesOptions" rename = "Flake8QuotesOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#""double""#, default = r#""double""#,

View file

@ -1,6 +1,5 @@
//! Settings for the `flake8-self` plugin. //! Settings for the `flake8-self` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
@ -9,14 +8,13 @@ use ruff_macros::{CacheKey, ConfigurationOptions};
// prevent conflicts with field names. // prevent conflicts with field names.
const IGNORE_NAMES: [&str; 5] = ["_make", "_asdict", "_replace", "_fields", "_field_defaults"]; const IGNORE_NAMES: [&str; 5] = ["_make", "_asdict", "_replace", "_fields", "_field_defaults"];
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8SelfOptions" rename = "Flake8SelfOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"["_make", "_asdict", "_replace", "_fields", "_field_defaults"]"#, default = r#"["_make", "_asdict", "_replace", "_fields", "_field_defaults"]"#,

View file

@ -1,6 +1,5 @@
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use rustpython_parser::ast::{Expr, Located}; use rustpython_parser::ast::{Expr, Located};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::checkers::ast::Checker; use crate::checkers::ast::Checker;
@ -10,8 +9,9 @@ use ruff_python_ast::call_path::from_qualified_name;
pub type Settings = FxHashMap<String, ApiBan>; pub type Settings = FxHashMap<String, ApiBan>;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, JsonSchema)] #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct ApiBan { pub struct ApiBan {
/// The message to display when the API is used. /// The message to display when the API is used.
pub msg: String, pub msg: String,

View file

@ -1,7 +1,6 @@
//! Settings for the `flake8-tidy-imports` plugin. //! Settings for the `flake8-tidy-imports` plugin.
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::ConfigurationOptions; use ruff_macros::ConfigurationOptions;
@ -10,14 +9,13 @@ use super::banned_api::ApiBan;
use super::relative_imports::Strictness; use super::relative_imports::Strictness;
use super::Settings; use super::Settings;
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8TidyImportsOptions" rename = "Flake8TidyImportsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#""parents""#, default = r#""parents""#,

View file

@ -1,5 +1,4 @@
use rustpython_parser::ast::{Stmt, StmtKind}; use rustpython_parser::ast::{Stmt, StmtKind};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation};
@ -13,10 +12,9 @@ use crate::registry::AsRule;
pub type Settings = Strictness; pub type Settings = Strictness;
#[derive( #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, Default)]
Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, JsonSchema, Default,
)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum Strictness { pub enum Strictness {
/// Ban imports that extend into the parent module or beyond. /// Ban imports that extend into the parent module or beyond.
#[default] #[default]

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-type-checking` plugin. //! Settings for the `flake8-type-checking` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8TypeCheckingOptions" rename = "Flake8TypeCheckingOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "false", default = "false",

View file

@ -1,18 +1,16 @@
//! Settings for the `flake8-unused-arguments` plugin. //! Settings for the `flake8-unused-arguments` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Flake8UnusedArgumentsOptions" rename = "Flake8UnusedArgumentsOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "false", default = "false",

View file

@ -4,7 +4,6 @@ use std::{fs, iter};
use log::debug; use log::debug;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum_macros::EnumIter; use strum_macros::EnumIter;
@ -27,11 +26,11 @@ use super::types::{ImportBlock, Importable};
Hash, Hash,
Serialize, Serialize,
Deserialize, Deserialize,
JsonSchema,
CacheKey, CacheKey,
EnumIter, EnumIter,
)] )]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum ImportType { pub enum ImportType {
Future, Future,
StandardLibrary, StandardLibrary,
@ -40,10 +39,9 @@ pub enum ImportType {
LocalFolder, LocalFolder,
} }
#[derive( #[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash, Serialize, Deserialize, CacheKey)]
Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash, Serialize, Deserialize, JsonSchema, CacheKey,
)]
#[serde(untagged)] #[serde(untagged)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum ImportSection { pub enum ImportSection {
Known(ImportType), Known(ImportType),
UserDefined(String), UserDefined(String),

View file

@ -4,7 +4,6 @@ use std::collections::BTreeSet;
use std::hash::BuildHasherDefault; use std::hash::BuildHasherDefault;
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
@ -16,8 +15,9 @@ use crate::warn_user_once;
use super::categorize::ImportSection; use super::categorize::ImportSection;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, JsonSchema)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum RelativeImportsOrder { pub enum RelativeImportsOrder {
/// Place "closer" imports (fewer `.` characters, most local) before /// Place "closer" imports (fewer `.` characters, most local) before
/// "further" imports (more `.` characters, least local). /// "further" imports (more `.` characters, least local).
@ -33,14 +33,13 @@ impl Default for RelativeImportsOrder {
} }
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "IsortOptions" rename = "IsortOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"false"#, default = r#"false"#,

View file

@ -1,18 +1,15 @@
//! Settings for the `mccabe` plugin. //! Settings for the `mccabe` plugin.
use schemars::JsonSchema; use ruff_macros::{CacheKey, ConfigurationOptions};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
#[derive(
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "McCabeOptions" rename = "McCabeOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "10", default = "10",

View file

@ -1,9 +1,7 @@
//! Settings for the `pep8-naming` plugin. //! Settings for the `pep8-naming` plugin.
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; use ruff_macros::{CacheKey, ConfigurationOptions};
use serde::{Deserialize, Serialize};
const IGNORE_NAMES: [&str; 12] = [ const IGNORE_NAMES: [&str; 12] = [
"setUp", "setUp",
@ -20,14 +18,13 @@ const IGNORE_NAMES: [&str; 12] = [
"maxDiff", "maxDiff",
]; ];
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "Pep8NamingOptions" rename = "Pep8NamingOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"["setUp", "tearDown", "setUpClass", "tearDownClass", "setUpModule", "tearDownModule", "asyncSetUp", "asyncTearDown", "setUpTestData", "failureException", "longMessage", "maxDiff"]"#, default = r#"["setUp", "tearDown", "setUpClass", "tearDownClass", "setUpModule", "tearDownModule", "asyncSetUp", "asyncTearDown", "setUpTestData", "failureException", "longMessage", "maxDiff"]"#,

View file

@ -1,14 +1,11 @@
//! Settings for the `pycodestyle` plugin. //! Settings for the `pycodestyle` plugin.
use schemars::JsonSchema; use ruff_macros::{CacheKey, ConfigurationOptions};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
#[derive(
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde(deny_unknown_fields, rename_all = "kebab-case", rename = "Pycodestyle")] #[serde(deny_unknown_fields, rename_all = "kebab-case", rename = "Pycodestyle")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = "None", default = "None",

View file

@ -1,16 +1,13 @@
//! Settings for the `pydocstyle` plugin. //! Settings for the `pydocstyle` plugin.
use crate::registry::Rule;
use ruff_macros::{CacheKey, ConfigurationOptions};
use serde::{Deserialize, Serialize};
use std::collections::BTreeSet; use std::collections::BTreeSet;
use schemars::JsonSchema; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, CacheKey)]
use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions};
use crate::registry::Rule;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, CacheKey)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum Convention { pub enum Convention {
/// Use Google-style docstrings. /// Use Google-style docstrings.
Google, Google,
@ -71,10 +68,9 @@ impl Convention {
} }
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde(deny_unknown_fields, rename_all = "kebab-case", rename = "Pydocstyle")] #[serde(deny_unknown_fields, rename_all = "kebab-case", rename = "Pydocstyle")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"None"#, default = r#"None"#,

View file

@ -1,14 +1,13 @@
//! Settings for the `pylint` plugin. //! Settings for the `pylint` plugin.
use anyhow::anyhow; use anyhow::anyhow;
use ruff_macros::{CacheKey, ConfigurationOptions};
use rustpython_parser::ast::Constant; use rustpython_parser::ast::Constant;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey, JsonSchema)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum ConstantType { pub enum ConstantType {
Bytes, Bytes,
Complex, Complex,
@ -36,14 +35,13 @@ impl TryFrom<&Constant> for ConstantType {
} }
} }
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "PylintOptions" rename = "PylintOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"["str", "bytes"]"#, default = r#"["str", "bytes"]"#,

View file

@ -1,18 +1,15 @@
//! Settings for the `pyupgrade` plugin. //! Settings for the `pyupgrade` plugin.
use schemars::JsonSchema; use ruff_macros::{CacheKey, ConfigurationOptions};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ruff_macros::{CacheKey, ConfigurationOptions}; #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
#[derive(
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde( #[serde(
deny_unknown_fields, deny_unknown_fields,
rename_all = "kebab-case", rename_all = "kebab-case",
rename = "PyUpgradeOptions" rename = "PyUpgradeOptions"
)] )]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"false"#, default = r#"false"#,

View file

@ -1,10 +1,5 @@
//! Options that the user can provide via pyproject.toml. //! Options that the user can provide via pyproject.toml.
use ruff_macros::ConfigurationOptions;
use rustc_hash::FxHashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::rule_selector::RuleSelector; use crate::rule_selector::RuleSelector;
use crate::rules::{ use crate::rules::{
flake8_annotations, flake8_bandit, flake8_bugbear, flake8_builtins, flake8_comprehensions, flake8_annotations, flake8_bandit, flake8_bugbear, flake8_builtins, flake8_comprehensions,
@ -14,11 +9,13 @@ use crate::rules::{
pyupgrade, pyupgrade,
}; };
use crate::settings::types::{PythonVersion, SerializationFormat, Version}; use crate::settings::types::{PythonVersion, SerializationFormat, Version};
use ruff_macros::ConfigurationOptions;
use rustc_hash::FxHashMap;
use serde::{Deserialize, Serialize};
#[derive( #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions)]
Debug, PartialEq, Eq, Serialize, Deserialize, Default, ConfigurationOptions, JsonSchema,
)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Options { pub struct Options {
#[option( #[option(
default = r#"[]"#, default = r#"[]"#,
@ -164,7 +161,7 @@ pub struct Options {
/// ///
/// This option has been **deprecated** in favor of `ignore` /// This option has been **deprecated** in favor of `ignore`
/// since its usage is now interchangeable with `ignore`. /// since its usage is now interchangeable with `ignore`.
#[schemars(skip)] #[cfg_attr(feature = "schemars", schemars(skip))]
pub extend_ignore: Option<Vec<RuleSelector>>, pub extend_ignore: Option<Vec<RuleSelector>>,
#[option( #[option(
default = "[]", default = "[]",

View file

@ -1,14 +1,12 @@
use anyhow::{bail, Result};
use globset::{Glob, GlobSet, GlobSetBuilder};
use pep440_rs::{Version as Pep440Version, VersionSpecifiers};
use serde::{de, Deserialize, Deserializer, Serialize};
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use std::ops::Deref; use std::ops::Deref;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr; use std::str::FromStr;
use std::string::ToString; use std::string::ToString;
use anyhow::{bail, Result};
use globset::{Glob, GlobSet, GlobSetBuilder};
use pep440_rs::{Version as Pep440Version, VersionSpecifiers};
use schemars::JsonSchema;
use serde::{de, Deserialize, Deserializer, Serialize};
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use strum_macros::EnumIter; use strum_macros::EnumIter;
@ -20,21 +18,11 @@ use crate::registry::RuleSet;
use crate::rule_selector::RuleSelector; use crate::rule_selector::RuleSelector;
#[derive( #[derive(
Clone, Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq, Serialize, Deserialize, CacheKey, EnumIter,
Copy,
Debug,
PartialOrd,
Ord,
PartialEq,
Eq,
Serialize,
Deserialize,
JsonSchema,
CacheKey,
EnumIter,
)] )]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
#[serde(rename_all = "lowercase")] #[serde(rename_all = "lowercase")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum PythonVersion { pub enum PythonVersion {
Py37, Py37,
Py38, Py38,
@ -218,9 +206,10 @@ impl FromStr for PatternPrefixPair {
} }
} }
#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Debug, JsonSchema, Hash)] #[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Debug, Hash)]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum SerializationFormat { pub enum SerializationFormat {
Text, Text,
Json, Json,
@ -238,8 +227,9 @@ impl Default for SerializationFormat {
} }
} }
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Hash)] #[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(try_from = "String")] #[serde(try_from = "String")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Version(String); pub struct Version(String);
impl TryFrom<String> for Version { impl TryFrom<String> for Version {

View file

@ -6,7 +6,7 @@ edition = { workspace = true }
rust-version = { workspace = true } rust-version = { workspace = true }
[dependencies] [dependencies]
ruff = { path = "../ruff" } ruff = { path = "../ruff", features = ["schemars"] }
ruff_cli = { path = "../ruff_cli" } ruff_cli = { path = "../ruff_cli" }
ruff_diagnostics = { path = "../ruff_diagnostics" } ruff_diagnostics = { path = "../ruff_diagnostics" }

View file

@ -9,7 +9,7 @@ rust-version = { workspace = true }
[dependencies] [dependencies]
ruff_rustpython = { path = "../ruff_rustpython" } ruff_rustpython = { path = "../ruff_rustpython" }
ruff_text_size = { workspace = true, features = ["serde"] } ruff_text_size = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
bitflags = { workspace = true } bitflags = { workspace = true }
@ -26,3 +26,6 @@ rustpython-common = { workspace = true }
rustpython-parser = { workspace = true } rustpython-parser = { workspace = true }
serde = { workspace = true, optional = true } serde = { workspace = true, optional = true }
smallvec = { workspace = true } smallvec = { workspace = true }
[features]
serde = ["dep:serde", "ruff_text_size/serde"]