{
  "name": "dune-workspace",
  "scopeName": "source.dune-workspace",
  "fileTypes": ["dune-workspace"],
  "patterns": [{ "include": "#stanzas" }, { "include": "source.dune#general" }],
  "repository": {
    "stanzas": {
      "patterns": [
        {
          "comment": "lang",
          "begin": "\\([[:space:]]*(lang)[[:space:]]+(dune)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" },
            "2": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [{ "include": "source.dune#general" }]
        },

        {
          "comment": "profile",
          "begin": "\\([[:space:]]*(profile)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "contentName": "variable.other.declaration.dune-project",
          "patterns": [{ "include": "source.dune#general" }]
        },

        {
          "comment": "env",
          "begin": "\\([[:space:]]*(env)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [{ "include": "source.dune#general" }]
        },

        {
          "comment": "lock_dir",
          "begin": "\\([[:space:]]*(lock_dir)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "path",
              "begin": "\\([[:space:]]*(path)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "repositories",
              "begin": "\\([[:space:]]*(repositories)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "solver_env",
              "begin": "\\([[:space:]]*(solver_env)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "unset_variables",
              "begin": "\\([[:space:]]*(unset_variables)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "pins",
              "begin": "\\([[:space:]]*(pins)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "version_preference",
              "begin": "\\([[:space:]]*(version_preference)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [
                {
                  "comment": "newest/oldest",
                  "name": "variable.other.declaration.dune-project",
                  "match": "\\b(newest|oldest)\\b"
                },
                { "include": "source.dune#general" }
              ]
            },
            {
              "comment": "constraints",
              "begin": "\\([[:space:]]*(constraints)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "depopts",
              "begin": "\\([[:space:]]*(depopts)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            { "include": "source.dune#general" }
          ]
        },

        {
          "comment": "pin",
          "begin": "\\([[:space:]]*(pin)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "url",
              "begin": "\\([[:space:]]*(url)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "package",
              "begin": "\\([[:space:]]*(package)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [
                {
                  "comment": "name",
                  "begin": "\\([[:space:]]*(name)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "contentName": "variable.other.declaration.dune-project",
                  "patterns": [{ "include": "source.dune#general" }]
                },
                {
                  "comment": "version",
                  "begin": "\\([[:space:]]*(version)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "contentName": "constant.language.dune-project",
                  "patterns": [{ "include": "source.dune#general" }]
                },
                { "include": "source.dune#general" }
              ]
            },
            { "include": "source.dune#general" }
          ]
        },

        {
          "comment": "repository",
          "begin": "\\([[:space:]]*(repository)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "name",
              "begin": "\\([[:space:]]*(name)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "contentName": "variable.other.declaration.dune-project",
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "url",
              "begin": "\\([[:space:]]*(url)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            { "include": "source.dune#general" }
          ]
        },

        {
          "comment": "context",
          "begin": "\\([[:space:]]*(context)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "default",
              "name": "keyword.language.dune-workspace",
              "match": "\\b(default)\\b"
            },
            {
              "comment": "opam/default",
              "begin": "\\([[:space:]]*(opam|default)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [
                {
                  "comment": "opam switch",
                  "begin": "\\([[:space:]]*(switch)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "name",
                  "begin": "\\([[:space:]]*(name)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "root",
                  "begin": "\\([[:space:]]*(root)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "merlin",
                  "begin": "\\([[:space:]]*(merlin)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "profile",
                  "begin": "\\([[:space:]]*(profile)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "env",
                  "begin": "\\([[:space:]]*(env)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "toolchain",
                  "begin": "\\([[:space:]]*(toolchain)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "host",
                  "begin": "\\([[:space:]]*(host)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "paths",
                  "begin": "\\([[:space:]]*(paths)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "fdo",
                  "begin": "\\([[:space:]]*(fdo)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "disable_dynamically_linked_foreign_archives",
                  "begin": "\\([[:space:]]*(disable_dynamically_linked_foreign_archives)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                {
                  "comment": "targets",
                  "begin": "\\([[:space:]]*(targets)\\b",
                  "end": "\\)",
                  "beginCaptures": {
                    "1": { "name": "keyword.language.dune-workspace" }
                  },
                  "patterns": [{ "include": "source.dune#general" }]
                },

                { "include": "source.dune#general" }
              ]
            },
            { "include": "source.dune#general" }
          ]
        },

        {
          "comment": "config:action_stderr_on_success/action_stdout_on_success",
          "begin": "\\([[:space:]]*(action_stderr_on_success|action_stdout_on_success)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "print/swallow/must-be-empty",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(print|swallow|must-be-empty)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },

        {
          "comment": "config:chache-check-probability",
          "begin": "\\([[:space:]]*(cache-check-probability)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [{ "include": "source.dune#general" }]
        },
        {
          "comment": "config:chache-storage-mode",
          "begin": "\\([[:space:]]*(cache-storage-mode)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "auto/hardlink/copy",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(auto|hardlink|copy)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:cache",
          "begin": "\\([[:space:]]*(cache)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "enabled/disabled",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(enabled|disabled)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:jobs",
          "begin": "\\([[:space:]]*(jobs)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "auto",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(auto)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:display",
          "begin": "\\([[:space:]]*(display)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "progress/verbose/short/quiet",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(progress|verbose|short|quiet)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:sandboxing_preference",
          "begin": "\\([[:space:]]*(sandboxing_preference)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "none/hardlink/copy/symlink",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(none|hardlink|copy|symlink)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:terminal-persistence",
          "begin": "\\([[:space:]]*(terminal-persistence)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "preserve/clear-on-rebuild/clear-on-rebuild-and-flush-history",
              "name": "variable.other.declaration.dune-project",
              "match": "\\b(preserve|clear-on-rebuild-and-flush-history|clear-on-rebuild)\\b"
            },
            { "include": "source.dune#general" }
          ]
        },
        {
          "comment": "config:project_defaults",
          "begin": "\\([[:space:]]*(project_defaults)\\b",
          "end": "\\)",
          "beginCaptures": {
            "1": { "name": "keyword.language.dune-workspace" }
          },
          "patterns": [
            {
              "comment": "authors/maintainers",
              "begin": "\\([[:space:]]*(authors|maintainers)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "patterns": [{ "include": "source.dune#general" }]
            },
            {
              "comment": "license",
              "begin": "\\([[:space:]]*(license)\\b",
              "end": "\\)",
              "beginCaptures": {
                "1": { "name": "keyword.language.dune-workspace" }
              },
              "contentName": "constant.language.dune-project",
              "patterns": [{ "include": "source.dune#general" }]
            },
            { "include": "source.dune#general" }
          ]
        }
      ]
    }
  }
}
