All files / src/rules parser_error.ts

95.58% Statements 65/68
90.9% Branches 10/11
100% Functions 5/5
95.58% Lines 65/68

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 681x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 8923x 8923x 8923x 8923x 26625x 26625x 26625x 26625x 26625x 26625x 26625x 26625x 26625x 8923x 8923x 8485x 8485x 8923x 8923x 202x 202x 8923x 8923x 234x 234x 234x 1267x 1257x 1257x 10x 1267x       1267x 10x 10x 10x 10x 10x 1267x 234x 234x 1x 1x 1x 1x 1x 1x 1x 1x 234x 234x 234x 8923x 8923x
import {Issue} from "../issue";
import {Unknown} from "../abap/2_statements/statements/_statement";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {STATEMENT_MAX_TOKENS} from "../abap/2_statements/statement_parser";
import {RuleTag} from "./_irule";
import {Version} from "../version";
import {ABAPFile} from "../abap/abap_file";
 
export class ParserErrorConf extends BasicRuleConfig {
}
 
export class ParserError extends ABAPRule {
  private conf = new ParserErrorConf();
 
  public getMetadata() {
    return {
      key: "parser_error",
      title: "Parser error",
      shortDescription: `Checks for syntax not recognized by abaplint.
 
See recognized syntax at https://syntax.abaplint.org`,
      tags: [RuleTag.Syntax, RuleTag.SingleFile],
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: ParserErrorConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile) {
    const issues: Issue[] = [];
 
    for (const statement of file.getStatements()) {
      if (!(statement.get() instanceof Unknown)) {
        continue;
      }
 
      if (statement.getTokens().length > STATEMENT_MAX_TOKENS) {
        const message = "Statement too long, refactor statement";
        const issue = Issue.atToken(file, statement.getTokens()[0], message, this.getMetadata().key, this.conf.severity);
        issues.push(issue);
      } else {
        const tok = statement.getFirstToken();
        const message = "Statement does not exist in ABAP" + this.reg.getConfig().getVersion() + "(or a parser error), \"" + tok.getStr() + "\"";
        const issue = Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity);
        issues.push(issue);
      }
    }
 
    if (this.reg.getConfig().getVersion() === Version.v700) {
      for (const statement of file.getStatements()) {
        if (statement.getPragmas().length > 0) {
          const message = "Pragmas not allowed in v700";
          const issue = Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity);
          issues.push(issue);
        }
      }
    }
 
    return issues;
  }
 
}