Combination of multiple linters to run as a GitHub Action or standalone
This report summarizes scanner evidence for super-linter/super-linter, a Shell project with 10,644 GitHub stars. SynthScan examined 49,142 lines of code across 430 source files, recording 88 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.3 (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? 79 finding(s).
Are imports declared and package/API names verified? 8 finding(s).
Are wrappers, guards, and repeated structures necessary? 43 finding(s).
Which changes need focused human review? 88 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 88 distinct pattern matches across 9 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/testUtils.sh | 137 | function AssertArraysElementsContentMatch() { | CODE |
| LOW | test/testUtils.sh | 154 | function CheckUnexpectedGitChanges() { | CODE |
| LOW | test/lib/linterRulesTest.sh | 66 | function GetLinterRulesEmptyDotRulesPathTest() { | CODE |
| LOW | test/lib/linterRulesTest.sh | 83 | function GetLinterRulesEmptyRootRulesPathTest() { | CODE |
| LOW | test/lib/linterRulesTest.sh | 100 | function LinterRulesVariablesExportTest() { | CODE |
| LOW | test/lib/linterRulesTest.sh | 142 | function CodespellDefaultConfigurationSkipsPackageLockFilesTest() { | CODE |
| LOW | test/lib/detectFilesTest.sh | 88 | function RecognizeShebangWithBlankTest() { | CODE |
| LOW | test/lib/githubEventTest.sh | 15 | function GetGithubPushEventCommitCountTest() { | CODE |
| LOW | test/lib/githubEventTest.sh | 64 | function GetGithubPullRequestEventCommitCountTest() { | CODE |
| LOW | test/lib/githubEventTest.sh | 89 | function GetGithubRepositoryDefaultBranchTest() { | CODE |
| LOW | test/lib/githubEventTest.sh | 113 | function GetPullRequestHeadShaTest() { | CODE |
| LOW | test/lib/outputTest.sh | 30 | function WriteSummaryMarkdownTableHeaderTest() { | CODE |
| LOW | test/lib/outputTest.sh | 53 | function WriteSummaryMarkdownTableLineSuccessTest() { | CODE |
| LOW | test/lib/outputTest.sh | 67 | function WriteSummaryMarkdownTableLineFailureTest() { | CODE |
| LOW | test/lib/outputTest.sh | 81 | function WriteSummaryMarkdownTableFooterSuccessTest() { | CODE |
| LOW | test/lib/outputTest.sh | 102 | function WriteSummaryMarkdownTableFooterFailureTest() { | CODE |
| LOW | test/lib/setupSSHTest.sh | 21 | function GetGitHubSshRsaKeyFingerprintTest() { | CODE |
| LOW | test/lib/setupSSHTest.sh | 41 | function SetupGithubComSshKeysTest() { | CODE |
| LOW | test/lib/globalsLanguagesTest.sh | 13 | function LanguageArrayNotEmptyTest() { | CODE |
| LOW | test/lib/linterCommandsTest.sh | 69 | function LinterCommandPresenceTest() { | CODE |
| LOW | test/lib/linterCommandsTest.sh | 173 | function GitleaksCommandCustomLogLevelTest() { | CODE |
| LOW | test/lib/linterCommandsTest.sh | 222 | function InitFixModeOptionsAndCommandsTest() { | CODE |
| LOW | test/lib/validationTest.sh | 40 | function ValidateDeprecatedVariablesTest() { | CODE |
| LOW | test/lib/validationTest.sh | 157 | function ValidateSuperLinterSummaryOutputPathTest() { | CODE |
| LOW | test/lib/validationTest.sh | 253 | function ValidateAnsibleDirectoryTest() { | CODE |
| LOW | test/lib/validationTest.sh | 295 | function ValidateValidationVariablesTest() { | CODE |
| LOW | test/lib/validationTest.sh | 369 | function ValidationVariablesExportTest() { | CODE |
| LOW | test/lib/validationTest.sh | 394 | function ValidateCheckModeAndFixModeVariablesTest() { | CODE |
| LOW | lib/functions/githubEvent.sh | 6 | function GetGithubPushEventCommitCount() { | CODE |
| LOW | lib/functions/githubEvent.sh | 57 | function GetGithubPullRequestEventCommitCount() { | CODE |
| LOW | lib/functions/githubEvent.sh | 93 | function GetGithubRepositoryDefaultBranch() { | CODE |
| LOW | lib/functions/validation.sh | 3 | function ValidateBooleanConfigurationVariables() { | CODE |
| LOW | lib/functions/validation.sh | 120 | function ValidateValidationVariables() { | CODE |
| LOW | lib/functions/validation.sh | 184 | function ValidateCheckModeAndFixModeVariables() { | CODE |
| LOW | lib/functions/validation.sh | 276 | function ValidateLocalGitRepository() { | CODE |
| LOW | lib/functions/validation.sh | 525 | function CheckovConfigurationFileContainsDirectoryOption() { | CODE |
| LOW | lib/functions/validation.sh | 576 | function ValidateSuperLinterSummaryOutputPath() { | CODE |
| LOW | lib/functions/validation.sh | 655 | function WarnIfDeprecatedValueForConfigurationVariableIsSet() { | CODE |
| LOW | lib/functions/validation.sh | 711 | function ValidateDeprecatedVariables() { | CODE |
| LOW | lib/functions/buildFileList.sh | 3 | function IssueHintForFullGitHistory() { | CODE |
| LOW | lib/functions/setupSSH.sh | 14 | function GetGitHubSshRsaKeyFingerprint() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/run-super-linter-tests.sh | 802 | # Check if Super-linter created files if any file to lint contains a subshell | COMMENT |
| LOW | test/run-super-linter-tests.sh | 815 | # Check if super-linter leaves leftovers behind | COMMENT |
| LOW | test/testUtils.sh | 156 | # Check if there are unexpected changes in the working directory: | COMMENT |
| LOW | test/inspec/super-linter/controls/super_linter.rb | 258 | # Check if the linter needs an option that is different from the one that | COMMENT |
| LOW | test/lib/validationTest.sh | 599 | # Set EXPECTED_GITHUB_BEFORE_SHA to the initial commit because it's the only | COMMENT |
| LOW | test/lib/validationTest.sh | 648 | # Set EXPECTED_GITHUB_BEFORE_SHA to the initial commit because it's the only | COMMENT |
| LOW | test/lib/logTest.sh | 32 | # Set LOG_LEVEL to a value that allows to emit all messages (as DEBUG), but | COMMENT |
| LOW | lib/linter.sh | 981 | # Check if potentially conflicting tools are enabled | COMMENT |
| LOW | lib/functions/linterRules.sh | 19 | # Check if the language rules variables are defined | COMMENT |
| LOW | lib/functions/output.sh | 362 | # Check if there's an existing summary comment to update | COMMENT |
| LOW | lib/functions/validation.sh | 99 | # Check if first char is '/' | COMMENT |
| LOW | lib/functions/validation.sh | 431 | # Set GIT_BEFORE_SHA_HEAD to the empty tree hash because there's no | COMMENT |
| LOW | lib/functions/detectFiles.sh | 20 | # Check if in the users .github, or the super linter test suite | COMMENT |
| LOW | lib/functions/detectFiles.sh | 105 | # Check if file has AWS Template info or AWS References | COMMENT |
| LOW | lib/functions/buildFileList.sh | 363 | # Check if the file is a shell script with the sh extension, without shebang | COMMENT |
| LOW | lib/functions/buildFileList.sh | 609 | # Check if we should lint a Go module | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/lib/linterCommandsTest.sh | 54 | # Initialize the variables we're going to use to verify tests before running tests | COMMENT |
| MEDIUM | test/lib/validationTest.sh | 1139 | # Create a local repository to simulate a remote. | COMMENT |
| MEDIUM | test/lib/validationTest.sh | 1140 | # Create the simulated remote inside ${GITHUB_WORKSPACE} to benefit from automatic cleanup | COMMENT |
| MEDIUM | scripts/build-venvs.sh | 34 | # Create the virtual environment without its own copy of pip, and install | COMMENT |
| MEDIUM | .github/linters/.golangci.yml | 1 | # This file is only used in tests | COMMENT |
| MEDIUM | lib/functions/detectFiles.sh | 337 | # Define the path to an empty Terraform data directory | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/linters/perl/perl_bad_1.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | test/linters/perl/perl_good_1.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | test/linters/r/r_good_1.r | 1 | # Each of the default linters should throw at least one lint on this file | COMMENT |
| LOW | test/linters/r/r_bad_1.r | 1 | # Each of the default linters should throw at least one lint on this file | COMMENT |
| LOW | test/linters/jscpd/good/r_good_1.r | 1 | # Each of the default linters should throw at least one lint on this file | COMMENT |
| LOW | test/linters/jscpd/good/perl_good_1.pl | 1 | #!/usr/bin/perl | COMMENT |
| LOW | test/linters/checkov/bad/bad_chart/Chart.yaml | 1 | apiVersion: v2 | COMMENT |
| LOW | test/linters/checkov/bad/bad_chart/Chart.yaml | 21 | # incremented each time you make changes to the application. Versions are not expected to | COMMENT |
| LOW | test/linters/checkov/good/good_chart/Chart.yaml | 1 | apiVersion: v2 | COMMENT |
| LOW | test/linters/checkov/good/good_chart/Chart.yaml | 21 | # incremented each time you make changes to the application. Versions are not expected to | COMMENT |
| LOW | .github/linters/.checkov-test-linters-success.yaml | 1 | --- | COMMENT |
| LOW | TEMPLATES/.openapirc.yml | 1 | --- | COMMENT |
| LOW | TEMPLATES/.markdown-lint.yml | 1 | --- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/linters/python_ruff/python_bad_1.py | 1 | CODE | |
| LOW | test/linters/python_ruff/python_bad_1.py | 2 | CODE | |
| LOW | test/linters/python_isort/python_bad_1.py | 1 | CODE | |
| LOW | test/linters/python_isort/python_bad_1.py | 2 | CODE | |
| LOW | test/linters/python_isort/python_bad_1.py | 2 | CODE | |
| LOW | test/linters/python_isort/python_bad_1.py | 3 | CODE | |
| LOW | test/linters/python_isort/python_bad_1.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | action.yml | 12 | # to see a comprehensive list of all environment variables that can be passed | COMMENT |
| MEDIUM | slim/action.yml | 12 | # to see a comprehensive list of all environment variables that can be passed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/lib/outputTest.sh | 364 | if ! GITHUB_API_OUT="$(CallGitHubApi "http://fake-url" "fake-token" "${LARGE_INPUT}" "POST")"; then | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/linters/jscpd/bad/python_bad_1.py | 186 | except Exception as error: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/linters/jscpd/bad/python_bad_1.py | 120 | CODE |