Skip to content

Commit

Permalink
feat(manager/gradle): add support for listOf directives in Kotlin o…
Browse files Browse the repository at this point in the history
…bjects (#24367)
  • Loading branch information
Churro committed Sep 12, 2023
1 parent 6adf7c4 commit b8e1826
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
19 changes: 19 additions & 0 deletions lib/modules/manager/gradle/parser.spec.ts
Expand Up @@ -940,6 +940,11 @@ describe('modules/manager/gradle/parser', () => {
object Libraries {
val deps = mapOf("api" to "org.slf4j:slf4j-api:\${Versions.baz}")
val deps2 = listOf(
"androidx.appcompat:appcompat:4.5.6",
"androidx.core:core-ktx:\${Versions.baz}",
listOf("androidx.webkit:webkit:\${Versions.baz}")
)
val dep: String = "foo:bar:" + Versions.baz
}
`;
Expand All @@ -958,6 +963,20 @@ describe('modules/manager/gradle/parser', () => {
groupName: 'Versions.baz',
currentValue: '1.2.3',
},
{
depName: 'androidx.appcompat:appcompat',
currentValue: '4.5.6',
},
{
depName: 'androidx.core:core-ktx',
groupName: 'Versions.baz',
currentValue: '1.2.3',
},
{
depName: 'androidx.webkit:webkit',
groupName: 'Versions.baz',
currentValue: '1.2.3',
},
{
depName: 'foo:bar',
groupName: 'Versions.baz',
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/gradle/parser/dependencies.ts
Expand Up @@ -31,7 +31,7 @@ const qVersion = qValueMatcher.handler((ctx) =>
// "foo:bar:1.2.3"
// "foo:bar:$baz"
// "foo" + "${bar}" + baz
const qDependencyStrings = qTemplateString
export const qDependencyStrings = qTemplateString
.opt(q.op<Ctx>('+').join(qValueMatcher))
.handler((ctx: Ctx) => storeInTokenMap(ctx, 'templateStringTokens'))
.handler(handleDepString)
Expand Down
20 changes: 16 additions & 4 deletions lib/modules/manager/gradle/parser/objects.ts
Expand Up @@ -12,21 +12,33 @@ import {
storeInTokenMap,
storeVarToken,
} from './common';
import { qDependencyStrings } from './dependencies';
import { handleAssignment } from './handlers';

const qKotlinListOfAssignment = q.sym<Ctx>('listOf').tree({
type: 'wrapped-tree',
startsWith: '(',
endsWith: ')',
search: qDependencyStrings,
});

const qKotlinSingleObjectVarAssignment = q.alt(
// val dep = mapOf("qux" to "foo:bar:\${Versions.baz}")
qKotlinMultiMapOfVarAssignment,
// val dep: String = "foo:bar:" + Versions.baz
qVariableAssignmentIdentifier
.opt(q.op<Ctx>(':').sym('String'))
.op('=')
.handler(prependNestingDepth)
.handler(coalesceVariable)
.handler((ctx) => storeInTokenMap(ctx, 'keyToken'))
.join(qValueMatcher)
.handler((ctx) => storeInTokenMap(ctx, 'valToken'))
.handler(handleAssignment)
.alt(
// val deps = listOf("androidx.appcompat:appcompat:$baz", listOf("androidx.webkit:webkit:${Versions.baz}"))
qKotlinListOfAssignment,
// val dep: String = "foo:bar:" + Versions.baz
qValueMatcher
.handler((ctx) => storeInTokenMap(ctx, 'valToken'))
.handler(handleAssignment)
)
.handler(cleanupTempVars)
);

Expand Down

0 comments on commit b8e1826

Please sign in to comment.