ink-lsp-server 0.4.2

A Language Server Protocol (LSP) implementation for the ink! smart contract programming language.
Documentation
# <img src="https://raw.githubusercontent.com/ink-analyzer/ink-analyzer/master/images/squink.svg" width="32px" height="32px" style="margin-bottom: -3px"> ink! Language Server

A [Language Server Protocol (LSP)][LSP] implementation for the [ink!] smart contract programming language.

It implements the [Language Server Protocol (LSP)][LSP] and acts as a backend that provides language support features 
like diagnostic errors, code completion suggestions, code/intent actions, inlay hints, signature help and hover content 
to IDEs, code editors and other development tools.

It uses the [semantic analyzer][analyzer] as the engine for providing ink! language support features by:
- translating LSP requests into semantic analyzer interface calls.
- translating semantic analysis results into corresponding LSP types.

It additionally uses [rust-analyzer]'s [lsp-server][ra-lsp-server] crate 
to handle LSP protocol handshaking and parsing messages, and the [lsp-types] crate for LSP type definitions.

[LSP]: https://microsoft.github.io/language-server-protocol/ 
[ink!]: https://use.ink/
[analyzer]: https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/analyzer
[rust-analyzer]: https://github.com/rust-lang/rust-analyzer
[ra-lsp-server]: https://docs.rs/lsp-server/latest/lsp_server/
[lsp-types]: https://docs.rs/lsp-types/latest/lsp_types/

## Installation

### Option 1: Cargo (via [crates.io]https://crates.io/crates/ink-lsp-server)

Run

```shell
cargo install ink-lsp-server
```

### Option 2: Building from source

Run
```shell
git clone https://github.com/ink-analyzer/ink-analyzer.git
cd ink-analyzer
cargo build --bin ink-lsp-server --release
```

Copy the compiled binary (named `ink-lsp-server`) from the `target/release` directory 
to your preferred installation location, make sure the binary is executable 
and the installation location is included in the `PATH` environment variable.

## Usage

The installed ink! Language Server binary can be used with any [LSP client][LSP-client] 
that can be configured to launch an LSP server using an executable command 
(i.e. the path to the `ink-lsp-server` binary) and can use stdio (standard in/standard out) as the message transport.

While a few editors/IDEs have native/built-in LSP clients (e.g. [Neovim]), 
[most LSP clients are plugins/extensions for editors/IDEs][LSP-client].

[LSP-client]: https://microsoft.github.io/language-server-protocol/implementors/tools/
[Neovim]: https://neovim.io/doc/user/lsp.html

## Documentation

### Binary Documentation

`ink-lsp-server` binary help text.
```console
Language Server Protocol (LSP) implementation for the ink! smart contract programming language.

Usage: ink-lsp-server

Options:
  -h, --help     Print help
  -V, --version  Print version
```

### Library Documentation

<https://docs.rs/ink-lsp-server/latest/ink_lsp_server/>

Or you can access the library documentation locally by running the following command from the project root

```shell
cargo doc -p ink-lsp-server --open
```

## Testing

You can run unit and integration tests for all the core functionality by running the following command from the project root

```shell
cargo test -p ink-lsp-server
```

## License

Licensed under either [MIT] or [Apache-2.0] license at your option.

[MIT]: https://github.com/ink-analyzer/ink-analyzer/blob/master/LICENSE-MIT
[Apache-2.0]: https://github.com/ink-analyzer/ink-analyzer/blob/master/LICENSE-APACHE

## Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.