diff --git a/commands/compile/compile.go b/commands/compile/compile.go index 3fd155443f8..6b0d3b30fe8 100644 --- a/commands/compile/compile.go +++ b/commands/compile/compile.go @@ -30,6 +30,7 @@ import ( "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/builder/diagnostics" "github.com/arduino/arduino-cli/inventory" "github.com/arduino/arduino-cli/legacy/builder" "github.com/arduino/arduino-cli/legacy/builder/types" @@ -163,7 +164,25 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream return nil, err } + var allDiagnostics diagnostics.Diagnostics + defer func() { + r.Diagnostics = allDiagnostics.ToRPC() + }() + builderCtx := &types.Context{} + builderCtx.CompilerOutputParser = func(cmdline []string, out []byte) { + compiler := diagnostics.DetectCompilerFromCommandLine(cmdline, false /* at the moment compiler-probing is not required */) + if compiler == nil { + logrus.Warnf("Could not detect compiler from: %s", cmdline) + return + } + diags, err := diagnostics.ParseCompilerOutput(compiler, out) + if err != nil { + logrus.Warnf("Error parsing compiler output: %s", err) + return + } + allDiagnostics = append(allDiagnostics, diags...) + } builderCtx.PackageManager = pme if pme.GetProfile() != nil { builderCtx.LibrariesManager = lm