build: open ts strict check (#279)

* feat: no check lib dir

* feat: open strict check to src dir

* test: update test tsconfig.json

* feat: remove any type

* feat: do not export AbstractParseTreeVisitor

* feat: export StmtContextType as enum

* build: improve antlr4 script
This commit is contained in:
Hayden
2024-03-27 19:04:16 +08:00
committed by GitHub
parent bb0fad1dbe
commit c6615aecac
77 changed files with 439 additions and 349 deletions

View File

@ -1,6 +1,5 @@
import { ParseTreeListener } from 'antlr4ng';
import { HiveSQL } from 'src/parser/hive';
import { ProgramContext, SelectItemContext } from 'src/lib/hive/HiveSqlParser';
import { SelectItemContext } from 'src/lib/hive/HiveSqlParser';
import { HiveSqlParserListener } from 'src/lib/hive/HiveSqlParserListener';
describe('HiveSQL Listener Tests', () => {
@ -10,39 +9,33 @@ describe('HiveSQL Listener Tests', () => {
const sql = `select ${expectTableName} from tablename where inc_day='20190601' limit 1000;`;
const parseTree = hive.parse(sql);
let result = '';
class MyListener implements HiveSqlParserListener {
enterSelectItem(ctx: SelectItemContext) {
result = ctx.getText();
}
visitTerminal() {}
visitErrorNode() {}
enterEveryRule() {}
exitEveryRule() {}
}
const listenTableName = new MyListener();
class MyListener extends HiveSqlParserListener {
result = '';
await hive.listen(listenTableName as ParseTreeListener, parseTree as ProgramContext);
expect(result).toBe(expectTableName);
enterSelectItem = (ctx: SelectItemContext) => {
this.result = ctx.getText();
};
}
const listener = new MyListener();
hive.listen(listener, parseTree);
expect(listener.result).toBe(expectTableName);
});
test('Listener enterCreateTable', async () => {
const sql = `drop table table_name;`;
const parseTree = hive.parse(sql);
let result = '';
class MyListener implements HiveSqlParserListener {
enterDropTableStatement(ctx) {
result = ctx.getText();
}
class MyListener extends HiveSqlParserListener {
result = '';
visitTerminal() {}
visitErrorNode() {}
enterEveryRule() {}
exitEveryRule() {}
enterDropTableStatement = (ctx) => {
this.result = ctx.getText();
};
}
const listenTableName = new MyListener();
const listener = new MyListener();
await hive.listen(listenTableName as ParseTreeListener, parseTree as ProgramContext);
expect(result).toBe('droptabletable_name');
hive.listen(listener, parseTree);
expect(listener.result).toBe('droptabletable_name');
});
test('Split sql listener', async () => {

View File

@ -1,5 +1,3 @@
import { AbstractParseTreeVisitor } from 'antlr4ng';
import { HiveSQL } from 'src/parser/hive';
import { HiveSqlParserVisitor } from 'src/lib/hive/HiveSqlParserVisitor';
import { ProgramContext, TableNameContext } from 'src/lib/hive/HiveSqlParser';
@ -14,19 +12,23 @@ describe('HiveSQL Visitor Tests', () => {
});
test('Visitor visitTableName', () => {
let result = '';
class MyVisitor extends AbstractParseTreeVisitor<any> implements HiveSqlParserVisitor<any> {
defaultResult() {
return result;
class MyVisitor extends HiveSqlParserVisitor<string> {
defaultResult(): string {
return '';
}
visitTableName(ctx: TableNameContext) {
result = ctx.getText().toLowerCase();
aggregateResult(aggregate: string, nextResult: string): string {
return aggregate + nextResult;
}
visitProgram = (ctx: ProgramContext) => {
return this.visitChildren(ctx);
};
visitTableName = (ctx: TableNameContext) => {
return ctx.getText().toLowerCase();
};
}
const visitor = new MyVisitor();
visitor.visit(parseTree as ProgramContext);
const result = visitor.visit(parseTree);
expect(result).toBe(expectTableName);
});