Skip to content

code-analyzer-apex

GitHub stars GitHub release (latest SemVer) GitHub last commit GitHub commit activity GitHub contributors

Salesforce Code Analyzer (SFDX Scanner) is the official Salesforce CLI plugin for scanning Apex code, triggers, and other Salesforce components to identify potential issues, security vulnerabilities, and code quality problems. It uses industry-standard tools like PMD and ESLint to provide comprehensive analysis of Salesforce development artifacts.

Key Features:

  • Multi-Engine Analysis: Combines PMD for Apex analysis with ESLint for JavaScript/Lightning Web Components
  • Security Focus: Identifies security vulnerabilities and potential attack vectors in Salesforce code
  • Performance Optimization: Detects performance anti-patterns and inefficient code constructs
  • Code Quality Rules: Comprehensive rule sets covering best practices, naming conventions, and maintainability
  • Configurable Severity: Customizable severity thresholds and rule categories for different project needs
  • Multiple Output Formats: Supports CSV, JSON, SARIF, and other formats for integration with development tools
  • Lightning Platform Specific: Rules tailored for Salesforce platform constraints and governor limits
  • Custom Rule Sets: Support for custom PMD rule sets and organization-specific coding standards

If your root folder is not force-app, please set variable SALESFORCE_SFDX_SCANNER_DIRECTORY

You can select categories and single rules by defining custom arguments (example: SALESFORCE_SFDX_SCANNER_ARGUMENTS: -c "Best Practices,Security")

See more details in Help

Workaround: Restricted to PMD

code-analyzer-apex documentation

code-analyzer - GitHub

Configuration in MegaLinter

Variable Description Default value
SALESFORCE_CODE_ANALYZER_APEX_ARGUMENTS User custom arguments to add in linter CLI call
Ex: -s --foo "bar"
SALESFORCE_CODE_ANALYZER_APEX_COMMAND_REMOVE_ARGUMENTS User custom arguments to remove from command line before calling the linter
Ex: -s --foo "bar"
SALESFORCE_CODE_ANALYZER_APEX_CLI_LINT_MODE Override default CLI lint mode
⚠️ As default value is project, overriding might not work
- file: Calls the linter for each file
- list_of_files: Call the linter with the list of files as argument
- project: Call the linter from the root of the project
project
SALESFORCE_CODE_ANALYZER_APEX_PRE_COMMANDS List of bash commands to run before the linter None
SALESFORCE_CODE_ANALYZER_APEX_POST_COMMANDS List of bash commands to run after the linter None
SALESFORCE_CODE_ANALYZER_APEX_UNSECURED_ENV_VARIABLES List of env variables explicitly not filtered before calling SALESFORCE_CODE_ANALYZER_APEX and its pre/post commands None
SALESFORCE_CODE_ANALYZER_APEX_CONFIG_FILE code-analyzer-apex configuration file name
Use LINTER_DEFAULT to let the linter find it
code-analyzer.yml
SALESFORCE_CODE_ANALYZER_APEX_RULES_PATH Path where to find linter configuration file Workspace folder, then MegaLinter default rules
SALESFORCE_CODE_ANALYZER_APEX_DISABLE_ERRORS Run linter but consider errors as warnings false
SALESFORCE_CODE_ANALYZER_APEX_DISABLE_ERRORS_IF_LESS_THAN Maximum number of errors allowed 0
SALESFORCE_CODE_ANALYZER_APEX_CLI_EXECUTABLE Override CLI executable ['sf']
SALESFORCE_DIRECTORY Directory containing SALESFORCE files (use any to always activate the linter) force-app

IDE Integration

Use code-analyzer-apex in your favorite IDE to catch errors before MegaLinter !

IDE Extension Name Install
Eclipse pmd-eclipse-plugin Visit Web Site
Emacs pmd-emacs Visit Web Site
IDEA PMD IntelliJ
Visual Studio Code Salesforce Extension Pack Install in VSCode

MegaLinter Flavors

This linter is available in the following flavors

Flavor Description Embedded linters Info
all Default MegaLinter Flavor 134 Docker Image Size (tag) Docker Pulls
salesforce Optimized for Salesforce based projects 58 Docker Image Size (tag) Docker Pulls

Behind the scenes

How are identified applicable files

  • Activated only if sub-directory force-app is found. (directory name can be overridden with SALESFORCE_DIRECTORY)
  • If this linter is active, all files will always be linted

