@abaplint/core 2.102.66 → 2.102.68

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.
Files changed (44) hide show
  1. package/build/abaplint.d.ts +2 -1
  2. package/build/src/abap/1_lexer/lexer.js +2 -1
  3. package/build/src/abap/1_lexer/tokens/{_token.js → abstract_token.js} +8 -7
  4. package/build/src/abap/1_lexer/tokens/at.js +3 -21
  5. package/build/src/abap/1_lexer/tokens/atw.js +11 -0
  6. package/build/src/abap/1_lexer/tokens/bracket_left.js +5 -5
  7. package/build/src/abap/1_lexer/tokens/bracket_right.js +5 -5
  8. package/build/src/abap/1_lexer/tokens/colon.js +2 -2
  9. package/build/src/abap/1_lexer/tokens/comment.js +2 -2
  10. package/build/src/abap/1_lexer/tokens/dash.js +5 -5
  11. package/build/src/abap/1_lexer/tokens/identifier.js +2 -2
  12. package/build/src/abap/1_lexer/tokens/index.js +3 -0
  13. package/build/src/abap/1_lexer/tokens/instance_arrow.js +5 -5
  14. package/build/src/abap/1_lexer/tokens/paren_left.js +5 -5
  15. package/build/src/abap/1_lexer/tokens/paren_right.js +5 -5
  16. package/build/src/abap/1_lexer/tokens/plus.js +5 -5
  17. package/build/src/abap/1_lexer/tokens/pragma.js +2 -2
  18. package/build/src/abap/1_lexer/tokens/punctuation.js +2 -2
  19. package/build/src/abap/1_lexer/tokens/static_arrow.js +5 -5
  20. package/build/src/abap/1_lexer/tokens/string.js +6 -6
  21. package/build/src/abap/1_lexer/tokens/wat.js +11 -0
  22. package/build/src/abap/1_lexer/tokens/watw.js +11 -0
  23. package/build/src/abap/2_statements/expand_macros.js +3 -3
  24. package/build/src/abap/5_syntax/expressions/reduce_body.js +6 -1
  25. package/build/src/abap/5_syntax/expressions/string_template.js +1 -1
  26. package/build/src/abap/types/class_definition.js +25 -0
  27. package/build/src/files/_abstract_file.js +11 -4
  28. package/build/src/index.js +4 -3
  29. package/build/src/issue.js +2 -1
  30. package/build/src/lsp/semantic.js +2 -1
  31. package/build/src/objects/rename/renamer_helper.js +2 -2
  32. package/build/src/position.js +1 -17
  33. package/build/src/pretty_printer/indent.js +3 -3
  34. package/build/src/pretty_printer/pretty_printer.js +2 -2
  35. package/build/src/registry.js +1 -1
  36. package/build/src/rules/downport.js +2 -1
  37. package/build/src/rules/expand_macros.js +2 -2
  38. package/build/src/rules/indentation.js +2 -1
  39. package/build/src/rules/keyword_case.js +2 -2
  40. package/build/src/rules/line_break_multiple_parameters.js +2 -2
  41. package/build/src/rules/many_parentheses.js +9 -3
  42. package/build/src/rules/max_one_statement.js +2 -2
  43. package/build/src/virtual_position.js +21 -0
  44. package/package.json +1 -1
