Skip to content
Snippets Groups Projects
Unverified Commit ad452346 authored by Johannes Feichtner's avatar Johannes Feichtner Committed by GitHub
Browse files

refactor(manager/gradle): reduce code redundancy when parsing maps (#20636)

parent e7d82a49
No related branches found
Tags 38.85.0
No related merge requests found
import { query as q } from 'good-enough-parser'; import { parser, query as q } from 'good-enough-parser';
import { regEx } from '../../../../util/regex'; import { regEx } from '../../../../util/regex';
import type { Ctx } from '../types'; import type { Ctx } from '../types';
import { import {
...@@ -81,6 +81,27 @@ const qGroovySingleMapOfVarAssignment = q ...@@ -81,6 +81,27 @@ const qGroovySingleMapOfVarAssignment = q
return ctx; return ctx;
}); });
const qGroovyMapOfExpr = (
search: q.QueryBuilder<Ctx, parser.Node>
): q.QueryBuilder<Ctx, parser.Node> =>
q.alt(
q
.sym(storeVarToken)
.op(':')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '[',
endsWith: ']',
search,
postHandler: (ctx: Ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qGroovySingleMapOfVarAssignment
);
// versions = [ android: [ buildTools: '30.0.3' ], kotlin: '1.4.30' ] // versions = [ android: [ buildTools: '30.0.3' ], kotlin: '1.4.30' ]
const qGroovyMultiVarAssignment = qVariableAssignmentIdentifier const qGroovyMultiVarAssignment = qVariableAssignmentIdentifier
.alt(q.op('='), q.op('+=')) .alt(q.op('='), q.op('+='))
...@@ -89,39 +110,7 @@ const qGroovyMultiVarAssignment = qVariableAssignmentIdentifier ...@@ -89,39 +110,7 @@ const qGroovyMultiVarAssignment = qVariableAssignmentIdentifier
maxDepth: 1, maxDepth: 1,
startsWith: '[', startsWith: '[',
endsWith: ']', endsWith: ']',
search: q.alt( search: qGroovyMapOfExpr(qGroovyMapOfExpr(qGroovySingleMapOfVarAssignment)),
q
.sym(storeVarToken)
.op(':')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '[',
endsWith: ']',
search: q.alt(
q
.sym(storeVarToken)
.op(':')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '[',
endsWith: ']',
search: qGroovySingleMapOfVarAssignment,
postHandler: (ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qGroovySingleMapOfVarAssignment
),
postHandler: (ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qGroovySingleMapOfVarAssignment
),
}) })
.handler(cleanupTempVars); .handler(cleanupTempVars);
...@@ -143,6 +132,27 @@ const qKotlinSingleMapOfVarAssignment = qStringValue ...@@ -143,6 +132,27 @@ const qKotlinSingleMapOfVarAssignment = qStringValue
return ctx; return ctx;
}); });
const qKotlinMapOfExpr = (
search: q.QueryBuilder<Ctx, parser.Node>
): q.QueryBuilder<Ctx, parser.Node> =>
q.alt(
qStringValue
.sym('to')
.sym('mapOf')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '(',
endsWith: ')',
search,
postHandler: (ctx: Ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qKotlinSingleMapOfVarAssignment
);
// val versions = mapOf("foo1" to "bar1", "foo2" to "bar2", "foo3" to "bar3") // val versions = mapOf("foo1" to "bar1", "foo2" to "bar2", "foo3" to "bar3")
const qKotlinMultiMapOfVarAssignment = qVariableAssignmentIdentifier const qKotlinMultiMapOfVarAssignment = qVariableAssignmentIdentifier
.op('=') .op('=')
...@@ -152,39 +162,7 @@ const qKotlinMultiMapOfVarAssignment = qVariableAssignmentIdentifier ...@@ -152,39 +162,7 @@ const qKotlinMultiMapOfVarAssignment = qVariableAssignmentIdentifier
maxDepth: 1, maxDepth: 1,
startsWith: '(', startsWith: '(',
endsWith: ')', endsWith: ')',
search: q.alt( search: qKotlinMapOfExpr(qKotlinMapOfExpr(qKotlinSingleMapOfVarAssignment)),
qStringValue
.sym('to')
.sym('mapOf')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '(',
endsWith: ')',
search: q.alt(
qStringValue
.sym('to')
.sym('mapOf')
.tree({
type: 'wrapped-tree',
maxDepth: 1,
startsWith: '(',
endsWith: ')',
search: qKotlinSingleMapOfVarAssignment,
postHandler: (ctx: Ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qKotlinSingleMapOfVarAssignment
),
postHandler: (ctx: Ctx) => {
ctx.varTokens.pop();
return ctx;
},
}),
qKotlinSingleMapOfVarAssignment
),
}) })
.handler(cleanupTempVars); .handler(cleanupTempVars);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment