├── .gitattributes ├── .gitignore ├── .vscode ├── settings.json ├── spellright.dict └── tasks.json ├── 404.html ├── Gemfile ├── Gemfile.lock ├── License-code.txt ├── License.txt ├── SECURITY.md ├── ThirdPartyNotices.txt ├── _config.yml ├── _data ├── base-0-9-toc.yml ├── linkableTypes.yml ├── lsif-0-4-0-toc.yml ├── lsif-0-5-0-toc.yml ├── lsif-0-6-0-toc.yml ├── overviews.yml ├── specification-3-14-toc.yml ├── specification-3-15-toc.yml ├── specification-3-16-toc.yml ├── specification-3-17-toc.yml ├── specification-3-18-toc.yml └── specifications.yml ├── _implementors ├── sdks.md ├── servers.md ├── tools.md └── utilities.md ├── _includes ├── cookie_notice.html ├── footer.html ├── head.html ├── js_files.html ├── messages │ ├── 3.17 │ │ ├── exit.md │ │ ├── initialized.md │ │ ├── logMessage.md │ │ ├── logTrace.md │ │ ├── registerCapability.md │ │ ├── setTrace.md │ │ ├── showMessage.md │ │ ├── showMessageRequest.md │ │ ├── shutdown.md │ │ ├── telemetryEvent.md │ │ └── unregisterCapability.md │ └── 3.18 │ │ ├── exit.md │ │ ├── initialized.md │ │ ├── logMessage.md │ │ ├── logTrace.md │ │ ├── registerCapability.md │ │ ├── setTrace.md │ │ ├── showMessage.md │ │ ├── showMessageRequest.md │ │ ├── shutdown.md │ │ ├── telemetryEvent.md │ │ └── unregisterCapability.md ├── topnav.html └── types │ ├── enumerations.md │ ├── traceValue.md │ └── uri.md ├── _layouts ├── default.html ├── implementors.html ├── overview.html ├── redirect.html ├── singlePage.html └── specifications.html ├── _overviews ├── lsif │ ├── img │ │ ├── foldingRange.png │ │ ├── hover.png │ │ └── hoverResult.png │ └── overview.md └── lsp │ ├── img │ ├── language-server-sequence.png │ └── language-server.png │ └── overview.md ├── _specifications ├── base │ └── 0.9 │ │ └── specification.md ├── lsif │ ├── 0.4.0 │ │ ├── img │ │ │ ├── definitionResult.png │ │ │ ├── foldingRange.png │ │ │ ├── hoverResult.png │ │ │ ├── referenceResult.png │ │ │ └── resultSet.png │ │ ├── implementation.md │ │ └── specification.md │ ├── 0.5.0 │ │ ├── img │ │ │ ├── definitionResult.png │ │ │ ├── foldingRange.png │ │ │ ├── hoverResult.png │ │ │ ├── referenceResult.png │ │ │ └── resultSet.png │ │ ├── implementation.md │ │ └── specification.md │ └── 0.6.0 │ │ ├── img │ │ ├── definitionResult.png │ │ ├── foldingRange.png │ │ ├── hoverResult.png │ │ ├── referenceResult.png │ │ └── resultSet.png │ │ ├── implementation.md │ │ └── specification.md ├── lsp │ ├── 3.17 │ │ ├── general │ │ │ └── initialize.md │ │ ├── language │ │ │ ├── callHierarchy.md │ │ │ ├── codeAction.md │ │ │ ├── codeLens.md │ │ │ ├── colorPresentation.md │ │ │ ├── completion.md │ │ │ ├── declaration.md │ │ │ ├── definition.md │ │ │ ├── documentColor.md │ │ │ ├── documentHighlight.md │ │ │ ├── documentLink.md │ │ │ ├── documentSymbol.md │ │ │ ├── foldingRange.md │ │ │ ├── formatting.md │ │ │ ├── hover.md │ │ │ ├── implementation.md │ │ │ ├── inlayHint.md │ │ │ ├── inlineValue.md │ │ │ ├── linkedEditingRange.md │ │ │ ├── moniker.md │ │ │ ├── onTypeFormatting.md │ │ │ ├── publishDiagnostics.md │ │ │ ├── pullDiagnostics.md │ │ │ ├── rangeFormatting.md │ │ │ ├── references.md │ │ │ ├── rename.md │ │ │ ├── selectionRange.md │ │ │ ├── semanticTokens.md │ │ │ ├── signatureHelp.md │ │ │ ├── typeDefinition.md │ │ │ └── typeHierarchy.md │ │ ├── metaModel │ │ │ ├── metaModel.json │ │ │ ├── metaModel.schema.json │ │ │ └── metaModel.ts │ │ ├── notebookDocument │ │ │ └── notebook.md │ │ ├── specification.md │ │ ├── textDocument │ │ │ ├── didChange.md │ │ │ ├── didClose.md │ │ │ ├── didOpen.md │ │ │ ├── didRename.md │ │ │ ├── didSave.md │ │ │ ├── willSave.md │ │ │ └── willSaveWaitUntil.md │ │ ├── types │ │ │ ├── command.md │ │ │ ├── diagnostic.md │ │ │ ├── documentFilter.md │ │ │ ├── location.md │ │ │ ├── locationLink.md │ │ │ ├── markupContent.md │ │ │ ├── partialResultParams.md │ │ │ ├── partialResults.md │ │ │ ├── position.md │ │ │ ├── range.md │ │ │ ├── regexp.md │ │ │ ├── resourceChanges.md │ │ │ ├── textDocumentEdit.md │ │ │ ├── textDocumentIdentifier.md │ │ │ ├── textDocumentItem.md │ │ │ ├── textDocumentPositionParams.md │ │ │ ├── textDocuments.md │ │ │ ├── textEdit.md │ │ │ ├── textEditArray.md │ │ │ ├── versionedTextDocumentIdentifier.md │ │ │ ├── workDoneProgress.md │ │ │ └── workspaceEdit.md │ │ ├── window │ │ │ ├── showDocument.md │ │ │ ├── workDoneProgressCancel.md │ │ │ └── workDoneProgressCreate.md │ │ └── workspace │ │ │ ├── applyEdit.md │ │ │ ├── configuration.md │ │ │ ├── didChangeConfiguration.md │ │ │ ├── didChangeWatchedFiles.md │ │ │ ├── didChangeWorkspaceFolders.md │ │ │ ├── didCreateFiles.md │ │ │ ├── didDeleteFiles.md │ │ │ ├── didRenameFiles.md │ │ │ ├── executeCommand.md │ │ │ ├── symbol.md │ │ │ ├── willCreateFiles.md │ │ │ ├── willDeleteFiles.md │ │ │ ├── willRenameFiles.md │ │ │ └── workspaceFolders.md │ └── 3.18 │ │ ├── general │ │ └── initialize.md │ │ ├── language │ │ ├── callHierarchy.md │ │ ├── codeAction.md │ │ ├── codeLens.md │ │ ├── colorPresentation.md │ │ ├── completion.md │ │ ├── declaration.md │ │ ├── definition.md │ │ ├── documentColor.md │ │ ├── documentHighlight.md │ │ ├── documentLink.md │ │ ├── documentSymbol.md │ │ ├── foldingRange.md │ │ ├── formatting.md │ │ ├── hover.md │ │ ├── implementation.md │ │ ├── inlayHint.md │ │ ├── inlineCompletion.md │ │ ├── inlineValue.md │ │ ├── linkedEditingRange.md │ │ ├── moniker.md │ │ ├── onTypeFormatting.md │ │ ├── publishDiagnostics.md │ │ ├── pullDiagnostics.md │ │ ├── rangeFormatting.md │ │ ├── references.md │ │ ├── rename.md │ │ ├── selectionRange.md │ │ ├── semanticTokens.md │ │ ├── signatureHelp.md │ │ ├── typeDefinition.md │ │ └── typeHierarchy.md │ │ ├── metaModel │ │ ├── metaModel.json │ │ ├── metaModel.schema.json │ │ └── metaModel.ts │ │ ├── notebookDocument │ │ └── notebook.md │ │ ├── specification.md │ │ ├── textDocument │ │ ├── didChange.md │ │ ├── didClose.md │ │ ├── didOpen.md │ │ ├── didRename.md │ │ ├── didSave.md │ │ ├── willSave.md │ │ └── willSaveWaitUntil.md │ │ ├── types │ │ ├── command.md │ │ ├── diagnostic.md │ │ ├── documentFilter.md │ │ ├── location.md │ │ ├── locationLink.md │ │ ├── markupContent.md │ │ ├── partialResultParams.md │ │ ├── partialResults.md │ │ ├── patterns.md │ │ ├── position.md │ │ ├── range.md │ │ ├── regexp.md │ │ ├── resourceChanges.md │ │ ├── stringValue.md │ │ ├── textDocumentEdit.md │ │ ├── textDocumentIdentifier.md │ │ ├── textDocumentItem.md │ │ ├── textDocumentPositionParams.md │ │ ├── textDocuments.md │ │ ├── textEdit.md │ │ ├── textEditArray.md │ │ ├── versionedTextDocumentIdentifier.md │ │ ├── workDoneProgress.md │ │ └── workspaceEdit.md │ │ ├── window │ │ ├── showDocument.md │ │ ├── workDoneProgressCancel.md │ │ └── workDoneProgressCreate.md │ │ └── workspace │ │ ├── applyEdit.md │ │ ├── configuration.md │ │ ├── didChangeConfiguration.md │ │ ├── didChangeWatchedFiles.md │ │ ├── didChangeWorkspaceFolders.md │ │ ├── didCreateFiles.md │ │ ├── didDeleteFiles.md │ │ ├── didRenameFiles.md │ │ ├── executeCommand.md │ │ ├── symbol.md │ │ ├── textDocumentContent.md │ │ ├── willCreateFiles.md │ │ ├── willDeleteFiles.md │ │ ├── willRenameFiles.md │ │ └── workspaceFolders.md ├── specification-3-14.md ├── specification-3-15.md └── specification-3-16.md ├── css ├── bootswatch │ └── cosmo │ │ └── bootstrap.min.css ├── fontawesome-all.min.css └── main.scss ├── img ├── atom-css-code-complete.png ├── eclipse-css-code-complete.png ├── favicon.svg ├── microsoft-logo-inverted.png ├── microsoft-logo.png ├── vs-rust-code-complete.png ├── vscode-css-code-complete.png └── vscode-ps-hover.png ├── index.html ├── js └── page.js ├── resources └── notes.md └── webfonts ├── fa-brands-400.eot ├── fa-brands-400.svg ├── fa-brands-400.ttf ├── fa-brands-400.woff ├── fa-brands-400.woff2 ├── fa-regular-400.eot ├── fa-regular-400.svg ├── fa-regular-400.ttf ├── fa-regular-400.woff ├── fa-regular-400.woff2 ├── fa-solid-900.eot ├── fa-solid-900.svg ├── fa-solid-900.ttf ├── fa-solid-900.woff └── fa-solid-900.woff2 /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | License.txt eol=crlf 4 | ThirdPartyNotices.txt eol=crlf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | _site/ 3 | .bundle/ 4 | vendor/ 5 | .jekyll-metadata -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.rulers": [ 3 | 80 4 | ], 5 | "cSpell.words": [ 6 | "ABAP", 7 | "EBNF", 8 | "LSIF", 9 | "Naur", 10 | "RGBA", 11 | "Retriggers", 12 | "Struct", 13 | "Sublime's", 14 | "Unregistration", 15 | "bibtex", 16 | "diagnostic's", 17 | "downcase", 18 | "hover's", 19 | "lightbulbs", 20 | "queryable", 21 | "quickfix", 22 | "refactorings", 23 | "retrigger", 24 | "sectionid", 25 | "textedit", 26 | "transactionally", 27 | "uhhhh", 28 | "uinteger", 29 | "unregister", 30 | "unregisterations", 31 | "unregistrations", 32 | "upcase", 33 | "workspaceedit" 34 | ], 35 | "git.branchProtection": [ 36 | "gh-pages" 37 | ] 38 | } -------------------------------------------------------------------------------- /.vscode/spellright.dict: -------------------------------------------------------------------------------- 1 | params 2 | BibTeX 3 | Coffeescript 4 | Dockerfile 5 | Ini 6 | LaTeX 7 | Makefile 8 | Powershell 9 | cshtml 10 | ShaderLab 11 | TeX 12 | TextDocumentPositionParams 13 | sectionid 14 | vscode 15 | vscode-jsonrpc 16 | vscode-languageserver-protocol 17 | boolean 18 | npm 19 | inlined 20 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "Jekyll", 8 | "type": "shell", 9 | "command": "bundle exec jekyll serve", 10 | "problemMatcher": [] 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |

