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

94.34% Statements 50/53
75% Branches 15/20
100% Functions 1/1
94.34% Lines 50/53

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 531x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 3x 3x 4x 4x 4x 4x 4x 5x 2x 2x 1x 1x 1x 1x 2x 3x 3x 5x 1x 1x   1x 1x 1x 1x 3x 3x 5x 1x 1x 1x 1x     1x 5x 5x 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, new IntegerType());
      } 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, new IntegerType());
      } else {
        new Target().runSyntax(lengthTarget, scope, filename);
      }
    }
 
  }
}