{"record":{"id":"1bdf01d4a9a58934","repo":"shadow1ng/fscan","slug":"fscan-result-handler-is-required","errorCode":null,"errorMessage":"fscan: result handler is required","messagePattern":"fscan: result handler is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/fscan/scanner.go","lineNumber":194,"sourceCode":"\t\tresults []Result\n\t)\n\tstats, err := s.scanEach(ctx, opts, func(result Result) error {\n\t\tmu.Lock()\n\t\tresults = append(results, result)\n\t\tmu.Unlock()\n\t\treturn nil\n\t}, targets...)\n\tresults = snapshotResults(&mu, results)\n\treturn ScanReport{\n\t\tResults: results,\n\t\tSummary: SummarizeResults(results),\n\t\tStats:   stats,\n\t}, err\n}\n\nfunc (s *Scanner) scanEach(ctx context.Context, opts scanOpts, handle ResultHandler, targets ...Target) (ScanStats, error) {\n\tif handle == nil {\n\t\treturn ScanStats{}, fmt.Errorf(\"fscan: result handler is required\")\n\t}\n\tif ctx == nil {\n\t\tctx = context.Background()\n\t}\n\tif len(targets) == 0 {\n\t\ttargets = s.config.Targets\n\t}\n\tif err := validateConfig(s.config, targets); err != nil {\n\t\treturn ScanStats{}, err\n\t}\n\n\tctrl := opts.controller\n\tif ctrl == nil && s.config.OnProgress != nil {\n\t\tctrl = newScanController()\n\t}\n\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()","sourceCodeStart":176,"sourceCodeEnd":212,"githubUrl":"https://github.com/shadow1ng/fscan/blob/95cc12e753bf43de7004e5aef42a9ffba3934303/pkg/fscan/scanner.go#L176-L212","documentation":"Guard in Scanner.scanEach: a nil ResultHandler callback was passed, but the streaming API requires one to deliver each Result; without it results would be silently dropped. Use Scan (collectReport) if no callback is wanted.","triggerScenarios":"Thrown at pkg/fscan/scanner.go:194 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a non-nil func(Result) error to ScanEach","Use Scanner.Scan which supplies its own collector and returns a ScanReport"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"95cc12e753bf43de7004e5aef42a9ffba3934303","analyzedAt":"2026-09-06T17:07:30.094Z","contentChangedAt":"2026-09-06T17:07:30.094Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}