UNPKG

@abaplint/core

Version:
73 lines 3.18 kB
"use strict"; 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