The page you are looking for cannot be found.

7 |

404

8 |
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 | -------------------------------------------------------------------------------- /_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 |
11 |
12 | {{ content }} 13 |
14 |
15 | 16 | {% include footer.html %} 17 | {% include js_files.html %} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /_layouts/implementors.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |
8 |
9 | 19 |
20 |
21 | 22 | 37 | 38 |
39 | 40 |
41 |
42 |
43 | -------------------------------------------------------------------------------- /_layouts/overview.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |
8 |
9 | 18 |
19 |
20 | 21 | 33 | 34 |
35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /_layouts/redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirecting… 5 | 6 | 7 | 8 | 9 |

Redirecting…

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 |
36 | 37 | ```typescript 38 | export interface DeclarationOptions extends WorkDoneProgressOptions { 39 | } 40 | ``` 41 | 42 | _Registration Options_: `DeclarationRegistrationOptions` defined as follows: 43 | 44 |
45 | 46 | ```typescript 47 | export interface DeclarationRegistrationOptions extends DeclarationOptions, 48 | TextDocumentRegistrationOptions, StaticRegistrationOptions { 49 | } 50 | ``` 51 | 52 | _Request_: 53 | * method: `textDocument/declaration` 54 | * params: `DeclarationParams` defined as follows: 55 | 56 |
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 |
34 | 35 | ```typescript 36 | export interface DefinitionOptions extends WorkDoneProgressOptions { 37 | } 38 | ``` 39 | 40 | _Registration Options_: `DefinitionRegistrationOptions` defined as follows: 41 | 42 |
43 | 44 | ```typescript 45 | export interface DefinitionRegistrationOptions extends 46 | TextDocumentRegistrationOptions, DefinitionOptions { 47 | } 48 | ``` 49 | 50 | _Request_: 51 | * method: `textDocument/definition` 52 | * params: `DefinitionParams` defined as follows: 53 | 54 |
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 |
10 | 11 | ```typescript 12 | export interface DocumentRangeFormattingClientCapabilities { 13 | /** 14 | * Whether formatting supports dynamic registration. 15 | */ 16 | dynamicRegistration?: boolean; 17 | } 18 | ``` 19 | 20 | _Server Capability_: 21 | * property name (optional): `documentRangeFormattingProvider` 22 | * property type: `boolean | DocumentRangeFormattingOptions` where `DocumentRangeFormattingOptions` is defined as follows: 23 | 24 |
25 | 26 | ```typescript 27 | export interface DocumentRangeFormattingOptions extends 28 | WorkDoneProgressOptions { 29 | } 30 | ``` 31 | 32 | _Registration Options_: `DocumentFormattingRegistrationOptions` defined as follows: 33 | 34 |
35 | 36 | ```typescript 37 | export interface DocumentRangeFormattingRegistrationOptions extends 38 | TextDocumentRegistrationOptions, DocumentRangeFormattingOptions { 39 | } 40 | ``` 41 | 42 | _Request_: 43 | * method: `textDocument/rangeFormatting`, 44 | * params: `DocumentRangeFormattingParams` defined as follows: 45 | 46 |
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 |
10 | 11 | ```typescript 12 | export interface ReferenceClientCapabilities { 13 | /** 14 | * Whether references supports dynamic registration. 15 | */ 16 | dynamicRegistration?: boolean; 17 | } 18 | ``` 19 | 20 | _Server Capability_: 21 | * property name (optional): `referencesProvider` 22 | * property type: `boolean | ReferenceOptions` where `ReferenceOptions` is defined as follows: 23 | 24 |
25 | 26 | ```typescript 27 | export interface ReferenceOptions extends WorkDoneProgressOptions { 28 | } 29 | ``` 30 | 31 | _Registration Options_: `ReferenceRegistrationOptions` defined as follows: 32 | 33 |
34 | 35 | ```typescript 36 | export interface ReferenceRegistrationOptions extends 37 | TextDocumentRegistrationOptions, ReferenceOptions { 38 | } 39 | ``` 40 | 41 | _Request_: 42 | * method: `textDocument/references` 43 | * params: `ReferenceParams` defined as follows: 44 | 45 |
46 | 47 | ```typescript 48 | export interface ReferenceParams extends TextDocumentPositionParams, 49 | WorkDoneProgressParams, PartialResultParams { 50 | context: ReferenceContext; 51 | } 52 | ``` 53 | 54 |
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 |
24 | 25 | ```typescript 26 | export interface ConfigurationParams { 27 | items: ConfigurationItem[]; 28 | } 29 | ``` 30 | 31 |
32 | 33 | ```typescript 34 | export interface ConfigurationItem { 35 | /** 36 | * The scope to get the configuration section for. 37 | */ 38 | scopeUri?: URI; 39 | 40 | /** 41 | * The configuration section asked for. 42 | */ 43 | section?: string; 44 | } 45 | ``` 46 | 47 | _Response_: 48 | * result: LSPAny[] 49 | * error: code and message set in case an exception happens during the 'workspace/configuration' request 50 | -------------------------------------------------------------------------------- /_specifications/lsp/3.17/workspace/didChangeConfiguration.md: -------------------------------------------------------------------------------- 1 | #### DidChangeConfiguration Notification (:arrow_right:) 2 | 3 | A notification sent from the client to the server to signal the change of configuration settings. 4 | 5 | _Client Capability_: 6 | * property path (optional): `workspace.didChangeConfiguration` 7 | * property type: `DidChangeConfigurationClientCapabilities` defined as follows: 8 | 9 |
10 | 11 | ```typescript 12 | export interface DidChangeConfigurationClientCapabilities { 13 | /** 14 | * Did change configuration notification supports dynamic registration. 15 | * 16 | * @since 3.6.0 to support the new pull model. 17 | */ 18 | dynamicRegistration?: boolean; 19 | } 20 | ``` 21 | 22 | _Notification_: 23 | * method: 'workspace/didChangeConfiguration', 24 | * params: `DidChangeConfigurationParams` defined as follows: 25 | 26 |
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 |
18 | 19 | ```typescript 20 | export interface DidChangeWorkspaceFoldersParams { 21 | /** 22 | * The actual workspace folder change event. 23 | */ 24 | event: WorkspaceFoldersChangeEvent; 25 | } 26 | ``` 27 | 28 |
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 |
10 | 11 | ```typescript 12 | export interface ExecuteCommandClientCapabilities { 13 | /** 14 | * Execute command supports dynamic registration. 15 | */ 16 | dynamicRegistration?: boolean; 17 | } 18 | ``` 19 | 20 | _Server Capability_: 21 | * property path (optional): `executeCommandProvider` 22 | * property type: `ExecuteCommandOptions` defined as follows: 23 | 24 |
25 | 26 | ```typescript 27 | export interface ExecuteCommandOptions extends WorkDoneProgressOptions { 28 | /** 29 | * The commands to be executed on the server 30 | */ 31 | commands: string[]; 32 | } 33 | ``` 34 | 35 | _Registration Options_: `ExecuteCommandRegistrationOptions` defined as follows: 36 | 37 |
38 | 39 | ```typescript 40 | /** 41 | * Execute command registration options. 42 | */ 43 | export interface ExecuteCommandRegistrationOptions 44 | extends ExecuteCommandOptions { 45 | } 46 | ``` 47 | 48 | _Request_: 49 | * method: 'workspace/executeCommand' 50 | * params: `ExecuteCommandParams` defined as follows: 51 | 52 |
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 |
36 | 37 | ```typescript 38 | export interface DeclarationOptions extends WorkDoneProgressOptions { 39 | } 40 | ``` 41 | 42 | _Registration Options_: `DeclarationRegistrationOptions` defined as follows: 43 | 44 |
45 | 46 | ```typescript 47 | export interface DeclarationRegistrationOptions extends DeclarationOptions, 48 | TextDocumentRegistrationOptions, StaticRegistrationOptions { 49 | } 50 | ``` 51 | 52 | _Request_: 53 | * method: `textDocument/declaration` 54 | * params: `DeclarationParams` defined as follows: 55 | 56 |
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 |
34 | 35 | ```typescript 36 | export interface DefinitionOptions extends WorkDoneProgressOptions { 37 | } 38 | ``` 39 | 40 | _Registration Options_: `DefinitionRegistrationOptions` defined as follows: 41 | 42 |
43 | 44 | ```typescript 45 | export interface DefinitionRegistrationOptions extends 46 | TextDocumentRegistrationOptions, DefinitionOptions { 47 | } 48 | ``` 49 | 50 | _Request_: 51 | * method: `textDocument/definition` 52 | * params: `DefinitionParams` defined as follows: 53 | 54 |
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.18/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 |
10 | 11 | ```typescript 12 | export interface ReferenceClientCapabilities { 13 | /** 14 | * Whether references supports dynamic registration. 15 | */ 16 | dynamicRegistration?: boolean; 17 | } 18 | ``` 19 | 20 | _Server Capability_: 21 | * property name (optional): `referencesProvider` 22 | * property type: `boolean | ReferenceOptions` where `ReferenceOptions` is defined as follows: 23 | 24 |
25 | 26 | ```typescript 27 | export interface ReferenceOptions extends WorkDoneProgressOptions { 28 | } 29 | ``` 30 | 31 | _Registration Options_: `ReferenceRegistrationOptions` defined as follows: 32 | 33 |
34 | 35 | ```typescript 36 | export interface ReferenceRegistrationOptions extends 37 | TextDocumentRegistrationOptions, ReferenceOptions { 38 | } 39 | ``` 40 | 41 | _Request_: 42 | * method: `textDocument/references` 43 | * params: `ReferenceParams` defined as follows: 44 | 45 |
46 | 47 | ```typescript 48 | export interface ReferenceParams extends TextDocumentPositionParams, 49 | WorkDoneProgressParams, PartialResultParams { 50 | context: ReferenceContext; 51 | } 52 | ``` 53 | 54 |
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 |
24 | 25 | ```typescript 26 | export interface ConfigurationParams { 27 | items: ConfigurationItem[]; 28 | } 29 | ``` 30 | 31 |
32 | 33 | ```typescript 34 | export interface ConfigurationItem { 35 | /** 36 | * The scope to get the configuration section for. 37 | */ 38 | scopeUri?: URI; 39 | 40 | /** 41 | * The configuration section asked for. 42 | */ 43 | section?: string; 44 | } 45 | ``` 46 | 47 | _Response_: 48 | * result: LSPAny[] 49 | * error: code and message set in case an exception happens during the 'workspace/configuration' request 50 | -------------------------------------------------------------------------------- /_specifications/lsp/3.18/workspace/didChangeConfiguration.md: -------------------------------------------------------------------------------- 1 | #### DidChangeConfiguration Notification (:arrow_right:) 2 | 3 | A notification sent from the client to the server to signal the change of configuration settings. 4 | 5 | _Client Capability_: 6 | * property path (optional): `workspace.didChangeConfiguration` 7 | * property type: `DidChangeConfigurationClientCapabilities` defined as follows: 8 | 9 |
10 | 11 | ```typescript 12 | export interface DidChangeConfigurationClientCapabilities { 13 | /** 14 | * Did change configuration notification supports dynamic registration. 15 | * 16 | * @since 3.6.0 to support the new pull model. 17 | */ 18 | dynamicRegistration?: boolean; 19 | } 20 | ``` 21 | 22 | _Notification_: 23 | * method: 'workspace/didChangeConfiguration', 24 | * params: `DidChangeConfigurationParams` defined as follows: 25 | 26 |
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 |
18 | 19 | ```typescript 20 | export interface DidChangeWorkspaceFoldersParams { 21 | /** 22 | * The actual workspace folder change event. 23 | */ 24 | event: WorkspaceFoldersChangeEvent; 25 | } 26 | ``` 27 | 28 |
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 |
10 | 11 | ```typescript 12 | export interface ExecuteCommandClientCapabilities { 13 | /** 14 | * Execute command supports dynamic registration. 15 | */ 16 | dynamicRegistration?: boolean; 17 | } 18 | ``` 19 | 20 | _Server Capability_: 21 | * property path (optional): `executeCommandProvider` 22 | * property type: `ExecuteCommandOptions` defined as follows: 23 | 24 |
25 | 26 | ```typescript 27 | export interface ExecuteCommandOptions extends WorkDoneProgressOptions { 28 | /** 29 | * The commands to be executed on the server. 30 | */ 31 | commands: string[]; 32 | } 33 | ``` 34 | 35 | _Registration Options_: `ExecuteCommandRegistrationOptions` defined as follows: 36 | 37 |
38 | 39 | ```typescript 40 | /** 41 | * Execute command registration options. 42 | */ 43 | export interface ExecuteCommandRegistrationOptions 44 | extends ExecuteCommandOptions { 45 | } 46 | ``` 47 | 48 | _Request_: 49 | * method: 'workspace/executeCommand' 50 | * params: `ExecuteCommandParams` defined as follows: 51 | 52 |
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 | 2 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /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 --------------------------------------------------------------------------------