microsoft / vscode-docker

Docker Extension for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker
Other
1.19k stars 508 forks source link

[Feature request] support syntax highlighting in heredoc RUN instructions #4183

Open Igetin opened 7 months ago

Igetin commented 7 months ago

The gist

When using the RUN instruction with the heredoc notation, that section should use the appropriate syntax highlighting for the language used.

An example of how it looks like now for a shell (Bash) script:


How the same code is highlighted in a shell file, and how I would like it to look in the Dockerfile:


Description

Basically, I’m asking for something similar to how Markdown files in VS Code are highlighted. Normally the file has Markdown highlighting, but for code blocks, those sections are highlighted for a different syntax (e.g. shell syntax if the code block starts with ```bash).

The extension should look at the SHELL instruction, the RUN instruction arguments, and the shebang for determining the correct highlighting for the RUN block. For example, the extension should properly highlight the Python code in all of the three examples below:

Example 1:

SHELL ["/usr/bin/python3", "-c"]
RUN <<EOF
def hello():
  print("hello world")
EOF

Example 2:

RUN /usr/bin/python3 <<EOF
def hello():
  print("hello world")
EOF

Example 3:

RUN <<EOF
#! /usr/bin/python3
def hello():
  print("hello world")
EOF
JewelsBee commented 5 months ago

hello world

rcjsuen commented 3 months ago

It's not clear to me how this can be achieved. I do not believe the language server protocol supports this kind of use case. If someone knows how the LSP can enable this use case, please let me know.

thnee commented 3 weeks ago

It would definitely be nice to have support for this highly anticipated feature. We are using this syntax extensively now, and I am definitely missing syntax highlighting there.

Perhaps it is possible to get some inspiration from these links? https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide#embedded-languages https://code.visualstudio.com/api/language-extensions/embedded-languages https://github.com/neovim/neovim/issues/26783 https://github.com/camdencheek/tree-sitter-dockerfile/pull/45