ArmLS is a language server for AArch64 assembly that offers a collection of modern code editor features such as in-editor diagnostics and on-hover documentation. It has builtin knowledge of the latest version of the architecture (v9.6) and implements the Language Server Protocol, making it compatible with many code editors.
ArmLS currently implements the following LSP functionality.
ArmLS can provide information about instruction mnemonics and their operands on hover.
ArmLS offers real-time diagnostics support, either through its own internal diagnostics engine or through error mapping from a specified clang
binary.
ArmLS provides completion suggestions for items like mnemonics, macros, and labels based on the cursor position.
ArmLS detects and provides a list of useful symbols to your editor, and supports jumping to definitions.
You can configure ArmLS to provide semantic highlighting to clients that support it, providing batteries-included syntax highlighting that can intelligently differentiate between symbol types.
ArmLS should be compatible with any LSP-compliant client, but has been explicitly tested in the following use cases.
ArmLS has a VS Code extension (vscode-armls) that you can download from the Visual Studio Marketplace or the Open VSX Registry.
The following examples use lspconfig.
Simple setup
local lspconfig = require("lspconfig")
local configs = require("lspconfig.configs")
configs.armls = {
default_config = {
cmd = { "<path-to-armls-binary>" },
root_dir = lspconfig.util.root_pattern(".git"),
filetypes = { "asm" },
},
}
configs.armls.setup({})
Granular internal diagnostics configuration (default settings)
configs.armls.setup({
settings = {
armls = {
diagnostics = {
enable = true,
disableCategories = {
-- "unrecognisedInstruction",
"invalidOperand",
"tooManyOperands",
"tooFewOperands",
},
},
},
})
External diagnostics configuration (default settings)
configs.armls.setup({
settings = {
armls = {
-- externalDiagnostics = {
-- clang = {
-- path = "/path/to/clang-executable",
-- args = { "--target=aarch64" },
-- },
-- },
},
},
})
To disable semantic highlighting in Neovim, delete the semanticTokensProvider
property in the armls
language server configuration.
To configure whether ArmLS provides validation diagnostics in Neovim, modify the enableDiagnostics
server setting.
ArmLS has been tested against the following versions of each major operating system:
- MacOS Sequoia
- Ubuntu 24.04
- Windows 11
ArmLS is in preview and has the current limitations:
- ArmLS does not support cross-file references
- ArmLS does not support C/C++ pre-processor syntax
- The internal diagnostics engine is alpha quality and might display false positives. We recommend that you use
clang
-powered diagnostics at this time.
To report bugs or request enhancements, use GitHub issues.