foxundermoon / vs-shell-format

the shellscript、Dockerfile、properties ...... format extension
MIT License
444 stars 47 forks source link

Breaks Dockerfile #176

Open Makoehle opened 3 years ago

Makoehle commented 3 years ago

Having a Dockerfile with the following instruction:

FROM node:lts-alpine3.12 
RUN echo "Installing ..." \
  apk update > /dev/null && \
  apk upgrade > /dev/null && \
  apk add zip > /dev/null

this extension formats this code block to removing \

FROM node:lts-alpine3.12 
RUN echo "Installing ..." \
  apk update >/dev/null &&
  apk upgrade >/dev/null &&
  apk add zip >/dev/null

Which will lead to the following error: Error response from daemon: dockerfile parse error line 17: unknown instruction: APK

Update

foxundermoon commented 3 years ago

You can provide the complete dockerfile. or test by shfmt command line tool.

AchillesG commented 3 years ago

have same problem

matrixik commented 3 years ago

Looks like this is bug in shfmt that is officially not supporting Dockerfiles https://github.com/mvdan/sh/issues/640

stormsilver commented 2 years ago

I've just installed this extension and it's true that the automatic formatting of Dockerfiles that contain multiline RUN statements leads to broken Dockerfiles. If shfmt doesn't explicitly support Dockerfiles, perhaps disabling Dockerfile formatting is the right thing to do? Or at least provide optional configuration?

sbrunner commented 2 years ago

The solution is probably provided in this comment: https://github.com/foxundermoon/vs-shell-format/issues/29#issuecomment-806236260

mcnesium commented 2 years ago

To save some time for everyone arriving here, just add the following to your settings.json:

"shellformat.effectLanguages": ["shellscript"],
"[dockerfile]": {
  "editor.formatOnSave": false
}

I am not sure why both "do only shellscript" and "do not do dockerfile" is required, but it won't work with only one of the settings.

bluebrown commented 2 years ago

@mcnesium, better configure a different formatter for Dockerfiles. This one works great.

"[dockerfile]": {
    "editor.defaultFormatter": "ms-azuretools.vscode-docker"
}

But your effect langauges is good. Because disable formatOnSave is not respected by this extension for some reason.

danivicario commented 1 month ago

@mcnesium, better configure a different formatter for Dockerfiles. This one works great.

"[dockerfile]": {
    "editor.defaultFormatter": "ms-azuretools.vscode-docker"
}

But your effect langauges is good. Because disable formatOnSave is not respected by this extension for some reason.

Yes, this worked for me, not the foxmoon one, that was removing my backslashes. In order for it work, I first had to go to https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker an install this extension. Only then

"[dockerfile]": { "editor.formatOnSave": false, "editor.defaultFormatter": "ms-azuretools.vscode-docker" }

on the line

"editor.defaultFormatter": "ms-azuretools.vscode-docker"

stopped being yellow underlined and worked fine when saving & formatting my dockerfile.

Also please remember that you have to use the following naming

image