@abaplint/core 2.91.38 → 2.92.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/abaplint.d.ts +7 -2
- package/build/src/abap/2_statements/expressions/sql_target.js +2 -1
- package/build/src/abap/5_syntax/_procedural.js +2 -1
- package/build/src/abap/types/function_module_definition.js +2 -1
- package/build/src/config.js +8 -3
- package/build/src/objects/data_element.js +1 -1
- package/build/src/objects/table_type.js +1 -1
- package/build/src/registry.js +43 -11
- package/build/src/skip_logic.js +12 -6
- package/package.json +3 -3
package/build/abaplint.d.ts
CHANGED
|
@@ -2782,9 +2782,12 @@ declare interface IFunctionModuleParameter {
|
|
|
2782
2782
|
declare interface IGlobalConfig {
|
|
2783
2783
|
/** input files, glob format */
|
|
2784
2784
|
files: string;
|
|
2785
|
+
skipGeneratedBOPFInterfaces?: boolean;
|
|
2786
|
+
skipGeneratedFunctionGroups?: boolean;
|
|
2785
2787
|
skipGeneratedGatewayClasses?: boolean;
|
|
2786
2788
|
skipGeneratedPersistentClasses?: boolean;
|
|
2787
|
-
|
|
2789
|
+
skipGeneratedProxyClasses?: boolean;
|
|
2790
|
+
skipGeneratedProxyInterfaces?: boolean;
|
|
2788
2791
|
/** Clone and parse dependencies specified in .apack-manifest.xml if it is present */
|
|
2789
2792
|
useApackDependencies?: boolean;
|
|
2790
2793
|
/** Do not report any issues for includes without main programs */
|
|
@@ -3222,6 +3225,7 @@ export declare interface IRegistry {
|
|
|
3222
3225
|
parseAsync(input?: IRunInput): Promise<IRegistry>;
|
|
3223
3226
|
addDependencies(files: readonly IFile[]): IRegistry;
|
|
3224
3227
|
addDependency(file: IFile): IRegistry;
|
|
3228
|
+
removeDependency(obj: IObject): void;
|
|
3225
3229
|
isDependency(obj: IObject): boolean;
|
|
3226
3230
|
isFileDependency(filename: string): boolean;
|
|
3227
3231
|
findIssues(input?: IRunInput): readonly Issue[];
|
|
@@ -4465,7 +4469,6 @@ declare class RefreshControl implements IStatement {
|
|
|
4465
4469
|
export declare class Registry implements IRegistry {
|
|
4466
4470
|
private readonly objects;
|
|
4467
4471
|
private readonly objectsByType;
|
|
4468
|
-
/** object containing filenames of dependencies */
|
|
4469
4472
|
private readonly dependencies;
|
|
4470
4473
|
private readonly references;
|
|
4471
4474
|
private conf;
|
|
@@ -4486,9 +4489,11 @@ export declare class Registry implements IRegistry {
|
|
|
4486
4489
|
addFile(file: IFile): IRegistry;
|
|
4487
4490
|
updateFile(file: IFile): IRegistry;
|
|
4488
4491
|
removeFile(file: IFile): IRegistry;
|
|
4492
|
+
private _addFiles;
|
|
4489
4493
|
addFiles(files: readonly IFile[]): IRegistry;
|
|
4490
4494
|
addDependencies(files: readonly IFile[]): IRegistry;
|
|
4491
4495
|
addDependency(file: IFile): IRegistry;
|
|
4496
|
+
removeDependency(obj: IObject): void;
|
|
4492
4497
|
isDependency(obj: IObject): boolean;
|
|
4493
4498
|
isFileDependency(filename: string): boolean;
|
|
4494
4499
|
findObjectForFile(file: IFile): IObject | undefined;
|
|
@@ -7,7 +7,8 @@ const tokens_1 = require("../../1_lexer/tokens");
|
|
|
7
7
|
const _1 = require(".");
|
|
8
8
|
class SQLTarget extends combi_1.Expression {
|
|
9
9
|
getRunnable() {
|
|
10
|
-
const
|
|
10
|
+
const n = (0, combi_1.ver)(version_1.Version.v754, "NEW");
|
|
11
|
+
const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.opt)(n), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.tok)(tokens_1.At)), _1.Target));
|
|
11
12
|
return (0, combi_1.altPrio)(at, _1.Target);
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -87,7 +87,8 @@ class Procedural {
|
|
|
87
87
|
else {
|
|
88
88
|
found = ddic.lookup(param.type).type;
|
|
89
89
|
}
|
|
90
|
-
if (param.direction === types_1.FunctionModuleParameterDirection.tables
|
|
90
|
+
if (param.direction === types_1.FunctionModuleParameterDirection.tables
|
|
91
|
+
&& !(found instanceof basic_1.TableType)) {
|
|
91
92
|
found = new basic_1.TableType(found, { withHeader: true });
|
|
92
93
|
}
|
|
93
94
|
if (found instanceof basic_1.UnknownType && ((_a = param.type) === null || _a === void 0 ? void 0 : _a.includes("-"))) {
|
package/build/src/config.js
CHANGED
|
@@ -42,14 +42,19 @@ class Config {
|
|
|
42
42
|
if (ver) {
|
|
43
43
|
version = ver;
|
|
44
44
|
}
|
|
45
|
+
// defaults: dont skip anything, report everything. The user can decide to skip stuff
|
|
46
|
+
// its difficult to debug errors not being reported
|
|
45
47
|
const config = {
|
|
46
48
|
global: {
|
|
47
49
|
files: "/src/**/*.*",
|
|
48
50
|
exclude: [],
|
|
49
51
|
noIssues: [],
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
skipGeneratedBOPFInterfaces: false,
|
|
53
|
+
skipGeneratedFunctionGroups: false,
|
|
54
|
+
skipGeneratedGatewayClasses: false,
|
|
55
|
+
skipGeneratedPersistentClasses: false,
|
|
56
|
+
skipGeneratedProxyClasses: false,
|
|
57
|
+
skipGeneratedProxyInterfaces: false,
|
|
53
58
|
useApackDependencies: false,
|
|
54
59
|
skipIncludesWithoutMain: false,
|
|
55
60
|
},
|
|
@@ -34,7 +34,7 @@ class DataElement extends _abstract_object_1.AbstractObject {
|
|
|
34
34
|
parseType(reg) {
|
|
35
35
|
const references = [];
|
|
36
36
|
let lookup = undefined;
|
|
37
|
-
if (this.parsedXML === undefined
|
|
37
|
+
if (this.parsedXML === undefined) {
|
|
38
38
|
lookup = { type: new Types.UnknownType("Data Element " + this.getName() + ", parser error") };
|
|
39
39
|
}
|
|
40
40
|
else {
|
|
@@ -32,7 +32,7 @@ class TableType extends _abstract_object_1.AbstractObject {
|
|
|
32
32
|
const ddic = new ddic_1.DDIC(reg);
|
|
33
33
|
const references = [];
|
|
34
34
|
let type;
|
|
35
|
-
if (this.parsedXML === undefined
|
|
35
|
+
if (this.parsedXML === undefined) {
|
|
36
36
|
type = new Types.UnknownType("Table Type, parser error", this.getName());
|
|
37
37
|
}
|
|
38
38
|
else if (this.parsedXML.rowkind === "S") {
|
package/build/src/registry.js
CHANGED
|
@@ -60,7 +60,6 @@ class Registry {
|
|
|
60
60
|
constructor(conf) {
|
|
61
61
|
this.objects = {};
|
|
62
62
|
this.objectsByType = {};
|
|
63
|
-
/** object containing filenames of dependencies */
|
|
64
63
|
this.dependencies = {};
|
|
65
64
|
this.issues = [];
|
|
66
65
|
this.conf = conf ? conf : config_1.Config.getDefault();
|
|
@@ -68,7 +67,7 @@ class Registry {
|
|
|
68
67
|
}
|
|
69
68
|
static abaplintVersion() {
|
|
70
69
|
// magic, see build script "version.sh"
|
|
71
|
-
return "2.
|
|
70
|
+
return "2.92.1";
|
|
72
71
|
}
|
|
73
72
|
getDDICReferences() {
|
|
74
73
|
return this.references;
|
|
@@ -143,6 +142,7 @@ class Registry {
|
|
|
143
142
|
return this;
|
|
144
143
|
}
|
|
145
144
|
inErrorNamespace(name) {
|
|
145
|
+
// todo: performance? cache regexp?
|
|
146
146
|
const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, "i");
|
|
147
147
|
return reg.test(name);
|
|
148
148
|
}
|
|
@@ -163,7 +163,7 @@ class Registry {
|
|
|
163
163
|
}
|
|
164
164
|
return this;
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
_addFiles(files, dependency) {
|
|
167
167
|
var _a;
|
|
168
168
|
const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])
|
|
169
169
|
.map(pattern => new RegExp(pattern, "i"));
|
|
@@ -173,28 +173,60 @@ class Registry {
|
|
|
173
173
|
if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {
|
|
174
174
|
continue;
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
let found = this.findOrCreate(f.getObjectName(), f.getObjectType());
|
|
177
|
+
if (dependency === false && found && this.isDependency(found)) {
|
|
178
|
+
this.removeDependency(found);
|
|
179
|
+
found = this.findOrCreate(f.getObjectName(), f.getObjectType());
|
|
180
|
+
}
|
|
177
181
|
found.addFile(f);
|
|
178
182
|
}
|
|
179
183
|
return this;
|
|
180
184
|
}
|
|
185
|
+
addFiles(files) {
|
|
186
|
+
this._addFiles(files, false);
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
181
189
|
addDependencies(files) {
|
|
182
190
|
for (const f of files) {
|
|
183
|
-
this.
|
|
191
|
+
this.addDependency(f);
|
|
184
192
|
}
|
|
185
|
-
return this
|
|
193
|
+
return this;
|
|
186
194
|
}
|
|
187
195
|
addDependency(file) {
|
|
188
|
-
|
|
189
|
-
|
|
196
|
+
var _a;
|
|
197
|
+
const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
198
|
+
if (type === undefined) {
|
|
199
|
+
return this;
|
|
200
|
+
}
|
|
201
|
+
const name = file.getObjectName().toUpperCase();
|
|
202
|
+
if (this.dependencies[type] === undefined) {
|
|
203
|
+
this.dependencies[type] = {};
|
|
204
|
+
}
|
|
205
|
+
this.dependencies[type][name] = true;
|
|
206
|
+
this._addFiles([file], true);
|
|
190
207
|
return this;
|
|
191
208
|
}
|
|
209
|
+
removeDependency(obj) {
|
|
210
|
+
var _a;
|
|
211
|
+
(_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];
|
|
212
|
+
this.removeObject(obj);
|
|
213
|
+
}
|
|
192
214
|
isDependency(obj) {
|
|
193
|
-
|
|
194
|
-
return this.dependencies[
|
|
215
|
+
var _a;
|
|
216
|
+
return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;
|
|
195
217
|
}
|
|
196
218
|
isFileDependency(filename) {
|
|
197
|
-
|
|
219
|
+
var _a, _b;
|
|
220
|
+
const f = this.getFileByName(filename);
|
|
221
|
+
if (f === undefined) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
225
|
+
if (type === undefined) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
const name = f.getObjectName().toUpperCase();
|
|
229
|
+
return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;
|
|
198
230
|
}
|
|
199
231
|
// assumption: the file is already in the registry
|
|
200
232
|
findObjectForFile(file) {
|
package/build/src/skip_logic.js
CHANGED
|
@@ -10,7 +10,7 @@ class SkipLogic {
|
|
|
10
10
|
}
|
|
11
11
|
skip(obj) {
|
|
12
12
|
const global = this.reg.getConfig().getGlobal();
|
|
13
|
-
if (global.skipGeneratedGatewayClasses
|
|
13
|
+
if (global.skipGeneratedGatewayClasses === true
|
|
14
14
|
&& obj instanceof objects_1.Class
|
|
15
15
|
&& this.isGeneratedGatewayClass(obj)) {
|
|
16
16
|
return true;
|
|
@@ -24,23 +24,29 @@ class SkipLogic {
|
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
else if (global.skipGeneratedPersistentClasses
|
|
27
|
+
else if (global.skipGeneratedPersistentClasses === true
|
|
28
28
|
&& obj instanceof objects_1.Class
|
|
29
29
|
&& this.isGeneratedPersistentClass(obj)) {
|
|
30
30
|
return true;
|
|
31
31
|
}
|
|
32
|
-
else if (global.skipGeneratedFunctionGroups
|
|
32
|
+
else if (global.skipGeneratedFunctionGroups === true
|
|
33
33
|
&& obj instanceof objects_1.FunctionGroup
|
|
34
34
|
&& this.isGeneratedFunctionGroup(obj)) {
|
|
35
35
|
return true;
|
|
36
36
|
}
|
|
37
|
-
else if (
|
|
37
|
+
else if (global.skipGeneratedProxyClasses === true
|
|
38
|
+
&& obj instanceof objects_1.Class
|
|
39
|
+
&& this.isGeneratedProxyClass(obj)) {
|
|
38
40
|
return true;
|
|
39
41
|
}
|
|
40
|
-
else if (
|
|
42
|
+
else if (global.skipGeneratedProxyInterfaces === true
|
|
43
|
+
&& obj instanceof objects_1.Interface
|
|
44
|
+
&& this.isGeneratedProxyInterface(obj)) {
|
|
41
45
|
return true;
|
|
42
46
|
}
|
|
43
|
-
else if (
|
|
47
|
+
else if (global.skipGeneratedBOPFInterfaces === true
|
|
48
|
+
&& obj instanceof objects_1.Interface
|
|
49
|
+
&& this.isGeneratedBOPFInterface(obj)) {
|
|
44
50
|
return true;
|
|
45
51
|
}
|
|
46
52
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.92.1",
|
|
4
4
|
"description": "abaplint - Core API",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/abaplint.d.ts",
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
"@microsoft/api-extractor": "^7.29.5",
|
|
49
49
|
"@types/chai": "^4.3.3",
|
|
50
50
|
"@types/mocha": "^9.1.1",
|
|
51
|
-
"@types/node": "^18.7.
|
|
51
|
+
"@types/node": "^18.7.13",
|
|
52
52
|
"chai": "^4.3.6",
|
|
53
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",
|
|
57
57
|
"ts-json-schema-generator": "^1.0.0",
|
|
58
|
-
"typescript": "^4.
|
|
58
|
+
"typescript": "^4.8.2"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"fast-xml-parser": "^4.0.9",
|