All files / src/rules empty_statement.ts

100% Statements 57/57
100% Branches 7/7
100% Functions 5/5
100% Lines 57/57

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 571x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10893x 10893x 10893x 10893x 10893x 32499x 32499x 32499x 32499x 32499x 32499x 32499x 32499x 32499x 10893x 10893x 10345x 10345x 10893x 10893x 258x 258x 10893x 10893x 283x 283x 283x 283x 283x 283x 283x 1548x 10x 10x 10x 10x 10x 10x 1548x 1548x 1548x 283x 283x 283x 10893x
import {Issue} from "../issue";
import {Empty} from "../abap/2_statements/statements/_statement";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {EditHelper} from "../edit_helper";
import {Position} from "../position";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
 
export class EmptyStatementConf extends BasicRuleConfig {
}
 
export class EmptyStatement extends ABAPRule {
 
  private conf = new EmptyStatementConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "empty_statement",
      title: "Remove empty statement",
      shortDescription: `Checks for empty statements (an empty statement is a single dot)`,
      tags: [RuleTag.Quickfix, RuleTag.SingleFile],
      badExample: `WRITE 'hello world'..`,
      goodExample: `WRITE 'hello world'.`,
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: EmptyStatementConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile) {
    const issues: Issue[] = [];
 
    const statements = file.getStatements();
 
    let previousEnd = new Position(1, 1);
 
    for (const sta of statements) {
      if (sta.get() instanceof Empty) {
        const token = sta.getFirstToken();
        const fix = EditHelper.deleteRange(file, previousEnd, token.getEnd());
 
        const issue = Issue.atStatement(file, sta, "Remove empty statement", this.getMetadata().key, this.conf.severity, fix);
        issues.push(issue);
      }
 
      previousEnd = sta.getLastToken().getEnd();
    }
 
    return issues;
  }
}