Skip to content
/ armls Public

AArch64 assembly Language Server. This is a mirror repository.

License

Notifications You must be signed in to change notification settings

arm/armls

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ArmLS (preview)

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.

Key features

ArmLS currently implements the following LSP functionality.

Hover

ArmLS can provide information about instruction mnemonics and their operands on hover.

Diagnostics

ArmLS offers real-time diagnostics support, either through its own internal diagnostics engine or through error mapping from a specified clang binary.

Completion

ArmLS provides completion suggestions for items like mnemonics, macros, and labels based on the cursor position.

Document symbols and goto definition

ArmLS detects and provides a list of useful symbols to your editor, and supports jumping to definitions.

Semantic highlighting

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.

Usage

ArmLS should be compatible with any LSP-compliant client, but has been explicitly tested in the following use cases.

VS Code

ArmLS has a VS Code extension (vscode-armls) that you can download from the Visual Studio Marketplace or the Open VSX Registry.

Neovim

The following examples use lspconfig.

Configuration

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" },
            --     },
            -- },
        },
    },
})
Semantic highlighting

To disable semantic highlighting in Neovim, delete the semanticTokensProvider property in the armls language server configuration.

Diagnostics

To configure whether ArmLS provides validation diagnostics in Neovim, modify the enableDiagnostics server setting.

Compatibility

ArmLS has been tested against the following versions of each major operating system:

  • MacOS Sequoia
  • Ubuntu 24.04
  • Windows 11

Current limitations

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.

Contact

To report bugs or request enhancements, use GitHub issues.

Related resources

About

AArch64 assembly Language Server. This is a mirror repository.

Resources

License

Security policy

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •