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.
2024-03-20 02:08:59 +03:00
## Generate TypeScript signature for decorators
For all packages except the compiler this will be done automatically as part of each package `build` script.
If you want to regenerate decorator signatures without a full build you can run:
```
pnpm gen-extern-signature
```
**For the compiler you will need to run it manually or run the whole workspace build. This is because for the tool to run it needs the compiler to build first.**
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.