Files

135 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2023-02-28 15:18:55 -08:00
# actions/languageserver
2023-01-24 17:43:24 -08:00
`actions-languageserver` hosts the `actions-languageservice` and makes it available via the [language server protocol](https://microsoft.github.io/language-server-protocol/) (LSP) as a standalone language server.
## Installation
The [package](https://www.npmjs.com/package/@actions/languageserver) contains TypeScript types and compiled ECMAScript modules.
```bash
2023-01-25 09:12:44 -08:00
npm install @actions/languageserver
2023-01-24 17:43:24 -08:00
```
## Usage
### Basic usage using `vscode-languageserver-node`
For the server, import the module. It detects whether it's running in a Node.js environment or a web worker and initializes the appropriate connection.
2023-01-25 09:15:22 -08:00
`server.ts`:
2023-01-24 17:43:24 -08:00
2023-01-25 09:15:22 -08:00
```typescript
2023-01-25 09:11:19 -08:00
import "@actions/languageserver";
2023-01-24 17:43:24 -08:00
```
For the client, create a new `LanguageClient` pointing to the server module.
`client.ts`:
2023-01-25 09:15:22 -08:00
```typescript
2023-01-24 17:43:24 -08:00
import {LanguageClient, ServerOptions, TransportKind} from "vscode-languageclient/node";
const debugOptions = {execArgv: ["--nolazy", "--inspect=6010"]};
const clientOptions: LanguageClientOptions = {
documentSelector: [{
pattern: "**/.github/workflows/*.{yaml,yml}"
2023-01-25 09:15:22 -08:00
}]
2023-01-24 17:43:24 -08:00
};
const serverModule = context.asAbsolutePath(path.join("dist", "server.js"));
const serverOptions: ServerOptions = {
run: {module: serverModule, transport: TransportKind.ipc},
debug: {
module: serverModule,
transport: TransportKind.ipc,
options: debugOptions
}
};
const client = new LanguageClient("actions-language", "GitHub Actions Language Server", serverOptions, clientOptions);
```
### From a web worker
See [../browser-playground](../browser-playground) for an example implementation that hosts the language server in a web worker.
### Providing advanced functionality
The language server accepts initialization options that can be used to configure additional functionality. If you pass in a github.com `sessionToken`, the language service will use data from github.com to perform additional validations and provide additional auto-completion suggestions.
```typescript
export interface InitializationOptions {
/**
* GitHub token that will be used to retrieve additional information from github.com
*
* Requires the `repo` and `workflow` scopes
*/
sessionToken?: string;
/**
* List of repositories that the language server should be aware of
*/
repos?: RepositoryContext[];
/**
* Desired log level
*/
logLevel?: LogLevel;
}
```
pass the `initializationOptions` to the `LanguageClient` when establishing the connection:
```typescript
const clientOptions: LanguageClientOptions = {
documentSelector: [{
pattern: "**/.github/workflows/*.{yaml,yml}"
}],
2023-01-25 09:15:22 -08:00
initializationOptions: initializationOptions
2023-01-24 17:43:24 -08:00
};
const client = new LanguageClient("actions-language", "GitHub Actions Language Server", serverOptions, clientOptions);
```
## Contributing
See [CONTRIBUTING.md](../CONTRIBUTING.md) at the root of the repository for general guidelines and recommendations.
If you do want to contribute, please run [prettier](https://prettier.io/) to format your code and add unit tests as appropriate before submitting your PR.
### Build
```bash
2023-01-25 09:12:44 -08:00
npm run build
2023-01-24 17:43:24 -08:00
```
or to watch for changes
```bash
2023-01-25 09:12:44 -08:00
npm run watch
2023-01-24 17:43:24 -08:00
```
### Test
```bash
2023-01-25 09:12:44 -08:00
npm test
2023-01-24 17:43:24 -08:00
```
or to watch for changes and run tests:
```bash
2023-01-25 09:12:44 -08:00
npm run test-watch
2023-01-24 17:43:24 -08:00
```
### Lint
```bash
2023-01-25 09:12:44 -08:00
npm run format-check
2023-01-24 17:43:24 -08:00
```
## License
This project is licensed under the terms of the MIT open source license. Please refer to [MIT](../LICENSE) for the full terms.