diff --git a/.vscode/launch.json b/.vscode/launch.json index 57675f0..e5bf092 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,7 +13,7 @@ "args": [ "--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}", - "${workspaceRoot}/tests/grammar/integration" + "${workspaceRoot}/tests/grammar" ] } ] diff --git a/syntaxes/wit.tmLanguage.json b/syntaxes/wit.tmLanguage.json index a7f5b24..6a0dfa7 100644 --- a/syntaxes/wit.tmLanguage.json +++ b/syntaxes/wit.tmLanguage.json @@ -12,6 +12,9 @@ { "include": "#comment" }, + { + "include": "#feature-gate" + }, { "include": "#package" }, @@ -34,6 +37,112 @@ "comment": "whitespace token", "match": "\\s+" }, + "feature-gate": { + "name": "meta.feature-gate.wit", + "comment": "Feature gate annotations like @unstable, @since, @deprecated", + "patterns": [ + { + "name": "meta.annotation.unstable.wit", + "begin": "(@unstable)(\\()", + "beginCaptures": { + "1": { + "name": "keyword.control.unstable.wit" + }, + "2": { + "name": "punctuation.brackets.round.begin.wit" + } + }, + "patterns": [ + { + "include": "#feature-gate-content" + } + ], + "end": "(\\))", + "endCaptures": { + "1": { + "name": "punctuation.brackets.round.end.wit" + } + } + }, + { + "name": "meta.annotation.since.wit", + "begin": "(@since)(\\()", + "beginCaptures": { + "1": { + "name": "keyword.control.since.wit" + }, + "2": { + "name": "punctuation.brackets.round.begin.wit" + } + }, + "patterns": [ + { + "include": "#feature-gate-content" + } + ], + "end": "(\\))", + "endCaptures": { + "1": { + "name": "punctuation.brackets.round.end.wit" + } + } + }, + { + "name": "meta.annotation.deprecated.wit", + "begin": "(@deprecated)(\\()", + "beginCaptures": { + "1": { + "name": "keyword.control.deprecated.wit" + }, + "2": { + "name": "punctuation.brackets.round.begin.wit" + } + }, + "patterns": [ + { + "include": "#feature-gate-content" + } + ], + "end": "(\\))", + "endCaptures": { + "1": { + "name": "punctuation.brackets.round.end.wit" + } + } + } + ] + }, + "feature-gate-content": { + "name": "meta.feature-gate-content.wit", + "comment": "Content inside feature gate annotations", + "patterns": [ + { + "include": "#comment" + }, + { + "name": "meta.feature-gate-parameter.wit", + "match": "\\b(feature|version)\\s*(=)\\s*([^\\s,)]+|\"[^\"]*\")", + "captures": { + "1": { + "name": "variable.parameter.feature-gate.wit" + }, + "2": { + "name": "keyword.operator.assignment.wit" + }, + "3": { + "name": "string.quoted.feature-gate.wit" + } + } + }, + { + "name": "punctuation.comma.wit", + "match": "," + }, + { + "include": "#whitespace" + } + ] + }, "comment": { "patterns": [ { @@ -320,7 +429,7 @@ "world": { "name": "meta.world-item.wit", "comment": "Syntax for WIT like `world \"id\" {`", - "begin": "^\\b(default\\s+)?(world)\\s+%?((? string; + + @unstable(feature = new-api) + experimental-func: func(data: list) -> result; + + @deprecated(version = 2.0.0) + old-func: func(); +} + +@since(version = 1.0.0) +interface stable-interface { + basic-func: func(); + + @deprecated(version = 1.5.0) + deprecated-method: func(x: u32); +} + +@unstable(feature = future-world) +world feature-world { + @since(version = 1.0.0) + export stable: interface { + get-version: func() -> string; + } + + @unstable(feature = beta-import) + import experimental: interface { + @unstable(feature = alpha-feature) + test-method: func() -> bool; + } +} + +@since(version = 1.2.0) +interface resources { + @unstable(feature = experimental-resource) + resource connection { + @since(version = 1.2.0) + constructor(url: string); + + @unstable(feature = async-methods) + connect: func() -> result<(), string>; + + @deprecated(version = 2.0.0) + disconnect: func(); + } +} diff --git a/tests/grammar/integration/feature-gates.wit.snap b/tests/grammar/integration/feature-gates.wit.snap new file mode 100644 index 0000000..ecdb71d --- /dev/null +++ b/tests/grammar/integration/feature-gates.wit.snap @@ -0,0 +1,385 @@ +>package test:feature-gates@1.0.0; +#^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit +# ^ source.wit meta.package-decl.wit +# ^^^^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit entity.name.namespace.package-identifier.wit entity.name.type.id.wit +# ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit +# ^^^^^^^^^^^^^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit entity.name.type.package-identifier.wit entity.name.type.id.wit +# ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.versioning.package-identifier.wit +# ^^^^^^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit constant.numeric.versioning.package-identifier.wit +> +>@unstable(feature = experimental-interface) +#^^^^^^^^^ source.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^^^^^^^^^^^^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +>interface experimental { +#^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit +# ^ source.wit meta.interface-item.wit +# ^^^^^^^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit +# ^ source.wit meta.interface-item.wit +# ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit +> @since(version = 1.1.0) +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.annotation.since.wit keyword.control.since.wit +# ^ source.wit meta.interface-item.wit meta.annotation.since.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.interface-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.since.wit punctuation.brackets.round.end.wit +> stable-func: func(input: string) -> string; +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit variable.parameter.id.named-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit +# ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit +> +> @unstable(feature = new-api) +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +> experimental-func: func(data: list) -> result; +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit variable.parameter.id.named-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit entity.name.type.list.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit punctuation.brackets.angle.begin.wit +# ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit entity.name.type.numeric.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit punctuation.brackets.angle.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit +# ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.result.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.brackets.angle.begin.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.comma.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.brackets.angle.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit +> +> @deprecated(version = 2.0.0) +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit keyword.control.deprecated.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit punctuation.brackets.round.end.wit +> old-func: func(); +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit +>} +#^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit +> +>@since(version = 1.0.0) +#^^^^^^ source.wit meta.annotation.since.wit keyword.control.since.wit +# ^ source.wit meta.annotation.since.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.annotation.since.wit punctuation.brackets.round.end.wit +>interface stable-interface { +#^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit +# ^ source.wit meta.interface-item.wit +# ^^^^^^^^^^^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit +# ^ source.wit meta.interface-item.wit +# ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit +> basic-func: func(); +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit +> +> @deprecated(version = 1.5.0) +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit keyword.control.deprecated.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.deprecated.wit punctuation.brackets.round.end.wit +> deprecated-method: func(x: u32); +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit variable.parameter.id.named-type.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.whitespace.wit +# ^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit entity.name.type.numeric.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit +>} +#^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit +> +>@unstable(feature = future-world) +#^^^^^^^^^ source.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^^ source.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +>world feature-world { +#^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit +# ^ source.wit meta.world-item.wit +# ^^^^^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit +# ^ source.wit meta.world-item.wit +# ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit +> @since(version = 1.0.0) +#^^^^ source.wit meta.world-item.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.world-item.wit meta.annotation.since.wit keyword.control.since.wit +# ^ source.wit meta.world-item.wit meta.annotation.since.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.world-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.world-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.world-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.world-item.wit meta.annotation.since.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.annotation.since.wit punctuation.brackets.round.end.wit +> export stable: interface { +#^^^^ source.wit meta.world-item.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit +# ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.other.interface.interface-type.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit ppunctuation.brackets.curly.begin.wit +> get-version: func() -> string; +#^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit +# ^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit +# ^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.string.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit +> } +#^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit +# ^ source.wit meta.world-item.wit meta.export-item.wit punctuation.brackets.curly.end.wit +> +> @unstable(feature = beta-import) +#^^^^ source.wit meta.world-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.world-item.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.world-item.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.world-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.world-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.world-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^ source.wit meta.world-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +> import experimental: interface { +#^^^^ source.wit meta.world-item.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit +# ^^^^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.other.interface.interface-type.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit ppunctuation.brackets.curly.begin.wit +> @unstable(feature = alpha-feature) +#^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +> test-method: func() -> bool; +#^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit +# ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit +# ^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit +# ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.boolean.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit +> } +#^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit +# ^ source.wit meta.world-item.wit meta.import-item.wit punctuation.brackets.curly.end.wit +>} +#^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit +> +>@since(version = 1.2.0) +#^^^^^^ source.wit meta.annotation.since.wit keyword.control.since.wit +# ^ source.wit meta.annotation.since.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.annotation.since.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.annotation.since.wit punctuation.brackets.round.end.wit +>interface resources { +#^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit +# ^ source.wit meta.interface-item.wit +# ^^^^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit +# ^ source.wit meta.interface-item.wit +# ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit +> @unstable(feature = experimental-resource) +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^^^^^^^^^^^ source.wit meta.interface-item.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +> resource connection { +#^^^^ source.wit meta.interface-item.wit meta.whitespace.wit +# ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit +# ^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.whitespace.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit punctuation.brackets.curly.begin.wit +> @since(version = 1.2.0) +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit keyword.control.since.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.since.wit punctuation.brackets.round.end.wit +> constructor(url: string); +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit keyword.other.constructor.constructor-type.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit meta.named-type-list.wit variable.parameter.id.named-type.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit meta.named-type-list.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit meta.named-type-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit meta.named-type-list.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit +> +> @unstable(feature = async-methods) +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit keyword.control.unstable.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit +# ^^^^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.unstable.wit punctuation.brackets.round.end.wit +> connect: func() -> result<(), string>; +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.whitespace.wit +# ^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.result.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.brackets.angle.begin.wit +# ^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.comma.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.whitespace.wit +# ^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.string.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.brackets.angle.end.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.result-list.wit +> +> @deprecated(version = 2.0.0) +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit keyword.control.deprecated.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit punctuation.brackets.round.begin.wit +# ^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit variable.parameter.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit keyword.operator.assignment.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit +# ^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit meta.feature-gate-parameter.wit string.quoted.feature-gate.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.annotation.deprecated.wit punctuation.brackets.round.end.wit +> disconnect: func(); +#^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit keyword.operator.key-value.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.whitespace.wit +# ^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit +> } +#^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit +# ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit punctuation.brackets.curly.end.wit +>} +#^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit +> \ No newline at end of file diff --git a/tests/grammar/unit/basic-feature-gates.wit b/tests/grammar/unit/basic-feature-gates.wit new file mode 100644 index 0000000..d32d8a9 --- /dev/null +++ b/tests/grammar/unit/basic-feature-gates.wit @@ -0,0 +1,18 @@ +// SYNTAX TEST "source.wit" "This tests basic feature gate annotations" + +package test:basic@1.0.0; + +@unstable(feature = test-feature) +interface basic { + test-func: func(); +} + +@since(version = 1.0.0) +interface stable { + stable-func: func(); +} + +@deprecated(version = 2.0.0) +interface old { + old-func: func(); +} diff --git a/tests/grammar/unit/feature-gates-test.wit b/tests/grammar/unit/feature-gates-test.wit new file mode 100644 index 0000000..d3edaee --- /dev/null +++ b/tests/grammar/unit/feature-gates-test.wit @@ -0,0 +1,90 @@ +// SYNTAX TEST "source.wit" "This tests comprehensive feature gate annotations" + +// Test file for feature gate annotations +package example:feature-gates@1.0.0; + +/// Interface with unstable feature gate +@unstable(feature = wasi-io) +interface io { + /// Function with since annotation + @since(version = 1.2.0) + read: func(fd: u32) -> result, error>; + + /// Function with deprecated annotation + @deprecated(version = 2.0.0) + write-old: func(fd: u32, data: list) -> result<_, error>; +} + +/// World with feature gates +@unstable(feature = experimental-world) +world example { + /// Export with since annotation + @since(version = 1.1.0) + export log: interface { + @since(version = 1.1.0) + info: func(msg: string); + + @deprecated(version = 2.0.0) + debug: func(msg: string); + } + + /// Import with unstable feature + @unstable(feature = network-io) + import socket: interface { + connect: func(addr: string) -> result; + } +} + +/// Types with feature gates +@since(version = 1.0.0) +interface types { + /// Record with unstable annotation + @unstable(feature = advanced-types) + record config { + name: string, + @since(version = 1.1.0) + timeout: option, + } + + /// Enum with deprecation + @deprecated(version = 2.0.0) + enum status { + ok, + error, + @unstable(feature = new-status) + pending, + } + + /// Variant with feature gates + @since(version = 1.0.0) + variant result-type { + success(string), + @deprecated(version = 1.5.0) + failure(string), + } + + /// Flags with annotations + @unstable(feature = flag-extensions) + flags permissions { + read, + write, + @since(version = 1.2.0) + execute, + } + + /// Type alias with feature gate + @since(version = 1.1.0) + type user-id = u32; + + /// Resource with feature gate + @unstable(feature = resource-management) + resource file { + constructor(path: string); + + @since(version = 1.1.0) + read: func() -> string; + + @deprecated(version = 2.0.0) + write-sync: func(data: string); + } +}