How the linting is performed

code-analyzer-apex is called once on the whole project directory (project CLI lint mode)

  • filtering can not be done using MegaLinter configuration variables,it must be done using code-analyzer-apex configuration or ignore file (if existing)
  • VALIDATE_ALL_CODEBASE: false doesn't make code-analyzer-apex analyze only updated files

Example calls

sf code-analyzer run --rule-selector pmd:Recommended --workspace . --output-file results.csv

Help content

 ›   Warning: @salesforce/cli update available from 2.124.6 to 2.124.7.
Analyze your code with a selection of rules to ensure good coding practices.

USAGE
  $ sf code-analyzer run [--flags-dir <value>] [-w <value>...] [-t <value>...]
    [-r <value>...] [-s <value>] [-v detail|table] [-f <value>...] [-c <value>]

FLAGS
  -c, --config-file=<value>         Path to the configuration file used to
                                    customize the engines and rules.
  -f, --output-file=<value>...      Name of the file where the analysis results
                                    are written. The file format depends on the
                                    extension you specify, such as .csv, .html,
                                    .xml, and so on.
  -r, --rule-selector=<value>...    [default: Recommended] Selection of rules,
                                    based on engine name, severity level, rule
                                    name, tag, or a combination of criteria
                                    separated by colons.
  -s, --severity-threshold=<value>  Severity level of a found violation that
                                    must be met or exceeded to cause this
                                    command to fail with a non-zero exit code.
  -t, --target=<value>...           Subset of files within your workspace to be
                                    targeted for analysis.
  -v, --view=<option>               Format to display the command results in the
                                    terminal.
                                    <options: detail|table>
  -w, --workspace=<value>...        [default: .] Set of files that make up your
                                    workspace.

GLOBAL FLAGS
  --flags-dir=<value>  Import flag values from a directory.

 ›   Warning: @salesforce/cli update available from 2.124.6 to 2.124.7.

Streaming logs in real time to:
    /tmp/sfca-2026_02_28_01_45_04_551.log

Selecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 0%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 14%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 28%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 30%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 31%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 32%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 33%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 34%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 35%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 36%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 37%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 38%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 39%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 40%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 41%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 42%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 53%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 57%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 62%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 72%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 74%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 75%; Elapsed time: 0sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 75%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 84%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 85%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 87%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 96%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 98%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 99%; Elapsed time: 1sSelecting rules... Eligible engines: retire-js, regex, eslint, flow, pmd, cpd, sfge; Completion: 100%; Elapsed time: 1sSelecting rules... done.

  #     Name                                                              Engine      Severity       Tag
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  1     LibraryWithKnownCriticalSeverityVulnerability                     retire-js   1 (Critical)   Recommended, Security, JavaScript
  2     LibraryWithKnownHighSeverityVulnerability                         retire-js   2 (High)       Recommended, Security, JavaScript
  3     LibraryWithKnownMediumSeverityVulnerability                       retire-js   3 (Moderate)   Recommended, Security, JavaScript
  4     LibraryWithKnownLowSeverityVulnerability                          retire-js   4 (Low)        Recommended, Security, JavaScript
  5     NoTrailingWhitespace                                              regex       5 (Info)       Recommended, CodeStyle, Apex
  6     AvoidTermsWithImplicitBias                                        regex       5 (Info)       Recommended, BestPractices
  7     AvoidOldSalesforceApiVersions                                     regex       2 (High)       Recommended, Security, XML
  8     AvoidGetHeapSizeInLoop                                            regex       2 (High)       Recommended, Performance, Apex
  9     MinVersionForAbstractVirtualClassesWithPrivateMethod              regex       2 (High)       Recommended, BestPractices, Apex
  10    @lwc/lwc-platform/no-aura                                         eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  11    @lwc/lwc-platform/no-aura-libs                                    eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  12    @lwc/lwc-platform/no-community-import                             eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  13    @lwc/lwc-platform/no-create-context-provider                      eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  14    @lwc/lwc-platform/no-deprecated-module-import                     eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  15    @lwc/lwc-platform/no-dynamic-import-identifier                    eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  16    @lwc/lwc-platform/no-inline-disable                               eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  17    @lwc/lwc-platform/no-interop                                      eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  18    @lwc/lwc-platform/no-interop-create                               eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  19    @lwc/lwc-platform/no-interop-dispatch                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  20    @lwc/lwc-platform/no-interop-execute                              eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  21    @lwc/lwc-platform/no-interop-execute-controller-with-client-def   eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  22    @lwc/lwc-platform/no-interop-execute-privileged                   eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  23    @lwc/lwc-platform/no-interop-execute-raw-response                 eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  24    @lwc/lwc-platform/no-interop-execute-with-callback                eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  25    @lwc/lwc-platform/no-interop-get-event                            eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  26    @lwc/lwc-platform/no-interop-get-module                           eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  27    @lwc/lwc-platform/no-interop-is-external-definition               eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  28    @lwc/lwc-platform/no-interop-load-definitions                     eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  29    @lwc/lwc-platform/no-interop-module-instrumentation               eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  30    @lwc/lwc-platform/no-interop-module-storage                       eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  31    @lwc/lwc-platform/no-interop-register                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  32    @lwc/lwc-platform/no-interop-render                               eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  33    @lwc/lwc-platform/no-interop-sanitize                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  34    @lwc/lwc-platform/no-lds-aura-controller-method                   eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  35    @lwc/lwc-platform/no-process-env                                  eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  36    @lwc/lwc-platform/no-restricted-namespaces                        eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  37    @lwc/lwc-platform/no-site-import                                  eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  38    @lwc/lwc-platform/no-wire-service                                 eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  39    @lwc/lwc-platform/valid-dynamic-import-hint                       eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  40    @lwc/lwc/newer-version-available                                  eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  41    @lwc/lwc/no-api-reassignments                                     eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  42    @lwc/lwc/no-async-operation                                       eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  43    @lwc/lwc/no-attributes-during-construction                        eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  44    @lwc/lwc/no-deprecated                                            eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  45    @lwc/lwc/no-disallowed-lwc-imports                                eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  46    @lwc/lwc/no-document-query                                        eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  47    @lwc/lwc/no-inner-html                                            eslint      2 (High)       Recommended, LWC, Security, JavaScript
  48    @lwc/lwc/no-leading-uppercase-api-name                            eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  49    @lwc/lwc/no-template-children                                     eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  50    @lwc/lwc/no-unexpected-wire-adapter-usages                        eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  51    @lwc/lwc/no-unknown-wire-adapters                                 eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  52    @lwc/lwc/prefer-custom-event                                      eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  53    @lwc/lwc/valid-api                                                eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  54    @lwc/lwc/valid-graphql-wire-adapter-callback-parameters           eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  55    @lwc/lwc/valid-track                                              eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  56    @lwc/lwc/valid-wire                                               eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  57    @salesforce-ux/slds/enforce-bem-usage                             eslint      4 (Low)        Recommended, SLDS, BestPractices, HTML
  58    @salesforce-ux/slds/enforce-component-hook-naming-convention      eslint      4 (Low)        Recommended, SLDS, CodeStyle, CSS
  59    @salesforce-ux/slds/enforce-sds-to-slds-hooks                     eslint      4 (Low)        Recommended, SLDS, Design, CSS
  60    @salesforce-ux/slds/lwc-token-to-slds-hook                        eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, CSS
  61    @salesforce-ux/slds/modal-close-button-issue                      eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, HTML
  62    @salesforce-ux/slds/no-deprecated-classes-slds2                   eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, HTML
  63    @salesforce-ux/slds/no-deprecated-slds-classes                    eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, CSS
  64    @salesforce-ux/slds/no-hardcoded-values-slds2                     eslint      4 (Low)        Recommended, SLDS, Design, CSS
  65    @salesforce-ux/slds/no-slds-class-overrides                       eslint      4 (Low)        Recommended, SLDS, BestPractices, CSS
  66    @salesforce-ux/slds/no-slds-namespace-for-custom-hooks            eslint      4 (Low)        Recommended, SLDS, BestPractices, CSS
  67    @salesforce-ux/slds/no-slds-private-var                           eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, CSS
  68    @salesforce-ux/slds/no-slds-var-without-fallback                  eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, CSS
  69    @salesforce-ux/slds/no-sldshook-fallback-for-lwctoken             eslint      4 (Low)        Recommended, SLDS, BestPractices, CSS
  70    @salesforce-ux/slds/no-unsupported-hooks-slds2                    eslint      3 (Moderate)   Recommended, SLDS, ErrorProne, CSS
  71    @salesforce-ux/slds/reduce-annotations                            eslint      4 (Low)        Recommended, SLDS, BestPractices, CSS
  72    @salesforce/lightning/valid-apex-method-invocation                eslint      3 (Moderate)   Recommended, LWC, ErrorProne, JavaScript
  73    @typescript-eslint/ban-ts-comment                                 eslint      2 (High)       Recommended, ErrorProne, TypeScript
  74    @typescript-eslint/no-array-constructor                           eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  75    @typescript-eslint/no-duplicate-enum-values                       eslint      2 (High)       Recommended, ErrorProne, TypeScript
  76    @typescript-eslint/no-empty-object-type                           eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  77    @typescript-eslint/no-explicit-any                                eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  78    @typescript-eslint/no-extra-non-null-assertion                    eslint      2 (High)       Recommended, ErrorProne, TypeScript
  79    @typescript-eslint/no-misused-new                                 eslint      2 (High)       Recommended, ErrorProne, TypeScript
  80    @typescript-eslint/no-namespace                                   eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  81    @typescript-eslint/no-non-null-asserted-optional-chain            eslint      2 (High)       Recommended, ErrorProne, TypeScript
  82    @typescript-eslint/no-require-imports                             eslint      2 (High)       Recommended, ErrorProne, TypeScript
  83    @typescript-eslint/no-this-alias                                  eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  84    @typescript-eslint/no-unnecessary-type-constraint                 eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  85    @typescript-eslint/no-unsafe-declaration-merging                  eslint      2 (High)       Recommended, ErrorProne, TypeScript
  86    @typescript-eslint/no-unsafe-function-type                        eslint      2 (High)       Recommended, ErrorProne, TypeScript
  87    @typescript-eslint/no-unused-expressions                          eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  88    @typescript-eslint/no-unused-vars                                 eslint      2 (High)       Recommended, ErrorProne, TypeScript
  89    @typescript-eslint/no-wrapper-object-types                        eslint      2 (High)       Recommended, ErrorProne, TypeScript
  90    @typescript-eslint/prefer-as-const                                eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  91    @typescript-eslint/prefer-namespace-keyword                       eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  92    @typescript-eslint/triple-slash-reference                         eslint      3 (Moderate)   Recommended, BestPractices, TypeScript
  93    constructor-super                                                 eslint      2 (High)       Recommended, ErrorProne, JavaScript
  94    for-direction                                                     eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  95    getter-return                                                     eslint      2 (High)       Recommended, ErrorProne, JavaScript
  96    import/default                                                    eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  97    import/export                                                     eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  98    import/named                                                      eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  99    import/namespace                                                  eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  100   jest/expect-expect                                                eslint      5 (Info)       Recommended, LWC, BestPractices, JavaScript
  101   jest/no-alias-methods                                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  102   jest/no-commented-out-tests                                       eslint      5 (Info)       Recommended, LWC, BestPractices, JavaScript
  103   jest/no-conditional-expect                                        eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  104   jest/no-disabled-tests                                            eslint      5 (Info)       Recommended, LWC, BestPractices, JavaScript
  105   jest/no-done-callback                                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  106   jest/no-export                                                    eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  107   jest/no-focused-tests                                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  108   jest/no-identical-title                                           eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  109   jest/no-interpolation-in-snapshots                                eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  110   jest/no-jasmine-globals                                           eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  111   jest/no-mocks-import                                              eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  112   jest/no-standalone-expect                                         eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  113   jest/no-test-prefixes                                             eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  114   jest/valid-describe-callback                                      eslint      2 (High)       Recommended, LWC, ErrorProne, JavaScript
  115   jest/valid-expect                                                 eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  116   jest/valid-expect-in-promise                                      eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  117   jest/valid-title                                                  eslint      3 (Moderate)   Recommended, LWC, BestPractices, JavaScript
  118   jsx-a11y/alt-text                                                 eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  119   jsx-a11y/anchor-has-content                                       eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  120   jsx-a11y/anchor-is-valid                                          eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  121   jsx-a11y/aria-activedescendant-has-tabindex                       eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  122   jsx-a11y/aria-props                                               eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  123   jsx-a11y/aria-proptypes                                           eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  124   jsx-a11y/aria-role                                                eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  125   jsx-a11y/aria-unsupported-elements                                eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  126   jsx-a11y/autocomplete-valid                                       eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  127   jsx-a11y/click-events-have-key-events                             eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  128   jsx-a11y/heading-has-content                                      eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  129   jsx-a11y/html-has-lang                                            eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  130   jsx-a11y/iframe-has-title                                         eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  131   jsx-a11y/img-redundant-alt                                        eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  132   jsx-a11y/interactive-supports-focus                               eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  133   jsx-a11y/label-has-associated-control                             eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  134   jsx-a11y/media-has-caption                                        eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  135   jsx-a11y/mouse-events-have-key-events                             eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  136   jsx-a11y/no-access-key                                            eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  137   jsx-a11y/no-autofocus                                             eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  138   jsx-a11y/no-distracting-elements                                  eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  139   jsx-a11y/no-interactive-element-to-noninteractive-role            eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  140   jsx-a11y/no-noninteractive-element-interactions                   eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  141   jsx-a11y/no-noninteractive-element-to-interactive-role            eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  142   jsx-a11y/no-noninteractive-tabindex                               eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  143   jsx-a11y/no-redundant-roles                                       eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  144   jsx-a11y/no-static-element-interactions                           eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  145   jsx-a11y/role-has-required-aria-props                             eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  146   jsx-a11y/role-supports-aria-props                                 eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  147   jsx-a11y/scope                                                    eslint      3 (Moderate)   Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  148   jsx-a11y/tabindex-no-positive                                     eslint      2 (High)       Recommended, A11y, React, BestPractices, JavaScript, TypeScript
  149   no-async-promise-executor                                         eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  150   no-case-declarations                                              eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  151   no-class-assign                                                   eslint      2 (High)       Recommended, ErrorProne, JavaScript
  152   no-compare-neg-zero                                               eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  153   no-cond-assign                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  154   no-const-assign                                                   eslint      2 (High)       Recommended, ErrorProne, JavaScript
  155   no-constant-condition                                             eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  156   no-control-regex                                                  eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  157   no-debugger                                                       eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  158   no-delete-var                                                     eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  159   no-dupe-args                                                      eslint      2 (High)       Recommended, ErrorProne, JavaScript
  160   no-dupe-class-members                                             eslint      2 (High)       Recommended, ErrorProne, JavaScript
  161   no-dupe-else-if                                                   eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  162   no-dupe-keys                                                      eslint      2 (High)       Recommended, ErrorProne, JavaScript
  163   no-duplicate-case                                                 eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  164   no-empty                                                          eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  165   no-empty-character-class                                          eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  166   no-empty-pattern                                                  eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  167   no-ex-assign                                                      eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  168   no-extra-boolean-cast                                             eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  169   no-fallthrough                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  170   no-func-assign                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript
  171   no-global-assign                                                  eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  172   no-import-assign                                                  eslint      2 (High)       Recommended, ErrorProne, JavaScript
  173   no-inner-declarations                                             eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  174   no-invalid-regexp                                                 eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  175   no-irregular-whitespace                                           eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  176   no-loss-of-precision                                              eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  177   no-misleading-character-class                                     eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  178   no-nonoctal-decimal-escape                                        eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  179   no-obj-calls                                                      eslint      2 (High)       Recommended, ErrorProne, JavaScript
  180   no-octal                                                          eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  181   no-prototype-builtins                                             eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  182   no-redeclare                                                      eslint      3 (Moderate)   Recommended, BestPractices, JavaScript
  183   no-regex-spaces                                                   eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  184   no-self-assign                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  185   no-setter-return                                                  eslint      2 (High)       Recommended, ErrorProne, JavaScript
  186   no-shadow-restricted-names                                        eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  187   no-sparse-arrays                                                  eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  188   no-this-before-super                                              eslint      2 (High)       Recommended, ErrorProne, JavaScript
  189   no-undef                                                          eslint      2 (High)       Recommended, ErrorProne, JavaScript
  190   no-unexpected-multiline                                           eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  191   no-unreachable                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript
  192   no-unsafe-finally                                                 eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  193   no-unsafe-negation                                                eslint      2 (High)       Recommended, ErrorProne, JavaScript
  194   no-unsafe-optional-chaining                                       eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  195   no-unused-labels                                                  eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  196   no-unused-vars                                                    eslint      2 (High)       Recommended, ErrorProne, JavaScript
  197   no-useless-backreference                                          eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  198   no-useless-catch                                                  eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  199   no-useless-escape                                                 eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  200   no-var                                                            eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  201   no-with                                                           eslint      3 (Moderate)   Recommended, BestPractices, JavaScript
  202   prefer-const                                                      eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  203   prefer-rest-params                                                eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  204   prefer-spread                                                     eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  205   react-hooks/exhaustive-deps                                       eslint      3 (Moderate)   Recommended, React, Design, JavaScript, TypeScript
  206   react-hooks/rules-of-hooks                                        eslint      2 (High)       Recommended, React, Design, JavaScript, TypeScript
  207   react/display-name                                                eslint      3 (Moderate)   Recommended, React, BestPractices, JavaScript, TypeScript
  208   react/jsx-key                                                     eslint      3 (Moderate)   Recommended, React, BestPractices, JavaScript, TypeScript
  209   react/jsx-no-comment-textnodes                                    eslint      3 (Moderate)   Recommended, React, ErrorProne, JavaScript, TypeScript
  210   react/jsx-no-duplicate-props                                      eslint      2 (High)       Recommended, React, ErrorProne, JavaScript, TypeScript
  211   react/jsx-no-target-blank                                         eslint      2 (High)       Recommended, React, Security, JavaScript, TypeScript
  212   react/jsx-no-undef                                                eslint      3 (Moderate)   Recommended, React, ErrorProne, JavaScript, TypeScript
  213   react/jsx-uses-vars                                               eslint      4 (Low)        Recommended, React, BestPractices, JavaScript, TypeScript
  214   react/no-children-prop                                            eslint      3 (Moderate)   Recommended, React, BestPractices, JavaScript, TypeScript
  215   react/no-danger-with-children                                     eslint      2 (High)       Recommended, React, Security, JavaScript, TypeScript
  216   react/no-deprecated                                               eslint      4 (Low)        Recommended, React, Design, JavaScript, TypeScript
  217   react/no-direct-mutation-state                                    eslint      2 (High)       Recommended, React, ErrorProne, JavaScript, TypeScript
  218   react/no-find-dom-node                                            eslint      2 (High)       Recommended, React, BestPractices, JavaScript, TypeScript
  219   react/no-is-mounted                                               eslint      2 (High)       Recommended, React, BestPractices, JavaScript, TypeScript
  220   react/no-render-return-value                                      eslint      3 (Moderate)   Recommended, React, BestPractices, JavaScript, TypeScript
  221   react/no-string-refs                                              eslint      4 (Low)        Recommended, React, BestPractices, JavaScript, TypeScript
  222   react/no-unescaped-entities                                       eslint      3 (Moderate)   Recommended, React, ErrorProne, JavaScript, TypeScript
  223   react/no-unknown-property                                         eslint      3 (Moderate)   Recommended, React, ErrorProne, JavaScript, TypeScript
  224   react/prop-types                                                  eslint      3 (Moderate)   Recommended, React, BestPractices, JavaScript, TypeScript
  225   react/require-render-return                                       eslint      2 (High)       Recommended, React, ErrorProne, JavaScript, TypeScript
  226   require-yield                                                     eslint      3 (Moderate)   Recommended, BestPractices, JavaScript, TypeScript
  227   use-isnan                                                         eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  228   valid-typeof                                                      eslint      2 (High)       Recommended, ErrorProne, JavaScript, TypeScript
  229   CyclicSubflow                                                     flow        1 (Critical)   Recommended, Performance, XML
  230   DbInLoop                                                          flow        2 (High)       Recommended, Performance, XML
  231   DefaultCopy                                                       flow        3 (Moderate)   Recommended, CodeStyle, XML
  232   HardcodedId                                                       flow        3 (Moderate)   Recommended, BestPractices, XML
  233   MissingNextValueConnector                                         flow        1 (Critical)   Recommended, BestPractices, XML
  234   PreventPassingUserDataIntoElementWithoutSharing                   flow        2 (High)       Recommended, Security, XML
  235   PreventPassingUserDataIntoElementWithSharing                      flow        4 (Low)        Recommended, Security, XML
  236   SameRecordUpdate                                                  flow        3 (Moderate)   Recommended, Security, XML
  237   TriggerCallout                                                    flow        2 (High)       Recommended, Performance, XML
  238   TriggerEntryCriteria                                              flow        2 (High)       Recommended, Performance, XML
  239   TriggerWaitEvent                                                  flow        2 (High)       Recommended, Performance, XML
  240   AnnotationsNamingConventions                                      pmd         4 (Low)        Recommended, CodeStyle, Apex
  241   ApexBadCrypto                                                     pmd         2 (High)       Recommended, Security, Apex
  242   ApexCRUDViolation                                                 pmd         2 (High)       Recommended, Security, Apex
  243   ApexCSRF                                                          pmd         1 (Critical)   Recommended, Security, Apex
  244   ApexDangerousMethods                                              pmd         3 (Moderate)   Recommended, Security, Apex
  245   ApexDoc                                                           pmd         4 (Low)        Recommended, Documentation, Apex
  246   ApexInsecureEndpoint                                              pmd         2 (High)       Recommended, Security, Apex
  247   ApexOpenRedirect                                                  pmd         2 (High)       Recommended, Security, Apex
  248   ApexSharingViolations                                             pmd         3 (Moderate)   Recommended, Security, Apex
  249   ApexSOQLInjection                                                 pmd         2 (High)       Recommended, Security, Apex
  250   ApexSuggestUsingNamedCred                                         pmd         2 (High)       Recommended, Security, Apex
  251   ApexUnitTestClassShouldHaveAsserts                                pmd         3 (Moderate)   Recommended, BestPractices, Apex
  252   ApexUnitTestClassShouldHaveRunAs                                  pmd         4 (Low)        Recommended, BestPractices, Apex
  253   ApexUnitTestMethodShouldHaveIsTestAnnotation                      pmd         2 (High)       Recommended, BestPractices, Apex
  254   ApexUnitTestShouldNotUseSeeAllDataTrue                            pmd         2 (High)       Recommended, BestPractices, Apex
  255   ApexXSSFromEscapeFalse                                            pmd         2 (High)       Recommended, Security, Apex
  256   ApexXSSFromURLParam                                               pmd         2 (High)       Recommended, Security, Apex
  257   AvoidBooleanMethodParameters                                      pmd         3 (Moderate)   Recommended, Design, Apex
  258   AvoidDebugStatements                                              pmd         4 (Low)        Recommended, Performance, Apex
  259   AvoidDeeplyNestedIfStmts                                          pmd         3 (Moderate)   Recommended, Design, Apex
  260   AvoidDirectAccessTriggerMap                                       pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  261   AvoidFutureAnnotation                                             pmd         4 (Low)        Recommended, BestPractices, Apex
  262   AvoidGlobalModifier                                               pmd         3 (Moderate)   Recommended, BestPractices, Apex
  263   AvoidHardcodingId                                                 pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  264   AvoidLogicInTrigger                                               pmd         3 (Moderate)   Recommended, BestPractices, Apex
  265   AvoidNonExistentAnnotations                                       pmd         4 (Low)        Recommended, ErrorProne, Apex
  266   AvoidNonRestrictiveQueries                                        pmd         4 (Low)        Recommended, Performance, Apex
  267   AvoidStatefulDatabaseResult                                       pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  268   ClassNamingConventions                                            pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  269   CognitiveComplexity                                               pmd         3 (Moderate)   Recommended, Design, Apex
  270   CyclomaticComplexity                                              pmd         3 (Moderate)   Recommended, Design, Apex
  271   DebugsShouldUseLoggingLevel                                       pmd         4 (Low)        Recommended, BestPractices, Apex
  272   EagerlyLoadedDescribeSObjectResult                                pmd         2 (High)       Recommended, Performance, Apex
  273   EmptyCatchBlock                                                   pmd         2 (High)       Recommended, ErrorProne, Apex
  274   EmptyIfStmt                                                       pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  275   EmptyStatementBlock                                               pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  276   EmptyTryOrFinallyBlock                                            pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  277   EmptyWhileStmt                                                    pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  278   ExcessiveParameterList                                            pmd         3 (Moderate)   Recommended, Design, Apex
  279   ExcessivePublicCount                                              pmd         3 (Moderate)   Recommended, Design, Apex
  280   FieldDeclarationsShouldBeAtStart                                  pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  281   FieldNamingConventions                                            pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  282   ForLoopsMustUseBraces                                             pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  283   FormalParameterNamingConventions                                  pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  284   IfElseStmtsMustUseBraces                                          pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  285   IfStmtsMustUseBraces                                              pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  286   InaccessibleAuraEnabledGetter                                     pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  287   LocalVariableNamingConventions                                    pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  288   MethodNamingConventions                                           pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  289   MethodWithSameNameAsEnclosingClass                                pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  290   NcssCount                                                         pmd         3 (Moderate)   Recommended, Apex, Custom
  291   OneDeclarationPerLine                                             pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  292   OperationWithHighCostInLoop                                       pmd         3 (Moderate)   Recommended, Performance, Apex
  293   OperationWithLimitsInLoop                                         pmd         3 (Moderate)   Recommended, Performance, Apex
  294   OverrideBothEqualsAndHashcode                                     pmd         2 (High)       Recommended, ErrorProne, Apex
  295   PropertyNamingConventions                                         pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  296   QueueableWithoutFinalizer                                         pmd         4 (Low)        Recommended, BestPractices, Apex
  297   TestMethodsMustBeInTestClasses                                    pmd         3 (Moderate)   Recommended, ErrorProne, Apex
  298   TooManyFields                                                     pmd         3 (Moderate)   Recommended, Design, Apex
  299   TypeShadowsBuiltInNamespace                                       pmd         2 (High)       Recommended, ErrorProne, Apex
  300   UnusedLocalVariable                                               pmd         3 (Moderate)   Recommended, BestPractices, Apex
  301   UnusedMethod                                                      pmd         3 (Moderate)   Recommended, Design, Apex
  302   VfCsrf                                                            pmd         2 (High)       Recommended, Security, Visualforce
  303   VfHtmlStyleTagXss                                                 pmd         2 (High)       Recommended, Security, Visualforce
  304   VfUnescapeEl                                                      pmd         2 (High)       Recommended, Security, Visualforce
  305   WhileLoopsMustUseBraces                                           pmd         3 (Moderate)   Recommended, CodeStyle, Apex
  306   DetectCopyPasteForApex                                            cpd         5 (Info)       Recommended, Design, Apex
  307   DetectCopyPasteForJavascript                                      cpd         5 (Info)       Recommended, Design, Javascript
  308   DetectCopyPasteForTypescript                                      cpd         5 (Info)       Recommended, Design, Typescript
  309   DetectCopyPasteForVisualforce                                     cpd         5 (Info)       Recommended, Design, Visualforce



