Skip to content

Commit ee6b06e

Browse files
committed
InoMapper now maps all .ino files in a project
1 parent 9b0a39b commit ee6b06e

File tree

5 files changed

+417
-237
lines changed

5 files changed

+417
-237
lines changed

Diff for: go.mod

+6
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ module github.com/bcmi-labs/arduino-language-server
33
go 1.12
44

55
require (
6+
github.com/arduino/go-paths-helper v1.3.2
67
github.com/arduino/go-properties-orderedmap v1.4.0
8+
github.com/davecgh/go-spew v1.1.1 // indirect
9+
github.com/kr/text v0.2.0 // indirect
10+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
711
github.com/pkg/errors v0.9.1
812
github.com/sourcegraph/go-lsp v0.0.0-20200429204803-219e11d77f5d
913
github.com/sourcegraph/jsonrpc2 v0.0.0-20200429184054-15c2290dcb37
14+
github.com/stretchr/testify v1.6.1
15+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
1016
)

Diff for: go.sum

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
11
github.com/arduino/go-paths-helper v1.0.1 h1:utYXLM2RfFlc9qp/MJTIYp3t6ux/xM6mWjeEb/WLK4Q=
22
github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck=
3+
github.com/arduino/go-paths-helper v1.3.2 h1:5U9TSKQODiwSVgTxskC0PNl0l0Vf40GUlp99Zy2SK8w=
4+
github.com/arduino/go-paths-helper v1.3.2/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck=
35
github.com/arduino/go-properties-orderedmap v1.4.0 h1:YEbbzPqm1gXWDM/Jaq8tlvmh09z2qeHPJTUw9/VA4Dk=
46
github.com/arduino/go-properties-orderedmap v1.4.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk=
7+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
58
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
69
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7-
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
8-
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
10+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
11+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
12+
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
913
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
10-
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
11-
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
14+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
15+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
16+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
17+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
18+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
19+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
1220
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
1321
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
1422
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1523
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
16-
github.com/sourcegraph/go-lsp v0.0.0-20181119182933-0c7d621186c1 h1:O1d7nVzpGmP5pGAZBSlp9TSpjNwwI0xThxhPd9oVJuU=
17-
github.com/sourcegraph/go-lsp v0.0.0-20181119182933-0c7d621186c1/go.mod h1:tpps84QRlOVVLYk5QpKYX8Tr289D1v/UTWDLqeguiqM=
1824
github.com/sourcegraph/go-lsp v0.0.0-20200429204803-219e11d77f5d h1:afLbh+ltiygTOB37ymZVwKlJwWZn+86syPTbrrOAydY=
1925
github.com/sourcegraph/go-lsp v0.0.0-20200429204803-219e11d77f5d/go.mod h1:SULmZY7YNBsvNiQbrb/BEDdEJ84TGnfyUQxaHt8t8rY=
20-
github.com/sourcegraph/jsonrpc2 v0.0.0-20190106185902-35a74f039c6a h1:jTZwOlrDhmk4Ez2vhWh7kA0eKUahp1lCO2uyM4fi/Qk=
21-
github.com/sourcegraph/jsonrpc2 v0.0.0-20190106185902-35a74f039c6a/go.mod h1:eESpbCslcLDs8j2D7IEdGVgul7xuk9odqDTaor30IUU=
2226
github.com/sourcegraph/jsonrpc2 v0.0.0-20200429184054-15c2290dcb37 h1:marA1XQDC7N870zmSFIoHZpIUduK80USeY0Rkuflgp4=
2327
github.com/sourcegraph/jsonrpc2 v0.0.0-20200429184054-15c2290dcb37/go.mod h1:ZafdZgk/axhT1cvZAPOhw+95nz2I/Ra5qMlU4gTRwIo=
2428
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
2529
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
2630
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
31+
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
32+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
33+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
34+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
35+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
36+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
37+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

Diff for: handler/handler.go

+27-32
Original file line numberDiff line numberDiff line change
@@ -210,30 +210,24 @@ func (handler *InoHandler) transformParamsToClangd(ctx context.Context, method s
210210
return
211211
}
212212

213-
func (handler *InoHandler) createFileData(ctx context.Context, sourceURI lsp.DocumentURI, sourceText string, version int) (*FileData, []byte, error) {
214-
sourcePath := uriToPath(sourceURI)
213+
func (handler *InoHandler) createFileData(ctx context.Context, inoSourceURI lsp.DocumentURI, sourceText string, version int) (*FileData, []byte, error) {
214+
log.Println("InoHandler: createFileData(", inoSourceURI, sourceText, version)
215+
sourcePath := uriToPath(inoSourceURI)
215216
targetPath, targetBytes, err := generateCpp([]byte(sourceText), sourcePath, handler.config.SelectedBoard.Fqbn)
216217
if err != nil {
217218
err = handler.handleError(ctx, err)
218-
if len(targetPath) == 0 {
219-
return nil, nil, err
220-
}
221-
// Fallback: use the source text unchanged
222-
targetBytes, err = copyIno2Cpp(sourceText, targetPath)
223-
if err != nil {
224-
return nil, nil, err
225-
}
219+
return nil, nil, err
226220
}
227221

228222
targetURI := pathToURI(targetPath)
229223
data := &FileData{
230224
sourceText,
231-
sourceURI,
225+
inoSourceURI,
232226
targetURI,
233227
sourcemapper.CreateInoMapper(bytes.NewReader(targetBytes)),
234228
version,
235229
}
236-
handler.data[sourceURI] = data
230+
handler.data[inoSourceURI] = data
237231
handler.data[targetURI] = data
238232
return data, targetBytes, nil
239233
}
@@ -263,7 +257,7 @@ func (handler *InoHandler) updateFileData(ctx context.Context, data *FileData, c
263257
// Fallback: try to apply a multi-line update
264258
data.sourceText = newSourceText
265259
data.sourceMap.Update(rang.End.Line-rang.Start.Line, rang.Start.Line, change.Text)
266-
*rang = data.sourceMap.InoToCppRange(*rang)
260+
*rang = data.sourceMap.InoToCppLSPRange(data.sourceURI, *rang)
267261
return nil
268262
}
269263
}
@@ -282,7 +276,7 @@ func (handler *InoHandler) updateFileData(ctx context.Context, data *FileData, c
282276
}
283277
data.sourceMap.Update(0, rang.Start.Line, change.Text)
284278

