@abaplint/core
Version:
abaplint - Core API
73 lines • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AlignPseudoComments = exports.AlignPseudoCommentsConf = void 0;
const _abap_rule_1 = require("./_abap_rule");
const _basic_rule_config_1 = require("./_basic_rule_config");
const _irule_1 = require("./_irule");
const issue_1 = require("../issue");
const _statement_1 = require("../abap/2_statements/statements/_statement");
const position_1 = require("../position");
const edit_helper_1 = require("../edit_helper");
class AlignPseudoCommentsConf extends _basic_rule_config_1.BasicRuleConfig {
}
exports.AlignPseudoCommentsConf = AlignPseudoCommentsConf;
class AlignPseudoComments extends _abap_rule_1.ABAPRule {
constructor() {
super(...arguments);
this.conf = new AlignPseudoCommentsConf();
}
getMetadata() {
return {
key: "align_pseudo_comments",
title: "Align pseudo comments",
shortDescription: `Align code inspector pseudo comments in statements`,
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Quickfix],
badExample: `WRITE 'sdf'. "#EC sdf`,
goodExample: `WRITE 'sdf'. "#EC sdf`,
};
}
getConfig() {
return this.conf;
}
setConfig(conf) {
this.conf = conf;
}
runParsed(file) {
const issues = [];
let previousEnd = undefined;
for (const statement of file.getStatements()) {
if (!(statement.get() instanceof _statement_1.Comment)) {
previousEnd = statement.getLastToken().getEnd();
continue;
}
const commentLength = statement.concatTokens().length;
const firstCommentToken = statement.getFirstToken();
if (firstCommentToken.getStr().startsWith(`"#`) === false) {
continue;
}
else if (previousEnd === undefined) {
continue;
}
let expectedColumn = 61;
if (commentLength > 10) {
expectedColumn = 72 - commentLength;
}
const col = firstCommentToken.getStart().getCol();
if (previousEnd.getCol() < expectedColumn && col !== expectedColumn) {
let fix = undefined;
if (col < expectedColumn) {
fix = edit_helper_1.EditHelper.insertAt(file, firstCommentToken.getStart(), " ".repeat(expectedColumn - col));
}
else {
const from = new position_1.Position(firstCommentToken.getStart().getRow(), expectedColumn);
fix = edit_helper_1.EditHelper.deleteRange(file, from, firstCommentToken.getStart());
}
const message = "Align pseudo comment to column " + expectedColumn;
issues.push(issue_1.Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity, fix));
}
}
return issues;
}
}
exports.AlignPseudoComments = AlignPseudoComments;
//# sourceMappingURL=align_pseudo_comments.js.map