diff --git a/build.sbt b/build.sbt index 2a3df4f..08d7dac 100644 --- a/build.sbt +++ b/build.sbt @@ -1,9 +1,9 @@ name := "atom" ThisBuild / organization := "io.appthreat" -ThisBuild / version := "1.8.2" +ThisBuild / version := "1.8.3" ThisBuild / scalaVersion := "3.3.1" -val chenVersion = "1.1.4" +val chenVersion = "1.1.5" lazy val atom = Projects.atom diff --git a/codemeta.json b/codemeta.json index c670ef4..77498fd 100644 --- a/codemeta.json +++ b/codemeta.json @@ -7,7 +7,7 @@ "downloadUrl": "https://github.com/AppThreat/atom", "issueTracker": "https://github.com/AppThreat/atom/issues", "name": "atom", - "version": "1.8.2", + "version": "1.8.3", "description": "Atom is a novel intermediate representation for next-generation code analysis.", "applicationCategory": "code-analysis", "keywords": [ diff --git a/src/main/scala/io/appthreat/atom/slicing/UsageSlicing.scala b/src/main/scala/io/appthreat/atom/slicing/UsageSlicing.scala index 93b066a..df1e49f 100644 --- a/src/main/scala/io/appthreat/atom/slicing/UsageSlicing.scala +++ b/src/main/scala/io/appthreat/atom/slicing/UsageSlicing.scala @@ -45,7 +45,7 @@ object UsageSlicing: val slices = usageSlices(atom, () => getDeclarations, typeMap) val language = atom.metaData.language.headOption val userDefTypes = userDefinedTypes(atom) - if language.get == Languages.NEWC || language.get == Languages.C + if language.get == Languages.NEWC || language.get == Languages.C || language.get == Languages.PHP then ProgramUsageSlice(slices ++ importsAsSlices(atom), userDefTypes ++ routesAsUDT(atom)) else if language.get == Languages.PYTHON || language.get == Languages.PYTHONSRC @@ -54,9 +54,6 @@ object UsageSlicing: slices ++ externalCalleesAsSlices(atom, typeMap), userDefTypes ++ routesAsUDT(atom) ) - else if language.get == Languages.PHP - then - ProgramUsageSlice(slices, userDefTypes ++ routesAsUDT(atom)) else ProgramUsageSlice(slices ++ unusedTypeDeclAsSlices(atom), userDefTypes) end calculateUsageSlice @@ -111,18 +108,31 @@ object UsageSlicing: .toList end usageSlices + private def cleanupImportCode(code: String) = + if code.startsWith("use") then code else code.replaceAll("\\s*", "") + + private def importLineNumber(im: Import) = + if im.file.nonEmpty && im.file.head.lineNumber.nonEmpty then + im.file.head.lineNumber.map(_.intValue()) + else if im.lineNumber.nonEmpty then im.lineNumber.map(_.intValue()) + else None + + private def importColumnNumber(im: Import) = + if im.file.nonEmpty && im.file.head.columnNumber.nonEmpty then + im.file.head.columnNumber.map(_.intValue()) + else if im.columnNumber.nonEmpty then im.columnNumber.map(_.intValue()) + else None + private def importsAsSlices(atom: Cpg): List[MethodUsageSlice] = atom.imports.l.map(im => MethodUsageSlice( - code = if im.code.nonEmpty then im.code.replaceAll("\\s*", "") else "", + code = if im.code.nonEmpty then cleanupImportCode(im.code) else "", fullName = im.importedEntity.get, - signature = im.importedAs.get, + signature = im.importedAs.getOrElse(""), fileName = if im.file.nonEmpty then im.file.head.name else "", slices = Seq[ObjectUsageSlice]().toSet, - lineNumber = - if im.file.nonEmpty then im.file.head.lineNumber.map(_.intValue()) else None, - columnNumber = - if im.file.nonEmpty then im.file.head.columnNumber.map(_.intValue()) else None + lineNumber = importLineNumber(im), + columnNumber = importColumnNumber(im) ) ) diff --git a/wrapper/nodejs/package-lock.json b/wrapper/nodejs/package-lock.json index d951441..0ef5d21 100644 --- a/wrapper/nodejs/package-lock.json +++ b/wrapper/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@appthreat/atom", - "version": "1.8.2", + "version": "1.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@appthreat/atom", - "version": "1.8.2", + "version": "1.8.3", "license": "Apache-2.0", "dependencies": { "@babel/parser": "^7.23.6", diff --git a/wrapper/nodejs/package.json b/wrapper/nodejs/package.json index cf8bba9..15ca319 100644 --- a/wrapper/nodejs/package.json +++ b/wrapper/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@appthreat/atom", - "version": "1.8.2", + "version": "1.8.3", "description": "Create atom (⚛) representation for your application, packages and libraries", "exports": "./index.js", "type": "module",