Repository Analysis

visgl/deck.gl

WebGL2 powered visualization framework

1.1 Likely human-written View on GitHub
1.1
Adjusted Score
1.1
Raw Score
100%
Time Factor
2026-05-27
Last Push
14,209
Stars
TypeScript
Language
276,999
Lines of Code
2236
Files
222
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 2HIGH 6MEDIUM 16LOW 198

Pattern Findings

222 matches across 12 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers91 hits · 90 pts
SeverityFileLineSnippet
LOWtest/setup/typed-array-equality.ts15export function registerTypedArrayEquality(): void {
LOWtest/render/test-cases/terrain-layer.js22function waitAfterDefaultCompletion(waitMs = 0) {
LOWtest/modules/carto/layers/vector-tile-layer.spec.ts112function createTestVectorTileLayer(
LOWtest/apps/attribute-worker/worker.js75function getCompositeLayerSnapshot(layer) {
LOWtest/apps/attribute-worker/worker.js88function getPrimitiveLayerSnapshot(layer) {
LOWtest/apps/carto-map/app.ts33async function createMapWithDeckController(result: FetchMapResult) {
LOWtest/apps/carto-map/app.ts55async function createMapWithMapboxOverlay(result: FetchMapResult) {
LOWtest/apps/carto-map/app.ts77async function createMapWithGoogleMapsOverlay(result: FetchMapResult) {
LOWtest/apps/json-pure-js/children.js6export default function positionChildrenUnderViews(domElement, viewManager) {
LOWdocs/developer-guide/interactivity.md263function applyViewStateConstraints(viewState) {
LOWdocs/developer-guide/interactivity.md296function applyViewStateConstraints(viewState: MapViewState): MapViewState {
LOWshowcases/ascii/ascii-layer/utils.js7function normalizeCharacterBrightness(darkPixelsByCharacter) {
LOWshowcases/ascii/ascii-layer/utils.js28export function sortCharactersByBrightness(darkPixelsByCharacter) {
LOWdev-docs/RFCs/proposals/gpu-data-frame-rfc.md67function mapArrowSchemaToGPUAttributes(schema) {
LOWdev-docs/RFCs/proposals/gpu-data-frame-rfc.md125function convertBinaryPredicateComponentsToGLSL(arrowPredicate, gpuSchema) {
LOWdev-docs/RFCs/proposals/chunked-data-support-rfc.md117function allocateGPUBuffersForChunks(table) {
LOWdev-docs/RFCs/proposals/vitest-migration-rfc.md560async function cleanupAfterLayerTestsAsync(resources: TestResources): Promise<Error | null> {
LOWexamples/playground/src/app.tsx29function addUpdateTriggersForAccessors(json) {
LOWexamples/layer-browser/src/data-samples.js224function generateMultiPointFeatures(featureCount, pointsPerFeature) {
LOWbindings/pydeck-carto/tests/test_sources.py56def test_vector_tileset_source():
LOWbindings/pydeck-carto/tests/test_sources.py118def test_quadbin_table_source():
LOWbindings/pydeck-carto/tests/test_sources.py135def test_quadbin_query_source():
LOWbindings/pydeck-carto/tests/test_sources.py152def test_quadbin_tileset_source():
LOWbindings/pydeck-carto/tests/test_sources.py166def test_raster_tileset_source():
LOWbindings/pydeck/bump_version.py57def rewrite_frontend_version_file():
LOWbindings/pydeck/tests/test_data_utils.py52def test_is_pandas_df_negative_cases():
LOWbindings/pydeck/tests/test_data_utils.py68def test_is_pandas_df_duck_typing():
LOWbindings/pydeck/tests/test_deckgl_widget.py12def test_example_creation_blank():
LOWbindings/pydeck/tests/test_settings.py4def test_settings_is_imported():
LOWbindings/pydeck/tests/io/test_html.py24def test_rendering_is_not_broken():
LOWbindings/pydeck/tests/io/test_html.py75def test_deck_to_html_jupyter():
LOWbindings/pydeck/tests/browser/test_html_renderer.py53async def test_standalone_rendering(tmp_path):
LOWbindings/pydeck/tests/browser/test_html_renderer.py69async def test_notebook_iframe_rendering():
LOWbindings/pydeck/tests/browser/screenshot_utils.py51async def go_to_page_and_screenshot(url, file_name, output_dir=".", sleep_seconds=SECONDS_BEFORE_SCREENSHOT):
LOWbindings/pydeck/tests/bindings/test_deck.py37def test_deck_default_map_style(map_provider_enum: BaseMapProvider, expected_map_style: str):
LOWbindings/pydeck/tests/bindings/test_deck.py110def test_to_html_google_colab():
LOWbindings/pydeck/tests/bindings/test_deck.py133def test_repr_html_google_colab():
LOWbindings/pydeck/tests/bindings/test_layer.py10def test_constructor_binary_transport():
LOWbindings/pydeck/tests/bindings/test_layer.py39def test_default_layer_attributes():
LOW…s/pydeck/tests/bindings/pydeck_examples/scatterplot.py4def create_scatterplot_test_object():
LOW…dings/pydeck/tests/bindings/pydeck_examples/stacked.py15def create_stacked_test_object():
LOW…s/pydeck/tests/bindings/pydeck_examples/multilayers.py4def create_multi_layer_test_object():
LOW…s/bindings/pydeck_examples/geojson_layer_with_gmaps.py25def create_geojson_layer_with_gmaps_test_object():
LOW…sts/bindings/pydeck_examples/hexagon_layer_function.py42def create_heatmap_test_object():
LOW…s/pydeck/tests/bindings/pydeck_examples/local_image.py9def create_local_image_test_object():
LOW…pydeck/tests/bindings/pydeck_examples/geojson_layer.py25def create_geojson_layer_test_object():
LOW…dings/pydeck/tests/bindings/pydeck_examples/minimal.py4def create_minimal_test_object():
LOW…deck/tests/bindings/data_utils/test_binary_transfer.py71def test_serialize_columns_none_input():
LOWbindings/pydeck/tests/dev-containers/snap.py15async def go_to_page_and_screenshot(url, fname, click_path, output_dir="./screenshots"):
LOWbindings/pydeck/pydeck/data_utils/type_checking.py28def records_from_geo_interface(data):
LOWbindings/pydeck/pydeck/nbextension/__init__.py1def _jupyter_nbextension_paths():
LOWbindings/pydeck/pydeck/bindings/map_styles.py68def get_default_map_identifier(provider: str):
LOWbindings/pydeck/pydeck/bindings/layer.py179 def _add_default_layer_attributes(self, kwargs):
LOWmodules/test-utils/src/lifecycle-test.ts335async function cleanupAfterLayerTestsAsync({
LOWmodules/core/src/lifecycle/create-props.ts98function createPropsPrototypeAndTypes(
LOWmodules/core/src/lifecycle/create-props.ts178function addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps) {
LOWmodules/core/src/lifecycle/create-props.ts200function addAsyncPropsToPropPrototype(defaultProps, propTypes) {
LOWmodules/core/src/lifecycle/create-props.ts226function getDescriptorForAsyncProp(name) {
LOWmodules/core/src/lib/layer.ts1378function splitWebGPUDrawParameters(parameters: LumaParameters): {
LOWmodules/core/src/lib/layer.ts1414function syncModelAttachmentFormats(model: Model, renderPass: RenderPass): void {
31 more matches not shown…
Unused Imports53 hits · 53 pts
SeverityFileLineSnippet
LOWbindings/pydeck-carto/docs/conf.py5
LOWbindings/pydeck-carto/pydeck_carto/__init__.py1
LOWbindings/pydeck-carto/pydeck_carto/__init__.py2
LOWbindings/pydeck-carto/pydeck_carto/__init__.py3
LOWbindings/pydeck-carto/pydeck_carto/__init__.py4
LOWbindings/pydeck/setup.py1
LOWbindings/pydeck/setup.py14
LOWbindings/pydeck/tests/fixtures.py2
LOWbindings/pydeck/tests/fixtures.py4
LOWbindings/pydeck/tests/browser/test_html_renderer.py5
LOWbindings/pydeck/tests/browser/test_html_renderer.py42
LOWbindings/pydeck/tests/browser/screenshot_utils.py16
LOWbindings/pydeck/tests/browser/test_examples.py7
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py1
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py2
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py3
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py4
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py5
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py6
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py7
LOW…ings/pydeck/tests/bindings/pydeck_examples/__init__.py8
LOWbindings/pydeck/docs/scripts/generate_grid_html.py4
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py1
LOWbindings/pydeck/pydeck/__init__.py3
LOWbindings/pydeck/pydeck/__init__.py5
LOWbindings/pydeck/pydeck/__init__.py7
LOWbindings/pydeck/pydeck/types/__init__.py1
LOWbindings/pydeck/pydeck/types/__init__.py2
LOWbindings/pydeck/pydeck/types/__init__.py3
LOWbindings/pydeck/pydeck/widget/widget.py1
LOWbindings/pydeck/pydeck/widget/widget.py5
LOWbindings/pydeck/pydeck/widget/__init__.py1
LOWbindings/pydeck/pydeck/data_utils/__init__.py1
LOWbindings/pydeck/pydeck/data_utils/__init__.py2
LOWbindings/pydeck/pydeck/data_utils/__init__.py2
LOWbindings/pydeck/pydeck/data_utils/__init__.py2
LOWbindings/pydeck/pydeck/data_utils/__init__.py3
LOWbindings/pydeck/pydeck/exceptions/__init__.py1
LOWbindings/pydeck/pydeck/exceptions/__init__.py1
LOWbindings/pydeck/pydeck/bindings/deck.py11
LOWbindings/pydeck/pydeck/bindings/__init__.py1
LOWbindings/pydeck/pydeck/bindings/__init__.py2
LOWbindings/pydeck/pydeck/bindings/__init__.py3
LOWbindings/pydeck/pydeck/bindings/__init__.py4
LOWbindings/pydeck/pydeck/bindings/__init__.py5
LOWbindings/pydeck/pydeck/bindings/__init__.py6
LOWbindings/pydeck/pydeck/bindings/__init__.py8
Verbosity Indicators27 hits · 44 pts
SeverityFileLineSnippet
LOWscripts/codemods/tape-to-vitest/transform.ts43 // Step 0: Detect tape test parameters in utility functions
LOWscripts/codemods/tape-to-vitest/transform.ts118 // Step 1: Save header comments from first node, then remove tape imports
LOWscripts/codemods/tape-to-vitest/transform.ts149 // Step 2: Find test() calls and identify which have nested t.test()
LOWscripts/codemods/tape-to-vitest/transform.ts206 // Step 3: Convert nested t.test() to test()
LOWscripts/codemods/tape-to-vitest/transform.ts239 // Step 4: Convert t.end() and t.plan() - remove them (both as statements and return statements)
LOWscripts/codemods/tape-to-vitest/transform.ts266 // Step 5: Convert t.ok/t.true/t.assert(value, msg) -> expect(value, msg).toBeTruthy()
LOWscripts/codemods/tape-to-vitest/transform.ts318 // Step 6: Convert t.notOk/t.false(value, msg) -> expect(value, msg).toBeFalsy()
LOWscripts/codemods/tape-to-vitest/transform.ts426 // Step 8: Convert t.deepEqual(a, b, msg) -> expect(a, msg).toEqual(b)
LOWscripts/codemods/tape-to-vitest/transform.ts458 // Step 9: Convert t.throws(fn, expected?, msg?) -> expect(fn, msg).toThrow(expected?)
LOWscripts/codemods/tape-to-vitest/transform.ts534 // Step 10: Convert t.comment/t.pass(msg) -> console.log(msg)
LOWscripts/codemods/tape-to-vitest/transform.ts559 // Step 11: Convert t.fail(msg) -> throw new Error(msg)
LOWscripts/codemods/tape-to-vitest/transform.ts598 // Step 12: Convert t.notEqual/t.notEquals/t.isNot/t.not(a, b, msg) -> expect(a, msg).not.toBe(b)
LOWscripts/codemods/tape-to-vitest/transform.ts633 // Step 13: Convert t.notDeepEqual/t.notDeepEquals(a, b, msg) -> expect(a, msg).not.toEqual(b)
LOWscripts/codemods/tape-to-vitest/transform.ts668 // Step 14: Convert t.doesNotThrow(fn, msg) -> expect(fn, msg).not.toThrow()
LOWscripts/codemods/tape-to-vitest/transform.ts701 // Step 15: Convert callback patterns like onError: t.fail, .catch(t.fail)
LOWscripts/codemods/tape-to-vitest/transform.ts771 // Step 16: Convert makeSpy(obj, 'method') -> vi.spyOn(obj, 'method')
LOWscripts/codemods/tape-to-vitest/transform.ts814 // Step 17: Convert spy.called/spy.callCount patterns
LOWscripts/codemods/tape-to-vitest/transform.ts949 // Step 18: Convert @deck.gl/test-utils -> @deck.gl/test-utils/vitest
LOWscripts/codemods/tape-to-vitest/transform.ts962 // Step 19: Remove t argument from function call sites
LOWscripts/codemods/tape-to-vitest/transform.ts979 // Step 20: Add vitest import at the top, preserving leading comments (header)
LOWmodules/core/src/lib/attribute/attribute-manager.ts200 // Step 1: try update attribute directly from external buffers
LOWmodules/core/src/lib/attribute/attribute-manager.ts207 // Step 2: try set packed value from external typed array
LOWmodules/core/src/lib/attribute/attribute-manager.ts213 // Step 3: try set constant value from props
LOWmodules/core/src/lib/attribute/attribute-manager.ts217 // Step 4: update via updater callback
LOWmodules/mapbox/src/resolve-layer-groups.ts36 // Step 1: remove "group" layers that no longer exist
LOWmodules/mapbox/src/resolve-layer-groups.ts50 // Step 2: add missing "group" layers
LOWmodules/mapbox/src/resolve-layer-groups.ts71 // Step 3: check the order of layers
Self-Referential Comments11 hits · 31 pts
SeverityFileLineSnippet
MEDIUMbindings/pydeck/examples/text_layer.py15# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/great_circle_layer.py23# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/s2_layer.py17# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/a5_layer.py20# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/screengrid_layer.py18# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/hexagon_layer.py18# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/scatterplot_layer.py20# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/grid_layer.py18# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/h3_cluster_layer.py51# Define a layer to display on a map
MEDIUMbindings/pydeck/examples/h3_hexagon_layer.py17# Define a layer to display on a map
MEDIUMbindings/pydeck/pydeck/bindings/layer.py50 >>> # Define a layer to display on a map
Magic Placeholder Names6 hits · 30 pts
SeverityFileLineSnippet
HIGHdocs/developer-guide/base-maps/using-with-3d-tiles.md33 fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}}
HIGHdocs/developer-guide/base-maps/using-with-3d-tiles.md56 fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}}
HIGHdocs/developer-guide/base-maps/using-with-3d-tiles.md114 fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}}
HIGHdocs/developer-guide/base-maps/using-with-3d-tiles.md151 fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}},
HIGHexamples/basemap-browser/README.md93export GoogleMapsAPIKey="your-api-key"
HIGHexamples/get-started/pure-js/harp.gl/README.md11export HereApiKey=<your_api_key>
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippet
CRITICAL…aggregation-layers/heatmap-layer/heatmap-layer.spec.ts262 const positionAttribute = layer.state.weightsTransform.model.bufferLayout.find(
CRITICALwebsite/static/events/madrid-summit-2022/map/map.js91 ...data.data.attributes.positions.value.subarray(2 * startIndex, 2 * startIndex + 2)
AI Slop Vocabulary4 hits · 12 pts
SeverityFileLineSnippet
MEDIUMmodules/core/src/passes/pick-layers-pass.ts200 // TODO - combine small layers to better utilize the picking color space
MEDIUMmodules/core/src/utils/iterable-utils.ts33 // visitor can optionally utilize this to avoid constructing a new array for every object
MEDIUMmodules/core/src/lib/attribute/gl-utils.ts31 // Definitely not valid. TODO - stricter validation?
MEDIUMmodules/arcgis/bundle.ts7// @ts-ignore import from transpiled code to leverage TS transforms
Over-Commented Block11 hits · 11 pts
SeverityFileLineSnippet
LOWtest/modules/jupyter-widget/dummy-mapbox-gl.ts1// deck.gl
LOWtest/modules/extensions/mask/index.ts1// deck.gl
LOW…regation-layers/contour-layer/marching-squares.spec.ts41 code: 15
LOW…regation-layers/contour-layer/marching-squares.spec.ts161 },
LOWtest/apps/attribute-worker/test-cases.js21 data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/bart-segments.json',
LOWtest/interaction/picking.spec.ts101 const uniforms = (layers[0] as any).state.model.shaderInputs.getUniformValues();
LOWtest/interaction/picking.js61 // {
LOW…ayers/particle-layer/transform-feedback-vertex.glsl.js1// deck.gl
LOW.github/workflows/scorecard.yml41 uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
LOW…ter-widget/src/lib/components/get-component-by-name.js1// deck.gl
LOW…s/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts21#ifdef HAS_UV
Excessive Try-Catch Wrapping10 hits · 11 pts
SeverityFileLineSnippet
LOWbindings/pydeck/setup.py95 except Exception:
LOWbindings/pydeck/setup.py103 except Exception:
MEDIUMbindings/pydeck/setup.py98def has_build_utilities(self):
LOWbindings/pydeck/tests/browser/screenshot_utils.py37 except Exception:
LOWbindings/pydeck/tests/browser/screenshot_utils.py76 except Exception as e:
LOWbindings/pydeck/tests/browser/test_examples.py56 except Exception as e:
LOWbindings/pydeck/tests/dev-containers/snap.py31 except Exception as e:
LOWbindings/pydeck/docs/scripts/snap_thumbnails.py95 except Exception as e:
LOWbindings/pydeck/docs/scripts/snap_thumbnails.py121 except Exception as e:
LOWbindings/pydeck/pydeck/widget/widget.py20 except Exception as e:
Deep Nesting4 hits · 4 pts
SeverityFileLineSnippet
LOWbindings/pydeck/bump_version.py14
LOWbindings/pydeck/pydeck/widget/widget.py106
LOWbindings/pydeck/pydeck/bindings/deck.py163
LOWbindings/pydeck/pydeck/bindings/layer.py18
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippet
LOWbindings/pydeck/examples/binary_transport.py58 # Set use_binary_transport to `True`
LOWbindings/pydeck/pydeck/bindings/layer.py155 # Loop through data columns and convert them to numpy arrays
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippet
LOWtest/modules/core/lib/layer.spec.ts358 async function getData() {