├── .editorconfig ├── .gitattributes ├── .github ├── instructions │ ├── general.instructions.md │ ├── vscode-extension.instructions.md │ └── wit-grammar.instructions.md ├── release-please-config.json ├── release-please-manifest.json ├── release-please.yml └── workflows │ ├── ci.yml │ ├── commit-message-lint.yml │ ├── release.yml │ └── stale.yml ├── .gitignore ├── .prettierignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── commitlint.config.js ├── esbuild.mjs ├── eslint.config.mjs ├── images ├── LICENSE ├── README.md ├── screenshot.png └── wit-icon.png ├── info.plist ├── language-configuration.json ├── package-lock.json ├── package.json ├── prettier.config.mjs ├── snippets.json ├── src └── extension.ts ├── syntaxes └── wit.tmLanguage.json ├── tests └── grammar │ ├── integration │ ├── char.wit │ ├── char.wit.snap │ ├── conventions.wit │ ├── conventions.wit.snap │ ├── empty.wit │ ├── empty.wit.snap │ ├── feature-gates.wit │ ├── feature-gates.wit.snap │ ├── flags.wit │ ├── flags.wit.snap │ ├── floats.wit │ ├── floats.wit.snap │ ├── guest-name.wit │ ├── guest-name.wit.snap │ ├── import-and-export-resource-alias.wit │ ├── import-and-export-resource-alias.wit.snap │ ├── import-and-export-resource.wit │ ├── import-and-export-resource.wit.snap │ ├── import-func.wit │ ├── import-func.wit.snap │ ├── integers.wit │ ├── integers.wit.snap │ ├── issue544.wit │ ├── issue544.wit.snap │ ├── issue551.wit │ ├── issue551.wit.snap │ ├── issue573.wit │ ├── issue573.wit.snap │ ├── issue607.wit │ ├── issue607.wit.snap │ ├── just-export.wit │ ├── just-export.wit.snap │ ├── keywords-in-interfaces-and-worlds.wit │ ├── keywords-in-interfaces-and-worlds.wit.snap │ ├── keywords.wit │ ├── keywords.wit.snap │ ├── lift-lower-foreign.wit │ ├── lift-lower-foreign.wit.snap │ ├── lists.wit │ ├── lists.wit.snap │ ├── many-arguments.wit │ ├── many-arguments.wit.snap │ ├── markdown.wit │ ├── markdown.wit.snap │ ├── multi-return.wit │ ├── multi-return.wit.snap │ ├── option-result.wit │ ├── option-result.wit.snap │ ├── records.wit │ ├── records.wit.snap │ ├── rename-interface.wit │ ├── rename-interface.wit.snap │ ├── resource-alias.wit │ ├── resource-alias.wit.snap │ ├── resource-borrow-in-record-export.wit │ ├── resource-borrow-in-record-export.wit.snap │ ├── resource-borrow-in-record.wit │ ├── resource-borrow-in-record.wit.snap │ ├── resource-local-alias-borrow-import.wit │ ├── resource-local-alias-borrow-import.wit.snap │ ├── resource-local-alias-borrow.wit │ ├── resource-local-alias-borrow.wit.snap │ ├── resource-local-alias.wit │ ├── resource-local-alias.wit.snap │ ├── resources-in-aggregates.wit │ ├── resources-in-aggregates.wit.snap │ ├── resources-with-lists.wit │ ├── resources-with-lists.wit.snap │ ├── resources.wit │ ├── resources.wit.snap │ ├── result-empty.wit │ ├── result-empty.wit.snap │ ├── ret-areas.wit │ ├── ret-areas.wit.snap │ ├── return-resource-from-export.wit │ ├── return-resource-from-export.wit.snap │ ├── same-names1.wit │ ├── same-names1.wit.snap │ ├── same-names2.wit │ ├── same-names2.wit.snap │ ├── same-names3.wit │ ├── same-names3.wit.snap │ ├── same-names4.wit │ ├── same-names4.wit.snap │ ├── same-names5.wit │ ├── same-names5.wit.snap │ ├── simple-functions.wit │ ├── simple-functions.wit.snap │ ├── simple-http.wit │ ├── simple-http.wit.snap │ ├── simple-lists.wit │ ├── simple-lists.wit.snap │ ├── small-anonymous.wit │ ├── small-anonymous.wit.snap │ ├── smoke-default.wit │ ├── smoke-default.wit.snap │ ├── smoke-export.wit │ ├── smoke-export.wit.snap │ ├── smoke.wit │ ├── smoke.wit.snap │ ├── strings.wit │ ├── strings.wit.snap │ ├── unused-import.wit │ ├── unused-import.wit.snap │ ├── use-across-interfaces.wit │ ├── use-across-interfaces.wit.snap │ ├── variants.wit │ ├── variants.wit.snap │ ├── worlds-with-types.wit │ ├── worlds-with-types.wit.snap │ ├── zero-size-tuple.wit │ └── zero-size-tuple.wit.snap │ └── unit │ ├── basic-feature-gates.wit │ ├── feature-gates-test.wit │ ├── interface.wit │ └── world.wit └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | indent_size = 2 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior to automatically normalize line endings. 2 | * text=auto 3 | 4 | -------------------------------------------------------------------------------- /.github/instructions/general.instructions.md: -------------------------------------------------------------------------------- 1 | --- 2 | applyTo: "**" 3 | --- 4 | 5 | # GitHub Copilot Instructions 6 | 7 | - Use 4 spaces for indentation 8 | - Ensure all code passes ESLint checks (`npm run lint`) 9 | - Fix all lint errors before submitting code 10 | - Use explicit types for all function parameters and return values 11 | - Avoid using `any` unless absolutely necessary 12 | - Organize code into logical modules and folders (e.g., `src/components`, `src/utils`) 13 | - Place tests next to the code they test, using `.test.ts` or `.spec.ts` suffixes 14 | - Use npm for package management 15 | - Keep dependencies up to date and remove unused packages 16 | - Write unit tests for all new features and bug fixes 17 | - Use Jest or Vitest for testing 18 | - Run all tests with `npm test` before pushing changes 19 | - Use feature branches for new work 20 | - Write clear, concise commit messages 21 | - Open a pull request for review before merging to `main` 22 | - Document public functions and components with JSDoc comments 23 | - Update the README and other docs for significant changes 24 | - Store sensitive configuration in `.env` files 25 | - Never commit `.env` or secrets to version control 26 | - Ensure all checks pass (lint, build, test) before merging 27 | 28 | --- 29 | For questions, contact project maintainers or see CONTRIBUTING.md. -------------------------------------------------------------------------------- /.github/instructions/vscode-extension.instructions.md: -------------------------------------------------------------------------------- 1 | --- 2 | applyTo: "**" 3 | --- 4 | 5 | # GitHub Copilot Instructions for VS Code Extension Projects 6 | 7 | > **Note:** These instructions are in addition to the [general project instructions](.github/instructions/general.instructions.md). If there is any overlap, follow the general instructions and refer to this file for VS Code extension–specific requirements. 8 | 9 | - Implement and document the `activate` and `deactivate` functions in `extension.ts` 10 | - Dispose of all resources on deactivation 11 | - Register all commands in `package.json` under `contributes.commands` 12 | - Document each command with a clear description 13 | - Document public functions, classes, and extension APIs with JSDoc comments 14 | - Include usage instructions and examples in the README 15 | - Validate that the extension builds and runs in the VS Code Extension Host 16 | 17 | **Useful Links:** 18 | - [VS Code API Reference](https://code.visualstudio.com/api/references/vscode-api) 19 | - [VS Code Extension Authoring Guide](https://code.visualstudio.com/api/get-started/your-first-extension) 20 | - [VS Code Extension Samples](https://github.com/microsoft/vscode-extension-samples) 21 | 22 | For questions, contact project maintainers or see CONTRIBUTING.md. 23 | -------------------------------------------------------------------------------- /.github/instructions/wit-grammar.instructions.md: -------------------------------------------------------------------------------- 1 | --- 2 | applyTo: "**/wit.tmLanguage.json" 3 | --- 4 | 5 | # Instructions for WIT and Official Grammar 6 | 7 | ## 1. What is WIT? 8 | - WIT (WebAssembly Interface Types) is a language and specification for describing interfaces between WebAssembly modules and their host environments. 9 | - It defines types, functions, resources, and modules in a language-agnostic way. 10 | 11 | ## 2. Official Grammar 12 | - The official WIT grammar is defined in the `wit.tmLanguage.json` file and is used for syntax highlighting and parsing. 13 | - Refer to the [WIT specification](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md) for the authoritative grammar and language rules. 14 | - The grammar covers: 15 | - Identifiers, keywords, and comments 16 | - Type definitions (records, variants, enums, flags, etc.) 17 | - Function and resource declarations 18 | - Module and world definitions 19 | - Versioning, namespace, and aliasing 20 | - Markdown in doc comments 21 | 22 | ## 3. Best Practices 23 | - Follow the official WIT grammar for all `.wit` files. 24 | - Use consistent formatting and indentation for readability. 25 | - Validate `.wit` files using available tools or language support in your editor. 26 | - Place WIT grammar and related files in the appropriate `syntaxes/` directory. 27 | - When updating the grammar, also update or add tests in `tests/grammar/` to cover new features, edge cases, or bug fixes. 28 | - If the WIT specification changes, update both the grammar and the tests to stay in sync. 29 | - For complex or non-obvious grammar rules, add or expand comments in `wit.tmLanguage.json` to help future maintainers. 30 | - Test new or changed grammar rules with both valid and invalid WIT syntax to ensure robust highlighting and error detection. 31 | 32 | ## 4. Resources 33 | - [WIT Specification](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md) 34 | - [wit.tmLanguage.json](syntaxes/wit.tmLanguage.json) (project grammar file) 35 | - [WebAssembly Component Model](https://github.com/WebAssembly/component-model) 36 | - [Grammar Tests](tests/grammar/) (test suite for grammar validation) 37 | 38 | --- 39 | For questions about WIT or its grammar, contact project maintainers or refer to the official specification. 40 | -------------------------------------------------------------------------------- /.github/release-please-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", 3 | "packages": { 4 | ".": { 5 | "changelog-path": "CHANGELOG.md", 6 | "release-type": "node", 7 | "bump-minor-pre-major": true, 8 | "bump-patch-for-minor-pre-major": true, 9 | "draft": false 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/release-please-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | ".": "0.3.4" 3 | } 4 | -------------------------------------------------------------------------------- /.github/release-please.yml: -------------------------------------------------------------------------------- 1 | handleGHRelease: true 2 | manifest: true 3 | manifestConfig: .github/release-please-config.json 4 | manifestFile: .github/release-please-manifest.json 5 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | permissions: 13 | contents: read 14 | issues: write 15 | pull-requests: write 16 | steps: 17 | - uses: actions/checkout@v4 18 | 19 | - uses: actions/setup-node@v3 20 | with: 21 | node-version: "22" 22 | 23 | - name: Install dependencies 24 | run: npm ci 25 | 26 | - name: Run tests 27 | run: npm test 28 | 29 | - name: Update snapshot 30 | run: npm run update-snapshot && git add --all 31 | 32 | - name: Prepare diff for comment 33 | id: diff 34 | continue-on-error: true 35 | run: | 36 | set +e 37 | body=$(git diff --exit-code --diff-filter=AM $GITHUB_SHA -- '*.snap' 2>&1) 38 | echo "exitcode=$?" >> $GITHUB_OUTPUT 39 | body="${body//'<'/'<'}" 40 | body="${body//'>'/'>'}" 41 | delimiter="$(openssl rand -hex 8)" 42 | echo "body<<${delimiter}" >> $GITHUB_OUTPUT 43 | echo "${body:0:64000}" >> $GITHUB_OUTPUT 44 | echo "${delimiter}" >> $GITHUB_OUTPUT 45 | 46 | - uses: marocchino/sticky-pull-request-comment@v2 47 | if: github.event_name == 'pull_request' && steps.diff.outputs.exitcode == '1' 48 | with: 49 | header: sticky-comment-for-git-diff 50 | hide_and_recreate: true 51 | hide_classify: "OUTDATED" 52 | message: | 53 | **Found changes in the snapshot tests. Please review.** 54 |
55 | Diff 📖 56 | 57 |

