From 7a350edbc4ba89a2dbcacabf228dab71ea00f3c2 Mon Sep 17 00:00:00 2001 From: Alejandro Rizzo Date: Fri, 30 Oct 2026 16:54:15 +0000 Subject: [PATCH] feat: map .cjs to JavaScript and .mts/.cts to TypeScript Node's explicit module-format extensions were missing: .cjs (CommonJS) next to the already mapped .mjs, and their TypeScript counterparts .mts/.cts. Files with them were not recognised as JavaScript/TypeScript, so no tool for those languages analyzed them, and results uploaded for them by the Codacy Analysis CLI were not shown. Co-Authored-By: Claude Opus 5.5 --- .../scala/com/codacy/plugins/api/languages/Language.scala | 5 +++-- .../com.codacy.plugins.api.languages/LanguageSpec.scala | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/codacy-plugins-api/src/main/scala/com/codacy/plugins/api/languages/Language.scala b/codacy-plugins-api/src/main/scala/com/codacy/plugins/api/languages/Language.scala index 0e48e73..341c6b1 100644 --- a/codacy-plugins-api/src/main/scala/com/codacy/plugins/api/languages/Language.scala +++ b/codacy-plugins-api/src/main/scala/com/codacy/plugins/api/languages/Language.scala @@ -99,7 +99,7 @@ object Languages { // Support startdate: Always case object Javascript - extends Language(extensions = Set(".js", ".jsx", ".jsm", ".vue", ".mjs"), + extends Language(extensions = Set(".js", ".jsx", ".jsm", ".vue", ".mjs", ".cjs"), files = Set("package.json", "package-lock.json", "yarn.lock", "pnpm-lock.yaml")) case object Scala extends Language(extensions = Set(".scala"), files = Set("build.sbt.lock")) @@ -145,7 +145,8 @@ object Languages { // Support startdate: 24 November 2016 case object TypeScript - extends Language(extensions = Set(".ts", ".tsx"), files = Set("package.json", "package-lock.json", "yarn.lock")) + extends Language(extensions = Set(".ts", ".tsx", ".mts", ".cts"), + files = Set("package.json", "package-lock.json", "yarn.lock")) // Support startdate: December 2016 case object Dockerfile extends Language(extensions = Set(".dockerfile"), files = Set("Dockerfile")) diff --git a/codacy-plugins-api/src/test/scala/com.codacy.plugins.api.languages/LanguageSpec.scala b/codacy-plugins-api/src/test/scala/com.codacy.plugins.api.languages/LanguageSpec.scala index 32c4efb..b57898f 100644 --- a/codacy-plugins-api/src/test/scala/com.codacy.plugins.api.languages/LanguageSpec.scala +++ b/codacy-plugins-api/src/test/scala/com.codacy.plugins.api.languages/LanguageSpec.scala @@ -33,6 +33,13 @@ class LanguageSpec extends AnyWordSpec with Matchers with OptionValues { Languages.forPath("src/File3.mjs").value shouldBe Languages.Javascript } + "forPath resolves the Node.js module-format extensions" in { + // CommonJS / ES module variants: .cjs/.mjs for JavaScript, .cts/.mts for TypeScript + Languages.forPath("scripts/count-issues.cjs").value shouldBe Languages.Javascript + Languages.forPath("src/index.mts").value shouldBe Languages.TypeScript + Languages.forPath("src/config.cts").value shouldBe Languages.TypeScript + } + "forPath resolves extensions case-insensitively" in { // extensions are stored lowercase; lookup lowercases the file's extension too Languages.forPath("src/analysis.R").value shouldBe Languages.R