Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bergercookie/asm-lsp
Language server for NASM/GAS/GO Assembly
https://github.com/bergercookie/asm-lsp
assembly-language assembly-x86 assembly-x86-64 language-server language-server-protocol rust-lang
Last synced: about 2 months ago
JSON representation
Language server for NASM/GAS/GO Assembly
- Host: GitHub
- URL: https://github.com/bergercookie/asm-lsp
- Owner: bergercookie
- License: bsd-2-clause
- Created: 2020-07-12T17:34:51.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-05T00:49:38.000Z (6 months ago)
- Last Synced: 2024-05-02T02:58:24.532Z (5 months ago)
- Topics: assembly-language, assembly-x86, assembly-x86-64, language-server, language-server-protocol, rust-lang
- Language: Rust
- Homepage: https://crates.io/crates/asm-lsp
- Size: 6.62 MB
- Stars: 187
- Watchers: 8
- Forks: 10
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Language Server for GAS/GO Assembly
[![crates.io](https://img.shields.io/crates/v/asm-lsp.svg)](https://crates.io/crates/asm-lsp)
[![Tests](https://github.com/bergercookie/asm-lsp/actions/workflows/lint_and_test.yml/badge.svg)](https://github.com/bergercookie/asm-lsp/actions/workflows/lint_and_test.yml)## Goal
Provide hovering, autocompletion, signature help, go to definition, and view
references for assembly files written in the GAS/NASM or GO assembly flavors. It
supports assembly files for the x86, x86_64, and z80 instruction sets.This tool can serve as reference when reading the assembly output of a program.
This way you can query what each command exactly does and deliberate about
whether the compiler is producing the desired output or whether you have to
tweak your code for optimisation.## Installation
### Using cargo
Install using the cargo package manager, either from `crates.io` or from github:
```bash
cargo install asm-lsp
# or to get the latest version from github
cargo install --git https://github.com/bergercookie/asm-lsp
```## Set up as a language server
Add a section like the following in your `settings.json` file:
```json
"asm-lsp": {
"command": "asm-lsp",
"filetypes": [
"asm", "s", "S"
]
}
```### [OPTIONAL] Configure via `.asm-lsp.toml`
Add a `.asm-lsp.toml` file like the following to your project's root directory
and/or `~/.config/asm-lsp/` (project configs will override global configs) to
selectively target specific assemblers and/or instruction sets.```toml
version = "0.1"[assemblers]
gas = true
go = false
z80 = false[instruction_sets]
x86 = false
x86_64 = true
z80 = false
```### [OPTIONAL] Extend functionality via `compile_commands.json`/`compile_flags.txt`
Add a [`compile_commands.json`](https://clang.llvm.org/docs/JSONCompilationDatabase.html#format)
or [`compile_flags.txt`](https://clang.llvm.org/docs/JSONCompilationDatabase.html#alternatives)
file to your project's `build` directory to enable inline diagnostic features, as
well as to specify additional include directories for use in hover features.### VSCode Support
The project has not published any VSCode extension package yet. However, there is
a development extension in the [`editors/code`](https://github.com/bergercookie/asm-lsp/blob/master/editors/code/README.md)
directory with setup instructions.## Root directory must contain `.git`
The lsp searches for a `.git` directory to locate the root of your project.
Please be sure to run `git init` if your project is not already configured as a
git repository.## Demos / Features Documentation
### Hovering / Documentation support
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/hover.gif)
### Autocomplete
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/autocomplete.gif)
### Diagnostics
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/diagnostics.gif)
### Goto Definition
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/gotodef.gif)
### View References
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/references.gif)
### Signature Help
![](https://github.com/bergercookie/asm-lsp/blob/master/demo/signaturehelp.gif)
- Triggering signature help is dependent on your editor and LSP client.
- Using Neovim's built in LSP client, this can be done via the command
`:lua vim.lsp.buf.signature_help()`.
- Using coc, [this issue comment](https://github.com/neoclide/coc.nvim/issues/2656#issuecomment-845903417)
suggests the remap `inoremap ,s =CocActionAsync('showSignatureHelp')`
to trigger signature help in insert mode.## Acknowledgements
Current rust package builds on top of the [opcodes python
package](https://github.com/Maratyszcza/Opcodes)