Git Product home page Git Product logo

lsprotocol's Introduction

Language Server Protocol types code generator

This repository contains a Python implementation of a Language Server Protocol types and classes code generator for various languages.

It simplifies the creation of language servers for different programming languages by providing a robust and easy-to-use type generation system.

Usage

You will need a Python environment to run the generator. Here are the steps:

  1. Create a Python environment: python -m venv .venv

    Note: Python 3.8 is the minimum supported version

  2. Install this repo's tool: python -m pip install git+https://github.com/microsoft/lsprotocol.git
  3. Run your plugin. For example: python -m generator --plugin dotnet --output-dir ./code

Command line

Clone this repository and run generator as a Python module.

>python -m generator --help
usage: __main__.py [-h] [--model [MODEL [MODEL ...]]] --plugin PLUGIN
                   [--output-dir OUTPUT_DIR]

Generate types from LSP JSON model.

optional arguments:
  -h, --help            show this help message and exit
  --model [MODEL [MODEL ...]], -m [MODEL [MODEL ...]]
                        Path to a model JSON file. By default uses packaged
                        model file.
  --plugin PLUGIN, -p PLUGIN
                        Name of a builtin plugin module. By default uses all
                        plugins.
  --output-dir OUTPUT_DIR, -o OUTPUT_DIR
                        Path to a directory where the generated content is

Using Nox

This project uses Nox as a task runner to run the code generator. You can install Nox and run a build_lsp session to generate code from the spec available in this repo.

> python -m pip install nox
> nox --session build_lsp

You can also use Nox to format code, run tests and run various tasks. Run nox --list to see all available tasks.

Contributing plugins

Adding a new plugin

Follow these steps to generate boilerplate code for a new plugin:

  1. Create a virtual environment for Python using Python >= 3.8 and activate that environment.
    1. If you are using the Python extension for VS Code, you can just run the Python: Create Environment command from the Command Palette. Be sure to select all the requirements.txt files in the repo. This command will install all packages needed and select the newly created environment for you.
  2. Ensure nox is installed.
    1. Run nox --list in the terminal. If Nox is installed, you should see a list of all available sessions. Otherwise, run python -m pip install nox in the activated environment you created above.
  3. Run nox --session create_plugin and follow the prompts to create a new plugin.

Example:

> nox --session create_plugin
nox > Running session create_plugin
nox > Creating virtual environment (virtualenv) using python.exe in .nox\create_plugin
Enter the name of the plugin: java
nox > Created plugin java.
nox > Session create_plugin was successful.

Supported plugins

Below is the list of plugins already created using this package.

Language Plugin Module Package Status
Python generator.plugins.python PyPI Active
Rust generator.plugins.rust Under development
Dotnet generator.plugins.dotnet Under development

lsprotocol's People

Contributors

alcarney avatar anthonykim1 avatar dependabot[bot] avatar dimbleby avatar jhossbach avatar karthiknadig avatar lramos15 avatar luabud avatar microsoft-github-operations[bot] avatar microsoftopensource avatar muffinmad avatar r3m0t avatar rzhao271 avatar timheuer avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.