Skip to content

Commit 4401a25

Browse files
committed
sketchMapper: added info about preprocessed lines
1 parent d07b2ab commit 4401a25

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

Diff for: handler/sourcemapper/ino.go

+20-11
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import (
1111

1212
// InoMapper is a mapping between the .ino sketch and the preprocessed .cpp file
1313
type InoMapper struct {
14-
InoText map[lsp.DocumentURI]*SourceRevision
15-
CppText *SourceRevision
16-
CppFile lsp.DocumentURI
17-
toCpp map[InoLine]int // Converts File.ino:line -> line
18-
toIno map[int]InoLine // Convers line -> File.ino:line
14+
InoText map[lsp.DocumentURI]*SourceRevision
15+
CppText *SourceRevision
16+
CppFile lsp.DocumentURI
17+
toCpp map[InoLine]int // Converts File.ino:line -> line
18+
toIno map[int]InoLine // Convers line -> File.ino:line
19+
cppPreprocessed map[int]InoLine // map of the lines added by the preprocessor: preprocessed line -> File.ino:line
1920
}
2021

2122
type SourceRevision struct {
@@ -76,8 +77,9 @@ func (s *InoMapper) CppToInoLineOk(targetLine int) (string, int, bool) {
7677
// CreateInoMapper create a InoMapper from the given target file
7778
func CreateInoMapper(targetFile io.Reader) *InoMapper {
7879
mapper := &InoMapper{
79-
toCpp: map[InoLine]int{},
80-
toIno: map[int]InoLine{},
80+
toCpp: map[InoLine]int{},
81+
toIno: map[int]InoLine{},
82+
cppPreprocessed: map[int]InoLine{},
8183
}
8284

8385
sourceFile := ""
@@ -94,17 +96,24 @@ func CreateInoMapper(targetFile io.Reader) *InoMapper {
9496
}
9597
sourceFile = unquoteCppString(tokens[2])
9698
} else if sourceFile != "" {
97-
mapper.toCpp[InoLine{sourceFile, sourceLine}] = targetLine
98-
mapper.toIno[targetLine] = InoLine{sourceFile, sourceLine}
99+
mapper.mapLine(sourceFile, sourceLine, targetLine)
99100
sourceLine++
100101
}
101102
targetLine++
102103
}
103-
mapper.toCpp[InoLine{sourceFile, sourceLine}] = targetLine
104-
mapper.toIno[targetLine] = InoLine{sourceFile, sourceLine}
104+
mapper.mapLine(sourceFile, sourceLine, targetLine)
105105
return mapper
106106
}
107107

108+
func (s *InoMapper) mapLine(sourceFile string, sourceLine, targetLine int) {
109+
inoLine := InoLine{sourceFile, sourceLine}
110+
if line, ok := s.toCpp[inoLine]; ok {
111+
s.cppPreprocessed[line] = inoLine
112+
}
113+
s.toCpp[inoLine] = targetLine
114+
s.toIno[targetLine] = inoLine
115+
}
116+
108117
func unquoteCppString(str string) string {
109118
if len(str) >= 2 && strings.HasPrefix(str, `"`) && strings.HasSuffix(str, `"`) {
110119
str = strings.TrimSuffix(str, `"`)[1:]

Diff for: handler/sourcemapper/ino_test.go

+16-10
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ void loop() {
4343
}, sourceMap.toCpp)
4444
require.EqualValues(t, map[int]InoLine{
4545
3: {"sketch_july2a.ino", 0},
46-
5: {"sketch_july2a.ino", 1},
47-
7: {"sketch_july2a.ino", 6},
46+
5: {"sketch_july2a.ino", 1}, // setup
47+
7: {"sketch_july2a.ino", 6}, // loop
4848
9: {"sketch_july2a.ino", 1},
4949
10: {"sketch_july2a.ino", 2},
5050
11: {"sketch_july2a.ino", 3},
@@ -56,6 +56,10 @@ void loop() {
5656
17: {"sketch_july2a.ino", 9},
5757
18: {"sketch_july2a.ino", 10},
5858
}, sourceMap.toIno)
59+
require.EqualValues(t, map[int]InoLine{
60+
5: {"sketch_july2a.ino", 1}, // setup
61+
7: {"sketch_july2a.ino", 6}, // loop
62+
}, sourceMap.cppPreprocessed)
5963
}
6064

6165
func TestCreateMultifileSourceMap(t *testing.T) {
@@ -105,10 +109,6 @@ void secondFunction() {
105109
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 0}: 2,
106110
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 1}: 3,
107111
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 2}: 4,
108-
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3}: 6,
109-
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 8}: 8,
110-
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 22}: 10,
111-
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 1}: 12,
112112
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3}: 14,
113113
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 4}: 15,
114114
{"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 5}: 16,
@@ -141,10 +141,10 @@ void secondFunction() {
141141
2: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 0},
142142
3: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 1},
143143
4: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 2},
144-
6: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3},
145-
8: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 8},
146-
10: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 22},
147-
12: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 1},
144+
6: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3}, // setup
145+
8: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 8}, // loop
146+
10: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 22}, // vino
147+
12: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 1}, // secondFunction
148148
14: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3},
149149
15: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 4},
150150
16: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 5},
@@ -173,6 +173,12 @@ void secondFunction() {
173173
40: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 3},
174174
41: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 4},
175175
})
176+
require.EqualValues(t, map[int]InoLine{
177+
6: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 3}, // setup
178+
8: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 8}, // loop
179+
10: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/Prova_Spazio.ino", 22}, // vino
180+
12: {"/home/megabug/Workspace/sketchbook-cores-beta/Prova_Spazio/SecondTab.ino", 1}, // secondFunction
181+
}, sourceMap.cppPreprocessed)
176182
}
177183

178184
// func TestUpdateSourceMaps1(t *testing.T) {

0 commit comments

Comments
 (0)