mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-28 04:45:01 +00:00

Previously the rule documentation referenced configuration options via full https:// URLs, which was bad for several reasons: * changing the website would mean you'd have to change all URLs * the links didn't work when building mkdocs locally * the URLs showed up in the `ruff rule` output * broken references weren't detected by our CI This commit solves all of these problems by post-processing the Markdown, recognizing sections such as: ## Options * `flake8-tidy-imports.ban-relative-imports` `cargo dev generate-all` will automatically linkify such references and panic if the referenced option doesn't exist. Note that the option can also be linked in the other Markdown sections via e.g. [`flake8-tidy-imports.ban-relative-imports`] since the post-processing code generates a CommonMark link definition. Resolves #2766.
47 lines
No EOL
989 B
Markdown
47 lines
No EOL
989 B
Markdown
# complex-structure (C901)
|
|
|
|
Derived from the **mccabe** linter.
|
|
|
|
## What it does
|
|
Checks for functions with a high `McCabe` complexity.
|
|
|
|
The `McCabe` complexity of a function is a measure of the complexity of the
|
|
control flow graph of the function. It is calculated by adding one to the
|
|
number of decision points in the function. A decision point is a place in
|
|
the code where the program has a choice of two or more paths to follow.
|
|
|
|
## Why is this bad?
|
|
Functions with a high complexity are hard to understand and maintain.
|
|
|
|
## Options
|
|
|
|
* [`mccabe.max-complexity`]
|
|
|
|
## Example
|
|
```python
|
|
def foo(a, b, c):
|
|
if a:
|
|
if b:
|
|
if c:
|
|
return 1
|
|
else:
|
|
return 2
|
|
else:
|
|
return 3
|
|
else:
|
|
return 4
|
|
```
|
|
|
|
Use instead:
|
|
```python
|
|
def foo(a, b, c):
|
|
if not a:
|
|
return 4
|
|
if not b:
|
|
return 3
|
|
if not c:
|
|
return 2
|
|
return 1
|
|
```
|
|
|
|
[`mccabe.max-complexity`]: ../../settings#max-complexity |