Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cell content removed on syntax errors with ruffformat #356

Open
redeboer opened this issue Aug 14, 2024 · 6 comments
Open

Cell content removed on syntax errors with ruffformat #356

redeboer opened this issue Aug 14, 2024 · 6 comments
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@redeboer
Copy link

First of all, thanks a ton for fixing support for Ruff since v3.0.0! 🎉

Bug description

It seems that jupyterlab-code-formatter with ruff deletes all content in cells that contain syntax errors.

record

Reproduce

Running Jupyter Lab in a venv in Python 3.12 with these dependencies

anyio==4.4.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asttokens==2.4.1
async-lru==2.0.4
attrs==24.2.0
babel==2.16.0
beautifulsoup4==4.12.3
bleach==6.1.0
certifi==2024.7.4
cffi==1.17.0
charset-normalizer==3.3.2
comm==0.2.2
debugpy==1.8.5
decorator==5.1.1
defusedxml==0.7.1
executing==2.0.1
fastjsonschema==2.20.0
fqdn==1.5.1
h11==0.14.0
httpcore==1.0.5
httpx==0.27.0
idna==3.7
ipykernel==6.29.5
ipython==8.26.0
isoduration==20.11.0
jedi==0.19.1
jinja2==3.1.4
json5==0.9.25
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2023.12.1
jupyter-client==8.6.2
jupyter-core==5.7.2
jupyter-events==0.10.0
jupyter-lsp==2.2.5
jupyter-server==2.14.2
jupyter-server-terminals==0.5.3
jupyterlab==4.2.4
jupyterlab-code-formatter==3.0.2
jupyterlab-pygments==0.3.0
jupyterlab-server==2.27.3
markupsafe==2.1.5
matplotlib-inline==0.1.7
mistune==3.0.2
nbclient==0.10.0
nbconvert==7.16.4
nbformat==5.10.4
nest-asyncio==1.6.0
notebook-shim==0.2.4
overrides==7.7.0
packaging==24.1
pandocfilters==1.5.1
parso==0.8.4
pexpect==4.9.0
platformdirs==4.2.2
prometheus-client==0.20.0
prompt-toolkit==3.0.47
psutil==6.0.0
ptyprocess==0.7.0
pure-eval==0.2.3
pycparser==2.22
pygments==2.18.0
python-dateutil==2.9.0.post0
python-json-logger==2.0.7
pyyaml==6.0.2
pyzmq==26.1.0
referencing==0.35.1
requests==2.32.3
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rpds-py==0.20.0
ruff==0.5.7
send2trash==1.8.3
setuptools==72.2.0
six==1.16.0
sniffio==1.3.1
soupsieve==2.6
stack-data==0.6.3
terminado==0.18.1
tinycss2==1.3.0
tornado==6.4.1
traitlets==5.14.3
types-python-dateutil==2.9.0.20240316
uri-template==1.3.0
urllib3==2.2.2
wcwidth==0.2.13
webcolors==24.8.0
webencodings==0.5.1
websocket-client==1.8.0

and using these minimal settings

{
  "preferences": {
    "default_formatter": {
      "python": ["ruffformat"]
    }
  }
}

Context

  • Extension version: 3.0.2
  • Operating System and its version: Ubuntu 22.04
@redeboer redeboer added the bug Something isn't working label Aug 14, 2024
@devmcp
Copy link

devmcp commented Aug 21, 2024

Not sure if it's the same issue, or related, but jupyterlab-code-formatter with ruff also deletes all content in cells that contain non-standard characters. E.g.

print("°")

gets deleted

@redeboer
Copy link
Author

Works okay for me. (Same dependencies as in issue description.)
record

@harrylojames
Copy link

Just to chime in also seeing this issue

Not sure if it's the same issue, or related, but jupyterlab-code-formatter with ruff also deletes all content in cells that contain non-standard characters. E.g.

print("°")

gets deleted

@krassowski
Copy link
Contributor

It seems like the code checks whether the command line formatter wrote to stderr to determine if it cannot handle the input:

if process.stderr:
logger.info(f"An error with {self.command[0]} has occurred:")
logger.info(process.stderr)
return code
else:
return process.stdout

But in case of ruff format this probably does not happen and ruff does not return output to neither standard output nor error. I think it should also check the exit code (https://docs.astral.sh/ruff/formatter/#exit-codes). For backward compatibility with other instances/sub-classes of CommandLineFormatter maybe checking the exit code should be optional (e.g. toggled by class property) and for now default to False but changed to True in ruff format.

@krassowski krassowski added the help wanted Extra attention is needed label Aug 22, 2024
@dlimpid
Copy link

dlimpid commented Aug 25, 2024

Just to chime in also seeing this issue

Not sure if it's the same issue, or related, but jupyterlab-code-formatter with ruff also deletes all content in cells that contain non-standard characters. E.g.

print("°")

gets deleted

Same to me. When I used @jbwhit's solution there was the same error, that cells containing non-ascii characters were not formatted. For me adding encoding="utf-8" in the subprocess.run() call would fix it.

@yt87
Copy link

yt87 commented Sep 3, 2024

An exception is required in order to pop up the Jupyterlab Code Formatter Error dialog. Black raises InvalidInput when black.format_str fails. My quick and dirty solution is:

  1. Remove quiet option in RuffFormatFormatter.
  2. Replace lines 454and 455 by:
    raise ValueError(process.stdin)
    return code
    

I think a proper solution would be to subclass CommandLineFormatter overriding format_code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

6 participants