From 60609dcf594f5de3574bee838ed9695bc7af95f5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Thu, 4 Aug 2022 21:13:36 +0300 Subject: [PATCH] fix(leiningen): Don't extract deps from commented vectors (#16978) * fix(leiningen): Don't extract deps from commented vectors * More precise detection --- .../manager/leiningen/__fixtures__/project.clj | 2 ++ lib/modules/manager/leiningen/extract.spec.ts | 1 + lib/modules/manager/leiningen/extract.ts | 15 ++++++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/leiningen/__fixtures__/project.clj b/lib/modules/manager/leiningen/__fixtures__/project.clj index 1f6714ddb5..d9e3416048 100644 --- a/lib/modules/manager/leiningen/__fixtures__/project.clj +++ b/lib/modules/manager/leiningen/__fixtures__/project.clj @@ -51,6 +51,7 @@ ;; You can also strings like ["group-id/name" version] for instances ;; where the dependency name isn't a valid symbol literal. :dependencies [[org.clojure/clojure,"1.3.0"] + #_[org.clojure/clojure "9.9.9"] [org.jclouds/jclouds "1.0" :classifier "jdk15"] [net.sf.ehcache/ehcache "2.3.1" :extension "pom"] [log4j "1.2.15" :exclusions [[javax.mail/mail :extension "jar"] @@ -59,6 +60,7 @@ com.sun.jmx/jmxri]] ["net.3scale/3scale-api" "3.0.2"] [org.lwjgl.lwjgl/lwjgl "2.8.5"] + #_[org.lwjgl.lwjgl/lwjgl "0.0.0"] [org.lwjgl.lwjgl/lwjgl-platform "2.8.5" :classifier "natives-osx" ;; LWJGL stores natives in the root of the jar; this diff --git a/lib/modules/manager/leiningen/extract.spec.ts b/lib/modules/manager/leiningen/extract.spec.ts index 9ef40825c6..e6f741e7d1 100644 --- a/lib/modules/manager/leiningen/extract.spec.ts +++ b/lib/modules/manager/leiningen/extract.spec.ts @@ -16,6 +16,7 @@ describe('modules/manager/leiningen/extract', () => { expect(extractFromVectors('')).toBeEmptyArray(); expect(extractFromVectors('[]')).toBeEmptyArray(); expect(extractFromVectors('[[]]')).toBeEmptyArray(); + expect(extractFromVectors('[#_[foo/bar "1.2.3"]]')).toBeEmptyArray(); expect(extractFromVectors('[[foo/bar "1.2.3"]]')).toEqual([ { datasource: ClojureDatasource.id, diff --git a/lib/modules/manager/leiningen/extract.ts b/lib/modules/manager/leiningen/extract.ts index 0f89e5b465..1b1e257253 100644 --- a/lib/modules/manager/leiningen/extract.ts +++ b/lib/modules/manager/leiningen/extract.ts @@ -35,6 +35,7 @@ export function extractFromVectors( let vecPos = 0; let artifactId = ''; let version = ''; + let commentLevel = 0; const isSpace = (ch: string | null): boolean => !!ch && regEx(/[\s,]/).test(ch); @@ -43,7 +44,7 @@ export function extractFromVectors( s.replace(regEx(/^"/), '').replace(regEx(/"$/), ''); const yieldDep = (): void => { - if (artifactId && version) { + if (!commentLevel && artifactId && version) { const depName = expandDepName(cleanStrLiteral(artifactId)); if (version.startsWith('~')) { const varName = version.replace(regEx(/^~\s*/), ''); @@ -73,6 +74,11 @@ export function extractFromVectors( let prevChar: string | null = null; while (idx < str.length) { const char = str.charAt(idx); + + if (str.substring(idx).startsWith('#_[')) { + commentLevel = balance; + } + if (char === '[') { balance += 1; if (balance === 2) { @@ -80,6 +86,13 @@ export function extractFromVectors( } } else if (char === ']') { balance -= 1; + + if (commentLevel === balance) { + artifactId = ''; + version = ''; + commentLevel = 0; + } + if (balance === 1) { yieldDep(); } else if (balance === 0) { -- GitLab