@amplitude/ampli
Version:
Amplitude CLI
81 lines (80 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const antlr4ts_1 = require("antlr4ts");
const ParseTreeWalker_1 = require("antlr4ts/tree/ParseTreeWalker");
const KotlinLexer_1 = require("../../antlr/kotlin/1.3/KotlinLexer");
const KotlinParser_1 = require("../../antlr/kotlin/1.3/KotlinParser");
const base_1 = require("../base");
class ItlyListener {
constructor(addReference) {
this.addReference = addReference;
}
enterPostfixUnaryExpression(context) {
if (!context || !context.children || (context.children.length !== 3 && context.children.length !== 4)) {
return;
}
const itlyClass = context.children[0];
if (!itlyClass || !(itlyClass instanceof KotlinParser_1.PrimaryExpressionContext) || (itlyClass.text !== 'Itly' && itlyClass.text !== 'itly')) {
return;
}
let dotMethod;
if (itlyClass.text === 'Itly') {
const dotInstance = context.children[1];
if (!dotInstance || !(dotInstance instanceof KotlinParser_1.PostfixUnarySuffixContext) || !dotInstance.children || dotInstance.children.length !== 1) {
return;
}
const dotInstanceInner = dotInstance.children[0];
if (!dotInstanceInner || !(dotInstanceInner instanceof KotlinParser_1.NavigationSuffixContext) || !dotInstanceInner.children || dotInstanceInner.children.length !== 2) {
return;
}
const instanceDot = dotInstanceInner.children[0];
if (!instanceDot || !(instanceDot instanceof KotlinParser_1.MemberAccessOperatorContext) || instanceDot.text !== '.') {
return;
}
const instance = dotInstanceInner.children[1];
if (!instance || !(instance instanceof KotlinParser_1.SimpleIdentifierContext) || instance.text !== 'instance') {
return;
}
[, , dotMethod] = context.children;
}
else {
[, dotMethod] = context.children;
}
if (!dotMethod || !(dotMethod instanceof KotlinParser_1.PostfixUnarySuffixContext) || !dotMethod.children || dotMethod.children.length !== 1) {
return;
}
const dotMethodInner = dotMethod.children[0];
if (!dotMethodInner || !(dotMethodInner instanceof KotlinParser_1.NavigationSuffixContext) || !dotMethodInner.children || dotMethodInner.children.length !== 2) {
return;
}
const methodDot = dotMethodInner.children[0];
if (!methodDot || !(methodDot instanceof KotlinParser_1.MemberAccessOperatorContext) || methodDot.text !== '.') {
return;
}
const method = dotMethodInner.children[1];
if (!method || !(method instanceof KotlinParser_1.SimpleIdentifierContext)) {
return;
}
const name = method.text;
if (!name) {
return;
}
this.addReference(name, context.start.line, context.start.charPositionInLine);
}
}
class KotlinVerifierV1 extends base_1.Verifier {
constructor() {
super('kt', ['Itly.instance.track', 'itly.track']);
}
async doVerify(eventNames, workingDirs) {
return this.verifyEach((filePath, fileContents, addReference) => {
const inputStream = new antlr4ts_1.ANTLRInputStream(fileContents);
const lexer = new KotlinLexer_1.KotlinLexer(inputStream);
const tokenStream = new antlr4ts_1.CommonTokenStream(lexer);
const parser = new KotlinParser_1.KotlinParser(tokenStream);
const listener = new ItlyListener((name, row, column) => addReference({ filePath, name, row, column }));
ParseTreeWalker_1.ParseTreeWalker.DEFAULT.walk(listener, parser.kotlinFile());
}, workingDirs);
}
}
exports.default = KotlinVerifierV1;