@@ -1001,6 +1001,7 @@ declare class ClassDefinition_3 extends Identifier implements IClassDefinition {
1001
1001
  isAbstract(): boolean;
1002
1002
  isSharedMemory(): boolean;
1003
1003
  private findSuper;
1004
+ private checkMethodsFromSuperClasses;
1004
1005
  private findFriends;
1005
1006
  private addReference;
1006
1007
  private parse;
@@ -6314,8 +6315,8 @@ declare class TokenNodeRegex extends TokenNode {
6314
6315
  declare namespace Tokens {
6315
6316
  export {
6316
6317
  At_3 as At,
6317
- WAt,
6318
6318
  AtW,
6319
+ WAt,
6319
6320
  WAtW,
6320
6321
  BracketLeft,
6321
6322
  WBracketLeft,
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Lexer = void 0;
4
4
  const position_1 = require("../../position");
5
+ const virtual_position_1 = require("../../virtual_position");
5
6
  const tokens_1 = require("./tokens");
6
7
  class Buffer {
7
8
  constructor() {
@@ -127,7 +128,7 @@ class Lexer {
127
128
  }
128
129
  let pos = new position_1.Position(row, col - s.length);
129
130
  if (this.virtual) {
130
- pos = new position_1.VirtualPosition(this.virtual, pos.getRow(), pos.getCol());
131
+ pos = new virtual_position_1.VirtualPosition(this.virtual, pos.getRow(), pos.getCol());
131
132
  }
132
133
  let tok = undefined;
133
134
  if (this.m === this.ModeComment) {
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Token = void 0;
3
+ exports.AbstractToken = void 0;
4
4
  const position_1 = require("../../../position");
5
- class Token {
6
- [Symbol.for("debug.description")]() {
7
- return `${this.constructor.name} ${this.str}`;
8
- }
5
+ class AbstractToken {
9
6
  constructor(start, str) {
10
7
  this.start = start;
11
8
  this.str = str;
12
9
  }
10
+ // special function, for debugging purposes, see https://github.com/abaplint/abaplint/pull/3137
11
+ [Symbol.for("debug.description")]() {
12
+ return `${this.constructor.name} ${this.str}`;
13
+ }
13
14
  getStr() {
14
15
  return this.str;
15
16
  }
@@ -26,5 +27,5 @@ class Token {
26
27
  return new position_1.Position(this.start.getRow(), this.start.getCol() + this.str.length);
27
28
  }
28
29
  }
29
- exports.Token = Token;
30
- //# sourceMappingURL=_token.js.map
30
+ exports.AbstractToken = AbstractToken;
31
+ //# sourceMappingURL=abstract_token.js.map
@@ -1,29 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WAtW = exports.AtW = exports.WAt = exports.At = void 0;
4
- const _token_1 = require("./_token");
5
- class At extends _token_1.Token {
3
+ exports.At = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class At extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "@";
8
8
  }
9
9
  }
10
10
  exports.At = At;
11
- class WAt extends _token_1.Token {
12
- static railroad() {
13
- return " @";
14
- }
15
- }
16
- exports.WAt = WAt;
17
- class AtW extends _token_1.Token {
18
- static railroad() {
19
- return "@ ";
20
- }
21
- }
22
- exports.AtW = AtW;
23
- class WAtW extends _token_1.Token {
24
- static railroad() {
25
- return " @ ";
26
- }
27
- }
28
- exports.WAtW = WAtW;
29
11
  //# sourceMappingURL=at.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AtW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class AtW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return "@ ";
8
+ }
9
+ }
10
+ exports.AtW = AtW;
11
+ //# sourceMappingURL=atw.js.map
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WBracketLeftW = exports.BracketLeftW = exports.WBracketLeft = exports.BracketLeft = void 0;
4
- const _token_1 = require("./_token");
5
- class BracketLeft extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class BracketLeft extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "[";
8
8
  }
9
9
  }
10
10
  exports.BracketLeft = BracketLeft;
11
- class WBracketLeft extends _token_1.Token {
11
+ class WBracketLeft extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " [";
14
14
  }
15
15
  }
16
16
  exports.WBracketLeft = WBracketLeft;
17
- class BracketLeftW extends _token_1.Token {
17
+ class BracketLeftW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "[ ";
20
20
  }
21
21
  }
22
22
  exports.BracketLeftW = BracketLeftW;
23
- class WBracketLeftW extends _token_1.Token {
23
+ class WBracketLeftW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " [ ";
26
26
  }
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WBracketRightW = exports.BracketRightW = exports.WBracketRight = exports.BracketRight = void 0;
4
- const _token_1 = require("./_token");
5
- class BracketRight extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class BracketRight extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "]";
8
8
  }
9
9
  }
10
10
  exports.BracketRight = BracketRight;
11
- class WBracketRight extends _token_1.Token {
11
+ class WBracketRight extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " ]";
14
14
  }
15
15
  }
16
16
  exports.WBracketRight = WBracketRight;
17
- class BracketRightW extends _token_1.Token {
17
+ class BracketRightW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "] ";
20
20
  }
21
21
  }
22
22
  exports.BracketRightW = BracketRightW;
23
- class WBracketRightW extends _token_1.Token {
23
+ class WBracketRightW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " ] ";
26
26
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Colon = void 0;
4
- const _token_1 = require("./_token");
5
- class Colon extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Colon extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.Colon = Colon;
8
8
  //# sourceMappingURL=colon.js.map
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Comment = void 0;
4
- const _token_1 = require("./_token");
5
- class Comment extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Comment extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.Comment = Comment;
8
8
  //# sourceMappingURL=comment.js.map
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WDashW = exports.DashW = exports.WDash = exports.Dash = void 0;
4
- const _token_1 = require("./_token");
5
- class Dash extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Dash extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "-";
8
8
  }
9
9
  }
10
10
  exports.Dash = Dash;
11
- class WDash extends _token_1.Token {
11
+ class WDash extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " -";
14
14
  }
15
15
  }
16
16
  exports.WDash = WDash;
