AI Slop Code Risk Monitor

typescript-eslint/typescript-eslint

SlopCodeMonitor badge for typescript-eslint/typescript-eslint Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript

1.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for typescript-eslint/typescript-eslint, a TypeScript project with 16,461 GitHub stars. SynthScan examined 426,202 lines of code across 1625 source files, recording 418 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.2 (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.

1.2
Adjusted Signal
1.2
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
16.5K
Stars
TypeScript
Language
426.2K
Lines of Code
1.6K
Files
418
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

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

Cognitive Ownership Risk 4.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.1/100 · LOW

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

Agent Over-Engineering Ratio 4.3/100 · LOW

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

PR Review Velocity Impact 5.3/100 · LOW

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

What These Metrics Mean

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

Pattern-Signal History

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

Severity Breakdown

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

CRITICAL 4HIGH 2MEDIUM 2LOW 410

Directory Score Breakdown

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

Pattern Findings

The scanner identified 418 distinct pattern matches across 8 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.

Hyper-Verbose Identifiers374 hits · 378 pts
SeverityFileLineSnippetContext
LOW…kages/project-service/src/throttleOpenedFileCleanup.ts18export function throttleOpenedFileCleanup(CODE
LOW…project-service/src/getParsedConfigFileFromTSServer.ts5export function getParsedConfigFileFromTSServer(CODE
LOWpackages/rule-tester/tests/RuleTester.test.ts2792 function generateIncompatibleValidTestCase(): ValidTestCase<unknown[]> {CODE
LOWpackages/rule-tester/tests/RuleTester.test.ts2806 function generateIncompatibleInvalidTestCase(): InvalidTestCase<CODE
LOWpackages/rule-tester/src/RuleTester.ts150function getUnsubstitutedMessagePlaceholders(CODE
LOWpackages/rule-tester/src/utils/SourceCodeFixer.ts16function compareMessagesByFixRange(CODE
LOWpackages/rule-tester/src/utils/SourceCodeFixer.ts27function compareMessagesByLocation(a: LintMessage, b: LintMessage): number {CODE
LOWpackages/rule-tester/src/utils/serialization.ts4function isSerializablePrimitiveOrPlainObject(val: unknown): boolean {CODE
LOWpackages/rule-tester/src/utils/dependencyConstraints.ts12function satisfiesDependencyConstraint(CODE
LOWpackages/rule-tester/src/utils/dependencyConstraints.ts33export function satisfiesAllDependencyConstraints(CODE
LOWpackages/rule-tester/src/utils/validationHelpers.ts88 function defineStartEndAsErrorInTree(CODE
LOWpackages/rule-tester/src/utils/flat-config-schema.ts513function createEslintrcErrorSchema(key: string): ObjectPropertySchema {CODE
LOWpackages/rule-tester/src/utils/severity.ts10export function normalizeSeverityToString(CODE
LOWpackages/rule-tester/src/utils/severity.ts30export function normalizeSeverityToNumber(CODE
LOW…es/rule-tester/src/utils/omitCustomConfigProperties.ts3export function omitCustomConfigProperties(CODE
LOW…s/typescript-eslint/src/getTSConfigRootDirFromStack.ts11export function getTSConfigRootDirFromStack(): string | undefined {CODE
LOW…/typescript-estree/tests/test-utils/persistentParse.ts29export function setupPersistentParseTests(): void {CODE
LOW…kages/typescript-estree/tests/test-utils/test-utils.ts8export function parseCodeAndGenerateServices(CODE
LOW…ges/typescript-estree/tests/lib/parse.symlinks.test.ts36async function createProjectWithSymlinkedDirectory(): Promise<string> {CODE
LOWpackages/typescript-estree/src/node-utils.ts382export function findFirstMatchingAncestor(CODE
LOWpackages/typescript-estree/src/node-utils.ts408export function unescapeStringLiteralText(text: string): string {CODE
LOWpackages/typescript-estree/src/node-utils.ts455export function isChildUnwrappableOptionalChain(CODE
LOWpackages/typescript-estree/src/node-utils.ts884function isPropertyAccessEntityNameExpression(CODE
LOWpackages/typescript-estree/src/parser.ts74function useSingleRunProgramForProjectService(CODE
LOWpackages/typescript-estree/src/parser.ts139export function clearDefaultProjectMatchedFiles(): void {CODE
LOWpackages/typescript-estree/src/parser.ts256export function clearParseAndGenerateServicesCalls(): void {CODE
LOW…/typescript-estree/src/semantic-or-syntactic-errors.ts21export function getFirstSemanticOrSyntacticError(CODE
LOW…/typescript-estree/src/semantic-or-syntactic-errors.ts61function allowlistSupportedDiagnostics(CODE
LOW…/typescript-estree/src/semantic-or-syntactic-errors.ts112function convertDiagnosticToSemanticOrSyntacticError(CODE
LOW…/typescript-estree/src/useProgramFromProjectService.ts63function openClientFileFromProjectService(CODE
LOW…/typescript-estree/src/useProgramFromProjectService.ts205 function openClientFileAndMaybeReload(): ts.server.OpenConfiguredProjectResult {CODE
LOW…/typescript-estree/src/useProgramFromProjectService.ts235function getSymlinkedFilePathInProjects(CODE
LOW…/typescript-estree/src/useProgramFromProjectService.ts258function createNoProgramWithProjectService(CODE
LOW⚡…/typescript-estree/src/useProgramFromProjectService.ts307export function useProgramFromProjectService(CODE
LOW⚡…/typescript-estree/src/useProgramFromProjectService.ts313export function useProgramFromProjectService(CODE
LOW⚡…/typescript-estree/src/useProgramFromProjectService.ts319export function useProgramFromProjectService(CODE
LOW⚡…/typescript-estree/src/useProgramFromProjectService.ts325export function useProgramFromProjectService(CODE
LOW…/typescript-estree/src/getImportClausePhaseModifier.ts10export function getImportClausePhaseModifier(CODE
LOWpackages/typescript-estree/src/check-syntax-errors.ts711function checkForStatementDeclaration(CODE
LOWpackages/typescript-estree/src/check-modifiers.ts424function checkObjectPropertyModifier(node: ts.Node, modifier: ts.Modifier) {CODE
LOW…estree/src/create-program/createProjectProgramError.ts10export function createProjectProgramError(CODE
LOWpackages/typescript-estree/src/create-program/shared.ts40export function createDefaultCompilerOptionsFromExtra(CODE
LOWpackages/typescript-estree/src/create-program/shared.ts112export function createSymlinkedDirectories(CODE
LOW…c/create-program/validateDefaultProjectForFilesGlob.ts8export function validateDefaultProjectForFilesGlob(CODE
LOW…cript-estree/src/create-program/useProvidedPrograms.ts63export function createProgramFromConfigFile(CODE
LOW…tree/src/create-program/getWatchProgramsForProjects.ts143export function getWatchProgramsForProjects(CODE
LOW…escript-estree/src/parseSettings/warnAboutTSVersion.ts26function buildUnsupportedTSVersionMessage(severity: 'error' | 'warn'): string {CODE
LOW…escript-estree/src/parseSettings/warnAboutTSVersion.ts44export function handleUnsupportedTSVersion(CODE
LOW…script-estree/src/parseSettings/createParseSettings.ts260export function clearTSServerProjectService(): void {CODE
LOW⚡…-estree/src/parseSettings/candidateTSConfigRootDirs.ts3export function addCandidateTSConfigRootDir(candidate: string): void {CODE
LOW⚡…-estree/src/parseSettings/candidateTSConfigRootDirs.ts7export function clearCandidateTSConfigRootDirs(): void {CODE
LOW⚡…-estree/src/parseSettings/candidateTSConfigRootDirs.ts11export function getInferredTSConfigRootDir(): string {CODE
LOW…s/generated-rule-docs/addESLintHashToCodeBlocksMeta.ts17export function addESLintHashToCodeBlocksMeta(CODE
LOW…ns/generated-rule-docs/insertions/insertRuleOptions.ts97function findCommentIndexForOption(CODE
LOW…-24-consistent-type-exports-and-imports-why-and-how.md113export function getAndLogValue(getter: GetString) {CODE
LOW…-24-consistent-type-exports-and-imports-why-and-how.md125export function getAndLogValue(getter: GetString) {CODE
LOW⚡packages/website/src/components/lib/jsonSchema.ts24export function getRuleJsonSchemaWithErrorLevel(CODE
LOW…te/src/components/editor/createProvideTwoslashInlay.ts16export function createTwoslashInlayProvider(CODE
LOW…ges/website/src/theme/MDXComponents/RuleAttributes.tsx58export function getRecommendationWithEmoji(CODE
LOW…kages/integration-tests/tools/integration-test-base.ts110export function typescriptIntegrationTest(CODE
314 more matches not shown…
Hallucination Indicators4 hits · 78 pts
SeverityFileLineSnippetContext
CRITICAL⚡packages/website/src/components/lib/jsonSchema.ts20 * monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.find(item => item.uri.includes('typescript-eslint/consiCOMMENT
CRITICAL⚡packages/website/src/components/lib/jsonSchema.ts21 * monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.find(item => item.uri.includes('no-unused-labels'))COMMENT
CRITICAL⚡packages/website/src/components/lib/jsonSchema.ts22 * monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.filter(item => item.schema.type === 'array')COMMENT
CRITICAL…kages/eslint-plugin/tests/rules/no-unsafe-call.test.ts129 x.a.b.c.d.e.f.g();CODE
Over-Commented Block32 hits · 32 pts
SeverityFileLineSnippetContext
LOWpackages/website-eslint/src/mock/assert.js1// Copyright Joyent, Inc. and other Node contributors.COMMENT
LOWpackages/website-eslint/src/mock/path.js1/* eslint-disable @typescript-eslint/explicit-module-boundary-types */COMMENT
LOWpackages/utils/src/eslint-utils/getParserServices.ts61 context: Readonly<TSESLint.RuleContext<string, unknown[]>>,COMMENT
LOWpackages/type-utils/tests/TypeOrValueSpecifier.test.ts421 // },COMMENT
LOW…nt-plugin/tests/rules/no-unnecessary-condition.test.ts3421 ],COMMENT
LOW…ckages/eslint-plugin/tests/rules/require-await.test.ts861 {COMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts21 // ConditionalExpressionCOMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts41 // `*=` `/=` `%=` `+=` `-=` `<<=` `>>=` `>>>=` `&=` `^=` `|=` `**=`COMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts61COMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts81COMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts101 // RelationalExpression `instanceof` ShiftExpressionCOMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts121 // MultiplicativeExpression MultiplicativeOperator ExponentiationExpressionCOMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts141 // `++` UnaryExpressionCOMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts161 // SuperCallCOMMENT
LOW…ckages/eslint-plugin/src/util/getOperatorPrecedence.ts181 // LiteralCOMMENT
LOW…lint-plugin/src/rules/no-unnecessary-type-assertion.ts101 'strictNullChecks',COMMENT
LOW…plugin/src/rules/no-unnecessary-template-expression.ts281 // "'va`lue'" -> "va`lue"COMMENT
LOW…es/eslint-plugin/src/rules/no-unnecessary-condition.ts461COMMENT
LOWpackages/eslint-plugin/src/rules/no-deprecated.ts301 // /** @deprecated Some Reason */COMMENT
LOW…ges/eslint-plugin/src/rules/consistent-type-imports.ts301 unusedSpecifiers,COMMENT
LOW…ges/eslint-plugin/src/rules/consistent-type-imports.ts321 // choose with option (2) and just avoid reporting on any imports in aCOMMENT
LOW…ges/eslint-plugin/src/rules/consistent-type-exports.ts141 // Things get a lot more complicated when we're dealing withCOMMENT
LOWpackages/eslint-plugin/src/rules/no-unused-vars.ts581 // 1) there is at least one specifier that is usedCOMMENT
LOWpackages/eslint-plugin/src/rules/no-unused-vars.ts701 //COMMENT
LOW…/src/rules/prefer-optional-chain-utils/analyzeChain.ts421 for (const operand of chain) {COMMENT
LOW…/src/rules/prefer-optional-chain-utils/analyzeChain.ts441 // conditions in the user's code where there were none before - and it wouldCOMMENT
LOW…/src/rules/prefer-optional-chain-utils/analyzeChain.ts761 );COMMENT
LOW…/src/rules/prefer-optional-chain-utils/analyzeChain.ts841 )COMMENT
LOW…/src/rules/prefer-optional-chain-utils/compareNodes.ts121 return NodeComparisonResult.Equal;COMMENT
LOW…/src/rules/prefer-optional-chain-utils/compareNodes.ts161 // but we want to try comparing by discarding the "extra" codeCOMMENT
LOW…/src/rules/prefer-optional-chain-utils/compareNodes.ts301 // ^^^^^^^ nodeACOMMENT
LOWpackages/eslint-plugin/src/rules/enum-utils/shared.ts81 // ```tsCOMMENT
Cross-Language Confusion (JS/TS)2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpackages/eslint-plugin/src/rules/member-ordering.ts966 * @return True if all members are correctly sorted.COMMENT
HIGHpackages/eslint-plugin/src/rules/member-ordering.ts1045 * @return True if all required and optional members are correctly sorted.COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMpackages/eslint-plugin/src/rules/no-inferrable-types.ts276 // Essentially a readonly property without a typeCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOW.github/workflows/pr-title-validation.yml1# IMPORTANT: Do not reuse old name of "Semantic PR Titles" hereCOMMENT
LOW.github/workflows/breaking-change-validation.yml1# IMPORTANT: Do not reuse old name of "Semantic Breaking Change PR Test" hereCOMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMpnpm-lock.yaml6040 deprecated: Renamed to emoji-blast. Let me know if you need help renaming. :)CODE
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOW…sts/rules/no-unused-vars/no-unused-vars-eslint.test.ts278 var doSomething = function doSomething() {};CODE
LOW…-plugin/tests/rules/no-shadow/no-shadow-eslint.test.ts28 var doSomething = function doSomething() {};CODE