All files / src/abap/5_syntax/statements describe.ts

93.65% Statements 59/63
76.92% Branches 20/26
100% Functions 1/1
93.65% Lines 59/63

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 631x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 4x 4x 5x 5x 5x 5x 5x 6x 2x 2x 1x 1x 1x 1x 2x 4x 4x 6x 2x 2x 1x 1x 1x 1x 2x 4x 4x 6x 1x 1x 1x 1x     1x 4x 4x 6x 1x 1x 1x 1x     1x 6x 6x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {InlineData} from "../expressions/inline_data";
import {CharacterType, IntegerType} from "../../types/basic";
import {Target} from "../expressions/target";
import {Source} from "../expressions/source";
import {FieldChain} from "../expressions/field_chain";
import {ReferenceType} from "../_reference";
import {StatementSyntax} from "../_statement_syntax";
 
export class Describe implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
    for (const s of node.findAllExpressions(Expressions.Source)) {
      new Source().runSyntax(s, scope, filename);
    }
    for (const s of node.findAllExpressions(Expressions.FieldChain)) {
      new FieldChain().runSyntax(s, scope, filename, ReferenceType.DataReadReference);
    }
 
    const linesTarget = node.findExpressionAfterToken("LINES");
    if (linesTarget?.get() instanceof Expressions.Target) {
      const inline = linesTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(inline, scope, filename, IntegerType.get());
      } else {
        new Target().runSyntax(linesTarget, scope, filename);
      }
    }
 
    const typeTarget = node.findExpressionAfterToken("TYPE");
    if (typeTarget?.get() instanceof Expressions.Target) {
      const inline = typeTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(inline, scope, filename, new CharacterType(1));
      } else {
        new Target().runSyntax(typeTarget, scope, filename);
      }
    }
 
    const lengthTarget = node.findExpressionAfterToken("LENGTH");
    if (lengthTarget?.get() instanceof Expressions.Target) {
      const inline = lengthTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(inline, scope, filename, IntegerType.get());
      } else {
        new Target().runSyntax(lengthTarget, scope, filename);
      }
    }
 
    const componentsTarget = node.findExpressionAfterToken("COMPONENTS");
    if (componentsTarget?.get() instanceof Expressions.Target) {
      const inline = componentsTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(inline, scope, filename, IntegerType.get());
      } else {
        new Target().runSyntax(componentsTarget, scope, filename);
      }
    }
 
  }
}