17
- class DashW extends _token_1.Token {
17
+ class DashW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "- ";
20
20
  }
21
21
  }
22
22
  exports.DashW = DashW;
23
- class WDashW extends _token_1.Token {
23
+ class WDashW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " - ";
26
26
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Identifier = void 0;
4
- const _token_1 = require("./_token");
5
- class Identifier extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Identifier extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.Identifier = Identifier;
8
8
  //# sourceMappingURL=identifier.js.map
@@ -15,6 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./at"), exports);
18
+ __exportStar(require("./atw"), exports);
19
+ __exportStar(require("./wat"), exports);
20
+ __exportStar(require("./watw"), exports);
18
21
  __exportStar(require("./bracket_left"), exports);
19
22
  __exportStar(require("./bracket_right"), exports);
20
23
  __exportStar(require("./colon"), exports);
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WInstanceArrowW = exports.InstanceArrowW = exports.WInstanceArrow = exports.InstanceArrow = void 0;
4
- const _token_1 = require("./_token");
5
- class InstanceArrow extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class InstanceArrow extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "->";
8
8
  }
9
9
  }
10
10
  exports.InstanceArrow = InstanceArrow;
11
- class WInstanceArrow extends _token_1.Token {
11
+ class WInstanceArrow extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " ->";
14
14
  }
15
15
  }
16
16
  exports.WInstanceArrow = WInstanceArrow;
17
- class InstanceArrowW extends _token_1.Token {
17
+ class InstanceArrowW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "-> ";
20
20
  }
21
21
  }
22
22
  exports.InstanceArrowW = InstanceArrowW;
23
- class WInstanceArrowW extends _token_1.Token {
23
+ class WInstanceArrowW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " -> ";
26
26
  }
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WParenLeftW = exports.ParenLeftW = exports.WParenLeft = exports.ParenLeft = void 0;
4
- const _token_1 = require("./_token");
5
- class ParenLeft extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class ParenLeft extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "(";
8
8
  }
9
9
  }
10
10
  exports.ParenLeft = ParenLeft;
11
- class WParenLeft extends _token_1.Token {
11
+ class WParenLeft extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " (";
14
14
  }
15
15
  }
16
16
  exports.WParenLeft = WParenLeft;
17
- class ParenLeftW extends _token_1.Token {
17
+ class ParenLeftW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "( ";
20
20
  }
21
21
  }
22
22
  exports.ParenLeftW = ParenLeftW;
23
- class WParenLeftW extends _token_1.Token {
23
+ class WParenLeftW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " ( ";
26
26
  }
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WParenRightW = exports.ParenRightW = exports.WParenRight = exports.ParenRight = void 0;
4
- const _token_1 = require("./_token");
5
- class ParenRight extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class ParenRight extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return ")";
8
8
  }
9
9
  }
10
10
  exports.ParenRight = ParenRight;
11
- class WParenRight extends _token_1.Token {
11
+ class WParenRight extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " )";
14
14
  }
15
15
  }
16
16
  exports.WParenRight = WParenRight;
17
- class ParenRightW extends _token_1.Token {
17
+ class ParenRightW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return ") ";
20
20
  }
21
21
  }
22
22
  exports.ParenRightW = ParenRightW;
23
- class WParenRightW extends _token_1.Token {
23
+ class WParenRightW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " ) ";
26
26
  }
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WPlusW = exports.PlusW = exports.WPlus = exports.Plus = void 0;
4
- const _token_1 = require("./_token");
5
- class Plus extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Plus extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "+";
8
8
  }
9
9
  }
10
10
  exports.Plus = Plus;
11
- class WPlus extends _token_1.Token {
11
+ class WPlus extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " +";
14
14
  }
15
15
  }
16
16
  exports.WPlus = WPlus;
17
- class PlusW extends _token_1.Token {
17
+ class PlusW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "+ ";
20
20
  }
21
21
  }
22
22
  exports.PlusW = PlusW;
