github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/language/c/conan/conan.go (about)

     1  package conan
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  
     7  	"golang.org/x/xerrors"
     8  
     9  	"github.com/aquasecurity/go-dep-parser/pkg/c/conan"
    10  	"github.com/devseccon/trivy/pkg/fanal/analyzer"
    11  	"github.com/devseccon/trivy/pkg/fanal/analyzer/language"
    12  	"github.com/devseccon/trivy/pkg/fanal/types"
    13  )
    14  
    15  func init() {
    16  	analyzer.RegisterAnalyzer(&conanLockAnalyzer{})
    17  }
    18  
    19  const (
    20  	version = 1
    21  )
    22  
    23  // conanLockAnalyzer analyzes conan.lock
    24  type conanLockAnalyzer struct{}
    25  
    26  func (a conanLockAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) {
    27  	p := conan.NewParser()
    28  	res, err := language.Analyze(types.Conan, input.FilePath, input.Content, p)
    29  	if err != nil {
    30  		return nil, xerrors.Errorf("%s parse error: %w", input.FilePath, err)
    31  	}
    32  	return res, nil
    33  }
    34  
    35  func (a conanLockAnalyzer) Required(_ string, fileInfo os.FileInfo) bool {
    36  	// Lock file name can be anything
    37  	// cf. https://docs.conan.io/en/latest/versioning/lockfiles/introduction.html#locking-dependencies
    38  	// By default, we only check the default filename - `conan.lock`.
    39  	return fileInfo.Name() == types.ConanLock
    40  }
    41  
    42  func (a conanLockAnalyzer) Type() analyzer.Type {
    43  	return analyzer.TypeConanLock
    44  }
    45  
    46  func (a conanLockAnalyzer) Version() int {
    47  	return version
    48  }