func (s *InoMapper) InoToCppLSPRange(sourceURI lsp.DocumentURI, r lsp.Range) lsp.Range {
	res := r
	res.Start.Line = s.InoToCppLine(sourceURI, r.Start.Line)
	res.End.Line = s.InoToCppLine(sourceURI, r.End.Line)
	return res
}
InoToCppLSPRange convert a lsp.Ranger reference to a .ino into a lsp.Range to .cpp
package sourcemapper
import (
	"bufio"
	"bytes"
	"fmt"
	"log"
	"sort"
	"strconv"
	"strings"
	"github.com/arduino/arduino-language-server/handler/textutils"
	"github.com/arduino/arduino-language-server/lsp"
	"github.com/arduino/go-paths-helper"
	"github.com/pkg/errors"
)
type InoMapper struct {
	CppText         *SourceRevision
	toCpp           map[InoLine]int  
	toIno           map[int]InoLine  
	inoPreprocessed map[InoLine]int  
	cppPreprocessed map[int]InoLine  
}
var NotIno = InoLine{"/not-ino", 0}
var NotInoURI, _ = lsp.NewDocumentURIFromURL("file:///not-ino")
type SourceRevision struct {
	Version int
	Text    string
}
type InoLine struct {
	File string
	Line int
}
func (s *InoMapper) InoToCppLine(sourceURI lsp.DocumentURI, line int) int {
	return s.toCpp[InoLine{sourceURI.AsPath().String(), line}]
}
func (s *InoMapper) InoToCppLineOk(sourceURI lsp.DocumentURI, line int) (int, bool) {
	res, ok := s.toCpp[InoLine{sourceURI.AsPath().String(), line}]
	return res, ok
}