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

100% Statements 33/33
100% Branches 7/7
100% Functions 1/1
100% Lines 33/33

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 341x 1x 1x 1x 1x 1x 1x 1x 1x 17x 17x 17x 7x 7x 10x 10x 10x 10x 17x 3x 3x 3x 3x 3x 3x 3x 17x 2x 7x 5x 5x 17x 1x  
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {IdentifierMeta, TypedIdentifier} from "../../types/_typed_identifier";
import {CharacterType, StructureType} from "../../types/basic";
import {StatementSyntax} from "../_statement_syntax";
 
export class SelectionScreen implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string) {
 
    const field = node.findFirstExpression(Expressions.InlineField);
    if (field === undefined) {
      return;
    }
 
    const name = field.getFirstToken();
 
    const concat = node.concatTokens().toUpperCase();
    if (concat.includes("BEGIN OF TABBED BLOCK")) {
      const type = new StructureType([
        {name: "PROG", type: new CharacterType(40)},
        {name: "DYNNR", type: new CharacterType(4)},
        {name: "ACTIVETAB", type: new CharacterType(132)},
      ]);
 
      scope.addIdentifier(new TypedIdentifier(name, filename, type, [IdentifierMeta.SelectionScreenTab]));
    } else if (concat.startsWith("SELECTION-SCREEN TAB")) {
      scope.addIdentifier(new TypedIdentifier(name, filename, new CharacterType(83), [IdentifierMeta.SelectionScreenTab]));
    } else {
      scope.addIdentifier(new TypedIdentifier(name, filename, new CharacterType(83)));
    }
  }
}