@abaplint/core 2.120.8 → 2.120.10
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 +12 -0
- package/build/src/abap/2_statements/expressions/compare.js +1 -1
- package/build/src/abap/2_statements/expressions/string_template_formatting.js +1 -1
- package/build/src/abap/2_statements/statements/rollback_entities.js +1 -1
- package/build/src/abap/4_file_information/abap_file_information_parser.js +2 -1
- package/build/src/abap/5_syntax/_builtin.js +1 -1
- package/build/src/abap/5_syntax/_type_utils.js +14 -1
- package/build/src/abap/5_syntax/expressions/method_param.js +3 -0
- package/build/src/abap/5_syntax/statements/move.js +4 -0
- package/build/src/abap/5_syntax/statements/ranges.js +5 -0
- package/build/src/abap/5_syntax/structures/type_mesh.js +101 -0
- package/build/src/abap/5_syntax/syntax.js +8 -0
- package/build/src/abap/types/basic/index.js +1 -0
- package/build/src/abap/types/basic/pgeneric_type.js +30 -0
- package/build/src/abap/types/class_attributes.js +8 -0
- package/build/src/objects/_abap_object.js +6 -4
- package/build/src/objects/domain.js +4 -2
- package/build/src/objects/rename/rename_icf_service.js +4 -3
- package/build/src/objects/web_mime.js +2 -1
- package/build/src/registry.js +1 -1
- package/build/src/rules/7bit_ascii.js +1 -1
- package/build/src/rules/avoid_use.js +1 -1
- package/build/src/rules/cds_comment_style.js +1 -1
- package/build/src/rules/chain_mainly_declarations.js +1 -1
- package/build/src/rules/clear_exporting_parameters.js +1 -1
- package/build/src/rules/constructor_visibility_public.js +1 -1
- package/build/src/rules/exit_or_check.js +2 -2
- package/build/src/rules/expand_macros.js +1 -1
- package/build/src/rules/fm_global_parameters_obsolete.js +1 -1
- package/build/src/rules/form_tables_obsolete.js +1 -1
- package/build/src/rules/implicit_start_of_selection.js +1 -1
- package/build/src/rules/method_overwrites_builtin.js +1 -1
- package/build/src/rules/mix_returning.js +1 -1
- package/build/src/rules/no_macros.js +1 -1
- package/build/src/rules/obsolete_statement.js +18 -18
- package/build/src/rules/pragma_style.js +1 -1
- package/build/src/rules/rfc_error_handling.js +1 -1
- package/build/src/rules/strict_sql.js +2 -2
- package/build/src/rules/sy_modification.js +1 -1
- package/build/src/rules/tables_declared_locally.js +1 -1
- package/package.json +6 -6
package/build/abaplint.d.ts
CHANGED
|
@@ -534,6 +534,7 @@ declare namespace BasicTypes {
|
|
|
534
534
|
NumericType,
|
|
535
535
|
ObjectReferenceType,
|
|
536
536
|
PackedType,
|
|
537
|
+
PGenericType,
|
|
537
538
|
SimpleType,
|
|
538
539
|
StringType,
|
|
539
540
|
IStructureComponent,
|
|
@@ -5676,6 +5677,17 @@ declare class PersonalizationObject extends AbstractObject {
|
|
|
5676
5677
|
getDescription(): string | undefined;
|
|
5677
5678
|
}
|
|
5678
5679
|
|
|
5680
|
+
declare class PGenericType extends AbstractType {
|
|
5681
|
+
private static readonly singleton;
|
|
5682
|
+
static get(): PGenericType;
|
|
5683
|
+
private constructor();
|
|
5684
|
+
toText(): string;
|
|
5685
|
+
isGeneric(): boolean;
|
|
5686
|
+
toABAP(): string;
|
|
5687
|
+
containsVoid(): boolean;
|
|
5688
|
+
toCDS(): string;
|
|
5689
|
+
}
|
|
5690
|
+
|
|
5679
5691
|
declare class Plus extends Token {
|
|
5680
5692
|
static railroad(): string;
|
|
5681
5693
|
}
|
|
@@ -12,7 +12,7 @@ class Compare extends combi_1.Expression {
|
|
|
12
12
|
const inn = (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), "IN", (0, combi_1.altPrio)(_1.Source, list));
|
|
13
13
|
const sopt = (0, combi_1.seq)("IS", (0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)("SUPPLIED", "BOUND", (0, combi_1.ver)(version_1.Release.v750, (0, combi_1.seq)("INSTANCE OF", _1.ClassName), { also: combi_1.AlsoIn.OpenABAP }), "REQUESTED", "INITIAL"));
|
|
14
14
|
const between = (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), "BETWEEN", _1.Source, "AND", _1.Source);
|
|
15
|
-
// https://help.sap.com/doc/
|
|
15
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-740_sp08-expressions.html
|
|
16
16
|
// but also seems to work in v740sp05, blah
|
|
17
17
|
const predicate = (0, combi_1.ver)(version_1.Release.v740sp08, _1.MethodCallChain, { also: combi_1.AlsoIn.OpenABAP });
|
|
18
18
|
const rett = (0, combi_1.seq)(_1.Source, (0, combi_1.altPrio)((0, combi_1.seq)(_1.CompareOperator, _1.Source), inn, between, sopt));
|
|
@@ -7,7 +7,7 @@ const version_1 = require("../../../version");
|
|
|
7
7
|
const dynamic_1 = require("./dynamic");
|
|
8
8
|
class StringTemplateFormatting extends combi_1.Expression {
|
|
9
9
|
getRunnable() {
|
|
10
|
-
// https://help.sap.com/doc/
|
|
10
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapcompute_string_format_options.html
|
|
11
11
|
const alphaOptions = (0, combi_1.altPrio)("OUT", "RAW", "IN", _1.Source);
|
|
12
12
|
const alignOptions = (0, combi_1.altPrio)("LEFT", "RIGHT", "CENTER", _1.Source, dynamic_1.Dynamic);
|
|
13
13
|
const dateTimeOptions = (0, combi_1.altPrio)("RAW", "ISO", "USER", "ENVIRONMENT", _1.Source, dynamic_1.Dynamic);
|
|
@@ -6,7 +6,7 @@ const version_1 = require("../../../version");
|
|
|
6
6
|
class RollbackEntities {
|
|
7
7
|
getMatcher() {
|
|
8
8
|
const s = "ROLLBACK ENTITIES";
|
|
9
|
-
return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s));
|
|
9
|
+
return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s, { also: combi_1.AlsoIn.OpenABAP }));
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
exports.RollbackEntities = RollbackEntities;
|
|
@@ -372,7 +372,7 @@ class BuiltIn {
|
|
|
372
372
|
const sy = new _typed_identifier_1.TypedIdentifier(id1, BuiltIn.filename, type, ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
373
373
|
const id2 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "syst");
|
|
374
374
|
const syst = new _typed_identifier_1.TypedIdentifier(id2, BuiltIn.filename, type, ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
375
|
-
// https://help.sap.com/doc/
|
|
375
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-610-system.html
|
|
376
376
|
const id3 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "sy-repid");
|
|
377
377
|
const syrepid = new _typed_identifier_1.TypedIdentifier(id3, BuiltIn.filename, new basic_1.CharacterType(40, { qualifiedName: "sy-repid" }), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
378
378
|
const id4 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "syst-repid");
|
|
@@ -115,6 +115,7 @@ class TypeUtils {
|
|
|
115
115
|
|| type instanceof basic_1.DataType
|
|
116
116
|
|| type instanceof basic_1.CLikeType
|
|
117
117
|
|| type instanceof basic_1.PackedType
|
|
118
|
+
|| type instanceof basic_1.PGenericType
|
|
118
119
|
|| type instanceof basic_1.TimeType
|
|
119
120
|
|| type instanceof enum_type_1.EnumType) {
|
|
120
121
|
return true;
|
|
@@ -330,6 +331,14 @@ class TypeUtils {
|
|
|
330
331
|
if (calculated) {
|
|
331
332
|
return this.isAssignable(source, target);
|
|
332
333
|
}
|
|
334
|
+
if (target instanceof basic_1.PGenericType) {
|
|
335
|
+
return source instanceof basic_1.PackedType
|
|
336
|
+
|| source instanceof basic_1.PGenericType
|
|
337
|
+
|| source instanceof basic_1.VoidType
|
|
338
|
+
|| source instanceof basic_1.AnyType
|
|
339
|
+
|| source instanceof basic_1.DataType
|
|
340
|
+
|| source instanceof basic_1.UnknownType;
|
|
341
|
+
}
|
|
333
342
|
if (source instanceof basic_1.CharacterType) {
|
|
334
343
|
if (target instanceof basic_1.CharacterType) {
|
|
335
344
|
if (((_a = source.getAbstractTypeData()) === null || _a === void 0 ? void 0 : _a.derivedFromConstant) === true) {
|
|
@@ -434,7 +443,7 @@ class TypeUtils {
|
|
|
434
443
|
}
|
|
435
444
|
}
|
|
436
445
|
else if (source instanceof basic_1.IntegerType) {
|
|
437
|
-
if (target instanceof basic_1.StringType) {
|
|
446
|
+
if (target instanceof basic_1.StringType || target instanceof basic_1.DateType) {
|
|
438
447
|
return false;
|
|
439
448
|
}
|
|
440
449
|
else if (target instanceof basic_1.Integer8Type || target instanceof basic_1.PackedType) {
|
|
@@ -444,6 +453,10 @@ class TypeUtils {
|
|
|
444
453
|
return false;
|
|
445
454
|
}
|
|
446
455
|
}
|
|
456
|
+
else if (source instanceof basic_1.PackedType && target instanceof basic_1.PackedType) {
|
|
457
|
+
return source.getLength() === target.getLength()
|
|
458
|
+
&& source.getDecimals() === target.getDecimals();
|
|
459
|
+
}
|
|
447
460
|
else if (source instanceof basic_1.FloatType) {
|
|
448
461
|
if (target instanceof basic_1.IntegerType) {
|
|
449
462
|
return false;
|
|
@@ -67,6 +67,9 @@ class MethodParam {
|
|
|
67
67
|
else if (concat === "TYPE X" || concat.startsWith("TYPE X ")) {
|
|
68
68
|
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, basic_1.XGenericType.get(), meta);
|
|
69
69
|
}
|
|
70
|
+
else if (concat === "TYPE P" || concat.startsWith("TYPE P ")) {
|
|
71
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, basic_1.PGenericType.get(), meta);
|
|
72
|
+
}
|
|
70
73
|
const found = new basic_types_1.BasicTypes(input).parseType(type);
|
|
71
74
|
if (found) {
|
|
72
75
|
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
|
|
@@ -41,6 +41,7 @@ const inline_data_1 = require("../expressions/inline_data");
|
|
|
41
41
|
const _type_utils_1 = require("../_type_utils");
|
|
42
42
|
const _syntax_input_1 = require("../_syntax_input");
|
|
43
43
|
const dereference_1 = require("../expressions/dereference");
|
|
44
|
+
const basic_1 = require("../../types/basic");
|
|
44
45
|
class Move {
|
|
45
46
|
runSyntax(node, input) {
|
|
46
47
|
const targets = node.findDirectExpressions(Expressions.Target);
|
|
@@ -76,6 +77,9 @@ class Move {
|
|
|
76
77
|
sourceType = dereference_1.Dereference.runSyntax(node, sourceType, input);
|
|
77
78
|
}
|
|
78
79
|
if (inline) {
|
|
80
|
+
if (sourceType instanceof basic_1.PackedType && (source === null || source === void 0 ? void 0 : source.findDirectExpression(Expressions.ArithOperator))) {
|
|
81
|
+
sourceType = new basic_1.PackedType(8, 0);
|
|
82
|
+
}
|
|
79
83
|
inline_data_1.InlineData.runSyntax(inline, input, sourceType);
|
|
80
84
|
targetType = sourceType;
|
|
81
85
|
}
|
|
@@ -38,10 +38,15 @@ const Expressions = __importStar(require("../../2_statements/expressions"));
|
|
|
38
38
|
const _typed_identifier_1 = require("../../types/_typed_identifier");
|
|
39
39
|
const basic_1 = require("../../types/basic");
|
|
40
40
|
const basic_types_1 = require("../basic_types");
|
|
41
|
+
const _syntax_input_1 = require("../_syntax_input");
|
|
41
42
|
const assert_error_1 = require("../assert_error");
|
|
42
43
|
class Ranges {
|
|
43
44
|
runSyntax(node, input) {
|
|
44
45
|
var _a;
|
|
46
|
+
if (input.scope.isAnyOO()) {
|
|
47
|
+
const message = "RANGES is not allowed within classes";
|
|
48
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
49
|
+
}
|
|
45
50
|
const nameToken = (_a = node.findFirstExpression(Expressions.DefinitionName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
46
51
|
const typeExpression = node.findFirstExpression(Expressions.SimpleFieldChain2);
|
|
47
52
|
if (typeExpression === undefined) {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TypeMesh = void 0;
|
|
37
|
+
const Expressions = __importStar(require("../../2_statements/expressions"));
|
|
38
|
+
const Statements = __importStar(require("../../2_statements/statements"));
|
|
39
|
+
const nodes_1 = require("../../nodes");
|
|
40
|
+
const _typed_identifier_1 = require("../../types/_typed_identifier");
|
|
41
|
+
const Basic = __importStar(require("../../types/basic"));
|
|
42
|
+
const basic_types_1 = require("../basic_types");
|
|
43
|
+
const type_1 = require("../statements/type");
|
|
44
|
+
const _scope_type_1 = require("../_scope_type");
|
|
45
|
+
class TypeMesh {
|
|
46
|
+
runSyntax(node, input) {
|
|
47
|
+
var _a;
|
|
48
|
+
const begin = node.findDirectStatement(Statements.TypeMeshBegin);
|
|
49
|
+
if (begin === undefined) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const name = (_a = begin.findFirstExpression(Expressions.NamespaceSimpleName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
53
|
+
if (name === undefined) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const components = [];
|
|
57
|
+
for (const c of node.getChildren()) {
|
|
58
|
+
if (!(c instanceof nodes_1.StatementNode)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const ctyp = c.get();
|
|
62
|
+
if (ctyp instanceof Statements.Type) {
|
|
63
|
+
const found = new type_1.Type().runSyntax(c, input, name.getStr() + "-");
|
|
64
|
+
if (found) {
|
|
65
|
+
components.push({ name: found.getName(), type: found.getType() });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else if (ctyp instanceof Statements.TypeMesh) {
|
|
69
|
+
const found = this.runMeshNode(c, input);
|
|
70
|
+
if (found) {
|
|
71
|
+
components.push({ name: found.getName(), type: found.getType() });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
let qualifiedName = name.getStr();
|
|
76
|
+
if (input.scope.getType() === _scope_type_1.ScopeType.ClassDefinition
|
|
77
|
+
|| input.scope.getType() === _scope_type_1.ScopeType.Interface) {
|
|
78
|
+
qualifiedName = input.scope.getName() + "=>" + qualifiedName;
|
|
79
|
+
}
|
|
80
|
+
return new _typed_identifier_1.TypedIdentifier(name, input.filename, new Basic.StructureType(components, qualifiedName));
|
|
81
|
+
}
|
|
82
|
+
////////////////////
|
|
83
|
+
runMeshNode(node, input) {
|
|
84
|
+
var _a;
|
|
85
|
+
const nameToken = (_a = node.findFirstExpression(Expressions.NamespaceSimpleName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
86
|
+
if (nameToken === undefined) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const typeName = node.findFirstExpression(Expressions.TypeName);
|
|
90
|
+
let type = new basic_types_1.BasicTypes(input).resolveTypeName(typeName);
|
|
91
|
+
if (type === undefined) {
|
|
92
|
+
type = new Basic.UnknownType("Mesh node, unknown type " + (typeName === null || typeName === void 0 ? void 0 : typeName.concatTokens()));
|
|
93
|
+
}
|
|
94
|
+
else if (node.concatTokens().toUpperCase().includes(" TYPE REF TO ")) {
|
|
95
|
+
type = new Basic.DataReference(type);
|
|
96
|
+
}
|
|
97
|
+
return new _typed_identifier_1.TypedIdentifier(nameToken, input.filename, type);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.TypeMesh = TypeMesh;
|
|
101
|
+
//# sourceMappingURL=type_mesh.js.map
|
|
@@ -46,6 +46,7 @@ const objects_1 = require("../../objects");
|
|
|
46
46
|
const position_1 = require("../../position");
|
|
47
47
|
const data_1 = require("./structures/data");
|
|
48
48
|
const type_enum_1 = require("./structures/type_enum");
|
|
49
|
+
const type_mesh_1 = require("./structures/type_mesh");
|
|
49
50
|
const types_1 = require("./structures/types");
|
|
50
51
|
const statics_1 = require("./structures/statics");
|
|
51
52
|
const constants_1 = require("./structures/constants");
|
|
@@ -480,6 +481,13 @@ class SyntaxLogic {
|
|
|
480
481
|
this.scope.addIdentifier(new statics_1.Statics().runSyntax(node, input));
|
|
481
482
|
return true;
|
|
482
483
|
}
|
|
484
|
+
else if (stru instanceof Structures.TypeMesh) {
|
|
485
|
+
const found = new type_mesh_1.TypeMesh().runSyntax(node, input);
|
|
486
|
+
if (found) {
|
|
487
|
+
this.scope.addType(found);
|
|
488
|
+
}
|
|
489
|
+
return true;
|
|
490
|
+
}
|
|
483
491
|
else if (stru instanceof Structures.TypeEnum) {
|
|
484
492
|
const values = new type_enum_1.TypeEnum().runSyntax(node, input).values;
|
|
485
493
|
this.scope.addList(values);
|
|
@@ -36,6 +36,7 @@ __exportStar(require("./numeric_generic_type"), exports);
|
|
|
36
36
|
__exportStar(require("./numeric_type"), exports);
|
|
37
37
|
__exportStar(require("./object_reference_type"), exports);
|
|
38
38
|
__exportStar(require("./packed_type"), exports);
|
|
39
|
+
__exportStar(require("./pgeneric_type"), exports);
|
|
39
40
|
__exportStar(require("./simple_type"), exports);
|
|
40
41
|
__exportStar(require("./string_type"), exports);
|
|
41
42
|
__exportStar(require("./structure_type"), exports);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PGenericType = void 0;
|
|
4
|
+
const _abstract_type_1 = require("./_abstract_type");
|
|
5
|
+
class PGenericType extends _abstract_type_1.AbstractType {
|
|
6
|
+
static get() {
|
|
7
|
+
return this.singleton;
|
|
8
|
+
}
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
}
|
|
12
|
+
toText() {
|
|
13
|
+
return "```p```";
|
|
14
|
+
}
|
|
15
|
+
isGeneric() {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
toABAP() {
|
|
19
|
+
throw new Error("p, generic");
|
|
20
|
+
}
|
|
21
|
+
containsVoid() {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
toCDS() {
|
|
25
|
+
return "abap.TODO_PGENERIC";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.PGenericType = PGenericType;
|
|
29
|
+
PGenericType.singleton = new PGenericType();
|
|
30
|
+
//# sourceMappingURL=pgeneric_type.js.map
|
|
@@ -47,6 +47,7 @@ const data_1 = require("../5_syntax/statements/data");
|
|
|
47
47
|
const constant_1 = require("../5_syntax/statements/constant");
|
|
48
48
|
const data_2 = require("../5_syntax/structures/data");
|
|
49
49
|
const type_enum_1 = require("../5_syntax/structures/type_enum");
|
|
50
|
+
const type_mesh_1 = require("../5_syntax/structures/type_mesh");
|
|
50
51
|
const constants_1 = require("../5_syntax/structures/constants");
|
|
51
52
|
const type_definitions_1 = require("./type_definitions");
|
|
52
53
|
const types_1 = require("../5_syntax/structures/types");
|
|
@@ -207,6 +208,13 @@ class Attributes {
|
|
|
207
208
|
// scope.addIdentifier(attr);
|
|
208
209
|
}
|
|
209
210
|
}
|
|
211
|
+
else if (ctyp instanceof Structures.TypeMesh) {
|
|
212
|
+
const res = new type_mesh_1.TypeMesh().runSyntax(c, input);
|
|
213
|
+
if (res) {
|
|
214
|
+
input.scope.addType(res);
|
|
215
|
+
this.tlist.push({ type: res, visibility });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
210
218
|
else if (ctyp instanceof Structures.Types) {
|
|
211
219
|
const res = new types_1.Types().runSyntax(c, input);
|
|
212
220
|
if (res) {
|
|
@@ -98,7 +98,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
98
98
|
return this.textsTranslations;
|
|
99
99
|
}
|
|
100
100
|
findTexts(parsed) {
|
|
101
|
-
var _a, _b, _c, _d, _e, _f
|
|
101
|
+
var _a, _b, _c, _d, _e, _f;
|
|
102
|
+
var _g;
|
|
102
103
|
this.texts = {};
|
|
103
104
|
if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item) === undefined) {
|
|
104
105
|
return;
|
|
@@ -111,7 +112,7 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
111
112
|
if (id !== "R" && t.KEY === undefined) {
|
|
112
113
|
continue;
|
|
113
114
|
}
|
|
114
|
-
const key = (
|
|
115
|
+
const key = (_f = ((_g = t.KEY) !== null && _g !== void 0 ? _g : t.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
|
|
115
116
|
if (key === undefined) {
|
|
116
117
|
continue;
|
|
117
118
|
}
|
|
@@ -122,7 +123,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
findTextsTranslations(parsed) {
|
|
125
|
-
var _a, _b, _c, _d, _e, _f
|
|
126
|
+
var _a, _b, _c, _d, _e, _f;
|
|
127
|
+
var _g;
|
|
126
128
|
this.textsTranslations = [];
|
|
127
129
|
const values = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.I18N_TPOOL) === null || _d === void 0 ? void 0 : _d.item;
|
|
128
130
|
if (values === undefined) {
|
|
@@ -131,7 +133,7 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
131
133
|
for (const langItem of (0, xml_utils_1.xmlToArray)(values)) {
|
|
132
134
|
const textElements = {};
|
|
133
135
|
for (const item of (0, xml_utils_1.xmlToArray)((_e = langItem.TEXTPOOL) === null || _e === void 0 ? void 0 : _e.item)) {
|
|
134
|
-
const key = (
|
|
136
|
+
const key = (_f = ((_g = item.KEY) !== null && _g !== void 0 ? _g : item.ID)) === null || _f === void 0 ? void 0 : _f.toUpperCase();
|
|
135
137
|
if (key !== undefined) {
|
|
136
138
|
textElements[key] = { entry: (0, xml_utils_1.unescape)(item.ENTRY), maxLength: parseInt(item.LENGTH, 10) };
|
|
137
139
|
}
|
|
@@ -126,11 +126,13 @@ class Domain extends _abstract_object_1.AbstractObject {
|
|
|
126
126
|
return { updated: true, runtime: end - start };
|
|
127
127
|
}
|
|
128
128
|
getFixedValues() {
|
|
129
|
-
var _a
|
|
129
|
+
var _a;
|
|
130
|
+
var _b;
|
|
130
131
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : [];
|
|
131
132
|
}
|
|
132
133
|
getFixedValuesTranslations() {
|
|
133
|
-
var _a
|
|
134
|
+
var _a;
|
|
135
|
+
var _b;
|
|
134
136
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.valuesTranslations) !== null && _b !== void 0 ? _b : [];
|
|
135
137
|
}
|
|
136
138
|
}
|
|
@@ -8,7 +8,8 @@ class RenameICFService {
|
|
|
8
8
|
this.reg = reg;
|
|
9
9
|
}
|
|
10
10
|
buildEdits(obj, oldName, newName) {
|
|
11
|
-
var _a, _b
|
|
11
|
+
var _a, _b;
|
|
12
|
+
var _c, _d;
|
|
12
13
|
if (!(obj instanceof __1.ICFService)) {
|
|
13
14
|
throw new Error("RenameICFService, not a ICF Service");
|
|
14
15
|
}
|
|
@@ -33,8 +34,8 @@ class RenameICFService {
|
|
|
33
34
|
}
|
|
34
35
|
return newName;
|
|
35
36
|
})();
|
|
36
|
-
const cleanOldName = (
|
|
37
|
-
const cleanNewName = (_d = (
|
|
37
|
+
const cleanOldName = (_c = (_a = oldName.match(/^[^ ]+/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _c !== void 0 ? _c : oldName;
|
|
38
|
+
const cleanNewName = (_d = (_b = newName.match(/^[^ ]+/)) === null || _b === void 0 ? void 0 : _b[0]) !== null && _d !== void 0 ? _d : newName;
|
|
38
39
|
let changes = [];
|
|
39
40
|
const helper = new renamer_helper_1.RenamerHelper(this.reg);
|
|
40
41
|
changes = changes.concat(helper.buildURLFileEdits(obj, cleanOldName, cleanNewName));
|
|
@@ -25,7 +25,8 @@ class WebMIME extends _abstract_object_1.AbstractObject {
|
|
|
25
25
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.params[name.toLowerCase()];
|
|
26
26
|
}
|
|
27
27
|
getParameters() {
|
|
28
|
-
var _a
|
|
28
|
+
var _a;
|
|
29
|
+
var _b;
|
|
29
30
|
this.parse();
|
|
30
31
|
return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
|
|
31
32
|
}
|
package/build/src/registry.js
CHANGED
|
@@ -19,7 +19,7 @@ class SevenBitAscii {
|
|
|
19
19
|
shortDescription: `Only allow characters from the 7bit ASCII set.`,
|
|
20
20
|
extendedInformation: `https://docs.abapopenchecks.org/checks/05/
|
|
21
21
|
|
|
22
|
-
https://help.sap.com/doc/
|
|
22
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abencharacter_set_guidl.html
|
|
23
23
|
|
|
24
24
|
Checkes files with extensions ".abap" and ".asddls"`,
|
|
25
25
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
@@ -79,7 +79,7 @@ class AvoidUse extends _abap_rule_1.ABAPRule {
|
|
|
79
79
|
shortDescription: `Detects usage of certain statements.`,
|
|
80
80
|
extendedInformation: `DEFAULT KEY: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-default-key
|
|
81
81
|
|
|
82
|
-
Macros: https://help.sap.com/doc/
|
|
82
|
+
Macros: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html
|
|
83
83
|
|
|
84
84
|
STATICS: use CLASS-DATA instead
|
|
85
85
|
|
|
@@ -23,7 +23,7 @@ class CDSCommentStyle {
|
|
|
23
23
|
|
|
24
24
|
Comments starting with "--" are considered obsolete
|
|
25
25
|
|
|
26
|
-
https://help.sap.com/doc/
|
|
26
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abencds_general_syntax_rules.html`,
|
|
27
27
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
28
28
|
badExample: "-- this is a comment",
|
|
29
29
|
goodExample: "// this is a comment",
|
|
@@ -81,7 +81,7 @@ class ChainMainlyDeclarations extends _abap_rule_1.ABAPRule {
|
|
|
81
81
|
extendedInformation: `
|
|
82
82
|
https://docs.abapopenchecks.org/checks/23/
|
|
83
83
|
|
|
84
|
-
https://help.sap.com/doc/
|
|
84
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenchained_statements_guidl.html
|
|
85
85
|
`,
|
|
86
86
|
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
87
87
|
badExample: `CALL METHOD: bar.`,
|
|
@@ -37,7 +37,7 @@ before reading it, so a leftover value is not accidentally used.
|
|
|
37
37
|
|
|
38
38
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#clear-or-overwrite-exporting-reference-parameters
|
|
39
39
|
|
|
40
|
-
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenref_transf_output_param_guidl.
|
|
40
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenref_transf_output_param_guidl.html
|
|
41
41
|
|
|
42
42
|
Note: EXPORTING parameters passed by VALUE are always initialized and are therefore not reported.
|
|
43
43
|
Reading and writing the parameter in the same statement (e.g. "ev_result = ev_result + 1") is reported,
|
|
@@ -22,7 +22,7 @@ class ConstructorVisibilityPublic {
|
|
|
22
22
|
This only applies to global classes.
|
|
23
23
|
|
|
24
24
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#if-your-global-class-is-create-private-leave-the-constructor-public
|
|
25
|
-
https://help.sap.com/doc/
|
|
25
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abeninstance_constructor_guidl.html`,
|
|
26
26
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
27
27
|
badExample: `CLASS zcl_foo DEFINITION PUBLIC CREATE PRIVATE.
|
|
28
28
|
PRIVATE SECTION.
|
|
@@ -59,8 +59,8 @@ class ExitOrCheck extends _abap_rule_1.ABAPRule {
|
|
|
59
59
|
title: "Find EXIT or CHECK outside loops",
|
|
60
60
|
shortDescription: `Detects usages of EXIT or CHECK statements outside of loops.
|
|
61
61
|
Use RETURN to leave procesing blocks instead.`,
|
|
62
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
63
|
-
https://help.sap.com/doc/
|
|
62
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenleave_processing_blocks.html
|
|
63
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapcheck_processing_blocks.html
|
|
64
64
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#check-vs-return`,
|
|
65
65
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
66
66
|
badExample: `CHECK is_valid = abap_true.
|
|
@@ -21,7 +21,7 @@ class ExpandMacros extends _abap_rule_1.ABAPRule {
|
|
|
21
21
|
key: "expand_macros",
|
|
22
22
|
title: "Expand Macros",
|
|
23
23
|
shortDescription: `Allows expanding macro calls with quick fixes`,
|
|
24
|
-
extendedInformation: `Macros: https://help.sap.com/doc/
|
|
24
|
+
extendedInformation: `Macros: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html
|
|
25
25
|
|
|
26
26
|
Note that macros/DEFINE cannot be used in the ABAP Cloud programming model`,
|
|
27
27
|
badExample: `DEFINE _hello.
|
|
@@ -50,7 +50,7 @@ class FMGlobalParametersObsolete {
|
|
|
50
50
|
key: "fm_global_parameters_obsolete",
|
|
51
51
|
title: "FM Global Parameters Obsolete",
|
|
52
52
|
shortDescription: `Check for function modules with global parameters`,
|
|
53
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
53
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenglobal_parameters_obsolete.html`,
|
|
54
54
|
tags: [],
|
|
55
55
|
};
|
|
56
56
|
}
|
|
@@ -53,7 +53,7 @@ class FormTablesObsolete extends _abap_rule_1.ABAPRule {
|
|
|
53
53
|
key: "form_tables_obsolete",
|
|
54
54
|
title: "TABLES parameters are obsolete",
|
|
55
55
|
shortDescription: `Checks for TABLES parameters in forms.`,
|
|
56
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
56
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapform_tables.html`,
|
|
57
57
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
58
58
|
badExample: `FORM update_items TABLES items.
|
|
59
59
|
ENDFORM.`,
|
|
@@ -57,7 +57,7 @@ class ImplicitStartOfSelection extends _abap_rule_1.ABAPRule {
|
|
|
57
57
|
shortDescription: `Add explicit selection screen event handling`,
|
|
58
58
|
extendedInformation: `Only runs for executable programs
|
|
59
59
|
|
|
60
|
-
https://help.sap.com/doc/
|
|
60
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapstart-of-selection.html`,
|
|
61
61
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
62
62
|
badExample: `REPORT zfoo.
|
|
63
63
|
WRITE 'hello'.`,
|
|
@@ -19,7 +19,7 @@ class MethodOverwritesBuiltIn extends _abap_rule_1.ABAPRule {
|
|
|
19
19
|
key: "method_overwrites_builtin",
|
|
20
20
|
title: "Method name overwrites builtin function",
|
|
21
21
|
shortDescription: `Checks Method names that overwrite builtin SAP functions`,
|
|
22
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
22
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abenbuilt_in_functions_overview.html
|
|
23
23
|
|
|
24
24
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-obscuring-built-in-functions
|
|
25
25
|
|
|
@@ -56,7 +56,7 @@ class MixReturning extends _abap_rule_1.ABAPRule {
|
|
|
56
56
|
shortDescription: `Checks that methods don't have a mixture of returning and exporting/changing parameters`,
|
|
57
57
|
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-either-returning-or-exporting-or-changing-but-not-a-combination
|
|
58
58
|
|
|
59
|
-
This syntax is not allowed on versions earlier than 740sp02, https://help.sap.com/doc/
|
|
59
|
+
This syntax is not allowed on versions earlier than 740sp02, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-740-abap_objects.html#!ABAP_MODIFICATION_1@1@`,
|
|
60
60
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Syntax],
|
|
61
61
|
badExample: `CLASS lcl DEFINITION.
|
|
62
62
|
PUBLIC SECTION.
|
|
@@ -54,7 +54,7 @@ class NoMacros extends _abap_rule_1.ABAPRule {
|
|
|
54
54
|
shortDescription: `Checks that macros are not used`,
|
|
55
55
|
extendedInformation: `Macros reduce readability and are difficult to debug, use methods or form routines instead.
|
|
56
56
|
|
|
57
|
-
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.
|
|
57
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html`,
|
|
58
58
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
59
59
|
badExample: `DEFINE _macro.
|
|
60
60
|
WRITE 'hello'.
|
|
@@ -131,44 +131,44 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#prefer-func
|
|
|
131
131
|
|
|
132
132
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-obsolete-language-elements
|
|
133
133
|
|
|
134
|
-
SET EXTENDED CHECK: https://help.sap.com/doc/
|
|
134
|
+
SET EXTENDED CHECK: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapset_extended_check.html
|
|
135
135
|
|
|
136
|
-
IS REQUESTED: https://help.sap.com/doc/
|
|
136
|
+
IS REQUESTED: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenlogexp_requested.html
|
|
137
137
|
|
|
138
|
-
WITH HEADER LINE: https://help.sap.com/doc/
|
|
138
|
+
WITH HEADER LINE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapdata_header_line.html
|
|
139
139
|
|
|
140
|
-
FIELD-SYMBOLS STRUCTURE: https://help.sap.com/doc/
|
|
140
|
+
FIELD-SYMBOLS STRUCTURE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapfield-symbols_obsolete_typing.html
|
|
141
141
|
|
|
142
|
-
TYPE-POOLS: from 702, https://help.sap.com/doc/
|
|
142
|
+
TYPE-POOLS: from 702, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-71-program_load.html
|
|
143
143
|
|
|
144
|
-
LOAD addition: from 702, https://help.sap.com/doc/
|
|
144
|
+
LOAD addition: from 702, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-71-program_load.html
|
|
145
145
|
|
|
146
|
-
COMMUICATION: https://help.sap.com/doc/
|
|
146
|
+
COMMUICATION: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapcommunication.html
|
|
147
147
|
|
|
148
|
-
OCCURS: https://help.sap.com/doc/
|
|
148
|
+
OCCURS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapdata_occurs.html
|
|
149
149
|
|
|
150
|
-
PARAMETER: https://help.sap.com/doc/
|
|
150
|
+
PARAMETER: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapparameter.html
|
|
151
151
|
|
|
152
|
-
RANGES: https://help.sap.com/doc/
|
|
152
|
+
RANGES: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapranges.html
|
|
153
153
|
|
|
154
|
-
PACK: https://help.sap.com/doc/
|
|
154
|
+
PACK: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abappack.html
|
|
155
155
|
|
|
156
|
-
MOVE: https://help.sap.com/doc/
|
|
156
|
+
MOVE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapmove_obs.html
|
|
157
157
|
|
|
158
|
-
SELECT without INTO: https://help.sap.com/doc/
|
|
158
|
+
SELECT without INTO: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapselect_obsolete.html
|
|
159
159
|
SELECT COUNT(*) is considered okay
|
|
160
160
|
|
|
161
|
-
FREE MEMORY: https://help.sap.com/doc/
|
|
161
|
+
FREE MEMORY: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapfree_mem_id_obsolete.html
|
|
162
162
|
|
|
163
|
-
SORT BY FS: https://help.sap.com/doc/
|
|
163
|
+
SORT BY FS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapsort_itab_obsolete.html
|
|
164
164
|
|
|
165
|
-
CALL TRANSFORMATION OBJECTS: https://help.sap.com/doc/
|
|
165
|
+
CALL TRANSFORMATION OBJECTS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapcall_transformation_objects.html
|
|
166
166
|
|
|
167
|
-
POSIX REGEX: https://help.sap.com/doc/
|
|
167
|
+
POSIX REGEX: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENREGEX_MIGRATING_POSIX.html
|
|
168
168
|
|
|
169
169
|
OCCURENCES: check for OCCURENCES vs OCCURRENCES
|
|
170
170
|
|
|
171
|
-
CLIENT SPECIFIED, from 754: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/
|
|
171
|
+
CLIENT SPECIFIED, from 754: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapselect_client_obsolete.html`,
|
|
172
172
|
badExample: `REFRESH itab.
|
|
173
173
|
|
|
174
174
|
COMPUTE foo = 2 + 2.
|
|
@@ -24,7 +24,7 @@ class PragmaStyle extends _abap_rule_1.ABAPRule {
|
|
|
24
24
|
title: "Pragma Style",
|
|
25
25
|
shortDescription: `Check pragmas placement and case`,
|
|
26
26
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
27
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
27
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENPRAGMA.html`,
|
|
28
28
|
badExample: `DATA field ##NO_TEXT TYPE i.`,
|
|
29
29
|
goodExample: `DATA field TYPE i ##NO_TEXT.`,
|
|
30
30
|
};
|
|
@@ -54,7 +54,7 @@ class RFCErrorHandling extends _abap_rule_1.ABAPRule {
|
|
|
54
54
|
title: "RFC error handling",
|
|
55
55
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
56
56
|
shortDescription: `Checks that exceptions 'system_failure' and 'communication_failure' are handled in RFC calls`,
|
|
57
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
57
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenrfc_exception.html`,
|
|
58
58
|
badExample: `CALL FUNCTION 'ZRFC'
|
|
59
59
|
DESTINATION lv_rfc.`,
|
|
60
60
|
goodExample: `CALL FUNCTION 'ZRFC'
|
|
@@ -55,9 +55,9 @@ class StrictSQL extends _abap_rule_1.ABAPRule {
|
|
|
55
55
|
key: "strict_sql",
|
|
56
56
|
title: "Strict SQL",
|
|
57
57
|
shortDescription: `Strict SQL`,
|
|
58
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
58
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapinto_clause.html
|
|
59
59
|
|
|
60
|
-
https://help.sap.com/doc/
|
|
60
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENABAP_SQL_STRICT_MODES.html
|
|
61
61
|
|
|
62
62
|
Also see separate rule sql_escape_host_variables
|
|
63
63
|
|
|
@@ -52,7 +52,7 @@ class SyModification extends _abap_rule_1.ABAPRule {
|
|
|
52
52
|
key: "sy_modification",
|
|
53
53
|
title: "Modification of SY fields",
|
|
54
54
|
shortDescription: `Finds modification of sy fields`,
|
|
55
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
55
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abensystem_fields.html
|
|
56
56
|
|
|
57
57
|
Changes to SY-TVAR* fields are not reported
|
|
58
58
|
|
|
@@ -53,7 +53,7 @@ class TablesDeclaredLocally extends _abap_rule_1.ABAPRule {
|
|
|
53
53
|
key: "tables_declared_locally",
|
|
54
54
|
title: "Check for locally declared TABLES",
|
|
55
55
|
shortDescription: `TABLES are always global, so declare them globally`,
|
|
56
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
56
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abaptables.html`,
|
|
57
57
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
58
58
|
badExample: `FORM foo.
|
|
59
59
|
TABLES t100.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/core",
|
|
3
|
-
"version": "2.120.
|
|
3
|
+
"version": "2.120.10",
|
|
4
4
|
"description": "abaplint - Core API",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/abaplint.d.ts",
|
|
@@ -52,20 +52,20 @@
|
|
|
52
52
|
},
|
|
53
53
|
"homepage": "https://abaplint.org",
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@microsoft/api-extractor": "^7.58.
|
|
55
|
+
"@microsoft/api-extractor": "^7.58.12",
|
|
56
56
|
"@types/chai": "^4.3.20",
|
|
57
57
|
"@types/mocha": "^10.0.10",
|
|
58
|
-
"@types/node": "^24.13.
|
|
58
|
+
"@types/node": "^24.13.3",
|
|
59
59
|
"c8": "^11.0.0",
|
|
60
60
|
"chai": "^4.5.0",
|
|
61
|
-
"eslint": "^9.39.
|
|
61
|
+
"eslint": "^9.39.5",
|
|
62
62
|
"mocha": "^11.7.6",
|
|
63
63
|
"source-map-support": "^0.5.21",
|
|
64
64
|
"ts-json-schema-generator": "^2.9.0",
|
|
65
|
-
"typescript": "^
|
|
65
|
+
"typescript": "^7.0.2"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"fast-xml-parser": "^5.
|
|
68
|
+
"fast-xml-parser": "^5.10.1",
|
|
69
69
|
"json5": "^2.2.3",
|
|
70
70
|
"vscode-languageserver-types": "^3.18.0"
|
|
71
71
|
}
|