Skip to content

Commit 0a6f354

Browse files
committed
Fix tests for new Parse signature and add new test for multifile
1 parent 9b3f6b8 commit 0a6f354

File tree

4 files changed

+105
-21
lines changed

4 files changed

+105
-21
lines changed

src/arduino.cc/builder/ctags/ctags_parser_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func produceTags(t *testing.T, filename string) []*types.CTag {
4444
require.NoError(t, err)
4545

4646
parser := CTagsParser{}
47-
return parser.Parse(string(bytes))
47+
return parser.Parse(string(bytes), "")
4848
}
4949

5050
func TestCTagsParserShouldListPrototypes(t *testing.T) {

src/arduino.cc/builder/ctags/ctags_to_prototypes_test.go

+27-18
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ import (
3838
"github.com/stretchr/testify/require"
3939
)
4040

41-
func producePrototypes(t *testing.T, filename string) ([]*types.Prototype, int) {
41+
func producePrototypes(t *testing.T, filename string, mainFile string) ([]*types.Prototype, int) {
4242
bytes, err := ioutil.ReadFile(filepath.Join("test_data", filename))
4343
require.NoError(t, err)
4444

4545
parser := &CTagsParser{}
46-
parser.Parse(string(bytes))
46+
parser.Parse(string(bytes), mainFile)
4747
return parser.GeneratePrototypes()
4848
}
4949

5050
func TestCTagsToPrototypesShouldListPrototypes(t *testing.T) {
51-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListPrototypes.txt")
51+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListPrototypes.txt", "/tmp/sketch7210316334309249705.cpp")
5252
require.Equal(t, 5, len(prototypes))
5353
require.Equal(t, "void setup();", prototypes[0].Prototype)
5454
require.Equal(t, "/tmp/sketch7210316334309249705.cpp", prototypes[0].File)
@@ -61,7 +61,7 @@ func TestCTagsToPrototypesShouldListPrototypes(t *testing.T) {
6161
}
6262

6363
func TestCTagsToPrototypesShouldListTemplates(t *testing.T) {
64-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListTemplates.txt")
64+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListTemplates.txt", "/tmp/sketch8398023134925534708.cpp")
6565

6666
require.Equal(t, 3, len(prototypes))
6767
require.Equal(t, "template <typename T> T minimum (T a, T b);", prototypes[0].Prototype)
@@ -73,7 +73,7 @@ func TestCTagsToPrototypesShouldListTemplates(t *testing.T) {
7373
}
7474

7575
func TestCTagsToPrototypesShouldListTemplates2(t *testing.T) {
76-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListTemplates2.txt")
76+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldListTemplates2.txt", "/tmp/sketch463160524247569568.cpp")
7777

7878
require.Equal(t, 4, len(prototypes))
7979
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -86,15 +86,15 @@ func TestCTagsToPrototypesShouldListTemplates2(t *testing.T) {
8686
}
8787

8888
func TestCTagsToPrototypesShouldDealWithClasses(t *testing.T) {
89-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithClasses.txt")
89+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithClasses.txt", "/tmp/sketch9043227824785312266.cpp")
9090

9191
require.Equal(t, 0, len(prototypes))
9292

9393
require.Equal(t, 8, line)
9494
}
9595

9696
func TestCTagsToPrototypesShouldDealWithStructs(t *testing.T) {
97-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithStructs.txt")
97+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithStructs.txt", "/tmp/sketch8930345717354294915.cpp")
9898

9999
require.Equal(t, 3, len(prototypes))
100100
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -106,7 +106,7 @@ func TestCTagsToPrototypesShouldDealWithStructs(t *testing.T) {
106106
}
107107

108108
func TestCTagsToPrototypesShouldDealWithMacros(t *testing.T) {
109-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithMacros.txt")
109+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealWithMacros.txt", "/tmp/sketch5976699731718729500.cpp")
110110

111111
require.Equal(t, 5, len(prototypes))
112112
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -120,7 +120,7 @@ func TestCTagsToPrototypesShouldDealWithMacros(t *testing.T) {
120120
}
121121

122122
func TestCTagsToPrototypesShouldDealFunctionWithDifferentSignatures(t *testing.T) {
123-
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt")
123+
prototypes, line := producePrototypes(t, "TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt", "/tmp/test260613593/preproc/ctags_target.cpp")
124124

125125
require.Equal(t, 1, len(prototypes))
126126
require.Equal(t, "boolean getBytes( byte addr, int amount );", prototypes[0].Prototype)
@@ -130,7 +130,7 @@ func TestCTagsToPrototypesShouldDealFunctionWithDifferentSignatures(t *testing.T
130130
}
131131

132132
func TestCTagsToPrototypesClassMembersAreFilteredOut(t *testing.T) {
133-
prototypes, line := producePrototypes(t, "TestCTagsParserClassMembersAreFilteredOut.txt")
133+
prototypes, line := producePrototypes(t, "TestCTagsParserClassMembersAreFilteredOut.txt", "/tmp/test834438754/preproc/ctags_target.cpp")
134134

135135
require.Equal(t, 2, len(prototypes))
136136
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -141,7 +141,7 @@ func TestCTagsToPrototypesClassMembersAreFilteredOut(t *testing.T) {
141141
}
142142

143143
func TestCTagsToPrototypesStructWithFunctions(t *testing.T) {
144-
prototypes, line := producePrototypes(t, "TestCTagsParserStructWithFunctions.txt")
144+
prototypes, line := producePrototypes(t, "TestCTagsParserStructWithFunctions.txt", "/tmp/build7315640391316178285.tmp/preproc/ctags_target.cpp")
145145

146146
require.Equal(t, 2, len(prototypes))
147147
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -152,7 +152,7 @@ func TestCTagsToPrototypesStructWithFunctions(t *testing.T) {
152152
}
153153

154154
func TestCTagsToPrototypesDefaultArguments(t *testing.T) {
155-
prototypes, line := producePrototypes(t, "TestCTagsParserDefaultArguments.txt")
155+
prototypes, line := producePrototypes(t, "TestCTagsParserDefaultArguments.txt", "/tmp/test179252494/preproc/ctags_target.cpp")
156156

157157
require.Equal(t, 3, len(prototypes))
158158
require.Equal(t, "void test(int x = 1);", prototypes[0].Prototype)
@@ -164,7 +164,7 @@ func TestCTagsToPrototypesDefaultArguments(t *testing.T) {
164164
}
165165

166166
func TestCTagsToPrototypesNamespace(t *testing.T) {
167-
prototypes, line := producePrototypes(t, "TestCTagsParserNamespace.txt")
167+
prototypes, line := producePrototypes(t, "TestCTagsParserNamespace.txt", "/tmp/test030883150/preproc/ctags_target.cpp")
168168

169169
require.Equal(t, 2, len(prototypes))
170170
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -175,7 +175,7 @@ func TestCTagsToPrototypesNamespace(t *testing.T) {
175175
}
176176

177177
func TestCTagsToPrototypesStatic(t *testing.T) {
178-
prototypes, line := producePrototypes(t, "TestCTagsParserStatic.txt")
178+
prototypes, line := producePrototypes(t, "TestCTagsParserStatic.txt", "/tmp/test542833488/preproc/ctags_target.cpp")
179179

180180
require.Equal(t, 3, len(prototypes))
181181
require.Equal(t, "void setup();", prototypes[0].Prototype)
@@ -188,7 +188,7 @@ func TestCTagsToPrototypesStatic(t *testing.T) {
188188
}
189189

190190
func TestCTagsToPrototypesFunctionPointer(t *testing.T) {
191-
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointer.txt")
191+
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointer.txt", "/tmp/test547238273/preproc/ctags_target.cpp")
192192

193193
require.Equal(t, 3, len(prototypes))
194194
require.Equal(t, "void t1Callback();", prototypes[0].Prototype)
@@ -200,7 +200,7 @@ func TestCTagsToPrototypesFunctionPointer(t *testing.T) {
200200
}
201201

202202
func TestCTagsToPrototypesFunctionPointers(t *testing.T) {
203-
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointers.txt")
203+
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointers.txt", "/tmp/test907446433/preproc/ctags_target.cpp")
204204
require.Equal(t, 2, len(prototypes))
205205
require.Equal(t, "void setup();", prototypes[0].Prototype)
206206
require.Equal(t, "/tmp/test907446433/preproc/ctags_target.cpp", prototypes[0].File)
@@ -210,7 +210,7 @@ func TestCTagsToPrototypesFunctionPointers(t *testing.T) {
210210
}
211211

212212
func TestCTagsToPrototypesFunctionPointersNoIndirect(t *testing.T) {
213-
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointersNoIndirect.txt")
213+
prototypes, line := producePrototypes(t, "TestCTagsParserFunctionPointersNoIndirect.txt", "/tmp/test547238273/preproc/bug_callback.ino")
214214
require.Equal(t, 5, len(prototypes))
215215
require.Equal(t, "void setup();", prototypes[0].Prototype)
216216
require.Equal(t, "/tmp/test547238273/preproc/bug_callback.ino", prototypes[0].File)
@@ -220,10 +220,19 @@ func TestCTagsToPrototypesFunctionPointersNoIndirect(t *testing.T) {
220220
}
221221

222222
func TestCTagsRunnerSketchWithClassFunction(t *testing.T) {
223-
prototypes, _ := producePrototypes(t, "TestCTagsRunnerSketchWithClassFunction.txt")
223+
prototypes, _ := producePrototypes(t, "TestCTagsRunnerSketchWithClassFunction.txt", "/home/megabug/Workspace/arduino-builder/src/arduino.cc/builder/test/sketch_class_function/sketch_class_function.ino")
224224

225225
require.Equal(t, 3, len(prototypes))
226226
require.Equal(t, "void setup();", prototypes[0].Prototype)
227227
require.Equal(t, "void loop();", prototypes[1].Prototype)
228228
require.Equal(t, "void asdf();", prototypes[2].Prototype)
229229
}
230+
231+
func TestCTagsRunnerSketchWithMultiFile(t *testing.T) {
232+
prototypes, line := producePrototypes(t, "TestCTagsRunnerSketchWithMultifile.txt", "/tmp/apUNI8a/main.ino")
233+
234+
require.Equal(t, 0, line)
235+
require.Equal(t, "void A7105_Setup();", prototypes[0].Prototype)
236+
require.Equal(t, "void A7105_Reset();", prototypes[1].Prototype)
237+
require.Equal(t, "int A7105_calibrate_VCB(uint8_t channel);", prototypes[2].Prototype)
238+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
allowed_ch /tmp/apUNI8a/a7105.ino /^const uint8_t allowed_ch[] = {0x14, 0x1e, 0x28, 0x32, 0x3c, 0x46, 0x50, 0x5a, 0x64, 0x6e, 0x78, 0x82};$/;" kind:variable line:21
2+
no_allowed_channels /tmp/apUNI8a/a7105.ino /^int no_allowed_channels = 12;$/;" kind:variable line:22
3+
A7105_Setup /tmp/apUNI8a/a7105.ino /^void A7105_Setup() {$/;" kind:function line:26 signature:() returntype:void
4+
A7105_Reset /tmp/apUNI8a/a7105.ino /^void A7105_Reset()$/;" kind:function line:43 signature:() returntype:void
5+
A7105_calibrate_IF /tmp/apUNI8a/a7105.ino /^int A7105_calibrate_IF() {$/;"kind:function line:52 signature:() returntype:int
6+
A7105_calibrate_VCB /tmp/apUNI8a/a7105.ino /^int A7105_calibrate_VCB(uint8_t channel) {$/;" kind:function line:87 signature:(uint8_t channel) returntype:int
7+
A7105_SetPower /tmp/apUNI8a/a7105.ino /^void A7105_SetPower(int power)$/;" kind:function line:120 signature:(int power) returntype:void
8+
A7105_Strobe /tmp/apUNI8a/a7105.ino /^void A7105_Strobe(enum A7105_State state);$/;" kind:prototype line:176 signature:(enum A7105_State state) returntype:void
9+
A7105_Strobe /tmp/apUNI8a/a7105.ino /^void A7105_Strobe(enum A7105_State state)$/;" kind:function line:179 signature:(enum A7105_State state) returntype:void
10+
A7105_WriteReg /tmp/apUNI8a/a7105.ino /^void A7105_WriteReg(uint8_t address, uint8_t data)$/;" kind:function line:190 signature:(uint8_t address, uint8_t data) returntype:void
11+
A7105_ReadReg /tmp/apUNI8a/a7105.ino /^uint8_t A7105_ReadReg(uint8_t address)$/;" kind:function line:197 signature:(uint8_t address) returntype:uint8_t
12+
A7105_WriteData /tmp/apUNI8a/a7105.ino /^void A7105_WriteData(uint8_t *dpbuffer, uint8_t len, uint8_t channel)$/;" kind:function line:211 signature:(uint8_t *dpbuffer, uint8_t len, uint8_t channel) returntype:void
13+
A7105_ReadData /tmp/apUNI8a/a7105.ino /^void A7105_ReadData(uint8_t *dpbuffer, uint8_t len)$/;" kind:function line:229 signature:(uint8_t *dpbuffer, uint8_t len) returntype:void
14+
A7105_WriteID /tmp/apUNI8a/a7105.ino /^void A7105_WriteID(unsigned long id)$/;" kind:function line:247 signature:(unsigned long id) returntype:void
15+
A7105_ReadID /tmp/apUNI8a/a7105.ino /^void A7105_ReadID()$/;" kind:function line:258 signature:() returntype:void
16+
k13 /tmp/apUNI8a/a7105.ino /^unsigned char k13;$/;" kind:variable line:272
17+
make_test_packet /tmp/apUNI8a/a7105.ino /^void make_test_packet(uint8_t testpacket[]) {$/;" kind:function line:275 signature:(uint8_t testpacket[]) returntype:void
18+
printpacket /tmp/apUNI8a/a7105.ino /^void printpacket(uint8_t packet[]) {$/;" kind:function line:295 signature:(uint8_t packet[]) returntype:void
19+
A7105_shoutchannel /tmp/apUNI8a/a7105.ino /^void A7105_shoutchannel() {$/;" kind:function line:308 signature:() returntype:void
20+
A7105_oneShout /tmp/apUNI8a/a7105.ino /^int A7105_oneShout() {$/;" kind:function line:337 signature:() returntype:int
21+
A7105_oneShoutRAM /tmp/apUNI8a/a7105.ino /^int A7105_oneShoutRAM(unsigned char xState, unsigned char xType) {$/;" kind:function line:361 signature:(unsigned char xState, unsigned char xType) returntype:int
22+
eavesdrop /tmp/apUNI8a/a7105.ino /^void eavesdrop() {$/;" kind:function line:391 signature:() returntype:void
23+
A7105_findchannel /tmp/apUNI8a/a7105.ino /^uint8_t A7105_findchannel() {$/;" kind:function line:442 signature:() returntype:uint8_t
24+
A7105_sniffchannel /tmp/apUNI8a/a7105.ino /^int A7105_sniffchannel() {$/;"kind:function line:464 signature:() returntype:int
25+
A7105_sniffchannel /tmp/apUNI8a/a7105.ino /^void A7105_sniffchannel(uint8_t _channel) {$/;" kind:function line:484 signature:(uint8_t _channel) returntype:void
26+
A7105_scanchannels /tmp/apUNI8a/a7105.ino /^void A7105_scanchannels(const uint8_t channels[]) {$/;" kind:function line:498 signature:(const uint8_t channels[]) returntype:void
27+
Channels /tmp/apUNI8a/hubsan.ino /^volatile int16_t Channels[12];$/;" kind:variable line:6
28+
initialize /tmp/apUNI8a/hubsan.ino /^static void initialize() {$/;" kind:function line:8 signature:() returntype:void
29+
hubsan_init /tmp/apUNI8a/hubsan.ino /^int hubsan_init()$/;" kind:function line:22 signature:() returntype:int
30+
update_crc /tmp/apUNI8a/hubsan.ino /^static void update_crc()$/;" kind:function line:80 signature:() returntype:void
31+
recdState /tmp/apUNI8a/main.ino /^unsigned char recdState, recdType;$/;"kind:variable line:5
32+
recdType /tmp/apUNI8a/main.ino /^unsigned char recdState, recdType;$/;"kind:variable line:5
33+
retries /tmp/apUNI8a/main.ino /^unsigned char retries;$/;" kind:variable line:6
34+
bwMap /tmp/apUNI8a/main.ino /^const unsigned char bwMap[4 \/* new cycle green yellow red blue (green) *\/] = {2, 6, 4, 1};$/;" kind:variable line:27
35+
bwButton /tmp/apUNI8a/main.ino /^unsigned char bwButton, bwCycle;$/;" kind:variable line:28
36+
bwCycle /tmp/apUNI8a/main.ino /^unsigned char bwButton, bwCycle;$/;" kind:variable line:28
37+
checkBW /tmp/apUNI8a/main.ino /^void checkBW(void); \/* watch button increment bwCycle *\/$/;" kind:prototype line:29 signature:(void) returntype:void
38+
ledState /tmp/apUNI8a/main.ino /^unsigned char ledState;$/;" kind:variable line:31
39+
mySwitches /tmp/apUNI8a/main.ino /^unsigned char mySwitches;$/;" kind:variable line:32
40+
BWMODE /tmp/apUNI8a/main.ino /^unsigned char BWMODE, BLINKMODE;$/;" kind:variable line:34
41+
BLINKMODE /tmp/apUNI8a/main.ino /^unsigned char BWMODE, BLINKMODE;$/;" kind:variable line:34
42+
lightFSM /tmp/apUNI8a/main.ino /^void lightFSM(void);$/;" kind:prototype line:36 signature:(void) returntype:void
43+
blinkLEDs /tmp/apUNI8a/main.ino /^void blinkLEDs(void);$/;" kind:prototype line:37 signature:(void) returntype:void
44+
touchTimer /tmp/apUNI8a/main.ino /^unsigned touchTimer, lastTouch;$/;" kind:variable line:38
45+
lastTouch /tmp/apUNI8a/main.ino /^unsigned touchTimer, lastTouch;$/;" kind:variable line:38
46+
lightTimer /tmp/apUNI8a/main.ino /^unsigned char lightTimer;$/;" kind:variable line:40
47+
lamp /tmp/apUNI8a/main.ino /^unsigned int lamp;$/;" kind:variable line:45
48+
loops /tmp/apUNI8a/main.ino /^unsigned long loops;$/;" kind:variable line:46
49+
recFlag /tmp/apUNI8a/main.ino /^unsigned char recFlag; \/\/ have "we" asked for a packet?$/;" kind:variable line:48
50+
needAck /tmp/apUNI8a/main.ino /^unsigned char needAck;$/;" kind:variable line:49
51+
fsmFSM /tmp/apUNI8a/main.ino /^void fsmFSM(void);$/;" kind:prototype line:51 signature:(void) returntype:void
52+
printFlag /tmp/apUNI8a/main.ino /^unsigned int printFlag;$/;" kind:variable line:52
53+
fsmTimer /tmp/apUNI8a/main.ino /^unsigned long fsmTimer;$/;" kind:variable line:53
54+
startval /tmp/apUNI8a/main.ino /^uint8_t startval, command;$/;" kind:variable line:57
55+
command /tmp/apUNI8a/main.ino /^uint8_t startval, command;$/;" kind:variable line:57
56+
iCnt /tmp/apUNI8a/main.ino /^int iCnt;$/;" kind:variable line:58
57+
myMessage /tmp/apUNI8a/main.ino /^char myMessage[8];$/;" kind:variable line:60
58+
ackMessage /tmp/apUNI8a/main.ino /^char ackMessage[8];$/;" kind:variable line:61
59+
setup /tmp/apUNI8a/main.ino /^void setup() {$/;" kind:function line:63signature:() returntype:void
60+
valid /tmp/apUNI8a/main.ino /^unsigned char valid;$/;" kind:variable line:114
61+
loop /tmp/apUNI8a/main.ino /^void loop() {$/;" kind:function line:116signature:() returntype:void
62+
listeni /tmp/apUNI8a/main.ino /^void listeni()$/;" kind:function line:165signature:() returntype:void
63+
kickIt /tmp/apUNI8a/main.ino /^void kickIt(unsigned char xType)$/;" kind:function line:172 signature:(unsigned char xType) returntype:void
64+
lightFSM /tmp/apUNI8a/main.ino /^void lightFSM()$/;" kind:function line:181 signature:() returntype:void
65+
touchFSM /tmp/apUNI8a/main.ino /^void touchFSM()$/;" kind:function line:188 signature:() returntype:void
66+
tween /tmp/apUNI8a/main.ino /^unsigned char tween[4] = {3, 5, 7, 11};$/;" kind:variable line:206
67+
fsmFSM /tmp/apUNI8a/main.ino /^void fsmFSM()$/;" kind:function line:207signature:() returntype:void
68+
doBW /tmp/apUNI8a/main.ino /^void doBW(void) {$/;" kind:function line:243signature:(void) returntype:void
69+
checkBW /tmp/apUNI8a/main.ino /^void checkBW()$/;" kind:function line:249signature:() returntype:void
70+
getSwitches /tmp/apUNI8a/main.ino /^unsigned char getSwitches()$/;" kind:function line:260 signature:() returntype:unsigned char
71+
xxLamp /tmp/apUNI8a/main.ino /^unsigned char xxLamp;$/;" kind:variable line:292
72+
setLEDs /tmp/apUNI8a/main.ino /^void setLEDs(unsigned char xx)$/;" kind:function line:294 signature:(unsigned char xx) returntype:void
73+
blinks /tmp/apUNI8a/main.ino /^const unsigned char blinks[8] = {0, 1, 0, 1, 0, 0, 1, 1};$/;" kind:variable line:311
74+
blinkLEDs /tmp/apUNI8a/main.ino /^void blinkLEDs()$/;" kind:function line:312 signature:() returntype:void
75+
proto_state /tmp/apUNI8a/protocol.ino /^static uint8_t proto_state;$/;" kind:variable line:4
76+
bind_time /tmp/apUNI8a/protocol.ino /^static uint32_t bind_time;$/;"kind:variable line:5
77+
PROTOCOL_SetBindState /tmp/apUNI8a/protocol.ino /^void PROTOCOL_SetBindState(uint32_t msec)$/;" kind:function line:11 signature:(uint32_t msec) returntype:void

src/arduino.cc/builder/ctags_runner.go

-2
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ func (s *CTagsRunner) Run(ctx *types.Context) error {
7676
parser := &ctags.CTagsParser{}
7777
ctx.CTagsOfPreprocessedSource = parser.Parse(ctx.CTagsOutput, ctx.Sketch.MainFile.Name)
7878

79-
parser.FixCLinkageTagsDeclarations(ctx.CTagsOfPreprocessedSource)
80-
8179
protos, line := parser.GeneratePrototypes()
8280
if line != -1 {
8381
ctx.PrototypesLineWhereToInsert = line

0 commit comments

Comments
 (0)