=== Summary

Found 309 rule(s) from 6 engine(s):
    4 retire-js rule(s) found.
    5 regex rule(s) found.
    219 eslint rule(s) found.
    11 flow rule(s) found.
    66 pmd rule(s) found.
    4 cpd rule(s) found.

Additional log information written to:
    /tmp/sfca-2026_02_28_01_45_04_551.log

Installation on mega-linter Docker image

  • Dockerfile commands :
# Parent descriptor install
# renovate: datasource=npm depName=@salesforce/cli
ARG NPM_SALESFORCE_CLI_VERSION=2.124.6
# renovate: datasource=npm depName=@salesforce/plugin-packaging
ARG NPM_SALESFORCE_PLUGIN_PACKAGING_VERSION=2.25.5
# renovate: datasource=npm depName=sfdx-hardis
ARG SFDX_HARDIS_VERSION=6.27.0
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk
ENV PATH="$JAVA_HOME/bin:${PATH}"
RUN sf plugins install @salesforce/plugin-packaging@${NPM_SALESFORCE_PLUGIN_PACKAGING_VERSION} \
    && echo y|sf plugins install sfdx-hardis@${SFDX_HARDIS_VERSION} \
    && (npm cache clean --force || true) \
    && rm -rf /root/.npm/_cacache
ENV SF_AUTOUPDATE_DISABLE=true SF_CLI_DISABLE_AUTOUPDATE=true
# Linter install
# renovate: datasource=npm depName=@salesforce/plugin-code-analyzer
ARG SALESFORCE_CODE_ANALYZER_VERSION=5.10.0
RUN sf plugins install code-analyzer@${SALESFORCE_CODE_ANALYZER_VERSION} \
    && (npm cache clean --force || true) \
    && rm -rf /root/.npm/_cacache