{"record":{"id":"0430cbcc6090a1ff","repo":"yorukot/superfile","slug":"invalid-renderer-v","errorCode":null,"errorMessage":"invalid renderer : %v","messagePattern":"invalid renderer : (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/pkg/file_preview/image_preview.go","lineNumber":176,"sourceCode":"\t\treturn \"\", \"\", err\n\t}\n\n\tswitch renderer {\n\tcase RendererKitty:\n\t\tresult, err := p.renderWithKittyUsingTermCap(img, path, originalWidth,\n\t\t\toriginalHeight, maxWidth, maxHeight, sideAreaWidth)\n\t\tif err != nil {\n\t\t\tslog.Error(\"Kitty renderer failed, falling back to ANSI\", \"error\", err)\n\t\t\trender, ansiErr := p.ANSIRenderer(img, defaultBGColor, maxWidth, maxHeight)\n\t\t\treturn render, \"\", ansiErr\n\t\t}\n\t\treturn result.Placeholders, result.RawTransmit, nil\n\n\tcase RendererANSI:\n\t\trender, err := p.ANSIRenderer(img, defaultBGColor, maxWidth, maxHeight)\n\t\treturn render, \"\", err\n\tdefault:\n\t\treturn \"\", \"\", fmt.Errorf(\"invalid renderer : %v\", renderer)\n\t}\n}\n","sourceCodeStart":158,"sourceCodeEnd":179,"githubUrl":"https://github.com/yorukot/superfile/blob/b72f550bc6e75913f48eb49fdd258e1a2df2fe88/src/pkg/file_preview/image_preview.go#L158-L179","documentation":"ImagePreviewWithRenderer dispatches on the renderer kind; RendererKitty and RendererANSI are handled, and any other value hits the default branch. This error reports the unrecognized renderer value, indicating a bug in the caller or an unsupported/unknown renderer constant.","triggerScenarios":"Calling ImagePreviewWithRenderer with a renderer value outside the defined Renderer* constants — e.g., an uninitialized zero-value enum if the valid constants start at 1, or a cast of an arbitrary int.","commonSituations":"Constructing the renderer from user config where the config maps to no known constant; a new renderer added upstream but the caller passes a stale/undefined value.","solutions":["Pass one of the exported Renderer constants (RendererKitty or RendererANSI)","Validate/normalize the renderer from user config before calling, defaulting to RendererANSI","Check that the renderer variable is actually initialized (Go zero-value trap)","If adding a new renderer, add its case to the switch in ImagePreviewWithRenderer"],"exampleFix":"// before\nrenderer := Renderer(cfg.PreviewRenderer) // may be 0/unknown\nout, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, renderer)\n// after\nrenderer := RendererANSI\nif r, err := parseRenderer(cfg.PreviewRenderer); err == nil {\n\trenderer = r\n}\nout, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, renderer)","handlingStrategy":"type-guard","validationCode":"func knownRenderer(r Renderer) bool { return r == RendererKitty || r == RendererANSI }","typeGuard":"func isKnownRenderer(r Renderer) bool {\n\tswitch r {\n\tcase RendererKitty, RendererANSI:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}","tryCatchPattern":"out, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, r)\nif err != nil && strings.Contains(err.Error(), \"invalid renderer\") {\n\tout, raw, err = previewer.ImagePreviewWithRenderer(path, w, h, bg, side, RendererANSI)\n}","preventionTips":["Never rely on the zero value of the Renderer enum","Parse user config into a Renderer with a known fallback default","Update the switch in ImagePreviewWithRenderer when adding new renderers","Centralize renderer selection in one helper with validation"],"tags":["go","enum","image","preview"],"backgroundTag":"invalid-enum-value","analyzedSha":"b72f550bc6e75913f48eb49fdd258e1a2df2fe88","analyzedAt":"2026-09-01T04:38:08.254Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}