2021-10-23 00:31:45 +03:00
|
|
|
# Prerequisites
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2023-11-22 20:49:36 +03:00
|
|
|
- Install [Node.js](https://nodejs.org/) 20 LTS
|
2024-01-27 02:02:45 +03:00
|
|
|
- Install [pnpm](https://pnpm.io/)
|
2021-10-23 00:31:45 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
npm install -g pnpm
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
# Installing NPM dependencies
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm install
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
This will install all of the npm dependencies of all projects in the
|
|
|
|
repo. Do this whenever you `git pull` or your workspace is freshly
|
|
|
|
cleaned/cloned.
|
|
|
|
|
2024-01-27 02:02:45 +03:00
|
|
|
Note that `pnpm install` must be done before building in VS Code or
|
2021-10-23 00:31:45 +03:00
|
|
|
using the command line.
|
|
|
|
|
2023-10-30 22:47:46 +03:00
|
|
|
# Install playwright browsers for UI testing
|
|
|
|
|
|
|
|
```bash
|
|
|
|
npx playwright install
|
|
|
|
```
|
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
# Using command line
|
|
|
|
|
2024-01-27 02:02:45 +03:00
|
|
|
**If you are not at the root of the repo you have to use `-w` option to specify you want to run the command for the workspace. `pnpm -w <command>`.**
|
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
## Rebuild the whole repo
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm build
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
This will build all projects in the correct dependency order.
|
|
|
|
|
|
|
|
## Build the whole repo incrementally
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm build
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2024-01-27 02:02:45 +03:00
|
|
|
This will build all projects that have changed since the last `pnpm build` in
|
2021-10-23 00:31:45 +03:00
|
|
|
dependency order.
|
|
|
|
|
|
|
|
## Build an individual package on the command line
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2021-10-23 00:31:45 +03:00
|
|
|
cd packages/<project>
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm build
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
## Run all tests for the whole repo
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm test
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
## Start compile on save
|
|
|
|
|
|
|
|
Starting this command will rebuild the typescript files on save.
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm watch
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2022-05-10 18:02:40 +03:00
|
|
|
|
|
|
|
## Cleanup
|
|
|
|
|
|
|
|
Sometimes there are ghost files left in the dist folder (common when renaming or deleting a TypeScript file), running this will get a clean state.
|
|
|
|
|
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm clean
|
2022-05-10 18:02:40 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
## Run tests for an individual package
|
|
|
|
|
|
|
|
```bash
|
2021-10-23 00:31:45 +03:00
|
|
|
cd packages/<project>
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm test
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
## Verbose test logging
|
|
|
|
|
|
|
|
Tests sometimes log extra info using `logVerboseTestOutput` To see
|
|
|
|
this output on the command line, set environment variable
|
2023-02-16 01:37:39 +03:00
|
|
|
TYPESPEC_VERBOSE_TEST_OUTPUT=true.
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
## Reformat source code
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm format
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
PR validation enforces code formatting style rules for the repo. This
|
|
|
|
command will reformat code automatically so that it passes.
|
|
|
|
|
|
|
|
You can also check if your code is formatted correctly without
|
2024-01-27 02:02:45 +03:00
|
|
|
reformatting anything using `pnpm check-format`.
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
See also below for having this happen automatically in VS Code
|
|
|
|
whenever you save.
|
|
|
|
|
2022-05-10 18:02:40 +03:00
|
|
|
## Generate changelogs
|
|
|
|
|
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm change
|
2022-05-10 18:02:40 +03:00
|
|
|
```
|
|
|
|
|
2022-08-22 20:16:12 +03:00
|
|
|
## Linting
|
|
|
|
|
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm lint
|
2022-08-22 20:16:12 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
PR validation enforces linting rules for the repo. This
|
|
|
|
command will run the linter on all packages.
|
|
|
|
|
|
|
|
## Regenerate Samples
|
|
|
|
|
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm regen-samples
|
2022-08-22 20:16:12 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
PR validation runs OpenAPI emitters on samples and compares them to known,
|
|
|
|
reviewed, checked-in versions. If your PR would change the generated output,
|
|
|
|
run this command to regenerate any samples and check those files in with
|
|
|
|
your PR. Carefully review whether the changes are intentional.
|
|
|
|
|
2022-12-15 19:48:16 +03:00
|
|
|
## Regenerate Reference Docs
|
|
|
|
|
|
|
|
```bash
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm regen-docs
|
2022-12-15 19:48:16 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
PR validation will ensure that reference docs are up to date.
|
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
# Using VS Code
|
|
|
|
|
|
|
|
## Recommended extensions
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2024-01-02 22:40:29 +03:00
|
|
|
1. [Vitest Test Explorer](https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer):
|
|
|
|
Run tests from the IDE. (Version `0.2.43` is bugged on OSX, use `0.2.42` instead)
|
2021-10-23 00:31:45 +03:00
|
|
|
2. [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode):
|
|
|
|
Automatically keep code formatted correctly on save.
|
2022-09-09 22:54:18 +03:00
|
|
|
3. [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint):
|
|
|
|
Show eslint errors in warnings in UI.
|
|
|
|
4. [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker):
|
|
|
|
Show spell check errors in document.
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
## Opening the repo as workspace
|
|
|
|
|
|
|
|
Always open the root of the repo as the workspace. Things are setup to
|
|
|
|
allow easy development across packages rather than opening one package
|
|
|
|
at a time in the IDE.
|
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
- File -> Open Workspace, select root folder where the TypeSpec repo was
|
2021-11-19 18:52:17 +03:00
|
|
|
cloned
|
|
|
|
- Or run `code /path/to/repo/root` on the command line
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
## Building
|
2021-11-19 18:52:17 +03:00
|
|
|
|
|
|
|
- Terminal -> Run Build Task (`Ctrl+Shift+B`)
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
This will setup a an incremental watching build for the whole
|
|
|
|
repo. From there on, your changes will be built whenever you save.
|
|
|
|
|
2022-09-09 22:54:18 +03:00
|
|
|
Problems will be reported in the Problems pane automatically and the
|
2021-10-23 00:31:45 +03:00
|
|
|
Terminal pane will have three parallel watch tasks running:
|
|
|
|
|
2022-09-09 22:54:18 +03:00
|
|
|
- `watch-source`: tsc process that recompile on TypeScript changes
|
2021-11-19 18:52:17 +03:00
|
|
|
- `watch-spec`: process that regenerates spec.html when
|
|
|
|
spec.emu.html changes
|
2023-02-16 01:37:39 +03:00
|
|
|
- `watch-tmlanguage`: process that regenerates typespec.tmlanguage when
|
2021-11-19 18:52:17 +03:00
|
|
|
tmlanguage.ts changes
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
## Testing
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2024-01-02 22:40:29 +03:00
|
|
|
```bash
|
|
|
|
# Run all the tests
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm test
|
2024-01-02 22:40:29 +03:00
|
|
|
|
|
|
|
# Run in a specific package tests in watch mode
|
|
|
|
npm run test:watch
|
|
|
|
```
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
## Debugging
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
There are several "Run and Debug" tasks set up. Click on the Run and
|
|
|
|
Debug icon on the sidebar, pick one from its down, and press F5 to
|
|
|
|
debug the last one you chose.
|
|
|
|
|
|
|
|
1. **VS Code Extension**: This will run and debug an experimental
|
2023-02-16 01:37:39 +03:00
|
|
|
instance of VS Code with the TypeSpec extension for VS Code and TypeSpec
|
2022-09-09 22:54:18 +03:00
|
|
|
language server running live with any of your changes. It will
|
2021-10-23 00:31:45 +03:00
|
|
|
attach to both the VS Code client process and the language server
|
|
|
|
process automatically.
|
|
|
|
2. **Compile Scratch**: Use this to debug compiling
|
2023-08-04 20:19:02 +03:00
|
|
|
`packages/samples/scratch/*.tsp`. The TypeSpec source code in that
|
2023-02-16 01:37:39 +03:00
|
|
|
folder is excluded from source control by design. Create TypeSpec files
|
2021-10-23 00:31:45 +03:00
|
|
|
there to experiment and debug how the compiler reacts.
|
|
|
|
3. **Compile Scratch (nostdlib)**: Same as above, but skips parsing
|
2023-02-16 01:37:39 +03:00
|
|
|
and evaluating the TypeSpec standard library. Sometimes it's easier to
|
2021-10-23 00:31:45 +03:00
|
|
|
4. **Attach to Default Port**: Use this to attach to a manually run
|
|
|
|
`node --debug` command.
|
|
|
|
5. **Attach to Language Server**: Use this to attach to the language
|
|
|
|
server process of an already running client process. Useful if you
|
|
|
|
want to debug the language server in VS Code while debugging the VS
|
|
|
|
client in VS.
|
|
|
|
6. **Regenerate .tmlanguage**: This runs the code that produces the
|
2023-02-16 01:37:39 +03:00
|
|
|
typespec.tmlanguage file that provides syntax highlighting of TypeSpec in VS
|
2021-10-23 00:31:45 +03:00
|
|
|
and VS Code. Select this to debug its build process.
|
|
|
|
|
|
|
|
# Developing the Visual Studio Extension
|
|
|
|
|
|
|
|
## Prerequisites
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2023-02-09 23:04:58 +03:00
|
|
|
Install [Visual Studio](https://visualstudio.microsoft.com/vs/) 17.0
|
2021-11-19 18:52:17 +03:00
|
|
|
or later. It is not currently possible to build the VS extension
|
2021-10-23 00:31:45 +03:00
|
|
|
without it, and of course you'll need Visual Studio to run and debug
|
|
|
|
the Visual Studio extension.
|
|
|
|
|
|
|
|
## Build VS extension on the command line
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
See the command line build steps above. If you have VS installed,
|
|
|
|
the VS extension will be included in your command line full repo
|
|
|
|
builds automatically.
|
|
|
|
|
|
|
|
If you do not have VS installed the command line build steps above
|
|
|
|
will simply skip building the VS extension and only build the VS Code
|
|
|
|
extension.
|
|
|
|
|
|
|
|
## Build VS extension in VS
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
- Open packages/typespec-vs/Microsoft.TypeSpec.VisualStudio.sln in Visual Studio
|
2021-11-19 18:52:17 +03:00
|
|
|
- Build -> Build solution (`Ctrl+Shift+B`)
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
Unlike TypeScript in VS Code above, this is not a watching build, but
|
|
|
|
it is relatively fast to run. Press Ctrl+Shift+B again to build any
|
|
|
|
changes after you make them.
|
|
|
|
|
|
|
|
## Debug VS extension
|
2021-11-19 18:52:17 +03:00
|
|
|
|
|
|
|
- Click on the play icon in the toolbar or press `F5`
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
This will run and debug an experimental instance of VS with a version
|
2023-02-16 01:37:39 +03:00
|
|
|
of the TypeSpec extension for VS Code running live with any of your changes
|
|
|
|
to the extension or the TypeSpec language server.
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
The VS debugger will attach only to the VS client process. Use "Attach
|
2022-09-09 22:54:18 +03:00
|
|
|
to Language Server" described above to debug the language server in
|
2021-10-23 00:31:45 +03:00
|
|
|
VS Code.
|
|
|
|
|
|
|
|
# Installing your build
|
2021-11-19 18:52:17 +03:00
|
|
|
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
2024-01-27 02:02:45 +03:00
|
|
|
pnpm dogfood
|
2021-10-23 00:31:45 +03:00
|
|
|
```
|
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
This will globally install the @typespec/compiler package, putting your
|
|
|
|
build of `typespec` on PATH, and install the VS Code extension if VS Code
|
2021-10-23 00:31:45 +03:00
|
|
|
is installed.
|
|
|
|
|
|
|
|
Note the important difference between this and the steps to run and
|
|
|
|
debug the VS Code extension above: the `dogfood` command installs the
|
2023-02-16 01:37:39 +03:00
|
|
|
TypeSpec extension with your changes in regular, non-experimental instance
|
2021-10-23 00:31:45 +03:00
|
|
|
of VS Code, meaning you will have it always, and not only when running
|
2023-02-16 01:37:39 +03:00
|
|
|
the debug steps above. This is exactly like using `tsp vscode install`,
|
2021-11-19 18:52:17 +03:00
|
|
|
only instead of downloading the latest release, it uses a build with your
|
|
|
|
changes applied.
|
2021-10-23 00:31:45 +03:00
|
|
|
|
|
|
|
There is no automatic `dogfood` process for installing the VS
|
2023-02-16 01:37:39 +03:00
|
|
|
extension non-experimentally, but if you build the typespec-vs project from
|
2021-10-23 00:31:45 +03:00
|
|
|
the command line following the steps above, or build its Release
|
|
|
|
configuration in Visual Studio, then you can install it by
|
2023-02-16 01:37:39 +03:00
|
|
|
double-clicking on packages/typespec-vs/Microsoft.TypeSpec.VisualStudio.vsix
|
2021-10-23 00:31:45 +03:00
|
|
|
that gets produced.
|
2022-04-19 19:29:35 +03:00
|
|
|
|
|
|
|
# Pull request
|
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
## Trigger TypeSpec Playground Try It build
|
2022-04-19 19:29:35 +03:00
|
|
|
|
|
|
|
For contributors of the repo the build will trigger automatically but for other's forks it will need a manual trigger from a contributor.
|
2024-01-25 21:40:16 +03:00
|
|
|
As a contributor you can run the following command to trigger the build and create a TypeSpec playground link for this PR.
|
2022-04-19 19:29:35 +03:00
|
|
|
|
|
|
|
```
|
2023-02-16 01:37:39 +03:00
|
|
|
/azp run TypeSpec Pull Request Try It
|
2022-04-19 19:29:35 +03:00
|
|
|
```
|
2022-09-21 21:30:49 +03:00
|
|
|
|
2022-10-25 01:30:51 +03:00
|
|
|
## Run formatter
|
|
|
|
|
|
|
|
Trigger a workflow that will format the code, commit and push.
|
|
|
|
|
|
|
|
```
|
2023-02-16 01:37:39 +03:00
|
|
|
/typespeceng format
|
2022-10-25 01:30:51 +03:00
|
|
|
```
|
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
# TypeSpec website
|
2022-09-21 21:30:49 +03:00
|
|
|
|
2022-12-28 06:33:45 +03:00
|
|
|
## Run locally
|
|
|
|
|
|
|
|
Go to `packages/website` and run the command:
|
|
|
|
|
|
|
|
```
|
|
|
|
npm start
|
|
|
|
```
|
|
|
|
|
2022-09-21 21:30:49 +03:00
|
|
|
## Publish website to github.io
|
|
|
|
|
|
|
|
The website on github.io should be published when releasing new packages.
|
|
|
|
|
|
|
|
To release:
|
|
|
|
|
2023-02-16 01:37:39 +03:00
|
|
|
- Go to https://github.com/microsoft/typespec/actions/workflows/website-gh-pages.yml
|
2022-09-21 21:30:49 +03:00
|
|
|
- Click the `Run workflow` dropdown and select the `main` branch.
|