use super::*;
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(rename_all = "lowercase")]
pub enum Plugins {
Eslint,
Import,
Jest,
Jsdoc,
#[serde(rename = "jsx-a11y")]
JsxA11y,
NextJs,
Node,
Oxc,
Promise,
React,
#[serde(rename = "react-perf")]
ReactPerf,
Regex,
Typescript,
Unicorn,
Vitest,
Vue,
}
impl Plugins {
pub const fn as_str(&self) -> &str {
match self {
Self::Eslint => "eslint",
Self::Import => "import",
Self::Jest => "jest",
Self::Jsdoc => "jsdoc",
Self::JsxA11y => "jsx-a11y",
Self::NextJs => "nextjs",
Self::Node => "node",
Self::Oxc => "oxc",
Self::Promise => "promise",
Self::React => "react",
Self::ReactPerf => "react-perf",
Self::Regex => "regex",
Self::Typescript => "typescript",
Self::Unicorn => "unicorn",
Self::Vitest => "vitest",
Self::Vue => "vue",
}
}
}
impl Plugin {
pub const fn as_str(&self) -> &str {
match self {
Self::Known(variant) => variant.as_str(),
Self::Custom(name) => name.as_str(),
}
}
}
impl PartialOrd for Plugin {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}
impl Ord for Plugin {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
self.as_str().cmp(other.as_str())
}
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(untagged)]
pub enum Plugin {
Known(Plugins),
Custom(String),
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(untagged, rename_all = "camelCase")]
pub enum TagNamePreference {
String(String),
Data {
message: String,
replacement: String,
},
Message {
message: String,
},
Bool(bool),
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(rename_all = "camelCase")]
#[serde(default)]
#[serde(deny_unknown_fields)]
pub struct JsDocPluginSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub augments_extends_replaces_docs: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exempt_destructured_roots_from_chekcs: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ignore_internal: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ignore_private: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ignore_replaces_docs: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub implements_replaces_docs: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub override_replaces_docs: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag_name_preference: Option<BTreeMap<String, TagNamePreference>>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(rename_all = "camelCase")]
#[serde(default)]
#[serde(deny_unknown_fields)]
pub struct JsxA11yPluginSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub attributes: Option<BTreeMap<String, BTreeSet<String>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub components: Option<BTreeMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub polymorphic_prop_name: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(rename_all = "camelCase")]
#[serde(deny_unknown_fields)]
pub struct NextPluginSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub root_dir: Option<OneOrManyStrings>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(untagged)]
pub enum OneOrManyStrings {
One(String),
Many(BTreeSet<String>),
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(rename_all = "camelCase")]
#[serde(deny_unknown_fields)]
#[serde(default)]
pub struct ReactPluginSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub form_components: Option<Vec<CustomComponent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub link_components: Option<Vec<CustomComponent>>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[serde(untagged)]
pub enum CustomComponent {
NameOnly(String),
ObjectWithOneAttr {
name: String,
#[serde(alias = "formAttribute", alias = "linkAttribute")]
attribute: String,
},
ObjectWithManyAttrs {
name: String,
#[serde(alias = "formAttribute", alias = "linkAttribute")]
attributes: BTreeSet<String>,
},
}