@codacy/tools-pmd-7 (英语)
目录
概览
多语种静态分析工具 PMD 主题 CLI(英语:CLI). 使用 CLI 执行策略 -- -- 通过生成 PMD shell 脚本 spawnTool() 并分析它的 JSON 输出.
| 财产 | 数值 |
|---|---|
| 工具标识 | PMD7 |
| 编码 UUID | ed7e8287-707d-485a-a0cb-e211004432c2 |
| 战略 | 国 际 |
| 语文 | Java, Javascript, Kotlin, Swift, PLSQL, XML, Apex, 速度, 视觉力量, JSP |
| 二进制 | pmd (贝壳脚本出自PMD发行拉链) |
| 文件图案 | **/*.java, (中文(简体) ), **/*.js, (中文(简体) ), **/*.jsx, (中文(简体) ), **/*.kt, (中文(简体) ), **/*.kts, (中文(简体) ), **/*.swift, (中文(简体) ), **/*.sql, (中文(简体) ), **/*.pls, (中文(简体) ), **/*.plb, (中文(简体) ), **/*.pkb, (中文(简体) ), **/*.pks, (中文(简体) ), **/*.xml, (中文(简体) ), **/*.pom, (中文(简体) ), **/*.wsdl, (中文(简体) ), **/*.xsl, (中文(简体) ), **/*.cls, (中文(简体) ), **/*.trigger, (中文(简体) ), **/*.vm, (中文(简体) ), **/*.page, (中文(简体) ), **/*.component, (中文(简体) ), **/*.jsp |
更新图案
# Re-fetch pattern metadata from the Codacy API
pnpm prefetch
# Commit the result
git add src/patterns.json
模式 ID 遵循格式 PMD7_category_{lang}_{categoryDir}_{RuleName},比如说. PMD7_category_java_errorprone_EmptyCatchBlock。 。 。 .
更新 PMD 版本
- 更新
PMD_VERSION内src/adapter.ts - 更新
PMD_DOWNLOAD_URL财务报告和审定财务报表PMD_EXTRACTED_DIR常数相应 - 运行
pnpm prefetch以检查新的/撤消的规则 - 运行
pnpm test以验证兼容性 - 如果主要版本更改,请创建新的适配软件包(
pmd-8/(中文(简体) )
发展
pnpm build # Build with tsup
pnpm test # Run tests (requires Java + PMD in PATH or installed)
在本地安装 PMD 供测试,下载自 https://github.com/pmd/pmd/放行 互联网档案馆的存檔,存档日期2013-12-21 添加 bin/ 去你的路径。 Java 8+是必需的.
维护者的注释
-
预设绘图
src/pattern-mappings.json(中文(简体) ):形状与PMD 6相同,上游为一 区别很重要。 PMD 7 更名为JUnit*最佳做法规则UnitTest*将制作 他们的试验框架是不可知的,所以他们声称:junit, (中文(简体) ),junit-5财务报告和审定财务报表testng, (中文(简体) ), 而仍然是JULU-version特定的规则则分别到一键.jakarta-ee覆盖 eJB规则,以及两个Apache Commons规则使用自己的标记(lib:apache-commons-logging, (中文(简体) ),lib:apache-commons-fileupload) (中文(简体) ). 那个重名正是漂移的packages/runner/test/mapping-drift.test.ts存在以抓取——从 PMD 6 复制的前缀 和这里没有匹配 并沉默地失败.测试框钥匙门打开
lib:junit编号 :lib:junit-5编号 :lib:testng标记, 不打开 前缀这是刻意的 PMD更名这个家庭 比任何其他家庭,所以 前缀列表是长期漂移负债。 它已经发生过两次。 第一次是... . . .JUnit*→UnitTest*重命名以上。 第二个是JUnit5TestShouldBePackagePrivate→JUnitJupiterTestShouldBePackagePrivate沉默地杀死了PMD7_category_java_bestpractices_JUnit5前缀和整个前缀junit-5关卡 规则。 标记取出框架而不是规则,所以两者都活了下来. 前缀 仍然对jakarta-ee他的EJB规则没有标签.侦测必须学会
spring-boot-starter-test(将J单元5推向中转并且是) spring项目中只有一份测试声明junit-jupiter-编号 :junit-platform-每个角色的文物,和格拉德的testRuntimeOnly动词——没有这些,标出这些 每一次"春靴"重播 默认规则都会失去. -
PMD要求Java 8+作为运行时间. 适配器使用
ensureJre()从@codacy/tooling如果系统上找不到合适的Java, 可下载 Adoplium Temurin JDK 21. -
PMD发行版作为拉链从GitHub发布后被下载并提取到
toolInstallDir/pmd-bin-{version}/。 。 。 . -
这个
JAVA_HOME如果使用非系统 Java 二进制,则在引用 PMD 时设置环境变量 . -
PMD 的 JSON 输出格式提供
beginline编号 :begincolumn编号 :endline编号 :endcolumn,所有基于1。 无需改划. -
PMD优先(1-5, 1=最高)地图到数值置信度:1-2->3 (高),3->2 (中),4-5->1 (低).
-
规则参考映射模式 ID :
PMD7_category_java_errorprone_EmptyCatchBlock- > (中文)category/java/errorprone.xml/EmptyCatchBlock。 。 。 . -
配置文件检测支持
ruleset.xml财务报告和审定财务报表apex-ruleset.xml在寄存器根中. -
当指定图案时,生成的规则片 XML 会被写入生成的配置目录,并通过
-R。 。 。 . -
当未指定模式或本地配置时, PMD 随内置运行
rulesets/java/quickstart.xml。 。 。 . -
这个
--no-fail-on-violation旗帜确保 PMD 即使在发现违反时也退出 0 . -
这个
--file-list选项用于通过临时文件而不是命令行参数传递目标文件,避免参数长度限制. -
高速部队主线行走. PMD 默认为每个核心一线程, 但其速度 模块(
pmd-velocity编号 :VtlParser)在parses之间共享 Apache 高速运行状态,所以两个.vm文件同时分析对方的 AST 。 共同结果是 安静 错了 报告——错误地归属于其他文件,幽灵文件条目,IndexOutOfBoundsException每份档案中,大多数调查结果被撤销(衡量:0/6次 三次多行跑 12次.vmfiles, 相对一个稳定的84个单行径). 有时 也挂起: 报告损坏的节点抛出AssertionError: Root of the tree should implement RootNode,一个Error那个RuleApplicator不恢复,它杀死main内部MultiThreadProcessor.close()。 。 。 .close()已经 关闭自己的游泳池——漏水是PMD建造的 每个语文一个集合 和附件 代码永远不会关闭其他人,所以他们的非守护者PmdThread工人们停在地上DestroyJavaVM永远,而完整的报告 却被不读到. -
旗帜是
--threads 0没有1。 。 。 . 只有零选择 PMD 的MonoThreadProcessor创建 完全没有工人池(其日志线变为Using main thread for analysis) (中文(简体) ).--threads 1还是 养活了一个非恶魔工人 足以避免极速腐败 但绞刑会留下 可以通过任何其他规则实现Error发出字节相同的报告,所以零是 免费.requiresSingleThread()当路由文件的扩展名在THREAD_UNSAFE_EXTENSIONS(今天刚刚).vm); 不高速重置, 保留多线程的 PMD,以及 PMD 6 没有这个错误。 上游环境为docs/tech-debt.md。 。 。 . -
扩展检查必须匹配跑道的路由器.
requiresSingleThread()故意这样做 不使用path.extname返回时""用于一个其基本名称准确的文件.vm- 跑者 - 跑者 - 跑者 所以警卫也得看看. -
跑者每个工具的超时只是
AbortSignal(外加一~2s硬回放的优等;ctx.signal转至spawnTool所以一个被吊死的PMD实际上是被杀死的,而不是作为孤儿JVM而留下的. 因为analyze()解析而不是拒绝,此处报告中止为kind: "Timeout"—— 说 只有适配器拒绝时 跑者才有自己的分类. -
处理错误( 无法解析的文件) 被映射到
AnalysisError带有“警告”级别. -
配置错误(无效规则)被映射到
AnalysisError带有“警告”级别.