[pydoclint] Allow ignoring one line docstrings for DOC rules (#13302)

## Summary

Add a setting to allow ignoring one line docstrings for the pydoclint
rules.

Resolves #13086

Part of #12434

## Test Plan

Run tests with setting enabled.

---------

Co-authored-by: dylwil3 <dylwil3@gmail.com>
This commit is contained in:
Auguste Lalande 2025-01-16 17:05:10 -05:00 committed by GitHub
parent 177bf72598
commit e84c82424d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 407 additions and 3 deletions

View file

@ -49,7 +49,7 @@ use crate::options::{
Flake8QuotesOptions, Flake8SelfOptions, Flake8TidyImportsOptions, Flake8TypeCheckingOptions,
Flake8UnusedArgumentsOptions, FormatOptions, IsortOptions, LintCommonOptions, LintOptions,
McCabeOptions, Options, Pep8NamingOptions, PyUpgradeOptions, PycodestyleOptions,
PydocstyleOptions, PyflakesOptions, PylintOptions, RuffOptions,
PydoclintOptions, PydocstyleOptions, PyflakesOptions, PylintOptions, RuffOptions,
};
use crate::settings::{
FileResolverSettings, FormatterSettings, LineEnding, Settings, EXCLUDE, INCLUDE,
@ -404,6 +404,10 @@ impl Configuration {
..pycodestyle::settings::Settings::default()
}
},
pydoclint: lint
.pydoclint
.map(PydoclintOptions::into_settings)
.unwrap_or_default(),
pydocstyle: lint
.pydocstyle
.map(PydocstyleOptions::into_settings)
@ -635,6 +639,7 @@ pub struct LintConfiguration {
pub mccabe: Option<McCabeOptions>,
pub pep8_naming: Option<Pep8NamingOptions>,
pub pycodestyle: Option<PycodestyleOptions>,
pub pydoclint: Option<PydoclintOptions>,
pub pydocstyle: Option<PydocstyleOptions>,
pub pyflakes: Option<PyflakesOptions>,
pub pylint: Option<PylintOptions>,
@ -747,6 +752,7 @@ impl LintConfiguration {
mccabe: options.common.mccabe,
pep8_naming: options.common.pep8_naming,
pycodestyle: options.common.pycodestyle,
pydoclint: options.pydoclint,
pydocstyle: options.common.pydocstyle,
pyflakes: options.common.pyflakes,
pylint: options.common.pylint,
@ -1141,6 +1147,7 @@ impl LintConfiguration {
mccabe: self.mccabe.combine(config.mccabe),
pep8_naming: self.pep8_naming.combine(config.pep8_naming),
pycodestyle: self.pycodestyle.combine(config.pycodestyle),
pydoclint: self.pydoclint.combine(config.pydoclint),
pydocstyle: self.pydocstyle.combine(config.pydocstyle),
pyflakes: self.pyflakes.combine(config.pyflakes),
pylint: self.pylint.combine(config.pylint),

View file

@ -25,7 +25,7 @@ use ruff_linter::rules::{
flake8_copyright, flake8_errmsg, flake8_gettext, flake8_implicit_str_concat,
flake8_import_conventions, flake8_pytest_style, flake8_quotes, flake8_self,
flake8_tidy_imports, flake8_type_checking, flake8_unused_arguments, isort, mccabe, pep8_naming,
pycodestyle, pydocstyle, pyflakes, pylint, pyupgrade, ruff,
pycodestyle, pydoclint, pydocstyle, pyflakes, pylint, pyupgrade, ruff,
};
use ruff_linter::settings::types::{
IdentifierPattern, OutputFormat, PythonVersion, RequiredVersion,
@ -469,6 +469,10 @@ pub struct LintOptions {
)]
pub exclude: Option<Vec<String>>,
/// Options for the `pydoclint` plugin.
#[option_group]
pub pydoclint: Option<PydoclintOptions>,
/// Options for the `ruff` plugin
#[option_group]
pub ruff: Option<RuffOptions>,
@ -2938,6 +2942,35 @@ impl PydocstyleOptions {
}
}
#[derive(
Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize, OptionsMetadata, CombineOptions,
)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct PydoclintOptions {
/// Skip docstrings which fit on a single line.
///
/// Note: The corresponding setting in `pydoclint`
/// is named `skip-checking-short-docstrings`.
#[option(
default = r#"false"#,
value_type = "bool",
example = r#"
# Skip docstrings which fit on a single line.
ignore-one-line-docstrings = true
"#
)]
pub ignore_one_line_docstrings: Option<bool>,
}
impl PydoclintOptions {
pub fn into_settings(self) -> pydoclint::settings::Settings {
pydoclint::settings::Settings {
ignore_one_line_docstrings: self.ignore_one_line_docstrings.unwrap_or_default(),
}
}
}
#[derive(
Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize, OptionsMetadata, CombineOptions,
)]
@ -3646,6 +3679,7 @@ pub struct LintOptionsWire {
extend_per_file_ignores: Option<FxHashMap<String, Vec<RuleSelector>>>,
exclude: Option<Vec<String>>,
pydoclint: Option<PydoclintOptions>,
ruff: Option<RuffOptions>,
preview: Option<bool>,
}
@ -3699,6 +3733,7 @@ impl From<LintOptionsWire> for LintOptions {
per_file_ignores,
extend_per_file_ignores,
exclude,
pydoclint,
ruff,
preview,
} = value;
@ -3753,6 +3788,7 @@ impl From<LintOptionsWire> for LintOptions {
extend_per_file_ignores,
},
exclude,
pydoclint,
ruff,
preview,
}