|
| 1 | +--- |
| 2 | +title: Using LSP servers with {% data variables.copilot.copilot_cli %} |
| 3 | +shortTitle: LSP servers |
| 4 | +allowTitleToDifferFromFilename: true |
| 5 | +intro: 'LSP servers give {% data variables.copilot.copilot_cli_short %} precise code intelligence, enabling it to navigate definitions, find references, and rename symbols accurately across your project.' |
| 6 | +versions: |
| 7 | + feature: copilot |
| 8 | +contentType: concepts |
| 9 | +docsTeamMetrics: |
| 10 | + - copilot-cli |
| 11 | +category: |
| 12 | + - Learn about Copilot # Copilot discovery page |
| 13 | + - Learn about Copilot CLI # Copilot CLI bespoke page |
| 14 | +--- |
| 15 | + |
| 16 | +## Introduction |
| 17 | + |
| 18 | +The Language Server Protocol (LSP) is an open standard used for communication between a code editor and a language server. A language server is a process that provides language-specific features like go-to-definition and renaming a code symbol across your codebase. An "LSP server" is any language server that supports the Language Server Protocol. |
| 19 | + |
| 20 | +{% data variables.copilot.copilot_cli %} can use LSP servers to understand the structure of your code more precisely. By adding and configuring an LSP server for each programming language in your project, you'll give {% data variables.copilot.copilot_cli_short %} a better understanding of your code. |
| 21 | + |
| 22 | +## Benefits of LSP servers |
| 23 | + |
| 24 | +* **Accuracy**: Results come from the language's own compiler/analyzer, providing an understanding of the structure of your code. This improves {% data variables.product.prodname_copilot_short %}'s precision when it works with your code. For example, when {% data variables.product.prodname_copilot_short %} can use "go to definition" it will find the actual definition, not a text match that looks similar. |
| 25 | +* **Token efficiency**: Operations like "list all symbols" or "find references" return compact structured results instead of requiring the agent to read entire files into the conversation. |
| 26 | +* **Safe refactoring**: When you rename a symbol, the LSP server reliably updates every reference across the project. |
| 27 | +* **Speed**: Language servers index your project in the background, allowing near-instant responses. |
| 28 | + |
| 29 | +## What LSP servers allow {% data variables.copilot.copilot_cli_short %} to do |
| 30 | + |
| 31 | +When LSP servers are available, {% data variables.copilot.copilot_cli_short %} uses them automatically. You don't need to explicitly request it. {% data variables.copilot.copilot_cli_short %} will use an LSP server rather than text-based search whenever it can access an LSP server for the programming language you're using. |
| 32 | + |
| 33 | +The following language server operations are supported: |
| 34 | + |
| 35 | +| Operation | What it does | |
| 36 | +|-----------|-------------| |
| 37 | +| Go to definition | Jumps to where a symbol (function, class, variable) is defined. | |
| 38 | +| Find references | Finds every location where a symbol is used. | |
| 39 | +| Hover | Retrieves type information and documentation for a symbol. | |
| 40 | +| Rename | Renames a symbol across the entire project, updating all references. | |
| 41 | +| Document symbols | Lists all symbols defined in a file. | |
| 42 | +| Workspace symbol search | Searches for symbols by name across the project. | |
| 43 | +| Go to implementation | Finds implementations of an interface or abstract method. | |
| 44 | +| Incoming calls | Shows which functions call a given function. | |
| 45 | +| Outgoing calls | Shows which functions a given function calls. | |
| 46 | + |
| 47 | +{% data variables.product.prodname_copilot_short %} selects the most appropriate LSP operation based on your prompt. For example, if you ask "where is `handlePayment` defined?", {% data variables.product.prodname_copilot_short %} will use the go-to-definition operation. |
| 48 | + |
| 49 | +## How to add an LSP server |
| 50 | + |
| 51 | +For {% data variables.copilot.copilot_cli_short %} to be able to use an LSP server, you must first install the server software on your local machine and then configure it in one of the configuration files that {% data variables.copilot.copilot_cli_short %} reads on startup. See [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers). |
| 52 | + |
| 53 | +An LSP server may also be added as part of a CLI plugin that you choose to install. A plugin might include an LSP server if, for example, it's designed to work with an uncommon programming language or a framework-specific file type. LSP servers included as part of a plugin are automatically available when you install the plugin—no additional configuration is needed. If you uninstall the plugin, the LSP server is removed. For more information, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-cli-plugins). |
| 54 | + |
| 55 | +## How LSP servers are loaded |
| 56 | + |
| 57 | +When {% data variables.copilot.copilot_cli %} starts, it loads LSP server configurations from multiple sources with the following priority (highest to lowest): |
| 58 | + |
| 59 | +1. **Project config**: `.github/lsp.json` in the current repository. |
| 60 | +1. **Plugin configs**: language servers provided by installed plugins. |
| 61 | +1. **User config**: `~/.copilot/lsp-config.json`. |
| 62 | + |
| 63 | +Higher-priority configurations override lower-priority ones with the same server name. This means a project can customize or disable language servers for all contributors. |
| 64 | + |
| 65 | +Once the working directory is trusted, {% data variables.copilot.copilot_cli_short %} automatically starts any LSP servers that are relevant to your project, in the background, so they are ready to respond immediately when needed. |
| 66 | + |
| 67 | +## Next steps |
| 68 | + |
| 69 | +* [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers) |
| 70 | + |
| 71 | +## Further reading |
| 72 | + |
| 73 | +* [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) on the Microsoft website |
| 74 | +* [AUTOTITLE](/copilot/reference/cli-command-reference) |
0 commit comments