23
- class WPlusW extends _token_1.Token {
23
+ class WPlusW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " + ";
26
26
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Pragma = void 0;
4
- const _token_1 = require("./_token");
5
- class Pragma extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Pragma extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.Pragma = Pragma;
8
8
  //# sourceMappingURL=pragma.js.map
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Punctuation = void 0;
4
- const _token_1 = require("./_token");
5
- class Punctuation extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class Punctuation extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.Punctuation = Punctuation;
8
8
  //# sourceMappingURL=punctuation.js.map
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WStaticArrowW = exports.StaticArrowW = exports.WStaticArrow = exports.StaticArrow = void 0;
4
- const _token_1 = require("./_token");
5
- class StaticArrow extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StaticArrow extends abstract_token_1.AbstractToken {
6
6
  static railroad() {
7
7
  return "=>";
8
8
  }
9
9
  }
10
10
  exports.StaticArrow = StaticArrow;
11
- class WStaticArrow extends _token_1.Token {
11
+ class WStaticArrow extends abstract_token_1.AbstractToken {
12
12
  static railroad() {
13
13
  return " =>";
14
14
  }
15
15
  }
16
16
  exports.WStaticArrow = WStaticArrow;
17
- class StaticArrowW extends _token_1.Token {
17
+ class StaticArrowW extends abstract_token_1.AbstractToken {
18
18
  static railroad() {
19
19
  return "=> ";
20
20
  }
21
21
  }
22
22
  exports.StaticArrowW = StaticArrowW;
23
- class WStaticArrowW extends _token_1.Token {
23
+ class WStaticArrowW extends abstract_token_1.AbstractToken {
24
24
  static railroad() {
25
25
  return " => ";
26
26
  }
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StringTemplateMiddle = exports.StringTemplateEnd = exports.StringTemplateBegin = exports.StringTemplate = exports.StringToken = void 0;
4
- const _token_1 = require("./_token");
5
- class StringToken extends _token_1.Token {
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringToken extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.StringToken = StringToken;
8
- class StringTemplate extends _token_1.Token {
8
+ class StringTemplate extends abstract_token_1.AbstractToken {
9
9
  }
10
10
  exports.StringTemplate = StringTemplate;
11
- class StringTemplateBegin extends _token_1.Token {
11
+ class StringTemplateBegin extends abstract_token_1.AbstractToken {
12
12
  }
13
13
  exports.StringTemplateBegin = StringTemplateBegin;
14
- class StringTemplateEnd extends _token_1.Token {
14
+ class StringTemplateEnd extends abstract_token_1.AbstractToken {
15
15
  }
16
16
  exports.StringTemplateEnd = StringTemplateEnd;
17
- class StringTemplateMiddle extends _token_1.Token {
17
+ class StringTemplateMiddle extends abstract_token_1.AbstractToken {
18
18
  }
19
19
  exports.StringTemplateMiddle = StringTemplateMiddle;
20
20
  //# sourceMappingURL=string.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WAt = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WAt extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " @";
8
+ }
9
+ }
10
+ exports.WAt = WAt;
11
+ //# sourceMappingURL=wat.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WAtW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WAtW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " @ ";
8
+ }
9
+ }
10
+ exports.WAtW = WAtW;
11
+ //# sourceMappingURL=watw.js.map
@@ -10,7 +10,7 @@ const token_node_1 = require("../nodes/token_node");
10
10
  const statement_parser_1 = require("./statement_parser");
11
11
  const memory_file_1 = require("../../files/memory_file");
12
12
  const lexer_1 = require("../1_lexer/lexer");
13
- const position_1 = require("../../position");
13
+ const virtual_position_1 = require("../../virtual_position");
14
14
  class Macros {
15
15
  constructor(globalMacros) {
16
16
  this.macros = {};
@@ -149,8 +149,8 @@ class ExpandMacros {
149
149
  }
150
150
  // argh, macros is a nightmare
151
151
  let end = now.getStart();
152
- if (end instanceof position_1.VirtualPosition) {
153
- end = new position_1.VirtualPosition(end, end.vrow, end.vcol + now.getStr().length);
152
+ if (end instanceof virtual_position_1.VirtualPosition) {
153
+ end = new virtual_position_1.VirtualPosition(end, end.vrow, end.vcol + now.getStr().length);
154
154
  }
155
155
  else {
156
156
  end = now.getEnd();
@@ -25,7 +25,12 @@ class ReduceBody {
25
25
  scope.push(_scope_type_1.ScopeType.Let, "LET", node.getFirstToken().getStart(), filename);
26
26
  scoped = true;
27
27
  }
28
- const found = new inline_field_definition_1.InlineFieldDefinition().runSyntax(i, scope, filename, targetType);
28
+ let foundType = targetType;
29
+ const source = i.findDirectExpression(Expressions.Source);
30
+ if (source) {
31
+ foundType = new source_1.Source().runSyntax(source, scope, filename, targetType);
32
+ }
33
+ const found = new inline_field_definition_1.InlineFieldDefinition().runSyntax(i, scope, filename, foundType);
29
34
  if (found && first === undefined) {
30
35
  first = found;
31
36
  }
@@ -17,7 +17,7 @@ class StringTemplate {
17
17
  }
18
18
  else if ((typeUtils.isCharLike(type) === false && typeUtils.isHexLike(type) === false)
19
19
  || type instanceof basic_1.StructureType) {
20
- throw new Error("Not character like, " + type.constructor.name);
20
+ throw new Error("String template, not character like, " + type.constructor.name);
21
21
  }
22
22
  const format = templateSource.findDirectExpression(Expressions.StringTemplateFormatting);
23
23
  const formatConcat = format === null || format === void 0 ? void 0 : format.concatTokens();
@@ -46,6 +46,8 @@ class ClassDefinition extends _identifier_1.Identifier {
46
46
  this.testing = concat.includes(" FOR TESTING");
47
47
  this.sharedMemory = concat.includes(" SHARED MEMORY ENABLED");
48
48
  this.abstract = (cdef === null || cdef === void 0 ? void 0 : cdef.findDirectTokenByText("ABSTRACT")) !== undefined;
49
+ // perform checks after everything has been initialized
50
+ this.checkMethodsFromSuperClasses(scope);
49
51
  }
50
52
  getFriends() {
51
53
  return this.friends;
@@ -98,6 +100,29 @@ class ClassDefinition extends _identifier_1.Identifier {
98
100
  const name = token === null || token === void 0 ? void 0 : token.getStr();
99
101
  return name;
100
102
  }
103
+ checkMethodsFromSuperClasses(scope) {
104
+ var _a;
105
+ let sup = this.getSuperClass();
106
+ const names = new Set();
107
+ while (sup !== undefined) {
108
+ const cdef = scope.findClassDefinition(sup);
109
+ for (const m of ((_a = cdef === null || cdef === void 0 ? void 0 : cdef.getMethodDefinitions()) === null || _a === void 0 ? void 0 : _a.getAll()) || []) {
110
+ if (m.getVisibility() === visibility_1.Visibility.Private) {
111
+ continue;
112
+ }
113
+ else if (m.getName().toUpperCase() === "CONSTRUCTOR") {
114
+ continue;
115
+ }
116
+ names.add(m.getName().toUpperCase());
117
+ }
118
+ sup = cdef === null || cdef === void 0 ? void 0 : cdef.getSuperClass();
119
+ }
120
+ for (const m of this.getMethodDefinitions().getAll()) {
121
+ if (names.has(m.getName().toUpperCase()) && m.isRedefinition() === false) {
122
+ throw new Error(`Method ${m.getName().toUpperCase()} already declared in superclass`);
123
+ }
124
+ }
125
+ }
101
126
  findFriends(def, filename, scope) {
102
127
  var _a;
103
128
  const result = [];
@@ -9,10 +9,17 @@ class AbstractFile {
9
9
  return this.filename;
10
10
  }
11
11
  baseName() {
12
- const first = this.getFilename().split("\\");
13
- const base1 = first[first.length - 1];
14
- const base2 = base1.split("/");
15
- return base2[base2.length - 1];
12
+ let name = this.getFilename();
13
+ let index = name.lastIndexOf("\\");
14
+ if (index) {
15
+ index = index + 1;
16
+ }
17
+ name = name.substring(index);
18
+ index = name.lastIndexOf("/");
19
+ if (index) {
20
+ index = index + 1;
21
+ }
22
+ return name.substring(index);
16
23
  }
17
24
  getObjectType() {
18
25
  var _a;
@@ -39,8 +39,8 @@ const _current_scope_1 = require("./abap/5_syntax/_current_scope");
39
39
  Object.defineProperty(exports, "CurrentScope", { enumerable: true, get: function () { return _current_scope_1.CurrentScope; } });
40
40
  const Objects = require("./objects");
41
41
  exports.Objects = Objects;
42
- const _token_1 = require("./abap/1_lexer/tokens/_token");
43
- Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return _token_1.Token; } });
42
+ const abstract_token_1 = require("./abap/1_lexer/tokens/abstract_token");
43
+ Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return abstract_token_1.AbstractToken; } });
44
44
  const Statements = require("./abap/2_statements/statements");
45
45
  exports.Statements = Statements;
46
46
  const Expressions = require("./abap/2_statements/expressions");
@@ -59,7 +59,8 @@ const Tokens = require("./abap/1_lexer/tokens");
59
59
  exports.Tokens = Tokens;
60
60
  const position_1 = require("./position");
61
61
  Object.defineProperty(exports, "Position", { enumerable: true, get: function () { return position_1.Position; } });
62
- Object.defineProperty(exports, "VirtualPosition", { enumerable: true, get: function () { return position_1.VirtualPosition; } });
62
+ const virtual_position_1 = require("./virtual_position");
63
+ Object.defineProperty(exports, "VirtualPosition", { enumerable: true, get: function () { return virtual_position_1.VirtualPosition; } });
63
64
  const _abstract_file_1 = require("./files/_abstract_file");
64
65
  Object.defineProperty(exports, "AbstractFile", { enumerable: true, get: function () { return _abstract_file_1.AbstractFile; } });
65
66
  const pretty_printer_1 = require("./pretty_printer/pretty_printer");
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Issue = void 0;
4
4
  const position_1 = require("./position");
5
+ const virtual_position_1 = require("./virtual_position");
5
6
  const severity_1 = require("./severity");
6
7
  class Issue {
7
8
  //////////////////////////
@@ -87,7 +88,7 @@ class Issue {
87
88
  }
88
89
  constructor(data) {
89
90
  this.data = data;
90
- if (this.data.start instanceof position_1.VirtualPosition) {
91
+ if (this.data.start instanceof virtual_position_1.VirtualPosition) {
91
92
  // no quick fixes inside macros
92
93
  this.data.fix = undefined;
93
94
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SemanticHighlighting = void 0;
4
4
  const LServer = require("vscode-languageserver-types");
5
5
  const position_1 = require("../position");
6
+ const virtual_position_1 = require("../virtual_position");
6
7
  const tokens_1 = require("../abap/1_lexer/tokens");
7
8
  const nodes_1 = require("../abap/nodes");
8
9
  const Statements = require("../abap/2_statements/statements");
@@ -46,7 +47,7 @@ class SemanticHighlighting {
46
47
  const rangeEndPosition = new position_1.Position(range.end.line + 1, range.end.character + 1);
47
48
  const tokens = [];
48
49
  for (const s of file.getStatements()) {
49
- if (s.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
50
+ if (s.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
50
51
  continue;
51
52
  }
52
53
  else if (s.getFirstToken().getStart().isAfter(rangeEndPosition)) {
@@ -5,7 +5,7 @@ const vscode_languageserver_types_1 = require("vscode-languageserver-types");
5
5
  const __1 = require("../..");
6
6
  const syntax_1 = require("../../abap/5_syntax/syntax");
7
7
  const _scope_type_1 = require("../../abap/5_syntax/_scope_type");
8
- const position_1 = require("../../position");
8
+ const virtual_position_1 = require("../../virtual_position");
9
9
  const _abap_object_1 = require("../_abap_object");
10
10
  class RenamerHelper {
11
11
  constructor(reg) {
@@ -149,7 +149,7 @@ class RenamerHelper {
149
149
  for (const r of node.getData().references) {
150
150
  if (((_a = r.resolved) === null || _a === void 0 ? void 0 : _a.equals(identifier))
151
151
  && r.referenceType !== __1.ReferenceType.InferredType
152
- && !(r.position.getStart() instanceof position_1.VirtualPosition)) {
152
+ && !(r.position.getStart() instanceof virtual_position_1.VirtualPosition)) {
153
153
  ret.push(r.position);
154
154
  }
155
155
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VirtualPosition = exports.Position = void 0;
3
+ exports.Position = void 0;
4
4
  // first position is (1,1)
5
5
  class Position {
6
6
  constructor(row, col) {
@@ -27,20 +27,4 @@ class Position {
27
27
  }
28
28
  }
29
29
  exports.Position = Position;
30
- /** used for macro calls */
31
- class VirtualPosition extends Position {
32
- constructor(virtual, row, col) {
33
- super(virtual.getRow(), virtual.getCol());
34
- this.vrow = row;
35
- this.vcol = col;
36
- }
37
- equals(p) {
38
- if (!(p instanceof VirtualPosition)) {
39
- return false;
40
- }
41
- const casted = p;
42
- return super.equals(this) && this.vrow === casted.vrow && this.vcol === casted.vcol;
43
- }
44
- }
45
- exports.VirtualPosition = VirtualPosition;
46
30
  //# sourceMappingURL=position.js.map
@@ -4,7 +4,7 @@ exports.Indent = void 0;
4
4
  const Statements = require("../abap/2_statements/statements");
5
5
  const Expressions = require("../abap/2_statements/expressions");
6
6
  const _statement_1 = require("../abap/2_statements/statements/_statement");
7
- const position_1 = require("../position");
7
+ const virtual_position_1 = require("../virtual_position");
8
8
  // todo, will break if there is multiple statements per line?
9
9
  class Indent {
10
10
  constructor(options) {
@@ -16,7 +16,7 @@ class Indent {
16
16
  const expected = this.getExpectedIndents(original);
17
17
  const lines = modified.split("\n");
18
18
  for (const statement of statements) {
19
- if (statement.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
19
+ if (statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
20
20
  continue; // macro contents
21
21
  }
22
22
  const exp = expected.shift();
@@ -40,7 +40,7 @@ class Indent {
40
40
  let parentIsEvent = false;
41
41
  let previousStatement = undefined;
42
42
  for (const statement of file.getStatements()) {
43
- if (statement.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
43
+ if (statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
44
44
  continue; // skip macro contents
45
45
  }
46
46
  const type = statement.get();
@@ -4,7 +4,7 @@ exports.PrettyPrinter = void 0;
4
4
  const _statement_1 = require("../abap/2_statements/statements/_statement");
5
5
  const fix_keyword_case_1 = require("./fix_keyword_case");
6
6
  const indent_1 = require("./indent");
7
- const position_1 = require("../position");
7
+ const virtual_position_1 = require("../virtual_position");
8
8
  const indentation_1 = require("../rules/indentation");
9
9
  class PrettyPrinter {
10
10
  constructor(file, config) {
@@ -23,7 +23,7 @@ class PrettyPrinter {
23
23
  if (statement.get() instanceof _statement_1.Unknown
24
24
  || statement.get() instanceof _statement_1.MacroContent
25
25
  || statement.get() instanceof _statement_1.MacroCall
26
- || statement.getFirstToken().getStart() instanceof position_1.VirtualPosition
26
+ || statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition
27
27
  || statement.get() instanceof _statement_1.Comment) {
28
28
  continue;
29
29
  }
@@ -65,7 +65,7 @@ class Registry {
65
65
  }
66
66
  static abaplintVersion() {
67
67
  // magic, see build script "version.sh"
68
- return "2.102.66";
68
+ return "2.102.68";
69
69
  }
70
70
  getDDICReferences() {
71
71
  return this.ddicReferences;
@@ -12,6 +12,7 @@ const _statement_1 = require("../abap/2_statements/statements/_statement");
12
12
  const nodes_1 = require("../abap/nodes");
13
13
  const edit_helper_1 = require("../edit_helper");
14
14
  const position_1 = require("../position");
15
+ const virtual_position_1 = require("../virtual_position");
15
16
  const _abap_object_1 = require("../objects/_abap_object");
16
17
  const version_1 = require("../version");
17
18
  const registry_1 = require("../registry");
@@ -324,7 +325,7 @@ Make sure to test the downported code, it might not always be completely correct
324
325
  }
325
326
  /** applies one rule at a time, multiple iterations are required to transform complex statements */
326
327
  checkStatement(low, high, lowFile, highSyntax, highFile) {
327
- if (low.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
328
+ if (low.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
328
329
  return undefined;
329
330
  }
330
331
  // downport XSDBOOL() early, as it is valid 702 syntax
@@ -7,7 +7,7 @@ const _basic_rule_config_1 = require("./_basic_rule_config");
7
7
  const _irule_1 = require("./_irule");
8
8
  const edit_helper_1 = require("../edit_helper");
9
9
  const _statement_1 = require("../abap/2_statements/statements/_statement");
10
- const position_1 = require("../position");
10
+ const virtual_position_1 = require("../virtual_position");
11
11
  class ExpandMacrosConf extends _basic_rule_config_1.BasicRuleConfig {
12
12
  }
13
13
  exports.ExpandMacrosConf = ExpandMacrosConf;
@@ -51,7 +51,7 @@ _hello.`,
51
51
  let replace = "";
52
52
  for (let j = i + 1; j < statements.length; j++) {
53
53
  const sub = statements[j];
54
- if (sub.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
54
+ if (sub.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
55
55
  if (sub.get() instanceof _statement_1.MacroCall) {
56
56
  continue;
57
57
  }
@@ -11,6 +11,7 @@ const Expressions = require("../abap/2_statements/expressions");
11
11
  const _irule_1 = require("./_irule");
12
12
  const ddic_1 = require("../ddic");
13
13
  const position_1 = require("../position");
14
+ const virtual_position_1 = require("../virtual_position");
14
15
  const edit_helper_1 = require("../edit_helper");
15
16
  class IndentationConf extends _basic_rule_config_1.BasicRuleConfig {
16
17
  constructor() {
@@ -72,7 +73,7 @@ class Indentation extends _abap_rule_1.ABAPRule {
72
73
  const ret = [];
73
74
  for (const statement of file.getStatements()) {
74
75
  const position = statement.getFirstToken().getStart();
75
- if (position instanceof position_1.VirtualPosition) {
76
+ if (position instanceof virtual_position_1.VirtualPosition) {
76
77
  continue;
77
78
  }
78
79
  const indent = expected.shift();
@@ -12,7 +12,7 @@ const Statements = require("../abap/2_statements/statements");
12
12
  const Expressions = require("../abap/2_statements/expressions");
13
13
  const _irule_1 = require("./_irule");
14
14
  const ddic_1 = require("../ddic");
15
- const position_1 = require("../position");
15
+ const virtual_position_1 = require("../virtual_position");
16
16
  const edit_helper_1 = require("../edit_helper");
17
17
  var KeywordCaseStyle;
18
18
  (function (KeywordCaseStyle) {
@@ -48,7 +48,7 @@ class Skip {
48
48
  if (get instanceof _statement_1.Unknown
49
49
  || get instanceof _statement_1.MacroContent
50
50
  || get instanceof _statement_1.MacroCall
51
- || statement.getFirstToken().getStart() instanceof position_1.VirtualPosition
51
+ || statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition
52
52
  || get instanceof _statement_1.Comment) {
53
53
  return true;
54
54
  }
@@ -7,7 +7,7 @@ const _basic_rule_config_1 = require("./_basic_rule_config");
7
7
  const Expressions = require("../abap/2_statements/expressions");
8
8
  const _irule_1 = require("./_irule");
9
9
  const edit_helper_1 = require("../edit_helper");
10
- const position_1 = require("../position");
10
+ const virtual_position_1 = require("../virtual_position");
11
11
  class LineBreakMultipleParametersConf extends _basic_rule_config_1.BasicRuleConfig {
12
12
  constructor() {
13
13
  super(...arguments);
@@ -45,7 +45,7 @@ class LineBreakMultipleParameters extends _abap_rule_1.ABAPRule {
45
45
  }
46
46
  for (const s of file.getStatements()) {
47
47
  for (const e of s.findAllExpressions(Expressions.ParameterListS)) {
48
- if (s.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
48
+ if (s.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
49
49
  continue; // skip macro content
50
50
  }
51
51
  const parameters = e.findDirectExpressions(Expressions.ParameterS);
@@ -65,9 +65,15 @@ ENDIF.
65
65
  }
66
66
  if (cond[0].getChildren().length === 1) {
67
67
  const message = "Too many parentheses, simple";
68
- const fixText = sub.getChildren()[1].concatTokens();
69
- const fix = edit_helper_1.EditHelper.replaceRange(file, sub.getFirstToken().getStart(), sub.getLastToken().getEnd(), fixText);
70
- const issue = issue_1.Issue.atToken(file, sub.getFirstToken(), message, this.getMetadata().key, this.conf.severity, fix);
68
+ const children = sub.getChildren();
69
+ let startToken = sub.getFirstToken();
70
+ let fixText = sub.getChildren()[1].concatTokens();
71
+ if (startToken.getStr().toUpperCase() === "NOT") {
72
+ startToken = children[1].getFirstToken();
73
+ fixText = sub.getChildren()[2].concatTokens();
74
+ }
75
+ const fix = edit_helper_1.EditHelper.replaceRange(file, startToken.getStart(), sub.getLastToken().getEnd(), fixText);
76
+ const issue = issue_1.Issue.atToken(file, startToken, message, this.getMetadata().key, this.conf.severity, fix);
71
77
  issues.push(issue);
72
78
  }
73
79
  }
@@ -7,7 +7,7 @@ const _abap_rule_1 = require("./_abap_rule");
7
7
  const _basic_rule_config_1 = require("./_basic_rule_config");
8
8
  const edit_helper_1 = require("../edit_helper");
9
9
  const _irule_1 = require("./_irule");
10
- const position_1 = require("../position");
10
+ const virtual_position_1 = require("../virtual_position");
11
11
  class MaxOneStatementConf extends _basic_rule_config_1.BasicRuleConfig {
12
12
  }
13
13
  exports.MaxOneStatementConf = MaxOneStatementConf;
@@ -53,7 +53,7 @@ https://docs.abapopenchecks.org/checks/11/`,
53
53
  continue;
54
54
  }
55
55
  const pos = statement.getStart();
56
- if (pos instanceof position_1.VirtualPosition) {
56
+ if (pos instanceof virtual_position_1.VirtualPosition) {
57
57
  continue;
58
58
  }
59
59
  const row = pos.getRow();
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VirtualPosition = void 0;
4
+ const position_1 = require("./position");
5
+ /** used for macro calls */
6
+ class VirtualPosition extends position_1.Position {
7
+ constructor(virtual, row, col) {
8
+ super(virtual.getRow(), virtual.getCol());
9
+ this.vrow = row;
10
+ this.vcol = col;
11
+ }
12
+ equals(p) {
13
+ if (!(p instanceof VirtualPosition)) {
14
+ return false;
15
+ }
16
+ const casted = p;
17
+ return super.equals(this) && this.vrow === casted.vrow && this.vcol === casted.vcol;
18
+ }
19
+ }
20
+ exports.VirtualPosition = VirtualPosition;
21
+ //# sourceMappingURL=virtual_position.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.102.66",
3
+ "version": "2.102.68",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",