AI Slop Code Risk Monitor

saulpw/visidata

SlopCodeMonitor badge for saulpw/visidata Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A terminal spreadsheet multitool for discovering and arranging data

33.2 High pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for saulpw/visidata, a Python project with 9,434 GitHub stars. SynthScan examined 61,821 lines of code across 516 source files, recording 941 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 33.2 (High pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

33.2
Adjusted Signal
33.2
Raw Pattern Score
100%
Time Factor
2026-10-29
Last Push
9.4K
Stars
Python
Language
61.8K
Lines of Code
516
Files
941
Pattern Hits
2026-10-31
Scan Date
0.51
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 20.6/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 281 finding(s).

Hallucinated Dependency & Supply Chain Risk 67.8/100 · HIGH

Are imports declared and package/API names verified? 473 finding(s).

Agent Over-Engineering Ratio 31.2/100 · MEDIUM

Are wrappers, guards, and repeated structures necessary? 281 finding(s).

PR Review Velocity Impact 84.2/100 · CRITICAL

Which changes need focused human review? 941 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 263MEDIUM 14LOW 664

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 941 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Cross-Language Confusion221 hits · 1151 pts
SeverityFileLineSnippetContext
HIGH⚡visidata/indexsheet.py93vd.addCommand('S', 'sheets-stack', 'vd.push(vd.sheetsSheet)', 'open Sheets Stack: join or jump between the active sheetsSTRING
HIGH⚡visidata/indexsheet.py94vd.addCommand('gS', 'sheets-all', 'vd.allSheetsSheet.reload(); vd.push(vd.allSheetsSheet)', 'open Sheets Sheet: join or STRING
HIGH⚡visidata/indexsheet.py102IndexSheet.addCommand('gC', 'columns-selected', 'vd.push(ColumnsSheet("all_columns", source=selectedRows))', 'open ColumSTRING
HIGH⚡visidata/indexsheet.py105SheetsSheet.addCommand('Enter', 'open-row', 'dest=cursorRow; vd.sheets.remove(sheet) if not sheet.precious else None; vdSTRING
HIGHvisidata/plugins.py96BaseSheet.addCommand(None, 'open-plugins', 'vd.push(vd.pluginsSheet)', 'Open Plugins Sheet to manage supported plugins')CODE
HIGHvisidata/sidebar.py238BaseSheet.addCommand('gb', 'open-sidebar', 'sheet.current_sidebar = "" if not hasattr(sheet, "current_sidebar") else sheSTRING
HIGHvisidata/guide.py238BaseSheet.addCommand('', 'open-guide-index', 'vd.push(GuideIndex("VisiData_Guide"))', 'open VisiData guides table of conSTRING
HIGHvisidata/statusbar.py301BaseSheet.addCommand('Ctrl+P', 'open-statuses', 'vd.push(vd.statusHistorySheet)', 'open Status History')CODE
HIGHvisidata/input_history.py55vd.addCommand(None, 'open-input-history', 'vd.push(inputHistorySheet)', 'open sheet with previous inputs')CODE
HIGHvisidata/choose.py35 vd.push(vs)CODE
HIGH⚡visidata/sheets.py1323Sheet.addCommand('"', 'dup-selected', 'vs=copy(sheet); vs.name += "_selectedref"; vs.reload=lambda vs=vs,rows=selectedRoCODE
HIGH⚡visidata/sheets.py1324Sheet.addCommand('g"', 'dup-rows', 'vs=copy(sheet); vs.name+="_copy"; vs.rows=list(rows); status("copied "+vs.name); vs.CODE
HIGH⚡visidata/sheets.py1325Sheet.addCommand('z"', 'dup-selected-deep', 'vs = copy(sheet); vs.name += "_selecteddeepcopy"; vs.rows = vs.async_deepcoCODE
HIGH⚡visidata/sheets.py1326Sheet.addCommand('gz"', 'dup-rows-deep', 'vs = copy(sheet); vs.name += "_deepcopy"; vs.rows = vs.async_deepcopy(rows); vCODE
HIGHvisidata/sheets.py1158 return vd.push(vs)CODE
HIGHvisidata/sheets.py1304 vd.push(vs)CODE
HIGHvisidata/sheets.py1347BaseSheet.addCommand('A', 'open-new', 'vd.push(vd.newSheet("unnamed", 1))', 'Open new empty sheet')CODE
HIGHvisidata/sheets.py1349BaseSheet.addCommand('`', 'open-source', 'vd.push(source)', 'open source sheet')CODE
HIGHvisidata/mainloop.py361 vd.push(vs, load=False)CODE
HIGHvisidata/memory.py45BaseSheet.addCommand('Alt+Shift+M', 'open-memos', 'vd.push(vd.memosSheet)', 'open the Memory Sheet')CODE
HIGHvisidata/pyobj.py266 vd.push(sheet.openRow(r))CODE
HIGHvisidata/pyobj.py274 vd.push(openCell(col, r))CODE
HIGH⚡visidata/pyobj.py301BaseSheet.addCommand('Ctrl+X', 'pyobj-expr', 'expr=inputPythonExpr(); vd.push(PyobjSheet(expr, source=sheet.evalExpr(expCODE
HIGH⚡visidata/pyobj.py305BaseSheet.addCommand('zCtrl+X', 'pyobj-expr-row', 'expr = input("eval over current row: ", "expr", completer=CompleteExpCODE
HIGH⚡visidata/pyobj.py310Sheet.addCommand('Ctrl+Y', 'pyobj-row', 'status(type(cursorRow).__name__); vd.push(openRowPyobj(cursorRowIndex))', 'openCODE
HIGH⚡visidata/pyobj.py311Sheet.addCommand('zCtrl+Y', 'pyobj-cell', 'status(type(cursorValue).__name__); vd.push(openCellPyobj(cursorCol, cursorRoCODE
HIGH⚡visidata/pyobj.py312BaseSheet.addCommand('gCtrl+Y', 'pyobj-sheet', 'status(type(sheet).__name__); vd.push(PyobjSheet(sheet.name+"_sheet", soCODE
HIGH⚡visidata/pyobj.py314Sheet.addCommand('', 'open-row-basic', 'vd.push(TableSheet.openRow(sheet, cursorRow))', 'dive into current row as basic CODE
HIGH⚡visidata/pyobj.py315Sheet.addCommand('Enter', 'open-row', 'vd.push(openRow(cursorRow)) if cursorRow is not None else vd.fail("no row to openCODE
HIGH⚡visidata/pyobj.py316Sheet.addCommand('zEnter', 'open-cell', 'vd.push(openCell(cursorCol, cursorRow))', 'open sheet with copies of rows referCODE
HIGHvisidata/splitwin.py14 vd.push(undersheet, pane=pane)CODE
HIGHvisidata/_open.py218BaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputPath("open: "), create=True))', 'Open file or URL')CODE
HIGHvisidata/_open.py219TableSheet.addCommand('zo', 'open-cell-file', 'cd=cursorDisplay; (vd.push(openSource(cd) if cd else fail("no path given"CODE
HIGH⚡visidata/textsheet.py121BaseSheet.addCommand('Ctrl+E', 'error-recent', 'recentErrorsSheet.reload(); vd.push(recentErrorsSheet) if vd.lastErrors STRING
HIGH⚡visidata/textsheet.py122BaseSheet.addCommand('gCtrl+E', 'errors-all', 'vd.push(vd.allErrorsSheet)', 'view traceback for most recent errors')STRING
HIGH⚡visidata/textsheet.py124Sheet.addCommand('zCtrl+E', 'error-cell', 'vd.push(ErrorCellSheet(sheet.name+"_cell_error", sourceSheet=sheet, source=geSTRING
HIGH⚡visidata/graph.py381Sheet.addCommand('.', 'plot-column', 'vd.push(GraphSheet(sheet.name, "graph", source=sheet, sourceRows=rows, xcols=keyCoCODE
HIGH⚡visidata/graph.py382Sheet.addCommand('g.', 'plot-numerics', 'vd.push(GraphSheet(sheet.name, "graph", source=sheet, sourceRows=rows, xcols=keCODE
HIGH⚡visidata/graph.py383ColumnsSheet.addCommand('g.', 'plot-source-selected', 'vd.push(GraphSheet(sheet.source[0].name, "graph", source=source[0CODE
HIGHvisidata/deprecated.py107 return vd.push(vs)CODE
HIGHvisidata/shell.py65 vd.push(TextSheet(' '.join(args), source=lines))CODE
HIGH⚡visidata/shell.py307DirSheet.addCommand('`', 'open-dir-parent', 'vd.push(openSource(source.parent if source.resolve()!=Path(".").resolve() eSTRING
HIGH⚡visidata/shell.py308BaseSheet.addCommand('', 'open-dir-current', 'vd.push(vd.currentDirSheet)', 'open Directory Sheet: browse properties of STRING
HIGH⚡visidata/shell.py312DirSheet.addCommand('Enter', 'open-row-file', 'vd.push(openSource(cursorRow or fail("no row"), filetype="dir" if cursorRSTRING
HIGH⚡visidata/shell.py313DirSheet.addCommand('gEnter', 'open-rows', 'for r in selectedRows: vd.push(openSource(r))', 'open selected files as new STRING
HIGH⚡visidata/shell.py320DirSheet.addCommand('zEnter', 'open-row-filetype', 'ft = input("filetype: ", type="filetype", value=options.filetype or STRING
HIGHvisidata/shell.py342 vd.push(vs, pane=2)STRING
HIGHvisidata/movement.py117 vd.push(matches[0])CODE
HIGHvisidata/movement.py163 BaseSheet.addCommand(f'Alt+{str(i)[-1]}', f'jump-sheet-{i}', f'vd.push(*(list(s for s in allSheets if s.shortcut==stCODE
HIGHvisidata/movement.py166 BaseSheet.addCommand('', f'jump-sheet-{i}', f'vd.push(*(list(s for s in allSheets if s.shortcut==str({i})) or fail("CODE
HIGHvisidata/movement.py230BaseSheet.addCommand('Ctrl+^', 'jump-prev', 'vd.activeStack[1:] or fail("no previous sheet"); vd.push(vd.activeStack[1])CODE
HIGHvisidata/movement.py231BaseSheet.addCommand('gCtrl+^', 'jump-first', 'vd.push(vd.activeStack[-1])', 'jump to first sheet')CODE
HIGHvisidata/threads.py535BaseSheet.addCommand('Ctrl+T', 'threads-all', 'vd.push(vd.allThreadsSheet)', 'open Threads for all sheets')STRING
HIGHvisidata/threads.py536BaseSheet.addCommand('zCtrl+T', 'threads-sheet', 'vd.push(ThreadsSheet("threads", source=sheet.currentThreads))', 'open STRING
HIGHvisidata/optionssheet.py91BaseSheet.addCommand('O', 'options-global', 'vd.push(vd.globalOptionsSheet)', 'open Options Sheet: edit global options (CODE
HIGHvisidata/optionssheet.py93BaseSheet.addCommand('zO', 'options-sheet', 'vd.push(sheet.optionsSheet)', 'open Options Sheet: edit sheet options (applCODE
HIGHvisidata/macros.py269Sheet.addCommand('gm', 'macro-sheet', 'vd.push(vd.macrosheet)', 'open an index of existing macros')STRING
HIGH⚡visidata/freqtbl.py202FreqTableSheet.addCommand('', 'open-preview', 'vd.push(FreqTablePreviewSheet(sheet.name, "preview", source=sheet, columnSTRING
HIGH⚡visidata/freqtbl.py204Sheet.addCommand('F', 'freq-col', 'vd.push(makeFreqTable(sheet, cursorCol))', 'open Frequency Table grouped on current cSTRING
HIGH⚡visidata/freqtbl.py205Sheet.addCommand('gF', 'freq-keys', 'vd.push(makeFreqTable(sheet, *keyCols)) if keyCols else vd.fail("there are no key cSTRING
161 more matches not shown…
Unused Imports252 hits · 252 pts
SeverityFileLineSnippetContext
LOWvisidata/plugins.py7CODE
LOWvisidata/plugins.py8CODE
LOWvisidata/plugins.py10CODE
LOWvisidata/plugins.py10CODE
LOWvisidata/plugins.py10CODE
LOWvisidata/plugins.py10CODE
LOWvisidata/plugins.py85CODE
LOWvisidata/plugins.py86CODE
LOWvisidata/sidebar.py1CODE
LOWvisidata/sidebar.py1CODE
LOWvisidata/sidebar.py6CODE
LOWvisidata/guide.py10CODE
LOWvisidata/_urlcache.py42CODE
LOWvisidata/statusbar.py10CODE
LOWvisidata/color.py3CODE
LOWvisidata/color.py4CODE
LOWvisidata/color.py7CODE
LOWvisidata/color.py7CODE
LOWvisidata/color.py8CODE
LOWvisidata/sheets.py4CODE
LOWvisidata/sheets.py6CODE
LOWvisidata/sheets.py6CODE
LOWvisidata/sheets.py6CODE
LOWvisidata/sheets.py7CODE
LOWvisidata/mainloop.py5CODE
LOWvisidata/mainloop.py9CODE
LOWvisidata/mainloop.py9CODE
LOWvisidata/tuiwin.py1CODE
LOWvisidata/fuzzymatch.py14CODE
LOWvisidata/memory.py1CODE
LOWvisidata/memory.py1CODE
LOWvisidata/pyobj.py3CODE
LOWvisidata/_open.py3CODE
LOWvisidata/_open.py5CODE
LOWvisidata/textsheet.py5CODE
LOWvisidata/graph.py1CODE
LOWvisidata/graph.py4CODE
LOWvisidata/__init__.py29CODE
LOWvisidata/__init__.py31CODE
LOWvisidata/__init__.py32CODE
LOWvisidata/__init__.py40CODE
LOWvisidata/__init__.py42CODE
LOWvisidata/__init__.py44CODE
LOWvisidata/__init__.py143CODE
LOWvisidata/__init__.py154CODE
LOWvisidata/stored_list.py3CODE
LOWvisidata/movement.py3CODE
LOWvisidata/menu.py1CODE
LOWvisidata/menu.py3CODE
LOWvisidata/menu.py7CODE
LOWvisidata/aggregators.py9CODE
LOWvisidata/threads.py11CODE
LOWvisidata/threads.py11CODE
LOWvisidata/utils.py2CODE
LOWvisidata/utils.py4CODE
LOWvisidata/macros.py3CODE
LOWvisidata/macros.py6CODE
LOWvisidata/macros.py7CODE
LOWvisidata/macros.py7CODE
LOWvisidata/cmdlog.py1CODE
192 more matches not shown…
Empty Error Handlers42 hits · 210 pts
SeverityFileLineSnippetContext
HIGHvisidata/save.py192except FileExistsError:CODE
HIGHvisidata/basesheet.py342except (ValueError, IndexError):CODE
HIGHvisidata/color.py91except Exception:CODE
HIGHvisidata/sheets.py821except ValueError: # from .indexCODE
HIGHvisidata/sheets.py833except IndexError:CODE
HIGHvisidata/sheets.py955except (TypeError, ValueError):CODE
HIGHvisidata/vdobj.py137except curses.error:CODE
HIGHvisidata/pyobj.py58except AttributeError: #2631 attributes like formatted_help can raise AttributeErrorCODE
HIGHvisidata/pyobj.py221except Exception:CODE
HIGHvisidata/_open.py77except FileNotFoundError:CODE
HIGHvisidata/shell.py127except subprocess.TimeoutExpired:CODE
HIGHvisidata/movement.py83except Exception:CODE
HIGHvisidata/menu.py171except IndexError:CODE
HIGHvisidata/aggregators.py39except Exception:CODE
HIGHvisidata/threads.py411except ValueError: #"ValueError: Another profiling tool is already active"CODE
HIGHvisidata/motd.py28except Exception:CODE
HIGHvisidata/utils.py118except Exception:CODE
HIGHvisidata/utils.py97except Exception:CODE
HIGHvisidata/utils.py135except IndexError:CODE
HIGHvisidata/wrappers.py94except Exception:CODE
HIGHvisidata/cmdlog.py442except ValueError:CODE
HIGHvisidata/cmdlog.py447except Exception:CODE
HIGHvisidata/mouse.py124except curses.error:CODE
HIGHvisidata/_input.py82except curses.error:CODE
HIGHvisidata/errors.py44except ValueError:CODE
HIGHvisidata/selection.py198except Exception:CODE
HIGHvisidata/main.py201except IndexError:CODE
HIGHvisidata/main.py363except Exception:CODE
HIGHvisidata/cliptext.py260except curses.error:CODE
HIGHvisidata/cliptext.py303except curses.error:CODE
HIGHvisidata/column.py364except KeyError:CODE
HIGHvisidata/features/command_server.py183except FileNotFoundError:CODE
HIGHvisidata/features/command_server.py285except (TypeError, ValueError):CODE
HIGHvisidata/features/melt.py81except Exception:CODE
HIGHvisidata/apps/vdsql/_ibis.py45except TypeError:CODE
HIGHvisidata/apps/vdsql/_ibis.py238except Exception:CODE
HIGHvisidata/loaders/orgmode.py308except FileNotFoundError:CODE
HIGHvisidata/loaders/pcap.py405except Exception:CODE
HIGHvisidata/loaders/claude.py96except Exception:CODE
HIGHvisidata/loaders/texttables.py19except ModuleNotFoundError:CODE
HIGHvisidata/loaders/vds.py28except TypeError:CODE
HIGHvisidata/loaders/_pandas.py106except TypeError:CODE
Deep Nesting173 hits · 170 pts
SeverityFileLineSnippetContext
LOWsetup.py35CODE
LOWvisidata/save.py40CODE
LOWvisidata/sidebar.py103CODE
LOWvisidata/choose.py42CODE
LOWvisidata/color.py222CODE
LOWvisidata/color.py126CODE
LOWvisidata/sheets.py1174CODE
LOWvisidata/sheets.py114CODE
LOWvisidata/sheets.py680CODE
LOWvisidata/sheets.py851CODE
LOWvisidata/sheets.py936CODE
LOWvisidata/mainloop.py76CODE
LOWvisidata/mainloop.py126CODE
LOWvisidata/mainloop.py180CODE
LOWvisidata/mainloop.py270CODE
LOWvisidata/fuzzymatch.py97CODE
LOWvisidata/fuzzymatch.py111CODE
LOWvisidata/fuzzymatch.py184CODE
LOWvisidata/fuzzymatch.py377CODE
LOWvisidata/pyobj.py183CODE
LOWvisidata/_open.py98CODE
LOWvisidata/_open.py205CODE
LOWvisidata/graph.py100CODE
LOWvisidata/graph.py147CODE
LOWvisidata/shell.py114CODE
LOWvisidata/stored_list.py22CODE
LOWvisidata/movement.py71CODE
LOWvisidata/menu.py164CODE
LOWvisidata/menu.py260CODE
LOWvisidata/menu.py411CODE
LOWvisidata/menu.py262CODE
LOWvisidata/aggregators.py324CODE
LOWvisidata/threads.py357CODE
LOWvisidata/threads.py415CODE
LOWvisidata/form.py60CODE
LOWvisidata/wrappers.py98CODE
LOWvisidata/macros.py98CODE
LOWvisidata/macros.py199CODE
LOWvisidata/cmdlog.py333CODE
LOWvisidata/settings.py489CODE
LOWvisidata/settings.py26CODE
LOWvisidata/settings.py95CODE
LOWvisidata/settings.py217CODE
LOWvisidata/mouse.py94CODE
LOWvisidata/_input.py375CODE
LOWvisidata/_input.py569CODE
LOWvisidata/_input.py178CODE
LOWvisidata/_input.py252CODE
LOWvisidata/selection.py187CODE
LOWvisidata/hint.py12CODE
LOWvisidata/ddwplay.py83CODE
LOWvisidata/main.py181CODE
LOWvisidata/main.py288CODE
LOWvisidata/cliptext.py86CODE
LOWvisidata/cliptext.py126CODE
LOWvisidata/cliptext.py154CODE
LOWvisidata/cliptext.py315CODE
LOWvisidata/cliptext.py402CODE
LOWvisidata/cliptext.py526CODE
LOWvisidata/pivot.py125CODE
113 more matches not shown…
Excessive Try-Catch Wrapping134 hits · 140 pts
SeverityFileLineSnippetContext
LOWvisidata/save.py62 except Exception as e:CODE
LOWvisidata/save.py80 except Exception:CODE
LOWvisidata/basesheet.py217 except Exception as e:CODE
LOWvisidata/sidebar.py139 except Exception as e:CODE
LOWvisidata/statusbar.py127 except Exception as e:CODE
LOWvisidata/color.py91 except Exception:STRING
LOWvisidata/color.py167 except Exception:CODE
MEDIUMvisidata/color.py88def setup(self):CODE
LOWvisidata/sheets.py243 except Exception as e:CODE
LOWvisidata/sheets.py927 except Exception as e:CODE
LOWvisidata/mainloop.py30 except Exception as e:CODE
LOWvisidata/mainloop.py39 except Exception as e:CODE
LOWvisidata/mainloop.py230 except Exception as e:CODE
LOWvisidata/mainloop.py251 except Exception as e: #2859CODE
LOWvisidata/mainloop.py279 except Exception as e:CODE
MEDIUMvisidata/mainloop.py270def _playNextQueuedCommand(vd, sheet):CODE
LOWvisidata/pyobj.py221 except Exception:CODE
LOWvisidata/_open.py79 except Exception as e:CODE
LOWvisidata/graph.py123 except Exception as e:CODE
LOWvisidata/deprecated.py217 except Exception as e:CODE
MEDIUMvisidata/deprecated.py214def __exit__(self, exc_type, exc_value, exc_traceback):CODE
LOWvisidata/shell.py133 except Exception as e:CODE
LOWvisidata/shell.py378 except Exception as e:STRING
MEDIUMvisidata/shell.py114def calcValue(self, row):CODE
LOWvisidata/movement.py83 except Exception:CODE
LOWvisidata/aggregators.py39 except Exception:STRING
LOWvisidata/aggregators.py115 except Exception as e:STRING
LOWvisidata/threads.py276 except Exception as e:CODE
LOWvisidata/threads.py288 except Exception as e:CODE
LOWvisidata/form.py92 except Exception as e:CODE
LOWvisidata/motd.py28 except Exception:CODE
MEDIUMvisidata/motd.py22def domotd(vd):CODE
LOWvisidata/utils.py82 except Exception:CODE
LOWvisidata/utils.py97 except Exception:CODE
LOWvisidata/utils.py105 except Exception:CODE
LOWvisidata/utils.py118 except Exception:CODE
LOWvisidata/utils.py125 except Exception:CODE
LOWvisidata/utils.py192 except Exception:CODE
MEDIUMvisidata/utils.py22def __getattr__(self, k):CODE
MEDIUMvisidata/utils.py189def get_value(self, key, args, kwargs):CODE
LOWvisidata/wrappers.py94 except Exception:CODE
LOWvisidata/wrappers.py115 except Exception as e:CODE
LOWvisidata/cmdlog.py294 except Exception as e:CODE
LOWvisidata/cmdlog.py312 except Exception as e:CODE
LOWvisidata/cmdlog.py355 except Exception as e:CODE
LOWvisidata/cmdlog.py447 except Exception:CODE
LOWvisidata/modify.py186 except Exception as e:CODE
LOWvisidata/modify.py214 except Exception:CODE
LOWvisidata/modify.py232 except Exception as e:CODE
LOWvisidata/modify.py254 except Exception as e:CODE
LOWvisidata/settings.py457 except Exception as e:CODE
LOWvisidata/settings.py509 except Exception as e:CODE
LOWvisidata/settings.py518 except Exception as e:CODE
LOWvisidata/settings.py532 except Exception as e:CODE
LOWvisidata/search.py104 except Exception as e:STRING
LOWvisidata/search.py122 except Exception as e:STRING
LOWvisidata/_input.py333 except Exception:CODE
LOWvisidata/selection.py135 except Exception as e:CODE
LOWvisidata/selection.py198 except Exception:CODE
LOWvisidata/hint.py31 except Exception as e:CODE
74 more matches not shown…
Hyper-Verbose Identifiers90 hits · 96 pts
SeverityFileLineSnippetContext
LOWvisidata/experimental/daw/tests/test_vdaw.py29def test_bulk_combine_groups_by_speaker(minisheet):CODE
LOWvisidata/experimental/daw/tests/test_vdaw.py40def test_bulk_combine_save_preserves_sourceaudio(daw, minisheet, tmp_path):CODE
LOWvisidata/experimental/daw/tests/test_vdaw.py54def test_discovered_audio_overrides_missing_sourceaudio(daw, tmp_path):CODE
LOWvisidata/features/condfmt.py214def test_condfmt_bare_column_name(vd): #3061STRING
LOWvisidata/features/condfmt.py227def test_condfmt_value_binding(vd): #3061STRING
LOWvisidata/features/condfmt.py251def test_condfmt_row_binding_string_column(vd): #3061STRING
LOWvisidata/features/condfmt.py264def test_condfmt_silent_eval_error(vd): #3061STRING
LOWvisidata/features/condfmt.py282def test_condfmt_color_option_name(vd): #3061STRING
LOWvisidata/features/condfmt.py293def test_condfmt_value_is_typed_not_wrapper(vd): #3061STRING
LOWvisidata/tests/test_pandas_pickle.py30def test_pickle_refused_by_default(probe):CODE
LOWvisidata/tests/test_pandas_pickle.py38def test_pickle_runs_when_allowed(probe):CODE
LOW⚡visidata/tests/test_unzip_http.py17def test_extract_refuses_escaping_member(tmp_path, member):CODE
LOW⚡visidata/tests/test_unzip_http.py25def test_extract_writes_inside_target(tmp_path):CODE
LOW⚡visidata/tests/test_unzip_http.py30def test_cli_full_filepaths_refuses_escaping_member(tmp_path, monkeypatch):CODE
LOW⚡visidata/tests/test_cmdlog.py9 def test_go_commands_not_loggable(self):CODE
LOW⚡visidata/tests/test_cmdlog.py16 def test_movement_does_not_replace_last_command(self):CODE
LOW⚡visidata/tests/test_macros.py42 def test_keystroke_from_macros_jsonl(self, macrodir):CODE
LOW⚡visidata/tests/test_macros.py45 def test_edit_keystroke_rebinds(self, macrodir):CODE
LOW⚡visidata/tests/test_macros.py55 def test_clear_keystroke_unbinds(self, macrodir):CODE
LOW⚡visidata/tests/test_macros.py99 def test_input_param_and_default(self, replayed):CODE
LOW⚡visidata/tests/test_macros.py108 def test_digit_names_not_params(self, replayed):CODE
LOW⚡visidata/tests/test_macros.py118 def test_json_input_untouched(self, replayed):CODE
LOWvisidata/tests/test_macros.py129 def test_braces_from_macros_jsonl(self, macrodir):CODE
LOW⚡visidata/tests/test_macros.py150 def test_record_with_braces_is_literal(self, macrodir, monkeypatch):CODE
LOW⚡visidata/tests/test_macros.py154 def test_record_without_braces_is_param(self, macrodir, monkeypatch):CODE
LOW⚡visidata/tests/test_macros.py157 def test_macrosheet_save_keeps_braces(self, macrodir, monkeypatch):CODE
LOWvisidata/tests/test_setenv.py12def test_setenv_replays_from_sheet_cmdlog(monkeypatch):CODE
LOWvisidata/tests/test_llm.py99 def test_long_cell_sent_whole(self, fake):CODE
LOWvisidata/tests/test_llm.py110 def test_missing_key_fails_before_thread(self, monkeypatch):CODE
LOWvisidata/tests/test_llm.py118 def test_confirm_in_main_thread(self, fake, monkeypatch):CODE
LOWvisidata/tests/test_llm.py143 def test_query_confirm_in_main_thread(self, fake, monkeypatch):CODE
LOW⚡visidata/tests/test_quit_free.py23def test_quit_sheet_free_frees_rows(cmds):CODE
LOWvisidata/tests/test_editor.py25 def test_trailing_newlines_trimmed(self, tmp_path, monkeypatch):CODE
LOWvisidata/tests/test_editor.py30 def test_unchanged_roundtrips(self, tmp_path, monkeypatch):CODE
LOWvisidata/tests/test_vcf.py18def test_vcf_reads_folded_photo(tmp_path):CODE
LOWvisidata/tests/test_fixed_width.py10 def test_data_with_internal_spaces(self): #2265CODE
LOWvisidata/tests/test_fixed_width.py34 def test_right_justified_headers(self): #3029CODE
LOWvisidata/tests/test_lazycomputerow.py10def test_currow_reads_cursor_column():CODE
LOWvisidata/tests/test_archive.py13def test_nested_tar_member_csv_gz(tmp_path, monkeypatch): #3212CODE
LOWvisidata/tests/test_cliptext.py87 def test_clipstr_wide_truncator(self, s, w, clippeds, clippedw):CODE
LOWvisidata/tests/test_cliptext.py113 def test_clipstr_empty_truncator(self, s, w, clippeds, clippedw):CODE
LOWvisidata/tests/test_cliptext.py163 def test_clipstr_start_truncator(self, s, w, clippeds, clippedw):CODE
LOWvisidata/tests/test_cliptext.py269 def test_truncate_markup_middle(self, s, dispw, clipped):CODE
LOWvisidata/tests/test_cliptext.py298 def test_wraptext_color_spans_lines(self, text, width, expected):CODE
LOWvisidata/tests/test_cliptext.py312 def test_wraptext_escaped_literals(self, text, width, expected):CODE
LOWvisidata/tests/test_inputmultiple.py22def test_tab_completes_in_field_with_completer(monkeypatch): #3169CODE
LOWvisidata/tests/test_inputmultiple.py31def test_tab_switches_field_without_completer(monkeypatch):CODE
LOWvisidata/tests/test_open.py5 def test_filetype_overrides_url_scheme(self):CODE
LOWvisidata/tests/test_history_palette.py21def test_history_palette_default(mock_screen, monkeypatch, default, keys, expected):CODE
LOWvisidata/tests/test_eml.py21def test_extract_parts_refuses_escaping_filename(tmp_path, sync_exec, fn):CODE
LOW⚡visidata/tests/test_options_undefined.py22def test_numeric_formatter_without_type_fmt():CODE
LOW⚡visidata/tests/test_options_undefined.py32def test_get_with_default_is_silent():CODE
LOW⚡visidata/tests/test_options_undefined.py38def test_undefined_read_returns_none_and_warns_once():CODE
LOWvisidata/tests/test_options_undefined.py75def test_defined_falsy_options_do_not_warn():CODE
LOWvisidata/tests/test_options_undefined.py88def test_setting_unknown_option_still_warns():CODE
LOWvisidata/tests/test_options_undefined.py94def test_private_attrs_are_not_options():CODE
LOWvisidata/tests/test_commands.py137 def test_command_execstrs_compile(self):CODE
LOWvisidata/tests/test_color.py45 def test_pairnum_within_terminal_limit(self, fake_curses):CODE
LOWvisidata/tests/test_path.py40 def test_iterdir_yields_visidata_paths(self): # #2188CODE
LOWvisidata/tests/test_path.py45 def test_name_returns_full_filename(self): # #2188CODE
30 more matches not shown…
Over-Commented Block11 hits · 11 pts
SeverityFileLineSnippetContext
LOWvisidata/_types.py21COMMENT
LOWvisidata/fuzzymatch.py21scoreGapStart = -3COMMENT
LOWvisidata/loaders/pandas_freqtbl.py121 )[_pivot_count_column].sort_values(ascending=False, kind="mergesort")COMMENT
LOWvisidata/loaders/arrow.py41 pa.lib.Type_TIMESTAMP: date,COMMENT
LOWvisidata/loaders/unzip_http.py1#!/usr/bin/env python3COMMENT
LOWtests/test-options-precedence.sh1#!/usr/bin/env bashCOMMENT
LOWtests/test-save.sh1#!/usr/bin/env bashCOMMENT
LOWtests/test-options-config.sh1#!/usr/bin/env bashCOMMENT
LOWtests/test-url.sh1#!/usr/bin/env bashCOMMENT
LOWdocs/api/conf.py1# Configuration file for the Sphinx documentation builder.COMMENT
LOWdev/test.sh1#!/usr/bin/env bashCOMMENT
Modern Structural Boilerplate9 hits · 9 pts
SeverityFileLineSnippetContext
LOWvisidata/color.py10__all__ = ['ColorAttr', 'colors', 'update_attr', 'ColorMaker', 'rgb_to_attr', 'css_to_xterm256', 'xterm256_to_rgb', 'rgbCODE
LOWvisidata/mainloop.py11__all__ = ['ReturnValue', 'run']CODE
LOWvisidata/vdobj.py6__all__ = ['ENTER', 'ALT', 'ESC', 'asyncthread', 'VisiData']CODE
LOWvisidata/utils.py8__all__ = ['AlwaysDict', 'AttrDict', 'DefaultAttrDict', 'moveListItem', 'namedlist', 'classproperty', 'MissingAttrFormatCODE
LOWvisidata/ddwplay.py6__all__ = ['Animation', 'AnimationMgr']CODE
LOWvisidata/extensible.py4__all__ = ['Extensible', 'cache', 'drawcache', 'drawcache_property']CODE
LOWvisidata/apps/vdsql/__about__.py1__all__ = ['__title__', '__author__', '__version__', '__description__', '__license__', '__copyright__']CODE
LOWvisidata/loaders/postgres.py8__all__ = ['openurl_postgres', 'openurl_postgresql', 'openurl_rds', 'PgTable', 'PgTablesSheet']CODE
LOWvisidata/loaders/scrape.py3__all__=[ 'SelectorColumn', 'soupstr' ]CODE
Dead Code2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMvisidata/experimental/daw/vdaw.py99CODE
MEDIUMvisidata/loaders/html.py95CODE
AI Structural Patterns4 hits · 3 pts
SeverityFileLineSnippetContext
LOWvisidata/sheets.py968CODE
LOWvisidata/sort.py70CODE
LOWvisidata/_input.py375CODE
LOWvisidata/loaders/f5log.py86CODE
AI Slop Vocabulary2 hits · 3 pts
SeverityFileLineSnippetContext
LOWvisidata/main.py230 # don't change the stack order -- just return the sheet for cursor moves.COMMENT
LOWvisidata/pivot.py218 # (more bins than int vals) or (if bins are of width 1), just use the vals as binsCOMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWvisidata/features/graph_zoom_y.py18 # Check if the point is within the current x rangeCOMMENT