WebGL2 powered visualization framework
This report summarizes scanner evidence for visgl/deck.gl, a TypeScript project with 14,723 GitHub stars. SynthScan examined 366,208 lines of code across 2817 source files, recording 522 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 1.8 (Low 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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 439 finding(s).
Are imports declared and package/API names verified? 71 finding(s).
Are wrappers, guards, and repeated structures necessary? 352 finding(s).
Which changes need focused human review? 522 finding(s).
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.
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.
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.
The scanner identified 522 distinct pattern matches across 19 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/setup/typed-array-equality.ts | 15 | export function registerTypedArrayEquality(): void { | CODE |
| LOW | test/render/render-test-suite.ts | 59 | export function isRenderTestDeviceEnabled(deviceType: TestDeviceType): boolean { | CODE |
| LOW | test/render/render-test-suite.ts | 117 | async function createIsolatedDeviceContext( | CODE |
| LOW | test/render/render-test-suite.ts | 253 | export function runPersistentRenderTestSuite( | CODE |
| LOW | test/render/test-cases/terrain-layer.spec.ts | 27 | function waitAfterDefaultCompletion(waitMs = 0) { | CODE |
| LOW | test/render/test-cases/text-layer.spec.ts | 107 | function getSignedDistanceToRectangle(x, y, {left, top, right, bottom}) { | CODE |
| LOW | test/render/test-cases/text-layer.spec.ts | 116 | function getSignedDistanceToCircle(x, y, centerX, centerY, radius) { | CODE |
| LOW | test/render/test-cases/point-cloud-layer.spec.ts | 108 | function createAntialiasingGoldenVariant(antialiasing: boolean): PointCloudLayer { | CODE |
| LOW | test/render/test-cases/point-cloud-layer.spec.ts | 146 | async function measureAntialiasingCoverage(antialiasing: boolean): Promise<Coverage> { | CODE |
| LOW | test/render/test-cases/path-dash.spec.ts | 478 | function getModeCombinationVerticalPosition(index: number): number { | CODE |
| LOW | test/render/test-cases/line-layer.spec.ts | 24 | function createAntialiasingVariant(antialiasing: boolean): LineLayer { | CODE |
| LOW | test/render/test-cases/line-layer.spec.ts | 88 | async function measureAntialiasingCoverage(antialiasing: boolean): Promise<Coverage> { | CODE |
| LOW | test/render/test-cases/arc-layer.spec.ts | 259 | function createAntialiasingGoldenVariant(antialiasing: boolean): ArcLayer { | CODE |
| LOW | test/render/test-cases/arc-layer.spec.ts | 302 | async function measureAntialiasingCoverage(antialiasing: boolean): Promise<Coverage> { | CODE |
| LOW | test/render/test-cases/path-layer.spec.ts | 369 | function createAntialiasingGoldenVariant(antialiasing: boolean) { | CODE |
| LOW | test/render/test-cases/path-layer.spec.ts | 432 | function createAntialiasingTestContainer(): HTMLDivElement { | CODE |
| LOW | test/render/test-cases/path-layer.spec.ts | 442 | async function measureAntialiasingCoverage(layerProps: Record<string, unknown>): Promise<Coverage> { | CODE |
| LOW | test/modules/cross-package-imports.node.spec.ts | 31 | function findCrossPackageRelativeImports(): string[] { | CODE |
| LOW | test/modules/core/viewports/projection-scale-error.ts | 29 | export function estimateProjectionScaleError( | CODE |
| LOW | test/modules/core/controllers/controllers.spec.ts | 274 | function createMapRubberBandController({ | CODE |
| LOW | test/modules/core/controllers/controllers.spec.ts | 633 | function createRubberBandController({ | CODE |
| LOW | test/modules/core/controllers/controllers.spec.ts | 675 | function advanceRubberBandTransition( | CODE |
| LOW | test/modules/core/controllers/controllers.spec.ts | 685 | function expectRubberBandInteractionEnded(interactionStates: any[]) { | CODE |
| LOW | …ules/core/shaderlib/project/project-glsl-test-utils.ts | 115 | export function getTestProjectionParameters( | CODE |
| LOW | test/modules/layers/column-layer.spec.ts | 10 | function expectUniqueGeometryLayout(layer: ColumnLayer): void { | CODE |
| LOW | test/modules/carto/layers/vector-tile-layer.spec.ts | 190 | function createTestVectorTileLayer( | CODE |
| LOW | test/apps/attribute-worker/worker.js | 75 | function getCompositeLayerSnapshot(layer) { | CODE |
| LOW | test/apps/attribute-worker/worker.js | 88 | function getPrimitiveLayerSnapshot(layer) { | CODE |
| LOW | test/apps/carto-map/app.ts | 33 | async function createMapWithDeckController(result: FetchMapResult) { | CODE |
| LOW | test/apps/carto-map/app.ts | 55 | async function createMapWithMapboxOverlay(result: FetchMapResult) { | CODE |
| LOW | test/apps/carto-map/app.ts | 77 | async function createMapWithGoogleMapsOverlay(result: FetchMapResult) { | CODE |
| LOW | test/apps/json-pure-js/children.js | 6 | export default function positionChildrenUnderViews(domElement, viewManager) { | CODE |
| LOW | docs/developer-guide/interactivity.md | 267 | function applyViewStateConstraints(viewState) { | CODE |
| LOW | docs/developer-guide/interactivity.md | 300 | function applyViewStateConstraints(viewState: MapViewState): MapViewState { | CODE |
| LOW | showcases/ascii/ascii-layer/utils.js | 7 | function normalizeCharacterBrightness(darkPixelsByCharacter) { | CODE |
| LOW | showcases/ascii/ascii-layer/utils.js | 28 | export function sortCharactersByBrightness(darkPixelsByCharacter) { | CODE |
| LOW | dev-docs/RFCs/proposals/gpu-data-frame-rfc.md | 67 | function mapArrowSchemaToGPUAttributes(schema) { | CODE |
| LOW | dev-docs/RFCs/proposals/gpu-data-frame-rfc.md | 125 | function convertBinaryPredicateComponentsToGLSL(arrowPredicate, gpuSchema) { | CODE |
| LOW | dev-docs/RFCs/proposals/chunked-data-support-rfc.md | 117 | function allocateGPUBuffersForChunks(table) { | CODE |
| LOW | dev-docs/RFCs/proposals/vitest-migration-rfc.md | 560 | async function cleanupAfterLayerTestsAsync(resources: TestResources): Promise<Error | null> { | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 150 | export function getTraceDependencyCapacityOptions( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 174 | export function getMaximumGeneratedTraceDependencyCount(spanCount: number): number { | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 185 | export function getTraceFocusFrontierCapacity( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 243 | export function isTraceDependencyBundlingEnabled( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 267 | export function getTraceDependencyDisplayBudget( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 299 | export function getTraceDensityBinParameters( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 409 | export function getMaximumTraceAdjacencyByteLength(dependencyCount: number): number { | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 507 | export function getTraceDatasetTransferables(dataset: TraceDatasetData): ArrayBuffer[] { | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 631 | export function releaseTraceDatasetStorage(dataset: TraceDatasetData): void { | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 652 | export function makeTraceDependencyBatches( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 673 | function makeTraceDependencyBatchesWithScratch( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 839 | export function makeTraceTemporalIndexTopology( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 847 | function makeTraceTemporalIndexData( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 962 | export function getTraceTemporalIndexLevel( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 1021 | export function makeTraceDependencyChunks( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 1066 | export function makeTraceDependencyChunkBatchIndex( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 1271 | function annotateTraceParentTopology( | CODE |
| LOW | examples/experimental/gpu-trace-viewer/trace-data.ts | 1350 | function makeTraceAdjacencyFromCounts(cursors: Uint32Array, edgeCount: number): TraceAdjacencyData { | CODE |
| LOW | examples/v10-experimental/riverfront-lighting-ui.ts | 18 | export async function startRiverfrontLightingExample(kind: RiverfrontLightingKind): Promise<void> { | CODE |
| LOW | examples/v10-experimental/deck-example-device.ts | 21 | export async function resolveDeckExampleDeviceType( | CODE |
| 277 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck-carto/docs/conf.py | 5 | CODE | |
| LOW | bindings/pydeck-carto/pydeck_carto/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck-carto/pydeck_carto/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck-carto/pydeck_carto/__init__.py | 3 | CODE | |
| LOW | bindings/pydeck-carto/pydeck_carto/__init__.py | 4 | CODE | |
| LOW | bindings/pydeck/setup.py | 1 | CODE | |
| LOW | bindings/pydeck/setup.py | 14 | CODE | |
| LOW | bindings/pydeck/tests/fixtures.py | 2 | CODE | |
| LOW | bindings/pydeck/tests/fixtures.py | 4 | CODE | |
| LOW | bindings/pydeck/tests/browser/test_html_renderer.py | 5 | CODE | |
| LOW | bindings/pydeck/tests/browser/test_html_renderer.py | 42 | CODE | |
| LOW | bindings/pydeck/tests/browser/screenshot_utils.py | 16 | CODE | |
| LOW | bindings/pydeck/tests/browser/test_examples.py | 7 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 1 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 2 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 3 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 4 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 5 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 6 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 7 | CODE | |
| LOW | …ings/pydeck/tests/bindings/pydeck_examples/__init__.py | 8 | CODE | |
| LOW | …sts/bindings/pydeck_examples/hexagon_layer_function.py | 1 | CODE | |
| LOW | …dings/pydeck/tests/bindings/pydeck_examples/minimal.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 3 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 5 | CODE | |
| LOW | bindings/pydeck/pydeck/__init__.py | 7 | CODE | |
| LOW | bindings/pydeck/pydeck/types/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/types/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck/pydeck/types/__init__.py | 3 | CODE | |
| LOW | bindings/pydeck/pydeck/widget/widget.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/widget/widget.py | 5 | CODE | |
| LOW | bindings/pydeck/pydeck/widget/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/data_utils/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/data_utils/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck/pydeck/data_utils/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck/pydeck/data_utils/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck/pydeck/data_utils/__init__.py | 3 | CODE | |
| LOW | bindings/pydeck/pydeck/exceptions/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/exceptions/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/deck.py | 8 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/deck.py | 11 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 1 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 2 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 3 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 4 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 5 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 6 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 7 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/__init__.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | dev-docs/RFCs/v5.0/break-out-event-manager-rfc.md | 15 | ## Step 1: break out deck.gl EventManager into separate module | COMMENT |
| LOW | dev-docs/RFCs/v5.0/break-out-event-manager-rfc.md | 31 | ## Step 2: Replace react-map-gl event handling with new module | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 43 | // Step 0: Detect tape test parameters in utility functions | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 118 | // Step 1: Save header comments from first node, then remove tape imports | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 149 | // Step 2: Find test() calls and identify which have nested t.test() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 206 | // Step 3: Convert nested t.test() to test() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 239 | // Step 4: Convert t.end() and t.plan() - remove them (both as statements and return statements) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 266 | // Step 5: Convert t.ok/t.true/t.assert(value, msg) -> expect(value, msg).toBeTruthy() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 318 | // Step 6: Convert t.notOk/t.false(value, msg) -> expect(value, msg).toBeFalsy() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 426 | // Step 8: Convert t.deepEqual(a, b, msg) -> expect(a, msg).toEqual(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 458 | // Step 9: Convert t.throws(fn, expected?, msg?) -> expect(fn, msg).toThrow(expected?) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 534 | // Step 10: Convert t.comment/t.pass(msg) -> console.log(msg) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 559 | // Step 11: Convert t.fail(msg) -> throw new Error(msg) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 598 | // Step 12: Convert t.notEqual/t.notEquals/t.isNot/t.not(a, b, msg) -> expect(a, msg).not.toBe(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 633 | // Step 13: Convert t.notDeepEqual/t.notDeepEquals(a, b, msg) -> expect(a, msg).not.toEqual(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 668 | // Step 14: Convert t.doesNotThrow(fn, msg) -> expect(fn, msg).not.toThrow() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 701 | // Step 15: Convert callback patterns like onError: t.fail, .catch(t.fail) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 771 | // Step 16: Convert makeSpy(obj, 'method') -> vi.spyOn(obj, 'method') | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 814 | // Step 17: Convert spy.called/spy.callCount patterns | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 949 | // Step 18: Convert @deck.gl/test-utils -> @deck.gl/test-utils/vitest | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 962 | // Step 19: Remove t argument from function call sites | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 979 | // Step 20: Add vitest import at the top, preserving leading comments (header) | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 213 | // Step 1: try update attribute directly from external buffers | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 220 | // Step 2: try set packed value from external typed array | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 226 | // Step 3: try set constant value from props | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 230 | // Step 4: update via updater callback | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 36 | // Step 1: remove "group" layers that no longer exist | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 50 | // Step 2: add missing "group" layers | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 71 | // Step 3: check the order of layers | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 43 | // Step 0: Detect tape test parameters in utility functions | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 118 | // Step 1: Save header comments from first node, then remove tape imports | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 149 | // Step 2: Find test() calls and identify which have nested t.test() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 206 | // Step 3: Convert nested t.test() to test() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 239 | // Step 4: Convert t.end() and t.plan() - remove them (both as statements and return statements) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 266 | // Step 5: Convert t.ok/t.true/t.assert(value, msg) -> expect(value, msg).toBeTruthy() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 318 | // Step 6: Convert t.notOk/t.false(value, msg) -> expect(value, msg).toBeFalsy() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 426 | // Step 8: Convert t.deepEqual(a, b, msg) -> expect(a, msg).toEqual(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 458 | // Step 9: Convert t.throws(fn, expected?, msg?) -> expect(fn, msg).toThrow(expected?) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 534 | // Step 10: Convert t.comment/t.pass(msg) -> console.log(msg) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 559 | // Step 11: Convert t.fail(msg) -> throw new Error(msg) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 598 | // Step 12: Convert t.notEqual/t.notEquals/t.isNot/t.not(a, b, msg) -> expect(a, msg).not.toBe(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 633 | // Step 13: Convert t.notDeepEqual/t.notDeepEquals(a, b, msg) -> expect(a, msg).not.toEqual(b) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 668 | // Step 14: Convert t.doesNotThrow(fn, msg) -> expect(fn, msg).not.toThrow() | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 701 | // Step 15: Convert callback patterns like onError: t.fail, .catch(t.fail) | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 771 | // Step 16: Convert makeSpy(obj, 'method') -> vi.spyOn(obj, 'method') | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 814 | // Step 17: Convert spy.called/spy.callCount patterns | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 949 | // Step 18: Convert @deck.gl/test-utils -> @deck.gl/test-utils/vitest | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 962 | // Step 19: Remove t argument from function call sites | COMMENT |
| LOW | scripts/codemods/tape-to-vitest/transform.ts | 979 | // Step 20: Add vitest import at the top, preserving leading comments (header) | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 213 | // Step 1: try update attribute directly from external buffers | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 220 | // Step 2: try set packed value from external typed array | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 226 | // Step 3: try set constant value from props | COMMENT |
| LOW⚡ | modules/core/src/lib/attribute/attribute-manager.ts | 230 | // Step 4: update via updater callback | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 36 | // Step 1: remove "group" layers that no longer exist | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 50 | // Step 2: add missing "group" layers | COMMENT |
| LOW | modules/mapbox/src/resolve-layer-groups.ts | 71 | // Step 3: check the order of layers | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bindings/pydeck/examples/text_layer.py | 15 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/great_circle_layer.py | 23 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/s2_layer.py | 17 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/a5_layer.py | 20 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/screengrid_layer.py | 18 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/hexagon_layer.py | 18 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/scatterplot_layer.py | 20 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/grid_layer.py | 18 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/h3_cluster_layer.py | 51 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/examples/h3_hexagon_layer.py | 17 | # Define a layer to display on a map | COMMENT |
| MEDIUM | bindings/pydeck/pydeck/bindings/layer.py | 50 | >>> # Define a layer to display on a map | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/developer-guide/base-maps/using-with-3d-tiles.md | 33 | fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}} | CODE |
| HIGH | docs/developer-guide/base-maps/using-with-3d-tiles.md | 56 | fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}} | CODE |
| HIGH | docs/developer-guide/base-maps/using-with-3d-tiles.md | 114 | fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}} | CODE |
| HIGH | docs/developer-guide/base-maps/using-with-3d-tiles.md | 151 | fetch: {headers: {'X-GOOG-API-KEY': YOUR_API_KEY}}, | CODE |
| HIGH | examples/basemap-browser/README.md | 93 | export GoogleMapsAPIKey="your-api-key" | CODE |
| HIGH | examples/get-started/pure-js/harp.gl/README.md | 11 | export HereApiKey=<your_api_key> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/render/test-cases/path-dash.spec.ts | 821 | // dashUnits at z12, z13 and z14 (see createDashUnitsCase). The z12 case is also rendered | COMMENT |
| LOW | test/modules/jupyter-widget/dummy-mapbox-gl.ts | 1 | // deck.gl | COMMENT |
| LOW | test/modules/extensions/mask/index.ts | 1 | // deck.gl | COMMENT |
| LOW | …regation-layers/contour-layer/marching-squares.spec.ts | 41 | code: 15 | COMMENT |
| LOW | …regation-layers/contour-layer/marching-squares.spec.ts | 161 | }, | COMMENT |
| LOW | test/apps/dash-styles/app.js | 1 | // deck.gl | COMMENT |
| LOW | test/apps/dash-styles/app.js | 21 | // What each control is for: | COMMENT |
| LOW | test/apps/attribute-worker/test-cases.js | 21 | data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/bart-segments.json', | COMMENT |
| LOW | test/interaction/picking.spec.ts | 101 | const uniforms = (layers[0] as any).state.model.shaderInputs.getUniformValues(); | COMMENT |
| LOW | test/interaction/picking.js | 61 | // { | COMMENT |
| LOW | …ayers/particle-layer/transform-feedback-vertex.glsl.js | 1 | // deck.gl | COMMENT |
| LOW | .github/workflows/scorecard.yml | 41 | uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4 | COMMENT |
| LOW | modules/layers/src/column-layer/column-geometry.ts | 101 | // Duplicate last vertex of side trinagles and first vertex of the top cap to preserve winding order. | COMMENT |
| LOW | modules/layers/src/path-layer/path-layer.wgsl.ts | 121 | tangent = select(perpA, normalize(tangent), length(tangent) > 0.0); | COMMENT |
| LOW | modules/layers/src/path-layer/path-layer-vertex.glsl.ts | 81 | vec2 tangent = dirA + dirB; | COMMENT |
| LOW | …ter-widget/src/lib/components/get-component-by-name.js | 1 | // deck.gl | COMMENT |
| LOW | modules/geo-layers/src/mesh-layer/mesh-layer.wgsl.ts | 1 | // deck.gl | COMMENT |
| LOW | modules/extensions/src/path-style/shaders.glsl.ts | 101 | // vPathPosition.y to it in fp32 loses the latter entirely, freezing the pattern mid-segment. | COMMENT |
| LOW | modules/extensions/src/path-style/shaders.glsl.ts | 241 | if (unitLength > 0.0 && gapLength > 0.0) { | COMMENT |
| LOW | …s/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts | 21 | #ifdef HAS_UV | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …aggregation-layers/heatmap-layer/heatmap-layer.spec.ts | 397 | const positionAttribute = layer.state.weightsTransform.model.bufferLayout.find( | CODE |
| CRITICAL | …dules/deck-arrow-layers/src/layers/arrow-text-layer.ts | 741 | this.getLayerState().sourceInfos = update.textInput.sourceVectors.positions.data.map( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | bindings/pydeck/tests/test_settings.py | 79 | assert "const customLibraries = null;" in html_str | CODE |
| HIGH | bindings/pydeck/examples/widgets.py | 69 | pdk.Widget("InfoWidget", mode="hover", getTooltip="@@=object && object.properties && object.properties.name"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | modules/core/src/passes/pick-layers-pass.ts | 202 | // TODO - combine small layers to better utilize the picking color space | COMMENT |
| MEDIUM | modules/core/src/utils/iterable-utils.ts | 33 | // visitor can optionally utilize this to avoid constructing a new array for every object | COMMENT |
| MEDIUM | modules/core/src/lib/attribute/gl-utils.ts | 31 | // Definitely not valid. TODO - stricter validation? | COMMENT |
| MEDIUM | modules/arcgis/bundle.ts | 7 | // @ts-ignore import from transpiled code to leverage TS transforms | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck/setup.py | 95 | except Exception: | CODE |
| LOW | bindings/pydeck/setup.py | 103 | except Exception: | CODE |
| MEDIUM | bindings/pydeck/setup.py | 98 | def has_build_utilities(self): | CODE |
| LOW | bindings/pydeck/tests/browser/screenshot_utils.py | 37 | except Exception: | CODE |
| LOW | bindings/pydeck/tests/browser/screenshot_utils.py | 76 | except Exception as e: | CODE |
| LOW | bindings/pydeck/tests/browser/test_examples.py | 56 | except Exception as e: | CODE |
| LOW | bindings/pydeck/tests/dev-containers/snap.py | 31 | except Exception as e: | CODE |
| LOW | bindings/pydeck/docs/scripts/snap_thumbnails.py | 105 | except Exception as e: | CODE |
| LOW | bindings/pydeck/docs/scripts/snap_thumbnails.py | 133 | except Exception as e: | CODE |
| LOW | bindings/pydeck/pydeck/widget/widget.py | 20 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/pydeck/src/app.tsx | 39 | print(UK_ACCIDENTS_DATA) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck/bump_version.py | 14 | CODE | |
| LOW | bindings/pydeck/pydeck/settings.py | 87 | CODE | |
| LOW | bindings/pydeck/pydeck/widget/widget.py | 106 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/deck.py | 179 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/layer.py | 18 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bindings/pydeck/pydeck/bindings/json_tools.py | 84 | except (TypeError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/modules/jupyter-widget/index.spec.ts | 51 | mapbox_key: 'fake-key', | CODE |
| LOW⚡ | bindings/pydeck/tests/io/test_html.py | 27 | rendered = render_json_to_html(fixtures["minimal"], "fake_key") | CODE |
| LOW⚡ | bindings/pydeck/tests/io/test_html.py | 29 | assert "fake_key" in rendered | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck/examples/binary_transport.py | 58 | # Set use_binary_transport to `True` | COMMENT |
| LOW | bindings/pydeck/pydeck/bindings/layer.py | 155 | # Loop through data columns and convert them to numpy arrays | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck/pydeck/io/html.py | 77 | CODE | |
| LOW | bindings/pydeck/pydeck/io/html.py | 144 | CODE | |
| LOW | bindings/pydeck/pydeck/bindings/deck.py | 34 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/modules/core/lib/layer.spec.ts | 390 | async function getData() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bindings/pydeck-carto/pydeck_carto/__init__.py | 6 | __all__ = [ | CODE |