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:
		@ -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 () => {
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user