diff --git a/internal/arduino/builder/builder.go b/internal/arduino/builder/builder.go index f0cb472b676..303caaa2063 100644 --- a/internal/arduino/builder/builder.go +++ b/internal/arduino/builder/builder.go @@ -25,7 +25,6 @@ import ( "github.com/arduino/arduino-cli/internal/arduino/builder/internal/compilation" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/detector" - "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnosticmanager" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/logger" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/progress" @@ -94,7 +93,7 @@ type Builder struct { toolEnv []string - diagnosticsManager *diagnosticmanager.Manager + diagnosticStore *diagnostics.Store } // buildArtifacts contains the result of various build @@ -195,7 +194,7 @@ func NewBuilder( logger.Warn(string(verboseOut)) } - diagnosticmanager := diagnosticmanager.New() + diagnosticStore := diagnostics.NewStore() b := &Builder{ sketch: sk, buildProperties: buildProperties, @@ -228,13 +227,13 @@ func NewBuilder( buildProperties.GetPath("runtime.platform.path"), buildProperties.GetPath("build.core.path"), // TODO can we buildCorePath ? ), - diagnosticsManager: diagnosticmanager, + diagnosticStore: diagnosticStore, libsDetector: detector.NewSketchLibrariesDetector( libsManager, libsResolver, useCachedLibrariesResolution, onlyUpdateCompilationDatabase, logger, - diagnosticmanager, + diagnosticStore, ), } return b, nil @@ -262,7 +261,7 @@ func (b *Builder) ImportedLibraries() libraries.List { // CompilerDiagnostics returns the parsed compiler diagnostics func (b *Builder) CompilerDiagnostics() diagnostics.Diagnostics { - return b.diagnosticsManager.CompilerDiagnostics() + return b.diagnosticStore.Diagnostics() } // Preprocess fixdoc diff --git a/internal/arduino/builder/compilation.go b/internal/arduino/builder/compilation.go index a30ad500622..69fa1c7974b 100644 --- a/internal/arduino/builder/compilation.go +++ b/internal/arduino/builder/compilation.go @@ -166,9 +166,9 @@ func (b *Builder) compileFileWithRecipe( b.logger.WriteStderr(commandStderr.Bytes()) // Parse the output of the compiler to gather errors and warnings... - if b.diagnosticsManager != nil { - b.diagnosticsManager.Parse(command.GetArgs(), commandStdout.Bytes()) - b.diagnosticsManager.Parse(command.GetArgs(), commandStderr.Bytes()) + if b.diagnosticStore != nil { + b.diagnosticStore.Parse(command.GetArgs(), commandStdout.Bytes()) + b.diagnosticStore.Parse(command.GetArgs(), commandStderr.Bytes()) } // ...and then return the error diff --git a/internal/arduino/builder/internal/detector/detector.go b/internal/arduino/builder/internal/detector/detector.go index 3ca45774c26..46fa991a132 100644 --- a/internal/arduino/builder/internal/detector/detector.go +++ b/internal/arduino/builder/internal/detector/detector.go @@ -26,7 +26,7 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnosticmanager" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/logger" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor" "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" @@ -58,7 +58,7 @@ type SketchLibrariesDetector struct { librariesResolutionResults map[string]libraryResolutionResult includeFolders paths.PathList logger *logger.BuilderLogger - diagnosticManager *diagnosticmanager.Manager + diagnosticStore *diagnostics.Store } // NewSketchLibrariesDetector todo @@ -68,7 +68,7 @@ func NewSketchLibrariesDetector( useCachedLibrariesResolution bool, onlyUpdateCompilationDatabase bool, logger *logger.BuilderLogger, - diagnosticManager *diagnosticmanager.Manager, + diagnosticStore *diagnostics.Store, ) *SketchLibrariesDetector { return &SketchLibrariesDetector{ librariesManager: lm, @@ -79,7 +79,7 @@ func NewSketchLibrariesDetector( includeFolders: paths.PathList{}, onlyUpdateCompilationDatabase: onlyUpdateCompilationDatabase, logger: logger, - diagnosticManager: diagnosticManager, + diagnosticStore: diagnosticStore, } } @@ -392,11 +392,11 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( // deleted, so hopefully the next compilation will succeed. return errors.New(tr("Internal error in cache")) } - l.diagnosticManager.Parse(result.Args(), result.Stderr()) + l.diagnosticStore.Parse(result.Args(), result.Stderr()) l.logger.WriteStderr(result.Stderr()) return err } - l.diagnosticManager.Parse(preprocFirstResult.Args(), preprocFirstResult.Stderr()) + l.diagnosticStore.Parse(preprocFirstResult.Args(), preprocFirstResult.Stderr()) l.logger.WriteStderr(preprocFirstResult.Stderr()) return preprocErr } diff --git a/internal/arduino/builder/internal/diagnosticmanager/diagnosticmanager.go b/internal/arduino/builder/internal/diagnosticmanager/diagnosticmanager.go deleted file mode 100644 index d57bd1d5198..00000000000 --- a/internal/arduino/builder/internal/diagnosticmanager/diagnosticmanager.go +++ /dev/null @@ -1,37 +0,0 @@ -package diagnosticmanager - -import ( - "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" - "github.com/sirupsen/logrus" -) - -type Manager struct { - results diagnostics.Diagnostics - lastInsertIndex int -} - -func New() *Manager { - return &Manager{lastInsertIndex: -1} -} - -func (m *Manager) Parse(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 - } - m.lastInsertIndex += len(diags) - m.results = append(m.results, diags...) -} - -func (m *Manager) CompilerDiagnostics() diagnostics.Diagnostics { - return m.results -} diff --git a/internal/arduino/builder/internal/diagnostics/store.go b/internal/arduino/builder/internal/diagnostics/store.go new file mode 100644 index 00000000000..4c8e3783653 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/store.go @@ -0,0 +1,34 @@ +package diagnostics + +import ( + "github.com/sirupsen/logrus" +) + +type Store struct { + results Diagnostics +} + +func NewStore() *Store { + return &Store{} +} + +func (m *Store) Parse(cmdline []string, out []byte) { + compiler := 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 := ParseCompilerOutput(compiler, out) + if err != nil { + logrus.Warnf("Error parsing compiler output: %s", err) + return + } + m.results = append(m.results, diags...) +} + +func (m *Store) Diagnostics() Diagnostics { + return m.results +} diff --git a/internal/arduino/builder/preprocess_sketch.go b/internal/arduino/builder/preprocess_sketch.go index f88618fd10d..75110adaa29 100644 --- a/internal/arduino/builder/preprocess_sketch.go +++ b/internal/arduino/builder/preprocess_sketch.go @@ -32,7 +32,7 @@ func (b *Builder) preprocessSketch(includes paths.PathList) error { } else { b.logger.WriteStdout(result.Stderr()) } - b.diagnosticsManager.Parse(result.Args(), result.Stderr()) + b.diagnosticStore.Parse(result.Args(), result.Stderr()) return err }