@abaplint/core 2.94.25 → 2.95.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5308,6 +5308,7 @@ declare class StatementNode extends AbstractNode<ExpressionNode | TokenNode> {
5308
5308
  includesToken(search: Token): boolean;
5309
5309
  getTokenNodes(): readonly TokenNode[];
5310
5310
  concatTokens(): string;
5311
+ concatTokensVirtual(): string;
5311
5312
  concatTokensWithoutStringsAndComments(): string;
5312
5313
  getTerminator(): string;
5313
5314
  getFirstToken(): Token;
@@ -6398,7 +6399,6 @@ declare class VirtualEndPoint extends AbstractObject {
6398
6399
 
6399
6400
  /** used for macro calls */
6400
6401
  export declare class VirtualPosition extends Position {
6401
- private readonly virtual;
6402
6402
  readonly vrow: number;
6403
6403
  readonly vcol: number;
6404
6404
  constructor(virtual: Position, row: number, col: number);
@@ -9,10 +9,10 @@ class MethodSource extends combi_1.Expression {
9
9
  // note: AttributeName can be both an attribute and a method name, the syntax check will tell
10
10
  // note: its allowed to end with MethodCall, however if this is done it will give a syntax error via syntax check
11
11
  const afterArrow = (0, combi_1.alt)(_1.AttributeName, _1.MethodCall, _1.Dynamic);
12
- const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
12
+ const arrow = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
13
13
  const attr = (0, combi_1.seq)(arrow, afterArrow);
14
14
  const comp = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.Dash), _1.ComponentName);
15
- const attrOrComp = (0, combi_1.alt)(attr, comp);
15
+ const attrOrComp = (0, combi_1.altPrio)(attr, comp);
16
16
  const staticClass = (0, combi_1.seq)(_1.ClassName, (0, combi_1.tok)(tokens_1.StaticArrow));
17
17
  const clas = (0, combi_1.seq)(staticClass, afterArrow);
18
18
  const start = (0, combi_1.seq)((0, combi_1.altPrio)(clas, _1.SourceField, _1.SourceFieldSymbol, _1.Dynamic), (0, combi_1.star)(attrOrComp));
@@ -85,6 +85,30 @@ class StatementNode extends _abstract_node_1.AbstractNode {
85
85
  }
86
86
  return str;
87
87
  }
88
+ concatTokensVirtual() {
89
+ let str = "";
90
+ let prev;
91
+ for (const token of this.getTokens()) {
92
+ if (token instanceof pragma_1.Pragma) {
93
+ continue;
94
+ }
95
+ const vprev = prev === null || prev === void 0 ? void 0 : prev.getStart();
96
+ const vtoke = token === null || token === void 0 ? void 0 : token.getStart();
97
+ if (str === "") {
98
+ str = token.getStr();
99
+ }
100
+ else if (prev && vprev && vtoke
101
+ && prev.getStr().length + vprev.vcol === vtoke.vcol
102
+ && vprev.vrow === vtoke.vrow) {
103
+ str = str + token.getStr();
104
+ }
105
+ else {
106
+ str = str + " " + token.getStr();
107
+ }
108
+ prev = token;
109
+ }
110
+ return str;
111
+ }
88
112
  concatTokensWithoutStringsAndComments() {
89
113
  let str = "";
90
114
  let prev;
@@ -31,7 +31,7 @@ exports.Position = Position;
31
31
  class VirtualPosition extends Position {
32
32
  constructor(virtual, row, col) {
33
33
  super(virtual.getRow(), virtual.getCol());
34
- this.virtual = virtual;
34
+ // this.virtual = virtual;
35
35
  this.vrow = row;
36
36
  this.vcol = col;
37
37
  }
@@ -39,8 +39,7 @@ class VirtualPosition extends Position {
39
39
  if (!(p instanceof VirtualPosition)) {
40
40
  return false;
41
41
  }
42
- const bar = p; // widening cast for ABAP translation
43
- return super.equals(this.virtual) && this.vrow === bar.vrow && this.vcol === bar.vcol;
42
+ return super.equals(this) && this.vrow === p.vrow && this.vcol === p.vcol;
44
43
  }
45
44
  }
46
45
  exports.VirtualPosition = VirtualPosition;
@@ -63,7 +63,7 @@ class Registry {
63
63
  }
64
64
  static abaplintVersion() {
65
65
  // magic, see build script "version.sh"
66
- return "2.94.25";
66
+ return "2.95.1";
67
67
  }
68
68
  getDDICReferences() {
69
69
  return this.references;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpandMacros = exports.ExpandMacrosConf = void 0;
4
+ const issue_1 = require("../issue");
5
+ const _abap_rule_1 = require("./_abap_rule");
6
+ const _basic_rule_config_1 = require("./_basic_rule_config");
7
+ const _irule_1 = require("./_irule");
8
+ const edit_helper_1 = require("../edit_helper");
9
+ const _statement_1 = require("../abap/2_statements/statements/_statement");
10
+ const position_1 = require("../position");
11
+ class ExpandMacrosConf extends _basic_rule_config_1.BasicRuleConfig {
12
+ }
13
+ exports.ExpandMacrosConf = ExpandMacrosConf;
14
+ class ExpandMacros extends _abap_rule_1.ABAPRule {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.conf = new ExpandMacrosConf();
18
+ }
19
+ getMetadata() {
20
+ return {
21
+ key: "expand_macros",
22
+ title: "Expand Macros",
23
+ shortDescription: `Allows expanding macro calls with quick fixes`,
24
+ extendedInformation: `Macros: https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenmacros_guidl.htm
25
+
26
+ Note that macros/DEFINE cannot be used in the ABAP Cloud programming model`,
27
+ badExample: `DEFINE _hello.
28
+ WRITE 'hello'.
29
+ END-OF-DEFINITION.
30
+ _hello.`,
31
+ goodExample: `WRITE 'hello'.`,
32
+ tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.Upport],
33
+ };
34
+ }
35
+ getConfig() {
36
+ return this.conf;
37
+ }
38
+ setConfig(conf) {
39
+ this.conf = conf;
40
+ }
41
+ runParsed(file) {
42
+ const issues = [];
43
+ const message = "Expand macro call";
44
+ const statements = file.getStatements();
45
+ for (let i = 0; i < statements.length; i++) {
46
+ const statementNode = statements[i];
47
+ const statement = statementNode.get();
48
+ if (!(statement instanceof _statement_1.MacroCall)) {
49
+ continue;
50
+ }
51
+ let replace = "";
52
+ for (let j = i + 1; j < statements.length; j++) {
53
+ const sub = statements[j];
54
+ if (sub.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
55
+ if (replace !== "") {
56
+ replace += "\n";
57
+ }
58
+ replace += sub.concatTokensVirtual();
59
+ }
60
+ else {
61
+ break;
62
+ }
63
+ }
64
+ const fix = edit_helper_1.EditHelper.replaceRange(file, statementNode.getStart(), statementNode.getEnd(), replace);
65
+ issues.push(issue_1.Issue.atStatement(file, statementNode, message, this.getMetadata().key, this.conf.severity, fix));
66
+ }
67
+ return issues;
68
+ }
69
+ }
70
+ exports.ExpandMacros = ExpandMacros;
71
+ //# sourceMappingURL=expand_macros.js.map
@@ -57,6 +57,7 @@ __exportStar(require("./empty_line_in_statement"), exports);
57
57
  __exportStar(require("./empty_statement"), exports);
58
58
  __exportStar(require("./empty_structure"), exports);
59
59
  __exportStar(require("./exit_or_check"), exports);
60
+ __exportStar(require("./expand_macros"), exports);
60
61
  __exportStar(require("./exporting"), exports);
61
62
  __exportStar(require("./forbidden_identifier"), exports);
62
63
  __exportStar(require("./forbidden_pseudo_and_pragma"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.94.25",
3
+ "version": "2.95.1",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",