285-
*rang = data.sourceMap.InoToCppRange(*rang)
279+
*rang = data.sourceMap.InoToCppLSPRange(data.sourceURI, *rang)
286280
}
287281
return nil
288282
}
@@ -368,7 +362,7 @@ func (handler *InoHandler) ino2cppDidChangeTextDocumentParams(ctx context.Contex
368362
func (handler *InoHandler) ino2cppTextDocumentPositionParams(params *lsp.TextDocumentPositionParams) error {
369363
handler.ino2cppTextDocumentIdentifier(&params.TextDocument)
370364
if data, ok := handler.data[params.TextDocument.URI]; ok {
371-
targetLine := data.sourceMap.InoToCppLine(params.Position.Line)
365+
targetLine := data.sourceMap.InoToCppLine(data.sourceURI, params.Position.Line)
372366
params.Position.Line = targetLine
373367
return nil
374368
}
@@ -378,10 +372,10 @@ func (handler *InoHandler) ino2cppTextDocumentPositionParams(params *lsp.TextDoc
378372
func (handler *InoHandler) ino2cppCodeActionParams(params *lsp.CodeActionParams) error {
379373
handler.ino2cppTextDocumentIdentifier(&params.TextDocument)
380374
if data, ok := handler.data[params.TextDocument.URI]; ok {
381-
params.Range = data.sourceMap.InoToCppRange(params.Range)
375+
params.Range = data.sourceMap.InoToCppLSPRange(data.sourceURI, params.Range)
382376
for index := range params.Context.Diagnostics {
383377
r := &params.Context.Diagnostics[index].Range
384-
*r = data.sourceMap.InoToCppRange(*r)
378+
*r = data.sourceMap.InoToCppLSPRange(data.sourceURI, *r)
385379
}
386380
return nil
387381
}
@@ -391,7 +385,7 @@ func (handler *InoHandler) ino2cppCodeActionParams(params *lsp.CodeActionParams)
391385
func (handler *InoHandler) ino2cppDocumentRangeFormattingParams(params *lsp.DocumentRangeFormattingParams) error {
392386
handler.ino2cppTextDocumentIdentifier(&params.TextDocument)
393387
if data, ok := handler.data[params.TextDocument.URI]; ok {
394-
params.Range = data.sourceMap.InoToCppRange(params.Range)
388+
params.Range = data.sourceMap.InoToCppLSPRange(data.sourceURI, params.Range)
395389
return nil
396390
}
397391
return unknownURI(params.TextDocument.URI)
@@ -400,7 +394,7 @@ func (handler *InoHandler) ino2cppDocumentRangeFormattingParams(params *lsp.Docu
400394
func (handler *InoHandler) ino2cppDocumentOnTypeFormattingParams(params *lsp.DocumentOnTypeFormattingParams) error {
401395
handler.ino2cppTextDocumentIdentifier(&params.TextDocument)
402396
if data, ok := handler.data[params.TextDocument.URI]; ok {
403-
params.Position.Line = data.sourceMap.InoToCppLine(params.Position.Line)
397+
params.Position.Line = data.sourceMap.InoToCppLine(data.sourceURI, params.Position.Line)
404398
return nil
405399
}
406400
return unknownURI(params.TextDocument.URI)
@@ -409,7 +403,7 @@ func (handler *InoHandler) ino2cppDocumentOnTypeFormattingParams(params *lsp.Doc
409403
func (handler *InoHandler) ino2cppRenameParams(params *lsp.RenameParams) error {
410404
handler.ino2cppTextDocumentIdentifier(&params.TextDocument)
411405
if data, ok := handler.data[params.TextDocument.URI]; ok {
412-
params.Position.Line = data.sourceMap.InoToCppLine(params.Position.Line)
406+
params.Position.Line = data.sourceMap.InoToCppLine(data.sourceURI, params.Position.Line)
413407
return nil
414408
}
415409
return unknownURI(params.TextDocument.URI)
@@ -443,7 +437,7 @@ func (handler *InoHandler) ino2cppWorkspaceEdit(origEdit *lsp.WorkspaceEdit) *ls
443437
for index := range edit {
444438
newValue[index] = lsp.TextEdit{
445439
NewText: edit[index].NewText,
446-
Range: data.sourceMap.InoToCppRange(edit[index].Range),
440+
Range: data.sourceMap.InoToCppLSPRange(data.sourceURI, edit[index].Range),
447441
}
448442
}
449443
newEdit.Changes[string(data.targetURI)] = newValue
@@ -537,7 +531,7 @@ func (handler *InoHandler) cpp2inoCompletionList(list *lsp.CompletionList, uri l
537531
for _, item := range list.Items {
538532
if !strings.HasPrefix(item.InsertText, "_") {
539533
if item.TextEdit != nil {
540-
item.TextEdit.Range = data.sourceMap.CppToInoRange(item.TextEdit.Range)
534+
_, item.TextEdit.Range = data.sourceMap.CppToInoRange(item.TextEdit.Range)
541535
}
542536
newItems = append(newItems, item)
543537
}
@@ -550,7 +544,7 @@ func (handler *InoHandler) cpp2inoCodeAction(codeAction *CodeAction, uri lsp.Doc
550544
codeAction.Edit = handler.cpp2inoWorkspaceEdit(codeAction.Edit)
551545
if data, ok := handler.data[uri]; ok {
552546
for index := range codeAction.Diagnostics {
553-
codeAction.Diagnostics[index].Range = data.sourceMap.CppToInoRange(codeAction.Diagnostics[index].Range)
547+
_, codeAction.Diagnostics[index].Range = data.sourceMap.CppToInoRange(codeAction.Diagnostics[index].Range)
554548
}
555549
}
556550
}
@@ -570,9 +564,10 @@ func (handler *InoHandler) cpp2inoWorkspaceEdit(origEdit *lsp.WorkspaceEdit) *ls
570564
if data, ok := handler.data[lsp.DocumentURI(uri)]; ok {
571565
newValue := make([]lsp.TextEdit, len(edit))
572566
for index := range edit {
567+
_, newRange := data.sourceMap.CppToInoRange(edit[index].Range)
573568
newValue[index] = lsp.TextEdit{
574569
NewText: edit[index].NewText,
575-
Range: data.sourceMap.CppToInoRange(edit[index].Range),
570+
Range: newRange,
576571
}
577572
}
578573
newEdit.Changes[string(data.sourceURI)] = newValue
@@ -587,27 +582,27 @@ func (handler *InoHandler) cpp2inoHover(hover *Hover, uri lsp.DocumentURI) {
587582
if data, ok := handler.data[uri]; ok {
588583
r := hover.Range
589584
if r != nil {
590-
*r = data.sourceMap.CppToInoRange(*r)
585+
_, *r = data.sourceMap.CppToInoRange(*r)
591586
}
592587
}
593588
}
594589

595590
func (handler *InoHandler) cpp2inoLocation(location *lsp.Location) {
596591
if data, ok := handler.data[location.URI]; ok {
597592
location.URI = data.sourceURI
598-
location.Range = data.sourceMap.CppToInoRange(location.Range)
593+
_, location.Range = data.sourceMap.CppToInoRange(location.Range)
599594
}
600595
}
601596

602597
func (handler *InoHandler) cpp2inoDocumentHighlight(highlight *lsp.DocumentHighlight, uri lsp.DocumentURI) {
603598
if data, ok := handler.data[uri]; ok {
604-
highlight.Range = data.sourceMap.CppToInoRange(highlight.Range)
599+
_, highlight.Range = data.sourceMap.CppToInoRange(highlight.Range)
605600
}
606601
}
607602

608603
func (handler *InoHandler) cpp2inoTextEdit(edit *lsp.TextEdit, uri lsp.DocumentURI) {
609604
if data, ok := handler.data[uri]; ok {
610-
edit.Range = data.sourceMap.CppToInoRange(edit.Range)
605+
_, edit.Range = data.sourceMap.CppToInoRange(edit.Range)
611606
}
612607
}
613608

@@ -620,7 +615,7 @@ func (handler *InoHandler) cpp2inoDocumentSymbols(origSymbols []DocumentSymbol,
620615
symbolIdx := make(map[string]*DocumentSymbol)
621616
for i := 0; i < len(origSymbols); i++ {
622617
symbol := &origSymbols[i]
623-
symbol.Range = data.sourceMap.CppToInoRange(symbol.Range)
618+
_, symbol.Range = data.sourceMap.CppToInoRange(symbol.Range)
624619

625620
duplicate := false
626621
other, duplicate := symbolIdx[symbol.Name]
@@ -633,7 +628,7 @@ func (handler *InoHandler) cpp2inoDocumentSymbols(origSymbols []DocumentSymbol,
633628
}
634629
}
635630

636-
symbol.SelectionRange = data.sourceMap.CppToInoRange(symbol.SelectionRange)
631+
_, symbol.SelectionRange = data.sourceMap.CppToInoRange(symbol.SelectionRange)
637632
symbol.Children = handler.cpp2inoDocumentSymbols(symbol.Children, uri)
638633
symbolIdx[symbol.Name] = symbol
639634
}
@@ -722,9 +717,9 @@ func (handler *InoHandler) cpp2inoPublishDiagnosticsParams(params *lsp.PublishDi
722717
newDiagnostics := make([]lsp.Diagnostic, 0, len(params.Diagnostics))
723718
for index := range params.Diagnostics {
724719
r := &params.Diagnostics[index].Range
725-
if startLine, ok := data.sourceMap.CppToInoLineOk(r.Start.Line); ok {
720+
if _, startLine, ok := data.sourceMap.CppToInoLineOk(r.Start.Line); ok {
726721
r.Start.Line = startLine
727-
r.End.Line = data.sourceMap.CppToInoLine(r.End.Line)
722+
_, r.End.Line = data.sourceMap.CppToInoLine(r.End.Line)
728723
newDiagnostics = append(newDiagnostics, params.Diagnostics[index])
729724
}
730725
}

0 commit comments

Comments
 (0)