Skip to content

Commit 4cbf9f3

Browse files
committed
Handle special case in text-edits
1 parent 83d82b5 commit 4cbf9f3

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

Diff for: ls/ls.go

+19
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,25 @@ func (ls *INOLanguageServer) cpp2inoWorkspaceEdit(logger jsonrpc.FunctionLogger,
14881488

14891489
func (ls *INOLanguageServer) cpp2inoTextEdit(logger jsonrpc.FunctionLogger, cppURI lsp.DocumentURI, cppEdit lsp.TextEdit) (lsp.DocumentURI, lsp.TextEdit, bool, error) {
14901490
inoURI, inoRange, inPreprocessed, err := ls.clang2IdeRangeAndDocumentURI(logger, cppURI, cppEdit.Range)
1491+
1492+
if err != nil {
1493+
if strings.HasPrefix(cppEdit.NewText, "\n") && cppEdit.Range.Start.Line < cppEdit.Range.End.Line {
1494+
// Special case: the text-edit may start from the very end of a not-ino section and fallthrough
1495+
// in the .ino section with a '\n...' at the beginning of the replacement text.
1496+
nextLine := lsp.Position{Line: cppEdit.Range.Start.Line + 1, Character: 0}
1497+
startOffset, err1 := textedits.GetOffset(ls.sketchMapper.CppText.Text, cppEdit.Range.Start)
1498+
nextOffset, err2 := textedits.GetOffset(ls.sketchMapper.CppText.Text, nextLine)
1499+
if err1 == nil && err2 == nil && startOffset+1 == nextOffset {
1500+
// In this can we can generate an equivalent text-edit that fits entirely in the .ino section
1501+
// by removing the redundant '\n' and by offsetting the start location to the beginning of the
1502+
// next line.
1503+
cppEdit.Range.Start = nextLine
1504+
cppEdit.NewText = cppEdit.NewText[1:]
1505+
return ls.cpp2inoTextEdit(logger, cppURI, cppEdit)
1506+
}
1507+
}
1508+
}
1509+
14911510
inoEdit := cppEdit
14921511
inoEdit.Range = inoRange
14931512
return inoURI, inoEdit, inPreprocessed, err

0 commit comments

Comments
 (0)