9 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | ruby RUBY_VERSION
3 |
4 | # gem "jekyll", "3.6.2"
5 |
6 | # to use GitHub Pages
7 | # gem "github-pages", group: :jekyll_plugins
8 |
9 | gem "github-pages", "~> 228", group: :jekyll_plugins
10 |
11 | # If you have any plugins, put them here!
12 | group :jekyll_plugins do
13 | gem "jemoji"
14 | gem 'jekyll-redirect-from'
15 | gem "jekyll-remote-theme"
16 | end
17 |
18 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
19 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
20 |
21 |
22 | gem "webrick", "~> 1.8"
23 |
--------------------------------------------------------------------------------
/License-code.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | # Site settings
2 | title: Official page for Language Server Protocol
3 | description: >
4 | Language Server Protocol documentation and specification page.
5 |
6 | baseurl: /language-server-protocol # the subpath of your site, e.g. /blog/
7 | url: https://microsoft.github.io # the base hostname & protocol for your site
8 | git_address: https://github.com/Microsoft/language-server-protocol
9 | git_edit_address: https://github.com/Microsoft/language-server-protocol/blob/gh-pages
10 |
11 | # Build settings
12 | markdown: kramdown
13 | highlighter: rouge
14 |
15 | plugins:
16 | - github-pages
17 | - jemoji
18 | - jekyll-redirect-from
19 |
20 |
21 | exclude:
22 | - Gemfile
23 | - Gemfile.lock
24 | - .idea/
25 | - .gitignore
26 | - README.md
27 | - resources/
28 | - vendor/
29 |
30 | timezone: Europe/Zurich
31 |
32 | defaults:
33 |
34 | - scope:
35 | path: _implementors
36 | type: implementors
37 | values:
38 | layout: implementors
39 | sectionid: implementors
40 |
41 | - scope:
42 | path: _specifications
43 | type: specifications
44 | values:
45 | layout: specifications
46 | sectionid: specifications
47 |
48 | - scope:
49 | path: _overviews
50 | type: overviews
51 | values:
52 | layout: overviews
53 | sectionid: overviews
54 |
55 | collections:
56 | implementors:
57 | permalink: /:collection/:path/
58 | output: true
59 | specifications:
60 | permalink: /:collection/:path/
61 | output: true
62 | overviews:
63 | permalink: /:collection/:path/
64 | output: true
65 |
66 |
--------------------------------------------------------------------------------
/_data/base-0-9-toc.yml:
--------------------------------------------------------------------------------
1 | - title: Table of Contents
2 | reveal: baseProtocol
3 | children:
4 | - title: Base Protocol
5 | anchor: baseProtocol
6 | children:
7 | - title: Header Part
8 | anchor: headerPart
9 | - title: Content Part
10 | anchor: contentPart
11 | - title: Capabilities
12 | anchor: capabilities
13 | - title: Message Ordering
14 | anchor: messageOrdering
15 | - title: Message Documentation
16 | anchor: messageDocumentation
17 | - title: JSON Structures
18 | anchor: basicJsonStructures
19 | children:
20 | - title: Base Types
21 | anchor: baseTypes
22 | - title: URI
23 | anchor: uri
24 | - title: Regular Expression
25 | anchor: regExp
26 | - title: Enumerations
27 | anchor: enumerations
28 | - title: Abstract Message
29 | anchor: abstractMessage
30 | - title: Request Message
31 | anchor: requestMessage
32 | - title: Response Message
33 | anchor: responseMessage
34 | - title: Notification Message
35 | anchor: notificationMessage
36 | - title: Cancellation Support
37 | anchor: cancelRequest
38 | - title: Progress Support
39 | anchor: progress
40 | - title: Trace Value
41 | anchor: traceValue
42 | - title: Lifecycle Messages
43 | anchor: lifecycle
44 | children:
45 | - title: Initialize
46 | anchor: initialize
47 | - title: Initialized
48 | anchor: initialized
49 | - title: Register Capability
50 | anchor: client_registerCapability
51 | - title: Unregister Capability
52 | anchor: client_unregisterCapability
53 | - title: Set Trace
54 | anchor: setTrace
55 | - title: Log Trace
56 | anchor: logTrace
57 | - title: Shutdown
58 | anchor: shutdown
59 | - title: Exit
60 | anchor: exit
61 | - title: Window Features
62 | anchor: windowFeatures
63 | children:
64 | - title: Show Message Notification
65 | anchor: window_showMessage
66 | - title: Show Message Request
67 | anchor: window_showMessageRequest
68 | - title: Log Message
69 | anchor: window_logMessage
70 | - title: Sent Telemetry
71 | anchor: telemetry_event
--------------------------------------------------------------------------------
/_data/lsif-0-4-0-toc.yml:
--------------------------------------------------------------------------------
1 | - title: Table of Contents
2 | reveal: _general
3 | children:
4 | - title: General
5 | anchor: _general
6 | children:
7 | - title: Introduction
8 | anchor: lsifIntro
9 | - title: Motivation
10 | anchor: lsifMotivation
11 | - title: Ranges
12 | anchor: ranges
13 | - title: Result Sets
14 | anchor: resultSet
15 | - title: Language Features
16 | anchor: _languageFeatures
17 | children:
18 | - title: definition
19 | anchor: definition
20 | - title: declaration
21 | anchor: declaration
22 | - title: hover
23 | anchor: hover
24 | - title: references
25 | anchor: references
26 | - title: implementation
27 | anchor: implementation
28 | - title: typeDefinition
29 | anchor: typeDefinition
30 | - title: foldingRange
31 | anchor: foldingRange
32 | - title: documentLink
33 | anchor: documentLink
34 | - title: documentSymbol
35 | anchor: documentSymbol
36 | - title: diagnostic
37 | anchor: diagnostic
38 | - title: project
39 | anchor: projectContext
40 | - title: Embedding Contents
41 | anchor: embeddingContents
42 | - title: Advanced Concepts
43 | anchor: _advancedConcepts
44 | children:
45 | - title: Events
46 | anchor: events
47 | - title: Exports and Imports
48 | anchor: exportsImports
49 | - title: Result Ranges
50 | anchor: resultRanges
51 | - title: Meta Data
52 | anchor: metaData
53 | - title: Emitting Constraints
54 | anchor: emittingConstraints
55 | - title: Additional Information
56 | anchor: _additionalInformation
57 | children:
58 | - title: Tools
59 | anchor: tools
60 | - title: Open Questions
61 | anchor: openQuestions
--------------------------------------------------------------------------------
/_data/lsif-0-5-0-toc.yml:
--------------------------------------------------------------------------------
1 | - title: Table of Contents
2 | reveal: _general
3 | children:
4 | - title: General
5 | anchor: _general
6 | children:
7 | - title: Introduction
8 | anchor: lsifIntro
9 | - title: Motivation
10 | anchor: lsifMotivation
11 | - title: Ranges
12 | anchor: ranges
13 | - title: Result Sets
14 | anchor: resultSet
15 | - title: Language Features
16 | anchor: _languageFeatures
17 | children:
18 | - title: definition
19 | anchor: definition
20 | - title: declaration
21 | anchor: declaration
22 | - title: hover
23 | anchor: hover
24 | - title: references
25 | anchor: references
26 | - title: implementation
27 | anchor: implementation
28 | - title: typeDefinition
29 | anchor: typeDefinition
30 | - title: foldingRange
31 | anchor: foldingRange
32 | - title: documentLink
33 | anchor: documentLink
34 | - title: documentSymbol
35 | anchor: documentSymbol
36 | - title: diagnostic
37 | anchor: diagnostic
38 | - title: project
39 | anchor: projectContext
40 | - title: Embedding Contents
41 | anchor: embeddingContents
42 | - title: Advanced Concepts
43 | anchor: _advancedConcepts
44 | children:
45 | - title: Events
46 | anchor: events
47 | - title: Exports and Imports
48 | anchor: exportsImports
49 | - title: Multiple Projects
50 | anchor: multiProjects
51 | - title: Package Managers
52 | anchor: packageManagers
53 | - title: Result Ranges
54 | anchor: resultRanges
55 | - title: Meta Data
56 | anchor: metaData
57 | - title: Emitting Constraints
58 | anchor: emittingConstraints
59 | - title: Additional Information
60 | anchor: _additionalInformation
61 | children:
62 | - title: Tools
63 | anchor: tools
64 | - title: Open Questions
65 | anchor: openQuestions
--------------------------------------------------------------------------------
/_data/lsif-0-6-0-toc.yml:
--------------------------------------------------------------------------------
1 | - title: Table of Contents
2 | reveal: _general
3 | children:
4 | - title: General
5 | anchor: _general
6 | children:
7 | - title: Introduction
8 | anchor: lsifIntro
9 | - title: Motivation
10 | anchor: lsifMotivation
11 | - title: Ranges
12 | anchor: ranges
13 | - title: Result Sets
14 | anchor: resultSet
15 | - title: Language Features
16 | anchor: _languageFeatures
17 | children:
18 | - title: definition
19 | anchor: definition
20 | - title: declaration
21 | anchor: declaration
22 | - title: hover
23 | anchor: hover
24 | - title: references
25 | anchor: references
26 | - title: implementation
27 | anchor: implementation
28 | - title: typeDefinition
29 | anchor: typeDefinition
30 | - title: foldingRange
31 | anchor: foldingRange
32 | - title: documentLink
33 | anchor: documentLink
34 | - title: documentSymbol
35 | anchor: documentSymbol
36 | - title: diagnostic
37 | anchor: diagnostic
38 | - title: project
39 | anchor: projectContext
40 | - title: Embedding Contents
41 | anchor: embeddingContents
42 | - title: Advanced Concepts
43 | anchor: _advancedConcepts
44 | children:
45 | - title: Events
46 | anchor: events
47 | - title: Exports and Imports
48 | anchor: exportsImports
49 | - title: Multiple Projects
50 | anchor: multiProjects
51 | - title: Package Managers
52 | anchor: packageManagers
53 | - title: Result Ranges
54 | anchor: resultRanges
55 | - title: Meta Data
56 | anchor: metaData
57 | - title: Emitting Constraints
58 | anchor: emittingConstraints
59 | - title: Additional Information
60 | anchor: _additionalInformation
61 | children:
62 | - title: Tools
63 | anchor: tools
64 | - title: Open Questions
65 | anchor: openQuestions
--------------------------------------------------------------------------------
/_data/overviews.yml:
--------------------------------------------------------------------------------
1 | - title: LSP
2 | url: /overviews/lsp/overview
3 | - title: LSIF
4 | url: /overviews/lsif/overview
--------------------------------------------------------------------------------
/_data/specifications.yml:
--------------------------------------------------------------------------------
1 | - title: LSP
2 | anchor: lsp
3 | children:
4 | - title: 3.17 (Current)
5 | version: 3.17
6 | url: /specifications/lsp/3.17/specification
7 | - title: 3.18 (Upcoming)
8 | version: 3.18
9 | url: /specifications/lsp/3.18/specification
10 | - title: 3.16 (Previous)
11 | version: 3.16
12 | url: /specifications/specification-3-16
13 | - title: LSIF
14 | anchor: lsif
15 | children:
16 | - title: 0.6.0 (Current)
17 | url: /specifications/lsif/0.6.0/specification
18 | - title: 0.5.0 (Previous)
19 | url: /specifications/lsif/0.5.0/specification
20 | - title: Base Protocol
21 | anchor: base
22 | children:
23 | - title: 0.9 (Upcoming)
24 | version: 0.9
25 | url: /specifications/base/0.9/specification
--------------------------------------------------------------------------------
/_implementors/utilities.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: implementors
3 | title: "Utilities for LSPs"
4 | shortTitle: "Utilities"
5 | author: Microsoft
6 | index: 4
7 | ---
8 |
9 | *If you are missing a utility please create a pull request in GitHub against this markdown [document](https://github.com/Microsoft/language-server-protocol/blob/gh-pages/_implementors/utilities.md)*
10 |
11 | | Tool | Maintainer | Repository | Implementation Language |
12 | |------------------------------------------------------------------------------------------|--------------------------------------------------|--------------------------------------------------------------------------------------------|-------------------------|
13 | | [lasponya](https://www.npmjs.com/package/lasponya) | [Tamás Balog](https://github.com/picimako) | [Lasponya](https://github.com/picimako/lasponya) | TypeScript |
14 | | [lsp-devtools](https://lsp-devtools.readthedocs.io/en/latest/) | [Alex Carney](https://github.com/alcarney) | [lsp-devtools](https://github.com/swyddfa/lsp-devtools) | Python |
15 | | [monaco-languageserver-types](https://www.npmjs.com/package/monaco-languageserver-types) | [Remco Haszing](https://github.com/remcohaszing) | [monaco-languageserver-types](https://github.com/remcohaszing/monaco-languageserver-types) | TypeScript |
16 | {: .table .table-bordered .table-responsive}
17 |
--------------------------------------------------------------------------------
/_includes/cookie_notice.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
47 |
--------------------------------------------------------------------------------
/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/exit.md:
--------------------------------------------------------------------------------
1 | #### Exit Notification (:arrow_right:)
2 |
3 | A notification to ask the server to exit its process.
4 | The server should exit with `success` code 0 if the shutdown request has been received before; otherwise with `error` code 1.
5 |
6 | _Notification_:
7 | * method: 'exit'
8 | * params: none
9 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/initialized.md:
--------------------------------------------------------------------------------
1 | #### Initialized Notification (:arrow_right:)
2 |
3 | The initialized notification is sent from the client to the server after the client received the result of the `initialize` request but before the client is sending any other request or notification to the server. The server can use the `initialized` notification, for example, to dynamically register capabilities. The `initialized` notification may only be sent once.
4 |
5 | _Notification_:
6 | * method: 'initialized'
7 | * params: `InitializedParams` defined as follows:
8 |
9 | ```typescript
10 | interface InitializedParams {
11 | }
12 | ```
13 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/logMessage.md:
--------------------------------------------------------------------------------
1 | #### LogMessage Notification (:arrow_left:)
2 |
3 | The log message notification is sent from the server to the client to ask the client to log a particular message.
4 |
5 | _Notification_:
6 | * method: 'window/logMessage'
7 | * params: `LogMessageParams` defined as follows:
8 |
9 |
10 |
11 | ```typescript
12 | interface LogMessageParams {
13 | /**
14 | * The message type. See {@link MessageType}
15 | */
16 | type: MessageType;
17 |
18 | /**
19 | * The actual message
20 | */
21 | message: string;
22 | }
23 | ```
24 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/logTrace.md:
--------------------------------------------------------------------------------
1 | #### LogTrace Notification (:arrow_left:)
2 |
3 | A notification to log the trace of the server's execution.
4 | The amount and content of these notifications depends on the current `trace` configuration.
5 | If `trace` is `'off'`, the server should not send any `logTrace` notification.
6 | If `trace` is `'messages'`, the server should not add the `'verbose'` field in the `LogTraceParams`.
7 |
8 | `$/logTrace` should be used for systematic trace reporting. For single debugging messages, the server should send [`window/logMessage`](#window_logMessage) notifications.
9 |
10 |
11 | _Notification_:
12 | * method: '$/logTrace'
13 | * params: `LogTraceParams` defined as follows:
14 |
15 | ```typescript
16 | interface LogTraceParams {
17 | /**
18 | * The message to be logged.
19 | */
20 | message: string;
21 | /**
22 | * Additional information that can be computed if the `trace` configuration
23 | * is set to `'verbose'`
24 | */
25 | verbose?: string;
26 | }
27 | ```
28 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/setTrace.md:
--------------------------------------------------------------------------------
1 | #### SetTrace Notification (:arrow_right:)
2 |
3 | A notification that should be used by the client to modify the trace setting of the server.
4 |
5 | _Notification_:
6 | * method: '$/setTrace'
7 | * params: `SetTraceParams` defined as follows:
8 |
9 | ```typescript
10 | interface SetTraceParams {
11 | /**
12 | * The new value that should be assigned to the trace setting.
13 | */
14 | value: TraceValue;
15 | }
16 | ```
17 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/showMessage.md:
--------------------------------------------------------------------------------
1 | #### ShowMessage Notification (:arrow_left:)
2 |
3 | The show message notification is sent from a server to a client to ask the client to display a particular message in the user interface.
4 |
5 | _Notification_:
6 | * method: 'window/showMessage'
7 | * params: `ShowMessageParams` defined as follows:
8 |
9 | ```typescript
10 | interface ShowMessageParams {
11 | /**
12 | * The message type. See {@link MessageType}.
13 | */
14 | type: MessageType;
15 |
16 | /**
17 | * The actual message.
18 | */
19 | message: string;
20 | }
21 | ```
22 |
23 | Where the type is defined as follows:
24 |
25 |
26 |
27 | ```typescript
28 | export namespace MessageType {
29 | /**
30 | * An error message.
31 | */
32 | export const Error = 1;
33 | /**
34 | * A warning message.
35 | */
36 | export const Warning = 2;
37 | /**
38 | * An information message.
39 | */
40 | export const Info = 3;
41 | /**
42 | * A log message.
43 | */
44 | export const Log = 4;
45 | /**
46 | * A debug message.
47 | *
48 | * @since 3.18.0
49 | * @proposed
50 | */
51 | export const Debug = 5;
52 | }
53 |
54 | export type MessageType = 1 | 2 | 3 | 4 | 5;
55 | ```
56 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/showMessageRequest.md:
--------------------------------------------------------------------------------
1 | #### ShowMessage Request (:arrow_right_hook:)
2 |
3 | The show message request is sent from a server to a client to ask the client to display a particular message in the user interface. In addition to the show message notification the request allows to pass actions and to wait for an answer from the client.
4 |
5 | _Client Capability_:
6 | * property path (optional): `window.showMessage`
7 | * property type: `ShowMessageRequestClientCapabilities` defined as follows:
8 |
9 | ```typescript
10 | /**
11 | * Show message request client capabilities
12 | */
13 | export interface ShowMessageRequestClientCapabilities {
14 | /**
15 | * Capabilities specific to the `MessageActionItem` type.
16 | */
17 | messageActionItem?: {
18 | /**
19 | * Whether the client supports additional attributes which
20 | * are preserved and sent back to the server in the
21 | * request's response.
22 | */
23 | additionalPropertiesSupport?: boolean;
24 | };
25 | }
26 | ```
27 |
28 | _Request_:
29 | * method: 'window/showMessageRequest'
30 | * params: `ShowMessageRequestParams` defined as follows:
31 |
32 |
33 |
34 | ```typescript
35 | interface ShowMessageRequestParams {
36 | /**
37 | * The message type. See {@link MessageType}
38 | */
39 | type: MessageType;
40 |
41 | /**
42 | * The actual message
43 | */
44 | message: string;
45 |
46 | /**
47 | * The message action items to present.
48 | */
49 | actions?: MessageActionItem[];
50 | }
51 | ```
52 |
53 | Where the `MessageActionItem` is defined as follows:
54 |
55 |
56 |
57 | ```typescript
58 | interface MessageActionItem {
59 | /**
60 | * A short title like 'Retry', 'Open Log' etc.
61 | */
62 | title: string;
63 | }
64 | ```
65 |
66 | _Response_:
67 | * result: the selected `MessageActionItem` \| `null` if none got selected.
68 | * error: code and message set in case an exception happens during showing a message.
69 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/shutdown.md:
--------------------------------------------------------------------------------
1 | #### Shutdown Request (:leftwards_arrow_with_hook:)
2 |
3 | The shutdown request is sent from the client to the server. It asks the server to shut down, but to not exit (otherwise the response might not be delivered correctly to the client). There is a separate exit notification that asks the server to exit. Clients must not send any notifications other than `exit` or requests to a server to which they have sent a shutdown request. Clients should also wait with sending the `exit` notification until they have received a response from the `shutdown` request.
4 |
5 | If a server receives requests after a shutdown request those requests should error with `InvalidRequest`.
6 |
7 | _Request_:
8 | * method: 'shutdown'
9 | * params: none
10 |
11 | _Response_:
12 | * result: null
13 | * error: code and message set in case an exception happens during shutdown request.
14 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/telemetryEvent.md:
--------------------------------------------------------------------------------
1 | #### Telemetry Notification (:arrow_left:)
2 |
3 | The telemetry notification is sent from the server to the client to ask the client to log a telemetry event. The protocol doesn't specify the payload since no interpretation of the data happens in the protocol. Most clients even don't handle the event directly but forward them to the extensions owing the corresponding server issuing the event.
4 |
5 | _Notification_:
6 | * method: 'telemetry/event'
7 | * params: 'object' \| 'array';
8 |
--------------------------------------------------------------------------------
/_includes/messages/3.17/unregisterCapability.md:
--------------------------------------------------------------------------------
1 | #### Unregister Capability (:arrow_right_hook:)
2 |
3 | The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability.
4 |
5 | _Request_:
6 | * method: 'client/unregisterCapability'
7 | * params: `UnregistrationParams`
8 |
9 | Where `UnregistrationParams` are defined as follows:
10 |
11 |
12 |
13 | ```typescript
14 | /**
15 | * General parameters to unregister a capability.
16 | */
17 | export interface Unregistration {
18 | /**
19 | * The id used to unregister the request or notification. Usually an id
20 | * provided during the register request.
21 | */
22 | id: string;
23 |
24 | /**
25 | * The method / capability to unregister for.
26 | */
27 | method: string;
28 | }
29 | ```
30 |
31 |
32 |
33 | ```typescript
34 | export interface UnregistrationParams {
35 | // This should correctly be named `unregistrations`. However changing this
36 | // is a breaking change and needs to wait until we deliver a 4.x version
37 | // of the specification.
38 | unregisterations: Unregistration[];
39 | }
40 | ```
41 |
42 | An example JSON-RPC message to unregister the above registered `textDocument/willSaveWaitUntil` feature looks like this:
43 |
44 | ```json
45 | {
46 | "method": "client/unregisterCapability",
47 | "params": {
48 | "unregisterations": [
49 | {
50 | "id": "79eee87c-c409-4664-8102-e03263673f6f",
51 | "method": "textDocument/willSaveWaitUntil"
52 | }
53 | ]
54 | }
55 | }
56 | ```
57 | _Response_:
58 | * result: void.
59 | * error: code and message set in case an exception happens during the request.
60 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/exit.md:
--------------------------------------------------------------------------------
1 | #### Exit Notification (:arrow_right:)
2 |
3 | A notification to ask the server to exit its process.
4 | The server should exit with `success` code 0 if the shutdown request has been received before; otherwise with `error` code 1.
5 |
6 | _Notification_:
7 | * method: 'exit'
8 | * params: none
9 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/initialized.md:
--------------------------------------------------------------------------------
1 | #### Initialized Notification (:arrow_right:)
2 |
3 | The initialized notification is sent from the client to the server after the client received the result of the `initialize` request, but before the client is sending any other request or notification to the server. The server can use the `initialized` notification, for example, to dynamically register capabilities. The `initialized` notification may only be sent once.
4 |
5 | _Notification_:
6 | * method: 'initialized'
7 | * params: `InitializedParams` defined as follows:
8 |
9 | ```typescript
10 | interface InitializedParams {
11 | }
12 | ```
13 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/logMessage.md:
--------------------------------------------------------------------------------
1 | #### LogMessage Notification (:arrow_left:)
2 |
3 | The log message notification is sent from the server to the client to ask the client to log a particular message.
4 |
5 | _Notification_:
6 | * method: 'window/logMessage'
7 | * params: `LogMessageParams` defined as follows:
8 |
9 |
10 |
11 | ```typescript
12 | interface LogMessageParams {
13 | /**
14 | * The message type. See {@link MessageType}.
15 | */
16 | type: MessageType;
17 |
18 | /**
19 | * The actual message.
20 | */
21 | message: string;
22 | }
23 | ```
24 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/logTrace.md:
--------------------------------------------------------------------------------
1 | #### LogTrace Notification (:arrow_left:)
2 |
3 | A notification to log the trace of the server's execution.
4 | The amount and content of these notifications depends on the current `trace` configuration.
5 | If `trace` is `'off'`, the server should not send any `logTrace` notification.
6 | If `trace` is `'messages'`, the server should not add the `'verbose'` field in the `LogTraceParams`.
7 |
8 | `$/logTrace` should be used for systematic trace reporting. For single debugging messages, the server should send [`window/logMessage`](#window_logMessage) notifications.
9 |
10 |
11 | _Notification_:
12 | * method: '$/logTrace'
13 | * params: `LogTraceParams` defined as follows:
14 |
15 | ```typescript
16 | interface LogTraceParams {
17 | /**
18 | * The message to be logged.
19 | */
20 | message: string;
21 | /**
22 | * Additional information that can be computed if the `trace` configuration
23 | * is set to `'verbose'`.
24 | */
25 | verbose?: string;
26 | }
27 | ```
28 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/setTrace.md:
--------------------------------------------------------------------------------
1 | #### SetTrace Notification (:arrow_right:)
2 |
3 | A notification that should be used by the client to modify the trace setting of the server.
4 |
5 | _Notification_:
6 | * method: '$/setTrace'
7 | * params: `SetTraceParams` defined as follows:
8 |
9 | ```typescript
10 | interface SetTraceParams {
11 | /**
12 | * The new value that should be assigned to the trace setting.
13 | */
14 | value: TraceValue;
15 | }
16 | ```
17 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/showMessage.md:
--------------------------------------------------------------------------------
1 | #### ShowMessage Notification (:arrow_left:)
2 |
3 | The show message notification is sent from a server to a client to ask the client to display a particular message in the user interface.
4 |
5 | _Notification_:
6 | * method: 'window/showMessage'
7 | * params: `ShowMessageParams` defined as follows:
8 |
9 | ```typescript
10 | interface ShowMessageParams {
11 | /**
12 | * The message type. See {@link MessageType}.
13 | */
14 | type: MessageType;
15 |
16 | /**
17 | * The actual message.
18 | */
19 | message: string;
20 | }
21 | ```
22 |
23 | Where the type is defined as follows:
24 |
25 |
26 |
27 | ```typescript
28 | export namespace MessageType {
29 | /**
30 | * An error message.
31 | */
32 | export const Error = 1;
33 | /**
34 | * A warning message.
35 | */
36 | export const Warning = 2;
37 | /**
38 | * An information message.
39 | */
40 | export const Info = 3;
41 | /**
42 | * A log message.
43 | */
44 | export const Log = 4;
45 | /**
46 | * A debug message.
47 | *
48 | * @since 3.18.0
49 | */
50 | export const Debug = 5;
51 | }
52 |
53 | export type MessageType = 1 | 2 | 3 | 4 | 5;
54 | ```
55 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/showMessageRequest.md:
--------------------------------------------------------------------------------
1 | #### ShowMessage Request (:arrow_right_hook:)
2 |
3 | The show message request is sent from a server to a client to ask the client to display a particular message in the user interface. In addition to the show message notification, the request allows to pass actions and to wait for an answer from the client.
4 |
5 | _Client Capability_:
6 | * property path (optional): `window.showMessage`
7 | * property type: `ShowMessageRequestClientCapabilities` defined as follows:
8 |
9 | ```typescript
10 | /**
11 | * Show message request client capabilities
12 | */
13 | export interface ShowMessageRequestClientCapabilities {
14 | /**
15 | * Capabilities specific to the `MessageActionItem` type.
16 | */
17 | messageActionItem?: {
18 | /**
19 | * Whether the client supports additional attributes which
20 | * are preserved and sent back to the server in the
21 | * request's response.
22 | */
23 | additionalPropertiesSupport?: boolean;
24 | };
25 | }
26 | ```
27 |
28 | _Request_:
29 | * method: 'window/showMessageRequest'
30 | * params: `ShowMessageRequestParams` defined as follows:
31 |
32 |
33 |
34 | ```typescript
35 | interface ShowMessageRequestParams {
36 | /**
37 | * The message type. See {@link MessageType}.
38 | */
39 | type: MessageType;
40 |
41 | /**
42 | * The actual message.
43 | */
44 | message: string;
45 |
46 | /**
47 | * The message action items to present.
48 | */
49 | actions?: MessageActionItem[];
50 | }
51 | ```
52 |
53 | Where the `MessageActionItem` is defined as follows:
54 |
55 |
56 |
57 | ```typescript
58 | interface MessageActionItem {
59 | /**
60 | * A short title like 'Retry', 'Open Log' etc.
61 | */
62 | title: string;
63 | }
64 | ```
65 |
66 | _Response_:
67 | * result: the selected `MessageActionItem` \| `null` if none got selected.
68 | * error: code and message set in case an exception happens during showing a message.
69 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/shutdown.md:
--------------------------------------------------------------------------------
1 | #### Shutdown Request (:leftwards_arrow_with_hook:)
2 |
3 | The shutdown request is sent from the client to the server. It asks the server to shut down, but to not exit (otherwise the response might not be delivered correctly to the client). There is a separate exit notification that asks the server to exit. Clients must not send any requests or notifications other than `exit` to a server to which they have sent a shutdown request. Clients should also wait with sending the `exit` notification until they have received a response from the `shutdown` request.
4 |
5 | If a server receives requests after a shutdown request those requests should error with `InvalidRequest`.
6 |
7 | _Request_:
8 | * method: 'shutdown'
9 | * params: none
10 |
11 | _Response_:
12 | * result: null
13 | * error: code and message set in case an exception happens during shutdown request.
14 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/telemetryEvent.md:
--------------------------------------------------------------------------------
1 | #### Telemetry Notification (:arrow_left:)
2 |
3 | The telemetry notification is sent from the server to the client to ask the client to log a telemetry event. The protocol doesn't specify the payload since no interpretation of the data happens in the protocol. Most clients don't even handle the event directly but forward them to the extensions owing the corresponding server issuing the event.
4 |
5 | _Notification_:
6 | * method: 'telemetry/event'
7 | * params: 'object' \| 'array';
8 |
--------------------------------------------------------------------------------
/_includes/messages/3.18/unregisterCapability.md:
--------------------------------------------------------------------------------
1 | #### Unregister Capability (:arrow_right_hook:)
2 |
3 | The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability.
4 |
5 | _Request_:
6 | * method: 'client/unregisterCapability'
7 | * params: `UnregistrationParams`
8 |
9 | Where `UnregistrationParams` are defined as follows:
10 |
11 |
12 |
13 | ```typescript
14 | /**
15 | * General parameters to unregister a capability.
16 | */
17 | export interface Unregistration {
18 | /**
19 | * The id used to unregister the request or notification. Usually an id
20 | * provided during the register request.
21 | */
22 | id: string;
23 |
24 | /**
25 | * The method / capability to unregister for.
26 | */
27 | method: string;
28 | }
29 | ```
30 |
31 |
32 |
33 | ```typescript
34 | export interface UnregistrationParams {
35 | // This should correctly be named `unregistrations`. However, changing this
36 | // is a breaking change and needs to wait until we deliver a 4.x version
37 | // of the specification.
38 | unregisterations: Unregistration[];
39 | }
40 | ```
41 |
42 | An example JSON-RPC message to unregister the above registered `textDocument/willSaveWaitUntil` feature looks like this:
43 |
44 | ```json
45 | {
46 | "method": "client/unregisterCapability",
47 | "params": {
48 | "unregisterations": [
49 | {
50 | "id": "79eee87c-c409-4664-8102-e03263673f6f",
51 | "method": "textDocument/willSaveWaitUntil"
52 | }
53 | ]
54 | }
55 | }
56 | ```
57 | _Response_:
58 | * result: void.
59 | * error: code and message set in case an exception happens during the request.
60 |
--------------------------------------------------------------------------------
/_includes/topnav.html:
--------------------------------------------------------------------------------
1 |
2 |
29 |
--------------------------------------------------------------------------------
/_includes/types/enumerations.md:
--------------------------------------------------------------------------------
1 | #### Enumerations
2 |
3 | The protocol supports two kind of enumerations: (a) integer based enumerations and (b) string based enumerations. Integer based enumerations usually start with `1`. The ones that don't are historical and they were kept to stay backwards compatible. If appropriate, the value set of an enumeration is announced by the defining side (e.g. client or server) and transmitted to the other side during the initialize handshake. An example is the `CompletionItemKind` enumeration. It is announced by the client using the `textDocument.completion.completionItemKind` client property.
4 |
5 | To support the evolution of enumerations the using side of an enumeration shouldn't fail on an enumeration value it doesn't know. It should simply ignore it as a value it can use and try to do its best to preserve the value on round trips. Lets look at the `CompletionItemKind` enumeration as an example again: if in a future version of the specification an additional completion item kind with the value `n` gets added and announced by a client an (older) server not knowing about the value should not fail but simply ignore the value as a usable item kind.
6 |
--------------------------------------------------------------------------------
/_includes/types/traceValue.md:
--------------------------------------------------------------------------------
1 | #### TraceValue
2 |
3 | A `TraceValue` represents the level of verbosity with which the server systematically reports its execution trace using [$/logTrace](#logTrace) notifications.
4 | The initial trace value is set by the client at initialization and can be modified later using the [$/setTrace](#setTrace) notification.
5 |
6 | ```typescript
7 | export type TraceValue = 'off' | 'messages' | 'verbose';
8 | ```
--------------------------------------------------------------------------------
/_includes/types/uri.md:
--------------------------------------------------------------------------------
1 | #### URI
2 |
3 | URI's are transferred as strings. The URI's format is defined in [https://tools.ietf.org/html/rfc3986](https://tools.ietf.org/html/rfc3986)
4 |
5 | ```
6 | foo://example.com:8042/over/there?name=ferret#nose
7 | \_/ \______________/\_________/ \_________/ \__/
8 | | | | | |
9 | scheme authority path query fragment
10 | | _____________________|__
11 | / \ / \
12 | urn:example:animal:ferret:nose
13 | ```
14 |
15 | We also maintain a node module to parse a string into `scheme`, `authority`, `path`, `query`, and `fragment` URI components. The GitHub repository is [https://github.com/Microsoft/vscode-uri](https://github.com/Microsoft/vscode-uri), and the npm module is [https://www.npmjs.com/package/vscode-uri](https://www.npmjs.com/package/vscode-uri).
16 |
17 | Many of the interfaces contain fields that correspond to the URI of a document. For clarity, the type of such a field is declared as a `DocumentUri`. Over the wire, it will still be transferred as a string, but this guarantees that the contents of that string can be parsed as a valid URI.
18 |
19 | Care should be taken to handle encoding in URIs. For example, some clients (such as VS Code) may encode colons in drive letters while others do not. The URIs below are both valid, but clients and servers should be consistent with the form they use themselves to ensure the other party doesn't interpret them as distinct URIs. Clients and servers should not assume that each other are encoding the same way (for example a client encoding colons in drive letters cannot assume server responses will have encoded colons). The same applies to casing of drive letters - one party should not assume the other party will return paths with drive letters cased the same as itself.
20 |
21 | ```
22 | file:///c:/project/readme.md
23 | file:///C%3A/project/readme.md
24 | ```
25 |
26 |
27 |
28 | ```typescript
29 | type DocumentUri = string;
30 | ```
31 |
32 | There is also a tagging interface for normal non document URIs. It maps to a `string` as well.
33 |
34 | ```typescript
35 | type URI = string;
36 | ```
37 |
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 | {% include cookie_notice.html %}
8 | {% include topnav.html %}
9 |
10 |
10 | Click here if you are not redirected.
11 |
12 |
--------------------------------------------------------------------------------
/_layouts/singlePage.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 |
6 |
7 |
8 |
9 |
10 |
{{ page.title }}
11 |
{{ content }}
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/_overviews/lsif/img/foldingRange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_overviews/lsif/img/foldingRange.png
--------------------------------------------------------------------------------
/_overviews/lsif/img/hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_overviews/lsif/img/hover.png
--------------------------------------------------------------------------------
/_overviews/lsif/img/hoverResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_overviews/lsif/img/hoverResult.png
--------------------------------------------------------------------------------
/_overviews/lsp/img/language-server-sequence.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_overviews/lsp/img/language-server-sequence.png
--------------------------------------------------------------------------------
/_overviews/lsp/img/language-server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_overviews/lsp/img/language-server.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.4.0/img/definitionResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.4.0/img/definitionResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.4.0/img/foldingRange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.4.0/img/foldingRange.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.4.0/img/hoverResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.4.0/img/hoverResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.4.0/img/referenceResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.4.0/img/referenceResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.4.0/img/resultSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.4.0/img/resultSet.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.5.0/img/definitionResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.5.0/img/definitionResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.5.0/img/foldingRange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.5.0/img/foldingRange.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.5.0/img/hoverResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.5.0/img/hoverResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.5.0/img/referenceResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.5.0/img/referenceResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.5.0/img/resultSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.5.0/img/resultSet.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.6.0/img/definitionResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.6.0/img/definitionResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.6.0/img/foldingRange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.6.0/img/foldingRange.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.6.0/img/hoverResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.6.0/img/hoverResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.6.0/img/referenceResult.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.6.0/img/referenceResult.png
--------------------------------------------------------------------------------
/_specifications/lsif/0.6.0/img/resultSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/_specifications/lsif/0.6.0/img/resultSet.png
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/language/colorPresentation.md:
--------------------------------------------------------------------------------
1 | #### Color Presentation Request (:leftwards_arrow_with_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The color presentation request is sent from the client to the server to obtain a list of presentations for a color value at a given location. Clients can use the result to
6 | - modify a color reference.
7 | - show in a color picker and let users pick one of the presentations
8 |
9 | This request has no special capabilities and registration options since it is send as a resolve request for the `textDocument/documentColor` request.
10 |
11 | _Request_:
12 |
13 | * method: `textDocument/colorPresentation`
14 | * params: `ColorPresentationParams` defined as follows
15 |
16 |
17 |
18 | ```typescript
19 | interface ColorPresentationParams extends WorkDoneProgressParams,
20 | PartialResultParams {
21 | /**
22 | * The text document.
23 | */
24 | textDocument: TextDocumentIdentifier;
25 |
26 | /**
27 | * The color information to request presentations for.
28 | */
29 | color: Color;
30 |
31 | /**
32 | * The range where the color would be inserted. Serves as a context.
33 | */
34 | range: Range;
35 | }
36 | ```
37 |
38 | _Response_:
39 | * result: `ColorPresentation[]` defined as follows:
40 |
41 |
42 |
43 | ```typescript
44 | interface ColorPresentation {
45 | /**
46 | * The label of this color presentation. It will be shown on the color
47 | * picker header. By default this is also the text that is inserted when
48 | * selecting this color presentation.
49 | */
50 | label: string;
51 | /**
52 | * An [edit](#TextEdit) which is applied to a document when selecting
53 | * this presentation for the color. When omitted the
54 | * [label](#ColorPresentation.label) is used.
55 | */
56 | textEdit?: TextEdit;
57 | /**
58 | * An optional array of additional [text edits](#TextEdit) that are applied
59 | * when selecting this color presentation. Edits must not overlap with the
60 | * main [edit](#ColorPresentation.textEdit) nor with themselves.
61 | */
62 | additionalTextEdits?: TextEdit[];
63 | }
64 | ```
65 |
66 | * partial result: `ColorPresentation[]`
67 | * error: code and message set in case an exception happens during the 'textDocument/colorPresentation' request
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/language/declaration.md:
--------------------------------------------------------------------------------
1 | #### Goto Declaration Request (:leftwards_arrow_with_hook:)
2 |
3 | > *Since version 3.14.0*
4 |
5 | The go to declaration request is sent from the client to the server to resolve the declaration location of a symbol at a given text document position.
6 |
7 | The result type [`LocationLink`](#locationLink)[] got introduced with version 3.14.0 and depends on the corresponding client capability `textDocument.declaration.linkSupport`.
8 |
9 | _Client Capability_:
10 | * property name (optional): `textDocument.declaration`
11 | * property type: `DeclarationClientCapabilities` defined as follows:
12 |
13 |
14 |
15 | ```typescript
16 | export interface DeclarationClientCapabilities {
17 | /**
18 | * Whether declaration supports dynamic registration. If this is set to
19 | * `true` the client supports the new `DeclarationRegistrationOptions`
20 | * return value for the corresponding server capability as well.
21 | */
22 | dynamicRegistration?: boolean;
23 |
24 | /**
25 | * The client supports additional metadata in the form of declaration links.
26 | */
27 | linkSupport?: boolean;
28 | }
29 | ```
30 |
31 | _Server Capability_:
32 | * property name (optional): `declarationProvider`
33 | * property type: `boolean | DeclarationOptions | DeclarationRegistrationOptions` where `DeclarationOptions` is defined as follows:
34 |
35 |
57 |
58 | ```typescript
59 | export interface DeclarationParams extends TextDocumentPositionParams,
60 | WorkDoneProgressParams, PartialResultParams {
61 | }
62 | ```
63 |
64 | _Response_:
65 | * result: [`Location`](#location) \| [`Location`](#location)[] \| [`LocationLink`](#locationLink)[] \|`null`
66 | * partial result: [`Location`](#location)[] \| [`LocationLink`](#locationLink)[]
67 | * error: code and message set in case an exception happens during the declaration request.
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/language/definition.md:
--------------------------------------------------------------------------------
1 | #### Goto Definition Request (:leftwards_arrow_with_hook:)
2 |
3 | The go to definition request is sent from the client to the server to resolve the definition location of a symbol at a given text document position.
4 |
5 | The result type [`LocationLink`](#locationLink)[] got introduced with version 3.14.0 and depends on the corresponding client capability `textDocument.definition.linkSupport`.
6 |
7 | _Client Capability_:
8 | * property name (optional): `textDocument.definition`
9 | * property type: `DefinitionClientCapabilities` defined as follows:
10 |
11 |
12 |
13 | ```typescript
14 | export interface DefinitionClientCapabilities {
15 | /**
16 | * Whether definition supports dynamic registration.
17 | */
18 | dynamicRegistration?: boolean;
19 |
20 | /**
21 | * The client supports additional metadata in the form of definition links.
22 | *
23 | * @since 3.14.0
24 | */
25 | linkSupport?: boolean;
26 | }
27 | ```
28 |
29 | _Server Capability_:
30 | * property name (optional): `definitionProvider`
31 | * property type: `boolean | DefinitionOptions` where `DefinitionOptions` is defined as follows:
32 |
33 |
55 |
56 | ```typescript
57 | export interface DefinitionParams extends TextDocumentPositionParams,
58 | WorkDoneProgressParams, PartialResultParams {
59 | }
60 | ```
61 |
62 | _Response_:
63 | * result: [`Location`](#location) \| [`Location`](#location)[] \| [`LocationLink`](#locationLink)[] \| `null`
64 | * partial result: [`Location`](#location)[] \| [`LocationLink`](#locationLink)[]
65 | * error: code and message set in case an exception happens during the definition request.
66 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/language/rangeFormatting.md:
--------------------------------------------------------------------------------
1 | #### Document Range Formatting Request (:leftwards_arrow_with_hook:)
2 |
3 | The document range formatting request is sent from the client to the server to format a given range in a document.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.rangeFormatting`
7 | * property type: `DocumentRangeFormattingClientCapabilities` defined as follows:
8 |
9 |
47 |
48 | ```typescript
49 | interface DocumentRangeFormattingParams extends WorkDoneProgressParams {
50 | /**
51 | * The document to format.
52 | */
53 | textDocument: TextDocumentIdentifier;
54 |
55 | /**
56 | * The range to format
57 | */
58 | range: Range;
59 |
60 | /**
61 | * The format options
62 | */
63 | options: FormattingOptions;
64 | }
65 | ```
66 |
67 | _Response_:
68 | * result: [`TextEdit[]`](#textEdit) \| `null` describing the modification to the document to be formatted.
69 | * error: code and message set in case an exception happens during the range formatting request.
70 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/language/references.md:
--------------------------------------------------------------------------------
1 | #### Find References Request (:leftwards_arrow_with_hook:)
2 |
3 | The references request is sent from the client to the server to resolve project-wide references for the symbol denoted by the given text document position.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.references`
7 | * property type: `ReferenceClientCapabilities` defined as follows:
8 |
9 |
55 |
56 | ```typescript
57 | export interface ReferenceContext {
58 | /**
59 | * Include the declaration of the current symbol.
60 | */
61 | includeDeclaration: boolean;
62 | }
63 | ```
64 | _Response_:
65 | * result: [`Location`](#location)[] \| `null`
66 | * partial result: [`Location`](#location)[]
67 | * error: code and message set in case an exception happens during the reference request.
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/didClose.md:
--------------------------------------------------------------------------------
1 | #### DidCloseTextDocument Notification (:arrow_right:)
2 |
3 | The document close notification is sent from the client to the server when the document got closed in the client. The document's master now exists where the document's Uri points to (e.g. if the document's Uri is a file Uri the master now exists on disk). As with the open notification the close notification is about managing the document's content. Receiving a close notification doesn't mean that the document was open in an editor before. A close notification requires a previous open notification to be sent. Note that a server's ability to fulfill requests is independent of whether a text document is open or closed.
4 |
5 | _Client Capability_:
6 | See general synchronization [client capabilities](#textDocument_synchronization_cc).
7 |
8 | _Server Capability_:
9 | See general synchronization [server capabilities](#textDocument_synchronization_sc).
10 |
11 | _Registration Options_: `TextDocumentRegistrationOptions`
12 |
13 | _Notification_:
14 | * method: `textDocument/didClose`
15 | * params: `DidCloseTextDocumentParams` defined as follows:
16 |
17 |
18 |
19 | ```typescript
20 | interface DidCloseTextDocumentParams {
21 | /**
22 | * The document that was closed.
23 | */
24 | textDocument: TextDocumentIdentifier;
25 | }
26 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/didOpen.md:
--------------------------------------------------------------------------------
1 | #### DidOpenTextDocument Notification (:arrow_right:)
2 |
3 | The document open notification is sent from the client to the server to signal newly opened text documents. The document's content is now managed by the client and the server must not try to read the document's content using the document's Uri. Open in this sense means it is managed by the client. It doesn't necessarily mean that its content is presented in an editor. An open notification must not be sent more than once without a corresponding close notification send before. This means open and close notification must be balanced and the max open count for a particular textDocument is one. Note that a server's ability to fulfill requests is independent of whether a text document is open or closed.
4 |
5 | The `DidOpenTextDocumentParams` contain the language id the document is associated with. If the language id of a document changes, the client needs to send a `textDocument/didClose` to the server followed by a `textDocument/didOpen` with the new language id if the server handles the new language id as well.
6 |
7 | _Client Capability_:
8 | See general synchronization [client capabilities](#textDocument_synchronization_cc).
9 |
10 | _Server Capability_:
11 | See general synchronization [server capabilities](#textDocument_synchronization_sc).
12 |
13 | _Registration Options_: [`TextDocumentRegistrationOptions`](#textDocumentRegistrationOptions)
14 |
15 | _Notification_:
16 | * method: 'textDocument/didOpen'
17 | * params: `DidOpenTextDocumentParams` defined as follows:
18 |
19 |
20 |
21 | ```typescript
22 | interface DidOpenTextDocumentParams {
23 | /**
24 | * The document that was opened.
25 | */
26 | textDocument: TextDocumentItem;
27 | }
28 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/didRename.md:
--------------------------------------------------------------------------------
1 | #### Renaming a document
2 |
3 | Document renames should be signaled to a server sending a document close notification with the document's old name followed by an open notification using the document's new name. Major reason is that besides the name other attributes can change as well like the language that is associated with the document. In addition the new document could not be of interest for the server anymore.
4 |
5 | Servers can participate in a document rename by subscribing for the [`workspace/didRenameFiles`](#workspace_didRenameFiles) notification or the [`workspace/willRenameFiles`](#workspace_willRenameFiles) request.
6 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/didSave.md:
--------------------------------------------------------------------------------
1 | #### DidSaveTextDocument Notification (:arrow_right:)
2 |
3 | The document save notification is sent from the client to the server when the document was saved in the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.didSave`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/didSave` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.save`
13 | * property type: `boolean | SaveOptions` where `SaveOptions` is defined as follows:
14 |
15 |
16 |
17 | ```typescript
18 | export interface SaveOptions {
19 | /**
20 | * The client is supposed to include the content on save.
21 | */
22 | includeText?: boolean;
23 | }
24 | ```
25 |
26 | The capability indicates that the server is interested in `textDocument/didSave` notifications.
27 |
28 | _Registration Options_: `TextDocumentSaveRegistrationOptions` defined as follows:
29 |
30 |
31 |
32 | ```typescript
33 | export interface TextDocumentSaveRegistrationOptions
34 | extends TextDocumentRegistrationOptions {
35 | /**
36 | * The client is supposed to include the content on save.
37 | */
38 | includeText?: boolean;
39 | }
40 | ```
41 |
42 | _Notification_:
43 | * method: `textDocument/didSave`
44 | * params: `DidSaveTextDocumentParams` defined as follows:
45 |
46 |
47 |
48 | ```typescript
49 | interface DidSaveTextDocumentParams {
50 | /**
51 | * The document that was saved.
52 | */
53 | textDocument: TextDocumentIdentifier;
54 |
55 | /**
56 | * Optional the content when saved. Depends on the includeText value
57 | * when the save notification was requested.
58 | */
59 | text?: string;
60 | }
61 | ```
62 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/willSave.md:
--------------------------------------------------------------------------------
1 | #### WillSaveTextDocument Notification (:arrow_right:)
2 |
3 | The document will save notification is sent from the client to the server before the document is actually saved. If a server has registered for open / close events clients should ensure that the document is open before a `willSave` notification is sent since clients can't change the content of a file without ownership transferal.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.willSave`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/willSave` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.willSave`
13 | * property type: `boolean`
14 |
15 | The capability indicates that the server is interested in `textDocument/willSave` notifications.
16 |
17 | _Registration Options_: `TextDocumentRegistrationOptions`
18 |
19 | _Notification_:
20 | * method: 'textDocument/willSave'
21 | * params: `WillSaveTextDocumentParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters send in a will save text document notification.
28 | */
29 | export interface WillSaveTextDocumentParams {
30 | /**
31 | * The document that will be saved.
32 | */
33 | textDocument: TextDocumentIdentifier;
34 |
35 | /**
36 | * The 'TextDocumentSaveReason'.
37 | */
38 | reason: TextDocumentSaveReason;
39 | }
40 | ```
41 |
42 |
43 |
44 | ```typescript
45 | /**
46 | * Represents reasons why a text document is saved.
47 | */
48 | export namespace TextDocumentSaveReason {
49 |
50 | /**
51 | * Manually triggered, e.g. by the user pressing save, by starting
52 | * debugging, or by an API call.
53 | */
54 | export const Manual = 1;
55 |
56 | /**
57 | * Automatic after a delay.
58 | */
59 | export const AfterDelay = 2;
60 |
61 | /**
62 | * When the editor lost focus.
63 | */
64 | export const FocusOut = 3;
65 | }
66 |
67 | export type TextDocumentSaveReason = 1 | 2 | 3;
68 | ```
69 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/textDocument/willSaveWaitUntil.md:
--------------------------------------------------------------------------------
1 | #### WillSaveWaitUntilTextDocument Request (:leftwards_arrow_with_hook:)
2 |
3 | The document will save request is sent from the client to the server before the document is actually saved. The request can return an array of TextEdits which will be applied to the text document before it is saved. Please note that clients might drop results if computing the text edits took too long or if a server constantly fails on this request. This is done to keep the save fast and reliable. If a server has registered for open / close events clients should ensure that the document is open before a `willSaveWaitUntil` notification is sent since clients can't change the content of a file without ownership transferal.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.willSaveWaitUntil`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/willSaveWaitUntil` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.willSaveWaitUntil`
13 | * property type: `boolean`
14 |
15 | The capability indicates that the server is interested in `textDocument/willSaveWaitUntil` requests.
16 |
17 | _Registration Options_: `TextDocumentRegistrationOptions`
18 |
19 | _Request_:
20 | * method: `textDocument/willSaveWaitUntil`
21 | * params: `WillSaveTextDocumentParams`
22 |
23 | _Response_:
24 | * result: [`TextEdit[]`](#textEdit) \| `null`
25 | * error: code and message set in case an exception happens during the `textDocument/willSaveWaitUntil` request.
26 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/command.md:
--------------------------------------------------------------------------------
1 | #### Command
2 |
3 | Represents a reference to a command. Provides a title which will be used to represent a command in the UI. Commands are identified by a string identifier. The recommended way to handle commands is to implement their execution on the server side if the client and server provides the corresponding capabilities. Alternatively the tool extension code could handle the command. The protocol currently doesn't specify a set of well-known commands.
4 |
5 | ```typescript
6 | interface Command {
7 | /**
8 | * Title of the command, like `save`.
9 | */
10 | title: string;
11 | /**
12 | * The identifier of the actual command handler.
13 | */
14 | command: string;
15 | /**
16 | * Arguments that the command handler should be
17 | * invoked with.
18 | */
19 | arguments?: LSPAny[];
20 | }
21 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/documentFilter.md:
--------------------------------------------------------------------------------
1 | #### DocumentFilter
2 |
3 | A document filter denotes a document through properties like `language`, `scheme` or `pattern`. An example is a filter that applies to TypeScript files on disk. Another example is a filter that applies to JSON files with name `package.json`:
4 | ```typescript
5 | { language: 'typescript', scheme: 'file' }
6 | { language: 'json', pattern: '**/package.json' }
7 | ```
8 |
9 | ```typescript
10 | export interface DocumentFilter {
11 | /**
12 | * A language id, like `typescript`.
13 | */
14 | language?: string;
15 |
16 | /**
17 | * A Uri scheme, like `file` or `untitled`.
18 | */
19 | scheme?: string;
20 |
21 | /**
22 | * A glob pattern, like `*.{ts,js}`.
23 | *
24 | * Glob patterns can have the following syntax:
25 | * - `*` to match zero or more characters in a path segment
26 | * - `?` to match on one character in a path segment
27 | * - `**` to match any number of path segments, including none
28 | * - `{}` to group sub patterns into an OR expression. (e.g. `**/*.{ts,js}`
29 | * matches all TypeScript and JavaScript files)
30 | * - `[]` to declare a range of characters to match in a path segment
31 | * (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
32 | * - `[!...]` to negate a range of characters to match in a path segment
33 | * (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but
34 | * not `example.0`)
35 | */
36 | pattern?: string;
37 | }
38 | ```
39 |
40 | Please note that for a document filter to be valid at least one of the properties for `language`, `scheme`, or `pattern` must be set. To keep the type definition simple all properties are marked as optional.
41 |
42 | A document selector is the combination of one or more document filters.
43 |
44 |
45 |
46 | ```typescript
47 | export type DocumentSelector = DocumentFilter[];
48 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/location.md:
--------------------------------------------------------------------------------
1 | #### Location
2 |
3 | Represents a location inside a resource, such as a line inside a text file.
4 | ```typescript
5 | interface Location {
6 | uri: DocumentUri;
7 | range: Range;
8 | }
9 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/locationLink.md:
--------------------------------------------------------------------------------
1 | #### LocationLink
2 |
3 | Represents a link between a source and a target location.
4 |
5 | ```typescript
6 | interface LocationLink {
7 |
8 | /**
9 | * Span of the origin of this link.
10 | *
11 | * Used as the underlined span for mouse interaction. Defaults to the word
12 | * range at the mouse position.
13 | */
14 | originSelectionRange?: Range;
15 |
16 | /**
17 | * The target resource identifier of this link.
18 | */
19 | targetUri: DocumentUri;
20 |
21 | /**
22 | * The full target range of this link. If the target for example is a symbol
23 | * then target range is the range enclosing this symbol not including
24 | * leading/trailing whitespace but everything else like comments. This
25 | * information is typically used to highlight the range in the editor.
26 | */
27 | targetRange: Range;
28 |
29 | /**
30 | * The range that should be selected and revealed when this link is being
31 | * followed, e.g the name of a function. Must be contained by the
32 | * `targetRange`. See also `DocumentSymbol#range`
33 | */
34 | targetSelectionRange: Range;
35 | }
36 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/partialResultParams.md:
--------------------------------------------------------------------------------
1 | #### PartialResultParams
2 |
3 | A parameter literal used to pass a partial result token.
4 |
5 | ```typescript
6 | export interface PartialResultParams {
7 | /**
8 | * An optional token that a server can use to report partial results (e.g.
9 | * streaming) to the client.
10 | */
11 | partialResultToken?: ProgressToken;
12 | }
13 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/partialResults.md:
--------------------------------------------------------------------------------
1 | #### Partial Result Progress
2 |
3 | > *Since version 3.15.0*
4 |
5 | Partial results are also reported using the generic [`$/progress`](#progress) notification. The value payload of a partial result progress notification is in most cases the same as the final result. For example the `workspace/symbol` request has `SymbolInformation[]` \| `WorkspaceSymbol[]` as the result type. Partial result is therefore also of type `SymbolInformation[]` \| `WorkspaceSymbol[]`. Whether a client accepts partial result notifications for a request is signaled by adding a `partialResultToken` to the request parameter. For example, a `textDocument/reference` request that supports both work done and partial result progress might look like this:
6 |
7 | ```json
8 | {
9 | "textDocument": {
10 | "uri": "file:///folder/file.ts"
11 | },
12 | "position": {
13 | "line": 9,
14 | "character": 5
15 | },
16 | "context": {
17 | "includeDeclaration": true
18 | },
19 | // The token used to report work done progress.
20 | "workDoneToken": "1d546990-40a3-4b77-b134-46622995f6ae",
21 | // The token used to report partial result progress.
22 | "partialResultToken": "5f6f349e-4f81-4a3b-afff-ee04bff96804"
23 | }
24 | ```
25 |
26 | The `partialResultToken` is then used to report partial results for the find references request.
27 |
28 | If a server reports partial result via a corresponding `$/progress`, the whole result must be reported using n `$/progress` notifications. Each of the n `$/progress` notification appends items to the result. The final response has to be empty in terms of result values. This avoids confusion about how the final result should be interpreted, e.g. as another partial result or as a replacing result.
29 |
30 | If the response errors the provided partial results should be treated as follows:
31 |
32 | - the `code` equals to `RequestCancelled`: the client is free to use the provided results but should make clear that the request got canceled and may be incomplete.
33 | - in all other cases the provided partial results shouldn't be used.
34 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/position.md:
--------------------------------------------------------------------------------
1 | #### Position
2 |
3 | Position in a text document expressed as zero-based line and zero-based character offset. A position is between two characters like an 'insert' cursor in an editor. Special values like for example `-1` to denote the end of a line are not supported.
4 |
5 | ```typescript
6 | interface Position {
7 | /**
8 | * Line position in a document (zero-based).
9 | */
10 | line: uinteger;
11 |
12 | /**
13 | * Character offset on a line in a document (zero-based). The meaning of this
14 | * offset is determined by the negotiated `PositionEncodingKind`.
15 | *
16 | * If the character value is greater than the line length it defaults back
17 | * to the line length.
18 | */
19 | character: uinteger;
20 | }
21 | ```
22 |
23 | When describing positions the protocol needs to specify how offsets (specifically character offsets) should be interpreted.
24 | The corresponding `PositionEncodingKind` is negotiated between the client and the server during initialization.
25 |
26 |
27 |
28 |
29 | ```typescript
30 | /**
31 | * A type indicating how positions are encoded,
32 | * specifically what column offsets mean.
33 | *
34 | * @since 3.17.0
35 | */
36 | export type PositionEncodingKind = string;
37 |
38 | /**
39 | * A set of predefined position encoding kinds.
40 | *
41 | * @since 3.17.0
42 | */
43 | export namespace PositionEncodingKind {
44 |
45 | /**
46 | * Character offsets count UTF-8 code units (e.g bytes).
47 | */
48 | export const UTF8: PositionEncodingKind = 'utf-8';
49 |
50 | /**
51 | * Character offsets count UTF-16 code units.
52 | *
53 | * This is the default and must always be supported
54 | * by servers
55 | */
56 | export const UTF16: PositionEncodingKind = 'utf-16';
57 |
58 | /**
59 | * Character offsets count UTF-32 code units.
60 | *
61 | * Implementation note: these are the same as Unicode code points,
62 | * so this `PositionEncodingKind` may also be used for an
63 | * encoding-agnostic representation of character offsets.
64 | */
65 | export const UTF32: PositionEncodingKind = 'utf-32';
66 | }
67 | ```
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/range.md:
--------------------------------------------------------------------------------
1 | #### Range
2 |
3 | A range in a text document expressed as (zero-based) start and end positions. A range is comparable to a selection in an editor. Therefore, the end position is exclusive. If you want to specify a range that contains a line including the line ending character(s) then use an end position denoting the start of the next line. For example:
4 | ```typescript
5 | {
6 | start: { line: 5, character: 23 },
7 | end : { line: 6, character: 0 }
8 | }
9 | ```
10 |
11 | ```typescript
12 | interface Range {
13 | /**
14 | * The range's start position.
15 | */
16 | start: Position;
17 |
18 | /**
19 | * The range's end position.
20 | */
21 | end: Position;
22 | }
23 | ```
24 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/regexp.md:
--------------------------------------------------------------------------------
1 | #### Regular Expressions
2 |
3 | Regular expression are a powerful tool and there are actual use cases for them in the language server protocol. However the downside with them is that almost every programming language has its own set of regular expression features so the specification can not simply refer to them as a regular expression. So the LSP uses a two step approach to support regular expressions:
4 |
5 | * the client will announce which regular expression engine it will use. This will allow server that are written for a very specific client make full use of the regular expression capabilities of the client
6 | * the specification will define a set of regular expression features that should be supported by a client. Instead of writing a new specification LSP will refer to the [ECMAScript Regular Expression specification](https://tc39.es/ecma262/#sec-regexp-regular-expression-objects) and remove features from it that are not necessary in the context of LSP or hard to implement for other clients.
7 |
8 | _Client Capability_:
9 |
10 | The following client capability is used to announce a client's regular expression engine
11 |
12 | * property path (optional): `general.regularExpressions`
13 | * property type: `RegularExpressionsClientCapabilities` defined as follows:
14 |
15 | ```typescript
16 | /**
17 | * Client capabilities specific to regular expressions.
18 | */
19 | export interface RegularExpressionsClientCapabilities {
20 | /**
21 | * The engine's name.
22 | */
23 | engine: string;
24 |
25 | /**
26 | * The engine's version.
27 | */
28 | version?: string;
29 | }
30 | ```
31 |
32 | The following table lists the well known engine values. Please note that the table should be driven by the community which integrates LSP into existing clients. It is not the goal of the spec to list all available regular expression engines.
33 |
34 | Engine | Version | Documentation
35 | ------- | ------- | -------------
36 | ECMAScript | `ES2020` | [ECMAScript 2020](https://tc39.es/ecma262/#sec-regexp-regular-expression-objects) & [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
37 |
38 | _Regular Expression Subset_:
39 |
40 | The following features from the [ECMAScript 2020](https://tc39.es/ecma262/#sec-regexp-regular-expression-objects) regular expression specification are NOT mandatory for a client:
41 |
42 | - *Assertions*: Lookahead assertion, Negative lookahead assertion, lookbehind assertion, negative lookbehind assertion.
43 | - *Character classes*: matching control characters using caret notation (e.g. `\cX`) and matching UTF-16 code units (e.g. `\uhhhh`).
44 | - *Group and ranges*: named capturing groups.
45 | - *Unicode property escapes*: none of the features needs to be supported.
46 |
47 | The only regular expression flag that a client needs to support is 'i' to specify a case insensitive search.
48 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textDocumentEdit.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentEdit
2 |
3 | > New in version 3.16: support for `AnnotatedTextEdit`. The support is guarded by the client capability `workspace.workspaceEdit.changeAnnotationSupport`. If a client doesn't signal the capability, servers shouldn't send `AnnotatedTextEdit` literals back to the client.
4 |
5 | Describes textual changes on a single text document. The text document is referred to as a `OptionalVersionedTextDocumentIdentifier` to allow clients to check the text document version before an edit is applied. A `TextDocumentEdit` describes all changes on a version Si and after they are applied move the document to version Si+1. So the creator of a `TextDocumentEdit` doesn't need to sort the array of edits or do any kind of ordering. However the edits must be non overlapping.
6 |
7 | ```typescript
8 | export interface TextDocumentEdit {
9 | /**
10 | * The text document to change.
11 | */
12 | textDocument: OptionalVersionedTextDocumentIdentifier;
13 |
14 | /**
15 | * The edits to be applied.
16 | *
17 | * @since 3.16.0 - support for AnnotatedTextEdit. This is guarded by the
18 | * client capability `workspace.workspaceEdit.changeAnnotationSupport`
19 | */
20 | edits: (TextEdit | AnnotatedTextEdit)[];
21 | }
22 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textDocumentIdentifier.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentIdentifier
2 |
3 | Text documents are identified using a URI. On the protocol level, URIs are passed as strings. The corresponding JSON structure looks like this:
4 | ```typescript
5 | interface TextDocumentIdentifier {
6 | /**
7 | * The text document's URI.
8 | */
9 | uri: DocumentUri;
10 | }
11 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textDocumentItem.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentItem
2 |
3 | An item to transfer a text document from the client to the server.
4 |
5 | ```typescript
6 | interface TextDocumentItem {
7 | /**
8 | * The text document's URI.
9 | */
10 | uri: DocumentUri;
11 |
12 | /**
13 | * The text document's language identifier.
14 | */
15 | languageId: string;
16 |
17 | /**
18 | * The version number of this document (it will increase after each
19 | * change, including undo/redo).
20 | */
21 | version: integer;
22 |
23 | /**
24 | * The content of the opened text document.
25 | */
26 | text: string;
27 | }
28 | ```
29 |
30 | Text documents have a language identifier to identify a document on the server side when it handles more than one language to avoid re-interpreting the file extension. If a document refers to one of the programming languages listed below it is recommended that clients use those ids.
31 |
32 | Language | Identifier
33 | -------- | ----------
34 | ABAP | `abap`
35 | Windows Bat | `bat`
36 | BibTeX | `bibtex`
37 | Clojure | `clojure`
38 | Coffeescript | `coffeescript`
39 | C | `c`
40 | C++ | `cpp`
41 | C# | `csharp`
42 | CSS | `css`
43 | Diff | `diff`
44 | Dart | `dart`
45 | Dockerfile | `dockerfile`
46 | Elixir | `elixir`
47 | Erlang | `erlang`
48 | F# | `fsharp`
49 | Git | `git-commit` and `git-rebase`
50 | Go | `go`
51 | Groovy | `groovy`
52 | Handlebars | `handlebars`
53 | HTML | `html`
54 | Ini | `ini`
55 | Java | `java`
56 | JavaScript | `javascript`
57 | JavaScript React | `javascriptreact`
58 | JSON | `json`
59 | LaTeX | `latex`
60 | Less | `less`
61 | Lua | `lua`
62 | Makefile | `makefile`
63 | Markdown | `markdown`
64 | Objective-C | `objective-c`
65 | Objective-C++ | `objective-cpp`
66 | Perl | `perl`
67 | Perl 6 | `perl6`
68 | PHP | `php`
69 | Powershell | `powershell`
70 | Pug | `jade`
71 | Python | `python`
72 | R | `r`
73 | Razor (cshtml) | `razor`
74 | Ruby | `ruby`
75 | Rust | `rust`
76 | SCSS | `scss` (syntax using curly brackets), `sass` (indented syntax)
77 | Scala | `scala`
78 | ShaderLab | `shaderlab`
79 | Shell Script (Bash) | `shellscript`
80 | SQL | `sql`
81 | Swift | `swift`
82 | TypeScript | `typescript`
83 | TypeScript React| `typescriptreact`
84 | TeX | `tex`
85 | Visual Basic | `vb`
86 | XML | `xml`
87 | XSL | `xsl`
88 | YAML | `yaml`
89 | {: .table .table-bordered .table-responsive}
90 |
91 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textDocumentPositionParams.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentPositionParams
2 |
3 | Was `TextDocumentPosition` in 1.0 with inlined parameters.
4 |
5 | A parameter literal used in requests to pass a text document and a position inside that document. It is up to the client to decide how a selection is converted into a position when issuing a request for a text document. The client can for example honor or ignore the selection direction to make LSP request consistent with features implemented internally.
6 |
7 | ```typescript
8 | interface TextDocumentPositionParams {
9 | /**
10 | * The text document.
11 | */
12 | textDocument: TextDocumentIdentifier;
13 |
14 | /**
15 | * The position inside the text document.
16 | */
17 | position: Position;
18 | }
19 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textDocuments.md:
--------------------------------------------------------------------------------
1 | #### Text Documents
2 |
3 | The current protocol is tailored for textual documents whose content can be represented as a string. There is currently no support for binary documents. A position inside a document (see Position definition below) is expressed as a zero-based line and character offset.
4 |
5 | > New in 3.17
6 |
7 | Prior to 3.17 the offsets were always based on a UTF-16 string representation. So in a string of the form `a𐐀b` the character offset of the character `a` is 0, the character offset of `𐐀` is 1 and the character offset of b is 3 since `𐐀` is represented using two code units in UTF-16. Since 3.17 clients and servers can agree on a different string encoding representation (e.g. UTF-8). The client announces it's supported encoding via the client capability [`general.positionEncodings`](#clientCapabilities). The value is an array of position encodings the client supports, with decreasing preference (e.g. the encoding at index `0` is the most preferred one). To stay backwards compatible the only mandatory encoding is UTF-16 represented via the string `utf-16`. The server can pick one of the encodings offered by the client and signals that encoding back to the client via the initialize result's property [`capabilities.positionEncoding`](#serverCapabilities). If the string value `utf-16` is missing from the client's capability `general.positionEncodings` servers can safely assume that the client supports UTF-16. If the server omits the position encoding in its initialize result the encoding defaults to the string value `utf-16`. Implementation considerations: since the conversion from one encoding into another requires the content of the file / line the conversion is best done where the file is read which is usually on the server side.
8 |
9 | To ensure that both client and server split the string into the same line representation the protocol specifies the following end-of-line sequences: '\n', '\r\n' and '\r'. Positions are line end character agnostic. So you can not specify a position that denotes `\r|\n` or `\n|` where `|` represents the character offset.
10 |
11 | ```typescript
12 | export const EOL: string[] = ['\n', '\r\n', '\r'];
13 | ```
14 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textEdit.md:
--------------------------------------------------------------------------------
1 | #### TextEdit & AnnotatedTextEdit
2 |
3 | > New in version 3.16: Support for `AnnotatedTextEdit`.
4 |
5 | A textual edit applicable to a text document.
6 |
7 | ```typescript
8 | interface TextEdit {
9 | /**
10 | * The range of the text document to be manipulated. To insert
11 | * text into a document create a range where start === end.
12 | */
13 | range: Range;
14 |
15 | /**
16 | * The string to be inserted. For delete operations use an
17 | * empty string.
18 | */
19 | newText: string;
20 | }
21 | ```
22 | Since 3.16.0 there is also the concept of an annotated text edit which supports to add an annotation to a text edit. The annotation can add information describing the change to the text edit.
23 |
24 |
25 |
26 | ```typescript
27 | /**
28 | * Additional information that describes document changes.
29 | *
30 | * @since 3.16.0
31 | */
32 | export interface ChangeAnnotation {
33 | /**
34 | * A human-readable string describing the actual change. The string
35 | * is rendered prominent in the user interface.
36 | */
37 | label: string;
38 |
39 | /**
40 | * A flag which indicates that user confirmation is needed
41 | * before applying the change.
42 | */
43 | needsConfirmation?: boolean;
44 |
45 | /**
46 | * A human-readable string which is rendered less prominent in
47 | * the user interface.
48 | */
49 | description?: string;
50 | }
51 | ```
52 |
53 | Usually clients provide options to group the changes along the annotations they are associated with. To support this in the protocol an edit or resource operation refers to a change annotation using an identifier and not the change annotation literal directly. This allows servers to use the identical annotation across multiple edits or resource operations which then allows clients to group the operations under that change annotation. The actual change annotations together with their identifiers are managed by the workspace edit via the new property `changeAnnotations`.
54 |
55 |
56 |
57 | ```typescript
58 | /**
59 | * An identifier referring to a change annotation managed by a workspace
60 | * edit.
61 | *
62 | * @since 3.16.0.
63 | */
64 | export type ChangeAnnotationIdentifier = string;
65 | ```
66 |
67 |
68 |
69 | ```typescript
70 | /**
71 | * A special text edit with an additional change annotation.
72 | *
73 | * @since 3.16.0.
74 | */
75 | export interface AnnotatedTextEdit extends TextEdit {
76 | /**
77 | * The actual annotation identifier.
78 | */
79 | annotationId: ChangeAnnotationIdentifier;
80 | }
81 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/textEditArray.md:
--------------------------------------------------------------------------------
1 | #### TextEdit[]
2 |
3 | Complex text manipulations are described with an array of `TextEdit`'s or `AnnotatedTextEdit`'s, representing a single change to the document.
4 |
5 | All text edits ranges refer to positions in the document they are computed on. They therefore move a document from state S1 to S2 without describing any intermediate state. Text edits ranges must never overlap, that means no part of the original document must be manipulated by more than one edit. However, it is possible that multiple edits have the same start position: multiple inserts, or any number of inserts followed by a single remove or replace edit. If multiple inserts have the same position, the order in the array defines the order in which the inserted strings appear in the resulting text.
6 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/types/versionedTextDocumentIdentifier.md:
--------------------------------------------------------------------------------
1 | #### VersionedTextDocumentIdentifier
2 |
3 | An identifier to denote a specific version of a text document. This information usually flows from the client to the server.
4 |
5 | ```typescript
6 | interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {
7 | /**
8 | * The version number of this document.
9 | *
10 | * The version number of a document will increase after each change,
11 | * including undo/redo. The number doesn't need to be consecutive.
12 | */
13 | version: integer;
14 | }
15 | ```
16 |
17 | An identifier which optionally denotes a specific version of a text document. This information usually flows from the server to the client.
18 |
19 |
20 |
21 | ```typescript
22 | interface OptionalVersionedTextDocumentIdentifier extends TextDocumentIdentifier {
23 | /**
24 | * The version number of this document. If an optional versioned text document
25 | * identifier is sent from the server to the client and the file is not
26 | * open in the editor (the server has not received an open notification
27 | * before) the server can send `null` to indicate that the version is
28 | * known and the content on disk is the master (as specified with document
29 | * content ownership).
30 | *
31 | * The version number of a document will increase after each change,
32 | * including undo/redo. The number doesn't need to be consecutive.
33 | */
34 | version: integer | null;
35 | }
36 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/window/showDocument.md:
--------------------------------------------------------------------------------
1 | #### Show Document Request (:arrow_right_hook:)
2 |
3 | > New in version 3.16.0
4 |
5 | The show document request is sent from a server to a client to ask the client to display a particular resource referenced by a URI in the user interface.
6 |
7 | _Client Capability_:
8 | * property path (optional): `window.showDocument`
9 | * property type: `ShowDocumentClientCapabilities` defined as follows:
10 |
11 | ```typescript
12 | /**
13 | * Client capabilities for the show document request.
14 | *
15 | * @since 3.16.0
16 | */
17 | export interface ShowDocumentClientCapabilities {
18 | /**
19 | * The client has support for the show document
20 | * request.
21 | */
22 | support: boolean;
23 | }
24 | ```
25 |
26 | _Request_:
27 | * method: 'window/showDocument'
28 | * params: `ShowDocumentParams` defined as follows:
29 |
30 |
31 |
32 | ```typescript
33 | /**
34 | * Params to show a resource.
35 | *
36 | * @since 3.16.0
37 | */
38 | export interface ShowDocumentParams {
39 | /**
40 | * The uri to show.
41 | */
42 | uri: URI;
43 |
44 | /**
45 | * Indicates to show the resource in an external program.
46 | * To show, for example, `https://code.visualstudio.com/`
47 | * in the default WEB browser set `external` to `true`.
48 | */
49 | external?: boolean;
50 |
51 | /**
52 | * An optional property to indicate whether the editor
53 | * showing the document should take focus or not.
54 | * Clients might ignore this property if an external
55 | * program is started.
56 | */
57 | takeFocus?: boolean;
58 |
59 | /**
60 | * An optional selection range if the document is a text
61 | * document. Clients might ignore the property if an
62 | * external program is started or the file is not a text
63 | * file.
64 | */
65 | selection?: Range;
66 | }
67 | ```
68 |
69 | _Response_:
70 |
71 | * result: `ShowDocumentResult` defined as follows:
72 |
73 |
74 |
75 | ```typescript
76 | /**
77 | * The result of an show document request.
78 | *
79 | * @since 3.16.0
80 | */
81 | export interface ShowDocumentResult {
82 | /**
83 | * A boolean indicating if the show was successful.
84 | */
85 | success: boolean;
86 | }
87 | ```
88 | * error: code and message set in case an exception happens during showing a document.
89 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/window/workDoneProgressCancel.md:
--------------------------------------------------------------------------------
1 | #### Cancel a Work Done Progress (:arrow_right:)
2 |
3 | The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress initiated on the server side using the `window/workDoneProgress/create`. The progress need not be marked as `cancellable` to be cancelled and a client may cancel a progress for any number of reasons: in case of error, reloading a workspace etc.
4 |
5 | _Notification_:
6 |
7 | * method: 'window/workDoneProgress/cancel'
8 | * params: `WorkDoneProgressCancelParams` defined as follows:
9 |
10 | ```typescript
11 | export interface WorkDoneProgressCancelParams {
12 | /**
13 | * The token to be used to report progress.
14 | */
15 | token: ProgressToken;
16 | }
17 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/window/workDoneProgressCreate.md:
--------------------------------------------------------------------------------
1 | #### Create Work Done Progress (:arrow_right_hook:)
2 |
3 | The `window/workDoneProgress/create` request is sent from the server to the client to ask the client to create a work done progress.
4 |
5 | _Client Capability_:
6 | * property name (optional): `window.workDoneProgress`
7 | * property type: `boolean`
8 |
9 | _Request_:
10 |
11 | * method: 'window/workDoneProgress/create'
12 | * params: `WorkDoneProgressCreateParams` defined as follows:
13 |
14 | ```typescript
15 | export interface WorkDoneProgressCreateParams {
16 | /**
17 | * The token to be used to report progress.
18 | */
19 | token: ProgressToken;
20 | }
21 | ```
22 |
23 | _Response_:
24 |
25 | * result: void
26 | * error: code and message set in case an exception happens during the 'window/workDoneProgress/create' request. In case an error occurs a server must not send any progress notification using the token provided in the `WorkDoneProgressCreateParams`.
27 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/applyEdit.md:
--------------------------------------------------------------------------------
1 | #### Applies a WorkspaceEdit (:arrow_right_hook:)
2 |
3 | The `workspace/applyEdit` request is sent from the server to the client to modify resource on the client side.
4 |
5 | _Client Capability_:
6 | * property path (optional): `workspace.applyEdit`
7 | * property type: `boolean`
8 |
9 | See also the [WorkspaceEditClientCapabilities](#workspaceEditClientCapabilities) for the supported capabilities of a workspace edit.
10 |
11 | _Request_:
12 | * method: 'workspace/applyEdit'
13 | * params: `ApplyWorkspaceEditParams` defined as follows:
14 |
15 |
16 |
17 | ```typescript
18 | export interface ApplyWorkspaceEditParams {
19 | /**
20 | * An optional label of the workspace edit. This label is
21 | * presented in the user interface for example on an undo
22 | * stack to undo the workspace edit.
23 | */
24 | label?: string;
25 |
26 | /**
27 | * The edits to apply.
28 | */
29 | edit: WorkspaceEdit;
30 | }
31 | ```
32 |
33 | _Response_:
34 | * result: `ApplyWorkspaceEditResult` defined as follows:
35 |
36 |
37 |
38 | ```typescript
39 | export interface ApplyWorkspaceEditResult {
40 | /**
41 | * Indicates whether the edit was applied or not.
42 | */
43 | applied: boolean;
44 |
45 | /**
46 | * An optional textual description for why the edit was not applied.
47 | * This may be used by the server for diagnostic logging or to provide
48 | * a suitable error for a request that triggered the edit.
49 | */
50 | failureReason?: string;
51 |
52 | /**
53 | * Depending on the client's failure handling strategy `failedChange`
54 | * might contain the index of the change that failed. This property is
55 | * only available if the client signals a `failureHandling` strategy
56 | * in its client capabilities.
57 | */
58 | failedChange?: uinteger;
59 | }
60 | ```
61 | * error: code and message set in case an exception happens during the request.
62 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/configuration.md:
--------------------------------------------------------------------------------
1 | #### Configuration Request (:arrow_right_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The `workspace/configuration` request is sent from the server to the client to fetch configuration settings from the client. The request can fetch several configuration settings in one roundtrip. The order of the returned configuration settings correspond to the order of the passed `ConfigurationItems` (e.g. the first item in the response is the result for the first configuration item in the params).
6 |
7 | A `ConfigurationItem` consists of the configuration section to ask for and an additional scope URI. The configuration section asked for is defined by the server and doesn't necessarily need to correspond to the configuration store used by the client. So a server might ask for a configuration `cpp.formatterOptions` but the client stores the configuration in an XML store layout differently. It is up to the client to do the necessary conversion. If a scope URI is provided the client should return the setting scoped to the provided resource. If the client for example uses [EditorConfig](http://editorconfig.org/) to manage its settings the configuration should be returned for the passed resource URI. If the client can't provide a configuration setting for a given scope then `null` needs to be present in the returned array.
8 |
9 | This pull model replaces the old push model were the client signaled configuration change via an event. If the server still needs to react to configuration changes (since the server caches the result of `workspace/configuration` requests) the server should register for an empty configuration change using the following registration pattern:
10 |
11 | ```typescript
12 | connection.client.register(DidChangeConfigurationNotification.type, undefined);
13 | ```
14 |
15 | _Client Capability_:
16 | * property path (optional): `workspace.configuration`
17 | * property type: `boolean`
18 |
19 | _Request_:
20 | * method: 'workspace/configuration'
21 | * params: `ConfigurationParams` defined as follows
22 |
23 |
27 |
28 | ```typescript
29 | interface DidChangeConfigurationParams {
30 | /**
31 | * The actual changed settings
32 | */
33 | settings: LSPAny;
34 | }
35 | ```
36 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/didChangeWorkspaceFolders.md:
--------------------------------------------------------------------------------
1 | #### DidChangeWorkspaceFolders Notification (:arrow_right:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server to inform the server about workspace folder configuration changes. A server can register for this notification by using either the _server capability_ `workspace.workspaceFolders.changeNotifications` or by using the dynamic capability registration mechanism. To dynamically register for the `workspace/didChangeWorkspaceFolders` send a `client/registerCapability` request from the server to the client. The registration parameter must have a `registrations` item of the following form, where `id` is a unique id used to unregister the capability (the example uses a UUID):
6 | ```ts
7 | {
8 | id: "28c6150c-bd7b-11e7-abc4-cec278b6b50a",
9 | method: "workspace/didChangeWorkspaceFolders"
10 | }
11 | ```
12 |
13 | _Notification_:
14 | * method: 'workspace/didChangeWorkspaceFolders'
15 | * params: `DidChangeWorkspaceFoldersParams` defined as follows:
16 |
17 |
29 |
30 | ```typescript
31 | /**
32 | * The workspace folder change event.
33 | */
34 | export interface WorkspaceFoldersChangeEvent {
35 | /**
36 | * The array of added workspace folders
37 | */
38 | added: WorkspaceFolder[];
39 |
40 | /**
41 | * The array of the removed workspace folders
42 | */
43 | removed: WorkspaceFolder[];
44 | }
45 | ```
46 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/didCreateFiles.md:
--------------------------------------------------------------------------------
1 | #### DidCreateFiles Notification (:arrow_right:)
2 |
3 | The did create files notification is sent from the client to the server when files were created from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didCreate`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didCreateFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didCreate`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didCreateFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didCreateFiles'
19 | * params: `CreateFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/didDeleteFiles.md:
--------------------------------------------------------------------------------
1 | #### DidDeleteFiles Notification (:arrow_right:)
2 |
3 | The did delete files notification is sent from the client to the server when files were deleted from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didDelete`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didDeleteFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didDelete`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didDeleteFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didDeleteFiles'
19 | * params: `DeleteFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/didRenameFiles.md:
--------------------------------------------------------------------------------
1 | #### DidRenameFiles Notification (:arrow_right:)
2 |
3 | The did rename files notification is sent from the client to the server when files were renamed from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didRename`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didRenameFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didRename`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didRenameFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didRenameFiles'
19 | * params: `RenameFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/executeCommand.md:
--------------------------------------------------------------------------------
1 | #### Execute a command (:leftwards_arrow_with_hook:)
2 |
3 | The `workspace/executeCommand` request is sent from the client to the server to trigger command execution on the server. In most cases the server creates a `WorkspaceEdit` structure and applies the changes to the workspace using the request `workspace/applyEdit` which is sent from the server to the client.
4 |
5 | _Client Capability_:
6 | * property path (optional): `workspace.executeCommand`
7 | * property type: `ExecuteCommandClientCapabilities` defined as follows:
8 |
9 |
53 |
54 | ```typescript
55 | export interface ExecuteCommandParams extends WorkDoneProgressParams {
56 |
57 | /**
58 | * The identifier of the actual command handler.
59 | */
60 | command: string;
61 | /**
62 | * Arguments that the command should be invoked with.
63 | */
64 | arguments?: LSPAny[];
65 | }
66 | ```
67 |
68 | The arguments are typically specified when a command is returned from the server to the client. Example requests that return a command are `textDocument/codeAction` or `textDocument/codeLens`.
69 |
70 | _Response_:
71 | * result: `LSPAny`
72 | * error: code and message set in case an exception happens during the request.
73 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/willDeleteFiles.md:
--------------------------------------------------------------------------------
1 | #### WillDeleteFiles Request (:leftwards_arrow_with_hook:)
2 |
3 | The will delete files request is sent from the client to the server before files are actually deleted as long as the deletion is triggered from within the client either by a user action or by applying a workspace edit. The request can return a WorkspaceEdit which will be applied to workspace before the files are deleted. Please note that clients might drop results if computing the edit took too long or if a server constantly fails on this request. This is done to keep deletes fast and reliable.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.willDelete`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/willDeleteFiles` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.willDelete`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/willDeleteFiles` requests.
16 |
17 | _Registration Options_: none
18 |
19 | _Request_:
20 | * method: `workspace/willDeleteFiles`
21 | * params: `DeleteFilesParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters sent in notifications/requests for user-initiated deletes
28 | * of files.
29 | *
30 | * @since 3.16.0
31 | */
32 | export interface DeleteFilesParams {
33 |
34 | /**
35 | * An array of all files/folders deleted in this operation.
36 | */
37 | files: FileDelete[];
38 | }
39 | ```
40 |
41 |
42 |
43 | ```typescript
44 | /**
45 | * Represents information on a file/folder delete.
46 | *
47 | * @since 3.16.0
48 | */
49 | export interface FileDelete {
50 |
51 | /**
52 | * A file:// URI for the location of the file/folder being deleted.
53 | */
54 | uri: string;
55 | }
56 | ```
57 |
58 | _Response_:
59 | * result:`WorkspaceEdit` \| `null`
60 | * error: code and message set in case an exception happens during the `workspace/willDeleteFiles` request.
61 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/willRenameFiles.md:
--------------------------------------------------------------------------------
1 | #### WillRenameFiles Request (:leftwards_arrow_with_hook:)
2 |
3 | The will rename files request is sent from the client to the server before files are actually renamed as long as the rename is triggered from within the client either by a user action or by applying a workspace edit. The request can return a WorkspaceEdit which will be applied to workspace before the files are renamed. Please note that clients might drop results if computing the edit took too long or if a server constantly fails on this request. This is done to keep renames fast and reliable.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.willRename`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/willRenameFiles` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.willRename`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/willRenameFiles` requests.
16 |
17 | _Registration Options_: none
18 |
19 | _Request_:
20 | * method: 'workspace/willRenameFiles'
21 | * params: `RenameFilesParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters sent in notifications/requests for user-initiated renames
28 | * of files.
29 | *
30 | * @since 3.16.0
31 | */
32 | export interface RenameFilesParams {
33 |
34 | /**
35 | * An array of all files/folders renamed in this operation. When a folder
36 | * is renamed, only the folder will be included, and not its children.
37 | */
38 | files: FileRename[];
39 | }
40 | ```
41 |
42 |
43 |
44 | ```typescript
45 | /**
46 | * Represents information on a file/folder rename.
47 | *
48 | * @since 3.16.0
49 | */
50 | export interface FileRename {
51 |
52 | /**
53 | * A file:// URI for the original location of the file/folder being renamed.
54 | */
55 | oldUri: string;
56 |
57 | /**
58 | * A file:// URI for the new location of the file/folder being renamed.
59 | */
60 | newUri: string;
61 | }
62 | ```
63 |
64 | _Response_:
65 | * result:`WorkspaceEdit` \| `null`
66 | * error: code and message set in case an exception happens during the `workspace/willRenameFiles` request.
67 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.17/workspace/workspaceFolders.md:
--------------------------------------------------------------------------------
1 | #### Workspace folders request (:arrow_right_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | Many tools support more than one root folder per workspace. Examples for this are VS Code's multi-root support, Atom's project folder support or Sublime's project support. If a client workspace consists of multiple roots then a server typically needs to know about this. The protocol up to now assumes one root folder which is announced to the server by the `rootUri` property of the `InitializeParams`. If the client supports workspace folders and announces them via the corresponding `workspaceFolders` client capability, the `InitializeParams` contain an additional property `workspaceFolders` with the configured workspace folders when the server starts.
6 |
7 | The `workspace/workspaceFolders` request is sent from the server to the client to fetch the current open list of workspace folders. Returns `null` in the response if only a single file is open in the tool. Returns an empty array if a workspace is open but no folders are configured.
8 |
9 | _Client Capability_:
10 | * property path (optional): `workspace.workspaceFolders`
11 | * property type: `boolean`
12 |
13 | _Server Capability_:
14 | * property path (optional): `workspace.workspaceFolders`
15 | * property type: `WorkspaceFoldersServerCapabilities` defined as follows:
16 |
17 |
18 |
19 | ```typescript
20 | export interface WorkspaceFoldersServerCapabilities {
21 | /**
22 | * The server has support for workspace folders
23 | */
24 | supported?: boolean;
25 |
26 | /**
27 | * Whether the server wants to receive workspace folder
28 | * change notifications.
29 | *
30 | * If a string is provided, the string is treated as an ID
31 | * under which the notification is registered on the client
32 | * side. The ID can be used to unregister for these events
33 | * using the `client/unregisterCapability` request.
34 | */
35 | changeNotifications?: string | boolean;
36 | }
37 | ```
38 |
39 | _Request_:
40 | * method: `workspace/workspaceFolders`
41 | * params: none
42 |
43 | _Response_:
44 | * result: `WorkspaceFolder[] | null` defined as follows:
45 |
46 |
47 |
48 | ```typescript
49 | export interface WorkspaceFolder {
50 | /**
51 | * The associated URI for this workspace folder.
52 | */
53 | uri: URI;
54 |
55 | /**
56 | * The name of the workspace folder. Used to refer to this
57 | * workspace folder in the user interface.
58 | */
59 | name: string;
60 | }
61 | ```
62 | * error: code and message set in case an exception happens during the 'workspace/workspaceFolders' request
63 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/language/colorPresentation.md:
--------------------------------------------------------------------------------
1 | #### Color Presentation Request (:leftwards_arrow_with_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The color presentation request is sent from the client to the server to obtain a list of presentations for a color value at a given location. Clients can use the result to
6 | - modify a color reference.
7 | - show a color picker and let users pick one of the presentations.
8 |
9 | This request has no special capabilities and registration options since it is sent as a resolve request for the `textDocument/documentColor` request.
10 |
11 | _Request_:
12 |
13 | * method: `textDocument/colorPresentation`
14 | * params: `ColorPresentationParams` defined as follows
15 |
16 |
17 |
18 | ```typescript
19 | interface ColorPresentationParams extends WorkDoneProgressParams,
20 | PartialResultParams {
21 | /**
22 | * The text document.
23 | */
24 | textDocument: TextDocumentIdentifier;
25 |
26 | /**
27 | * The color information to request presentations for.
28 | */
29 | color: Color;
30 |
31 | /**
32 | * The range where the color would be inserted. Serves as a context.
33 | */
34 | range: Range;
35 | }
36 | ```
37 |
38 | _Response_:
39 | * result: `ColorPresentation[]` defined as follows:
40 |
41 |
42 |
43 | ```typescript
44 | interface ColorPresentation {
45 | /**
46 | * The label of this color presentation. It will be shown on the color
47 | * picker header. By default, this is also the text that is inserted when
48 | * selecting this color presentation.
49 | */
50 | label: string;
51 | /**
52 | * An [edit](#TextEdit) which is applied to a document when selecting
53 | * this presentation for the color. When omitted, the
54 | * [label](#ColorPresentation.label) is used.
55 | */
56 | textEdit?: TextEdit;
57 | /**
58 | * An optional array of additional [text edits](#TextEdit) that are applied
59 | * when selecting this color presentation. Edits must not overlap with the
60 | * main [edit](#ColorPresentation.textEdit) nor with themselves.
61 | */
62 | additionalTextEdits?: TextEdit[];
63 | }
64 | ```
65 |
66 | * partial result: `ColorPresentation[]`
67 | * error: code and message set in case an exception happens during the 'textDocument/colorPresentation' request
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/language/declaration.md:
--------------------------------------------------------------------------------
1 | #### Go to Declaration Request (:leftwards_arrow_with_hook:)
2 |
3 | > *Since version 3.14.0*
4 |
5 | The go to declaration request is sent from the client to the server to resolve the declaration location of a symbol at a given text document position.
6 |
7 | The result type [`LocationLink`](#locationLink)[] got introduced with version 3.14.0 and depends on the corresponding client capability `textDocument.declaration.linkSupport`.
8 |
9 | _Client Capability_:
10 | * property name (optional): `textDocument.declaration`
11 | * property type: `DeclarationClientCapabilities` defined as follows:
12 |
13 |
14 |
15 | ```typescript
16 | export interface DeclarationClientCapabilities {
17 | /**
18 | * Whether declaration supports dynamic registration. If this is set to
19 | * `true`, the client supports the new `DeclarationRegistrationOptions`
20 | * return value for the corresponding server capability as well.
21 | */
22 | dynamicRegistration?: boolean;
23 |
24 | /**
25 | * The client supports additional metadata in the form of declaration links.
26 | */
27 | linkSupport?: boolean;
28 | }
29 | ```
30 |
31 | _Server Capability_:
32 | * property name (optional): `declarationProvider`
33 | * property type: `boolean | DeclarationOptions | DeclarationRegistrationOptions` where `DeclarationOptions` is defined as follows:
34 |
35 |
57 |
58 | ```typescript
59 | export interface DeclarationParams extends TextDocumentPositionParams,
60 | WorkDoneProgressParams, PartialResultParams {
61 | }
62 | ```
63 |
64 | _Response_:
65 | * result: [`Location`](#location) \| [`Location`](#location)[] \| [`LocationLink`](#locationLink)[] \|`null`
66 | * partial result: [`Location`](#location)[] \| [`LocationLink`](#locationLink)[]
67 | * error: code and message set in case an exception happens during the declaration request.
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/language/definition.md:
--------------------------------------------------------------------------------
1 | #### Go to Definition Request (:leftwards_arrow_with_hook:)
2 |
3 | The go to definition request is sent from the client to the server to resolve the definition location of a symbol at a given text document position.
4 |
5 | The result type [`LocationLink`](#locationLink)[] got introduced with version 3.14.0 and depends on the corresponding client capability `textDocument.definition.linkSupport`.
6 |
7 | _Client Capability_:
8 | * property name (optional): `textDocument.definition`
9 | * property type: `DefinitionClientCapabilities` defined as follows:
10 |
11 |
12 |
13 | ```typescript
14 | export interface DefinitionClientCapabilities {
15 | /**
16 | * Whether definition supports dynamic registration.
17 | */
18 | dynamicRegistration?: boolean;
19 |
20 | /**
21 | * The client supports additional metadata in the form of definition links.
22 | *
23 | * @since 3.14.0
24 | */
25 | linkSupport?: boolean;
26 | }
27 | ```
28 |
29 | _Server Capability_:
30 | * property name (optional): `definitionProvider`
31 | * property type: `boolean | DefinitionOptions` where `DefinitionOptions` is defined as follows:
32 |
33 |
55 |
56 | ```typescript
57 | export interface ReferenceContext {
58 | /**
59 | * Include the declaration of the current symbol.
60 | */
61 | includeDeclaration: boolean;
62 | }
63 | ```
64 | _Response_:
65 | * result: [`Location`](#location)[] \| `null`
66 | * partial result: [`Location`](#location)[]
67 | * error: code and message set in case an exception happens during the reference request.
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/didClose.md:
--------------------------------------------------------------------------------
1 | #### DidCloseTextDocument Notification (:arrow_right:)
2 |
3 | The document close notification is sent from the client to the server when the document got closed in the client. The document's master now exists where the document's Uri points to (e.g. if the document's Uri is a file Uri the master now exists on disk). As with the open notification the close notification is about managing the document's content. Receiving a close notification doesn't mean that the document was open in an editor before. A close notification requires a previous open notification to be sent. Note that a server's ability to fulfill requests is independent of whether a text document is open or closed.
4 |
5 | _Client Capability_:
6 | See general synchronization [client capabilities](#textDocument_synchronization_cc).
7 |
8 | _Server Capability_:
9 | See general synchronization [server capabilities](#textDocument_synchronization_sc).
10 |
11 | _Registration Options_: `TextDocumentRegistrationOptions`
12 |
13 | _Notification_:
14 | * method: `textDocument/didClose`
15 | * params: `DidCloseTextDocumentParams` defined as follows:
16 |
17 |
18 |
19 | ```typescript
20 | interface DidCloseTextDocumentParams {
21 | /**
22 | * The document that was closed.
23 | */
24 | textDocument: TextDocumentIdentifier;
25 | }
26 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/didOpen.md:
--------------------------------------------------------------------------------
1 | #### DidOpenTextDocument Notification (:arrow_right:)
2 |
3 | The document open notification is sent from the client to the server to signal newly opened text documents. The document's content is now managed by the client and the server must not try to read the document's content using the document's Uri. Open in this sense means it is managed by the client. It doesn't necessarily mean that its content is presented in an editor. An open notification must not be sent more than once without a corresponding close notification send before. This means open and close notification must be balanced and the max open count for a particular textDocument is one. Note that a server's ability to fulfill requests is independent of whether a text document is open or closed.
4 |
5 | The `DidOpenTextDocumentParams` contain the language id the document is associated with. If the language id of a document changes, the client needs to send a `textDocument/didClose` to the server followed by a `textDocument/didOpen` with the new language id if the server handles the new language id as well.
6 |
7 | _Client Capability_:
8 | See general synchronization [client capabilities](#textDocument_synchronization_cc).
9 |
10 | _Server Capability_:
11 | See general synchronization [server capabilities](#textDocument_synchronization_sc).
12 |
13 | _Registration Options_: [`TextDocumentRegistrationOptions`](#textDocumentRegistrationOptions)
14 |
15 | _Notification_:
16 | * method: 'textDocument/didOpen'
17 | * params: `DidOpenTextDocumentParams` defined as follows:
18 |
19 |
20 |
21 | ```typescript
22 | interface DidOpenTextDocumentParams {
23 | /**
24 | * The document that was opened.
25 | */
26 | textDocument: TextDocumentItem;
27 | }
28 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/didRename.md:
--------------------------------------------------------------------------------
1 | #### Renaming a document
2 |
3 | Document renames should be signaled to a server sending a document close notification with the document's old name followed by an open notification using the document's new name. Major reason is that besides the name other attributes can change as well like the language that is associated with the document. In addition the new document could not be of interest for the server anymore.
4 |
5 | Servers can participate in a document rename by subscribing for the [`workspace/didRenameFiles`](#workspace_didRenameFiles) notification or the [`workspace/willRenameFiles`](#workspace_willRenameFiles) request.
6 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/didSave.md:
--------------------------------------------------------------------------------
1 | #### DidSaveTextDocument Notification (:arrow_right:)
2 |
3 | The document save notification is sent from the client to the server when the document was saved in the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.didSave`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/didSave` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.save`
13 | * property type: `boolean | SaveOptions` where `SaveOptions` is defined as follows:
14 |
15 |
16 |
17 | ```typescript
18 | export interface SaveOptions {
19 | /**
20 | * The client is supposed to include the content on save.
21 | */
22 | includeText?: boolean;
23 | }
24 | ```
25 |
26 | The capability indicates that the server is interested in `textDocument/didSave` notifications.
27 |
28 | _Registration Options_: `TextDocumentSaveRegistrationOptions` defined as follows:
29 |
30 |
31 |
32 | ```typescript
33 | export interface TextDocumentSaveRegistrationOptions
34 | extends TextDocumentRegistrationOptions {
35 | /**
36 | * The client is supposed to include the content on save.
37 | */
38 | includeText?: boolean;
39 | }
40 | ```
41 |
42 | _Notification_:
43 | * method: `textDocument/didSave`
44 | * params: `DidSaveTextDocumentParams` defined as follows:
45 |
46 |
47 |
48 | ```typescript
49 | interface DidSaveTextDocumentParams {
50 | /**
51 | * The document that was saved.
52 | */
53 | textDocument: TextDocumentIdentifier;
54 |
55 | /**
56 | * Optional the content when saved. Depends on the includeText value
57 | * when the save notification was requested.
58 | */
59 | text?: string;
60 | }
61 | ```
62 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/willSave.md:
--------------------------------------------------------------------------------
1 | #### WillSaveTextDocument Notification (:arrow_right:)
2 |
3 | The document will save notification is sent from the client to the server before the document is actually saved. If a server has registered for open / close events clients should ensure that the document is open before a `willSave` notification is sent since clients can't change the content of a file without ownership transferal.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.willSave`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/willSave` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.willSave`
13 | * property type: `boolean`
14 |
15 | The capability indicates that the server is interested in `textDocument/willSave` notifications.
16 |
17 | _Registration Options_: `TextDocumentRegistrationOptions`
18 |
19 | _Notification_:
20 | * method: 'textDocument/willSave'
21 | * params: `WillSaveTextDocumentParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters send in a will save text document notification.
28 | */
29 | export interface WillSaveTextDocumentParams {
30 | /**
31 | * The document that will be saved.
32 | */
33 | textDocument: TextDocumentIdentifier;
34 |
35 | /**
36 | * The 'TextDocumentSaveReason'.
37 | */
38 | reason: TextDocumentSaveReason;
39 | }
40 | ```
41 |
42 |
43 |
44 | ```typescript
45 | /**
46 | * Represents reasons why a text document is saved.
47 | */
48 | export namespace TextDocumentSaveReason {
49 |
50 | /**
51 | * Manually triggered, e.g. by the user pressing save, by starting
52 | * debugging, or by an API call.
53 | */
54 | export const Manual = 1;
55 |
56 | /**
57 | * Automatic after a delay.
58 | */
59 | export const AfterDelay = 2;
60 |
61 | /**
62 | * When the editor lost focus.
63 | */
64 | export const FocusOut = 3;
65 | }
66 |
67 | export type TextDocumentSaveReason = 1 | 2 | 3;
68 | ```
69 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/textDocument/willSaveWaitUntil.md:
--------------------------------------------------------------------------------
1 | #### WillSaveWaitUntilTextDocument Request (:leftwards_arrow_with_hook:)
2 |
3 | The document will save request is sent from the client to the server before the document is actually saved. The request can return an array of TextEdits which will be applied to the text document before it is saved. Please note that clients might drop results if computing the text edits took too long or if a server constantly fails on this request. This is done to keep the save fast and reliable. If a server has registered for open / close events clients should ensure that the document is open before a `willSaveWaitUntil` notification is sent since clients can't change the content of a file without ownership transferal.
4 |
5 | _Client Capability_:
6 | * property name (optional): `textDocument.synchronization.willSaveWaitUntil`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports `textDocument/willSaveWaitUntil` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `textDocumentSync.willSaveWaitUntil`
13 | * property type: `boolean`
14 |
15 | The capability indicates that the server is interested in `textDocument/willSaveWaitUntil` requests.
16 |
17 | _Registration Options_: `TextDocumentRegistrationOptions`
18 |
19 | _Request_:
20 | * method: `textDocument/willSaveWaitUntil`
21 | * params: `WillSaveTextDocumentParams`
22 |
23 | _Response_:
24 | * result: [`TextEdit[]`](#textEdit) \| `null`
25 | * error: code and message set in case an exception happens during the `textDocument/willSaveWaitUntil` request.
26 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/command.md:
--------------------------------------------------------------------------------
1 | #### Command
2 |
3 | Represents a reference to a command. Provides a title which will be used to represent a command in the UI. Commands are identified by a string identifier. The recommended way to handle commands is to implement their execution on the server side if the client and server provide the corresponding capabilities. Alternatively, the tool extension code could handle the command. The protocol currently doesn't specify a set of well-known commands.
4 |
5 | ```typescript
6 | interface Command {
7 | /**
8 | * Title of the command, like `save`.
9 | */
10 | title: string;
11 |
12 | /**
13 | * An optional tooltip.
14 | */
15 | tooltip?: string;
16 |
17 | /**
18 | * The identifier of the actual command handler.
19 | */
20 | command: string;
21 |
22 | /**
23 | * Arguments that the command handler should be
24 | * invoked with.
25 | */
26 | arguments?: LSPAny[];
27 | }
28 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/documentFilter.md:
--------------------------------------------------------------------------------
1 | #### DocumentFilter
2 |
3 | A document filter denotes a document through properties like `language`, `scheme` or `pattern`. An example is a filter that applies to TypeScript files on disk. Another example is a filter that applies to JSON files with name `package.json`:
4 | ```typescript
5 | { language: 'typescript', scheme: 'file' }
6 | { language: 'json', pattern: '**/package.json' }
7 | ```
8 |
9 | ```typescript
10 | export interface DocumentFilter {
11 | /**
12 | * A language id, like `typescript`.
13 | */
14 | language?: string;
15 |
16 | /**
17 | * A Uri scheme, like `file` or `untitled`.
18 | */
19 | scheme?: string;
20 |
21 | /**
22 | * A pattern, like `*.{ts,js}` or a pattern relative to a workspace folders.
23 | *
24 | * See GlobPattern.
25 | *
26 | * Whether clients support relative patterns depends on the client
27 | * capability `textDocuments.filters.relativePatternSupport`.
28 | */
29 | pattern?: GlobPattern;
30 | }
31 | ```
32 |
33 | Please note that for a document filter to be valid, at least one of the properties for `language`, `scheme`, or `pattern` must be set. To keep the type definition simple, all properties are marked as optional.
34 |
35 | A document selector is the combination of one or more document filters.
36 |
37 |
38 |
39 | ```typescript
40 | export type DocumentSelector = DocumentFilter[];
41 | ```
42 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/location.md:
--------------------------------------------------------------------------------
1 | #### Location
2 |
3 | Represents a location inside a resource, such as a line inside a text file.
4 | ```typescript
5 | interface Location {
6 | uri: DocumentUri;
7 | range: Range;
8 | }
9 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/locationLink.md:
--------------------------------------------------------------------------------
1 | #### LocationLink
2 |
3 | Represents a link between a source and a target location.
4 |
5 | ```typescript
6 | interface LocationLink {
7 |
8 | /**
9 | * Span of the origin of this link.
10 | *
11 | * Used as the underlined span for mouse interaction. Defaults to the word
12 | * range at the mouse position.
13 | */
14 | originSelectionRange?: Range;
15 |
16 | /**
17 | * The target resource identifier of this link.
18 | */
19 | targetUri: DocumentUri;
20 |
21 | /**
22 | * The full target range of this link. If the target is, for example, a
23 | * symbol, then the target range is the range enclosing this symbol not
24 | * including leading/trailing whitespace but everything else like comments.
25 | * This information is typically used to highlight the range in the editor.
26 | */
27 | targetRange: Range;
28 |
29 | /**
30 | * The range that should be selected and revealed when this link is being
31 | * followed, e.g., the name of a function. Must be contained by the
32 | * `targetRange`. See also `DocumentSymbol#range`
33 | */
34 | targetSelectionRange: Range;
35 | }
36 | ```
37 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/partialResultParams.md:
--------------------------------------------------------------------------------
1 | #### PartialResultParams
2 |
3 | A parameter literal used to pass a partial result token.
4 |
5 | ```typescript
6 | export interface PartialResultParams {
7 | /**
8 | * An optional token that a server can use to report partial results (e.g.
9 | * streaming) to the client.
10 | */
11 | partialResultToken?: ProgressToken;
12 | }
13 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/partialResults.md:
--------------------------------------------------------------------------------
1 | #### Partial Result Progress
2 |
3 | > *Since version 3.15.0*
4 |
5 | Partial results are also reported using the generic [`$/progress`](#progress) notification. The value payload of a partial result progress notification is in most cases the same as the final result. For example, the `workspace/symbol` request has `SymbolInformation[]` \| `WorkspaceSymbol[]` as the result type. Partial result is therefore also of type `SymbolInformation[]` \| `WorkspaceSymbol[]`. Whether a client accepts partial result notifications for a request is signaled by adding a `partialResultToken` to the request parameter. For example, a `textDocument/reference` request that supports both work done and partial result progress might look like this:
6 |
7 | ```json
8 | {
9 | "textDocument": {
10 | "uri": "file:///folder/file.ts"
11 | },
12 | "position": {
13 | "line": 9,
14 | "character": 5
15 | },
16 | "context": {
17 | "includeDeclaration": true
18 | },
19 | // The token used to report work done progress.
20 | "workDoneToken": "1d546990-40a3-4b77-b134-46622995f6ae",
21 | // The token used to report partial result progress.
22 | "partialResultToken": "5f6f349e-4f81-4a3b-afff-ee04bff96804"
23 | }
24 | ```
25 |
26 | The `partialResultToken` is then used to report partial results for the find references request.
27 |
28 | If a server reports partial result via a corresponding `$/progress`, the whole result must be reported using `$/progress` notifications, each of which appends items to the result. The final response has to be empty in terms of result values. This avoids confusion about how the final result should be interpreted, e.g. as another partial result or as a replacing result.
29 |
30 | If the response errors, the provided partial results should be treated as follows:
31 |
32 | - if the `code` equals `RequestCancelled`: the client is free to use the provided results but should make clear that the request got canceled and may be incomplete.
33 | - in all other cases, the provided partial results shouldn't be used.
34 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/patterns.md:
--------------------------------------------------------------------------------
1 | #### Patterns
2 |
3 | Pattern definitions used in file watchers and document filters.
4 |
5 |
6 |
7 | ```typescript
8 | /**
9 | * The pattern to watch relative to the base path. Glob patterns can have
10 | * the following syntax:
11 | * - `*` to match zero or more characters in a path segment
12 | * - `?` to match on one character in a path segment
13 | * - `**` to match any number of path segments, including none
14 | * - `{}` to group conditions (e.g. `**/*.{ts,js}` matches all TypeScript
15 | * and JavaScript files)
16 | * - `[]` to declare a range of characters to match in a path segment
17 | * (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
18 | * - `[!...]` to negate a range of characters to match in a path segment
19 | * (e.g., `example.[!0-9]` to match on `example.a`, `example.b`,
20 | * but not `example.0`)
21 | *
22 | * @since 3.17.0
23 | */
24 | export type Pattern = string;
25 | ```
26 |
27 |
28 |
29 | ```typescript
30 | /**
31 | * A relative pattern is a helper to construct glob patterns that are matched
32 | * relatively to a base URI. The common value for a `baseUri` is a workspace
33 | * folder root, but it can be another absolute URI as well.
34 | *
35 | * @since 3.17.0
36 | */
37 | export interface RelativePattern {
38 | /**
39 | * A workspace folder or a base URI to which this pattern will be matched
40 | * against relatively.
41 | */
42 | baseUri: WorkspaceFolder | URI;
43 |
44 | /**
45 | * The actual pattern;
46 | */
47 | pattern: Pattern;
48 | }
49 | ```
50 |
51 |
52 |
53 | ```typescript
54 | /**
55 | * The glob pattern. Either a string pattern or a relative pattern.
56 | *
57 | * @since 3.17.0
58 | */
59 | export type GlobPattern = Pattern | RelativePattern;
60 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/position.md:
--------------------------------------------------------------------------------
1 | #### Position
2 |
3 | Position in a text document expressed as zero-based line and zero-based character offset. A position is between two characters like an 'insert' cursor in an editor. Special values, like `-1` to denote the end of a line, are not supported.
4 |
5 | ```typescript
6 | interface Position {
7 | /**
8 | * Line position in a document (zero-based).
9 | */
10 | line: uinteger;
11 |
12 | /**
13 | * Character offset on a line in a document (zero-based). The meaning of this
14 | * offset is determined by the negotiated `PositionEncodingKind`.
15 | *
16 | * If the character value is greater than the line length it defaults back
17 | * to the line length.
18 | */
19 | character: uinteger;
20 | }
21 | ```
22 |
23 | When describing positions, the protocol needs to specify how offsets (specifically character offsets) should be interpreted.
24 | The corresponding `PositionEncodingKind` is negotiated between the client and the server during initialization.
25 |
26 |
27 |
28 |
29 | ```typescript
30 | /**
31 | * A type indicating how positions are encoded,
32 | * specifically what column offsets mean.
33 | *
34 | * @since 3.17.0
35 | */
36 | export type PositionEncodingKind = string;
37 |
38 | /**
39 | * A set of predefined position encoding kinds.
40 | *
41 | * @since 3.17.0
42 | */
43 | export namespace PositionEncodingKind {
44 |
45 | /**
46 | * Character offsets count UTF-8 code units (i.e. bytes).
47 | */
48 | export const UTF8: PositionEncodingKind = 'utf-8';
49 |
50 | /**
51 | * Character offsets count UTF-16 code units.
52 | *
53 | * This is the default and must always be supported
54 | * by servers.
55 | */
56 | export const UTF16: PositionEncodingKind = 'utf-16';
57 |
58 | /**
59 | * Character offsets count UTF-32 code units.
60 | *
61 | * Implementation note: these are the same as Unicode code points,
62 | * so this `PositionEncodingKind` may also be used for an
63 | * encoding-agnostic representation of character offsets.
64 | */
65 | export const UTF32: PositionEncodingKind = 'utf-32';
66 | }
67 | ```
68 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/range.md:
--------------------------------------------------------------------------------
1 | #### Range
2 |
3 | A range in a text document expressed as (zero-based) start and end positions. A range is comparable to a selection in an editor. Therefore, the end position is exclusive. If you want to specify a range that contains a line including the line ending character(s) then use an end position denoting the start of the next line. For example:
4 | ```typescript
5 | {
6 | start: { line: 5, character: 23 },
7 | end : { line: 6, character: 0 }
8 | }
9 | ```
10 |
11 | ```typescript
12 | interface Range {
13 | /**
14 | * The range's start position.
15 | */
16 | start: Position;
17 |
18 | /**
19 | * The range's end position.
20 | */
21 | end: Position;
22 | }
23 | ```
24 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/stringValue.md:
--------------------------------------------------------------------------------
1 | #### String Value
2 |
3 | Template strings for inserting text and controlling the editor cursor upon insertion.
4 |
5 | ```typescript
6 | /**
7 | * A string value used as a snippet is a template which allows to insert text
8 | * and to control the editor cursor when insertion happens.
9 | *
10 | * A snippet can define tab stops and placeholders with `$1`, `$2`
11 | * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
12 | * the end of the snippet. Variables are defined with `$name` and
13 | * `${name:default value}`.
14 | *
15 | * @since 3.18.0
16 | */
17 | export interface StringValue {
18 | /**
19 | * The kind of string value.
20 | */
21 | kind: 'snippet';
22 |
23 | /**
24 | * The snippet string.
25 | */
26 | value: string;
27 | }
28 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textDocumentEdit.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentEdit
2 |
3 | * New in version 3.16: support for `AnnotatedTextEdit`. The support is guarded by the client capability `workspace.workspaceEdit.changeAnnotationSupport`. If a client doesn't signal the capability, servers shouldn't send `AnnotatedTextEdit` literals back to the client.
4 |
5 | * New in version 3.18: support for `SnippetTextEdit`. The support is guarded by the client capability `workspace.workspaceEdit.snippetEditSupport`. If a client doesn't signal the capability, servers shouldn't send `SnippetTextEdit` snippets back to the client.
6 |
7 | Describes textual changes on a single text document. The text document is referred to as an `OptionalVersionedTextDocumentIdentifier` to allow clients to check the text document version before an edit is applied. A `TextDocumentEdit` describes all changes on a version Si and after they are applied move the document to version Si+1. So, the creator of a `TextDocumentEdit` doesn't need to sort the array of edits or do any kind of ordering. However, the edits must be non overlapping.
8 |
9 | ```typescript
10 | export interface TextDocumentEdit {
11 | /**
12 | * The text document to change.
13 | */
14 | textDocument: OptionalVersionedTextDocumentIdentifier;
15 |
16 | /**
17 | * The edits to be applied.
18 | *
19 | * @since 3.16.0 - support for AnnotatedTextEdit. This is guarded by the
20 | * client capability `workspace.workspaceEdit.changeAnnotationSupport`
21 | *
22 | * @since 3.18.0 - support for SnippetTextEdit. This is guarded by the
23 | * client capability `workspace.workspaceEdit.snippetEditSupport`
24 | */
25 | edits: (TextEdit | AnnotatedTextEdit | SnippetTextEdit)[];
26 | }
27 | ```
28 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textDocumentIdentifier.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentIdentifier
2 |
3 | Text documents are identified using a URI. On the protocol level, URIs are passed as strings. The corresponding JSON structure looks like this:
4 | ```typescript
5 | interface TextDocumentIdentifier {
6 | /**
7 | * The text document's URI.
8 | */
9 | uri: DocumentUri;
10 | }
11 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textDocumentItem.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentItem
2 |
3 | An item to transfer a text document from the client to the server.
4 |
5 | ```typescript
6 | interface TextDocumentItem {
7 | /**
8 | * The text document's URI.
9 | */
10 | uri: DocumentUri;
11 |
12 | /**
13 | * The text document's language identifier.
14 | */
15 | languageId: string;
16 |
17 | /**
18 | * The version number of this document (it will increase after each
19 | * change, including undo/redo).
20 | */
21 | version: integer;
22 |
23 | /**
24 | * The content of the opened text document.
25 | */
26 | text: string;
27 | }
28 | ```
29 |
30 | Text documents have a language identifier to identify a document on the server side when it handles more than one language to avoid re-interpreting the file extension. If a document refers to one of the programming languages listed below it is recommended that clients use those ids.
31 |
32 | Language | Identifier
33 | -------- | ----------
34 | ABAP | `abap`
35 | Windows Bat | `bat`
36 | BibTeX | `bibtex`
37 | Clojure | `clojure`
38 | Coffeescript | `coffeescript`
39 | C | `c`
40 | C++ | `cpp`
41 | C# | `csharp`
42 | CSS | `css`
43 | Diff | `diff`
44 | Dart | `dart`
45 | Dockerfile | `dockerfile`
46 | Elixir | `elixir`
47 | Erlang | `erlang`
48 | F# | `fsharp`
49 | Git | `git-commit` and `git-rebase`
50 | Go | `go`
51 | Groovy | `groovy`
52 | Handlebars | `handlebars`
53 | Haskell | `haskell`
54 | HTML | `html`
55 | Ini | `ini`
56 | Java | `java`
57 | JavaScript | `javascript`
58 | JavaScript React | `javascriptreact`
59 | JSON | `json`
60 | LaTeX | `latex`
61 | Less | `less`
62 | Lua | `lua`
63 | Makefile | `makefile`
64 | Markdown | `markdown`
65 | Objective-C | `objective-c`
66 | Objective-C++ | `objective-cpp`
67 | Perl | `perl`
68 | Perl 6 | `perl6`
69 | PHP | `php`
70 | Powershell | `powershell`
71 | Pug | `jade`
72 | Python | `python`
73 | R | `r`
74 | Razor (cshtml) | `razor`
75 | Ruby | `ruby`
76 | Rust | `rust`
77 | SCSS | `scss` (syntax using curly brackets), `sass` (indented syntax)
78 | Scala | `scala`
79 | ShaderLab | `shaderlab`
80 | Shell Script (Bash) | `shellscript`
81 | SQL | `sql`
82 | Swift | `swift`
83 | TypeScript | `typescript`
84 | TypeScript React| `typescriptreact`
85 | TeX | `tex`
86 | Text (plain) | `plaintext`
87 | Visual Basic | `vb`
88 | XML | `xml`
89 | XSL | `xsl`
90 | YAML | `yaml`
91 | {: .table .table-bordered .table-responsive}
92 |
93 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textDocumentPositionParams.md:
--------------------------------------------------------------------------------
1 | #### TextDocumentPositionParams
2 |
3 | Was `TextDocumentPosition` in 1.0 with inlined parameters.
4 |
5 | A parameter literal used in requests to pass a text document and a position inside that document. It is up to the client to decide how a selection is converted into a position when issuing a request for a text document. The client can, for example, honor or ignore the selection direction to make LSP request consistent with features implemented internally.
6 |
7 | ```typescript
8 | interface TextDocumentPositionParams {
9 | /**
10 | * The text document.
11 | */
12 | textDocument: TextDocumentIdentifier;
13 |
14 | /**
15 | * The position inside the text document.
16 | */
17 | position: Position;
18 | }
19 | ```
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textDocuments.md:
--------------------------------------------------------------------------------
1 | #### Text Documents
2 |
3 | The current protocol is tailored for textual documents whose content can be represented as a string. There is currently no support for binary documents. A position inside a document (see Position definition below) is expressed as a zero-based line and character offset.
4 |
5 | ##### New in 3.17
6 |
7 | Prior to 3.17 the offsets were always based on a UTF-16 string representation. So in a string of the form `a𐐀b` the character offset of the character `a` is 0, the character offset of `𐐀` is 1 and the character offset of b is 3 since `𐐀` is represented using two code units in UTF-16. Since 3.17 clients and servers can agree on a different string encoding representation (e.g. UTF-8). The client announces its supported encoding via the client capability [`general.positionEncodings`](#clientCapabilities). The value is an array of position encodings the client supports, with decreasing preference (e.g. the encoding at index `0` is the most preferred one). To stay backwards compatible the only mandatory encoding is UTF-16 represented via the string `utf-16`. The server can pick one of the encodings offered by the client and signals that encoding back to the client via the initialize result's property [`capabilities.positionEncoding`](#serverCapabilities). If the string value `utf-16` is missing from the client's capability `general.positionEncodings` servers can safely assume that the client supports UTF-16. If the server omits the position encoding in its initialize result the encoding defaults to the string value `utf-16`. Implementation considerations: since the conversion from one encoding into another requires the content of the file / line the conversion is best done where the file is read which is usually on the server side.
8 |
9 | To ensure that both client and server split the string into the same line representation the protocol specifies the following end-of-line sequences: '\n', '\r\n' and '\r'. Positions are line end character agnostic, so you cannot specify a position that denotes `\r|\n` or `\n|` where `|` represents the character offset.
10 |
11 | ```typescript
12 | export const EOL: string[] = ['\n', '\r\n', '\r'];
13 | ```
14 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/textEditArray.md:
--------------------------------------------------------------------------------
1 | #### TextEdit[]
2 |
3 | Complex text manipulations are described with an array of `TextEdit`'s or `AnnotatedTextEdit`'s, representing a single change to the document.
4 |
5 | All text edits ranges refer to positions in the document they are computed on. They therefore move a document from state S1 to S2 without describing any intermediate state. Text edits ranges must never overlap, that means no part of the original document must be manipulated by more than one edit. However, it is possible that multiple edits have the same start position: multiple inserts, or any number of inserts followed by a single remove or replace edit. If multiple inserts have the same position, the order in the array defines the order in which the inserted strings appear in the resulting text.
6 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/types/versionedTextDocumentIdentifier.md:
--------------------------------------------------------------------------------
1 | #### VersionedTextDocumentIdentifier
2 |
3 | An identifier to denote a specific version of a text document. This information usually flows from the client to the server.
4 |
5 | ```typescript
6 | interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {
7 | /**
8 | * The version number of this document.
9 | *
10 | * The version number of a document will increase after each change,
11 | * including undo/redo. The number doesn't need to be consecutive.
12 | */
13 | version: integer;
14 | }
15 | ```
16 |
17 | An identifier which optionally denotes a specific version of a text document. This information usually flows from the server to the client.
18 |
19 |
20 |
21 | ```typescript
22 | interface OptionalVersionedTextDocumentIdentifier extends TextDocumentIdentifier {
23 | /**
24 | * The version number of this document. If an optional versioned text document
25 | * identifier is sent from the server to the client and the file is not
26 | * open in the editor (the server has not received an open notification
27 | * before) the server can send `null` to indicate that the version is
28 | * known and the content on disk is the master (as specified with document
29 | * content ownership).
30 | *
31 | * The version number of a document will increase after each change,
32 | * including undo/redo. The number doesn't need to be consecutive.
33 | */
34 | version: integer | null;
35 | }
36 | ```
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/window/showDocument.md:
--------------------------------------------------------------------------------
1 | #### Show Document Request (:arrow_right_hook:)
2 |
3 | > New in version 3.16.0
4 |
5 | The show document request is sent from a server to a client to ask the client to display a particular resource referenced by a URI in the user interface.
6 |
7 | _Client Capability_:
8 | * property path (optional): `window.showDocument`
9 | * property type: `ShowDocumentClientCapabilities` defined as follows:
10 |
11 | ```typescript
12 | /**
13 | * Client capabilities for the show document request.
14 | *
15 | * @since 3.16.0
16 | */
17 | export interface ShowDocumentClientCapabilities {
18 | /**
19 | * The client has support for the show document
20 | * request.
21 | */
22 | support: boolean;
23 | }
24 | ```
25 |
26 | _Request_:
27 | * method: 'window/showDocument'
28 | * params: `ShowDocumentParams` defined as follows:
29 |
30 |
31 |
32 | ```typescript
33 | /**
34 | * Params to show a resource.
35 | *
36 | * @since 3.16.0
37 | */
38 | export interface ShowDocumentParams {
39 | /**
40 | * The URI to show.
41 | */
42 | uri: URI;
43 |
44 | /**
45 | * Indicates to show the resource in an external program.
46 | * To show, for example, `https://code.visualstudio.com/`
47 | * in the default web browser, set `external` to `true`.
48 | */
49 | external?: boolean;
50 |
51 | /**
52 | * An optional property to indicate whether the editor
53 | * showing the document should take focus or not.
54 | * Clients might ignore this property if an external
55 | * program is started.
56 | */
57 | takeFocus?: boolean;
58 |
59 | /**
60 | * An optional selection range if the document is a text
61 | * document. Clients might ignore this property if an
62 | * external program is started or the file is not a text
63 | * file.
64 | */
65 | selection?: Range;
66 | }
67 | ```
68 |
69 | _Response_:
70 |
71 | * result: `ShowDocumentResult` defined as follows:
72 |
73 |
74 |
75 | ```typescript
76 | /**
77 | * The result of a show document request.
78 | *
79 | * @since 3.16.0
80 | */
81 | export interface ShowDocumentResult {
82 | /**
83 | * A boolean indicating if the show was successful.
84 | */
85 | success: boolean;
86 | }
87 | ```
88 | * error: code and message set in case an exception happens during showing a document.
89 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/window/workDoneProgressCancel.md:
--------------------------------------------------------------------------------
1 | #### Cancel a Work Done Progress (:arrow_right:)
2 |
3 | The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress initiated on the server side using `window/workDoneProgress/create`. The progress need not be marked as `cancellable` to be cancelled and a client may cancel a progress for any number of reasons: in case of error, reloading a workspace etc.
4 |
5 | _Notification_:
6 |
7 | * method: 'window/workDoneProgress/cancel'
8 | * params: `WorkDoneProgressCancelParams` defined as follows:
9 |
10 | ```typescript
11 | export interface WorkDoneProgressCancelParams {
12 | /**
13 | * The token to be used to report progress.
14 | */
15 | token: ProgressToken;
16 | }
17 | ```
18 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/window/workDoneProgressCreate.md:
--------------------------------------------------------------------------------
1 | #### Create Work Done Progress (:arrow_right_hook:)
2 |
3 | The `window/workDoneProgress/create` request is sent from the server to the client to ask the client to create a work done progress.
4 |
5 | _Client Capability_:
6 | * property name (optional): `window.workDoneProgress`
7 | * property type: `boolean`
8 |
9 | _Request_:
10 |
11 | * method: 'window/workDoneProgress/create'
12 | * params: `WorkDoneProgressCreateParams` defined as follows:
13 |
14 | ```typescript
15 | export interface WorkDoneProgressCreateParams {
16 | /**
17 | * The token to be used to report progress.
18 | */
19 | token: ProgressToken;
20 | }
21 | ```
22 |
23 | _Response_:
24 |
25 | * result: void
26 | * error: code and message set in case an exception happens during the 'window/workDoneProgress/create' request. In case an error occurs, a server must not send any progress notification using the token provided in the `WorkDoneProgressCreateParams`.
27 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/applyEdit.md:
--------------------------------------------------------------------------------
1 | #### Applies a WorkspaceEdit (:arrow_right_hook:)
2 |
3 | The `workspace/applyEdit` request is sent from the server to the client to modify resource on the client side.
4 |
5 | _Client Capability_:
6 | * property path (optional): `workspace.applyEdit`
7 | * property type: `boolean`
8 |
9 | See also the [WorkspaceEditClientCapabilities](#workspaceEditClientCapabilities) for the supported capabilities of a workspace edit.
10 |
11 | _Request_:
12 | * method: 'workspace/applyEdit'
13 | * params: `ApplyWorkspaceEditParams` defined as follows:
14 |
15 |
16 |
17 | ```typescript
18 | export interface ApplyWorkspaceEditParams {
19 | /**
20 | * An optional label of the workspace edit. This label is
21 | * presented in the user interface, for example, on an undo
22 | * stack to undo the workspace edit.
23 | */
24 | label?: string;
25 |
26 | /**
27 | * The edits to apply.
28 | */
29 | edit: WorkspaceEdit;
30 |
31 | /**
32 | * Additional data about the edit.
33 | *
34 | * @since 3.18.0
35 | * @proposed
36 | */
37 | metadata?: WorkspaceEditMetadata;
38 | }
39 | ```
40 |
41 |
42 |
43 | ```typescript
44 | /**
45 | * Additional data about a workspace edit.
46 | *
47 | * @since 3.18.0
48 | * @proposed
49 | */
50 | export interface WorkspaceEditMetadata {
51 | /**
52 | * Signal to the editor that this edit is a refactoring.
53 | */
54 | isRefactoring?: boolean;
55 | }
56 | ```
57 |
58 | _Response_:
59 | * result: `ApplyWorkspaceEditResult` defined as follows:
60 |
61 |
62 |
63 | ```typescript
64 | export interface ApplyWorkspaceEditResult {
65 | /**
66 | * Indicates whether the edit was applied or not.
67 | */
68 | applied: boolean;
69 |
70 | /**
71 | * An optional textual description for why the edit was not applied.
72 | * This may be used by the server for diagnostic logging or to provide
73 | * a suitable error for a request that triggered the edit.
74 | */
75 | failureReason?: string;
76 |
77 | /**
78 | * Depending on the client's failure handling strategy, `failedChange`
79 | * might contain the index of the change that failed. This property is
80 | * only available if the client signals a `failureHandling` strategy
81 | * in its client capabilities.
82 | */
83 | failedChange?: uinteger;
84 | }
85 | ```
86 | * error: code and message set in case an exception happens during the request.
87 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/configuration.md:
--------------------------------------------------------------------------------
1 | #### Configuration Request (:arrow_right_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The `workspace/configuration` request is sent from the server to the client to fetch configuration settings from the client. The request can fetch several configuration settings in one roundtrip. The order of the returned configuration settings correspond to the order of the passed `ConfigurationItems` (e.g. the first item in the response is the result for the first configuration item in the params).
6 |
7 | A `ConfigurationItem` consists of the configuration section to ask for and an additional scope URI. The configuration section asked for is defined by the server and doesn't necessarily need to correspond to the configuration store used by the client. So, a server might ask for a configuration `cpp.formatterOptions` but the client stores the configuration in an XML store layout differently. It is up to the client to do the necessary conversion. If a scope URI is provided, the client should return the setting scoped to the provided resource. If the client, for example, uses [EditorConfig](http://editorconfig.org/) to manage its settings the configuration should be returned for the passed resource URI. If the client can't provide a configuration setting for a given scope, then `null` needs to be present in the returned array.
8 |
9 | This pull model replaces the old push model where the client signaled a configuration change via an event. If the server still needs to react to configuration changes (since the server caches the result of `workspace/configuration` requests), the server should register for an empty configuration change using the following registration pattern:
10 |
11 | ```typescript
12 | connection.client.register(DidChangeConfigurationNotification.type, undefined);
13 | ```
14 |
15 | _Client Capability_:
16 | * property path (optional): `workspace.configuration`
17 | * property type: `boolean`
18 |
19 | _Request_:
20 | * method: 'workspace/configuration'
21 | * params: `ConfigurationParams` defined as follows
22 |
23 |
27 |
28 | ```typescript
29 | interface DidChangeConfigurationParams {
30 | /**
31 | * The actual changed settings.
32 | */
33 | settings: LSPAny;
34 | }
35 | ```
36 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/didChangeWorkspaceFolders.md:
--------------------------------------------------------------------------------
1 | #### DidChangeWorkspaceFolders Notification (:arrow_right:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server to inform the server about workspace folder configuration changes. A server can register for this notification by using either the _server capability_ `workspace.workspaceFolders.changeNotifications` or by using the dynamic capability registration mechanism. To dynamically register for the `workspace/didChangeWorkspaceFolders`, send a `client/registerCapability` request from the server to the client. The registration parameter must have a `registrations` item of the following form, where `id` is a unique ID used to unregister the capability (the example uses a UUID):
6 | ```ts
7 | {
8 | id: "28c6150c-bd7b-11e7-abc4-cec278b6b50a",
9 | method: "workspace/didChangeWorkspaceFolders"
10 | }
11 | ```
12 |
13 | _Notification_:
14 | * method: 'workspace/didChangeWorkspaceFolders'
15 | * params: `DidChangeWorkspaceFoldersParams` defined as follows:
16 |
17 |
29 |
30 | ```typescript
31 | /**
32 | * The workspace folder change event.
33 | */
34 | export interface WorkspaceFoldersChangeEvent {
35 | /**
36 | * The array of added workspace folders.
37 | */
38 | added: WorkspaceFolder[];
39 |
40 | /**
41 | * The array of removed workspace folders.
42 | */
43 | removed: WorkspaceFolder[];
44 | }
45 | ```
46 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/didCreateFiles.md:
--------------------------------------------------------------------------------
1 | #### DidCreateFiles Notification (:arrow_right:)
2 |
3 | The did create files notification is sent from the client to the server when files were created from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didCreate`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didCreateFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didCreate`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didCreateFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didCreateFiles'
19 | * params: `CreateFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/didDeleteFiles.md:
--------------------------------------------------------------------------------
1 | #### DidDeleteFiles Notification (:arrow_right:)
2 |
3 | The did delete files notification is sent from the client to the server when files were deleted from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didDelete`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didDeleteFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didDelete`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didDeleteFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didDeleteFiles'
19 | * params: `DeleteFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/didRenameFiles.md:
--------------------------------------------------------------------------------
1 | #### DidRenameFiles Notification (:arrow_right:)
2 |
3 | The did rename files notification is sent from the client to the server when files were renamed from within the client.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.didRename`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/didRenameFiles` notifications.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.didRename`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/didRenameFiles` notifications.
16 |
17 | _Notification_:
18 | * method: 'workspace/didRenameFiles'
19 | * params: `RenameFilesParams`
20 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/executeCommand.md:
--------------------------------------------------------------------------------
1 | #### Execute a command (:leftwards_arrow_with_hook:)
2 |
3 | The `workspace/executeCommand` request is sent from the client to the server to trigger command execution on the server. In most cases, the server creates a `WorkspaceEdit` structure and applies the changes to the workspace using the request `workspace/applyEdit`, which is sent from the server to the client.
4 |
5 | _Client Capability_:
6 | * property path (optional): `workspace.executeCommand`
7 | * property type: `ExecuteCommandClientCapabilities` defined as follows:
8 |
9 |
53 |
54 | ```typescript
55 | export interface ExecuteCommandParams extends WorkDoneProgressParams {
56 |
57 | /**
58 | * The identifier of the actual command handler.
59 | */
60 | command: string;
61 | /**
62 | * Arguments that the command should be invoked with.
63 | */
64 | arguments?: LSPAny[];
65 | }
66 | ```
67 |
68 | The arguments are typically specified when a command is returned from the server to the client. Example requests that return a command are `textDocument/codeAction` or `textDocument/codeLens`.
69 |
70 | _Response_:
71 | * result: `LSPAny`
72 | * error: code and message set in case an exception happens during the request.
73 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/willDeleteFiles.md:
--------------------------------------------------------------------------------
1 | #### WillDeleteFiles Request (:leftwards_arrow_with_hook:)
2 |
3 | The will delete files request is sent from the client to the server before files are actually deleted as long as the deletion is triggered from within the client either by a user action or by applying a workspace edit. The request can return a WorkspaceEdit which will be applied to the workspace before the files are deleted. Please note that clients might drop results if computing the edit took too long or if a server constantly fails on this request. This is done to keep deletes fast and reliable.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.willDelete`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/willDeleteFiles` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.willDelete`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/willDeleteFiles` requests.
16 |
17 | _Registration Options_: none
18 |
19 | _Request_:
20 | * method: `workspace/willDeleteFiles`
21 | * params: `DeleteFilesParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters sent in notifications/requests for user-initiated deletes
28 | * of files.
29 | *
30 | * @since 3.16.0
31 | */
32 | export interface DeleteFilesParams {
33 |
34 | /**
35 | * An array of all files/folders deleted in this operation.
36 | */
37 | files: FileDelete[];
38 | }
39 | ```
40 |
41 |
42 |
43 | ```typescript
44 | /**
45 | * Represents information on a file/folder delete.
46 | *
47 | * @since 3.16.0
48 | */
49 | export interface FileDelete {
50 |
51 | /**
52 | * A file:// URI for the location of the file/folder being deleted.
53 | */
54 | uri: string;
55 | }
56 | ```
57 |
58 | _Response_:
59 | * result: `WorkspaceEdit` \| `null`
60 | * error: code and message set in case an exception happens during the `workspace/willDeleteFiles` request.
61 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/willRenameFiles.md:
--------------------------------------------------------------------------------
1 | #### WillRenameFiles Request (:leftwards_arrow_with_hook:)
2 |
3 | The will rename files request is sent from the client to the server before files are actually renamed as long as the rename is triggered from within the client either by a user action or by applying a workspace edit. The request can return a WorkspaceEdit which will be applied to the workspace before the files are renamed. Please note that clients might drop results if computing the edit took too long or if a server constantly fails on this request. This is done to keep renames fast and reliable.
4 |
5 | _Client Capability_:
6 | * property name (optional): `workspace.fileOperations.willRename`
7 | * property type: `boolean`
8 |
9 | The capability indicates that the client supports sending `workspace/willRenameFiles` requests.
10 |
11 | _Server Capability_:
12 | * property name (optional): `workspace.fileOperations.willRename`
13 | * property type: `FileOperationRegistrationOptions`
14 |
15 | The capability indicates that the server is interested in receiving `workspace/willRenameFiles` requests.
16 |
17 | _Registration Options_: none
18 |
19 | _Request_:
20 | * method: 'workspace/willRenameFiles'
21 | * params: `RenameFilesParams` defined as follows:
22 |
23 |
24 |
25 | ```typescript
26 | /**
27 | * The parameters sent in notifications/requests for user-initiated renames
28 | * of files.
29 | *
30 | * @since 3.16.0
31 | */
32 | export interface RenameFilesParams {
33 |
34 | /**
35 | * An array of all files/folders renamed in this operation. When a folder
36 | * is renamed, only the folder will be included, and not its children.
37 | */
38 | files: FileRename[];
39 | }
40 | ```
41 |
42 |
43 |
44 | ```typescript
45 | /**
46 | * Represents information on a file/folder rename.
47 | *
48 | * @since 3.16.0
49 | */
50 | export interface FileRename {
51 |
52 | /**
53 | * A file:// URI for the original location of the file/folder being renamed.
54 | */
55 | oldUri: string;
56 |
57 | /**
58 | * A file:// URI for the new location of the file/folder being renamed.
59 | */
60 | newUri: string;
61 | }
62 | ```
63 |
64 | _Response_:
65 | * result: `WorkspaceEdit` \| `null`
66 | * error: code and message set in case an exception happens during the `workspace/willRenameFiles` request.
67 |
--------------------------------------------------------------------------------
/_specifications/lsp/3.18/workspace/workspaceFolders.md:
--------------------------------------------------------------------------------
1 | #### Workspace folders request (:arrow_right_hook:)
2 |
3 | > *Since version 3.6.0*
4 |
5 | Many tools support more than one root folder per workspace. Examples for this are VS Code's multi-root support, Atom's project folder support or Sublime's project support. If a client workspace consists of multiple roots, then a server typically needs to know about this. The protocol up to now assumes one root folder which is announced to the server by the `rootUri` property of the `InitializeParams`. If the client supports workspace folders and announces them via the corresponding `workspaceFolders` client capability, the `InitializeParams` contain an additional property `workspaceFolders` with the configured workspace folders when the server starts.
6 |
7 | The `workspace/workspaceFolders` request is sent from the server to the client to fetch the current open list of workspace folders. Returns `null` in the response if only a single file is open in the tool. Returns an empty array if a workspace is open but no folders are configured.
8 |
9 | _Client Capability_:
10 | * property path (optional): `workspace.workspaceFolders`
11 | * property type: `boolean`
12 |
13 | _Server Capability_:
14 | * property path (optional): `workspace.workspaceFolders`
15 | * property type: `WorkspaceFoldersServerCapabilities` defined as follows:
16 |
17 |
18 |
19 | ```typescript
20 | export interface WorkspaceFoldersServerCapabilities {
21 | /**
22 | * The server has support for workspace folders.
23 | */
24 | supported?: boolean;
25 |
26 | /**
27 | * Whether the server wants to receive workspace folder
28 | * change notifications.
29 | *
30 | * If a string is provided, the string is treated as an ID
31 | * under which the notification is registered on the client
32 | * side. The ID can be used to unregister for these events
33 | * using the `client/unregisterCapability` request.
34 | */
35 | changeNotifications?: string | boolean;
36 | }
37 | ```
38 |
39 | _Request_:
40 | * method: `workspace/workspaceFolders`
41 | * params: none
42 |
43 | _Response_:
44 | * result: `WorkspaceFolder[] | null` defined as follows:
45 |
46 |
47 |
48 | ```typescript
49 | export interface WorkspaceFolder {
50 | /**
51 | * The associated URI for this workspace folder.
52 | */
53 | uri: URI;
54 |
55 | /**
56 | * The name of the workspace folder. Used to refer to this
57 | * workspace folder in the user interface.
58 | */
59 | name: string;
60 | }
61 | ```
62 | * error: code and message set in case an exception happens during the 'workspace/workspaceFolders' request
63 |
--------------------------------------------------------------------------------
/img/atom-css-code-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/atom-css-code-complete.png
--------------------------------------------------------------------------------
/img/eclipse-css-code-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/eclipse-css-code-complete.png
--------------------------------------------------------------------------------
/img/favicon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/img/microsoft-logo-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/microsoft-logo-inverted.png
--------------------------------------------------------------------------------
/img/microsoft-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/microsoft-logo.png
--------------------------------------------------------------------------------
/img/vs-rust-code-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/vs-rust-code-complete.png
--------------------------------------------------------------------------------
/img/vscode-css-code-complete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/vscode-css-code-complete.png
--------------------------------------------------------------------------------
/img/vscode-ps-hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/img/vscode-ps-hover.png
--------------------------------------------------------------------------------
/js/page.js:
--------------------------------------------------------------------------------
1 | $('#small-nav-dropdown').change(function () {
2 | window.location = $(this)
3 | .find('option:selected')
4 | .val()
5 | })
6 |
7 | const site_tag = 'UA-62780441-30';
8 | function loadAnalytics(gtag) {
9 | // set cookie to expire in 12 x 28 days
10 | gtag('config', site_tag, { 'anonymize_ip': true, 'cookie_expires': 29030400 })
11 | }
12 |
13 | function onConsentChanged() {
14 | function gtag() {
15 | window.dataLayer.push(arguments)
16 | }
17 |
18 | if (!consentRequired() || WcpConsent.siteConsent.getConsentFor(WcpConsent.consentCategories.Analytics)) {
19 | // Load GA
20 | loadAnalytics(gtag)
21 | }
22 | }
23 |
24 | function consentRequired() {
25 | return WcpConsent.siteConsent.isConsentRequired;
26 | }
27 |
28 | $(function () {
29 | // Load GA upfront because we classify it as essential cookie
30 | window.dataLayer = window.dataLayer || []
31 | function gtag() {
32 | dataLayer.push(arguments)
33 | }
34 |
35 | gtag('js', new Date())
36 |
37 | window.WcpConsent && WcpConsent.init("en-US", "cookie-banner", function (err, _siteConsent) {
38 | }, onConsentChanged, WcpConsent.themes.light);
39 |
40 | const cookieManager = document.querySelector('#footer-cookie-link');
41 | if (consentRequired() && cookieManager && cookieManager.parentElement) {
42 | cookieManager.parentElement.style.visibility = 'visible';
43 | }
44 |
45 | // initialize consent
46 | onConsentChanged();
47 | })
--------------------------------------------------------------------------------
/resources/notes.md:
--------------------------------------------------------------------------------
1 | ### General
2 | - make the doc VS Code neutral. e.g. VS Code => Development tool
3 | - make the diagrams VS Code neutral where possible
4 | - do not use WE use the LSP
5 | - Terminology
6 | - Development Tool instead of client
7 | - implementations instead of implementors?
8 | - Add a `CONTRIBUTING.md` doc that explains the necessary development dependencies for working in this repo.
9 |
10 | ### Contents
11 | - needs link back to the language server repo for filing issues etc. Add a contributing section with links to the repo
12 | - link from protocol to screenshots illustrating how this is exposed (can we link to the VS Code images, have a separate page).
13 | - glossary? development tool (not client), language server, SDK
14 |
15 | ### Layout
16 | - home page: less space below the header page
--------------------------------------------------------------------------------
/webfonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/webfonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/webfonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/webfonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/webfonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/webfonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/language-server-protocol/370d0120edaab83e2f9539b464c9bad5f9eff89f/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------