blob: a7b86c3691611045f0fe8b0b53e05d607eae82c6 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package langserver
import (
"strings"
"github.com/sourcegraph/go-lsp"
"fidl-lsp/state"
)
// handleFormat asks the Analyzer for the formatted version of the document
// specified in `params` and returns any resulting TextEdits, or an error.
//
// In practice, since fidl-format only runs on an entire document, when
// successful this will always return a single TextEdit spanning (and replacing)
// the entire document with its formatted version.
func (h *LangHandler) handleFormat(params lsp.DocumentFormattingParams) ([]lsp.TextEdit, error) {
formatted, err := h.analyzer.FormatFile(h.fs, state.FileID(params.TextDocument.URI))
if err != nil {
return nil, err
}
lines := strings.Split(formatted, "\n")
lastLine := lines[len(lines)-1]
lastChar := len([]rune(lastLine))
return []lsp.TextEdit{{
Range: lsp.Range{
Start: lsp.Position{},
End: lsp.Position{Line: len(lines), Character: lastChar},
},
NewText: formatted,
}}, nil
}