Getting Started =============== This document explains how to install *pygls* and get started writing language servers that are based on it. .. note:: Before going any further, if you are not familiar with *language servers* and *Language Server Protocol*, we recommend reading following articles: - `Language Server Protocol Overview `_ - `Language Server Protocol Specification `_ - `Language Server Protocol SDKs `_ Installation ------------ To get the latest release from *PyPI*, simply run: .. code:: console pip install pygls Alternatively, *pygls* source code can be downloaded from our `GitHub`_ page and installed with following command: .. code:: console pip install git+https://github.com/openlawlibrary/pygls Quick Start ----------- Spin the Server Up ~~~~~~~~~~~~~~~~~~ *pygls* is a language server that can be started without writing any additional code: .. code:: python from pygls.server import LanguageServer server = LanguageServer('example-server', 'v0.1') server.start_tcp('127.0.0.1', 8080) After running the code above, server will start listening for incoming ``Json RPC`` requests on ``http://127.0.0.1:8080``. Register Features and Commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *pygls* comes with an API for registering additional features like ``code completion``, ``find all references``, ``go to definition``, etc. .. code:: python @server.feature(TEXT_DOCUMENT_COMPLETION, CompletionOptions(trigger_characters=[','])) def completions(params: CompletionParams): """Returns completion items.""" return CompletionList( is_incomplete=False, items=[ CompletionItem(label='Item1'), CompletionItem(label='Item2'), CompletionItem(label='Item3'), ] ) … as well as custom commands: .. code:: python @server.command('myVerySpecialCommandName') def cmd_return_hello_world(ls, *args): return 'Hello World!' See the :mod:`lsprotocol.types` module for the complete and canonical list of available features. Tutorial -------- We recommend completing the :ref:`tutorial `, especially if you haven't worked with language servers before. User Guide ---------- To reveal the full potential of *pygls* (``thread management``, ``coroutines``, ``multi-root workspace``, ``TCP/STDIO communication``, etc.) keep reading. .. _GitHub: https://github.com/openlawlibrary/pygls