diff --git a/lib/modules/manager/leiningen/__fixtures__/project.clj b/lib/modules/manager/leiningen/__fixtures__/project.clj index 1f6714ddb5319c7dc9fca445adfbd36fa6d3511b..d9e3416048560d1e0353888bf3dd9e465515a307 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 9ef40825c6b884dd4da4a9def88b80cf280e4501..e6f741e7d15366327f0087f4241deac6eef7437c 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 0f89e5b465a8458001f2d62a254639e8261175c5..1b1e2572535c1d511cd121758aba9cabb4cc5987 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) {