Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
# Dockerfile Zed Extension

- Tree Sitter: [tree-sitter-dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile)
- Language Server: [dockerfile-language-server](https://github.com/rcjsuen/dockerfile-language-server)
- Tree Sitter: [tree-sitter-dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile), [tree-sitter-yaml](https://github.com/zed-industries/tree-sitter-yaml)
- Language Server: [dockerfile-language-server](https://github.com/rcjsuen/dockerfile-language-server), [docker-language-server](https://github.com/docker/docker-language-server)

## Docker Compose

Compose files are given their own `Docker Compose` language, matched on
`compose.yaml`, `compose.yml`, `docker-compose.yaml` and `docker-compose.yml`.
Plain YAML files are unaffected.

Each entry under `services:` gets runnables, so a single service can be brought
up, run and taken down from the gutter:

| Task | Effect |
| --- | --- |
| `up` | starts the service and its dependencies, attached so logs appear in the terminal |
| `run` | starts a one-off container for the service |
| `down` | stops and removes the service's containers |

Each is offered for `docker compose`, `docker-compose`, `podman compose` and
`podman-compose`.

## Configuration

Expand Down
10 changes: 8 additions & 2 deletions extension.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
id = "dockerfile"
name = "Dockerfile"
description = "Dockerfile support."
description = "Dockerfile and Docker Compose support."
version = "0.2.1"
schema_version = 1
authors = ["d1y <chenhonzho@gmail.com>", "joshmeads <github@joshmeads.com>"]
Expand All @@ -17,11 +17,17 @@ languages = ["Dockerfile", "Docker Compose"]

[language_servers.docker-language-server.language_ids]
"Dockerfile" = "dockerfile"
"Docker Compose" = "docker-compose"
"Docker Compose" = "dockercompose"

[grammars.dockerfile]
repository = "https://github.com/camdencheek/tree-sitter-dockerfile"
commit = "868e44ce378deb68aac902a9db68ff82d2299dd0"

# Registered as `yaml` rather than `docker-compose` so the id is snake_case and
# matches the `tree_sitter_yaml` symbol the parser exports.
[grammars.yaml]
repository = "https://github.com/zed-industries/tree-sitter-yaml"
commit = "baff0b51c64ef6a1fb1f8390f3ad6015b83ec13a"

[debug_adapters.buildx-dockerfile]
schema_path = "./debug_adapter_schemas/buildx-dockerfile.json"
13 changes: 13 additions & 0 deletions languages/docker-compose/brackets.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
("[" @open
"]" @close)

("{" @open
"}" @close)

(("\"" @open
"\"" @close)
(#set! rainbow.exclude))

(("'" @open
"'" @close)
(#set! rainbow.exclude))
30 changes: 30 additions & 0 deletions languages/docker-compose/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Adjusted from Zed's own YAML config, crates/grammars/src/yaml/config.toml,
# since this language shares the grammar Zed uses for YAML.
name = "Docker Compose"
grammar = "yaml"
path_suffixes = [
"docker-compose.yml",
"docker-compose.yaml",
"compose.yaml",
"compose.yml",
]
line_comments = ["# "]
autoclose_before = ",]}"
brackets = [
{ start = "{", end = "}", close = true, newline = true },
{ start = "[", end = "]", close = true, newline = true },
{ start = "\"", end = "\"", close = true, newline = false, not_in = [
"string",
] },
{ start = "'", end = "'", close = true, newline = false, not_in = [
"string",
] },
]

auto_indent_on_paste = false
auto_indent_using_last_non_empty_line = false
# 1st block matches basic elements followed by ':', e.g. 'test: '
# 2nd block matches the first element of an array when it's an object
increase_indent_pattern = "(:?^[^#]*:\\s*[|>]?\\s*$)|(:?^\\s*-[^#]*:\\s*(:?#+.*)$)"
prettier_parser_name = "yaml"
tab_size = 2
54 changes: 54 additions & 0 deletions languages/docker-compose/highlights.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
; Taken from https://github.com/zed-industries/zed/blob/f2ab00cec7545ffb7d8d75e4ccab74d5fccccf9b/crates/languages/src/yaml/highlights.scm
; as the "Docker Compose" language shares the grammar zed uses for YAML
(boolean_scalar) @boolean

(null_scalar) @constant.builtin

[
(double_quote_scalar)
(single_quote_scalar)
(block_scalar)
(string_scalar)
] @string

(escape_sequence) @string.escape

[
(integer_scalar)
(float_scalar)
] @number

(comment) @comment

[
(anchor_name)
(alias_name)
(tag)
] @type

key: (flow_node
(plain_scalar
(string_scalar) @property))

[
","
"-"
":"
">"
"?"
"|"
] @punctuation.delimiter

[
"["
"]"
"{"
"}"
] @punctuation.bracket

[
"*"
"&"
"---"
"..."
] @punctuation.special
7 changes: 7 additions & 0 deletions languages/docker-compose/outline.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(block_mapping_pair
key: (flow_node
(plain_scalar
(string_scalar) @name))
value: (flow_node
(plain_scalar
(string_scalar) @context))?) @item
6 changes: 6 additions & 0 deletions languages/docker-compose/overrides.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(comment) @comment.inclusive

[
(single_quote_scalar)
(double_quote_scalar)
] @string
2 changes: 2 additions & 0 deletions languages/docker-compose/redactions.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(block_mapping_pair
value: (flow_node) @redact)
11 changes: 11 additions & 0 deletions languages/docker-compose/runnables.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(document
(block_node
(block_mapping
(block_mapping_pair
key: _ @_services
value: (block_node
(block_mapping
(block_mapping_pair
key: _ @service @run)))
(#eq? @_services "services")
(#set! tag docker-compose-service)))))
62 changes: 62 additions & 0 deletions languages/docker-compose/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[
{
"label": "docker-compose up",
"command": "docker-compose -f $ZED_FILE up $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "docker-compose run",
"command": "docker-compose -f $ZED_FILE run $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "docker-compose down",
"command": "docker-compose -f $ZED_FILE down $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "docker compose up",
"command": "docker compose -f $ZED_FILE up $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "docker compose run",
"command": "docker compose -f $ZED_FILE run $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "docker compose down",
"command": "docker compose -f $ZED_FILE down $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman-compose up",
"command": "podman-compose -f $ZED_FILE up $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman-compose run",
"command": "podman-compose -f $ZED_FILE run $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman-compose down",
"command": "podman-compose -f $ZED_FILE down $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman compose up",
"command": "podman compose -f $ZED_FILE up $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman compose run",
"command": "podman compose -f $ZED_FILE run $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
},
{
"label": "podman compose down",
"command": "podman compose -f $ZED_FILE down $ZED_CUSTOM_service",
"tags": ["docker-compose-service"]
}
]
Loading