diff --git a/.github/mypy-primer-ty.toml b/.github/mypy-primer-ty.toml index 0e8e75303e..9317364fe2 100644 --- a/.github/mypy-primer-ty.toml +++ b/.github/mypy-primer-ty.toml @@ -5,3 +5,4 @@ [rules] possibly-unresolved-reference = "warn" unused-ignore-comment = "warn" +division-by-zero = "warn" diff --git a/crates/ty/docs/rules.md b/crates/ty/docs/rules.md index 7772a0b1d1..5acf281cce 100644 --- a/crates/ty/docs/rules.md +++ b/crates/ty/docs/rules.md @@ -176,29 +176,6 @@ class B(A): ... * [View source](https://github.com/astral-sh/ruff/blob/main/crates%2Fty_python_semantic%2Fsrc%2Ftypes%2Fdiagnostic.rs#L195) -## `division-by-zero` - -**Default level**: error - -
-detects division by zero - -### What it does -It detects division by zero. - -### Why is this bad? -Dividing by zero raises a `ZeroDivisionError` at runtime. - -### Examples -```python -5 / 0 -``` - -### Links -* [Related issues](https://github.com/astral-sh/ty/issues?q=sort%3Aupdated-desc%20is%3Aissue%20is%3Aopen%20division-by-zero) -* [View source](https://github.com/astral-sh/ruff/blob/main/crates%2Fty_python_semantic%2Fsrc%2Ftypes%2Fdiagnostic.rs#L221) -
- ## `duplicate-base` **Default level**: error @@ -1743,6 +1720,29 @@ a = 20 / 0 # ty: ignore[division-by-zero] * [View source](https://github.com/astral-sh/ruff/blob/main/crates%2Fty_python_semantic%2Fsrc%2Fsuppression.rs#L40) +## `division-by-zero` + +**Default level**: ignore + +
+detects division by zero + +### What it does +It detects division by zero. + +### Why is this bad? +Dividing by zero raises a `ZeroDivisionError` at runtime. + +### Examples +```python +5 / 0 +``` + +### Links +* [Related issues](https://github.com/astral-sh/ty/issues?q=sort%3Aupdated-desc%20is%3Aissue%20is%3Aopen%20division-by-zero) +* [View source](https://github.com/astral-sh/ruff/blob/main/crates%2Fty_python_semantic%2Fsrc%2Ftypes%2Fdiagnostic.rs#L221) +
+ ## `possibly-unresolved-reference` **Default level**: ignore diff --git a/crates/ty/tests/cli.rs b/crates/ty/tests/cli.rs index f2d870744a..f0e7e2c0ba 100644 --- a/crates/ty/tests/cli.rs +++ b/crates/ty/tests/cli.rs @@ -387,22 +387,11 @@ fn configuration_rule_severity() -> anyhow::Result<()> { "#, )?; - // Assert that there's an `unresolved-reference` diagnostic (error) - // and a `division-by-zero` diagnostic (error). - assert_cmd_snapshot!(case.command(), @r" + // Assert that there's an `unresolved-reference` diagnostic (error). + assert_cmd_snapshot!(case.command(), @r###" success: false exit_code: 1 ----- stdout ----- - error[division-by-zero]: Cannot divide object of type `Literal[4]` by zero - --> test.py:2:5 - | - 2 | y = 4 / 0 - | ^^^^^ - 3 | - 4 | for a in range(0, int(y)): - | - info: rule `division-by-zero` is enabled by default - error[unresolved-reference]: Name `prin` used when not defined --> test.py:7:1 | @@ -413,17 +402,17 @@ fn configuration_rule_severity() -> anyhow::Result<()> { | info: rule `unresolved-reference` is enabled by default - Found 2 diagnostics + Found 1 diagnostic ----- stderr ----- WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors. - "); + "###); case.write_file( "pyproject.toml", r#" [tool.ty.rules] - division-by-zero = "warn" # demote to warn + division-by-zero = "warn" # promote to warn unresolved-reference = "ignore" "#, )?; @@ -468,9 +457,9 @@ fn cli_rule_severity() -> anyhow::Result<()> { "#, )?; - // Assert that there's an `unresolved-reference` diagnostic (error), - // a `division-by-zero` (error) and a unresolved-import (error) diagnostic by default. - assert_cmd_snapshot!(case.command(), @r" + // Assert that there's an `unresolved-reference` diagnostic (error) + // and an unresolved-import (error) diagnostic by default. + assert_cmd_snapshot!(case.command(), @r###" success: false exit_code: 1 ----- stdout ----- @@ -485,18 +474,6 @@ fn cli_rule_severity() -> anyhow::Result<()> { info: make sure your Python environment is properly configured: https://github.com/astral-sh/ty/blob/main/docs/README.md#python-environment info: rule `unresolved-import` is enabled by default - error[division-by-zero]: Cannot divide object of type `Literal[4]` by zero - --> test.py:4:5 - | - 2 | import does_not_exit - 3 | - 4 | y = 4 / 0 - | ^^^^^ - 5 | - 6 | for a in range(0, int(y)): - | - info: rule `division-by-zero` is enabled by default - error[unresolved-reference]: Name `prin` used when not defined --> test.py:9:1 | @@ -507,11 +484,11 @@ fn cli_rule_severity() -> anyhow::Result<()> { | info: rule `unresolved-reference` is enabled by default - Found 3 diagnostics + Found 2 diagnostics ----- stderr ----- WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors. - "); + "###); assert_cmd_snapshot!( case @@ -575,22 +552,11 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> { "#, )?; - // Assert that there's a `unresolved-reference` diagnostic (error) - // and a `division-by-zero` (error) by default. - assert_cmd_snapshot!(case.command(), @r" + // Assert that there's a `unresolved-reference` diagnostic (error) by default. + assert_cmd_snapshot!(case.command(), @r###" success: false exit_code: 1 ----- stdout ----- - error[division-by-zero]: Cannot divide object of type `Literal[4]` by zero - --> test.py:2:5 - | - 2 | y = 4 / 0 - | ^^^^^ - 3 | - 4 | for a in range(0, int(y)): - | - info: rule `division-by-zero` is enabled by default - error[unresolved-reference]: Name `prin` used when not defined --> test.py:7:1 | @@ -601,11 +567,11 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> { | info: rule `unresolved-reference` is enabled by default - Found 2 diagnostics + Found 1 diagnostic ----- stderr ----- WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors. - "); + "###); assert_cmd_snapshot!( case @@ -614,7 +580,6 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> { .arg("unresolved-reference") .arg("--warn") .arg("division-by-zero") - // Override the error severity with warning .arg("--ignore") .arg("unresolved-reference"), @r" @@ -1103,18 +1068,10 @@ fn check_specific_paths() -> anyhow::Result<()> { assert_cmd_snapshot!( case.command(), - @r" + @r###" success: false exit_code: 1 ----- stdout ----- - error[division-by-zero]: Cannot divide object of type `Literal[4]` by zero - --> project/main.py:2:5 - | - 2 | y = 4 / 0 # error: division-by-zero - | ^^^^^ - | - info: rule `division-by-zero` is enabled by default - error[unresolved-import]: Cannot resolve imported module `main2` --> project/other.py:2:6 | @@ -1135,11 +1092,11 @@ fn check_specific_paths() -> anyhow::Result<()> { info: make sure your Python environment is properly configured: https://github.com/astral-sh/ty/blob/main/docs/README.md#python-environment info: rule `unresolved-import` is enabled by default - Found 3 diagnostics + Found 2 diagnostics ----- stderr ----- WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors. - " + "### ); // Now check only the `tests` and `other.py` files. diff --git a/crates/ty_python_semantic/src/types/diagnostic.rs b/crates/ty_python_semantic/src/types/diagnostic.rs index b6a1e17be5..a9e6c6075c 100644 --- a/crates/ty_python_semantic/src/types/diagnostic.rs +++ b/crates/ty_python_semantic/src/types/diagnostic.rs @@ -232,7 +232,7 @@ declare_lint! { pub(crate) static DIVISION_BY_ZERO = { summary: "detects division by zero", status: LintStatus::preview("1.0.0"), - default_level: Level::Error, + default_level: Level::Ignore, } } diff --git a/ty.schema.json b/ty.schema.json index 0dae961d6d..636912e0bb 100644 --- a/ty.schema.json +++ b/ty.schema.json @@ -293,7 +293,7 @@ "division-by-zero": { "title": "detects division by zero", "description": "## What it does\nIt detects division by zero.\n\n## Why is this bad?\nDividing by zero raises a `ZeroDivisionError` at runtime.\n\n## Examples\n```python\n5 / 0\n```", - "default": "error", + "default": "ignore", "oneOf": [ { "$ref": "#/definitions/Level"