@abaplint/core 2.117.1 → 2.117.3

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.
@@ -1993,6 +1993,7 @@ declare type DynproField = {
1993
1993
  name: string;
1994
1994
  type: string;
1995
1995
  length: number;
1996
+ vislength: number;
1996
1997
  line: number;
1997
1998
  column: number;
1998
1999
  height: number;
@@ -20,6 +20,7 @@ function parseDynpros(parsed) {
20
20
  name: f.NAME,
21
21
  type: f.TYPE,
22
22
  length: parseNumber(f.LENGTH),
23
+ vislength: parseNumber(f.VISLENGTH),
23
24
  line: parseNumber(f.LINE),
24
25
  column: parseNumber(f.COLUMN),
25
26
  height: parseNumber(f.HEIGHT),
@@ -74,7 +74,7 @@ class Registry {
74
74
  }
75
75
  static abaplintVersion() {
76
76
  // magic, see build script "version.sh"
77
- return "2.117.1";
77
+ return "2.117.3";
78
78
  }
79
79
  getDDICReferences() {
80
80
  return this.ddicReferences;
@@ -55,15 +55,15 @@ class DynproChecks {
55
55
  const ret = [];
56
56
  for (let index = 0; index < dynpro.fields.length; index++) {
57
57
  const current = dynpro.fields[index];
58
- if (current.name === undefined) {
58
+ if (current.name === undefined || current.type === "FRAME") {
59
59
  continue;
60
60
  }
61
61
  for (let compare = index + 1; compare < dynpro.fields.length; compare++) {
62
62
  const other = dynpro.fields[compare];
63
- if (other.name === undefined || this.overlaps(current, other) === false) {
63
+ if (other.name === undefined || other.type === "FRAME" || this.overlaps(current, other) === false) {
64
64
  continue;
65
65
  }
66
- const message = `Screen ${dynpro.number}, fields ${current.name} and ${other.name} are overlapping`;
66
+ const message = `Screen ${dynpro.number}, ${current.type} ${current.name} and ${other.type} ${other.name} are overlapping`;
67
67
  ret.push(issue_1.Issue.atPosition(file, new position_1.Position(1, 1), message, this.getMetadata().key, this.getConfig().severity));
68
68
  }
69
69
  }
@@ -80,8 +80,8 @@ class DynproChecks {
80
80
  if (firstLastLine < second.line || secondLastLine < first.line) {
81
81
  return false;
82
82
  }
83
- const firstLastColumn = first.column + Math.max(first.length, 1) - 1;
84
- const secondLastColumn = second.column + Math.max(second.length, 1) - 1;
83
+ const firstLastColumn = first.column + Math.max(first.vislength || first.length, 1) - 1;
84
+ const secondLastColumn = second.column + Math.max(second.vislength || second.length, 1) - 1;
85
85
  return first.column <= secondLastColumn && second.column <= firstLastColumn;
86
86
  }
87
87
  }
@@ -22,7 +22,8 @@ class MSAGConsistency {
22
22
  key: "msag_consistency",
23
23
  title: "MSAG consistency check",
24
24
  shortDescription: `Checks the validity of messages in message classes`,
25
- extendedInformation: `Message numbers must be 3 digits, message text must not be empty, no message number duplicates`,
25
+ extendedInformation: `Message numbers must be 3 digits, message text must not be empty,\n` +
26
+ `message text must not exceed 73 characters, no message number duplicates`,
26
27
  };
27
28
  }
28
29
  getDescription(reason) {
@@ -58,6 +59,12 @@ class MSAGConsistency {
58
59
  const issue = issue_1.Issue.atPosition(obj.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity);
59
60
  issues.push(issue);
60
61
  }
62
+ if (message.getMessage().length > 73) {
63
+ const text = `Message text too long (max 73 characters): message ${message.getNumber()}`;
64
+ const position = new position_1.Position(1, 1);
65
+ const issue = issue_1.Issue.atPosition(obj.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity);
66
+ issues.push(issue);
67
+ }
61
68
  const num = message.getNumber();
62
69
  if (numbers.has(num)) {
63
70
  const text = "Duplicate message number " + num;
@@ -71,7 +78,7 @@ class MSAGConsistency {
71
78
  if (this.getConfig().numericParameters === true) {
72
79
  const placeholderCount = message.getPlaceholderCount();
73
80
  if (placeholderCount > 4) {
74
- const text = `More than 4 placeholders in mesasge ${message.getNumber()}`;
81
+ const text = `More than 4 placeholders in message ${message.getNumber()}`;
75
82
  const position = new position_1.Position(1, 1);
76
83
  const issue = issue_1.Issue.atPosition(obj.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity);
77
84
  issues.push(issue);
@@ -17,7 +17,7 @@ class SMIMConsistency {
17
17
  key: "smim_consistency",
18
18
  title: "SMIM consistency check",
19
19
  shortDescription: `SMIM consistency check`,
20
- extendedInformation: "Check folders exists",
20
+ extendedInformation: "Checks that the parent folder of each MIME object exists in the registry. The SAP system folder /SAP/PUBLIC is always allowed as a parent even if not present in the repository.",
21
21
  };
22
22
  }
23
23
  getConfig() {
@@ -36,7 +36,7 @@ class SMIMConsistency {
36
36
  return [];
37
37
  }
38
38
  const base = this.base(obj.getURL() || "");
39
- if (base !== "" && this.findFolder(base) === false) {
39
+ if (base !== "" && base !== "/SAP/PUBLIC" && this.findFolder(base) === false) {
40
40
  const message = `Parent folder "${base}" not found`;
41
41
  const position = new position_1.Position(1, 1);
42
42
  const issue = issue_1.Issue.atPosition(obj.getFiles()[0], position, message, this.getMetadata().key, this.conf.severity);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.117.1",
3
+ "version": "2.117.3",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",