Repository Analysis

simonw/datasette

An open source multi-tool for exploring and publishing data

15.6 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of simonw/datasette, a Python project with 11,278 GitHub stars. SynthScan v2.0 examined 92,139 lines of code across 278 source files, recording 1554 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 15.6 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

15.6
Adjusted Score
15.6
Raw Score
100%
Time Factor
2026-07-14
Last Push
11.3K
Stars
Python
Language
92.1K
Lines of Code
278
Files
1.6K
Pattern Hits
2026-07-14
Scan Date
0.12
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 1HIGH 31MEDIUM 30LOW 1492

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1554 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers1264 hits · 1004 pts
SeverityFileLineSnippetContext
LOWtests/test_column_types.py129async def test_column_types_table_created(ds_ct):CODE
LOWtests/test_column_types.py139async def test_config_loaded_into_internal_db(ds_ct):CODE
LOWtests/test_column_types.py151async def test_config_with_type_and_config(tmp_path_factory):CODE
LOWtests/test_column_types.py213async def test_get_column_type_missing(ds_ct):CODE
LOWtests/test_column_types.py220async def test_set_and_remove_column_type(ds_ct):CODE
LOWtests/test_column_types.py233async def test_set_column_type_with_config(ds_ct):CODE
LOWtests/test_column_types.py264async def test_set_column_type_api_with_config(ds_ct):CODE
LOWtests/test_column_types.py286async def test_clear_column_type_api(ds_ct):CODE
LOWtests/test_column_types.py399async def test_set_column_type_api_errors(CODE
LOWtests/test_column_types.py423async def test_set_column_type_api_works_for_immutable_database(tmp_path_factory):CODE
LOWtests/test_column_types.py452async def test_set_column_type_rejects_incompatible_sqlite_type(ds_ct):CODE
LOWtests/test_column_types.py459async def test_set_column_type_allows_varchar_for_text_only_type(tmp_path_factory):CODE
LOWtests/test_column_types.py481async def test_builtin_column_types_registered(ds_ct):CODE
LOWtests/test_column_types.py492async def test_column_type_class_attributes(ds_ct):CODE
LOWtests/test_column_types.py510def test_sqlite_type_from_declared_type():CODE
LOWtests/test_column_types.py545async def test_display_columns_include_column_type(ds_ct):CODE
LOWtests/test_column_types.py596async def test_email_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py609async def test_email_validation_passes_valid(ds_ct):CODE
LOWtests/test_column_types.py621async def test_url_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py634async def test_json_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py647async def test_validation_on_update(ds_ct):CODE
LOWtests/test_column_types.py660async def test_validation_allows_null(ds_ct):CODE
LOWtests/test_column_types.py672async def test_validation_allows_empty_string(ds_ct):CODE
LOWtests/test_column_types.py687async def test_column_type_base_defaults():CODE
LOWtests/test_column_types.py703async def test_render_cell_extra_with_column_types(ds_ct):CODE
LOWtests/test_column_types.py717async def test_duplicate_column_type_name_raises_error():CODE
LOWtests/test_column_types.py744async def test_row_endpoint_render_cell_with_column_types(ds_ct):CODE
LOWtests/test_column_types.py758async def test_transform_value_in_json_output(tmp_path_factory):CODE
LOWtests/test_column_types.py810async def test_column_type_render_cell_has_priority_over_plugins(tmp_path_factory):CODE
LOWtests/test_column_types.py889async def test_row_detail_page_html_rendering(ds_ct):CODE
LOWtests/test_column_types.py905async def test_html_table_page_rendering(ds_ct):CODE
LOWtests/test_column_types.py916async def test_set_column_type_ui_data_hidden_without_permission(ds_ct):CODE
LOWtests/test_column_types.py924async def test_set_column_type_ui_data_includes_applicable_types(CODE
LOWtests/test_column_types.py963async def test_validation_on_upsert(ds_ct):CODE
LOWtests/test_column_types.py978async def test_validation_on_upsert_passes_valid(ds_ct):CODE
LOWtests/test_column_types.py995async def test_unknown_type_warning_logged(tmp_path_factory, caplog):CODE
LOWtests/test_column_types.py1021async def test_incompatible_sqlite_type_warning_logged(tmp_path_factory, caplog):CODE
LOWtests/test_column_types.py1048async def test_config_overwrites_on_restart(tmp_path_factory):CODE
LOWtests/test_column_types.py1086async def test_no_column_types_in_config(tmp_path_factory):CODE
LOWtests/test_table_api.py122async def test_html_only_extras_are_not_available_via_json(ds_client, extra):CODE
LOWtests/test_table_api.py131async def test_html_only_extras_are_not_advertised(ds_client):CODE
LOWtests/test_table_api.py138def test_query_extra_private_for_arbitrary_sql():CODE
LOWtests/test_table_api.py265async def test_table_shape_object_compound_primary_key(ds_client):CODE
LOWtests/test_table_api.py275async def test_table_with_slashes_in_name(ds_client):CODE
LOWtests/test_table_api.py285async def test_table_with_reserved_word_name(ds_client):CODE
LOWtests/test_table_api.py30async def test_table_not_exists_json(ds_client):CODE
LOWtests/test_table_api.py52async def test_table_shape_arrayfirst(ds_client):CODE
LOWtests/test_table_api.py72async def test_query_extras_for_arbitrary_sql(ds_client):CODE
LOWtests/test_table_api.py96async def test_query_extras_for_stored_query(ds_client):CODE
LOWtests/test_table_api.py152def test_query_extra_query_reports_bound_params():CODE
LOWtests/test_table_api.py183def test_query_extra_query_does_not_echo_querystring():CODE
LOWtests/test_table_api.py192def test_query_extra_private_false_when_sql_is_public():CODE
LOWtests/test_table_api.py226async def test_table_shape_array_nl(ds_client):CODE
LOWtests/test_table_api.py320async def test_paginate_tables_and_views(CODE
LOWtests/test_table_api.py367async def test_paginate_compound_keys(ds_client):CODE
LOWtests/test_table_api.py388async def test_paginate_compound_keys_with_extra_filters(ds_client):CODE
LOWtests/test_table_api.py464async def test_sortable_and_filtered(ds_client):CODE
LOWtests/test_table_api.py483async def test_sortable_argument_errors(ds_client):CODE
LOWtests/test_table_api.py497async def test_sortable_columns_metadata(ds_client):CODE
LOWtests/test_table_api.py630async def test_searchable_invalid_column(ds_client):CODE
1204 more matches not shown…
Cross-Language Confusion29 hits · 116 pts
SeverityFileLineSnippetContext
HIGHtests/test_table_api.py1324 '{"rowid": 3, "data": null}'CODE
HIGHtests/test_queries.py1794 assert "window.location.href = url.toString();" not in response.textSTRING
HIGHtests/test_table_html.py1175 name text not null,CODE
HIGHtests/test_table_html.py1330 name text not null,CODE
HIGHtests/test_write_wrapper.py363 await db.execute_write("insert into groups (id, current) values (1, null)")CODE
HIGHtests/test_api_write.py1320 "(1, 'one', 1.5, 1), (2, 'two', 999.5, 2), (3, null, null, null)"STRING
HIGHtests/test_playwright.py113 title text not null,CODE
HIGHtests/test_playwright.py125 name text not null,CODE
HIGHtests/test_playwright.py130 title text not null,CODE
HIGHtests/test_playwright.py280 if (!context.columnType || context.columnType.type !== "asset") {CODE
HIGHtests/test_playwright.py1014 window.__discardConfirmMessages.push(message);CODE
HIGHtests/test_playwright.py1347 "node => node.hidden && node.disabled"CODE
HIGHdatasette/app.py759 placeholders = "(?, null, ?, ?)"CODE
HIGHdatasette/fixtures.py234 ("2019-01-14 08:00:00", 1, 1, 'CA', 1, 'SOMA', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py235 ("2019-01-14 08:00:00", 1, 1, 'CA', 1, 'Tenderloin', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py236 ("2019-01-15 08:00:00", 1, 1, 'CA', 1, 'Bernal Heights', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py237 ("2019-01-15 08:00:00", 1, 1, 'CA', 1, 'Hayes Valley', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py238 ("2019-01-15 08:00:00", 1, 1, 'CA', 2, 'Hollywood', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py239 ("2019-01-15 08:00:00", 1, 1, 'CA', 2, 'Downtown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py240 ("2019-01-16 08:00:00", 1, 1, 'CA', 2, 'Los Feliz', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py241 ("2019-01-16 08:00:00", 1, 1, 'CA', 2, 'Koreatown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py242 ("2019-01-16 08:00:00", 1, 1, 'MI', 3, 'Downtown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py243 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Greektown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py244 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Corktown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py245 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Mexicantown', '[]', '[]', null, null),STRING
HIGHdatasette/fixtures.py246 ("2019-01-17 08:00:00", 2, 0, 'MC', 4, 'Arcadia Planitia', '[]', '[]', null, null)STRING
HIGHdatasette/fixtures.py272 3, "Burlingame Museum of PEZ Memorabilia", "214 California Drive, Burlingame, CA 94010", null,STRING
HIGHdatasette/fixtures.py321INSERT INTO foreign_key_references VALUES (2, null, null, null, null, null);STRING
HIGHdatasette/fixtures.py364 ("insert into binary_data (data) values (null);", []),STRING
Deep Nesting79 hits · 74 pts
SeverityFileLineSnippetContext
LOWtests/test_auth.py275CODE
LOWtests/test_docs.py174CODE
LOWtests/test_html.py922CODE
LOWtests/test_queries.py3397CODE
LOWtests/test_multipart.py997CODE
LOWtests/test_multipart.py1057CODE
LOWtests/test_permissions.py936CODE
LOWtests/fixtures.py106CODE
LOWtests/plugins/my_plugin.py556CODE
LOWdocs/json_api_doc.py8CODE
LOWdocs/json_api_doc.py85CODE
LOWdatasette/plugins.py97CODE
LOWdatasette/stored_queries.py241CODE
LOWdatasette/renderer.py14CODE
LOWdatasette/renderer.py32CODE
LOWdatasette/database.py441CODE
LOWdatasette/database.py588CODE
LOWdatasette/database.py919CODE
LOWdatasette/cli.py71CODE
LOWdatasette/app.py399CODE
LOWdatasette/app.py638CODE
LOWdatasette/app.py785CODE
LOWdatasette/app.py1350CODE
LOWdatasette/app.py2968CODE
LOWdatasette/facets.py14CODE
LOWdatasette/facets.py219CODE
LOWdatasette/facets.py310CODE
LOWdatasette/facets.py380CODE
LOWdatasette/facets.py513CODE
LOWdatasette/tracer.py89CODE
LOWdatasette/tracer.py100CODE
LOWdatasette/filters.py43CODE
LOWdatasette/filters.py45CODE
LOWdatasette/filters.py411CODE
LOWdatasette/default_permissions/config.py101CODE
LOWdatasette/default_permissions/config.py199CODE
LOWdatasette/utils/multipart.py192CODE
LOWdatasette/utils/multipart.py639CODE
LOWdatasette/utils/multipart.py367CODE
LOWdatasette/utils/asgi.py297CODE
LOWdatasette/utils/actions_sql.py500CODE
LOWdatasette/utils/__init__.py1207CODE
LOWdatasette/utils/__init__.py1540CODE
LOWdatasette/utils/__init__.py1588CODE
LOWdatasette/utils/__init__.py1268CODE
LOWdatasette/utils/__init__.py1549CODE
LOWdatasette/utils/shutil_backport.py12CODE
LOWdatasette/utils/sql_analysis.py198CODE
LOWdatasette/publish/heroku.py20CODE
LOWdatasette/publish/heroku.py38CODE
LOWdatasette/publish/cloudrun.py16CODE
LOWdatasette/publish/cloudrun.py86CODE
LOWdatasette/views/index.py26CODE
LOWdatasette/views/query_helpers.py247CODE
LOWdatasette/views/database.py1191CODE
LOWdatasette/views/database.py575CODE
LOWdatasette/views/database.py704CODE
LOWdatasette/views/table_extras.py223CODE
LOWdatasette/views/table_extras.py663CODE
LOWdatasette/views/table_extras.py1024CODE
19 more matches not shown…
Unused Imports69 hits · 68 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/conftest.py301CODE
LOWtests/test_docs.py6CODE
LOWdatasette/stored_queries.py1CODE
LOWdatasette/csrf.py10CODE
LOWdatasette/_pytest_plugin.py15CODE
LOWdatasette/jump.py1CODE
LOWdatasette/__init__.py1CODE
LOWdatasette/__init__.py2CODE
LOWdatasette/__init__.py2CODE
LOWdatasette/__init__.py3CODE
LOWdatasette/__init__.py4CODE
LOWdatasette/__init__.py4CODE
LOWdatasette/__init__.py4CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py12CODE
LOWdatasette/__init__.py13CODE
LOWdatasette/__init__.py14CODE
LOWdatasette/__init__.py15CODE
LOWdatasette/tokens.py9CODE
LOWdatasette/tokens.py18CODE
LOWdatasette/app.py1CODE
LOWdatasette/app.py9CODE
LOWdatasette/write_sql.py1CODE
LOWdatasette/default_permissions/config.py7CODE
LOWdatasette/default_permissions/config.py12CODE
LOWdatasette/default_permissions/__init__.py18CODE
LOWdatasette/default_permissions/__init__.py21CODE
LOWdatasette/default_permissions/__init__.py21CODE
LOWdatasette/default_permissions/__init__.py21CODE
LOWdatasette/default_permissions/__init__.py26CODE
LOWdatasette/default_permissions/__init__.py27CODE
LOWdatasette/default_permissions/__init__.py28CODE
LOWdatasette/default_permissions/__init__.py28CODE
LOWdatasette/default_permissions/__init__.py28CODE
LOWdatasette/default_permissions/__init__.py28CODE
LOWdatasette/default_permissions/tokens.py8CODE
LOWdatasette/default_permissions/tokens.py13CODE
LOWdatasette/default_permissions/defaults.py7CODE
LOWdatasette/default_permissions/defaults.py12CODE
LOWdatasette/default_permissions/root.py7CODE
9 more matches not shown…
Excessive Try-Catch Wrapping40 hits · 39 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_write_wrapper.py113def wrapper(conn):CODE
LOWtests/test_write_wrapper.py116 except Exception as e:CODE
LOWtests/test_api_write.py1422 except Exception:STRING
LOWdatasette/csrf.py166 except Exception:CODE
LOWdatasette/_pytest_plugin.py92 except Exception as e:CODE
LOWdatasette/database.py203 except Exception:CODE
LOWdatasette/database.py209 except Exception:CODE
LOWdatasette/database.py221 except Exception:CODE
LOWdatasette/database.py227 except Exception:CODE
LOWdatasette/database.py373 except Exception:CODE
LOWdatasette/database.py449 except Exception as e:CODE
LOWdatasette/database.py457 except Exception:CODE
LOWdatasette/database.py476 except Exception as e:CODE
LOWdatasette/database.py488 except Exception as e:CODE
LOWdatasette/database.py837 except Exception as e:STRING
MEDIUMdatasette/database.py370def _dispatch_events_after_write():CODE
LOWdatasette/app.py981 except Exception as e:CODE
LOWdatasette/app.py987 except Exception as e:CODE
LOWdatasette/app.py2956 except Exception as exception:CODE
LOWdatasette/app.py2207 except Exception:STRING
LOWdatasette/app.py2216 except Exception as e:STRING
LOWdatasette/tracer.py53 except Exception as ex:CODE
LOWdatasette/utils/multipart.py89 except Exception:CODE
LOWdatasette/utils/multipart.py166 except Exception:CODE
LOWdatasette/utils/multipart.py175 except Exception:CODE
LOWdatasette/utils/multipart.py241 except Exception:CODE
LOWdatasette/utils/multipart.py457 except Exception:CODE
MEDIUMdatasette/utils/multipart.py86def __del__(self):CODE
LOWdatasette/utils/__init__.py744 except Exception:STRING
LOWdatasette/views/database.py667 except Exception as ex:CODE
LOWdatasette/views/database.py682 except Exception as ex:CODE
LOWdatasette/views/table.py1173 except Exception as e:CODE
MEDIUMdatasette/views/table.py1038def post(self, request, upsert=False):CODE
MEDIUMdatasette/views/table_create_alter.py1029def get(self, request):CODE
LOWdatasette/views/table_create_alter.py928 except Exception as e:STRING
LOWdatasette/views/table_create_alter.py1332 except Exception as e:STRING
LOWdatasette/views/row.py756 except Exception as e:STRING
LOWdatasette/views/row.py839 except Exception as e:STRING
LOWdatasette/views/special.py423 except Exception:CODE
LOWdatasette/views/base.py328 except Exception as ex:CODE
Self-Referential Comments13 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMtest-in-pyodide-with-shot-scraper.sh13# Create a blank index pageCOMMENT
MEDIUMtests/test_schema_endpoints.py29 # Create a database with restricted access (requires root permission)COMMENT
MEDIUMtests/test_schema_endpoints.py35 # Create an empty databaseCOMMENT
MEDIUMtests/test_plugins.py1668 # Create a token using the hardcoded handler (first registered from plugins dir)STRING
MEDIUMtests/test_plugins.py1677 # Create a token by explicitly requesting the hardcoded handler by nameSTRING
MEDIUMtests/test_plugins.py1683 # Create a token by explicitly requesting the signed handler by nameSTRING
MEDIUMtests/test_plugins.py1780 # Define a test plugin that registers these actionsSTRING
MEDIUMtests/test_multipart.py393 # Create a body larger than the in-memory threshold (1MB)COMMENT
MEDIUMtests/test_allowed_resources.py345 # Create a database with 105 tablesCOMMENT
MEDIUMtests/test_internal_db.py212 # Create a data database fileSTRING
MEDIUMdocs/conf.py7# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMdatasette/publish/heroku.py140 # Create a new appCOMMENT
MEDIUMdemos/plugins/example_js_manager_plugins.py7# Create a set with view names that qualify for this JS, since plugins won't do anything on other pagesCOMMENT
Decorative Section Separators10 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_allowed_many.py72# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py74# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py205# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py207# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py582# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py584# ----------------------------------------------------------------------COMMENT
MEDIUMdatasette/utils/permissions.py86# -----------------------------COMMENT
MEDIUMdatasette/utils/permissions.py88# -----------------------------COMMENT
MEDIUMdatasette/utils/permissions.py133# -----------------------------------------------STRING
MEDIUMdatasette/utils/permissions.py135# -----------------------------------------------STRING
Redundant / Tautological Comments14 hits · 19 pts
SeverityFileLineSnippetContext
LOWtests/test_auth.py364 # Set root_enabled to simulate --root flagCOMMENT
LOWtests/test_docs.py189 # Check if next line is entirely made of a single underline characterCOMMENT
LOWtests/test_docs.py201 # Check if this is an overline+underline style headingCOMMENT
LOWtests/plugins/my_plugin.py525 # Check if this is a global action (no resource_class specified)STRING
LOW.github/workflows/stable-docs.yml64 # Check if the list of files is non-emptyCOMMENT
LOWdatasette/app.py1709 # Check if actor can see itCOMMENT
LOWdatasette/app.py1713 # Check if anonymous user can see it (for "private" flag)COMMENT
LOWdatasette/app.py1860 # Check if truncated (got more than limit rows)STRING
LOWdatasette/permissions.py114 # Check if our parent has a parent - that would create 3 levelsCOMMENT
LOWdatasette/utils/permissions.py28 # Check if we should skip permission checks BEFORE calling hooksCOMMENT
LOWdatasette/views/index.py82 # Check if table is in allowed setCOMMENT
LOWdatasette/views/special.py316 # Check if user has permissions-debug (to show sensitive fields)COMMENT
LOWdatasette/views/special.py321 # Check if this is a request for JSON (has .json extension)COMMENT
LOWdatasette/views/special.py487 # Check if this is a request for JSON (has .json extension)COMMENT
AI Structural Patterns19 hits · 16 pts
SeverityFileLineSnippetContext
LOWtests/fixtures.py106CODE
LOWdatasette/stored_queries.py163CODE
LOWdatasette/stored_queries.py241CODE
LOWdatasette/stored_queries.py357CODE
LOWdatasette/stored_queries.py427CODE
LOWdatasette/app.py399CODE
LOWdatasette/app.py1125CODE
LOWdatasette/app.py1173CODE
LOWdatasette/app.py1229CODE
LOWdatasette/app.py1253CODE
LOWdatasette/app.py1652CODE
LOWdatasette/utils/multipart.py639CODE
LOWdatasette/utils/multipart.py303CODE
LOWdatasette/utils/asgi.py202CODE
LOWdatasette/utils/asgi.py520CODE
LOWdatasette/utils/testing.py83CODE
LOWdatasette/utils/testing.py114CODE
LOWdatasette/utils/testing.py138CODE
LOWdatasette/views/execute_write.py240CODE
Docstring Block Structure2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHdatasette/app.py1662 Create a Resource instance for the given action with parent/child values. Looks up the action's resourSTRING
HIGHdatasette/utils/asgi.py216 Parse form data from the request body. Supports both application/x-www-form-urlencoded and multipart/fSTRING
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALdatasette/static/cm-editor-6.0.1.bundle.js1var cm=function(t){"use strict";class e{constructor(){}lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid posCODE
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_internals_database.py776 # via dependency injection.COMMENT
MEDIUMdatasette/database.py389 # switching to keyword dependency injection when the callbackCOMMENT
Fake / Example Data5 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/test_playwright.py791 dialog.locator(".table-alter-column-name").first.get_attribute("placeholder")CODE
LOWtests/test_playwright.py942 assert table_name.get_attribute("placeholder") == "table name"CODE
LOWtests/test_playwright.py429 dialog.locator(".table-create-column-name").nth(0).get_attribute("placeholder")STRING
LOWdatasette/static/sql-formatter-2.3.3.min.js4!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amCODE
LOWdatasette/templates/create_token.html95 expireDuration.setAttribute("placeholder", expireType.value.replace("Expires after X ", ""));CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWdocs/conf.py1#!/usr/bin/env python3COMMENT
LOWdocs/conf.py81# |version| and |release|, also used in various other places throughout theCOMMENT
LOWdocs/conf.py141# -- Options for LaTeX output ---------------------------------------------COMMENT
LOWdatasette/static/datasette-manager.js221 // Future API ideasCOMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWdatasette/fixtures.py7__all__ = [CODE
LOWdatasette/views/special.py22logger = logging.getLogger(__name__)CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdatasette/utils/permissions.py111 # No namespacing - just use plugin params as-isCOMMENT