func()

in tools/go-agent/cmd/injector.go [283:318]


func (i *projectInjector) alreadyContainsLibraryImport(dir string) (bool, error) {
	readDir, err := os.ReadDir(dir)
	if err != nil {
		return false, fmt.Errorf("reding directory %s failure, %v", dir, err)
	}
	for _, f := range readDir {
		if f.IsDir() {
			continue
		}
		if !strings.HasSuffix(f.Name(), ".go") {
			continue
		}
		file, err := os.ReadFile(filepath.Join(dir, f.Name()))
		if err != nil {
			return false, fmt.Errorf("read file %s failed, %v", f.Name(), err)
		}

		dstFile, err := decorator.ParseFile(nil, f.Name(), file, parser.ImportsOnly)
		if err != nil {
			return false, fmt.Errorf("parsing file %s failed, %v", f.Name(), err)
		}

		var existingImport = false
		for _, decl := range dstFile.Decls {
			if gen, ok := decl.(*dst.GenDecl); ok && gen != nil && gen.Tok == token.IMPORT &&
				!existingImport && i.containsImport(gen) {
				existingImport = true
			}
		}
		if existingImport {
			return true, nil
		}
	}

	return false, nil
}