Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 1x 1x 4x 4x 4x 1x 1x 4x 4x 4x 4x 4x 6x 6x 1x 1x 1x 1x 1x 1x 6x 5x 5x 5x 5x 5x 5x 5x 5x 6x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x | import {Combi} from "../abap/2_statements/combi"; import {ExpressionNode} from "../abap/nodes"; import {IFile} from "../files/_ifile"; import {defaultVersion} from "../version"; import {DDLLexer} from "./ddl_lexer"; import * as Expressions from "./expressions"; export enum DDLKind { Structure = "structure", Table = "table", } export interface IDDLParserResultField { key: boolean, name: string, type: string, notNull: boolean, } export interface IDDLParserResult { name: string, kind: DDLKind, fields: IDDLParserResultField[]; } export class DDLParser { public parse(file: IFile): IDDLParserResult | undefined { const tokens = DDLLexer.run(file); let res = Combi.run(new Expressions.DDLStructure(), tokens, defaultVersion); if (res === undefined) { res = Combi.run(new Expressions.DDLTable(), tokens, defaultVersion); } if (res === undefined || !(res[0] instanceof ExpressionNode)) { return undefined; } return this.parsedToResult(res[0]); } private parsedToResult(node: ExpressionNode): IDDLParserResult { const fields: IDDLParserResultField[] = []; let found = node.findDirectExpressions(Expressions.DDLStructureField); found = found.concat(node.findDirectExpressions(Expressions.DDLTableField)); found = found.concat(node.findDirectExpressions(Expressions.DDLInclude)); for (const f of found) { const name = f.findDirectExpression(Expressions.DDLName)?.concatTokens() || ""; if (f.get() instanceof Expressions.DDLInclude) { fields.push({ name: ".INCLUDE", type: name, key: false, notNull: false, }); } else { const type = f.findDirectExpression(Expressions.DDLType)?.concatTokens() || ""; fields.push({ name, type, key: false, notNull: false, }); } } const result: IDDLParserResult = { name: node.findDirectExpression(Expressions.DDLName)!.concatTokens(), kind: node.get() instanceof Expressions.DDLStructure ? DDLKind.Structure : DDLKind.Table, fields, }; return result; } } |