58 |             ${{ steps.diff.outputs.body }}
59 |             
60 | 61 |
62 | 63 | - uses: marocchino/sticky-pull-request-comment@v2 64 | if: github.event_name == 'pull_request' && steps.diff.outputs.exitcode == '0' 65 | with: 66 | header: sticky-comment-for-git-diff 67 | hide: true 68 | hide_classify: "OUTDATED" 69 | -------------------------------------------------------------------------------- /.github/workflows/commit-message-lint.yml: -------------------------------------------------------------------------------- 1 | name: commit-message-lint 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | commitlint: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | with: 15 | fetch-depth: 0 16 | - uses: wagoid/commitlint-github-action@v5 17 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | release_name: 7 | required: true 8 | type: string 9 | default: "wit-idl: v0.0.1" 10 | tag_name: 11 | required: true 12 | type: string 13 | default: "wit-idl-v0.0.1" 14 | release: 15 | types: 16 | - released 17 | 18 | concurrency: 19 | group: ${{ github.workflow }}-${{ github.ref }} 20 | cancel-in-progress: false 21 | 22 | jobs: 23 | publish: 24 | runs-on: ubuntu-latest 25 | permissions: 26 | contents: write 27 | outputs: 28 | release_name: ${{ steps.event_details.outputs.release_name }} 29 | tag_name: ${{ steps.event_details.outputs.tag_name }} 30 | version: ${{ steps.event_details.outputs.version }} 31 | steps: 32 | - name: Check event details 33 | id: event_details 34 | env: 35 | RELEASE_NAME: ${{ github.event.release.name || inputs.release_name }} 36 | TAG_NAME: ${{ github.event.release.tag_name || inputs.tag_name }} 37 | run: | 38 | echo "release_name=${RELEASE_NAME}" >> $GITHUB_OUTPUT 39 | echo "tag_name=${TAG_NAME}" >> $GITHUB_OUTPUT 40 | echo "version=${TAG_NAME##*-v}" >> $GITHUB_OUTPUT 41 | echo "package_name=${RELEASE_NAME%:*}" >> $GITHUB_OUTPUT 42 | - uses: actions/checkout@v3 43 | with: 44 | ref: ${{ steps.event_details.outputs.tag_name }} 45 | - name: Add files and publish release 46 | env: 47 | GITHUB_TOKEN: ${{ github.token }} 48 | VSCE_PAT: ${{ secrets.PAT_VSCE }} 49 | TAG_NAME: ${{ steps.event_details.outputs.tag_name }} 50 | run: | 51 | npm ci 52 | npm run package 53 | mv wit-idl.vsix ${TAG_NAME}.vsix 54 | gh release upload ${TAG_NAME} ${TAG_NAME}.vsix 55 | npx vsce publish --packagePath ${TAG_NAME}.vsix 56 | 57 | label: 58 | needs: [publish] 59 | runs-on: ubuntu-latest 60 | permissions: 61 | contents: read 62 | issues: write 63 | pull-requests: write 64 | repository-projects: read 65 | steps: 66 | - uses: actions/checkout@v3 67 | 68 | - name: Add label to PR 69 | env: 70 | GITHUB_TOKEN: ${{ github.token }} 71 | run: | 72 | PR_NUMBER=$(gh pr list --state merged --label 'autorelease: tagged' --json number --jq '.[0].number') 73 | gh pr edit ${PR_NUMBER} --add-label 'autorelease: published' 74 | 75 | comments: 76 | needs: [publish] 77 | runs-on: ubuntu-latest 78 | permissions: 79 | contents: write 80 | issues: write 81 | pull-requests: write 82 | steps: 83 | - uses: apexskier/github-release-commenter@v1 84 | with: 85 | GITHUB_TOKEN: ${{ github.token }} 86 | comment-template: | 87 | :tada: This change has been included in ${{ needs.publish.outputs.tag_name }} :tada: 88 | 89 | The release is available on: 90 | - GitHub releases: {release_link} 91 | 92 | Your **[release-please](https://github.com/googleapis/release-please)** bot :rocket::pray: 93 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: 'Close stale issues and PRs (stale.yml)' 2 | on: 3 | schedule: 4 | - cron: '30 1 * * *' 5 | 6 | jobs: 7 | stale: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/stale@v9 11 | with: 12 | stale-issue-message: > 13 | This issue has been marked as stale because it has been open for 60 days with no activity. 14 | It will be closed in 7 days unless there is further activity. To keep it open, add a comment or remove the stale label. 15 | 16 | stale-pr-message: > 17 | This pull request has been marked as stale because it has been open for 60 days with no activity. 18 | It will be closed in 10 days unless there is further activity. To keep it open, add a comment or remove the stale label. 19 | 20 | close-issue-message: > 21 | This issue was closed because it has been inactive for 7 days after being marked as stale. 22 | 23 | close-pr-message: > 24 | This pull request was closed because it has been inactive for 10 days after being marked as stale. 25 | 26 | days-before-issue-stale: 60 27 | days-before-pr-stale: 60 28 | days-before-issue-close: 7 29 | days-before-pr-close: 10 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # node-waf configuration 29 | .lock-wscript 30 | 31 | # Compiled binary addons (https://nodejs.org/api/addons.html) 32 | build/Release 33 | 34 | # Dependency directories 35 | node_modules/ 36 | jspm_packages/ 37 | 38 | # TypeScript v1 declaration files 39 | typings/ 40 | 41 | # TypeScript cache 42 | *.tsbuildinfo 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Microbundle cache 51 | .rpt2_cache/ 52 | .rts2_cache_cjs/ 53 | .rts2_cache_es/ 54 | .rts2_cache_umd/ 55 | 56 | # Optional REPL history 57 | .node_repl_history 58 | 59 | # Output of 'npm pack' 60 | *.tgz 61 | 62 | # Yarn Integrity file 63 | .yarn-integrity 64 | 65 | # dotenv environment variables file 66 | .env 67 | .env.test 68 | 69 | # parcel-bundler cache (https://parceljs.org/) 70 | .cache 71 | 72 | # Typescript Output 73 | dist/ 74 | 75 | # VSCode extension development 76 | .vscode-test/ 77 | *.vsix 78 | *.tmLanguage.json 79 | !/syntaxes/*.tmLanguage.json 80 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Files to exclude from Prettier formatting 2 | 3 | # Keep existing exclusions 4 | *.md 5 | *.yml 6 | *.yaml 7 | 8 | # WIT files (custom syntax, not supported by Prettier) 9 | *.wit 10 | 11 | # Dependencies 12 | node_modules/ 13 | 14 | # Build outputs 15 | dist/ 16 | *.vsix 17 | 18 | # Test snapshots (these are auto-generated and shouldn't be manually formatted) 19 | *.snap 20 | 21 | # Binary files 22 | *.png 23 | *.jpg 24 | *.jpeg 25 | *.gif 26 | *.ico 27 | *.pdf 28 | 29 | # Package lock files 30 | package-lock.json 31 | 32 | # Git 33 | .git/ -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--disable-extensions", 15 | "--extensionDevelopmentPath=${workspaceFolder}", 16 | "${workspaceRoot}/tests/grammar" 17 | ] 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "editor.codeActionsOnSave": { 5 | "source.fixAll.eslint": "explicit" 6 | }, 7 | "[typescript]": { 8 | "editor.defaultFormatter": "esbenp.prettier-vscode", 9 | "editor.formatOnSave": true 10 | }, 11 | "[javascript]": { 12 | "editor.defaultFormatter": "esbenp.prettier-vscode", 13 | "editor.formatOnSave": true 14 | }, 15 | "[json]": { 16 | "editor.defaultFormatter": "esbenp.prettier-vscode", 17 | "editor.formatOnSave": true 18 | }, 19 | "[jsonc]": { 20 | "editor.defaultFormatter": "esbenp.prettier-vscode", 21 | "editor.formatOnSave": true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "watch", 6 | "type": "npm", 7 | "script": "watch", 8 | "problemMatcher": [], 9 | "presentation": { 10 | "group": "build" 11 | } 12 | }, 13 | { 14 | "label": "build", 15 | "dependsOn": ["watch"], 16 | "group": { 17 | "kind": "build", 18 | "isDefault": true 19 | }, 20 | "problemMatcher": [] 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .github/ 4 | .gitignore 5 | tests/ 6 | commitlint.config.js 7 | src/** 8 | .yarnrc 9 | **/tsconfig.json 10 | **/.eslintrc.json 11 | **/*.map 12 | **/*.ts -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.3.4](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.3.3...wit-idl-v0.3.4) (2025-05-29) 4 | 5 | 6 | ### Features 7 | 8 | * add support for feature gates ([8624eb4](https://github.com/bytecodealliance/vscode-wit/commit/8624eb4af5f291bd6952a210966ff3f4865c52c5)), closes [#34](https://github.com/bytecodealliance/vscode-wit/issues/34) 9 | 10 | ## [0.3.3](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.3.2...wit-idl-v0.3.3) (2025-05-17) 11 | 12 | 13 | ### Bug Fixes 14 | 15 | * sync vscode types and engine ([482fd7d](https://github.com/bytecodealliance/vscode-wit/commit/482fd7d6b4a33ba8440560c4a9644c784fcd2ca6)) 16 | 17 | ## [0.3.2](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.3.1...wit-idl-v0.3.2) (2025-05-12) 18 | 19 | 20 | ### Bug Fixes 21 | 22 | * comments on type aliases are now recognized as comments ([80c21d1](https://github.com/bytecodealliance/vscode-wit/commit/80c21d19ee4004bbcccf68c71ed13ceba6c4e7f6)) 23 | * separate rules for `result` keyword with and without <> ([cf87929](https://github.com/bytecodealliance/vscode-wit/commit/cf8792998880407f31399418a964bfe43454c54f)) 24 | 25 | ## [0.3.1](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.3.0...wit-idl-v0.3.1) (2023-09-05) 26 | 27 | 28 | ### Bug Fixes 29 | 30 | * missing resource methods ([#31](https://github.com/bytecodealliance/vscode-wit/issues/31)) ([36d0ceb](https://github.com/bytecodealliance/vscode-wit/commit/36d0ceb7a565b3b7e48b696c6322ffb88ea6e3c0)) 31 | 32 | ## [0.3.0](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.2.3...wit-idl-v0.3.0) (2023-09-04) 33 | 34 | 35 | ### ⚠ BREAKING CHANGES 36 | 37 | * The `union` type has been removed from the WIT grammar. 38 | 39 | ### Bug Fixes 40 | 41 | * remove union typedef ([#28](https://github.com/bytecodealliance/vscode-wit/issues/28)) ([8b97b47](https://github.com/bytecodealliance/vscode-wit/commit/8b97b47b98a9fcf018cc5a879c0f30b44866d911)) 42 | 43 | ## [0.2.3](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.2.2...wit-idl-v0.2.3) (2023-09-03) 44 | 45 | 46 | ### Features 47 | 48 | * add basic markdown highlighting in doc-comments ([e64075b](https://github.com/bytecodealliance/vscode-wit/commit/e64075b4c76041e3262f690b1e8f918bc69b74b6)) 49 | * add simple auto-complete for keywords and built-in types ([7bb2014](https://github.com/bytecodealliance/vscode-wit/commit/7bb2014f3d08b3d5a7084008163b2580d758366f)) 50 | * automatically continue doc-comments (`///`, `/**`) on next line ([b037f85](https://github.com/bytecodealliance/vscode-wit/commit/b037f853533db8323dd988f98afe0951440b7bf6)) 51 | * configure wordPattern to improve word highlighting and autocomplete suggestions ([7e887c6](https://github.com/bytecodealliance/vscode-wit/commit/7e887c6e50ff76576abc4d7ef45cc61e626124fc)) 52 | 53 | 54 | ### Bug Fixes 55 | 56 | * target newer VSCode to enable extension activation ([5c80b4a](https://github.com/bytecodealliance/vscode-wit/commit/5c80b4ad730f79100ced29970e963d034ff09dc6)) 57 | 58 | ## [0.2.2](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.2.1...wit-idl-v0.2.2) (2023-09-03) 59 | 60 | 61 | ### Features 62 | 63 | * add toplevel use keyword to wit grammar ([#26](https://github.com/bytecodealliance/vscode-wit/issues/26)) ([8990d18](https://github.com/bytecodealliance/vscode-wit/commit/8990d1836f2eb9e03de2fad0cb1d7acd1e7e61cb)) 64 | 65 | ## [0.2.1](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.2.0...wit-idl-v0.2.1) (2023-09-02) 66 | 67 | 68 | ### Bug Fixes 69 | 70 | * remove commitlint config file from extension package ([#23](https://github.com/bytecodealliance/vscode-wit/issues/23)) ([b75af2d](https://github.com/bytecodealliance/vscode-wit/commit/b75af2d050344f545f6c7dc848a6cd8a01160517)) 71 | 72 | ## [0.2.0](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.1.2...wit-idl-v0.2.0) (2023-07-08) 73 | 74 | 75 | ### ⚠ BREAKING CHANGES 76 | 77 | * The `default`, `self`, `pkg` keywords have been removed from the grammar. 78 | 79 | ### Features 80 | 81 | * add package keyword to wit grammar ([#19](https://github.com/bytecodealliance/vscode-wit/issues/19)) ([8c9acc7](https://github.com/bytecodealliance/vscode-wit/commit/8c9acc7cb65b2dec1f15f2de8557c2e2f21e347c)) 82 | 83 | ## [0.1.2](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.1.1...wit-idl-v0.1.2) (2023-07-03) 84 | 85 | 86 | ### Features 87 | 88 | * add include keyword to wit grammar ([#17](https://github.com/bytecodealliance/vscode-wit/issues/17)) ([dcc5a30](https://github.com/bytecodealliance/vscode-wit/commit/dcc5a30d300146eac0ee5fac8287a4d30ce6106f)) 89 | 90 | ## [0.1.1](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.1.0...wit-idl-v0.1.1) (2023-04-15) 91 | 92 | 93 | ### Bug Fixes 94 | 95 | * lookbehind assertion with malformed regex ([#11](https://github.com/bytecodealliance/vscode-wit/issues/11)) ([8787a0a](https://github.com/bytecodealliance/vscode-wit/commit/8787a0a9c283249448f07a7ee97d2a9e7365e4ac)) 96 | * move repository fields to top-level object ([#13](https://github.com/bytecodealliance/vscode-wit/issues/13)) ([74f1ffc](https://github.com/bytecodealliance/vscode-wit/commit/74f1ffcf9ed0bd700066e51721bff042a1589c93)) 97 | 98 | ## [0.1.0](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.0.3...wit-idl-v0.1.0) (2023-04-14) 99 | 100 | 101 | ### Miscellaneous Chores 102 | 103 | * release 0.1.0 ([e50fec0](https://github.com/bytecodealliance/vscode-wit/commit/e50fec096a700b25b98570381eb77f2be9962ab2)) 104 | 105 | ## [0.0.3](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.0.2...wit-idl-v0.0.3) (2023-04-12) 106 | 107 | 108 | ### Bug Fixes 109 | 110 | * ensure kebab case for identifiers ([#5](https://github.com/bytecodealliance/vscode-wit/issues/5)) ([7ec3057](https://github.com/bytecodealliance/vscode-wit/commit/7ec30578ba6257669a40fa757688a82eebcef992)) 111 | 112 | ## [0.0.2](https://github.com/bytecodealliance/vscode-wit/compare/wit-idl-v0.0.1...wit-idl-v0.0.2) (2023-04-10) 113 | 114 | 115 | ### Features 116 | 117 | * add wit idl support for vscode ([b24abb8](https://github.com/bytecodealliance/vscode-wit/commit/b24abb873864a3d1fae838f101b7e3a06183e6a2)) 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WIT IDL for VSCode 2 | 3 | This package is a Visual Studio Code extension to recognize and highlight the WebAssembly Interface Type (WIT) Interface Definition Language (IDL). It can also be used as a bundle in TextMate. 4 | 5 | The description of the WIT format can be found at: https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md 6 | 7 | 8 | ## Features 9 | 10 | ![Screenshot](images/screenshot.png) 11 | 12 | This extension provides: 13 | - Basic syntax highlighting of ".wit" files. 14 | - [Snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets) for worlds and interfaces. 15 | - Basic markdown highlighting in comments. 16 | - Simple list-based autocomplete. 17 | 18 | ## Installation 19 | 20 | To install from source, follow these steps: 21 | * Clone the repository: `git clone https://github.com/bytecodealliance/vscode-wit.git && cd vscode-wit` 22 | * Run npm commands to install: 23 | `npm ci && npm run install-plugin` 24 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["@commitlint/config-conventional"], 3 | rules: { 4 | "type-enum": [2, "always", ["build", "chore", "docs", "feat", "fix", "refactor", "style", "test"]], 5 | "body-max-line-length": [0, "always"], 6 | "footer-max-line-length": [0, "always"], 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /esbuild.mjs: -------------------------------------------------------------------------------- 1 | // ESBuild configuration for building the VSCode extension (sample-based) 2 | // See: https://github.com/microsoft/vscode-extension-samples/blob/main/esbuild-sample/esbuild.js 3 | 4 | import * as esbuild from "esbuild"; 5 | 6 | const production = process.argv.includes("--production"); 7 | const watch = process.argv.includes("--watch"); 8 | 9 | /** 10 | * @type {import('esbuild').Plugin} 11 | */ 12 | const esbuildProblemMatcherPlugin = { 13 | name: "esbuild-problem-matcher", 14 | setup(build) { 15 | build.onStart(() => { 16 | console.log("[watch] build started"); 17 | }); 18 | build.onEnd((result) => { 19 | result.errors.forEach(({ text, location }) => { 20 | console.error(`✘ [ERROR] ${text}`); 21 | if (location) { 22 | console.error(` ${location.file}:${location.line}:${location.column}:`); 23 | } 24 | }); 25 | console.log("[watch] build finished"); 26 | }); 27 | }, 28 | }; 29 | 30 | async function main() { 31 | const ctx = await esbuild.context({ 32 | entryPoints: ["src/extension.ts"], 33 | bundle: true, 34 | format: "cjs", 35 | minify: production, 36 | sourcemap: !production, 37 | sourcesContent: false, 38 | platform: "node", 39 | outfile: "dist/extension.js", 40 | external: ["vscode"], 41 | logLevel: "silent", 42 | plugins: [esbuildProblemMatcherPlugin], 43 | }); 44 | if (watch) { 45 | await ctx.watch(); 46 | } else { 47 | await ctx.rebuild(); 48 | await ctx.dispose(); 49 | } 50 | } 51 | 52 | main().catch((e) => { 53 | console.error(e); 54 | process.exit(1); 55 | }); 56 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import globals from "globals"; 2 | import js from "@eslint/js"; 3 | import tseslint from "typescript-eslint"; 4 | import css from "@eslint/css"; 5 | import prettier from "eslint-plugin-prettier"; 6 | 7 | export default [ 8 | // Base JavaScript configuration 9 | js.configs.recommended, 10 | 11 | // TypeScript configuration 12 | ...tseslint.configs.recommended, 13 | 14 | // General configuration for JS/TS files 15 | { 16 | files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], 17 | languageOptions: { 18 | globals: { ...globals.browser, ...globals.node }, 19 | }, 20 | }, 21 | 22 | // TypeScript and Prettier rules 23 | { 24 | files: ["**/*.{ts,tsx,js,jsx}"], 25 | plugins: { 26 | prettier, 27 | }, 28 | rules: { 29 | // TypeScript rules 30 | "@typescript-eslint/no-unused-vars": "off", 31 | 32 | // Prettier rules 33 | "prettier/prettier": "warn", 34 | 35 | // Style rules 36 | quotes: ["warn", "double"], 37 | }, 38 | }, 39 | 40 | // CSS configuration 41 | { 42 | files: ["**/*.css"], 43 | plugins: { 44 | css, 45 | }, 46 | language: "css/css", 47 | rules: { 48 | ...css.configs.recommended.rules, 49 | }, 50 | }, 51 | ]; 52 | -------------------------------------------------------------------------------- /images/LICENSE: -------------------------------------------------------------------------------- 1 | # Creative Commons CC0 1.0 Universal 2 | 3 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. 4 | 5 | ## Statement of Purpose 6 | 7 | The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). 8 | 9 | Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. 10 | 11 | For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 12 | 13 | 1. __Copyright and Related Rights.__ A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: 14 | 15 | i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; 16 | 17 | ii. moral rights retained by the original author(s) and/or performer(s); 18 | 19 | iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; 20 | 21 | iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; 22 | 23 | v. rights protecting the extraction, dissemination, use and reuse of data in a Work; 24 | 25 | vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and 26 | 27 | vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 28 | 29 | 2. __Waiver.__ To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 30 | 31 | 3. __Public License Fallback.__ Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 32 | 33 | 4. __Limitations and Disclaimers.__ 34 | 35 | a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. 36 | 37 | b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. 38 | 39 | c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. 40 | 41 | d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. -------------------------------------------------------------------------------- /images/README.md: -------------------------------------------------------------------------------- 1 | # Licensing for Images 2 | 3 | All image assets are under the CC0 LICENSE and in the public domain unless specified otherwise. 4 | 5 | ![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png) 6 | 7 | To the extent possible under law, the [Bytecode Alliance](bytecodealliance.org) has waived all copyright and related or neighboring rights to WIT Icon. 8 | -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytecodealliance/vscode-wit/e32c8a6b311cb96f936bfa945b2fa8c2710fa4e9/images/screenshot.png -------------------------------------------------------------------------------- /images/wit-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytecodealliance/vscode-wit/e32c8a6b311cb96f936bfa945b2fa8c2710fa4e9/images/wit-icon.png -------------------------------------------------------------------------------- /info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | description 6 | WebAssembly Interface Type (WIT) Interface Definition Language (IDL) 7 | name 8 | WIT 9 | uuid 10 | 73554272-ff1a-4515-879e-39a6dcec955d 11 | 12 | 13 | -------------------------------------------------------------------------------- /language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "//", 4 | "blockComment": ["/*", "*/"] 5 | }, 6 | "brackets": [ 7 | ["{", "}"], 8 | ["[", "]"], 9 | ["(", ")"] 10 | ], 11 | "colorizedBracketPairs": [ 12 | ["{", "}"], 13 | ["[", "]"], 14 | ["(", ")"] 15 | ], 16 | "autoClosingPairs": [ 17 | { 18 | "open": "{", 19 | "close": "}" 20 | }, 21 | { 22 | "open": "[", 23 | "close": "]" 24 | }, 25 | { 26 | "open": "(", 27 | "close": ")" 28 | }, 29 | { 30 | "open": "\"", 31 | "close": "\"", 32 | "notIn": ["string"] 33 | }, 34 | { 35 | "open": "'", 36 | "close": "'", 37 | "notIn": ["string"] 38 | }, 39 | { 40 | "open": "/*", 41 | "close": "*/", 42 | "notIn": ["string"] 43 | } 44 | ], 45 | "autoCloseBefore": ";:.,=}])> \n\t", 46 | "surroundingPairs": [ 47 | ["{", "}"], 48 | ["[", "]"], 49 | ["(", ")"], 50 | ["<", ">"], 51 | ["\"", "\""], 52 | ["'", "'"] 53 | ], 54 | "indentationRules": { 55 | "increaseIndentPattern": "^.*\\{[^}\"']*$|^.*\\([^\\)\"']*$", 56 | "decreaseIndentPattern": "^\\s*(\\s*\\/[*].*[*]\\/\\s*)*[})]" 57 | }, 58 | "folding": { 59 | "markers": { 60 | "start": "^\\s*// region:\\b", 61 | "end": "^\\s*// endregion\\b" 62 | } 63 | }, 64 | "wordPattern": "((? u32\n}", 10 | "description": "Adds a simple world" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | 3 | const builtinTypes = [ 4 | "u8", 5 | "u16", 6 | "u32", 7 | "u64", 8 | "s8", 9 | "s16", 10 | "s32", 11 | "s64", 12 | "float32", 13 | "float64", 14 | "char", 15 | "bool", 16 | "string", 17 | "tuple", 18 | "list", 19 | "option", 20 | "result", 21 | "borrow", 22 | ]; 23 | 24 | const keywords = [ 25 | "_", 26 | "as", 27 | "constructor", 28 | "enum", 29 | "export", 30 | "flags", 31 | "func", 32 | "import", 33 | "include", 34 | "interface", 35 | "package", 36 | "record", 37 | "resource", 38 | "static", 39 | "type", 40 | "use", 41 | "variant", 42 | "with", 43 | "world", 44 | ]; 45 | 46 | const staticCompletions = new vscode.CompletionList( 47 | [ 48 | ...keywords.map((keyword) => new vscode.CompletionItem(keyword, vscode.CompletionItemKind.Keyword)), 49 | ...builtinTypes.map((type) => new vscode.CompletionItem(type, vscode.CompletionItemKind.Struct)), 50 | ], 51 | /* isIncomplete: */ true 52 | ); 53 | 54 | export function activate(context: vscode.ExtensionContext) { 55 | // VSCode does not support having both its built-in suggestions _and_ a custom completion provider. 56 | // But, without a proper LSP, we do want both! 57 | // Registering the provider directly on "wit" would disable VSCode's built-in suggestions. 58 | // The workaround is to register it for all languages (`*`) and then dynamically check the document type. 59 | const provider = vscode.languages.registerCompletionItemProvider("*", { 60 | provideCompletionItems( 61 | document: vscode.TextDocument, 62 | position: vscode.Position, 63 | token: vscode.CancellationToken, 64 | context: vscode.CompletionContext 65 | ) { 66 | if (document.languageId !== "wit") { 67 | return; 68 | } 69 | 70 | return staticCompletions; 71 | }, 72 | }); 73 | 74 | context.subscriptions.push(provider); 75 | } 76 | 77 | export function deactivate() {} 78 | -------------------------------------------------------------------------------- /tests/grammar/integration/char.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface chars { 4 | /// A function that accepts a character 5 | take-char: func(x: char) 6 | /// A function that returns a character 7 | return-char: func() -> char 8 | } 9 | 10 | world the-world { 11 | import chars 12 | export chars 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/char.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface chars { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > /// A function that accepts a character 15 | #^^^^^ source.wit meta.interface-item.wit comment.line.documentation.wit 16 | # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.wit meta.interface-item.wit comment.line.documentation.wit 17 | > take-char: func(x: char) 18 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 19 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 20 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 21 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 22 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 23 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 24 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 25 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 26 | # ^ 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 27 | # ^ 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 28 | # ^ 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 29 | # ^^^^ 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 30 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 31 | > /// A function that returns a character 32 | #^^^^^ source.wit meta.interface-item.wit comment.line.documentation.wit 33 | # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.wit meta.interface-item.wit comment.line.documentation.wit 34 | > return-char: func() -> char 35 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 36 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 37 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 38 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 39 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 40 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 41 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 43 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 44 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 45 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 46 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 47 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.string.wit 48 | >} 49 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 50 | > 51 | >world the-world { 52 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 53 | # ^ source.wit meta.world-item.wit 54 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 55 | # ^ source.wit meta.world-item.wit 56 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 57 | > import chars 58 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 59 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 60 | # ^ source.wit meta.world-item.wit meta.import-item.wit 61 | # ^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 62 | > export chars 63 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 64 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 65 | # ^ source.wit meta.world-item.wit meta.export-item.wit 66 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 67 | >} 68 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 69 | > -------------------------------------------------------------------------------- /tests/grammar/integration/conventions.wit: -------------------------------------------------------------------------------- 1 | // hello 🐱 world 2 | 3 | package foo:foo 4 | 5 | interface conventions { 6 | kebab-case: func() 7 | 8 | record ludicrous-speed { 9 | how-fast-are-you-going: u32, 10 | i-am-going-extremely-slow: u64, 11 | } 12 | 13 | foo: func(x: ludicrous-speed) 14 | %function-with-dashes: func() 15 | %function-with-no-weird-characters: func() 16 | 17 | apple: func() 18 | apple-pear: func() 19 | apple-pear-grape: func() 20 | a0: func() 21 | 22 | // Comment out identifiers that collide when mapped to snake_case, for now; see 23 | // https://github.com/WebAssembly/component-model/issues/118 24 | //APPLE: func() 25 | //APPLE-pear-GRAPE: func() 26 | //apple-PEAR-grape: func() 27 | 28 | is-XML: func() 29 | 30 | %explicit: func() 31 | %explicit-kebab: func() 32 | 33 | // Identifiers with the same name as keywords are quoted. 34 | %bool: func() 35 | } 36 | 37 | world the-world { 38 | import conventions 39 | export conventions 40 | } 41 | -------------------------------------------------------------------------------- /tests/grammar/integration/empty.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world empty {} 4 | -------------------------------------------------------------------------------- /tests/grammar/integration/empty.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world empty {} 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 15 | > -------------------------------------------------------------------------------- /tests/grammar/integration/feature-gates.wit: -------------------------------------------------------------------------------- 1 | package test:feature-gates@1.0.0; 2 | 3 | @unstable(feature = experimental-interface) 4 | interface experimental { 5 | @since(version = 1.1.0) 6 | stable-func: func(input: string) -> string; 7 | 8 | @unstable(feature = new-api) 9 | experimental-func: func(data: list) -> result; 10 | 11 | @deprecated(version = 2.0.0) 12 | old-func: func(); 13 | } 14 | 15 | @since(version = 1.0.0) 16 | interface stable-interface { 17 | basic-func: func(); 18 | 19 | @deprecated(version = 1.5.0) 20 | deprecated-method: func(x: u32); 21 | } 22 | 23 | @unstable(feature = future-world) 24 | world feature-world { 25 | @since(version = 1.0.0) 26 | export stable: interface { 27 | get-version: func() -> string; 28 | } 29 | 30 | @unstable(feature = beta-import) 31 | import experimental: interface { 32 | @unstable(feature = alpha-feature) 33 | test-method: func() -> bool; 34 | } 35 | } 36 | 37 | @since(version = 1.2.0) 38 | interface resources { 39 | @unstable(feature = experimental-resource) 40 | resource connection { 41 | @since(version = 1.2.0) 42 | constructor(url: string); 43 | 44 | @unstable(feature = async-methods) 45 | connect: func() -> result<(), string>; 46 | 47 | @deprecated(version = 2.0.0) 48 | disconnect: func(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tests/grammar/integration/flags.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface %flags { 4 | flags flag1 { 5 | b0, 6 | } 7 | 8 | flags flag2 { 9 | b0, b1, 10 | } 11 | 12 | flags flag4 { 13 | b0, b1, b2, b3, 14 | } 15 | 16 | flags flag8 { 17 | b0, b1, b2, b3, b4, b5, b6, b7, 18 | } 19 | 20 | flags flag16 { 21 | b0, b1, b2, b3, b4, b5, b6, b7, 22 | b8, b9, b10, b11, b12, b13, b14, b15, 23 | } 24 | 25 | flags flag32 { 26 | b0, b1, b2, b3, b4, b5, b6, b7, 27 | b8, b9, b10, b11, b12, b13, b14, b15, 28 | b16, b17, b18, b19, b20, b21, b22, b23, 29 | b24, b25, b26, b27, b28, b29, b30, b31, 30 | } 31 | 32 | flags flag64 { 33 | b0, b1, b2, b3, b4, b5, b6, b7, 34 | b8, b9, b10, b11, b12, b13, b14, b15, 35 | b16, b17, b18, b19, b20, b21, b22, b23, 36 | b24, b25, b26, b27, b28, b29, b30, b31, 37 | b32, b33, b34, b35, b36, b37, b38, b39, 38 | b40, b41, b42, b43, b44, b45, b46, b47, 39 | b48, b49, b50, b51, b52, b53, b54, b55, 40 | b56, b57, b58, b59, b60, b61, b62, b63, 41 | } 42 | 43 | roundtrip-flag1: func(x: flag1) -> flag1 44 | roundtrip-flag2: func(x: flag2) -> flag2 45 | roundtrip-flag4: func(x: flag4) -> flag4 46 | roundtrip-flag8: func(x: flag8) -> flag8 47 | roundtrip-flag16: func(x: flag16) -> flag16 48 | roundtrip-flag32: func(x: flag32) -> flag32 49 | roundtrip-flag64: func(x: flag64) -> flag64 50 | } 51 | 52 | world the-flags { 53 | import %flags 54 | export %flags 55 | } 56 | -------------------------------------------------------------------------------- /tests/grammar/integration/floats.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface floats { 4 | float32-param: func(x: float32) 5 | float64-param: func(x: float64) 6 | float32-result: func() -> float32 7 | float64-result: func() -> float64 8 | } 9 | 10 | world the-world { 11 | import floats 12 | export floats 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/floats.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface floats { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > float32-param: func(x: float32) 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 17 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 18 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 19 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 20 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 22 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 23 | # ^ 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 24 | # ^ 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 25 | # ^ 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 26 | # ^^^^^^^ 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 27 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 28 | > float64-param: func(x: float64) 29 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 30 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 31 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 32 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 33 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 35 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 36 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 37 | # ^ 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 38 | # ^ 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 39 | # ^ 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 40 | # ^^^^^^^ 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 41 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 42 | > float32-result: func() -> float32 43 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 44 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 45 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 46 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 47 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 48 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 49 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 50 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 51 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 52 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 53 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 54 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 55 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.numeric.wit 56 | > float64-result: func() -> float64 57 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 58 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 59 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 60 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 61 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 62 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 63 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 64 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 65 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 66 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 67 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 68 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 69 | # ^^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.numeric.wit 70 | >} 71 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 72 | > 73 | >world the-world { 74 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 75 | # ^ source.wit meta.world-item.wit 76 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 77 | # ^ source.wit meta.world-item.wit 78 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 79 | > import floats 80 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 81 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 82 | # ^ source.wit meta.world-item.wit meta.import-item.wit 83 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 84 | > export floats 85 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 86 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 87 | # ^ source.wit meta.world-item.wit meta.export-item.wit 88 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 89 | >} 90 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 91 | > -------------------------------------------------------------------------------- /tests/grammar/integration/guest-name.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | interface guest { 4 | type guest = u32 5 | x: func() -> guest 6 | } 7 | 8 | interface other-guest { 9 | guest: func() 10 | } 11 | 12 | world another-guest { 13 | import guest 14 | export guest 15 | import other-guest 16 | export other-guest 17 | 18 | export i1 19 | export i2 20 | export i3 21 | export i4 22 | } 23 | 24 | interface i1 { 25 | enum guest { 26 | a, b, c, 27 | } 28 | x: func() -> guest 29 | } 30 | 31 | interface i2 { 32 | use i1.{guest} 33 | x: func() -> guest 34 | } 35 | 36 | interface i3 { 37 | record guest { 38 | x: u32, 39 | } 40 | x: func() -> guest 41 | } 42 | 43 | interface i4 { 44 | variant guest { 45 | x(u32), 46 | } 47 | x: func() -> guest 48 | } 49 | -------------------------------------------------------------------------------- /tests/grammar/integration/import-and-export-resource-alias.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface foo { 4 | resource x { 5 | constructor(s: string) 6 | get: func() -> string 7 | } 8 | 9 | type y = x 10 | transmogriphy: func(y: y) -> x 11 | } 12 | 13 | world resources { 14 | import foo 15 | export foo 16 | } 17 | -------------------------------------------------------------------------------- /tests/grammar/integration/import-and-export-resource.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface baz { 4 | resource x { 5 | constructor(s: string) 6 | get: func() -> string 7 | } 8 | } 9 | 10 | world resources { 11 | import baz 12 | export baz 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/import-and-export-resource.wit.snap: -------------------------------------------------------------------------------- 1 | >package my:resources 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^^^^^ 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 7 | > 8 | >interface baz { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > resource x { 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.whitespace.wit 20 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit punctuation.brackets.curly.begin.wit 21 | > constructor(s: string) 22 | #^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit 23 | # ^^^^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.constructor-type.wit keyword.other.constructor.constructor-type.wit 24 | # ^ 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 25 | # ^ 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 26 | # ^ 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 27 | # ^ 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 28 | # ^^^^^^ 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 29 | # ^ 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 30 | > get: func() -> string 31 | #^^^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit 32 | # ^^^ 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 33 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit keyword.operator.key-value.wit 34 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.whitespace.wit 35 | # ^^^^ 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 36 | # ^ 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 37 | # ^ 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 38 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 39 | # ^^ 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 40 | # ^ 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 41 | # ^^^^^^ 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 entity.name.type.string.wit 42 | > } 43 | #^^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit meta.whitespace.wit 44 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit meta.resource-methods.wit punctuation.brackets.curly.end.wit 45 | >} 46 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 47 | > 48 | >world resources { 49 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 50 | # ^ source.wit meta.world-item.wit 51 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 52 | # ^ source.wit meta.world-item.wit 53 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 54 | > import baz 55 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 56 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 57 | # ^ source.wit meta.world-item.wit meta.import-item.wit 58 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 59 | > export baz 60 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 61 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 62 | # ^ source.wit meta.world-item.wit meta.export-item.wit 63 | # ^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 64 | >} 65 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 66 | > -------------------------------------------------------------------------------- /tests/grammar/integration/import-func.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world foo { 4 | import foo: func() 5 | import foo1: func() -> string 6 | import foo2: func(x: string) 7 | import foo3: func(x: list) -> result, string> 8 | } 9 | -------------------------------------------------------------------------------- /tests/grammar/integration/integers.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface integers { 4 | a1: func(x: u8) 5 | a2: func(x: s8) 6 | a3: func(x: u16) 7 | a4: func(x: s16) 8 | a5: func(x: u32) 9 | a6: func(x: s32) 10 | a7: func(x: u64) 11 | a8: func(x: s64) 12 | 13 | a9: func( 14 | p1: u8, 15 | p2: s8, 16 | p3: u16, 17 | p4: s16, 18 | p5: u32, 19 | p6: s32, 20 | p7: u64, 21 | p8: s64, 22 | ) 23 | 24 | 25 | r1: func() -> u8 26 | r2: func() -> s8 27 | r3: func() -> u16 28 | r4: func() -> s16 29 | r5: func() -> u32 30 | r6: func() -> s32 31 | r7: func() -> u64 32 | r8: func() -> s64 33 | 34 | pair-ret: func() -> tuple 35 | } 36 | 37 | world the-world { 38 | import integers 39 | export integers 40 | } 41 | -------------------------------------------------------------------------------- /tests/grammar/integration/issue544.wit: -------------------------------------------------------------------------------- 1 | // ./wit/issue.wit 2 | package foo:foo 3 | 4 | world issue { 5 | variant variants { 6 | list-u8(list), 7 | list-tuple-bool(list>), 8 | } 9 | 10 | record record-tuple-u8 { 11 | field: tuple, 12 | } 13 | 14 | import func-using-list-u8-in-args: func(body: list) -> () 15 | export func-using-list-tuple-bool-in-return: func() -> list> 16 | export func-using-tuple-u8-in-return: func() -> tuple 17 | } 18 | -------------------------------------------------------------------------------- /tests/grammar/integration/issue551.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world bindings { 4 | import component 5 | } 6 | 7 | interface component { 8 | type value = list> 9 | type entity = list> 10 | 11 | add-components: func(entity: u64, data: entity) 12 | query-eval: func(q: u64) -> list>> 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/issue573.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface types-interface { 4 | /// "package of named fields" 5 | record r { 6 | a: u32, 7 | b: string, 8 | c: list>> 9 | } 10 | 11 | /// values of this type will be one of the specified cases 12 | variant human { 13 | baby, 14 | /// type payload 15 | child(u32), // optional type payload 16 | adult, 17 | } 18 | 19 | /// similar to `variant`, but no type payloads 20 | enum errno { 21 | too-big, 22 | too-small, 23 | too-fast, 24 | too-slow, 25 | } 26 | 27 | /// a bitflags type 28 | flags permissions { 29 | read, 30 | write, 31 | exec, 32 | } 33 | 34 | // type aliases are allowed to primitive types and additionally here are some 35 | // examples of other types 36 | type t1 = u32 37 | type t2 = tuple // tuple 38 | type t3 = string 39 | type t4 = option // option 40 | /// no "ok" type 41 | type t5 = result<_, errno> // no "ok" type 42 | type t6 = result // no "err" type 43 | type t7 = result // both types specified 44 | type t8 = result // no "ok" or "err" type 45 | type t9 = list 46 | type t10 = t9 47 | } 48 | 49 | /// Comment for import interface 50 | interface api-imports { 51 | use types-interface.{t7} 52 | 53 | /// Same name as the type in `types-interface`, but this is a different type 54 | variant human { 55 | baby, 56 | child(u64), 57 | adult(tuple>, tuple>), 58 | } 59 | 60 | api-a1-b2: func(arg: list) -> (h1: t7, val2: human) 61 | } 62 | 63 | interface api { 64 | /// Comment for export function 65 | f1: func() -> (val-one: tuple, val2: string) 66 | 67 | /// Comment for t5 in api 68 | type t5 = result<_, option> 69 | 70 | record errno { 71 | a-u1: u64, 72 | /// A list of signed 64-bit integers 73 | list-s1: list, 74 | str: option, 75 | c: option, 76 | } 77 | 78 | class: func(break: option>) -> tuple<> 79 | continue: func(abstract: option>, extends: tuple<>) -> (%implements: option>) 80 | } 81 | 82 | world types-example { 83 | use types-interface.{t2 as t2-renamed, t10, permissions} 84 | 85 | import api-imports 86 | import print: func(message: string, level: log-level) 87 | /// Comment for import inline 88 | import inline: interface { 89 | /// Comment for import inline function 90 | inline-imp: func(args: list>) -> result<_, char> 91 | } 92 | 93 | export types-interface 94 | export api 95 | 96 | enum log-level { 97 | /// lowest level 98 | debug, 99 | info, 100 | warn, 101 | error, 102 | } 103 | 104 | record empty {} 105 | 106 | export f-f1: func(typedef: t10) -> t10 107 | export f1: func(f: float32, f-list: list>) -> (val-p1: s64, val2: string) 108 | /// t2 has been renamed with `use self.types-interface.{t2 as t2-renamed}` 109 | export re-named: func(perm: option, e: option) -> t2-renamed 110 | export re-named2: func(tup: tuple>, e: empty) -> tuple, s8> 111 | } 112 | -------------------------------------------------------------------------------- /tests/grammar/integration/issue607.wit: -------------------------------------------------------------------------------- 1 | package local:demo 2 | 3 | interface interface1 { 4 | variant error { 5 | some-error 6 | } 7 | record my-record { 8 | some-field: u32 9 | } 10 | my-func: func() -> result 11 | my-optional: func() -> option 12 | my-tuple: func() -> tuple 13 | my-list: func() -> list 14 | } 15 | 16 | interface interface2 { 17 | variant error { 18 | other-error 19 | } 20 | record my-record { 21 | other-field: u32 22 | } 23 | my-func: func() -> result 24 | my-optional: func() -> option 25 | my-tuple: func() -> tuple 26 | my-list: func() -> list 27 | } 28 | 29 | world my-world { 30 | import interface1 31 | import interface2 32 | } -------------------------------------------------------------------------------- /tests/grammar/integration/just-export.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | world foo { 3 | export generate: func(name: string, wit: list) -> result>>, string> 4 | } 5 | -------------------------------------------------------------------------------- /tests/grammar/integration/keywords-in-interfaces-and-worlds.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world trait { 4 | import continue: interface { 5 | break: func() 6 | } 7 | 8 | export match: interface { 9 | return: func() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tests/grammar/integration/keywords-in-interfaces-and-worlds.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world trait { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > import continue: interface { 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 17 | # ^ source.wit meta.world-item.wit meta.import-item.wit 18 | # ^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 19 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit 20 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 21 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.other.interface.interface-type.wit 22 | # ^ source.wit meta.world-item.wit meta.import-item.wit 23 | # ^ source.wit meta.world-item.wit meta.import-item.wit ppunctuation.brackets.curly.begin.wit 24 | > break: func() 25 | #^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 26 | # ^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 27 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit keyword.operator.key-value.wit 28 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.whitespace.wit 29 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 30 | # ^ 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 31 | # ^ 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 32 | > } 33 | #^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 34 | # ^ source.wit meta.world-item.wit meta.import-item.wit punctuation.brackets.curly.end.wit 35 | > 36 | > export match: interface { 37 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 38 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 39 | # ^ source.wit meta.world-item.wit meta.export-item.wit 40 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 41 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 42 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 43 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.other.interface.interface-type.wit 44 | # ^ source.wit meta.world-item.wit meta.export-item.wit 45 | # ^ source.wit meta.world-item.wit meta.export-item.wit ppunctuation.brackets.curly.begin.wit 46 | > return: func() 47 | #^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 48 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 49 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit keyword.operator.key-value.wit 50 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.whitespace.wit 51 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 52 | # ^ 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 53 | # ^ 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 54 | > } 55 | #^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 56 | # ^ source.wit meta.world-item.wit meta.export-item.wit punctuation.brackets.curly.end.wit 57 | >} 58 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 59 | > -------------------------------------------------------------------------------- /tests/grammar/integration/keywords.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface keywords { 4 | record for { 5 | return: u32, 6 | } 7 | %type: func(%type: u32) -> (%type: u32, %flags: s32) 8 | %variant: func(%enum: s32) -> () 9 | %interface: func(%interface: s32) -> () 10 | throw: func(throw: s32) -> () 11 | new: func(new: s32) -> () 12 | %package: func(%package: s32) -> () 13 | final: func(final: s32) -> () 14 | auto: func(auto: s32) -> () 15 | else: func(for: s32) -> () 16 | long: func(long: s32) -> () 17 | switch: func(switch: s32) -> () 18 | break: func(break: s32) -> () 19 | register: func(register: s32) -> () 20 | typedef: func(typedef: s32) -> () 21 | case: func(case: s32) -> () 22 | extern: func(extern: s32) -> () 23 | %char: func(%char: s32) -> () 24 | float: func(float: s32) -> () 25 | short: func(short: s32) -> () 26 | unsigned: func(unsigned: s32) -> () 27 | const: func(const: s32) -> () 28 | signed: func(signed: s32) -> () 29 | void: func(void: s32) -> () 30 | continue: func(continue: s32) -> () 31 | goto: func(goto: s32) -> () 32 | sizeof: func(sizeof: s32) -> () 33 | volatile: func(volatile: s32) -> () 34 | default: func(default: s32) -> () 35 | if: func(if: s32) -> () 36 | %static: func(%static: s32) -> () 37 | while: func(while: s32) -> () 38 | do: func(do: s32) -> () 39 | %int: func(%int: s32) -> () 40 | %struct: func(%struct: s32) -> () 41 | } 42 | 43 | world the-world { 44 | import keywords 45 | export keywords 46 | } 47 | -------------------------------------------------------------------------------- /tests/grammar/integration/lift-lower-foreign.wit: -------------------------------------------------------------------------------- 1 | package my:lift-lower-foreign 2 | 3 | interface a { 4 | type t1 = u32 5 | record t2 { a: t1 } 6 | flags t3 { a, b, c } 7 | type t4 = tuple 8 | variant t5 { a, b(t2), c(t3) } 9 | enum t6 { a, b, c } 10 | type t7 = option 11 | type t8 = result 12 | type t10 = list 13 | type t11 = t10 14 | } 15 | 16 | interface the-interface { 17 | use a.{t1 as u1, t2 as u2, t3 as u3, t4 as u4, t5 as u5} 18 | use a.{t6 as u6, t7 as u7, t8 as %u8} 19 | use a.{t10 as u10, t11 as u11} 20 | 21 | f1: func(a: u1) -> u1 22 | f2: func(a: u2) -> u2 23 | f3: func(a: u3) -> u3 24 | f4: func(a: u4) -> u4 25 | f5: func(a: u5) -> u5 26 | f6: func(a: u6) -> u6 27 | f7: func(a: u7) -> u7 28 | f8: func(a: %u8) -> %u8 29 | f10: func(a: u10) -> u10 30 | f11: func(a: u11) -> u11 31 | } 32 | 33 | world foo { 34 | use a.{t1 as u1, t2 as u2, t3 as u3, t4 as u4, t5 as u5} 35 | use a.{t6 as u6, t7 as u7, t8 as %u8} 36 | use a.{t10 as u10, t11 as u11} 37 | 38 | export foo-f1: func(a: u1) -> u1 39 | export foo-f2: func(a: u2) -> u2 40 | export foo-f3: func(a: u3) -> u3 41 | export foo-f4: func(a: u4) -> u4 42 | export foo-f5: func(a: u5) -> u5 43 | export foo-f6: func(a: u6) -> u6 44 | export foo-f7: func(a: u7) -> u7 45 | export foo-f8: func(a: %u8) -> %u8 46 | export foo-f10: func(a: u10) -> u10 47 | export foo-f11: func(a: u11) -> u11 48 | 49 | import the-interface 50 | export the-interface 51 | } 52 | -------------------------------------------------------------------------------- /tests/grammar/integration/lists.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface lists { 4 | list-u8-param: func(x: list) 5 | list-u16-param: func(x: list) 6 | list-u32-param: func(x: list) 7 | list-u64-param: func(x: list) 8 | list-s8-param: func(x: list) 9 | list-s16-param: func(x: list) 10 | list-s32-param: func(x: list) 11 | list-s64-param: func(x: list) 12 | list-float32-param: func(x: list) 13 | list-float64-param: func(x: list) 14 | 15 | list-u8-ret: func() -> list 16 | list-u16-ret: func() -> list 17 | list-u32-ret: func() -> list 18 | list-u64-ret: func() -> list 19 | list-s8-ret: func() -> list 20 | list-s16-ret: func() -> list 21 | list-s32-ret: func() -> list 22 | list-s64-ret: func() -> list 23 | list-float32-ret: func() -> list 24 | list-float64-ret: func() -> list 25 | 26 | tuple-list: func(x: list>) -> list> 27 | string-list-arg: func(a: list) 28 | string-list-ret: func() -> list 29 | tuple-string-list: func(x: list>) -> list> 30 | string-list: func(x: list) -> list 31 | 32 | record some-record { 33 | x: string, 34 | y: other-record, 35 | z: list, 36 | c1: u32, 37 | c2: u64, 38 | c3: s32, 39 | c4: s64, 40 | } 41 | record other-record { 42 | a1: u32, 43 | a2: u64, 44 | a3: s32, 45 | a4: s64, 46 | b: string, 47 | c: list, 48 | } 49 | record-list: func(x: list) -> list 50 | record-list-reverse: func(x: list) -> list 51 | 52 | variant some-variant { 53 | a(string), 54 | b, 55 | c(u32), 56 | d(list), 57 | } 58 | variant other-variant { 59 | a, 60 | b(u32), 61 | c(string), 62 | } 63 | variant-list: func(x: list) -> list 64 | 65 | type load-store-all-sizes = list> 79 | load-store-everything: func(a: load-store-all-sizes) -> load-store-all-sizes 80 | } 81 | 82 | world the-lists { 83 | import lists 84 | export lists 85 | } 86 | -------------------------------------------------------------------------------- /tests/grammar/integration/many-arguments.wit: -------------------------------------------------------------------------------- 1 | package many:arguments 2 | 3 | interface manyarg { 4 | many-args: func( 5 | a1: u64, 6 | a2: u64, 7 | a3: u64, 8 | a4: u64, 9 | a5: u64, 10 | a6: u64, 11 | a7: u64, 12 | a8: u64, 13 | a9: u64, 14 | a10: u64, 15 | a11: u64, 16 | a12: u64, 17 | a13: u64, 18 | a14: u64, 19 | a15: u64, 20 | a16: u64, 21 | ) 22 | 23 | record big-struct { 24 | a1: string, 25 | a2: string, 26 | a3: string, 27 | a4: string, 28 | a5: string, 29 | a6: string, 30 | a7: string, 31 | a8: string, 32 | a9: string, 33 | a10: string, 34 | a11: string, 35 | a12: string, 36 | a13: string, 37 | a14: string, 38 | a15: string, 39 | a16: string, 40 | a17: string, 41 | a18: string, 42 | a19: string, 43 | a20: string, 44 | } 45 | 46 | big-argument: func(x: big-struct) 47 | } 48 | 49 | world the-world { 50 | import manyarg 51 | export manyarg 52 | } 53 | -------------------------------------------------------------------------------- /tests/grammar/integration/markdown.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface math { 4 | /// Represents a 2D point. 5 | /// 6 | /// # Notes 7 | /// 1. Not to be confused with a _circle_ 8 | /// 2. Axis `Z` can be assumed to be zero 9 | record point { 10 | x: float32, 11 | y: float32 12 | } 13 | } 14 | 15 | world example { 16 | /// Translate the point by `dx` horizontally and `dy` vertically 17 | export move: func(p: point, dx: float32, dy: float32) -> point 18 | } 19 | -------------------------------------------------------------------------------- /tests/grammar/integration/multi-return.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface multi-return { 4 | mra: func() 5 | mrb: func() -> () 6 | mrc: func() -> u32 7 | mrd: func() -> (a: u32) 8 | mre: func() -> (a: u32, b: float32) 9 | } 10 | 11 | world the-world { 12 | import multi-return 13 | export multi-return 14 | } 15 | -------------------------------------------------------------------------------- /tests/grammar/integration/option-result.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface option-result { 4 | record empty {} 5 | record o-one { 6 | a: option, 7 | } 8 | 9 | record o-nested { 10 | a: option>, 11 | } 12 | 13 | type o1 = option 14 | type o2 = option 15 | type o3 = option 16 | type o4 = option> 17 | 18 | type r1 = result 19 | type r2 = result<_, empty> 20 | type r3 = result 21 | type r4 = result 22 | type r5 = result, o1> 23 | type r6 = result>, o2> 24 | type r7 = result>, o4> 25 | 26 | 27 | type o5 = option 28 | type o6 = option>> 29 | 30 | 31 | o1-arg: func(x: o1) 32 | o1-result: func() -> o1 33 | 34 | o2-arg: func(x: o2) 35 | o2-result: func() -> o2 36 | 37 | o3-arg: func(x: o3) 38 | o3-result: func() -> o3 39 | 40 | o4-arg: func(x: o4) 41 | o4-result: func() -> o4 42 | 43 | o5-arg: func(x: o5) 44 | o5-result: func() -> o5 45 | 46 | o6-arg: func(x: o6) 47 | o6-result: func() -> o6 48 | 49 | r1-arg: func(x: r1) 50 | r1-result: func() -> r1 51 | 52 | r2-arg: func(x: r2) 53 | r2-result: func() -> r2 54 | 55 | r3-arg: func(x: r3) 56 | r3-result: func() -> r3 57 | 58 | r4-arg: func(x: r4) 59 | r4-result: func() -> r4 60 | 61 | r5-arg: func(x: r5) 62 | r5-result: func() -> r5 63 | 64 | r6-arg: func(x: r6) 65 | r6-result: func() -> r6 66 | 67 | r7-arg: func(x: r7) 68 | r7-result: func() -> r7 69 | 70 | multi: func(x: r7, y: r7) -> (a: r7, b:r7, c: r7) 71 | multi-option: func(x: r7, y: r7) -> option> 72 | } 73 | 74 | world my-world { 75 | import option-result 76 | export option-result 77 | } 78 | 79 | -------------------------------------------------------------------------------- /tests/grammar/integration/records.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface records { 4 | tuple-arg: func(x: tuple) 5 | tuple-result: func() -> tuple 6 | 7 | record empty {} 8 | 9 | empty-arg: func(x: empty) 10 | empty-result: func() -> empty 11 | 12 | /// A record containing two scalar fields 13 | /// that both have the same type 14 | record scalars { 15 | /// The first field, named a 16 | a: u32, 17 | /// The second field, named b 18 | b: u32, 19 | } 20 | 21 | scalar-arg: func(x: scalars) 22 | scalar-result: func() -> scalars 23 | 24 | /// A record that is really just flags 25 | /// All of the fields are bool 26 | record really-flags { 27 | a: bool, 28 | b: bool, 29 | c: bool, 30 | d: bool, 31 | e: bool, 32 | f: bool, 33 | g: bool, 34 | h: bool, 35 | i: bool, 36 | } 37 | 38 | flags-arg: func(x: really-flags) 39 | flags-result: func() -> really-flags 40 | 41 | record aggregates { 42 | a: scalars, 43 | b: u32, 44 | c: empty, 45 | d: string, 46 | e: really-flags, 47 | } 48 | 49 | aggregate-arg: func(x: aggregates) 50 | aggregate-result: func() -> aggregates 51 | 52 | type tuple-typedef = tuple 53 | type int-typedef = s32 54 | type tuple-typedef2 = tuple 55 | typedef-inout: func(e: tuple-typedef2) -> s32 56 | } 57 | 58 | world the-world { 59 | import records 60 | export records 61 | } 62 | -------------------------------------------------------------------------------- /tests/grammar/integration/rename-interface.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface foo { 4 | record bar {} 5 | } 6 | 7 | world the-world { 8 | import foo 9 | import other-name: interface { 10 | use foo.{bar} 11 | 12 | a: func() -> bar 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/grammar/integration/rename-interface.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface foo { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > record bar {} 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.interface-item.wit meta.record-item.wit keyword.declaration.record.record-item.wit 17 | # ^ source.wit meta.interface-item.wit meta.record-item.wit 18 | # ^^^ source.wit meta.interface-item.wit meta.record-item.wit entity.name.type.id.record-item.wit 19 | # ^ source.wit meta.interface-item.wit meta.record-item.wit 20 | # ^ source.wit meta.interface-item.wit meta.record-item.wit punctuation.brackets.curly.begin.wit 21 | # ^ source.wit meta.interface-item.wit meta.record-item.wit punctuation.brackets.curly.end.wit 22 | >} 23 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 24 | > 25 | >world the-world { 26 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 27 | # ^ source.wit meta.world-item.wit 28 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 29 | # ^ source.wit meta.world-item.wit 30 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 31 | > import foo 32 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 33 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 34 | # ^ source.wit meta.world-item.wit meta.import-item.wit 35 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 36 | > import other-name: interface { 37 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 38 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 39 | # ^ source.wit meta.world-item.wit meta.import-item.wit 40 | # ^^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 41 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit 42 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 43 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.other.interface.interface-type.wit 44 | # ^ source.wit meta.world-item.wit meta.import-item.wit 45 | # ^ source.wit meta.world-item.wit meta.import-item.wit ppunctuation.brackets.curly.begin.wit 46 | > use foo.{bar} 47 | #^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 48 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit keyword.other.use.use-item.wit 49 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit 50 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit entity.name.namespace.id.use-path.wit 51 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit keyword.operator.namespace-separator.use-item.wit 52 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit punctuation.brackets.curly.begin.wit 53 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit entity.name.type.declaration.use-names-item.use-item.wit 54 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.use-item.wit punctuation.brackets.curly.end.wit 55 | > 56 | > a: func() -> bar 57 | #^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 58 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 59 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit keyword.operator.key-value.wit 60 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.whitespace.wit 61 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 62 | # ^ 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 63 | # ^ 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 64 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 65 | # ^^ 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 66 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 67 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.id.wit 68 | > } 69 | #^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 70 | # ^ source.wit meta.world-item.wit meta.import-item.wit punctuation.brackets.curly.end.wit 71 | >} 72 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 73 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resource-alias.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface e1 { 4 | resource x { 5 | constructor(s: string) 6 | get: func() -> string 7 | } 8 | 9 | record foo { x: x } 10 | 11 | a: func(f: foo) -> list 12 | } 13 | 14 | interface e2 { 15 | use e1.{x, foo as bar} 16 | 17 | record foo { x: x } 18 | 19 | a: func(f: foo, g: bar) -> list 20 | } 21 | 22 | world resources { 23 | use e2.{x} 24 | 25 | export frobnicate: func(x: list) -> list 26 | 27 | import e1 28 | import e2 29 | export e1 30 | export e2 31 | } 32 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-borrow-in-record-export.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | interface foo4 { 4 | resource y 5 | 6 | record r { 7 | y: borrow 8 | } 9 | 10 | f: func(a: list) 11 | } 12 | 13 | world x { 14 | export foo4 15 | } 16 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-borrow-in-record-export.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:bar 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface foo4 { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > resource y 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > 20 | > record r { 21 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 22 | # ^^^^^^ source.wit meta.interface-item.wit meta.record-item.wit keyword.declaration.record.record-item.wit 23 | # ^ source.wit meta.interface-item.wit meta.record-item.wit 24 | # ^ source.wit meta.interface-item.wit meta.record-item.wit entity.name.type.id.record-item.wit 25 | # ^ source.wit meta.interface-item.wit meta.record-item.wit 26 | # ^ source.wit meta.interface-item.wit meta.record-item.wit punctuation.brackets.curly.begin.wit 27 | > y: borrow 28 | #^^^^ source.wit meta.interface-item.wit meta.record-item.wit meta.whitespace.wit 29 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit variable.declaration.id.record-fields.wit 30 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit keyword.operator.key-value.wit 31 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.whitespace.wit 32 | # ^^^^^^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 33 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 34 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit entity.name.type.id.handle.wit 35 | # ^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 36 | > } 37 | #^^ source.wit meta.interface-item.wit meta.record-item.wit meta.record-fields.wit meta.whitespace.wit 38 | # ^ source.wit meta.interface-item.wit meta.record-item.wit punctuation.brackets.curly.end.wit 39 | > 40 | > f: func(a: list) 41 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 43 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 44 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 45 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 46 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 47 | # ^ 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 48 | # ^ 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 49 | # ^ 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 50 | # ^^^^ 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 51 | # ^ 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 52 | # ^ 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.id.wit 53 | # ^ 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 54 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 55 | >} 56 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 57 | > 58 | >world x { 59 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 60 | # ^ source.wit meta.world-item.wit 61 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 62 | # ^ source.wit meta.world-item.wit 63 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 64 | > export foo4 65 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 66 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 67 | # ^ source.wit meta.world-item.wit meta.export-item.wit 68 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 69 | >} 70 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 71 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resource-borrow-in-record.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | world x { 4 | resource y 5 | 6 | record r { 7 | y: borrow 8 | } 9 | 10 | import f: func(a: list) 11 | } 12 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-borrow-in-record.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:bar 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world x { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > resource y 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.world-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.world-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.world-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > 20 | > record r { 21 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 22 | # ^^^^^^ source.wit meta.world-item.wit meta.record-item.wit keyword.declaration.record.record-item.wit 23 | # ^ source.wit meta.world-item.wit meta.record-item.wit 24 | # ^ source.wit meta.world-item.wit meta.record-item.wit entity.name.type.id.record-item.wit 25 | # ^ source.wit meta.world-item.wit meta.record-item.wit 26 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.begin.wit 27 | > y: borrow 28 | #^^^^ source.wit meta.world-item.wit meta.record-item.wit meta.whitespace.wit 29 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit variable.declaration.id.record-fields.wit 30 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit keyword.operator.key-value.wit 31 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.whitespace.wit 32 | # ^^^^^^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 33 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 34 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit entity.name.type.id.handle.wit 35 | # ^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 36 | > } 37 | #^^ source.wit meta.world-item.wit meta.record-item.wit meta.record-fields.wit meta.whitespace.wit 38 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.end.wit 39 | > 40 | > import f: func(a: list) 41 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 42 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 43 | # ^ source.wit meta.world-item.wit meta.import-item.wit 44 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 45 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit 46 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 47 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit keyword.other.func.func-type.wit 48 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 49 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit variable.parameter.id.named-type.wit 50 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit keyword.operator.key-value.wit 51 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.whitespace.wit 52 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit entity.name.type.list.wit 53 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit punctuation.brackets.angle.begin.wit 54 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit entity.name.type.id.wit 55 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.list.ty.wit punctuation.brackets.angle.end.wit 56 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 57 | >} 58 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 59 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias-borrow-import.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | interface foo2 { 4 | resource a 5 | type b = a 6 | f1: func(a: borrow) 7 | f2: func(b: borrow) 8 | } 9 | 10 | world x { 11 | import foo2 12 | } 13 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias-borrow-import.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:bar 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface foo2 { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > resource a 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > type b = a 20 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 22 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 23 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 24 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 25 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 26 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 27 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.wit 28 | > f1: func(a: borrow) 29 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 30 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 31 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 32 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 33 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 35 | # ^ 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 36 | # ^ 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 37 | # ^ 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 38 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 39 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 40 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.id.handle.wit 41 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 43 | > f2: func(b: borrow) 44 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 45 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 46 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 47 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 48 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 49 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 50 | # ^ 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 51 | # ^ 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 52 | # ^ 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 53 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 54 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 55 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.id.handle.wit 56 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 57 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 58 | >} 59 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 60 | > 61 | >world x { 62 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 63 | # ^ source.wit meta.world-item.wit 64 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 65 | # ^ source.wit meta.world-item.wit 66 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 67 | > import foo2 68 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 69 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 70 | # ^ source.wit meta.world-item.wit meta.import-item.wit 71 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 72 | >} 73 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 74 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias-borrow.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | interface foo3 { 4 | resource a 5 | type b = a 6 | f1: func(a: borrow) 7 | f2: func(b: borrow) 8 | } 9 | 10 | world x { 11 | export foo3 12 | } 13 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias-borrow.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:bar 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface foo3 { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > resource a 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > type b = a 20 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 22 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 23 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 24 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 25 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 26 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 27 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.wit 28 | > f1: func(a: borrow) 29 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 30 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 31 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 32 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 33 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 35 | # ^ 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 36 | # ^ 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 37 | # ^ 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 38 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 39 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 40 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.id.handle.wit 41 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 43 | > f2: func(b: borrow) 44 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 45 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 46 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 47 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 48 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 49 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 50 | # ^ 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 51 | # ^ 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 52 | # ^ 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 53 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.borrow.handle.wit 54 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.begin.wit 55 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit entity.name.type.id.handle.wit 56 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit meta.handle.ty.wit punctuation.brackets.angle.end.wit 57 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 58 | >} 59 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 60 | > 61 | >world x { 62 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 63 | # ^ source.wit meta.world-item.wit 64 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 65 | # ^ source.wit meta.world-item.wit 66 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 67 | > export foo3 68 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 69 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 70 | # ^ source.wit meta.world-item.wit meta.export-item.wit 71 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 72 | >} 73 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 74 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias.wit: -------------------------------------------------------------------------------- 1 | package foo:bar 2 | 3 | interface foo { 4 | resource a 5 | type b = a 6 | f1: func(a: a) 7 | f2: func(b: b) 8 | } 9 | 10 | world x { 11 | import foo 12 | export foo 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/resource-local-alias.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:bar 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface foo { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > resource a 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.interface-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.interface-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > type b = a 20 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 22 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 23 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 24 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 25 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 26 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 27 | # ^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.wit 28 | > f1: func(a: a) 29 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 30 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 31 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 32 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 33 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 35 | # ^ 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 36 | # ^ 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 37 | # ^ 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 38 | # ^ 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.id.wit 39 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 40 | > f2: func(b: b) 41 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 42 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 43 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 44 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 45 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 46 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 47 | # ^ 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 48 | # ^ 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 49 | # ^ 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 50 | # ^ 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.id.wit 51 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 52 | >} 53 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 54 | > 55 | >world x { 56 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 57 | # ^ source.wit meta.world-item.wit 58 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 59 | # ^ source.wit meta.world-item.wit 60 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 61 | > import foo 62 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 63 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 64 | # ^ source.wit meta.world-item.wit meta.import-item.wit 65 | # ^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 66 | > export foo 67 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 68 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 69 | # ^ source.wit meta.world-item.wit meta.export-item.wit 70 | # ^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 71 | >} 72 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 73 | > -------------------------------------------------------------------------------- /tests/grammar/integration/resources-in-aggregates.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface aggregates { 4 | resource z 5 | 6 | record r1 { 7 | z: z 8 | } 9 | record r2 { 10 | z: borrow 11 | } 12 | record r3 { 13 | z1: borrow, 14 | z2: z, 15 | } 16 | type t1 = tuple 17 | type t2 = tuple> 18 | 19 | variant v1 { 20 | z(z), 21 | } 22 | variant v2 { 23 | z(borrow), 24 | } 25 | 26 | type l1 = list 27 | type l2 = list> 28 | 29 | f: func( 30 | r1: r1, 31 | r2: r2, 32 | r3: r3, 33 | t1: t1, 34 | t2: t2, 35 | v1: v1, 36 | v2: v2, 37 | l1: l1, 38 | l2: l2, 39 | o1: option, 40 | o2: option>, 41 | result1: result, 42 | result2: result>, 43 | ) 44 | } 45 | 46 | world resources { 47 | import aggregates 48 | export aggregates 49 | } 50 | -------------------------------------------------------------------------------- /tests/grammar/integration/resources-with-lists.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface with-lists { 4 | resource x { 5 | constructor(l: list) 6 | get: func() -> list 7 | set: func(l: list) 8 | etc: static func(l: list) -> list 9 | } 10 | } 11 | 12 | world resources { 13 | import with-lists 14 | export with-lists 15 | } 16 | -------------------------------------------------------------------------------- /tests/grammar/integration/resources.wit: -------------------------------------------------------------------------------- 1 | package my:resources 2 | 3 | interface types { 4 | resource z { 5 | constructor(a: float64) 6 | } 7 | } 8 | 9 | world resources { 10 | use types.{z} 11 | 12 | export add: func(a: borrow, b: borrow) -> own 13 | 14 | export exports: interface { 15 | resource x { 16 | constructor(a: float64) 17 | get-a: func() -> float64 18 | set-a: func(a: float64) 19 | add: static func(x: x, a: float64) -> x 20 | } 21 | } 22 | 23 | import imports: interface { 24 | resource y { 25 | constructor(a: float64) 26 | get-a: func() -> float64 27 | set-a: func(a: float64) 28 | add: static func(y: y, a: float64) -> y 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tests/grammar/integration/result-empty.wit: -------------------------------------------------------------------------------- 1 | package local:demo 2 | 3 | interface my-interface { 4 | variant stuff { 5 | this, 6 | that 7 | } 8 | 9 | record empty { 10 | } 11 | 12 | stuff-or-stuff: func() -> result 13 | stuff-or-empty: func() -> result 14 | empty-or-stuff: func() -> result 15 | empty-or-empty: func() -> result 16 | 17 | stuff-or-absent: func() -> result 18 | absent-or-stuff: func() -> result<_, stuff> 19 | 20 | empty-or-absent: func() -> result 21 | absent-or-empty: func() -> result<_, empty> 22 | 23 | absent-or-absent-param: func(x: result) -> result 24 | absent-or-absent: func() -> result 25 | } 26 | 27 | 28 | world my-world { 29 | import my-interface 30 | } 31 | -------------------------------------------------------------------------------- /tests/grammar/integration/ret-areas.wit: -------------------------------------------------------------------------------- 1 | // This test generates multiple `RetArea` structs. 2 | 3 | package foo:foo 4 | 5 | interface tcp { 6 | type ipv6-socket-address = tuple 7 | 8 | connect: func( 9 | local-address: ipv6-socket-address, 10 | remote-address: ipv6-socket-address, 11 | ) -> tuple 12 | } 13 | 14 | world wasi { 15 | import tcp 16 | } 17 | -------------------------------------------------------------------------------- /tests/grammar/integration/return-resource-from-export.wit: -------------------------------------------------------------------------------- 1 | package test:test 2 | 3 | world foo { 4 | resource x 5 | 6 | export return-resource: func() -> x 7 | } 8 | -------------------------------------------------------------------------------- /tests/grammar/integration/return-resource-from-export.wit.snap: -------------------------------------------------------------------------------- 1 | >package test:test 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^ 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 7 | > 8 | >world foo { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > resource x 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^^^ source.wit meta.world-item.wit meta.resource-item.wit keyword.other.resource.wit 17 | # ^ source.wit meta.world-item.wit meta.resource-item.wit 18 | # ^ source.wit meta.world-item.wit meta.resource-item.wit entity.name.type.id.resource.wit 19 | > 20 | > export return-resource: func() -> x 21 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 22 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 23 | # ^ source.wit meta.world-item.wit meta.export-item.wit 24 | # ^^^^^^^^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 25 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 26 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 27 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit keyword.other.func.func-type.wit 28 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 29 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 30 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.whitespace.wit 31 | # ^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 32 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 33 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit entity.name.type.id.wit 34 | >} 35 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 36 | > -------------------------------------------------------------------------------- /tests/grammar/integration/same-names1.wit: -------------------------------------------------------------------------------- 1 | package name1:name1 2 | 3 | world name1 { 4 | import name1: func() 5 | } 6 | -------------------------------------------------------------------------------- /tests/grammar/integration/same-names1.wit.snap: -------------------------------------------------------------------------------- 1 | >package name1:name1 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^ 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 7 | > 8 | >world name1 { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > import name1: func() 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 17 | # ^ source.wit meta.world-item.wit meta.import-item.wit 18 | # ^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 19 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit 20 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit keyword.other.func.func-type.wit 22 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 23 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 24 | >} 25 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 26 | > -------------------------------------------------------------------------------- /tests/grammar/integration/same-names2.wit: -------------------------------------------------------------------------------- 1 | package name2:name2 2 | 3 | world name2 { 4 | export name2: func() 5 | } 6 | -------------------------------------------------------------------------------- /tests/grammar/integration/same-names2.wit.snap: -------------------------------------------------------------------------------- 1 | >package name2:name2 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^ 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 7 | > 8 | >world name2 { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > export name2: func() 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 17 | # ^ source.wit meta.world-item.wit meta.export-item.wit 18 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 19 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 20 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit keyword.other.func.func-type.wit 22 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 23 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 24 | >} 25 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 26 | > -------------------------------------------------------------------------------- /tests/grammar/integration/same-names3.wit: -------------------------------------------------------------------------------- 1 | package name3:name3 2 | 3 | interface name3 { 4 | name3: func() 5 | } 6 | 7 | world w { 8 | import name3 9 | export name3 10 | } 11 | -------------------------------------------------------------------------------- /tests/grammar/integration/same-names3.wit.snap: -------------------------------------------------------------------------------- 1 | >package name3:name3 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^ 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 7 | > 8 | >interface name3 { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > name3: func() 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 17 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 18 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 19 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 20 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 21 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 22 | >} 23 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 24 | > 25 | >world w { 26 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 27 | # ^ source.wit meta.world-item.wit 28 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 29 | # ^ source.wit meta.world-item.wit 30 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 31 | > import name3 32 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 33 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 34 | # ^ source.wit meta.world-item.wit meta.import-item.wit 35 | # ^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 36 | > export name3 37 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 38 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 39 | # ^ source.wit meta.world-item.wit meta.export-item.wit 40 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 41 | >} 42 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 43 | > -------------------------------------------------------------------------------- /tests/grammar/integration/same-names4.wit: -------------------------------------------------------------------------------- 1 | package name4:name4 2 | 3 | interface name4 { 4 | type name4 = u32 5 | 6 | bar: func() -> name4 7 | } 8 | 9 | world w { 10 | import name4 11 | export name4 12 | } 13 | -------------------------------------------------------------------------------- /tests/grammar/integration/same-names4.wit.snap: -------------------------------------------------------------------------------- 1 | >package name4:name4 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^ 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 7 | > 8 | >interface name4 { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > type name4 = u32 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 17 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 18 | # ^^^^^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 19 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 20 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 21 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 22 | # ^^^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.numeric.wit 23 | > 24 | > bar: func() -> name4 25 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 26 | # ^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 27 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 28 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 29 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 30 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 31 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 32 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 33 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 35 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.id.wit 36 | >} 37 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 38 | > 39 | >world w { 40 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 41 | # ^ source.wit meta.world-item.wit 42 | # ^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 43 | # ^ source.wit meta.world-item.wit 44 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 45 | > import name4 46 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 47 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 48 | # ^ source.wit meta.world-item.wit meta.import-item.wit 49 | # ^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 50 | > export name4 51 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 52 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 53 | # ^ source.wit meta.world-item.wit meta.export-item.wit 54 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 55 | >} 56 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 57 | > -------------------------------------------------------------------------------- /tests/grammar/integration/same-names5.wit: -------------------------------------------------------------------------------- 1 | package name5:name5 2 | 3 | world name5 { 4 | record name5 { 5 | } 6 | 7 | export x: func() -> name5 8 | } 9 | 10 | -------------------------------------------------------------------------------- /tests/grammar/integration/same-names5.wit.snap: -------------------------------------------------------------------------------- 1 | >package name5:name5 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^^^ 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 7 | > 8 | >world name5 { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > record name5 { 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.record-item.wit keyword.declaration.record.record-item.wit 17 | # ^ source.wit meta.world-item.wit meta.record-item.wit 18 | # ^^^^^ source.wit meta.world-item.wit meta.record-item.wit entity.name.type.id.record-item.wit 19 | # ^ source.wit meta.world-item.wit meta.record-item.wit 20 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.begin.wit 21 | > } 22 | #^^ source.wit meta.world-item.wit meta.record-item.wit meta.whitespace.wit 23 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.end.wit 24 | > 25 | > export x: func() -> name5 26 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 27 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 28 | # ^ source.wit meta.world-item.wit meta.export-item.wit 29 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 30 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 31 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 32 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit keyword.other.func.func-type.wit 33 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 34 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 35 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.whitespace.wit 36 | # ^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 37 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 38 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit entity.name.type.id.wit 39 | >} 40 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 41 | > 42 | > -------------------------------------------------------------------------------- /tests/grammar/integration/simple-functions.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface simple { 4 | f1: func() 5 | f2: func(a: u32) 6 | f3: func(a: u32, b: u32) 7 | 8 | f4: func() -> u32 9 | f5: func() -> tuple 10 | 11 | f6: func(a: u32, b: u32, c: u32) -> tuple 12 | } 13 | 14 | world the-world { 15 | import simple 16 | export simple 17 | } 18 | -------------------------------------------------------------------------------- /tests/grammar/integration/simple-http.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface http-fetch-imports { 4 | record request{ 5 | method: string, 6 | uri: string, 7 | body: string 8 | } 9 | 10 | record response{ 11 | status: u16, 12 | body: string 13 | } 14 | 15 | fetch: func(req: request) -> result 16 | } 17 | 18 | world http-fetch-simple { 19 | import http-fetch-imports 20 | } 21 | -------------------------------------------------------------------------------- /tests/grammar/integration/simple-lists.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface simple-lists { 4 | simple-list1: func(l: list) 5 | simple-list2: func() -> list 6 | simple-list3: func(a: list, b: list) -> tuple, list> 7 | simple-list4: func(l: list>) -> list> 8 | } 9 | 10 | world my-world { 11 | import simple-lists 12 | export simple-lists 13 | } 14 | -------------------------------------------------------------------------------- /tests/grammar/integration/small-anonymous.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface anon { 4 | enum error { 5 | success, 6 | failure, 7 | } 8 | 9 | option-test: func() -> result, error> 10 | } 11 | 12 | world the-world { 13 | import anon 14 | export anon 15 | } 16 | -------------------------------------------------------------------------------- /tests/grammar/integration/small-anonymous.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface anon { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > enum error { 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^ source.wit meta.interface-item.wit meta.enum-items.wit keyword.other.enum.enum-items.wit 17 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit 18 | # ^^^^^ source.wit meta.interface-item.wit meta.enum-items.wit entity.name.type.id.enum-items.wit 19 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit 20 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit punctuation.brackets.curly.begin.wit 21 | > success, 22 | #^^^^ source.wit meta.interface-item.wit meta.enum-items.wit meta.whitespace.wit 23 | # ^^^^^^^ source.wit meta.interface-item.wit meta.enum-items.wit variable.other.enummember.id.enum-cases.wit 24 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit punctuation.comma.wit 25 | > failure, 26 | #^^^^ source.wit meta.interface-item.wit meta.enum-items.wit meta.whitespace.wit 27 | # ^^^^^^^ source.wit meta.interface-item.wit meta.enum-items.wit variable.other.enummember.id.enum-cases.wit 28 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit punctuation.comma.wit 29 | > } 30 | #^^ source.wit meta.interface-item.wit meta.enum-items.wit meta.whitespace.wit 31 | # ^ source.wit meta.interface-item.wit meta.enum-items.wit punctuation.brackets.curly.end.wit 32 | > 33 | > option-test: func() -> result, error> 34 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 35 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 36 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 37 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 38 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 39 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 40 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 41 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 43 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 44 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 45 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 46 | # ^^^^^^ 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 47 | # ^ 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 48 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.option.ty.wit entity.name.type.option.wit 49 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.option.ty.wit punctuation.brackets.angle.begin.wit 50 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.option.ty.wit entity.name.type.string.wit 51 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.option.ty.wit punctuation.brackets.angle.end.wit 52 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit punctuation.comma.wit 53 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit meta.whitespace.wit 54 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.result.ty.wit entity.name.type.id.wit 55 | # ^ 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 56 | >} 57 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 58 | > 59 | >world the-world { 60 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 61 | # ^ source.wit meta.world-item.wit 62 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 63 | # ^ source.wit meta.world-item.wit 64 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 65 | > import anon 66 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 67 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 68 | # ^ source.wit meta.world-item.wit meta.import-item.wit 69 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 70 | > export anon 71 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 72 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 73 | # ^ source.wit meta.world-item.wit meta.export-item.wit 74 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 75 | >} 76 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 77 | > -------------------------------------------------------------------------------- /tests/grammar/integration/smoke-default.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world the-world { 4 | export y: func() 5 | } 6 | -------------------------------------------------------------------------------- /tests/grammar/integration/smoke-default.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world the-world { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > export y: func() 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 17 | # ^ source.wit meta.world-item.wit meta.export-item.wit 18 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 19 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 20 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 21 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit keyword.other.func.func-type.wit 22 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 23 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 24 | >} 25 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 26 | > -------------------------------------------------------------------------------- /tests/grammar/integration/smoke-export.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world the-world { 4 | export the-name: interface { 5 | y: func() 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/grammar/integration/smoke-export.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world the-world { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > export the-name: interface { 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 17 | # ^ source.wit meta.world-item.wit meta.export-item.wit 18 | # ^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 19 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 20 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 21 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.other.interface.interface-type.wit 22 | # ^ source.wit meta.world-item.wit meta.export-item.wit 23 | # ^ source.wit meta.world-item.wit meta.export-item.wit ppunctuation.brackets.curly.begin.wit 24 | > y: func() 25 | #^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 26 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 27 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit keyword.operator.key-value.wit 28 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.whitespace.wit 29 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 30 | # ^ 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 31 | # ^ 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 32 | > } 33 | #^^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 34 | # ^ source.wit meta.world-item.wit meta.export-item.wit punctuation.brackets.curly.end.wit 35 | >} 36 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 37 | > -------------------------------------------------------------------------------- /tests/grammar/integration/smoke.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world the-world { 4 | import imports: interface { 5 | y: func() 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/grammar/integration/smoke.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world the-world { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > import imports: interface { 15 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 17 | # ^ source.wit meta.world-item.wit meta.import-item.wit 18 | # ^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 19 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit 20 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 21 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.other.interface.interface-type.wit 22 | # ^ source.wit meta.world-item.wit meta.import-item.wit 23 | # ^ source.wit meta.world-item.wit meta.import-item.wit ppunctuation.brackets.curly.begin.wit 24 | > y: func() 25 | #^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 26 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 27 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit keyword.operator.key-value.wit 28 | # ^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.whitespace.wit 29 | # ^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 30 | # ^ 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 31 | # ^ 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 32 | > } 33 | #^^ source.wit meta.world-item.wit meta.import-item.wit meta.whitespace.wit 34 | # ^ source.wit meta.world-item.wit meta.import-item.wit punctuation.brackets.curly.end.wit 35 | >} 36 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 37 | > -------------------------------------------------------------------------------- /tests/grammar/integration/strings.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface strings { 4 | a: func(x: string) 5 | b: func() -> string 6 | c: func(a: string, b: string) -> string 7 | } 8 | 9 | world the-world { 10 | import strings 11 | export strings 12 | } 13 | -------------------------------------------------------------------------------- /tests/grammar/integration/strings.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface strings { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > a: func(x: string) 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 17 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 18 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 19 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 20 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 21 | # ^ 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 22 | # ^ 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 23 | # ^ 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 24 | # ^^^^^^ 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 25 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 26 | > b: func() -> string 27 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 28 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 29 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 30 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 31 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 32 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 33 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 34 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 35 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 36 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 37 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.string.wit 38 | > c: func(a: string, b: string) -> string 39 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 40 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 41 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 43 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 44 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 45 | # ^ 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 46 | # ^ 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 47 | # ^ 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 48 | # ^^^^^^ 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 49 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.named-type-list.wit punctuation.comma.wit 50 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit meta.whitespace.wit 51 | # ^ 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 52 | # ^ 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 53 | # ^ 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 54 | # ^^^^^^ 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 55 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 56 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 57 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 58 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 59 | # ^^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit entity.name.type.string.wit 60 | >} 61 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 62 | > 63 | >world the-world { 64 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 65 | # ^ source.wit meta.world-item.wit 66 | # ^^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 67 | # ^ source.wit meta.world-item.wit 68 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 69 | > import strings 70 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 71 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 72 | # ^ source.wit meta.world-item.wit meta.import-item.wit 73 | # ^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 74 | > export strings 75 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 76 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 77 | # ^ source.wit meta.world-item.wit meta.export-item.wit 78 | # ^^^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 79 | >} 80 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 81 | > -------------------------------------------------------------------------------- /tests/grammar/integration/unused-import.wit: -------------------------------------------------------------------------------- 1 | package unused:%import 2 | 3 | interface types { 4 | record r { 5 | a: list, 6 | } 7 | } 8 | 9 | world the-world { 10 | import foo: interface { 11 | use types.{r} 12 | 13 | foo: func(data: r) 14 | } 15 | 16 | export bar: interface { 17 | use types.{r} 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/grammar/integration/use-across-interfaces.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface foo { 4 | type headers = list> 5 | record a { 6 | headers: headers 7 | } 8 | x: func() -> a 9 | } 10 | 11 | interface bar { 12 | use foo.{a} 13 | x: func() -> a 14 | } 15 | 16 | world baz { 17 | import foo 18 | import bar 19 | import baz: interface { 20 | use foo.{a} 21 | x: func() -> a 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/grammar/integration/variants.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface variants { 4 | enum e1 { 5 | a, 6 | } 7 | 8 | e1-arg: func(x: e1) 9 | e1-result: func() -> e1 10 | 11 | record empty {} 12 | 13 | variant v1 { 14 | a, 15 | c(e1), 16 | d(string), 17 | e(empty), 18 | f, 19 | g(u32), 20 | } 21 | 22 | v1-arg: func(x: v1) 23 | v1-result: func() -> v1 24 | 25 | bool-arg: func(x: bool) 26 | bool-result: func() -> bool 27 | 28 | option-arg: func( 29 | a: option, 30 | b: option>, 31 | c: option, 32 | d: option, 33 | e: option, 34 | g: option>, 35 | ) 36 | option-result: func() -> tuple< 37 | option, 38 | option>, 39 | option, 40 | option, 41 | option, 42 | option>, 43 | > 44 | 45 | variant casts1 { 46 | a(s32), 47 | b(float32), 48 | } 49 | 50 | variant casts2 { 51 | a(float64), 52 | b(float32), 53 | } 54 | 55 | variant casts3 { 56 | a(float64), 57 | b(u64), 58 | } 59 | 60 | variant casts4 { 61 | a(u32), 62 | b(s64), 63 | } 64 | 65 | variant casts5 { 66 | a(float32), 67 | b(s64), 68 | } 69 | 70 | variant casts6 { 71 | a(tuple), 72 | b(tuple), 73 | } 74 | 75 | casts: func( 76 | a: casts1, 77 | b: casts2, 78 | c: casts3, 79 | d: casts4, 80 | e: casts5, 81 | f: casts6, 82 | ) -> tuple< 83 | casts1, 84 | casts2, 85 | casts3, 86 | casts4, 87 | casts5, 88 | casts6, 89 | > 90 | 91 | result-arg: func( 92 | a: result, 93 | b: result<_, e1>, 94 | c: result, 95 | d: result, tuple<>>, 96 | e: result, 97 | f: result>, 98 | ) 99 | result-result: func() -> tuple< 100 | result, 101 | result<_, e1>, 102 | result, 103 | result, tuple<>>, 104 | result, 105 | result>, 106 | > 107 | 108 | enum my-errno { 109 | bad1, 110 | bad2, 111 | } 112 | 113 | return-result-sugar: func() -> result 114 | return-result-sugar2: func() -> result<_, my-errno> 115 | return-result-sugar3: func() -> result 116 | return-result-sugar4: func() -> result, my-errno> 117 | return-option-sugar: func() -> option 118 | return-option-sugar2: func() -> option 119 | 120 | result-simple: func() -> result 121 | 122 | record is-clone { 123 | v1: v1, 124 | } 125 | 126 | is-clone-arg: func(a: is-clone) 127 | is-clone-return: func() -> is-clone 128 | 129 | return-named-option: func() -> (a: option) 130 | return-named-result: func() -> (a: result) 131 | } 132 | 133 | world my-world { 134 | import variants 135 | export variants 136 | } 137 | -------------------------------------------------------------------------------- /tests/grammar/integration/worlds-with-types.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | interface i { 4 | type type1 = u32 5 | } 6 | 7 | world foo { 8 | use i.{type1} 9 | 10 | type type2 = u32 11 | 12 | record type3 {} 13 | 14 | export foo: func() -> tuple 15 | } 16 | -------------------------------------------------------------------------------- /tests/grammar/integration/worlds-with-types.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >interface i { 9 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 10 | # ^ source.wit meta.interface-item.wit 11 | # ^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 12 | # ^ source.wit meta.interface-item.wit 13 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 14 | > type type1 = u32 15 | #^^ source.wit meta.interface-item.wit meta.whitespace.wit 16 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 17 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 18 | # ^^^^^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 19 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 20 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 21 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 22 | # ^^^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.numeric.wit 23 | >} 24 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 25 | > 26 | >world foo { 27 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 28 | # ^ source.wit meta.world-item.wit 29 | # ^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 30 | # ^ source.wit meta.world-item.wit 31 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 32 | > use i.{type1} 33 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 34 | # ^^^ source.wit meta.world-item.wit meta.use-item.wit keyword.other.use.use-item.wit 35 | # ^ source.wit meta.world-item.wit meta.use-item.wit 36 | # ^ source.wit meta.world-item.wit meta.use-item.wit entity.name.namespace.id.use-path.wit 37 | # ^ source.wit meta.world-item.wit meta.use-item.wit keyword.operator.namespace-separator.use-item.wit 38 | # ^ source.wit meta.world-item.wit meta.use-item.wit punctuation.brackets.curly.begin.wit 39 | # ^^^^^ source.wit meta.world-item.wit meta.use-item.wit entity.name.type.declaration.use-names-item.use-item.wit 40 | # ^ source.wit meta.world-item.wit meta.use-item.wit punctuation.brackets.curly.end.wit 41 | > 42 | > type type2 = u32 43 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 44 | # ^^^^ source.wit meta.world-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 45 | # ^ source.wit meta.world-item.wit meta.type-item.wit 46 | # ^^^^^ source.wit meta.world-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 47 | # ^ source.wit meta.world-item.wit meta.type-item.wit 48 | # ^ source.wit meta.world-item.wit meta.type-item.wit punctuation.equal.wit 49 | # ^ source.wit meta.world-item.wit meta.type-item.wit meta.whitespace.wit 50 | # ^^^ source.wit meta.world-item.wit meta.type-item.wit entity.name.type.numeric.wit 51 | > 52 | > record type3 {} 53 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 54 | # ^^^^^^ source.wit meta.world-item.wit meta.record-item.wit keyword.declaration.record.record-item.wit 55 | # ^ source.wit meta.world-item.wit meta.record-item.wit 56 | # ^^^^^ source.wit meta.world-item.wit meta.record-item.wit entity.name.type.id.record-item.wit 57 | # ^ source.wit meta.world-item.wit meta.record-item.wit 58 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.begin.wit 59 | # ^ source.wit meta.world-item.wit meta.record-item.wit punctuation.brackets.curly.end.wit 60 | > 61 | > export foo: func() -> tuple 62 | #^^ source.wit meta.world-item.wit meta.whitespace.wit 63 | # ^^^^^^ source.wit meta.world-item.wit meta.export-item.wit keyword.control.export.export-item.wit 64 | # ^ source.wit meta.world-item.wit meta.export-item.wit 65 | # ^^^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit variable.other.constant.id.export-item.wit 66 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.id.export-item.wit 67 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.whitespace.wit 68 | # ^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit keyword.other.func.func-type.wit 69 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 70 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 71 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.whitespace.wit 72 | # ^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 73 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 74 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit entity.name.type.tuple.wit 75 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit punctuation.brackets.angle.begin.wit 76 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit entity.name.type.id.wit 77 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit punctuation.comma.wit 78 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit meta.whitespace.wit 79 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit entity.name.type.id.wit 80 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit punctuation.comma.wit 81 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit meta.whitespace.wit 82 | # ^^^^^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit entity.name.type.id.wit 83 | # ^ source.wit meta.world-item.wit meta.export-item.wit meta.function.wit meta.result-list.wit meta.tuple.ty.wit punctuation.brackets.angle.end.wit 84 | >} 85 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 86 | > -------------------------------------------------------------------------------- /tests/grammar/integration/zero-size-tuple.wit: -------------------------------------------------------------------------------- 1 | package foo:foo 2 | 3 | world bindings { 4 | import component 5 | } 6 | 7 | interface component { 8 | type value = tuple<> 9 | query-eval: func(q: u64) -> list 10 | } 11 | -------------------------------------------------------------------------------- /tests/grammar/integration/zero-size-tuple.wit.snap: -------------------------------------------------------------------------------- 1 | >package foo:foo 2 | #^^^^^^^ source.wit meta.package-decl.wit storage.modifier.package-decl.wit 3 | # ^ source.wit meta.package-decl.wit 4 | # ^^^ 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 5 | # ^ source.wit meta.package-decl.wit meta.id.package-decl.wit meta.package-identifier.wit keyword.operator.namespace.package-identifier.wit 6 | # ^^^ 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 7 | > 8 | >world bindings { 9 | #^^^^^ source.wit meta.world-item.wit keyword.declaration.world.world-item.wit storage.type.wit 10 | # ^ source.wit meta.world-item.wit 11 | # ^^^^^^^^ source.wit meta.world-item.wit entity.name.type.id.world-item.wit 12 | # ^ source.wit meta.world-item.wit 13 | # ^ source.wit meta.world-item.wit punctuation.brackets.curly.begin.wit 14 | > import component 15 | #^^^^ source.wit meta.world-item.wit meta.whitespace.wit 16 | # ^^^^^^ source.wit meta.world-item.wit meta.import-item.wit keyword.control.import.import-item.wit 17 | # ^ source.wit meta.world-item.wit meta.import-item.wit 18 | # ^^^^^^^^^ source.wit meta.world-item.wit meta.import-item.wit meta.id.import-item.wit variable.other.id.import-item.wit 19 | >} 20 | #^ source.wit meta.world-item.wit punctuation.brackets.curly.end.wit 21 | > 22 | >interface component { 23 | #^^^^^^^^^ source.wit meta.interface-item.wit keyword.declaration.interface.interface-item.wit storage.type.wit 24 | # ^ source.wit meta.interface-item.wit 25 | # ^^^^^^^^^ source.wit meta.interface-item.wit entity.name.type.id.interface-item.wit 26 | # ^ source.wit meta.interface-item.wit 27 | # ^ source.wit meta.interface-item.wit punctuation.brackets.curly.begin.wit 28 | > type value = tuple<> 29 | #^^^^ source.wit meta.interface-item.wit meta.whitespace.wit 30 | # ^^^^ source.wit meta.interface-item.wit meta.type-item.wit keyword.declaration.type.type-item.wit storage.type.wit 31 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 32 | # ^^^^^ source.wit meta.interface-item.wit meta.type-item.wit entity.name.type.id.type-item.wit 33 | # ^ source.wit meta.interface-item.wit meta.type-item.wit 34 | # ^ source.wit meta.interface-item.wit meta.type-item.wit punctuation.equal.wit 35 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.whitespace.wit 36 | # ^^^^^ source.wit meta.interface-item.wit meta.type-item.wit meta.tuple.ty.wit entity.name.type.tuple.wit 37 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.tuple.ty.wit punctuation.brackets.angle.begin.wit 38 | # ^ source.wit meta.interface-item.wit meta.type-item.wit meta.tuple.ty.wit punctuation.brackets.angle.end.wit 39 | > query-eval: func(q: u64) -> list 40 | #^^^^ source.wit meta.interface-item.wit meta.whitespace.wit 41 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 42 | # ^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word-separator.wit 43 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit entity.name.function.id.func-item.wit meta.word.wit 44 | # ^ source.wit meta.interface-item.wit meta.func-item.wit keyword.operator.key-value.wit 45 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.whitespace.wit 46 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit keyword.other.func.func-type.wit 47 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.begin.wit 48 | # ^ 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 49 | # ^ 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 50 | # ^ 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 51 | # ^^^ 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 52 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.param-list.wit punctuation.brackets.round.end.wit 53 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.whitespace.wit 54 | # ^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit keyword.operator.arrow.skinny.wit 55 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.whitespace.wit 56 | # ^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.list.ty.wit entity.name.type.list.wit 57 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.list.ty.wit punctuation.brackets.angle.begin.wit 58 | # ^^^^^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.list.ty.wit entity.name.type.id.wit 59 | # ^ source.wit meta.interface-item.wit meta.func-item.wit meta.function.wit meta.result-list.wit meta.list.ty.wit punctuation.brackets.angle.end.wit 60 | >} 61 | #^ source.wit meta.interface-item.wit punctuation.brackets.curly.end.wit 62 | > -------------------------------------------------------------------------------- /tests/grammar/unit/basic-feature-gates.wit: -------------------------------------------------------------------------------- 1 | // SYNTAX TEST "source.wit" "This tests basic feature gate annotations" 2 | 3 | package test:basic@1.0.0; 4 | 5 | @unstable(feature = test-feature) 6 | interface basic { 7 | test-func: func(); 8 | } 9 | 10 | @since(version = 1.0.0) 11 | interface stable { 12 | stable-func: func(); 13 | } 14 | 15 | @deprecated(version = 2.0.0) 16 | interface old { 17 | old-func: func(); 18 | } 19 | -------------------------------------------------------------------------------- /tests/grammar/unit/feature-gates-test.wit: -------------------------------------------------------------------------------- 1 | // SYNTAX TEST "source.wit" "This tests comprehensive feature gate annotations" 2 | 3 | // Test file for feature gate annotations 4 | package example:feature-gates@1.0.0; 5 | 6 | /// Interface with unstable feature gate 7 | @unstable(feature = wasi-io) 8 | interface io { 9 | /// Function with since annotation 10 | @since(version = 1.2.0) 11 | read: func(fd: u32) -> result, error>; 12 | 13 | /// Function with deprecated annotation 14 | @deprecated(version = 2.0.0) 15 | write-old: func(fd: u32, data: list) -> result<_, error>; 16 | } 17 | 18 | /// World with feature gates 19 | @unstable(feature = experimental-world) 20 | world example { 21 | /// Export with since annotation 22 | @since(version = 1.1.0) 23 | export log: interface { 24 | @since(version = 1.1.0) 25 | info: func(msg: string); 26 | 27 | @deprecated(version = 2.0.0) 28 | debug: func(msg: string); 29 | } 30 | 31 | /// Import with unstable feature 32 | @unstable(feature = network-io) 33 | import socket: interface { 34 | connect: func(addr: string) -> result; 35 | } 36 | } 37 | 38 | /// Types with feature gates 39 | @since(version = 1.0.0) 40 | interface types { 41 | /// Record with unstable annotation 42 | @unstable(feature = advanced-types) 43 | record config { 44 | name: string, 45 | @since(version = 1.1.0) 46 | timeout: option, 47 | } 48 | 49 | /// Enum with deprecation 50 | @deprecated(version = 2.0.0) 51 | enum status { 52 | ok, 53 | error, 54 | @unstable(feature = new-status) 55 | pending, 56 | } 57 | 58 | /// Variant with feature gates 59 | @since(version = 1.0.0) 60 | variant result-type { 61 | success(string), 62 | @deprecated(version = 1.5.0) 63 | failure(string), 64 | } 65 | 66 | /// Flags with annotations 67 | @unstable(feature = flag-extensions) 68 | flags permissions { 69 | read, 70 | write, 71 | @since(version = 1.2.0) 72 | execute, 73 | } 74 | 75 | /// Type alias with feature gate 76 | @since(version = 1.1.0) 77 | type user-id = u32; 78 | 79 | /// Resource with feature gate 80 | @unstable(feature = resource-management) 81 | resource file { 82 | constructor(path: string); 83 | 84 | @since(version = 1.1.0) 85 | read: func() -> string; 86 | 87 | @deprecated(version = 2.0.0) 88 | write-sync: func(data: string); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /tests/grammar/unit/interface.wit: -------------------------------------------------------------------------------- 1 | // SYNTAX TEST "source.wit" "This tests interface shapes" 2 | 3 | package bytecodealliance:test-interface 4 | // <------- storage.modifier.package-decl.wit 5 | // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.id.package-decl.wit 6 | 7 | use wasi:http/types@1.0.0 as http-types 8 | // <--- keyword.other.use.toplevel-use-item.wit 9 | // ^^^^ entity.name.type.declaration.interface.toplevel-use-item.wit 10 | // ^ meta.interface.toplevel-use-item.wit 11 | // ^^^^ entity.name.type.declaration.interface.toplevel-use-item.wit 12 | // ^ meta.interface.toplevel-use-item.wit 13 | // ^^^^^ entity.name.type.declaration.interface.toplevel-use-item.wit 14 | // ^ meta.interface.toplevel-use-item.wit 15 | // ^^^^^ constant.numeric.versioning.interface.toplevel-use-item.wit 16 | // ^^ keyword.control.as.toplevel-use-item.wit 17 | // ^^^^^^^^^^ entity.name.type.toplevel-use-item.wit 18 | 19 | interface some-interface { 20 | // <--------- keyword.declaration.interface.interface-item.wit storage.type.wit 21 | // ^^^^^^^^^^^^^^ entity.name.type.id.interface-item.wit 22 | // ^ meta.interface-item.wit punctuation.brackets.curly.begin.wit 23 | 24 | use self.io.level-L1.level-L2.{ 25 | //^^^ keyword.other.use.use-item.wit 26 | // ^^^^ entity.name.namespace.id.use-path.wit 27 | // ^ keyword.operator.namespace-separator.use-path.wit 28 | // ^^ entity.name.namespace.id.use-path.wit 29 | // ^ keyword.operator.namespace-separator.use-path.wit 30 | // ^^^^^^^^ entity.name.namespace.id.use-path.wit 31 | // ^ keyword.operator.namespace-separator.use-path.wit 32 | // ^^^^^^^^ entity.name.namespace.id.use-path.wit 33 | // ^ keyword.operator.namespace-separator.use-item.wit 34 | // ^ meta.use-item.wit punctuation.brackets.curly.begin.wit 35 | 36 | input-stream, 37 | // ^^^^^^^^^^^^ entity.name.type.declaration.use-names-item.use-item.wit 38 | // ^ meta.use-item.wit punctuation.comma.wit 39 | 40 | output-stream 41 | // ^^^^^^^^^^^^^^ entity.name.type.declaration.use-names-item.use-item.wit 42 | 43 | } 44 | //^ meta.use-item.wit punctuation.brackets.curly.end.wit 45 | 46 | make-request: func( 47 | //^^^^^^^^^^^^ entity.name.function.id.func-item.wit 48 | // ^ meta.func-item.wit keyword.operator.key-value.wit 49 | // ^^^^ keyword.other.func.func-type.wit 50 | // ^ meta.function.wit punctuation.brackets.round.begin.wit 51 | 52 | url: method, 53 | // ^^^ variable.parameter.id.named-type.wit 54 | // ^ meta.named-type-list.wit keyword.operator.key-value.wit 55 | // ^^^^^^ entity.name.type.id.wit 56 | // ^ meta.named-type-list.wit punctuation.comma.wit 57 | 58 | headers: headers 59 | ) -> result 60 | //^ meta.function.wit punctuation.brackets.round.end.wit 61 | // ^^ meta.result-list.wit keyword.operator.arrow.skinny.wit 62 | // ^^^^^^ meta.result.ty.wit entity.name.type.result.wit 63 | // ^ meta.result.ty.wit punctuation.brackets.angle.begin.wit 64 | // ^^^^^^^^^^^^^ entity.name.type.id.wit 65 | // ^ meta.result.ty.wit punctuation.comma.wit 66 | // ^^^^^^ entity.name.type.string.wit 67 | // ^ meta.result.ty.wit punctuation.brackets.angle.end.wit 68 | 69 | enum others{input-stream,output-stream} 70 | //^^^^ keyword.other.enum.enum-items.wit 71 | // ^^^^^^ entity.name.type.id.enum-items.wit 72 | // ^ meta.enum-items.wit punctuation.brackets.curly.begin.wit 73 | // ^^^^^^^^^^^^ variable.other.enummember.id.enum-cases.wit 74 | // ^ meta.enum-items.wit punctuation.comma.wit 75 | // ^^^^^^^^^^^^^ variable.other.enummember.id.enum-cases.wit 76 | // ^ meta.enum-items.wit 77 | 78 | roundtrip: func(a: result) -> result; 79 | //^^^^^^^^^ entity.name.function.id.func-item.wit 80 | // ^ meta.func-item.wit keyword.operator.key-value.wit 81 | // ^^^^ keyword.other.func.func-type.wit 82 | // ^ meta.function.wit punctuation.brackets.round.begin.wit 83 | // ^ variable.parameter.id.named-type.wit 84 | // ^ meta.named-type-list.wit keyword.operator.key-value.wit 85 | // ^^^^^^ entity.name.type.result.wit 86 | // ^ meta.function.wit punctuation.brackets.round.end.wit 87 | // ^^ meta.result-list.wit keyword.operator.arrow.skinny.wit 88 | // ^^^^^^ entity.name.type.result.wit 89 | 90 | } 91 | // <- meta.interface-item.wit punctuation.brackets.curly.end.wit 92 | 93 | interface another-interface { 94 | // <--------- keyword.declaration.interface.interface-item.wit storage.type.wit 95 | // ^^^^^^^^^^^^^^^^^ entity.name.type.id.interface-item.wit 96 | // ^ meta.interface-item.wit punctuation.brackets.curly.begin.wit 97 | 98 | type my-type = string // comment 99 | //^^^^ keyword.declaration.type.type-item.wit 100 | // ^^^^^^^ entity.name.type.id.type-item.wit 101 | // ^ meta.type-item.wit punctuation.equal.wit 102 | // ^^^^^^ entity.name.type.string.wit 103 | // ^^^^^^^^^^ comment.line.double-slash.wit 104 | 105 | record my-record { 106 | //^^^^^^ keyword.declaration.record.record-item.wit 107 | // ^^^^^^^^^ entity.name.type.id.record-item.wit 108 | // ^ meta.record-item.wit punctuation.brackets.curly.begin.wit 109 | 110 | foo: string, 111 | // ^^^ variable.declaration.id.record-fields.wit 112 | // ^ meta.record-fields.wit keyword.operator.key-value.wit 113 | // ^^^^^^ entity.name.type.string.wit 114 | // ^ meta.record-fields.wit punctuation.comma.wit 115 | 116 | bar: string 117 | } 118 | //^ meta.record-item.wit punctuation.brackets.curly.end.wit 119 | 120 | } 121 | // <- meta.interface-item.wit punctuation.brackets.curly.end.wit 122 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2022", 5 | "outDir": "dist", 6 | "lib": ["ES2022"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true 10 | } 11 | } 12 | --------------------------------------------------------------------------------