From e3633c91628b471a2b6d7451d8e6ce69ec878e81 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Mon, 18 Jul 2022 17:16:02 +0200 Subject: [PATCH] gci: remove the use of stdin Co-authored-by: Tom Moulard --- pkg/golinters/gci.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/pkg/golinters/gci.go b/pkg/golinters/gci.go index 72c1776fde0b..199bf948865a 100644 --- a/pkg/golinters/gci.go +++ b/pkg/golinters/gci.go @@ -7,6 +7,11 @@ import ( gcicfg "github.com/daixiang0/gci/pkg/config" "github.com/daixiang0/gci/pkg/gci" + "github.com/daixiang0/gci/pkg/io" + "github.com/daixiang0/gci/pkg/log" + "github.com/hexops/gotextdiff" + "github.com/hexops/gotextdiff/myers" + "github.com/hexops/gotextdiff/span" "github.com/pkg/errors" "golang.org/x/tools/go/analysis" @@ -81,7 +86,7 @@ func runGci(pass *analysis.Pass, lintCtx *linter.Context, cfg *gcicfg.Config, lo } var diffs []string - err := gci.DiffFormattedFilesToArray(fileNames, *cfg, &diffs, lock) + err := diffFormattedFilesToArray(fileNames, *cfg, &diffs, lock) if err != nil { return nil, err } @@ -106,6 +111,25 @@ func runGci(pass *analysis.Pass, lintCtx *linter.Context, cfg *gcicfg.Config, lo return issues, nil } +// diffFormattedFilesToArray is a copy of gci.DiffFormattedFilesToArray without io.StdInGenerator. +// gci.DiffFormattedFilesToArray uses gci.processStdInAndGoFilesInPaths that uses io.StdInGenerator but stdin is not active on CI. +// https://github.com/daixiang0/gci/blob/6f5cb16718ba07f0342a58de9b830ec5a6d58790/pkg/gci/gci.go#L63-L75 +// https://github.com/daixiang0/gci/blob/6f5cb16718ba07f0342a58de9b830ec5a6d58790/pkg/gci/gci.go#L80 +func diffFormattedFilesToArray(paths []string, cfg gcicfg.Config, diffs *[]string, lock *sync.Mutex) error { + log.InitLogger() + defer func() { _ = log.L().Sync() }() + + return gci.ProcessFiles(io.GoFilesInPathsGenerator(paths), cfg, func(filePath string, unmodifiedFile, formattedFile []byte) error { + fileURI := span.URIFromPath(filePath) + edits := myers.ComputeEdits(fileURI, string(unmodifiedFile), string(formattedFile)) + unifiedEdits := gotextdiff.ToUnified(filePath, filePath, string(unmodifiedFile), edits) + lock.Lock() + *diffs = append(*diffs, fmt.Sprint(unifiedEdits)) + lock.Unlock() + return nil + }) +} + func getErrorTextForGci(settings config.GciSettings) string { text := "File is not `gci`-ed"