All files / src/abap/5_syntax/expressions data_definition.ts

78.94% Statements 30/38
88.88% Branches 8/9
100% Functions 1/1
78.94% Lines 30/38

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 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1313x 1313x 277x 277x 1036x 1036x 1036x 1313x 17x 17x 1036x 1036x 1313x 1034x 16x 1034x 1018x 1018x 1034x                 1x
import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {CurrentScope} from "../_current_scope";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {UnknownType} from "../../types/basic";
import {BasicTypes} from "../basic_types";
import {TypeTable} from "./type_table";
 
export class DataDefinition {
  public runSyntax(node: ExpressionNode, scope: CurrentScope, filename: string): TypedIdentifier | undefined {
    const tt = node.findFirstExpression(Expressions.TypeTable);
    if (tt) {
      return new TypeTable().runSyntax(node, scope, filename);
    }
 
    const valueNode = node.findFirstExpression(Expressions.Value);
    let value: string | undefined = undefined;
    if (valueNode) {
      value = new BasicTypes(filename, scope).findValue(node);
    }
 
    const bfound = new BasicTypes(filename, scope).simpleType(node);
    if (bfound) {
      if (value) {
        return new TypedIdentifier(bfound.getToken(), filename, bfound.getType(), bfound.getMeta(), value);
      } else {
        return bfound;
      }
    }

    const name = node.findFirstExpression(Expressions.DefinitionName);
    if (name) {
      return new TypedIdentifier(name.getFirstToken(), filename, new UnknownType("DataDefinition, fallback"));
    }

    return undefined;
  }
}