@@ -92,7 +92,7 @@ func (r *SketchRebuilder) rebuilderLoop() {
92
92
r .cancel = cancel
93
93
r .mutex .Unlock ()
94
94
95
- if err := r .doRebuild (ctx , logger ); err != nil {
95
+ if err := r .doRebuildArduinoPreprocessedSketch (ctx , logger ); err != nil {
96
96
logger .Logf ("Error: %s" , err )
97
97
}
98
98
@@ -104,10 +104,9 @@ func (r *SketchRebuilder) rebuilderLoop() {
104
104
}
105
105
}
106
106
107
- func (r * SketchRebuilder ) doRebuild (ctx context.Context , logger jsonrpc.FunctionLogger ) error {
107
+ func (r * SketchRebuilder ) doRebuildArduinoPreprocessedSketch (ctx context.Context , logger jsonrpc.FunctionLogger ) error {
108
108
ls := r .ls
109
-
110
- if success , err := ls .generateBuildEnvironment (ctx , logger ); err != nil {
109
+ if success , err := ls .generateBuildEnvironment (ctx , ! r .ls .config .SkipLibrariesDiscoveryOnRebuild , logger ); err != nil {
111
110
return err
112
111
} else if ! success {
113
112
return fmt .Errorf ("build failed" )
@@ -123,14 +122,10 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
123
122
default :
124
123
}
125
124
126
- if err := ls .buildPath .Join ("compile_commands.json" ).CopyTo (ls .compileCommandsDir .Join ("compile_commands.json" )); err != nil {
127
- logger .Logf ("ERROR: updating compile_commands: %s" , err )
128
- }
129
-
130
125
if cppContent , err := ls .buildSketchCpp .ReadFile (); err == nil {
131
- oldVesrion := ls .sketchMapper .CppText .Version
126
+ oldVersion := ls .sketchMapper .CppText .Version
132
127
ls .sketchMapper = sourcemapper .CreateInoMapper (cppContent )
133
- ls .sketchMapper .CppText .Version = oldVesrion + 1
128
+ ls .sketchMapper .CppText .Version = oldVersion + 1
134
129
ls .sketchMapper .DebugLogAll ()
135
130
} else {
136
131
return errors .WithMessage (err , "reading generated cpp file from sketch" )
@@ -143,7 +138,7 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
143
138
TextDocument : lsp.TextDocumentIdentifier {URI : cppURI },
144
139
}
145
140
if err := ls .Clangd .conn .TextDocumentDidSave (didSaveParams ); err != nil {
146
- logger .Logf ("error reinitilizing clangd:" , err )
141
+ logger .Logf ("error reinitializing clangd:" , err )
147
142
return err
148
143
}
149
144
@@ -159,18 +154,24 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
159
154
},
160
155
}
161
156
if err := ls .Clangd .conn .TextDocumentDidChange (didChangeParams ); err != nil {
162
- logger .Logf ("error reinitilizing clangd:" , err )
157
+ logger .Logf ("error reinitializing clangd:" , err )
163
158
return err
164
159
}
165
160
166
161
return nil
167
162
}
168
163
169
- func (ls * INOLanguageServer ) generateBuildEnvironment (ctx context.Context , logger jsonrpc.FunctionLogger ) (bool , error ) {
164
+ func (ls * INOLanguageServer ) generateBuildEnvironment (ctx context.Context , fullBuild bool , logger jsonrpc.FunctionLogger ) (bool , error ) {
165
+ var buildPath * paths.Path
166
+ if fullBuild {
167
+ buildPath = ls .fullBuildPath
168
+ } else {
169
+ buildPath = ls .buildPath
170
+ }
171
+
170
172
// Extract all build information from language server status
171
173
ls .readLock (logger , false )
172
174
sketchRoot := ls .sketchRoot
173
- buildPath := ls .buildPath
174
175
config := ls .config
175
176
type overridesFile struct {
176
177
Overrides map [string ]string `json:"overrides"`
@@ -204,6 +205,7 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
204
205
BuildPath : buildPath .String (),
205
206
CreateCompilationDatabaseOnly : true ,
206
207
Verbose : true ,
208
+ SkipLibrariesDiscovery : ! fullBuild ,
207
209
}
208
210
compileReqJson , _ := json .MarshalIndent (compileReq , "" , " " )
209
211
logger .Logf ("Running build with: %s" , string (compileReqJson ))
@@ -264,9 +266,12 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
264
266
"--source-override" , overridesJSON .String (),
265
267
"--build-path" , buildPath .String (),
266
268
"--format" , "json" ,
267
- //"--clean",
268
- sketchRoot .String (),
269
269
}
270
+ if ! fullBuild {
271
+ args = append (args , "--skip-libraries-discovery" )
272
+ }
273
+ args = append (args , sketchRoot .String ())
274
+
270
275
cmd , err := executils .NewProcess (nil , args ... )
271
276
if err != nil {
272
277
return false , errors .Errorf ("running %s: %s" , strings .Join (args , " " ), err )
@@ -298,6 +303,11 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
298
303
success = res .Success
299
304
}
300
305
306
+ if fullBuild {
307
+ ls .CopyFullBuildResults (logger , buildPath )
308
+ return ls .generateBuildEnvironment (ctx , false , logger )
309
+ }
310
+
301
311
// TODO: do canonicalization directly in `arduino-cli`
302
312
canonicalizeCompileCommandsJSON (buildPath .Join ("compile_commands.json" ))
303
313
0 commit comments