From 9168a12679976ece5e94dd9cf6abe3c8886e31cc Mon Sep 17 00:00:00 2001 From: Sawbez <63512091+Sawbez@users.noreply.github.com> Date: Wed, 15 Feb 2023 07:42:38 -0800 Subject: [PATCH] [docs] `flake8-self` Private member access docs (#2912) --- README.md | 2 +- .../rules/private_member_access.rs | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b00ee02f9b..45a48828be 100644 --- a/README.md +++ b/README.md @@ -1287,7 +1287,7 @@ For more, see [flake8-self](https://pypi.org/project/flake8-self/) on PyPI. | Code | Name | Message | Fix | | ---- | ---- | ------- | --- | -| SLF001 | private-member-access | Private member accessed: `{access}` | | +| SLF001 | [private-member-access](https://beta.ruff.rs/docs/rules/private-member-access/) | Private member accessed: `{access}` | | ### flake8-simplify (SIM) diff --git a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs index 99c12c4974..eeb2d458c1 100644 --- a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs +++ b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs @@ -9,6 +9,42 @@ use crate::registry::Diagnostic; use crate::violation::Violation; define_violation!( + /// ## What it does + /// Checks for accesses on "private" class members. + /// + /// ## Why is this bad? + /// In Python, the convention is such that class members that are prefixed + /// with a single underscore, or prefixed but not suffixed with a double + /// underscore, are considered private and intended for internal use. + /// + /// Using such "private" members is considered a misuse of the class, as + /// there are no guarantees that the member will be present in future + /// versions, that it will have the same type, or that it will have the same + /// behavior. Instead, use the class's public interface. + /// + /// ## Example + /// ```python + /// class Class: + /// def __init__(self): + /// self._private_member = "..." + /// + /// var = Class() + /// print(var._private_member) + /// ``` + /// + /// Use instead: + /// ```python + /// class Class: + /// def __init__(self): + /// self.public_member = "..." + /// + /// var = Class() + /// print(var.public_member) + /// ``` + /// + /// ## References + /// * [_What is the meaning of single or double underscores before an object name?_](https://stackoverflow.com/questions/1301346/what-is-the-meaning-of-single-and-double-underscore-before-an-object-name) + /// ``` pub struct PrivateMemberAccess { pub access: String, }