🐠 Babel is a compiler for writing next generation JavaScript.
This report summarizes scanner evidence for babel/babel, a TypeScript project with 44,054 GitHub stars. SynthScan examined 211,911 lines of code across 2062 source files, recording 317 pattern matches distributed across 10 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? 311 finding(s).
Are imports declared and package/API names verified? 6 finding(s).
Are wrappers, guards, and repeated structures necessary? 254 finding(s).
Which changes need focused human review? 317 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 317 distinct pattern matches across 10 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 | Gulpfile.ts | 143 | function generateHelperGlobalsData(filename: string) { | CODE |
| LOW | Gulpfile.ts | 527 | function babelPluginInlineConstNumericObjects({ types: t }) { | CODE |
| LOW | babel.config.ts | 387 | function pluginRequiredVersionMacro( | CODE |
| LOW | babel.config.ts | 435 | function transformNamedBabelTypesImportToDestructuring({ | CODE |
| LOW | babel.config.ts | 485 | function pluginReplaceTSImportExtension() { | CODE |
| LOW | babel.config.ts | 550 | function pluginBabelParserTokenType({ | CODE |
| LOW | babel.config.ts | 577 | function pluginGeneratorOptimization({ types: t }: PluginAPI) { | CODE |
| LOW | scripts/generate-babel-7-tests.ts | 19 | function getUnstagedModifiedTestOutput() { | CODE |
| LOW | …/babel-plugin-transform-node-protocol-import/plugin.ts | 14 | function pluginBabelTransformNodeProtocolImports({ | CODE |
| LOW | scripts/parser-tests/typescript/index.js | 37 | function generateTSBaselineErrorMap() { | CODE |
| LOW | scripts/parser-tests/typescript/index.js | 54 | function baselineContainsParserErrorCodes(testName) { | CODE |
| LOW | scripts/parser-tests/typescript/index.js | 150 | function splitTwoslashCodeInfoFiles(code, defaultFileName, root = "") { | CODE |
| LOW | scripts/parser-tests/flow/index.js | 11 | function convertFlowParserTestOptionsToBabelParserOptions(testOptions = {}) { | CODE |
| LOW | …/babel-plugin-transform-parameters/src/shadow-utils.ts | 30 | export function collectShadowedParamsNames( | CODE |
| LOW | …x-v8-static-class-fields-redefine-readonly/src/util.ts | 116 | export function getPotentiallyBuggyFieldsIndexes(path: NodePath<t.Class>) { | CODE |
| LOW | …x-v8-static-class-fields-redefine-readonly/src/util.ts | 181 | export function getNameOrLengthStaticFieldsIndexes(path: NodePath<t.Class>) { | CODE |
| LOW | packages/babel-traverse/src/cache.ts | 27 | export function getOrCreateCachedPaths( | CODE |
| LOW | packages/babel-traverse/src/path/comments.ts | 13 | export function shareCommentsWithSiblings(this: NodePath<t.Node | null>) { | CODE |
| LOW | packages/babel-traverse/src/path/ancestry.ts | 89 | export function getEarliestCommonAncestorFrom( | CODE |
| LOW | packages/babel-traverse/src/path/ancestry.ts | 138 | export function getDeepestCommonAncestorFrom( | CODE |
| LOW | packages/babel-traverse/src/path/replacement.ts | 244 | export function replaceExpressionWithStatements( | CODE |
| LOW | packages/babel-traverse/src/path/replacement.ts | 332 | function gatherSequenceExpressions( | CODE |
| LOW | packages/babel-traverse/src/path/family.ts | 64 | function completionRecordForSwitch( | CODE |
| LOW | packages/babel-traverse/src/path/family.ts | 112 | function replaceBreakStatementInBreakCompletion( | CODE |
| LOW | packages/babel-traverse/src/path/family.ts | 127 | function getStatementListCompletion( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 523 | function getOuterBindingIdentifiers( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 526 | function getOuterBindingIdentifiers( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 529 | function getOuterBindingIdentifiers( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 533 | function getOuterBindingIdentifiers( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 542 | function getBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 546 | function getBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 550 | function getBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 557 | function getBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 619 | function getOuterBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 622 | function getOuterBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 625 | function getOuterBindingIdentifierPaths( | CODE |
| LOW⚡ | packages/babel-traverse/src/path/family.ts | 629 | function getOuterBindingIdentifierPaths( | CODE |
| LOW | packages/babel-traverse/src/path/introspection.ts | 59 | export function canHaveVariableDeclarationOrExpression( | CODE |
| LOW | packages/babel-traverse/src/path/introspection.ts | 75 | export function canSwapBetweenExpressionAndStatement( | CODE |
| LOW | packages/babel-traverse/src/path/introspection.ts | 307 | function isExecutionUncertainInList(paths: NodePath[], maxIndex: number) { | CODE |
| LOW | packages/babel-traverse/src/path/context.ts | 241 | export function requeueComputedKeyAndDecorators( | CODE |
| LOW | packages/babel-traverse/src/path/conversion.ts | 120 | export function unwrapFunctionEnvironment( | CODE |
| LOW | packages/babel-traverse/src/path/conversion.ts | 148 | export function arrowFunctionToExpression( | CODE |
| LOW | packages/babel-traverse/src/path/modification.ts | 151 | function isHiddenInSequenceExpression(path: NodePath): boolean { | CODE |
| LOW | packages/babel-traverse/src/path/modification.ts | 159 | function isAlmostConstantAssignment( | CODE |
| LOW | …babel-traverse/src/path/lib/virtual-types-validator.ts | 105 | export function isReferencedMemberExpression( | CODE |
| LOW | …babel-traverse/src/path/inference/inferer-reference.ts | 41 | function getTypeAnnotationBindingConstantViolations( | CODE |
| LOW | …babel-traverse/src/path/inference/inferer-reference.ts | 114 | function getConstantViolationsBefore( | CODE |
| LOW | …babel-traverse/src/path/inference/inferer-reference.ts | 129 | function inferAnnotationFromBinaryExpression( | CODE |
| LOW | packages/babel-traverse/src/scope/index.ts | 258 | function isAnonymousFunctionExpression( | CODE |
| LOW | …-helper-import-to-platform-api/src/plugin-x-modules.ts | 16 | export function createImportTypeAsDefaultPlugin({ | CODE |
| LOW | …kages/babel-helper-import-to-platform-api/src/index.ts | 273 | function buildParallelStaticImports( | CODE |
| LOW | …kages/babel-helper-import-to-platform-api/src/index.ts | 316 | export function injectParallelStaticImports( | CODE |
| LOW | …/babel-plugin-transform-template-literals/src/index.ts | 42 | function buildConcatCallExpressions(items: t.Expression[]): t.CallExpression { | CODE |
| LOW | packages/babel-cli/src/babel/watcher.ts | 83 | export function updateExternalDependencies( | CODE |
| LOW | …in-transform-explicit-resource-management/src/index.ts | 12 | function isAnonymousFunctionDefinition( | CODE |
| LOW | packages/babel-parser/test/helpers/run-fixture-tests.js | 59 | function runAutogeneratedParseTests( | CODE |
| LOW | packages/babel-parser/src/index.ts | 99 | function generateExportedTokenTypes( | CODE |
| LOW | packages/babel-parser/src/util/location.ts | 40 | export function createPositionWithColumnOffset( | CODE |
| LOW | packages/babel-parser/src/plugins/typescript/index.ts | 4855 | function isValidAmbientConstInitializer( | CODE |
| 194 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …es/babel-standalone/test/transform-script-tags.test.js | 24 | dom.window.document.head.children.item(2); | CODE |
| CRITICAL | …es/babel-standalone/test/transform-script-tags.test.js | 47 | dom.window.document.head.children.item(2); | CODE |
| CRITICAL | …es/babel-standalone/test/transform-script-tags.test.js | 67 | dom.window.document.head.children.item(2); | CODE |
| CRITICAL | …es/babel-standalone/test/transform-script-tags.test.js | 93 | dom.window.document.head.children.item(2); | CODE |
| CRITICAL | …es/babel-standalone/test/transform-script-tags.test.js | 117 | dom.window.document.head.children.item(2); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | babel.config.ts | 281 | } | COMMENT |
| LOW | babel.config.ts | 301 | necessary: (path: NodePath<t.MemberExpression>) => boolean; | COMMENT |
| LOW | …l-case-preset-env-flow-ast/babel-parser-expression.txt | 1 | // @flow | COMMENT |
| LOW | …l-case-preset-env-flow-ast/babel-parser-expression.txt | 1321 | } | COMMENT |
| LOW | scripts/parallel-tsc/tsc.ts | 61 | COMMENT | |
| LOW | scripts/integration-tests/verdaccio-config.yml | 1 | # | COMMENT |
| LOW | packages/babel-traverse/src/path/conversion.ts | 941 | // Cannot declare a parameter named 't' as it shadows the name of a | COMMENT |
| LOW | packages/babel-parser/test/helpers/serialization.js | 41 | function withErrors(throws, ast) { | COMMENT |
| LOW | packages/babel-parser/src/parse-error.ts | 181 | // the `ParseError`, or | COMMENT |
| LOW | packages/babel-parser/src/options.ts | 181 | sourceType: "script", | COMMENT |
| LOW | packages/babel-parser/src/options.ts | 201 | allowNewTargetOutsideFunction: false, | COMMENT |
| LOW | packages/babel-parser/src/options.ts | 221 | // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 | COMMENT |
| LOW | packages/babel-parser/src/util/production-parameter.ts | 1 | // ProductionParameterHandler is a stack fashioned production parameter tracker | COMMENT |
| LOW | packages/babel-parser/src/tokenizer/state.ts | 61 | // e.g. a ? (b) : c => d | COMMENT |
| LOW | packages/babel-parser/src/tokenizer/state.ts | 141 | // escape sequences must not be interpreted as keywords. | COMMENT |
| LOW | packages/babel-parser/src/tokenizer/types.ts | 1 | // ## Token types | COMMENT |
| LOW | packages/babel-parser/src/tokenizer/types.ts | 161 | COMMENT | |
| LOW | packages/babel-parser/src/parser/expression.ts | 1 | // A recursive descent parser operates by defining functions for all | COMMENT |
| LOW | packages/babel-parser/src/parser/expression.ts | 181 | // 'atomic', nondivisible expression types at the bottom. Most of | COMMENT |
| LOW | packages/babel-parser/src/parser/expression.ts | 1461 | COMMENT | |
| LOW | packages/babel-parser/src/parser/statement.ts | 3001 | ? // OK: import <phase> x from "foo"; | COMMENT |
| LOW | packages/babel-parser/src/parser/statement.ts | 3041 | return tokenIsIdentifier(type) | COMMENT |
| LOW | …l-plugin-transform-regenerator/src/regenerator/emit.ts | 281 | ); | COMMENT |
| LOW | …l-plugin-transform-regenerator/src/regenerator/emit.ts | 461 | COMMENT | |
| LOW | …l-plugin-transform-regenerator/src/regenerator/emit.ts | 861 | COMMENT | |
| LOW | …l-plugin-transform-regenerator/src/regenerator/emit.ts | 921 | !ignoreChildResult || !tempVar, | COMMENT |
| LOW | …l-plugin-transform-regenerator/src/regenerator/emit.ts | 1281 | // | COMMENT |
| LOW | …erator/src/regenerator/replaceShorthandObjectMethod.ts | 1 | import type { NodePath } from "@babel/core"; | COMMENT |
| LOW | …erator/src/regenerator/replaceShorthandObjectMethod.ts | 21 | // this method can be passed any Function AST node path, and it will return | COMMENT |
| LOW | packages/babel-plugin-proposal-decorators/CONTRIB.md | 361 | COMMENT | |
| LOW | …ages/babel-plugin-transform-block-scoping/src/index.ts | 141 | } | COMMENT |
| LOW | …el-helper-create-class-features-plugin/src/features.ts | 21 | // this package isn't deduped by npm. e.g. | COMMENT |
| LOW | …ckages/babel-helpers/src/helpers/wrapAsyncGenerator.ts | 81 | if (overloaded) { | COMMENT |
| LOW | packages/babel-types/scripts/generators/builders.ts | 281 | return `/* | COMMENT |
| LOW | packages/babel-types/src/converters/toExpression.ts | 21 | node = node.expression; | COMMENT |
| LOW | packages/babel-core/test/config-chain.js | 741 | filename: fixture("nonexistent-fake", "src.js"), | COMMENT |
| LOW | packages/babel-core/test/config-chain.js | 761 | // | COMMENT |
| LOW | packages/babel-core/src/gensync-utils/async.ts | 41 | const withKind = gensync({ | COMMENT |
| LOW | …bel-helper-member-expression-to-functions/src/index.ts | 121 | // noop. | COMMENT |
| LOW | .github/workflows/release.yml | 241 | run: git push "https://babel-bot:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git" :${{ needs.git | COMMENT |
| LOW | .github/workflows/release.yml | 261 | # - name: Download babel-types docs | COMMENT |
| LOW | .github/workflows/release.yml | 281 | # git push --force "https://babel-bot:${{ secrets.BOT_TOKEN }}@github.com/babel/website.git" update-types-docs | COMMENT |
| LOW | .github/workflows/backport-7x.lock.yml | 1 | # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9ad0a9c23bea376db22713d240b1f3ddf12641f32e265bbc54e6e9ced16 | COMMENT |
| LOW | .github/workflows/backport-7x.lock.yml | 21 | # gh aw compile | COMMENT |
| LOW | .github/workflows/backport-7x.lock.yml | 41 | # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | COMMENT |
| LOW | lib/libdom-minimal.d.ts | 1 | // Minimal version of lib.dom.d.ts. @babel/standalone needs these types | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | Makefile.js | 36 | /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var cn,ln={};function un(){if(cn)re | COMMENT |
| LOW | …/babel-7-8-compat/babel-7-plugins-with-babel-8-core.sh | 4 | # NOTE: This will change files in your monorepo, make sure to commit/stage | COMMENT |
| LOW | packages/babel-parser/src/tokenizer/types.ts | 224 | // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/babel-generator/src/printer.ts | 692 | print( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/babel-parser/src/plugins/placeholders.ts | 110 | // NOTE: This function only handles identifiers outside of | COMMENT |
| LOW | packages/babel-parser/src/parser/statement.ts | 623 | // NOTE: This method changes the .start location of the class, and thus | COMMENT |
| LOW | …sform-fixture-test-runner/src/source-map-visualizer.ts | 141 | // NOTE: This function has some logic to deal with mappings that cover a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | Makefile.js | 36 | /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var cn,ln={};function un(){if(cn)re | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/integration-tests/e2e-react-native.sh | 31 | # Create a React Native project | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/babel-parser/src/parser/statement.ts | 3090 | * we need to check if we have a comma after that and | COMMENT |
| LOW | …/babel-plugin-transform-react-jsx/src/create-plugin.ts | 242 | // Current node is within a method, so we need to check if the method is a constructor. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/integration-tests/utils/local-registry.sh | 16 | # Set registry to local registry | COMMENT |