Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

[BUG] Bundled PMD 7.25.0 cannot load custom rulesets referencing PMD 7.26.0 rules — one unresolvable ref disables the whole ruleset

Ouverte
#2,065 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

  • #480 par @nikhil-mittal-165 — fermée sans fusion

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Calme
Stack technique
java, typescript
Domaine
devtools, testing-qa

Piste de recherche

Commencez avec @salesforce/code-analyzer-pmd-engine 0.43.0 et ses JARs PMD dans dist/java-lib/, puis suivez le chemin de chargement de la dépendance incluse et du ruleset personnalisé. Reproduisez le problème avec les fichiers fournis my-rules.xml, code-analyzer.yml et la commande sf code-analyzer. Le travail est terminé lorsque la version de PMD prise en charge est à jour et qu’une règle non résoluble signale la version incluse sans masquer silencieusement l’autre comportement demandé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Description

A custom PMD ruleset that references a standard rule added in PMD 7.26.0 (for example category/apex/errorprone.xml/InvocableClassNoArgConstructor, added 2026-06-29) cannot be loaded by Code Analyzer, because the plugin's bundled PMD engine is still 7.25.0 — and one unresolvable rule reference fails the load of the entire ruleset, so every other rule in the file silently stops running too.

There is currently no way for a user to fix this on their side: the PMD jars ship inside @salesforce/code-analyzer-pmd-engine (dist/java-lib/pmd-apex-7.25.0.jar in engine 0.43.0, the latest) and there is no supported way to point the pmd engine at newer jars.

Steps To Reproduce

(Prerequisites: Salesforce CLI and Java, the standard Code Analyzer requirements. Steps verified end-to-end in an empty directory.)

  1. sf plugins install code-analyzer (installs code-analyzer 5.14.0, the current latest, which resolves @salesforce/[email protected]).
  2. In an empty directory, create src/Sample.cls:
public class Sample {
    public static void log() {
        System.debug('hello');
    }
}
  1. Create my-rules.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Repro"
         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">
   <description>One rule from PMD 7.26.0 plus one custom XPath rule.</description>
   <rule ref="category/apex/errorprone.xml/InvocableClassNoArgConstructor"/>
   <rule name="MyOtherRule" language="apex" message="demo"
         class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
      <description>demo</description>
      <priority>3</priority>
      <properties>
         <property name="xpath"><value>//MethodCallExpression[lower-case(@FullMethodName) = 'system.debug']</value></property>
      </properties>
   </rule>
</ruleset>
  1. Create code-analyzer.yml:
engines:
  pmd:
    custom_rulesets:
      - my-rules.xml
  1. sf code-analyzer run --workspace src --rule-selector pmd --config-file code-analyzer.yml

Expected Behavior

Either the reference resolves (bundled PMD current with the PMD release line), or at minimum the loadable rules still run and the failure clearly names the unresolvable rule and the bundled PMD version.

Actual Behavior

The pmd engine fails entirely; zero rules from the ruleset execute:

Error: Code Analyzer:
    Failed to get rules from engine with name 'pmd' due to the following error:
    PMD errored when attempting to load a custom ruleset "my-rules.xml".
    Make sure the resource is a valid ruleset file on disk or on the Java classpath.

    PMD Exception:
      | Cannot load ruleset my-rules.xml: PMD threw an unexpected exception:
      | Error at my-rules.xml:7:4
      |   <rule ref="category/apex/errorprone.xml/InvocableClassNoArgConstructor"/>
      |    ^^^^^ Unable to find referenced rule InvocableClassNoArgConstructor;
      | perhaps the rule name is misspelled?

The run then reports 1 Critical severity violation(s) found across 0 files, which downstream tooling can misread as a code finding.

Control (shows the rest of the ruleset is valid): delete the single <rule ref="category/..."/> line from my-rules.xml and re-run step 5 — the scan now succeeds and pmd:MyOtherRule correctly flags Sample.cls:3. One unresolvable reference is the only difference between "everything runs" and "nothing runs".

Requests

  1. Bump the bundled PMD in @salesforce/code-analyzer-pmd-engine to the current PMD release line (7.26.0 shipped 2026-06-29; the all-or-nothing ruleset load is PMD's own semantics, so currency of the bundle is what decides whether a ruleset referencing new standard rules is usable at all).
  2. Improve the diagnostic: when a custom ruleset fails to load over an unresolvable rule reference, state the bundled PMD version in the message (for example "bundled PMD is 7.25.0; InvocableClassNoArgConstructor requires 7.26.0+") so users don't debug a "misspelled rule name" that is actually a version gap. (Companion request for the underlying message on the PMD side: pmd/pmd#6865.)
  3. (Nice to have) A documented way to supply or override the PMD version the engine uses.

Workaround

Remove standard-category rule references from custom rulesets (inline the XPath equivalents or run the standalone PMD CLI >= 7.26.0 separately).

Environment

  • code-analyzer plugin 5.14.0 (latest), @salesforce/code-analyzer-pmd-engine 0.43.0 (latest)
  • Bundled jars: pmd-apex-7.25.0.jar, pmd-core-7.25.0.jar (in dist/java-lib/)
  • Standalone PMD for comparison: 7.26.0 (2026-06-29)
  • macOS 15 / Node 22
Langage dominant
TypeScript
Étoiles
241
Forks
52
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de forcedotcom/code-analyzer

Toutes les issues de forcedotcom/code-analyzer

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.