foxundermoon/vs-shell-format

Breaks Dockerfile

Makoehle opened this issue ยท 8 comments

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

  • I disabled Prettier and reloaded VS-Code but the Dockerfile kept getting formatted
  • I disabled shell-format and the Dockerfile stopped being formatted.

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

have same problem

Looks like this is bug in shfmt that is officially not supporting Dockerfiles mvdan/sh#640

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?

The solution is probably provided in this comment: #29 (comment)

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.

@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.