@abaplint/core 2.91.29 → 2.91.32
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.
- package/build/abaplint.d.ts +6 -0
- package/build/src/abap/2_statements/expressions/assign_source.js +19 -0
- package/build/src/abap/2_statements/expressions/index.js +1 -0
- package/build/src/abap/2_statements/statements/assign.js +1 -6
- package/build/src/abap/5_syntax/basic_types.js +6 -3
- package/build/src/abap/5_syntax/statements/assign.js +4 -3
- package/build/src/abap/types/basic/character_type.js +3 -0
- package/build/src/registry.js +1 -1
- package/build/src/rules/downport.js +20 -8
- package/package.json +3 -3
package/build/abaplint.d.ts
CHANGED
|
@@ -209,6 +209,10 @@ declare class AssignmentServiceToAuthorizationGroup extends AbstractObject {
|
|
|
209
209
|
getDescription(): string | undefined;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
declare class AssignSource extends Expression {
|
|
213
|
+
getRunnable(): IStatementRunnable;
|
|
214
|
+
}
|
|
215
|
+
|
|
212
216
|
declare class AssociationName extends Expression {
|
|
213
217
|
getRunnable(): IStatementRunnable;
|
|
214
218
|
}
|
|
@@ -701,6 +705,7 @@ declare class ChapterOfBookStructure extends AbstractObject {
|
|
|
701
705
|
declare class CharacterType extends AbstractType {
|
|
702
706
|
private readonly length;
|
|
703
707
|
constructor(length: number, qualifiedName?: string);
|
|
708
|
+
cloneType(qualifiedName?: string): CharacterType;
|
|
704
709
|
getLength(): number;
|
|
705
710
|
toText(): string;
|
|
706
711
|
toABAP(): string;
|
|
@@ -1799,6 +1804,7 @@ declare namespace Expressions {
|
|
|
1799
1804
|
Cast,
|
|
1800
1805
|
ClassFinal,
|
|
1801
1806
|
ClassFriends,
|
|
1807
|
+
AssignSource,
|
|
1802
1808
|
ClassGlobal_2 as ClassGlobal,
|
|
1803
1809
|
ClassName,
|
|
1804
1810
|
Color,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AssignSource = void 0;
|
|
4
|
+
const combi_1 = require("../combi");
|
|
5
|
+
const tokens_1 = require("../../1_lexer/tokens");
|
|
6
|
+
const source_1 = require("./source");
|
|
7
|
+
const dynamic_1 = require("./dynamic");
|
|
8
|
+
const field_1 = require("./field");
|
|
9
|
+
class AssignSource extends combi_1.Expression {
|
|
10
|
+
getRunnable() {
|
|
11
|
+
const component = (0, combi_1.seq)("COMPONENT", source_1.Source, "OF STRUCTURE", source_1.Source);
|
|
12
|
+
const tableField = (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(source_1.Source, dynamic_1.Dynamic));
|
|
13
|
+
const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
|
|
14
|
+
const source = (0, combi_1.alt)((0, combi_1.seq)(source_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrow, dynamic_1.Dynamic))), component, tableField, (0, combi_1.seq)(dynamic_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(arrow, (0, combi_1.alt)(field_1.Field, dynamic_1.Dynamic)))));
|
|
15
|
+
return source;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.AssignSource = AssignSource;
|
|
19
|
+
//# sourceMappingURL=assign_source.js.map
|
|
@@ -29,6 +29,7 @@ __exportStar(require("./call_transformation_parameters"), exports);
|
|
|
29
29
|
__exportStar(require("./cast"), exports);
|
|
30
30
|
__exportStar(require("./class_final"), exports);
|
|
31
31
|
__exportStar(require("./class_friends"), exports);
|
|
32
|
+
__exportStar(require("./assign_source"), exports);
|
|
32
33
|
__exportStar(require("./class_global"), exports);
|
|
33
34
|
__exportStar(require("./class_name"), exports);
|
|
34
35
|
__exportStar(require("./color"), exports);
|
|
@@ -2,14 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Assign = void 0;
|
|
4
4
|
const combi_1 = require("../combi");
|
|
5
|
-
const tokens_1 = require("../../1_lexer/tokens");
|
|
6
5
|
const expressions_1 = require("../expressions");
|
|
7
6
|
class Assign {
|
|
8
7
|
getMatcher() {
|
|
9
|
-
const component = (0, combi_1.seq)("COMPONENT", expressions_1.Source, "OF STRUCTURE", expressions_1.Source);
|
|
10
|
-
const tableField = (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(expressions_1.Source, expressions_1.Dynamic));
|
|
11
|
-
const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
|
|
12
|
-
const source = (0, combi_1.alt)((0, combi_1.seq)(expressions_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrow, expressions_1.Dynamic))), component, tableField, (0, combi_1.seq)(expressions_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(arrow, (0, combi_1.alt)(expressions_1.Field, expressions_1.Dynamic)))));
|
|
13
8
|
const type = (0, combi_1.seq)("TYPE", (0, combi_1.alt)(expressions_1.Dynamic, expressions_1.TypeName));
|
|
14
9
|
const like = (0, combi_1.seq)("LIKE", (0, combi_1.alt)(expressions_1.Dynamic, expressions_1.Source));
|
|
15
10
|
const handle = (0, combi_1.seq)("TYPE HANDLE", expressions_1.Source);
|
|
@@ -17,7 +12,7 @@ class Assign {
|
|
|
17
12
|
const decimals = (0, combi_1.seq)("DECIMALS", expressions_1.Source);
|
|
18
13
|
const casting = (0, combi_1.seq)("CASTING", (0, combi_1.opt)((0, combi_1.alt)(like, handle, (0, combi_1.per)(type, decimals))));
|
|
19
14
|
const obsoleteType = (0, combi_1.seq)("TYPE", expressions_1.Source, (0, combi_1.optPrio)(decimals));
|
|
20
|
-
const ret = (0, combi_1.seq)("ASSIGN", (0, combi_1.opt)((0, combi_1.seq)(expressions_1.Target, "INCREMENT")),
|
|
15
|
+
const ret = (0, combi_1.seq)("ASSIGN", (0, combi_1.opt)((0, combi_1.seq)(expressions_1.Target, "INCREMENT")), expressions_1.AssignSource, "TO", expressions_1.FSTarget, (0, combi_1.opt)((0, combi_1.altPrio)(casting, obsoleteType)), (0, combi_1.opt)(range));
|
|
21
16
|
return ret;
|
|
22
17
|
}
|
|
23
18
|
}
|
|
@@ -164,17 +164,20 @@ class BasicTypes {
|
|
|
164
164
|
}
|
|
165
165
|
return type;
|
|
166
166
|
}
|
|
167
|
-
resolveTypeName(typeName, length, decimals,
|
|
167
|
+
resolveTypeName(typeName, length, decimals, qualifiedName) {
|
|
168
168
|
var _a;
|
|
169
169
|
if (typeName === undefined) {
|
|
170
170
|
return undefined;
|
|
171
171
|
}
|
|
172
|
-
|
|
172
|
+
let chain = this.resolveTypeChain(typeName);
|
|
173
173
|
if (chain) {
|
|
174
|
+
if (chain instanceof basic_1.CharacterType && qualifiedName) {
|
|
175
|
+
chain = chain.cloneType(qualifiedName);
|
|
176
|
+
}
|
|
174
177
|
return chain;
|
|
175
178
|
}
|
|
176
179
|
const chainText = typeName.concatTokens().toUpperCase();
|
|
177
|
-
const f = this.scope.getDDIC().lookupBuiltinType(chainText, length, decimals,
|
|
180
|
+
const f = this.scope.getDDIC().lookupBuiltinType(chainText, length, decimals, qualifiedName);
|
|
178
181
|
if (f !== undefined) {
|
|
179
182
|
return f;
|
|
180
183
|
}
|
|
@@ -8,13 +8,14 @@ const dynamic_1 = require("../expressions/dynamic");
|
|
|
8
8
|
const basic_1 = require("../../types/basic");
|
|
9
9
|
class Assign {
|
|
10
10
|
runSyntax(node, scope, filename) {
|
|
11
|
-
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const sources = node.findAllExpressions(Expressions.Source);
|
|
12
13
|
const firstSource = sources[0];
|
|
13
14
|
let sourceType = new source_1.Source().runSyntax(firstSource, scope, filename);
|
|
14
|
-
if (sourceType === undefined || node.findDirectExpression(Expressions.Dynamic)) {
|
|
15
|
+
if (sourceType === undefined || ((_a = node.findDirectExpression(Expressions.AssignSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.Dynamic))) {
|
|
15
16
|
sourceType = new basic_1.VoidType("DynamicAssign");
|
|
16
17
|
}
|
|
17
|
-
for (const d of node.findAllExpressions(Expressions.Dynamic)) {
|
|
18
|
+
for (const d of ((_b = node.findDirectExpression(Expressions.AssignSource)) === null || _b === void 0 ? void 0 : _b.findAllExpressions(Expressions.Dynamic)) || []) {
|
|
18
19
|
new dynamic_1.Dynamic().runSyntax(d, scope, filename);
|
|
19
20
|
}
|
|
20
21
|
const target = node.findDirectExpression(Expressions.FSTarget);
|
package/build/src/registry.js
CHANGED
|
@@ -969,12 +969,14 @@ LOOP AT ${groupTargetName}tab ${groupTarget}.`;
|
|
|
969
969
|
return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Downport, REF", this.getMetadata().key, this.conf.severity, fix);
|
|
970
970
|
}
|
|
971
971
|
assignWithTable(high, lowFile) {
|
|
972
|
-
var _a;
|
|
973
|
-
if (!(high.get() instanceof Statements.Assign)
|
|
974
|
-
|
|
972
|
+
var _a, _b;
|
|
973
|
+
if (!(high.get() instanceof Statements.Assign)) {
|
|
974
|
+
return undefined;
|
|
975
|
+
}
|
|
976
|
+
else if (high.getChildren().length !== 5) {
|
|
975
977
|
return undefined;
|
|
976
978
|
}
|
|
977
|
-
const fieldChain = (_a = high.findDirectExpression(Expressions.
|
|
979
|
+
const fieldChain = (_b = (_a = high.findDirectExpression(Expressions.AssignSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.Source)) === null || _b === void 0 ? void 0 : _b.findDirectExpression(Expressions.FieldChain);
|
|
978
980
|
if ((fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren().length) !== 2) {
|
|
979
981
|
return undefined;
|
|
980
982
|
}
|
|
@@ -983,12 +985,22 @@ LOOP AT ${groupTargetName}tab ${groupTarget}.`;
|
|
|
983
985
|
|| !(tableExpression instanceof nodes_1.ExpressionNode)) {
|
|
984
986
|
return undefined;
|
|
985
987
|
}
|
|
986
|
-
|
|
987
|
-
if (
|
|
988
|
-
|
|
988
|
+
let condition = "";
|
|
989
|
+
if (tableExpression.getChildren().length === 3) {
|
|
990
|
+
const index = tableExpression.findDirectExpression(Expressions.Source);
|
|
991
|
+
if (index === undefined) {
|
|
992
|
+
return undefined;
|
|
993
|
+
}
|
|
994
|
+
condition = `INDEX ${index.concatTokens()}`;
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
let concat = tableExpression.concatTokens();
|
|
998
|
+
concat = concat.substring(2);
|
|
999
|
+
concat = concat.substring(0, concat.length - 2);
|
|
1000
|
+
condition = `WITH KEY ${concat}`;
|
|
989
1001
|
}
|
|
990
1002
|
const fsTarget = high.findDirectExpression(Expressions.FSTarget);
|
|
991
|
-
const code = `READ TABLE ${fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren()[0].concatTokens()}
|
|
1003
|
+
const code = `READ TABLE ${fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren()[0].concatTokens()} ${condition} ASSIGNING ${fsTarget === null || fsTarget === void 0 ? void 0 : fsTarget.concatTokens()}.`;
|
|
992
1004
|
const fix = edit_helper_1.EditHelper.replaceRange(lowFile, high.getFirstToken().getStart(), high.getLastToken().getEnd(), code);
|
|
993
1005
|
return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Downport, ASSIGN table expr", this.getMetadata().key, this.conf.severity, fix);
|
|
994
1006
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/core",
|
|
3
|
-
"version": "2.91.
|
|
3
|
+
"version": "2.91.32",
|
|
4
4
|
"description": "abaplint - Core API",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/abaplint.d.ts",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"@microsoft/api-extractor": "^7.29.2",
|
|
49
49
|
"@types/chai": "^4.3.3",
|
|
50
50
|
"@types/mocha": "^9.1.1",
|
|
51
|
-
"@types/node": "^18.7.
|
|
51
|
+
"@types/node": "^18.7.3",
|
|
52
52
|
"chai": "^4.3.6",
|
|
53
|
-
"eslint": "^8.
|
|
53
|
+
"eslint": "^8.22.0",
|
|
54
54
|
"mocha": "^10.0.0",
|
|
55
55
|
"c8": "^7.12.0",
|
|
56
56
|
"source-map-support": "^0.5.21",
|