mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 21:35:58 +00:00

<!-- Thank you for contributing to Ruff! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary Resolves #11263 Detect `pathlib.Path.open` calls which do not specify a file encoding. ## Test Plan Test cases added to fixture. --------- Co-authored-by: Dhruv Manilawala <dhruvmanila@gmail.com>
96 lines
2.2 KiB
Python
96 lines
2.2 KiB
Python
import io
|
|
import sys
|
|
import tempfile
|
|
import io as hugo
|
|
import codecs
|
|
|
|
# Errors.
|
|
open("test.txt")
|
|
io.TextIOWrapper(io.FileIO("test.txt"))
|
|
hugo.TextIOWrapper(hugo.FileIO("test.txt"))
|
|
tempfile.NamedTemporaryFile("w")
|
|
tempfile.TemporaryFile("w")
|
|
codecs.open("test.txt")
|
|
tempfile.SpooledTemporaryFile(0, "w")
|
|
|
|
# Non-errors.
|
|
open("test.txt", encoding="utf-8")
|
|
open("test.bin", "wb")
|
|
open("test.bin", mode="wb")
|
|
open("test.txt", "r", -1, "utf-8")
|
|
open("test.txt", mode=sys.argv[1])
|
|
|
|
def func(*args, **kwargs):
|
|
open(*args)
|
|
open("text.txt", **kwargs)
|
|
|
|
io.TextIOWrapper(io.FileIO("test.txt"), encoding="utf-8")
|
|
io.TextIOWrapper(io.FileIO("test.txt"), "utf-8")
|
|
tempfile.TemporaryFile("w", encoding="utf-8")
|
|
tempfile.TemporaryFile("w", -1, "utf-8")
|
|
tempfile.TemporaryFile("wb")
|
|
tempfile.TemporaryFile()
|
|
tempfile.NamedTemporaryFile("w", encoding="utf-8")
|
|
tempfile.NamedTemporaryFile("w", -1, "utf-8")
|
|
tempfile.NamedTemporaryFile("wb")
|
|
tempfile.NamedTemporaryFile()
|
|
codecs.open("test.txt", encoding="utf-8")
|
|
codecs.open("test.bin", "wb")
|
|
codecs.open("test.bin", mode="wb")
|
|
codecs.open("test.txt", "r", -1, "utf-8")
|
|
tempfile.SpooledTemporaryFile(0, "w", encoding="utf-8")
|
|
tempfile.SpooledTemporaryFile(0, "w", -1, "utf-8")
|
|
tempfile.SpooledTemporaryFile(0, "wb")
|
|
tempfile.SpooledTemporaryFile(0, )
|
|
|
|
open("test.txt",)
|
|
open()
|
|
open(
|
|
"test.txt", # comment
|
|
)
|
|
open(
|
|
"test.txt",
|
|
# comment
|
|
)
|
|
open(("test.txt"),)
|
|
open(
|
|
("test.txt"), # comment
|
|
)
|
|
open(
|
|
("test.txt"),
|
|
# comment
|
|
)
|
|
|
|
open((("test.txt")),)
|
|
open(
|
|
(("test.txt")), # comment
|
|
)
|
|
open(
|
|
(("test.txt")),
|
|
# comment
|
|
)
|
|
|
|
# pathlib
|
|
from pathlib import Path
|
|
|
|
# Errors.
|
|
Path("foo.txt").open()
|
|
Path("foo.txt").open("w")
|
|
text = Path("foo.txt").read_text()
|
|
Path("foo.txt").write_text(text)
|
|
|
|
# Non-errors.
|
|
Path("foo.txt").open(encoding="utf-8")
|
|
Path("foo.txt").open("wb")
|
|
Path("foo.txt").open(*args)
|
|
Path("foo.txt").open(**kwargs)
|
|
text = Path("foo.txt").read_text(encoding="utf-8")
|
|
text = Path("foo.txt").read_text(*args)
|
|
text = Path("foo.txt").read_text(**kwargs)
|
|
Path("foo.txt").write_text(text, encoding="utf-8")
|
|
Path("foo.txt").write_text(text, *args)
|
|
Path("foo.txt").write_text(text, **kwargs)
|
|
|
|
# Violation but not detectable
|
|
x = Path("foo.txt")
|
|
x.open()
|