black icon indicating copy to clipboard operation
black copied to clipboard

Black is not honoring #fmt: skip

Open ricardo-dematos opened this issue 2 years ago • 1 comments

Describe the bug

With below configuration in pyproject.toml :

[tool.black]

# How many characters per line to allow.
line-length = 120

# When processing Jupyter Notebooks, add the given magic to the list of known 
# python-magics (timeit, prun, capture, pypy, python3, python, time). 
# Useful for formatting cells with custom python magics.
# python-cell-magics = 

# Require a specific version of Black to be running 
# (useful for unifying results across many environments e.g. with a pyproject.toml file). 
# It can be either a major version number or an exact version.
# required-version = 

# A regular expression that matches files and directories that should be 
# included on recursive searches. An empty value means all files are included 
# regardless of the name. Use forward slashes for directories on all platforms (Windows, too). 
# Exclusions are calculated first, inclusions later.
# include = "(\.pyi?|\.ipynb)$"

# A regular expression that matches files and directories that should be 
# excluded on recursive searches. An empty value means no paths are excluded. 
# Use forward slashes for directories on all platforms (Windows, too). 
# Exclusions are calculated first, inclusions later.
# exclude = "/(\.direnv|\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|venv|\.svn|\.ipynb_checkpoints|_build|buck-out|build|dist|__pypackages__)/"

# Like 'exclude', but adds additional files and directories on top of the excluded ones.
# (Useful if you simply want to add to the default).
# extend-exclude = 

# Like 'exclude', but files and directories matching this regex will be excluded 
# even when they are passed explicitly as arguments.
# force-exclude = 

# The name of the file when passing it through stdin. 
# Useful to make sure Black will respect 'force-exclude' option on some editors that rely on using stdin.
# stdin-filename = 

# Number of parallel workers. 
# Can be a number or a range.
# workers = 

and this command line :

black --config "pyproject.toml" --target-version py39 --check --diff .

the following line of code is flagged :

ave_quantity = self.exec_math(math_iterable["mean"], "mean", [])  # execute the "mean" fxn on the dataset  # cspell: disable-line # fmt: skip
--- properties/datasets/models.py    2022-11-30 00:01:16.590743 +0000
+++ properties/datasets/models.py    2022-11-30 00:01:18.692767 +0000
@@ -746,11 +746,13 @@
         calculate the mean value of all the dataset points
 
         return: numerical value of this function when all variables are zero
         rtype: float
         """
-        ave_quantity = self.exec_math(math_iterable["mean"], "mean", [])  # execute the "mean" fxn on the dataset # fmt:skip
+        ave_quantity = self.exec_math(
+            math_iterable["mean"], "mean", []
+        )  # execute the "mean" fxn on the dataset # fmt:skip
         return getattr(ave_quantity, "magnitude", 0.0)
 
     def serialize(self, flat=False):
         return {
             "type": "dataset",
would reformat properties/datasets/models.py

Oh no! 💥 💔 💥
1 file would be reformatted, 102 files would be left unchanged.

Which contradicts

Black reformats entire files in place. It doesn’t reformat lines that end with # fmt: skip or blocks that start with # fmt: off and end with # fmt: on.

Expected behavior

Black should honor the directive # fmt: skip and ignore the flagged line of code.

Environment

  • Black's version: 22.12.0
  • OS and Python version: Ubuntu 22.04.1 LTS/Python 3.9.16

Additional context

With directive #fmt:skip as the solely comment in the end of the line, black honors the directive and ignores the line of code.

Related to

  • #451
  • #2024

ricardo-dematos avatar Dec 19 '22 23:12 ricardo-dematos

This is related to #3450 where it is also shown that adding a hash before #fmt:skip results in black not ignoring this line of code.

FSpanhel avatar Jan 04 '23 12:01 FSpanhel

Duplicate of #3330

JelleZijlstra avatar Jul 10 '23 15:07 JelleZijlstra