mirror of https://github.com/astral-sh/ruff
Use UTF-8 as default encoding in `unspecified-encoding` fix (#12370)
## Summary This is the _intended_ default that PEP 597 _wants_, but it's not backwards compatible. The fix is already unsafe, so it's better for us to recommend the desired and expected behavior. Closes https://github.com/astral-sh/ruff/issues/12069.
This commit is contained in:
parent
1de8ff3308
commit
e39298dcbc
|
|
@ -396,15 +396,4 @@ mod tests {
|
||||||
assert_messages!(diagnostics);
|
assert_messages!(diagnostics);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn unspecified_encoding_python39_or_lower() -> Result<()> {
|
|
||||||
let diagnostics = test_path(
|
|
||||||
Path::new("pylint/unspecified_encoding.py"),
|
|
||||||
&LinterSettings::for_rule(Rule::UnspecifiedEncoding)
|
|
||||||
.with_target_version(PythonVersion::Py39),
|
|
||||||
)?;
|
|
||||||
assert_messages!(diagnostics);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
|
|
||||||
use anyhow::Result;
|
|
||||||
|
|
||||||
use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Fix};
|
use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Fix};
|
||||||
use ruff_macros::{derive_message_formats, violation};
|
use ruff_macros::{derive_message_formats, violation};
|
||||||
use ruff_python_ast::name::QualifiedName;
|
use ruff_python_ast::name::QualifiedName;
|
||||||
|
|
@ -11,8 +9,6 @@ use ruff_text_size::{Ranged, TextRange};
|
||||||
|
|
||||||
use crate::checkers::ast::Checker;
|
use crate::checkers::ast::Checker;
|
||||||
use crate::fix::edits::add_argument;
|
use crate::fix::edits::add_argument;
|
||||||
use crate::importer::ImportRequest;
|
|
||||||
use crate::settings::types::PythonVersion;
|
|
||||||
|
|
||||||
/// ## What it does
|
/// ## What it does
|
||||||
/// Checks for uses of `open` and related calls without an explicit `encoding`
|
/// Checks for uses of `open` and related calls without an explicit `encoding`
|
||||||
|
|
@ -20,12 +16,17 @@ use crate::settings::types::PythonVersion;
|
||||||
///
|
///
|
||||||
/// ## Why is this bad?
|
/// ## Why is this bad?
|
||||||
/// Using `open` in text mode without an explicit encoding can lead to
|
/// Using `open` in text mode without an explicit encoding can lead to
|
||||||
/// non-portable code, with differing behavior across platforms.
|
/// non-portable code, with differing behavior across platforms. While readers
|
||||||
|
/// may assume that UTF-8 is the default encoding, in reality, the default
|
||||||
|
/// is locale-specific.
|
||||||
///
|
///
|
||||||
/// Instead, consider using the `encoding` parameter to enforce a specific
|
/// Instead, consider using the `encoding` parameter to enforce a specific
|
||||||
/// encoding. [PEP 597] recommends using `locale.getpreferredencoding(False)`
|
/// encoding. [PEP 597] recommends the use of `encoding="utf-8"` as a default,
|
||||||
/// as the default encoding on versions earlier than Python 3.10, and
|
/// and suggests that it may become the default in future versions of Python.
|
||||||
/// `encoding="locale"` on Python 3.10 and later.
|
///
|
||||||
|
/// If a local-specific encoding is intended, use `encoding="local"` on
|
||||||
|
/// Python 3.10 and later, or `locale.getpreferredencoding()` on earlier versions,
|
||||||
|
/// to make the encoding explicit.
|
||||||
///
|
///
|
||||||
/// ## Example
|
/// ## Example
|
||||||
/// ```python
|
/// ```python
|
||||||
|
|
@ -86,13 +87,7 @@ pub(crate) fn unspecified_encoding(checker: &mut Checker, call: &ast::ExprCall)
|
||||||
},
|
},
|
||||||
call.func.range(),
|
call.func.range(),
|
||||||
);
|
);
|
||||||
|
diagnostic.set_fix(generate_keyword_fix(checker, call));
|
||||||
if checker.settings.target_version >= PythonVersion::Py310 {
|
|
||||||
diagnostic.set_fix(generate_keyword_fix(checker, call));
|
|
||||||
} else {
|
|
||||||
diagnostic.try_set_fix(|| generate_import_fix(checker, call));
|
|
||||||
}
|
|
||||||
|
|
||||||
checker.diagnostics.push(diagnostic);
|
checker.diagnostics.push(diagnostic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -158,7 +153,7 @@ impl Display for Callee<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate an [`Edit`] for Python 3.10 and later.
|
/// Generate an [`Edit`] to set `encoding="utf-8"`.
|
||||||
fn generate_keyword_fix(checker: &Checker, call: &ast::ExprCall) -> Fix {
|
fn generate_keyword_fix(checker: &Checker, call: &ast::ExprCall) -> Fix {
|
||||||
Fix::unsafe_edit(add_argument(
|
Fix::unsafe_edit(add_argument(
|
||||||
&format!(
|
&format!(
|
||||||
|
|
@ -167,7 +162,7 @@ fn generate_keyword_fix(checker: &Checker, call: &ast::ExprCall) -> Fix {
|
||||||
.generator()
|
.generator()
|
||||||
.expr(&Expr::StringLiteral(ast::ExprStringLiteral {
|
.expr(&Expr::StringLiteral(ast::ExprStringLiteral {
|
||||||
value: ast::StringLiteralValue::single(ast::StringLiteral {
|
value: ast::StringLiteralValue::single(ast::StringLiteral {
|
||||||
value: "locale".to_string().into_boxed_str(),
|
value: "utf-8".to_string().into_boxed_str(),
|
||||||
flags: StringLiteralFlags::default(),
|
flags: StringLiteralFlags::default(),
|
||||||
range: TextRange::default(),
|
range: TextRange::default(),
|
||||||
}),
|
}),
|
||||||
|
|
@ -180,22 +175,6 @@ fn generate_keyword_fix(checker: &Checker, call: &ast::ExprCall) -> Fix {
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate an [`Edit`] for Python 3.9 and earlier.
|
|
||||||
fn generate_import_fix(checker: &Checker, call: &ast::ExprCall) -> Result<Fix> {
|
|
||||||
let (import_edit, binding) = checker.importer().get_or_import_symbol(
|
|
||||||
&ImportRequest::import("locale", "getpreferredencoding"),
|
|
||||||
call.start(),
|
|
||||||
checker.semantic(),
|
|
||||||
)?;
|
|
||||||
let argument_edit = add_argument(
|
|
||||||
&format!("encoding={binding}(False)"),
|
|
||||||
&call.arguments,
|
|
||||||
checker.comment_ranges(),
|
|
||||||
checker.locator().contents(),
|
|
||||||
);
|
|
||||||
Ok(Fix::unsafe_edits(import_edit, [argument_edit]))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns `true` if the given expression is a string literal containing a `b` character.
|
/// Returns `true` if the given expression is a string literal containing a `b` character.
|
||||||
fn is_binary_mode(expr: &Expr) -> Option<bool> {
|
fn is_binary_mode(expr: &Expr) -> Option<bool> {
|
||||||
Some(
|
Some(
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ unspecified_encoding.py:8:1: PLW1514 [*] `open` in text mode without explicit `e
|
||||||
6 6 |
|
6 6 |
|
||||||
7 7 | # Errors.
|
7 7 | # Errors.
|
||||||
8 |-open("test.txt")
|
8 |-open("test.txt")
|
||||||
8 |+open("test.txt", encoding="locale")
|
8 |+open("test.txt", encoding="utf-8")
|
||||||
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
||||||
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
||||||
11 11 | tempfile.NamedTemporaryFile("w")
|
11 11 | tempfile.NamedTemporaryFile("w")
|
||||||
|
|
@ -37,7 +37,7 @@ unspecified_encoding.py:9:1: PLW1514 [*] `io.TextIOWrapper` without explicit `en
|
||||||
7 7 | # Errors.
|
7 7 | # Errors.
|
||||||
8 8 | open("test.txt")
|
8 8 | open("test.txt")
|
||||||
9 |-io.TextIOWrapper(io.FileIO("test.txt"))
|
9 |-io.TextIOWrapper(io.FileIO("test.txt"))
|
||||||
9 |+io.TextIOWrapper(io.FileIO("test.txt"), encoding="locale")
|
9 |+io.TextIOWrapper(io.FileIO("test.txt"), encoding="utf-8")
|
||||||
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
||||||
11 11 | tempfile.NamedTemporaryFile("w")
|
11 11 | tempfile.NamedTemporaryFile("w")
|
||||||
12 12 | tempfile.TemporaryFile("w")
|
12 12 | tempfile.TemporaryFile("w")
|
||||||
|
|
@ -58,7 +58,7 @@ unspecified_encoding.py:10:1: PLW1514 [*] `io.TextIOWrapper` without explicit `e
|
||||||
8 8 | open("test.txt")
|
8 8 | open("test.txt")
|
||||||
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
||||||
10 |-hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
10 |-hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
||||||
10 |+hugo.TextIOWrapper(hugo.FileIO("test.txt"), encoding="locale")
|
10 |+hugo.TextIOWrapper(hugo.FileIO("test.txt"), encoding="utf-8")
|
||||||
11 11 | tempfile.NamedTemporaryFile("w")
|
11 11 | tempfile.NamedTemporaryFile("w")
|
||||||
12 12 | tempfile.TemporaryFile("w")
|
12 12 | tempfile.TemporaryFile("w")
|
||||||
13 13 | codecs.open("test.txt")
|
13 13 | codecs.open("test.txt")
|
||||||
|
|
@ -79,7 +79,7 @@ unspecified_encoding.py:11:1: PLW1514 [*] `tempfile.NamedTemporaryFile` in text
|
||||||
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
9 9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
||||||
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
||||||
11 |-tempfile.NamedTemporaryFile("w")
|
11 |-tempfile.NamedTemporaryFile("w")
|
||||||
11 |+tempfile.NamedTemporaryFile("w", encoding="locale")
|
11 |+tempfile.NamedTemporaryFile("w", encoding="utf-8")
|
||||||
12 12 | tempfile.TemporaryFile("w")
|
12 12 | tempfile.TemporaryFile("w")
|
||||||
13 13 | codecs.open("test.txt")
|
13 13 | codecs.open("test.txt")
|
||||||
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
||||||
|
|
@ -100,7 +100,7 @@ unspecified_encoding.py:12:1: PLW1514 [*] `tempfile.TemporaryFile` in text mode
|
||||||
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
10 10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
||||||
11 11 | tempfile.NamedTemporaryFile("w")
|
11 11 | tempfile.NamedTemporaryFile("w")
|
||||||
12 |-tempfile.TemporaryFile("w")
|
12 |-tempfile.TemporaryFile("w")
|
||||||
12 |+tempfile.TemporaryFile("w", encoding="locale")
|
12 |+tempfile.TemporaryFile("w", encoding="utf-8")
|
||||||
13 13 | codecs.open("test.txt")
|
13 13 | codecs.open("test.txt")
|
||||||
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
||||||
15 15 |
|
15 15 |
|
||||||
|
|
@ -120,7 +120,7 @@ unspecified_encoding.py:13:1: PLW1514 [*] `codecs.open` in text mode without exp
|
||||||
11 11 | tempfile.NamedTemporaryFile("w")
|
11 11 | tempfile.NamedTemporaryFile("w")
|
||||||
12 12 | tempfile.TemporaryFile("w")
|
12 12 | tempfile.TemporaryFile("w")
|
||||||
13 |-codecs.open("test.txt")
|
13 |-codecs.open("test.txt")
|
||||||
13 |+codecs.open("test.txt", encoding="locale")
|
13 |+codecs.open("test.txt", encoding="utf-8")
|
||||||
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
14 14 | tempfile.SpooledTemporaryFile(0, "w")
|
||||||
15 15 |
|
15 15 |
|
||||||
16 16 | # Non-errors.
|
16 16 | # Non-errors.
|
||||||
|
|
@ -141,7 +141,7 @@ unspecified_encoding.py:14:1: PLW1514 [*] `tempfile.SpooledTemporaryFile` in tex
|
||||||
12 12 | tempfile.TemporaryFile("w")
|
12 12 | tempfile.TemporaryFile("w")
|
||||||
13 13 | codecs.open("test.txt")
|
13 13 | codecs.open("test.txt")
|
||||||
14 |-tempfile.SpooledTemporaryFile(0, "w")
|
14 |-tempfile.SpooledTemporaryFile(0, "w")
|
||||||
14 |+tempfile.SpooledTemporaryFile(0, "w", encoding="locale")
|
14 |+tempfile.SpooledTemporaryFile(0, "w", encoding="utf-8")
|
||||||
15 15 |
|
15 15 |
|
||||||
16 16 | # Non-errors.
|
16 16 | # Non-errors.
|
||||||
17 17 | open("test.txt", encoding="utf-8")
|
17 17 | open("test.txt", encoding="utf-8")
|
||||||
|
|
@ -162,7 +162,7 @@ unspecified_encoding.py:46:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
44 44 | tempfile.SpooledTemporaryFile(0, )
|
44 44 | tempfile.SpooledTemporaryFile(0, )
|
||||||
45 45 |
|
45 45 |
|
||||||
46 |-open("test.txt",)
|
46 |-open("test.txt",)
|
||||||
46 |+open("test.txt", encoding="locale",)
|
46 |+open("test.txt", encoding="utf-8",)
|
||||||
47 47 | open()
|
47 47 | open()
|
||||||
48 48 | open(
|
48 48 | open(
|
||||||
49 49 | "test.txt", # comment
|
49 49 | "test.txt", # comment
|
||||||
|
|
@ -182,7 +182,7 @@ unspecified_encoding.py:47:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
45 45 |
|
45 45 |
|
||||||
46 46 | open("test.txt",)
|
46 46 | open("test.txt",)
|
||||||
47 |-open()
|
47 |-open()
|
||||||
47 |+open(encoding="locale")
|
47 |+open(encoding="utf-8")
|
||||||
48 48 | open(
|
48 48 | open(
|
||||||
49 49 | "test.txt", # comment
|
49 49 | "test.txt", # comment
|
||||||
50 50 | )
|
50 50 | )
|
||||||
|
|
@ -203,7 +203,7 @@ unspecified_encoding.py:48:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
47 47 | open()
|
47 47 | open()
|
||||||
48 48 | open(
|
48 48 | open(
|
||||||
49 |- "test.txt", # comment
|
49 |- "test.txt", # comment
|
||||||
49 |+ "test.txt", encoding="locale", # comment
|
49 |+ "test.txt", encoding="utf-8", # comment
|
||||||
50 50 | )
|
50 50 | )
|
||||||
51 51 | open(
|
51 51 | open(
|
||||||
52 52 | "test.txt",
|
52 52 | "test.txt",
|
||||||
|
|
@ -224,7 +224,7 @@ unspecified_encoding.py:51:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
50 50 | )
|
50 50 | )
|
||||||
51 51 | open(
|
51 51 | open(
|
||||||
52 |- "test.txt",
|
52 |- "test.txt",
|
||||||
52 |+ "test.txt", encoding="locale",
|
52 |+ "test.txt", encoding="utf-8",
|
||||||
53 53 | # comment
|
53 53 | # comment
|
||||||
54 54 | )
|
54 54 | )
|
||||||
55 55 | open(("test.txt"),)
|
55 55 | open(("test.txt"),)
|
||||||
|
|
@ -245,7 +245,7 @@ unspecified_encoding.py:55:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
53 53 | # comment
|
53 53 | # comment
|
||||||
54 54 | )
|
54 54 | )
|
||||||
55 |-open(("test.txt"),)
|
55 |-open(("test.txt"),)
|
||||||
55 |+open(("test.txt"), encoding="locale",)
|
55 |+open(("test.txt"), encoding="utf-8",)
|
||||||
56 56 | open(
|
56 56 | open(
|
||||||
57 57 | ("test.txt"), # comment
|
57 57 | ("test.txt"), # comment
|
||||||
58 58 | )
|
58 58 | )
|
||||||
|
|
@ -266,7 +266,7 @@ unspecified_encoding.py:56:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
55 55 | open(("test.txt"),)
|
55 55 | open(("test.txt"),)
|
||||||
56 56 | open(
|
56 56 | open(
|
||||||
57 |- ("test.txt"), # comment
|
57 |- ("test.txt"), # comment
|
||||||
57 |+ ("test.txt"), encoding="locale", # comment
|
57 |+ ("test.txt"), encoding="utf-8", # comment
|
||||||
58 58 | )
|
58 58 | )
|
||||||
59 59 | open(
|
59 59 | open(
|
||||||
60 60 | ("test.txt"),
|
60 60 | ("test.txt"),
|
||||||
|
|
@ -287,7 +287,7 @@ unspecified_encoding.py:59:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
58 58 | )
|
58 58 | )
|
||||||
59 59 | open(
|
59 59 | open(
|
||||||
60 |- ("test.txt"),
|
60 |- ("test.txt"),
|
||||||
60 |+ ("test.txt"), encoding="locale",
|
60 |+ ("test.txt"), encoding="utf-8",
|
||||||
61 61 | # comment
|
61 61 | # comment
|
||||||
62 62 | )
|
62 62 | )
|
||||||
63 63 |
|
63 63 |
|
||||||
|
|
@ -308,7 +308,7 @@ unspecified_encoding.py:64:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
62 62 | )
|
62 62 | )
|
||||||
63 63 |
|
63 63 |
|
||||||
64 |-open((("test.txt")),)
|
64 |-open((("test.txt")),)
|
||||||
64 |+open((("test.txt")), encoding="locale",)
|
64 |+open((("test.txt")), encoding="utf-8",)
|
||||||
65 65 | open(
|
65 65 | open(
|
||||||
66 66 | (("test.txt")), # comment
|
66 66 | (("test.txt")), # comment
|
||||||
67 67 | )
|
67 67 | )
|
||||||
|
|
@ -328,7 +328,7 @@ unspecified_encoding.py:65:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
64 64 | open((("test.txt")),)
|
64 64 | open((("test.txt")),)
|
||||||
65 65 | open(
|
65 65 | open(
|
||||||
66 |- (("test.txt")), # comment
|
66 |- (("test.txt")), # comment
|
||||||
66 |+ (("test.txt")), encoding="locale", # comment
|
66 |+ (("test.txt")), encoding="utf-8", # comment
|
||||||
67 67 | )
|
67 67 | )
|
||||||
68 68 | open(
|
68 68 | open(
|
||||||
69 69 | (("test.txt")),
|
69 69 | (("test.txt")),
|
||||||
|
|
@ -349,7 +349,7 @@ unspecified_encoding.py:68:1: PLW1514 [*] `open` in text mode without explicit `
|
||||||
67 67 | )
|
67 67 | )
|
||||||
68 68 | open(
|
68 68 | open(
|
||||||
69 |- (("test.txt")),
|
69 |- (("test.txt")),
|
||||||
69 |+ (("test.txt")), encoding="locale",
|
69 |+ (("test.txt")), encoding="utf-8",
|
||||||
70 70 | # comment
|
70 70 | # comment
|
||||||
71 71 | )
|
71 71 | )
|
||||||
72 72 |
|
72 72 |
|
||||||
|
|
@ -369,7 +369,7 @@ unspecified_encoding.py:77:1: PLW1514 [*] `pathlib.Path(...).open` in text mode
|
||||||
75 75 |
|
75 75 |
|
||||||
76 76 | # Errors.
|
76 76 | # Errors.
|
||||||
77 |-Path("foo.txt").open()
|
77 |-Path("foo.txt").open()
|
||||||
77 |+Path("foo.txt").open(encoding="locale")
|
77 |+Path("foo.txt").open(encoding="utf-8")
|
||||||
78 78 | Path("foo.txt").open("w")
|
78 78 | Path("foo.txt").open("w")
|
||||||
79 79 | text = Path("foo.txt").read_text()
|
79 79 | text = Path("foo.txt").read_text()
|
||||||
80 80 | Path("foo.txt").write_text(text)
|
80 80 | Path("foo.txt").write_text(text)
|
||||||
|
|
@ -390,7 +390,7 @@ unspecified_encoding.py:78:1: PLW1514 [*] `pathlib.Path(...).open` in text mode
|
||||||
76 76 | # Errors.
|
76 76 | # Errors.
|
||||||
77 77 | Path("foo.txt").open()
|
77 77 | Path("foo.txt").open()
|
||||||
78 |-Path("foo.txt").open("w")
|
78 |-Path("foo.txt").open("w")
|
||||||
78 |+Path("foo.txt").open("w", encoding="locale")
|
78 |+Path("foo.txt").open("w", encoding="utf-8")
|
||||||
79 79 | text = Path("foo.txt").read_text()
|
79 79 | text = Path("foo.txt").read_text()
|
||||||
80 80 | Path("foo.txt").write_text(text)
|
80 80 | Path("foo.txt").write_text(text)
|
||||||
81 81 |
|
81 81 |
|
||||||
|
|
@ -410,7 +410,7 @@ unspecified_encoding.py:79:8: PLW1514 [*] `pathlib.Path(...).read_text` without
|
||||||
77 77 | Path("foo.txt").open()
|
77 77 | Path("foo.txt").open()
|
||||||
78 78 | Path("foo.txt").open("w")
|
78 78 | Path("foo.txt").open("w")
|
||||||
79 |-text = Path("foo.txt").read_text()
|
79 |-text = Path("foo.txt").read_text()
|
||||||
79 |+text = Path("foo.txt").read_text(encoding="locale")
|
79 |+text = Path("foo.txt").read_text(encoding="utf-8")
|
||||||
80 80 | Path("foo.txt").write_text(text)
|
80 80 | Path("foo.txt").write_text(text)
|
||||||
81 81 |
|
81 81 |
|
||||||
82 82 | # Non-errors.
|
82 82 | # Non-errors.
|
||||||
|
|
@ -431,7 +431,7 @@ unspecified_encoding.py:80:1: PLW1514 [*] `pathlib.Path(...).write_text` without
|
||||||
78 78 | Path("foo.txt").open("w")
|
78 78 | Path("foo.txt").open("w")
|
||||||
79 79 | text = Path("foo.txt").read_text()
|
79 79 | text = Path("foo.txt").read_text()
|
||||||
80 |-Path("foo.txt").write_text(text)
|
80 |-Path("foo.txt").write_text(text)
|
||||||
80 |+Path("foo.txt").write_text(text, encoding="locale")
|
80 |+Path("foo.txt").write_text(text, encoding="utf-8")
|
||||||
81 81 |
|
81 81 |
|
||||||
82 82 | # Non-errors.
|
82 82 | # Non-errors.
|
||||||
83 83 | Path("foo.txt").open(encoding="utf-8")
|
83 83 | Path("foo.txt").open(encoding="utf-8")
|
||||||
|
|
|
||||||
|
|
@ -1,576 +0,0 @@
|
||||||
---
|
|
||||||
source: crates/ruff_linter/src/rules/pylint/mod.rs
|
|
||||||
---
|
|
||||||
unspecified_encoding.py:8:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
7 | # Errors.
|
|
||||||
8 | open("test.txt")
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 |-open("test.txt")
|
|
||||||
9 |+open("test.txt", encoding=locale.getpreferredencoding(False))
|
|
||||||
9 10 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 11 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
|
|
||||||
unspecified_encoding.py:9:1: PLW1514 [*] `io.TextIOWrapper` without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
7 | # Errors.
|
|
||||||
8 | open("test.txt")
|
|
||||||
9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
| ^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 | tempfile.NamedTemporaryFile("w")
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
9 |-io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 |+io.TextIOWrapper(io.FileIO("test.txt"), encoding=locale.getpreferredencoding(False))
|
|
||||||
10 11 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 13 | tempfile.TemporaryFile("w")
|
|
||||||
|
|
||||||
unspecified_encoding.py:10:1: PLW1514 [*] `io.TextIOWrapper` without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
8 | open("test.txt")
|
|
||||||
9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
| ^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
11 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 | tempfile.TemporaryFile("w")
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
9 10 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 |-hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 |+hugo.TextIOWrapper(hugo.FileIO("test.txt"), encoding=locale.getpreferredencoding(False))
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 13 | tempfile.TemporaryFile("w")
|
|
||||||
13 14 | codecs.open("test.txt")
|
|
||||||
|
|
||||||
unspecified_encoding.py:11:1: PLW1514 [*] `tempfile.NamedTemporaryFile` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
9 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 | tempfile.NamedTemporaryFile("w")
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
12 | tempfile.TemporaryFile("w")
|
|
||||||
13 | codecs.open("test.txt")
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
9 10 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 11 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 |-tempfile.NamedTemporaryFile("w")
|
|
||||||
12 |+tempfile.NamedTemporaryFile("w", encoding=locale.getpreferredencoding(False))
|
|
||||||
12 13 | tempfile.TemporaryFile("w")
|
|
||||||
13 14 | codecs.open("test.txt")
|
|
||||||
14 15 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
|
|
||||||
unspecified_encoding.py:12:1: PLW1514 [*] `tempfile.TemporaryFile` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
10 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 | tempfile.TemporaryFile("w")
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
13 | codecs.open("test.txt")
|
|
||||||
14 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
9 10 | io.TextIOWrapper(io.FileIO("test.txt"))
|
|
||||||
10 11 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 |-tempfile.TemporaryFile("w")
|
|
||||||
13 |+tempfile.TemporaryFile("w", encoding=locale.getpreferredencoding(False))
|
|
||||||
13 14 | codecs.open("test.txt")
|
|
||||||
14 15 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
15 16 |
|
|
||||||
|
|
||||||
unspecified_encoding.py:13:1: PLW1514 [*] `codecs.open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
11 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 | tempfile.TemporaryFile("w")
|
|
||||||
13 | codecs.open("test.txt")
|
|
||||||
| ^^^^^^^^^^^ PLW1514
|
|
||||||
14 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
10 11 | hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 13 | tempfile.TemporaryFile("w")
|
|
||||||
13 |-codecs.open("test.txt")
|
|
||||||
14 |+codecs.open("test.txt", encoding=locale.getpreferredencoding(False))
|
|
||||||
14 15 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
15 16 |
|
|
||||||
16 17 | # Non-errors.
|
|
||||||
|
|
||||||
unspecified_encoding.py:14:1: PLW1514 [*] `tempfile.SpooledTemporaryFile` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
12 | tempfile.TemporaryFile("w")
|
|
||||||
13 | codecs.open("test.txt")
|
|
||||||
14 | tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
15 |
|
|
||||||
16 | # Non-errors.
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
11 12 | tempfile.NamedTemporaryFile("w")
|
|
||||||
12 13 | tempfile.TemporaryFile("w")
|
|
||||||
13 14 | codecs.open("test.txt")
|
|
||||||
14 |-tempfile.SpooledTemporaryFile(0, "w")
|
|
||||||
15 |+tempfile.SpooledTemporaryFile(0, "w", encoding=locale.getpreferredencoding(False))
|
|
||||||
15 16 |
|
|
||||||
16 17 | # Non-errors.
|
|
||||||
17 18 | open("test.txt", encoding="utf-8")
|
|
||||||
|
|
||||||
unspecified_encoding.py:46:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
44 | tempfile.SpooledTemporaryFile(0, )
|
|
||||||
45 |
|
|
||||||
46 | open("test.txt",)
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
47 | open()
|
|
||||||
48 | open(
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
43 44 | tempfile.SpooledTemporaryFile(0, "wb")
|
|
||||||
44 45 | tempfile.SpooledTemporaryFile(0, )
|
|
||||||
45 46 |
|
|
||||||
46 |-open("test.txt",)
|
|
||||||
47 |+open("test.txt", encoding=locale.getpreferredencoding(False),)
|
|
||||||
47 48 | open()
|
|
||||||
48 49 | open(
|
|
||||||
49 50 | "test.txt", # comment
|
|
||||||
|
|
||||||
unspecified_encoding.py:47:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
46 | open("test.txt",)
|
|
||||||
47 | open()
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
48 | open(
|
|
||||||
49 | "test.txt", # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
44 45 | tempfile.SpooledTemporaryFile(0, )
|
|
||||||
45 46 |
|
|
||||||
46 47 | open("test.txt",)
|
|
||||||
47 |-open()
|
|
||||||
48 |+open(encoding=locale.getpreferredencoding(False))
|
|
||||||
48 49 | open(
|
|
||||||
49 50 | "test.txt", # comment
|
|
||||||
50 51 | )
|
|
||||||
|
|
||||||
unspecified_encoding.py:48:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
46 | open("test.txt",)
|
|
||||||
47 | open()
|
|
||||||
48 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
49 | "test.txt", # comment
|
|
||||||
50 | )
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
46 47 | open("test.txt",)
|
|
||||||
47 48 | open()
|
|
||||||
48 49 | open(
|
|
||||||
49 |- "test.txt", # comment
|
|
||||||
50 |+ "test.txt", encoding=locale.getpreferredencoding(False), # comment
|
|
||||||
50 51 | )
|
|
||||||
51 52 | open(
|
|
||||||
52 53 | "test.txt",
|
|
||||||
|
|
||||||
unspecified_encoding.py:51:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
49 | "test.txt", # comment
|
|
||||||
50 | )
|
|
||||||
51 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
52 | "test.txt",
|
|
||||||
53 | # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
49 50 | "test.txt", # comment
|
|
||||||
50 51 | )
|
|
||||||
51 52 | open(
|
|
||||||
52 |- "test.txt",
|
|
||||||
53 |+ "test.txt", encoding=locale.getpreferredencoding(False),
|
|
||||||
53 54 | # comment
|
|
||||||
54 55 | )
|
|
||||||
55 56 | open(("test.txt"),)
|
|
||||||
|
|
||||||
unspecified_encoding.py:55:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
53 | # comment
|
|
||||||
54 | )
|
|
||||||
55 | open(("test.txt"),)
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
56 | open(
|
|
||||||
57 | ("test.txt"), # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
52 53 | "test.txt",
|
|
||||||
53 54 | # comment
|
|
||||||
54 55 | )
|
|
||||||
55 |-open(("test.txt"),)
|
|
||||||
56 |+open(("test.txt"), encoding=locale.getpreferredencoding(False),)
|
|
||||||
56 57 | open(
|
|
||||||
57 58 | ("test.txt"), # comment
|
|
||||||
58 59 | )
|
|
||||||
|
|
||||||
unspecified_encoding.py:56:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
54 | )
|
|
||||||
55 | open(("test.txt"),)
|
|
||||||
56 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
57 | ("test.txt"), # comment
|
|
||||||
58 | )
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
54 55 | )
|
|
||||||
55 56 | open(("test.txt"),)
|
|
||||||
56 57 | open(
|
|
||||||
57 |- ("test.txt"), # comment
|
|
||||||
58 |+ ("test.txt"), encoding=locale.getpreferredencoding(False), # comment
|
|
||||||
58 59 | )
|
|
||||||
59 60 | open(
|
|
||||||
60 61 | ("test.txt"),
|
|
||||||
|
|
||||||
unspecified_encoding.py:59:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
57 | ("test.txt"), # comment
|
|
||||||
58 | )
|
|
||||||
59 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
60 | ("test.txt"),
|
|
||||||
61 | # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
57 58 | ("test.txt"), # comment
|
|
||||||
58 59 | )
|
|
||||||
59 60 | open(
|
|
||||||
60 |- ("test.txt"),
|
|
||||||
61 |+ ("test.txt"), encoding=locale.getpreferredencoding(False),
|
|
||||||
61 62 | # comment
|
|
||||||
62 63 | )
|
|
||||||
63 64 |
|
|
||||||
|
|
||||||
unspecified_encoding.py:64:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
62 | )
|
|
||||||
63 |
|
|
||||||
64 | open((("test.txt")),)
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
65 | open(
|
|
||||||
66 | (("test.txt")), # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
61 62 | # comment
|
|
||||||
62 63 | )
|
|
||||||
63 64 |
|
|
||||||
64 |-open((("test.txt")),)
|
|
||||||
65 |+open((("test.txt")), encoding=locale.getpreferredencoding(False),)
|
|
||||||
65 66 | open(
|
|
||||||
66 67 | (("test.txt")), # comment
|
|
||||||
67 68 | )
|
|
||||||
|
|
||||||
unspecified_encoding.py:65:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
64 | open((("test.txt")),)
|
|
||||||
65 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
66 | (("test.txt")), # comment
|
|
||||||
67 | )
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
63 64 |
|
|
||||||
64 65 | open((("test.txt")),)
|
|
||||||
65 66 | open(
|
|
||||||
66 |- (("test.txt")), # comment
|
|
||||||
67 |+ (("test.txt")), encoding=locale.getpreferredencoding(False), # comment
|
|
||||||
67 68 | )
|
|
||||||
68 69 | open(
|
|
||||||
69 70 | (("test.txt")),
|
|
||||||
|
|
||||||
unspecified_encoding.py:68:1: PLW1514 [*] `open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
66 | (("test.txt")), # comment
|
|
||||||
67 | )
|
|
||||||
68 | open(
|
|
||||||
| ^^^^ PLW1514
|
|
||||||
69 | (("test.txt")),
|
|
||||||
70 | # comment
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
3 3 | import tempfile
|
|
||||||
4 4 | import io as hugo
|
|
||||||
5 5 | import codecs
|
|
||||||
6 |+import locale
|
|
||||||
6 7 |
|
|
||||||
7 8 | # Errors.
|
|
||||||
8 9 | open("test.txt")
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
66 67 | (("test.txt")), # comment
|
|
||||||
67 68 | )
|
|
||||||
68 69 | open(
|
|
||||||
69 |- (("test.txt")),
|
|
||||||
70 |+ (("test.txt")), encoding=locale.getpreferredencoding(False),
|
|
||||||
70 71 | # comment
|
|
||||||
71 72 | )
|
|
||||||
72 73 |
|
|
||||||
|
|
||||||
unspecified_encoding.py:77:1: PLW1514 [*] `pathlib.Path(...).open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
76 | # Errors.
|
|
||||||
77 | Path("foo.txt").open()
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
78 | Path("foo.txt").open("w")
|
|
||||||
79 | text = Path("foo.txt").read_text()
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
72 72 |
|
|
||||||
73 73 | # pathlib
|
|
||||||
74 74 | from pathlib import Path
|
|
||||||
75 |+import locale
|
|
||||||
75 76 |
|
|
||||||
76 77 | # Errors.
|
|
||||||
77 |-Path("foo.txt").open()
|
|
||||||
78 |+Path("foo.txt").open(encoding=locale.getpreferredencoding(False))
|
|
||||||
78 79 | Path("foo.txt").open("w")
|
|
||||||
79 80 | text = Path("foo.txt").read_text()
|
|
||||||
80 81 | Path("foo.txt").write_text(text)
|
|
||||||
|
|
||||||
unspecified_encoding.py:78:1: PLW1514 [*] `pathlib.Path(...).open` in text mode without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
76 | # Errors.
|
|
||||||
77 | Path("foo.txt").open()
|
|
||||||
78 | Path("foo.txt").open("w")
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
79 | text = Path("foo.txt").read_text()
|
|
||||||
80 | Path("foo.txt").write_text(text)
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
72 72 |
|
|
||||||
73 73 | # pathlib
|
|
||||||
74 74 | from pathlib import Path
|
|
||||||
75 |+import locale
|
|
||||||
75 76 |
|
|
||||||
76 77 | # Errors.
|
|
||||||
77 78 | Path("foo.txt").open()
|
|
||||||
78 |-Path("foo.txt").open("w")
|
|
||||||
79 |+Path("foo.txt").open("w", encoding=locale.getpreferredencoding(False))
|
|
||||||
79 80 | text = Path("foo.txt").read_text()
|
|
||||||
80 81 | Path("foo.txt").write_text(text)
|
|
||||||
81 82 |
|
|
||||||
|
|
||||||
unspecified_encoding.py:79:8: PLW1514 [*] `pathlib.Path(...).read_text` without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
77 | Path("foo.txt").open()
|
|
||||||
78 | Path("foo.txt").open("w")
|
|
||||||
79 | text = Path("foo.txt").read_text()
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
80 | Path("foo.txt").write_text(text)
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
72 72 |
|
|
||||||
73 73 | # pathlib
|
|
||||||
74 74 | from pathlib import Path
|
|
||||||
75 |+import locale
|
|
||||||
75 76 |
|
|
||||||
76 77 | # Errors.
|
|
||||||
77 78 | Path("foo.txt").open()
|
|
||||||
78 79 | Path("foo.txt").open("w")
|
|
||||||
79 |-text = Path("foo.txt").read_text()
|
|
||||||
80 |+text = Path("foo.txt").read_text(encoding=locale.getpreferredencoding(False))
|
|
||||||
80 81 | Path("foo.txt").write_text(text)
|
|
||||||
81 82 |
|
|
||||||
82 83 | # Non-errors.
|
|
||||||
|
|
||||||
unspecified_encoding.py:80:1: PLW1514 [*] `pathlib.Path(...).write_text` without explicit `encoding` argument
|
|
||||||
|
|
|
||||||
78 | Path("foo.txt").open("w")
|
|
||||||
79 | text = Path("foo.txt").read_text()
|
|
||||||
80 | Path("foo.txt").write_text(text)
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ PLW1514
|
|
||||||
81 |
|
|
||||||
82 | # Non-errors.
|
|
||||||
|
|
|
||||||
= help: Add explicit `encoding` argument
|
|
||||||
|
|
||||||
ℹ Unsafe fix
|
|
||||||
72 72 |
|
|
||||||
73 73 | # pathlib
|
|
||||||
74 74 | from pathlib import Path
|
|
||||||
75 |+import locale
|
|
||||||
75 76 |
|
|
||||||
76 77 | # Errors.
|
|
||||||
77 78 | Path("foo.txt").open()
|
|
||||||
78 79 | Path("foo.txt").open("w")
|
|
||||||
79 80 | text = Path("foo.txt").read_text()
|
|
||||||
80 |-Path("foo.txt").write_text(text)
|
|
||||||
81 |+Path("foo.txt").write_text(text, encoding=locale.getpreferredencoding(False))
|
|
||||||
81 82 |
|
|
||||||
82 83 | # Non-errors.
|
|
||||||
83 84 | Path("foo.txt").open(encoding="utf-8")
|
|
||||||
Loading…
Reference in New Issue