internal/lsp/position.go (45 lines of code) (raw):

package lsp import ( "github.com/Azure/azapi-lsp/internal/filesystem" lsp "github.com/Azure/azapi-lsp/internal/protocol" "github.com/hashicorp/hcl/v2" ) type filePosition struct { fh *fileHandler pos hcl.Pos } func (p *filePosition) Position() hcl.Pos { return p.pos } func (p *filePosition) URI() string { return p.fh.URI() } func (p *filePosition) FullPath() string { return p.fh.FullPath() } func (p *filePosition) Dir() string { return p.fh.Dir() } func (p *filePosition) Filename() string { return p.fh.Filename() } func FilePositionFromDocumentPosition(params lsp.TextDocumentPositionParams, f File) (*filePosition, error) { byteOffset, err := filesystem.ByteOffsetForPos(f.Lines(), lspPosToFsPos(params.Position)) if err != nil { return nil, err } return &filePosition{ fh: FileHandlerFromDocumentURI(params.TextDocument.URI), pos: hcl.Pos{ Line: int(params.Position.Line) + 1, Column: int(params.Position.Character) + 1, Byte: byteOffset, }, }, nil } func lspPosToFsPos(pos lsp.Position) filesystem.Pos { return filesystem.Pos{ Line: int(pos.Line), Column: int(pos.Character), } }