blob: f6074e87717af77ba9894912c2489609938cc5cd [file] [view]
---
title: "Gopls: Support for Go *.s assembly files"
---
Gopls has rudimentary support for LSP operations in Go assembly files.
Go assembly files have a `.s` file name extension. LSP clients need to
be configured to recognize `.s` files as Go assembly files, since this
file name extension is also used for assembly files in other
languages. A good heuristic is that if a file named `*.s` belongs to a
directory containing at least one `*.go` file, then the `.s` file is
Go assembly, and its appropriate language server is gopls.
The following requests are currently supported:
- Definition (`textDocument/definition`): on a reference to a symbol,
returns the location of its declaration. For example, a Definition
request on the `sigpanic` symbol in this file in
GOROOT/src/runtime/asm.s:
```asm
JMP ·sigpanic<ABIInternal>(SB)
```
returns the location of the function declaration in
GOROOT/src/runtime/signal_unix.go:
```go
//go:linkname sigpanic
func sigpanic() {
```
- References (`textDocument/references`): finds all references to the
symbol under the cursor, in both Go and assembly files within the
same package.
- Hover (`textDocument/hover`): reports the signature and doc comment
of the symbol's Go declaration.
- DocumentHighlight (`textDocument/documentHighlight`): highlights all
occurrences of the symbol, control label, or machine register under
the cursor. Labels and registers are scoped to the enclosing TEXT
function, and occurrences are classified as reads or writes.
Register highlighting requires the file name to carry a GOARCH
suffix (e.g. `foo_amd64.s`) and currently supports x86 (amd64, 386)
and arm64.
See also issue https://go.dev/issue/71754, which tracks the development of LSP
features in Go assembly files.