renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
193 lines (192 loc) • 7.5 kB
JavaScript
import { regEx } from "../../../../util/regex.js";
import { clone } from "../../../../util/clone.js";
import { query } from "@renovatebot/good-enough-parser";
//#region lib/modules/manager/gradle/parser/common.ts
const REGISTRY_URLS = {
google: "https://dl.google.com/android/maven2/",
gradlePluginPortal: "https://plugins.gradle.org/m2/",
jcenter: "https://jcenter.bintray.com/",
mavenCentral: "https://repo.maven.apache.org/maven2"
};
const GRADLE_PLUGINS = {
checkstyle: ["toolVersion", "com.puppycrawl.tools:checkstyle"],
codenarc: ["toolVersion", "org.codenarc:CodeNarc"],
composeOptions: ["kotlinCompilerExtensionVersion", "androidx.compose.compiler:compiler"],
detekt: ["toolVersion", "io.gitlab.arturbosch.detekt:detekt-core"],
findbugs: ["toolVersion", "com.google.code.findbugs:findbugs"],
googleJavaFormat: ["toolVersion", "com.google.googlejavaformat:google-java-format"],
jacoco: ["toolVersion", "org.jacoco:jacoco"],
jmh: ["jmhVersion", "org.openjdk.jmh:jmh-core"],
lombok: ["version", "org.projectlombok:lombok"],
micronaut: ["version", "io.micronaut.platform:micronaut-platform"],
pmd: ["toolVersion", "net.sourceforge.pmd:pmd-java"],
spotbugs: ["toolVersion", "com.github.spotbugs:spotbugs"]
};
const GRADLE_TEST_SUITES = {
useJunit: "junit:junit",
useJUnitJupiter: "org.junit.jupiter:junit-jupiter",
useKotlinTest: "org.jetbrains.kotlin:kotlin-test-junit",
useSpock: "org.spockframework:spock-core",
useTestNG: "org.testng:testng"
};
function storeVarToken(ctx, node) {
ctx.varTokens.push(node);
return ctx;
}
function increaseNestingDepth(ctx) {
ctx.tmpNestingDepth.push(...ctx.varTokens);
ctx.varTokens = [];
return ctx;
}
function reduceNestingDepth(ctx) {
ctx.tmpNestingDepth.pop();
return ctx;
}
function prependNestingDepth(ctx) {
ctx.varTokens = [...clone(ctx.tmpNestingDepth), ...ctx.varTokens];
return ctx;
}
function storeInTokenMap(ctx, tokenMapKey) {
ctx.tokenMap[tokenMapKey] = ctx.varTokens;
ctx.varTokens = [];
return ctx;
}
function loadFromTokenMap(ctx, tokenMapKey) {
const tokens = ctx.tokenMap[tokenMapKey];
if (!tokens) throw new Error(`Expected token ${tokenMapKey} not found`);
return tokens;
}
function cleanupTempVars(ctx) {
ctx.tokenMap = {};
ctx.varTokens = [];
return ctx;
}
function stripReservedPrefixFromKeyTokens(ctx) {
const unwantedPrefixes = [
"ext",
"extra",
"project",
"rootProject",
"properties"
];
while (ctx.varTokens.length > 1 && ctx.varTokens[0] && unwantedPrefixes.includes(ctx.varTokens[0].value)) ctx.varTokens.shift();
return ctx;
}
function coalesceVariable(ctx) {
if (ctx.varTokens.length > 1) {
ctx.varTokens[0].value = ctx.varTokens.map((token) => token.value).join(".");
ctx.varTokens.length = 1;
}
return ctx;
}
function findVariableInKotlinImport(name, ctx, variables) {
if (ctx.tmpKotlinImportStore.length && name.includes(".")) for (const tokens of ctx.tmpKotlinImportStore) {
const lastToken = tokens[tokens.length - 1];
if (lastToken && name.startsWith(`${lastToken.value}.`)) {
const identifier = `${tokens.slice(0, -1).map((token) => token.value).join(".")}.${name}`;
if (variables[identifier]) return variables[identifier];
}
}
}
function findVariable(name, ctx, variables = ctx.globalVars) {
if (ctx.tmpNestingDepth.length) {
const prefixParts = ctx.tmpNestingDepth.map((token) => token.value);
for (let idx = ctx.tmpNestingDepth.length; idx > 0; idx -= 1) {
const identifier = `${prefixParts.slice(0, idx).join(".")}.${name}`;
if (variables[identifier]) return variables[identifier];
}
}
if (variables[name]) return variables[name];
return findVariableInKotlinImport(name, ctx, variables);
}
function interpolateString(childTokens, ctx, variables = ctx.globalVars) {
const resolvedSubstrings = [];
for (const childToken of childTokens) {
const type = childToken.type;
if (type === "string-value") resolvedSubstrings.push(childToken.value);
else if (type === "symbol") {
const varData = findVariable(childToken.value, ctx, variables);
if (varData) resolvedSubstrings.push(varData.value);
else return null;
} else return null;
}
return resolvedSubstrings.join("");
}
const qStringValue = query.str((ctx, node) => {
storeVarToken(ctx, node);
return ctx;
});
const qStringValueAsSymbol = query.str((ctx, node) => {
storeVarToken(ctx, {
...node,
type: "symbol"
});
return ctx;
});
const qProviderValue = query.tree({
maxDepth: 1,
type: "wrapped-tree",
startsWith: "(",
endsWith: ")",
search: query.begin().end()
}).handler((ctx) => {
if (ctx.varTokens.length > 1 && ctx.varTokens.at(-1)?.value === "get") ctx.varTokens.pop();
return ctx;
});
const qVariableAssignmentIdentifier = query.sym(storeVarToken).many(query.alt(query.op(".").sym(storeVarToken), query.tree({
type: "wrapped-tree",
maxDepth: 1,
startsWith: "[",
endsWith: "]",
search: query.begin().join(qStringValueAsSymbol).end()
})), 0, 32).handler(stripReservedPrefixFromKeyTokens);
const qVariableAccessIdentifier = query.handler((ctx) => {
ctx.tmpTokenStore.backupVarAccessTokens = ctx.varTokens;
ctx.varTokens = [];
return ctx;
}).join(qVariableAssignmentIdentifier).opt(qProviderValue).handler(coalesceVariable).handler((ctx) => {
ctx.varTokens = [...ctx.tmpTokenStore.backupVarAccessTokens, ...ctx.varTokens];
delete ctx.tmpTokenStore.backupVarAccessTokens;
return ctx;
});
const qPropertyAccessIdentifier = query.opt(query.sym(regEx(/^(?:rootProject|project)$/)).op(".")).alt(query.opt(query.sym("ext").op(".")).sym(regEx(/^(?:property|getProperty)$/)), query.sym(regEx(/^(?:extra|ext)$/)).op(".").sym("get")).tree({
maxDepth: 1,
startsWith: "(",
endsWith: ")",
search: query.begin().join(qStringValueAsSymbol).end()
}).opt(query.sym("as").sym("String"));
const qTemplateString = query.tree({
type: "string-tree",
maxDepth: 2,
preHandler: (ctx) => {
ctx.tmpTokenStore.templateTokens = [];
return ctx;
},
search: query.alt(qStringValue, qPropertyAccessIdentifier, qVariableAccessIdentifier).handler((ctx) => {
ctx.tmpTokenStore.templateTokens?.push(...ctx.varTokens);
ctx.varTokens = [];
return ctx;
})
}).handler((ctx) => {
ctx.varTokens = ctx.tmpTokenStore.templateTokens;
return ctx;
});
const qConcatExpr = (...matchers) => query.alt(...matchers).many(query.op("+").alt(...matchers), 0, 32);
const qValueMatcher = qConcatExpr(qTemplateString, qPropertyAccessIdentifier, qVariableAccessIdentifier);
const qKotlinImport = query.sym("import").join(qVariableAssignmentIdentifier).handler((ctx) => {
ctx.tmpKotlinImportStore.push(ctx.varTokens);
return ctx;
}).handler(cleanupTempVars);
const qDotOrBraceExpr = (symValue, matcher) => query.sym(symValue).alt(query.op(".").join(matcher), query.tree({
type: "wrapped-tree",
maxDepth: 1,
startsWith: "{",
endsWith: "}",
search: matcher
}));
const qGroupId = qValueMatcher.handler((ctx) => storeInTokenMap(ctx, "groupId"));
const qArtifactId = qValueMatcher.handler((ctx) => storeInTokenMap(ctx, "artifactId"));
const qVersion = qValueMatcher.handler((ctx) => storeInTokenMap(ctx, "version"));
//#endregion
export { GRADLE_PLUGINS, GRADLE_TEST_SUITES, REGISTRY_URLS, cleanupTempVars, coalesceVariable, findVariable, increaseNestingDepth, interpolateString, loadFromTokenMap, prependNestingDepth, qArtifactId, qDotOrBraceExpr, qGroupId, qKotlinImport, qStringValue, qStringValueAsSymbol, qTemplateString, qValueMatcher, qVariableAssignmentIdentifier, qVersion, reduceNestingDepth, storeInTokenMap, storeVarToken };
//# sourceMappingURL=common.js.map