{
  "displayName": "WebAssembly Interface Types",
  "foldingStartMarker": "([\\[{])\\s*",
  "foldingStopMarker": "\\s*([]}])",
  "name": "wit",
  "patterns": [
    {
      "include": "#comment"
    },
    {
      "include": "#package"
    },
    {
      "include": "#toplevel-use"
    },
    {
      "include": "#world"
    },
    {
      "include": "#interface"
    },
    {
      "include": "#whitespace"
    }
  ],
  "repository": {
    "block-comments": {
      "patterns": [
        {
          "match": "/\\*\\*/",
          "name": "comment.block.empty.wit"
        },
        {
          "applyEndPatternLast": 1,
          "begin": "/\\*\\*",
          "end": "\\*/",
          "name": "comment.block.documentation.wit",
          "patterns": [
            {
              "include": "#block-comments"
            },
            {
              "include": "#markdown"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        {
          "applyEndPatternLast": 1,
          "begin": "/\\*(?!\\*)",
          "end": "\\*/",
          "name": "comment.block.wit",
          "patterns": [
            {
              "include": "#block-comments"
            },
            {
              "include": "#whitespace"
            }
          ]
        }
      ]
    },
    "boolean": {
      "match": "\\b(bool)\\b",
      "name": "entity.name.type.boolean.wit"
    },
    "comment": {
      "patterns": [
        {
          "include": "#block-comments"
        },
        {
          "include": "#doc-comment"
        },
        {
          "include": "#line-comment"
        }
      ]
    },
    "container": {
      "name": "meta.container.ty.wit",
      "patterns": [
        {
          "include": "#tuple"
        },
        {
          "include": "#list"
        },
        {
          "include": "#option"
        },
        {
          "include": "#result"
        },
        {
          "include": "#handle"
        }
      ]
    },
    "doc-comment": {
      "begin": "^\\s*///",
      "end": "$",
      "name": "comment.line.documentation.wit",
      "patterns": [
        {
          "include": "#markdown"
        }
      ]
    },
    "enum": {
      "applyEndPatternLast": 1,
      "begin": "\\b(enum)\\b\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.other.enum.enum-items.wit"
        },
        "2": {
          "name": "entity.name.type.id.enum-items.wit"
        },
        "7": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.enum-items.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#enum-cases"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "enum-cases": {
      "name": "meta.enum-cases.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
          "name": "variable.other.enummember.id.enum-cases.wit"
        },
        {
          "match": "(,)",
          "name": "punctuation.comma.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "extern": {
      "name": "meta.extern-type.wit",
      "patterns": [
        {
          "name": "meta.interface-type.wit",
          "patterns": [
            {
              "applyEndPatternLast": 1,
              "begin": "\\b(interface)\\b\\s*(\\{)",
              "beginCaptures": {
                "1": {
                  "name": "keyword.other.interface.interface-type.wit"
                },
                "2": {
                  "name": "ppunctuation.brackets.curly.begin.wit"
                }
              },
              "end": "(})",
              "endCaptures": {
                "1": {
                  "name": "punctuation.brackets.curly.end.wit"
                }
              },
              "patterns": [
                {
                  "include": "#comment"
                },
                {
                  "include": "#interface-items"
                },
                {
                  "include": "#whitespace"
                }
              ]
            }
          ]
        },
        {
          "include": "#function-definition"
        },
        {
          "include": "#use-path"
        }
      ]
    },
    "flags": {
      "applyEndPatternLast": 1,
      "begin": "\\b(flags)\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.other.flags.flags-items.wit"
        },
        "2": {
          "name": "entity.name.type.id.flags-items.wit"
        },
        "7": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.flags-items.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#flags-fields"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "flags-fields": {
      "name": "meta.flags-fields.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
          "name": "variable.other.enummember.id.flags-fields.wit"
        },
        {
          "match": "(,)",
          "name": "punctuation.comma.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "function": {
      "applyEndPatternLast": 1,
      "begin": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(:)",
      "beginCaptures": {
        "1": {
          "name": "entity.name.function.id.func-item.wit"
        },
        "2": {
          "name": "meta.word.wit"
        },
        "4": {
          "name": "meta.word-separator.wit"
        },
        "5": {
          "name": "meta.word.wit"
        },
        "6": {
          "name": "keyword.operator.key-value.wit"
        }
      },
      "end": "((?<=\\n)|(?=}))",
      "name": "meta.func-item.wit",
      "patterns": [
        {
          "include": "#function-definition"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "function-definition": {
      "name": "meta.func-type.wit",
      "patterns": [
        {
          "applyEndPatternLast": 1,
          "begin": "\\b(static\\s+)?(func)\\b",
          "beginCaptures": {
            "1": {
              "name": "storage.modifier.static.func-item.wit"
            },
            "2": {
              "name": "keyword.other.func.func-type.wit"
            }
          },
          "end": "((?<=\\n)|(?=}))",
          "name": "meta.function.wit",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#parameter-list"
            },
            {
              "include": "#result-list"
            },
            {
              "include": "#whitespace"
            }
          ]
        }
      ]
    },
    "handle": {
      "captures": {
        "1": {
          "name": "entity.name.type.borrow.handle.wit"
        },
        "2": {
          "name": "punctuation.brackets.angle.begin.wit"
        },
        "3": {
          "name": "entity.name.type.id.handle.wit"
        },
        "8": {
          "name": "punctuation.brackets.angle.end.wit"
        }
      },
      "match": "\\b(borrow)\\b(<)\\s*%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(>)",
      "name": "meta.handle.ty.wit"
    },
    "identifier": {
      "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
      "name": "entity.name.type.id.wit"
    },
    "interface": {
      "applyEndPatternLast": 1,
      "begin": "^\\b(default\\s+)?(interface)\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "storage.modifier.default.interface-item.wit"
        },
        "2": {
          "name": "keyword.declaration.interface.interface-item.wit storage.type.wit"
        },
        "3": {
          "name": "entity.name.type.id.interface-item.wit"
        },
        "8": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.interface-item.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#interface-items"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "interface-items": {
      "name": "meta.interface-items.wit",
      "patterns": [
        {
          "include": "#typedef-item"
        },
        {
          "include": "#use"
        },
        {
          "include": "#function"
        }
      ]
    },
    "line-comment": {
      "match": "\\s*//.*",
      "name": "comment.line.double-slash.wit"
    },
    "list": {
      "applyEndPatternLast": 1,
      "begin": "\\b(list)\\b(<)",
      "beginCaptures": {
        "1": {
          "name": "entity.name.type.list.wit"
        },
        "2": {
          "name": "punctuation.brackets.angle.begin.wit"
        }
      },
      "end": "(>)",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.angle.end.wit"
        }
      },
      "name": "meta.list.ty.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types",
          "name": "meta.types.list.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "markdown": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "markup.heading.markdown"
            }
          },
          "match": "\\G\\s*(#+.*)$"
        },
        {
          "captures": {
            "2": {
              "name": "punctuation.definition.quote.begin.markdown"
            }
          },
          "match": "\\G\\s*((>)\\s+)+"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.list.begin.markdown"
            }
          },
          "match": "\\G\\s*(-)\\s+"
        },
        {
          "captures": {
            "1": {
              "name": "markup.list.numbered.markdown"
            },
            "2": {
              "name": "punctuation.definition.list.begin.markdown"
            }
          },
          "match": "\\G\\s*(([0-9]+\\.)\\s+)"
        },
        {
          "captures": {
            "1": {
              "name": "markup.italic.markdown"
            }
          },
          "match": "(`.*?`)"
        },
        {
          "captures": {
            "1": {
              "name": "markup.bold.markdown"
            }
          },
          "match": "\\b(__.*?__)"
        },
        {
          "captures": {
            "1": {
              "name": "markup.italic.markdown"
            }
          },
          "match": "\\b(_.*?_)"
        },
        {
          "captures": {
            "1": {
              "name": "markup.bold.markdown"
            }
          },
          "match": "(\\*\\*.*?\\*\\*)"
        },
        {
          "captures": {
            "1": {
              "name": "markup.italic.markdown"
            }
          },
          "match": "(\\*.*?\\*)"
        }
      ]
    },
    "named-type-list": {
      "applyEndPatternLast": 1,
      "begin": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(:)",
      "beginCaptures": {
        "1": {
          "name": "variable.parameter.id.named-type.wit"
        },
        "6": {
          "name": "keyword.operator.key-value.wit"
        }
      },
      "end": "((,)|(?=\\))|(?=\\n))",
      "endCaptures": {
        "2": {
          "name": "punctuation.comma.wit"
        }
      },
      "name": "meta.named-type-list.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "numeric": {
      "match": "\\b(u8|u16|u32|u64|s8|s16|s32|s64|float32|float64)\\b",
      "name": "entity.name.type.numeric.wit"
    },
    "operator": {
      "patterns": [
        {
          "match": "=",
          "name": "punctuation.equal.wit"
        },
        {
          "match": ",",
          "name": "punctuation.comma.wit"
        },
        {
          "match": ":",
          "name": "keyword.operator.key-value.wit"
        },
        {
          "match": ";",
          "name": "punctuation.semicolon.wit"
        },
        {
          "match": "\\(",
          "name": "punctuation.brackets.round.begin.wit"
        },
        {
          "match": "\\)",
          "name": "punctuation.brackets.round.end.wit"
        },
        {
          "match": "\\{",
          "name": "punctuation.brackets.curly.begin.wit"
        },
        {
          "match": "}",
          "name": "punctuation.brackets.curly.end.wit"
        },
        {
          "match": "<",
          "name": "punctuation.brackets.angle.begin.wit"
        },
        {
          "match": ">",
          "name": "punctuation.brackets.angle.end.wit"
        },
        {
          "match": "\\*",
          "name": "keyword.operator.star.wit"
        },
        {
          "match": "->",
          "name": "keyword.operator.arrow.skinny.wit"
        }
      ]
    },
    "option": {
      "applyEndPatternLast": 1,
      "begin": "\\b(option)\\b(<)",
      "beginCaptures": {
        "1": {
          "name": "entity.name.type.option.wit"
        },
        "2": {
          "name": "punctuation.brackets.angle.begin.wit"
        }
      },
      "end": "(>)",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.angle.end.wit"
        }
      },
      "name": "meta.option.ty.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types",
          "name": "meta.types.option.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "package": {
      "captures": {
        "1": {
          "name": "storage.modifier.package-decl.wit"
        },
        "2": {
          "name": "meta.id.package-decl.wit",
          "patterns": [
            {
              "captures": {
                "1": {
                  "name": "entity.name.namespace.package-identifier.wit",
                  "patterns": [
                    {
                      "include": "#identifier"
                    }
                  ]
                },
                "2": {
                  "name": "keyword.operator.namespace.package-identifier.wit"
                },
                "3": {
                  "name": "entity.name.type.package-identifier.wit",
                  "patterns": [
                    {
                      "include": "#identifier"
                    }
                  ]
                },
                "5": {
                  "name": "keyword.operator.versioning.package-identifier.wit"
                },
                "6": {
                  "name": "constant.numeric.versioning.package-identifier.wit"
                }
              },
              "match": "([^:]+)(:)([^@]+)((@)(\\S+))?",
              "name": "meta.package-identifier.wit"
            }
          ]
        }
      },
      "match": "^(package)\\s+(\\S+)\\s*",
      "name": "meta.package-decl.wit"
    },
    "parameter-list": {
      "applyEndPatternLast": 1,
      "begin": "(\\()",
      "beginCaptures": {
        "1": {
          "name": "punctuation.brackets.round.begin.wit"
        }
      },
      "end": "(\\))",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.round.end.wit"
        }
      },
      "name": "meta.param-list.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#named-type-list"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "primitive": {
      "name": "meta.primitive.ty.wit",
      "patterns": [
        {
          "include": "#numeric"
        },
        {
          "include": "#boolean"
        },
        {
          "include": "#string"
        }
      ]
    },
    "record": {
      "applyEndPatternLast": 1,
      "begin": "\\b(record)\\b\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.declaration.record.record-item.wit"
        },
        "2": {
          "name": "entity.name.type.id.record-item.wit"
        },
        "7": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.record-item.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#record-fields"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "record-fields": {
      "applyEndPatternLast": 1,
      "begin": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(:)",
      "beginCaptures": {
        "1": {
          "name": "variable.declaration.id.record-fields.wit"
        },
        "6": {
          "name": "keyword.operator.key-value.wit"
        }
      },
      "end": "((,)|(?=})|(?=\\n))",
      "endCaptures": {
        "2": {
          "name": "punctuation.comma.wit"
        }
      },
      "name": "meta.record-fields.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types",
          "name": "meta.types.record-fields.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "resource": {
      "applyEndPatternLast": 1,
      "begin": "\\b(resource)\\b\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)",
      "beginCaptures": {
        "1": {
          "name": "keyword.other.resource.wit"
        },
        "2": {
          "name": "entity.name.type.id.resource.wit"
        }
      },
      "end": "((?<=\\n)|(?=}))",
      "name": "meta.resource-item.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#resource-methods"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "resource-methods": {
      "applyEndPatternLast": 1,
      "begin": "(\\{)",
      "beginCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.resource-methods.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "applyEndPatternLast": 1,
          "begin": "\\b(constructor)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.constructor.constructor-type.wit"
            },
            "2": {
              "name": "punctuation.brackets.round.begin.wit"
            }
          },
          "end": "((?<=\\n)|(?=}))",
          "name": "meta.constructor-type.wit",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#parameter-list"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        {
          "include": "#function"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "result": {
      "applyEndPatternLast": 1,
      "begin": "\\b(result)\\b",
      "beginCaptures": {
        "1": {
          "name": "entity.name.type.result.wit"
        },
        "2": {
          "name": "punctuation.brackets.angle.begin.wit"
        }
      },
      "end": "((?<=\\n)|(?=,)|(?=}))",
      "name": "meta.result.ty.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "applyEndPatternLast": 1,
          "begin": "(<)",
          "beginCaptures": {
            "1": {
              "name": "punctuation.brackets.angle.begin.wit"
            }
          },
          "end": "(>)",
          "endCaptures": {
            "1": {
              "name": "punctuation.brackets.angle.end.wit"
            }
          },
          "name": "meta.inner.result.wit",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "match": "(?<!\\w)(_)(?!\\w)",
              "name": "variable.other.inferred-type.result.wit"
            },
            {
              "include": "#types",
              "name": "meta.types.result.wit"
            },
            {
              "match": "(?<!result)\\s*(,)",
              "name": "punctuation.comma.wit"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "result-list": {
      "applyEndPatternLast": 1,
      "begin": "(->)",
      "beginCaptures": {
        "1": {
          "name": "keyword.operator.arrow.skinny.wit"
        }
      },
      "end": "((?<=\\n)|(?=}))",
      "name": "meta.result-list.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types"
        },
        {
          "include": "#parameter-list"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "string": {
      "match": "\\b(string|char)\\b",
      "name": "entity.name.type.string.wit"
    },
    "toplevel-use": {
      "captures": {
        "1": {
          "name": "keyword.other.use.toplevel-use-item.wit"
        },
        "2": {
          "name": "meta.interface.toplevel-use-item.wit",
          "patterns": [
            {
              "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
              "name": "entity.name.type.declaration.interface.toplevel-use-item.wit"
            },
            {
              "captures": {
                "1": {
                  "name": "keyword.operator.versioning.interface.toplevel-use-item.wit"
                },
                "2": {
                  "name": "constant.numeric.versioning.interface.toplevel-use-item.wit"
                }
              },
              "match": "(@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*)(?:\\.(?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*))*))?(?:\\+([-0-9A-Za-z]+(?:\\.[-0-9A-Za-z]+)*))?)",
              "name": "meta.versioning.interface.toplevel-use-item.wit"
            }
          ]
        },
        "4": {
          "name": "keyword.control.as.toplevel-use-item.wit"
        },
        "5": {
          "name": "entity.name.type.toplevel-use-item.wit"
        }
      },
      "match": "^(use)\\s+(\\S+)(\\s+(as)\\s+(\\S+))?\\s*",
      "name": "meta.toplevel-use-item.wit"
    },
    "tuple": {
      "applyEndPatternLast": 1,
      "begin": "\\b(tuple)\\b(<)",
      "beginCaptures": {
        "1": {
          "name": "entity.name.type.tuple.wit"
        },
        "2": {
          "name": "punctuation.brackets.angle.begin.wit"
        }
      },
      "end": "(>)",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.angle.end.wit"
        }
      },
      "name": "meta.tuple.ty.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#types",
          "name": "meta.types.tuple.wit"
        },
        {
          "match": "(,)",
          "name": "punctuation.comma.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "type-definition": {
      "applyEndPatternLast": 1,
      "begin": "\\b(type)\\b\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(=)",
      "beginCaptures": {
        "1": {
          "name": "keyword.declaration.type.type-item.wit storage.type.wit"
        },
        "2": {
          "name": "entity.name.type.id.type-item.wit"
        },
        "7": {
          "name": "punctuation.equal.wit"
        }
      },
      "end": "(?<=\\n)",
      "name": "meta.type-item.wit",
      "patterns": [
        {
          "include": "#types",
          "name": "meta.types.type-item.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "typedef-item": {
      "name": "meta.typedef-item.wit",
      "patterns": [
        {
          "include": "#resource"
        },
        {
          "include": "#variant"
        },
        {
          "include": "#record"
        },
        {
          "include": "#flags"
        },
        {
          "include": "#enum"
        },
        {
          "include": "#type-definition"
        }
      ]
    },
    "types": {
      "name": "meta.ty.wit",
      "patterns": [
        {
          "include": "#primitive"
        },
        {
          "include": "#container"
        },
        {
          "include": "#identifier"
        }
      ]
    },
    "use": {
      "applyEndPatternLast": 1,
      "begin": "\\b(use)\\b\\s+(\\S+)(\\.)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.other.use.use-item.wit"
        },
        "2": {
          "patterns": [
            {
              "include": "#use-path"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        "3": {
          "name": "keyword.operator.namespace-separator.use-item.wit"
        },
        "4": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.use-item.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
          "name": "entity.name.type.declaration.use-names-item.use-item.wit"
        },
        {
          "match": "(,)",
          "name": "punctuation.comma.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "use-path": {
      "name": "meta.use-path.wit",
      "patterns": [
        {
          "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
          "name": "entity.name.namespace.id.use-path.wit"
        },
        {
          "captures": {
            "1": {
              "name": "keyword.operator.versioning.id.use-path.wit"
            },
            "2": {
              "name": "constant.numeric.versioning.id.use-path.wit"
            }
          },
          "match": "(@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*)(?:\\.(?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*))*))?(?:\\+([-0-9A-Za-z]+(?:\\.[-0-9A-Za-z]+)*))?)",
          "name": "meta.versioning.id.use-path.wit"
        },
        {
          "match": "\\.",
          "name": "keyword.operator.namespace-separator.use-path.wit"
        }
      ]
    },
    "variant": {
      "applyEndPatternLast": 1,
      "begin": "\\b(variant)\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.other.variant.wit"
        },
        "2": {
          "name": "entity.name.type.id.variant.wit"
        },
        "7": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.variant.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "include": "#variant-cases"
        },
        {
          "include": "#enum-cases"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "variant-cases": {
      "applyEndPatternLast": 1,
      "begin": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(\\()",
      "beginCaptures": {
        "1": {
          "name": "variable.other.enummember.id.variant-cases.wit"
        },
        "6": {
          "name": "punctuation.brackets.round.begin.wit"
        }
      },
      "end": "(\\))\\s*(,)?",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.round.end.wit"
        },
        "2": {
          "name": "punctuation.comma.wit"
        }
      },
      "name": "meta.variant-cases.wit",
      "patterns": [
        {
          "include": "#types",
          "name": "meta.types.variant-cases.wit"
        },
        {
          "include": "#whitespace"
        }
      ]
    },
    "whitespace": {
      "match": "\\s+",
      "name": "meta.whitespace.wit"
    },
    "world": {
      "applyEndPatternLast": 1,
      "begin": "^\\b(default\\s+)?(world)\\s+%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)",
      "beginCaptures": {
        "1": {
          "name": "storage.modifier.default.world-item.wit"
        },
        "2": {
          "name": "keyword.declaration.world.world-item.wit storage.type.wit"
        },
        "3": {
          "name": "entity.name.type.id.world-item.wit"
        },
        "8": {
          "name": "punctuation.brackets.curly.begin.wit"
        }
      },
      "end": "(})",
      "endCaptures": {
        "1": {
          "name": "punctuation.brackets.curly.end.wit"
        }
      },
      "name": "meta.world-item.wit",
      "patterns": [
        {
          "include": "#comment"
        },
        {
          "applyEndPatternLast": 1,
          "begin": "\\b(export)\\b\\s+(\\S+)",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.export.export-item.wit"
            },
            "2": {
              "name": "meta.id.export-item.wit",
              "patterns": [
                {
                  "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
                  "name": "variable.other.constant.id.export-item.wit"
                },
                {
                  "captures": {
                    "1": {
                      "name": "keyword.operator.versioning.id.export-item.wit"
                    },
                    "2": {
                      "name": "constant.numeric.versioning.id.export-item.wit"
                    }
                  },
                  "match": "(@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*)(?:\\.(?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*))*))?(?:\\+([-0-9A-Za-z]+(?:\\.[-0-9A-Za-z]+)*))?)",
                  "name": "meta.versioning.id.export-item.wit"
                }
              ]
            }
          },
          "end": "((?<=\\n)|(?=}))",
          "name": "meta.export-item.wit",
          "patterns": [
            {
              "include": "#extern"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        {
          "applyEndPatternLast": 1,
          "begin": "\\b(import)\\b\\s+(\\S+)",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.import.import-item.wit"
            },
            "2": {
              "name": "meta.id.import-item.wit",
              "patterns": [
                {
                  "match": "\\b%?((?<![-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)((-)([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b",
                  "name": "variable.other.constant.id.import-item.wit"
                },
                {
                  "captures": {
                    "1": {
                      "name": "keyword.operator.versioning.id.import-item.wit"
                    },
                    "2": {
                      "name": "constant.numeric.versioning.id.import-item.wit"
                    }
                  },
                  "match": "(@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*)(?:\\.(?:0|[1-9]\\d*|\\d*[-A-Za-z][-0-9A-Za-z]*))*))?(?:\\+([-0-9A-Za-z]+(?:\\.[-0-9A-Za-z]+)*))?)",
                  "name": "meta.versioning.id.import-item.wit"
                }
              ]
            }
          },
          "end": "((?<=\\n)|(?=}))",
          "name": "meta.import-item.wit",
          "patterns": [
            {
              "include": "#extern"
            },
            {
              "include": "#whitespace"
            }
          ]
        },
        {
          "applyEndPatternLast": 1,
          "begin": "\\b(include)\\s+(\\S+)\\s*",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.include.include-item.wit"
            },
            "2": {
              "name": "meta.use-path.include-item.wit",
              "patterns": [
                {
                  "include": "#use-path"
                }
              ]
            }
          },
          "end": "(?<=\\n)",
          "name": "meta.include-item.wit",
          "patterns": [
            {
              "applyEndPatternLast": 1,
              "begin": "\\b(with)\\b\\s+(\\{)",
              "beginCaptures": {
                "1": {
                  "name": "keyword.control.with.include-item.wit"
                },
                "2": {
                  "name": "punctuation.brackets.curly.begin.wit"
                }
              },
              "end": "(})",
              "endCaptures": {
                "1": {
                  "name": "punctuation.brackets.curly.end.wit"
                }
              },
              "name": "meta.with.include-item.wit",
              "patterns": [
                {
                  "include": "#comment"
                },
                {
                  "captures": {
                    "1": {
                      "name": "variable.other.id.include-names-item.wit"
                    },
                    "2": {
                      "name": "keyword.control.as.include-names-item.wit"
                    },
                    "3": {
                      "name": "entity.name.type.include-names-item.wit"
                    }
                  },
                  "match": "(\\S+)\\s+(as)\\s+([^,\\s]+)",
                  "name": "meta.include-names-item.wit"
                },
                {
                  "match": "(,)",
                  "name": "punctuation.comma.wit"
                },
                {
                  "include": "#whitespace"
                }
              ]
            }
          ]
        },
        {
          "include": "#use"
        },
        {
          "include": "#typedef-item"
        },
        {
          "include": "#whitespace"
        }
      ]
    }
  },
  "scopeName": "source.wit"
}
