@abaplint/core 2.83.1 → 2.83.5
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/README.md +6 -6
- package/build/abaplint.d.ts +12 -36
- package/build/src/abap/2_statements/expressions/index.js +0 -7
- package/build/src/abap/2_statements/statement_parser.js +1 -1
- package/build/src/abap/artifacts.js +3 -3
- package/build/src/abap/flow/flow_graph.js +7 -7
- package/build/src/cds/artifacts.js +18 -0
- package/build/src/cds/cds_lexer.js +133 -0
- package/build/src/cds/cds_parser.js +28 -0
- package/build/src/cds/expressions/cds_aggregate.js +13 -0
- package/build/src/cds/expressions/cds_annotation.js +13 -0
- package/build/src/cds/expressions/cds_annotation_array.js +15 -0
- package/build/src/cds/expressions/cds_annotation_object.js +16 -0
- package/build/src/cds/expressions/cds_annotation_simple.js +13 -0
- package/build/src/cds/expressions/cds_arithmetics.js +15 -0
- package/build/src/cds/expressions/cds_as.js +12 -0
- package/build/src/cds/expressions/cds_association.js +13 -0
- package/build/src/cds/expressions/cds_cardinality.js +12 -0
- package/build/src/cds/expressions/cds_case.js +16 -0
- package/build/src/cds/expressions/cds_cast.js +13 -0
- package/build/src/cds/expressions/cds_composition.js +13 -0
- package/build/src/cds/expressions/cds_condition.js +20 -0
- package/build/src/cds/expressions/cds_define_abstract.js +14 -0
- package/build/src/cds/expressions/cds_define_view.js +16 -0
- package/build/src/cds/expressions/cds_element.js +14 -0
- package/build/src/cds/expressions/cds_function.js +32 -0
- package/build/src/cds/expressions/cds_group_by.js +13 -0
- package/build/src/cds/expressions/cds_join.js +13 -0
- package/build/src/cds/expressions/cds_name.js +11 -0
- package/build/src/cds/expressions/cds_parameters.js +14 -0
- package/build/src/cds/expressions/cds_select.js +15 -0
- package/build/src/cds/expressions/cds_source.js +12 -0
- package/build/src/cds/expressions/cds_string.js +11 -0
- package/build/src/cds/expressions/cds_type.js +12 -0
- package/build/src/cds/expressions/cds_where.js +12 -0
- package/build/src/cds/expressions/cds_with_parameters.js +13 -0
- package/build/src/cds/expressions/index.js +41 -0
- package/build/src/config.js +1 -0
- package/build/src/ddl/artifacts.js +18 -0
- package/build/src/ddl/ddl_lexer.js +1 -1
- package/build/src/ddl/ddl_parser.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_include.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_name.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_structure.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_structure_field.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_table.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_table_field.js +1 -1
- package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_type.js +1 -1
- package/build/src/ddl/expressions/index.js +20 -0
- package/build/src/index.js +2 -2
- package/build/src/lsp/help.js +7 -7
- package/build/src/objects/data_definition.js +68 -4
- package/build/src/registry.js +1 -1
- package/build/src/rules/7bit_ascii.js +5 -2
- package/build/src/rules/abapdoc.js +1 -1
- package/build/src/rules/align_parameters.js +33 -33
- package/build/src/rules/ambiguous_statement.js +5 -5
- package/build/src/rules/avoid_use.js +6 -6
- package/build/src/rules/begin_end_names.js +4 -4
- package/build/src/rules/begin_single_include.js +12 -12
- package/build/src/rules/call_transaction_authority_check.js +3 -3
- package/build/src/rules/cds_parser_error.js +46 -0
- package/build/src/rules/chain_mainly_declarations.js +4 -4
- package/build/src/rules/check_abstract.js +2 -2
- package/build/src/rules/check_comments.js +3 -3
- package/build/src/rules/check_include.js +3 -3
- package/build/src/rules/check_no_handler_pragma.js +8 -8
- package/build/src/rules/check_subrc.js +8 -8
- package/build/src/rules/commented_code.js +1 -1
- package/build/src/rules/constructor_visibility_public.js +4 -4
- package/build/src/rules/contains_tab.js +2 -2
- package/build/src/rules/dangerous_statement.js +1 -1
- package/build/src/rules/downport.js +35 -35
- package/build/src/rules/exit_or_check.js +3 -3
- package/build/src/rules/exporting.js +1 -1
- package/build/src/rules/forbidden_identifier.js +1 -1
- package/build/src/rules/forbidden_void_type.js +2 -2
- package/build/src/rules/functional_writing.js +17 -17
- package/build/src/rules/global_class.js +10 -10
- package/build/src/rules/identical_conditions.js +2 -2
- package/build/src/rules/identical_contents.js +15 -15
- package/build/src/rules/identical_descriptions.js +4 -4
- package/build/src/rules/if_in_if.js +7 -7
- package/build/src/rules/implement_methods.js +3 -3
- package/build/src/rules/in_statement_indentation.js +11 -11
- package/build/src/rules/index.js +1 -0
- package/build/src/rules/intf_referencing_clas.js +3 -3
- package/build/src/rules/line_break_style.js +2 -2
- package/build/src/rules/line_length.js +1 -1
- package/build/src/rules/line_only_punc.js +1 -1
- package/build/src/rules/local_variable_names.js +2 -2
- package/build/src/rules/many_parentheses.js +10 -10
- package/build/src/rules/max_one_method_parameter_per_line.js +7 -7
- package/build/src/rules/max_one_statement.js +3 -3
- package/build/src/rules/nesting.js +1 -1
- package/build/src/rules/no_chained_assignment.js +1 -1
- package/build/src/rules/no_public_attributes.js +1 -1
- package/build/src/rules/no_yoda_conditions.js +4 -4
- package/build/src/rules/obsolete_statement.js +40 -38
- package/build/src/rules/omit_parameter_name.js +3 -3
- package/build/src/rules/omit_receiving.js +13 -13
- package/build/src/rules/parser_702_chaining.js +2 -2
- package/build/src/rules/parser_error.js +2 -2
- package/build/src/rules/parser_missing_space.js +1 -1
- package/build/src/rules/prefer_inline.js +16 -16
- package/build/src/rules/prefer_is_not.js +7 -7
- package/build/src/rules/prefer_raise_exception_new.js +3 -3
- package/build/src/rules/prefer_returning_to_exporting.js +1 -1
- package/build/src/rules/prefer_xsdbool.js +2 -2
- package/build/src/rules/remove_descriptions.js +4 -4
- package/build/src/rules/rfc_error_handling.js +9 -9
- package/build/src/rules/select_add_order_by.js +5 -5
- package/build/src/rules/select_performance.js +2 -2
- package/build/src/rules/sicf_consistency.js +4 -4
- package/build/src/rules/space_before_dot.js +2 -2
- package/build/src/rules/start_at_tab.js +1 -1
- package/build/src/rules/sy_modification.js +2 -2
- package/build/src/rules/tabl_enhancement_category.js +2 -2
- package/build/src/rules/unused_methods.js +9 -9
- package/build/src/rules/unused_variables.js +6 -6
- package/build/src/rules/use_bool_expression.js +8 -8
- package/build/src/rules/use_line_exists.js +6 -6
- package/build/src/rules/use_new.js +2 -2
- package/build/src/rules/when_others_last.js +6 -6
- package/package.json +66 -66
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSGroupBy = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSGroupBy extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.star)((0, combi_1.seq)(".", _1.CDSName)));
|
|
9
|
+
return (0, combi_1.seq)("GROUP BY", name, (0, combi_1.star)((0, combi_1.seq)(",", name)));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.CDSGroupBy = CDSGroupBy;
|
|
13
|
+
//# sourceMappingURL=cds_group_by.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSJoin = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
const cds_condition_1 = require("./cds_condition");
|
|
7
|
+
class CDSJoin extends combi_1.Expression {
|
|
8
|
+
getRunnable() {
|
|
9
|
+
return (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.alt)("INNER", "LEFT OUTER", "LEFT OUTER TO ONE")), "JOIN", _1.CDSSource, "ON", cds_condition_1.CDSCondition);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.CDSJoin = CDSJoin;
|
|
13
|
+
//# sourceMappingURL=cds_join.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSName = void 0;
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
|
+
class CDSName extends combi_1.Expression {
|
|
6
|
+
getRunnable() {
|
|
7
|
+
return (0, combi_1.seq)((0, combi_1.opt)(":"), (0, combi_1.regex)(/^\$?#?[\w_]+$/));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.CDSName = CDSName;
|
|
11
|
+
//# sourceMappingURL=cds_name.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSParameters = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSParameters extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)((0, combi_1.seq)(".", _1.CDSName)));
|
|
9
|
+
const value = (0, combi_1.alt)(name, _1.CDSString);
|
|
10
|
+
return (0, combi_1.seq)("[", (0, combi_1.regex)(/\d+/), ":", name, "=", value, (0, combi_1.star)((0, combi_1.seq)("AND", name, "=", value)), "]");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.CDSParameters = CDSParameters;
|
|
14
|
+
//# sourceMappingURL=cds_parameters.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSSelect = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
const cds_association_1 = require("./cds_association");
|
|
7
|
+
const cds_element_1 = require("./cds_element");
|
|
8
|
+
const cds_join_1 = require("./cds_join");
|
|
9
|
+
class CDSSelect extends combi_1.Expression {
|
|
10
|
+
getRunnable() {
|
|
11
|
+
return (0, combi_1.seq)("SELECT", (0, combi_1.opt)("DISTINCT"), "FROM", _1.CDSSource, (0, combi_1.star)(cds_join_1.CDSJoin), (0, combi_1.star)(_1.CDSComposition), (0, combi_1.star)(cds_association_1.CDSAssociation), (0, combi_1.star)(_1.CDSComposition), (0, combi_1.str)("{"), (0, combi_1.plus)(cds_element_1.CDSElement), (0, combi_1.star)((0, combi_1.seq)(",", cds_element_1.CDSElement)), (0, combi_1.str)("}"), (0, combi_1.opt)(_1.CDSGroupBy), (0, combi_1.opt)(_1.CDSWhere), (0, combi_1.opt)((0, combi_1.seq)("UNION", (0, combi_1.opt)("ALL"), CDSSelect)));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.CDSSelect = CDSSelect;
|
|
15
|
+
//# sourceMappingURL=cds_select.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSSource = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSSource extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
return (0, combi_1.seq)((0, combi_1.regex)(/^[\w_]+$/), (0, combi_1.opt)(_1.CDSAs));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.CDSSource = CDSSource;
|
|
12
|
+
//# sourceMappingURL=cds_source.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSString = void 0;
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
|
+
class CDSString extends combi_1.Expression {
|
|
6
|
+
getRunnable() {
|
|
7
|
+
return (0, combi_1.regex)(/^'[\w: -_]*'$/);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.CDSString = CDSString;
|
|
11
|
+
//# sourceMappingURL=cds_string.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSType = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSType extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
return (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)((0, combi_1.seq)(".", _1.CDSName)), (0, combi_1.opt)((0, combi_1.seq)("(", (0, combi_1.regex)(/\d+/), ")")));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.CDSType = CDSType;
|
|
12
|
+
//# sourceMappingURL=cds_type.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSWhere = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSWhere extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
return (0, combi_1.seq)("WHERE", _1.CDSCondition);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.CDSWhere = CDSWhere;
|
|
12
|
+
//# sourceMappingURL=cds_where.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSWithParameters = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
|
+
class CDSWithParameters extends combi_1.Expression {
|
|
7
|
+
getRunnable() {
|
|
8
|
+
const param = (0, combi_1.seq)(_1.CDSName, ":", _1.CDSType);
|
|
9
|
+
return (0, combi_1.seq)("wITH PARAMETERS", param, (0, combi_1.star)((0, combi_1.seq)(",", param)));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.CDSWithParameters = CDSWithParameters;
|
|
13
|
+
//# sourceMappingURL=cds_with_parameters.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./cds_aggregate"), exports);
|
|
14
|
+
__exportStar(require("./cds_aggregate"), exports);
|
|
15
|
+
__exportStar(require("./cds_annotation_array"), exports);
|
|
16
|
+
__exportStar(require("./cds_annotation_object"), exports);
|
|
17
|
+
__exportStar(require("./cds_annotation_simple"), exports);
|
|
18
|
+
__exportStar(require("./cds_annotation"), exports);
|
|
19
|
+
__exportStar(require("./cds_arithmetics"), exports);
|
|
20
|
+
__exportStar(require("./cds_as"), exports);
|
|
21
|
+
__exportStar(require("./cds_association"), exports);
|
|
22
|
+
__exportStar(require("./cds_cardinality"), exports);
|
|
23
|
+
__exportStar(require("./cds_case"), exports);
|
|
24
|
+
__exportStar(require("./cds_cast"), exports);
|
|
25
|
+
__exportStar(require("./cds_composition"), exports);
|
|
26
|
+
__exportStar(require("./cds_condition"), exports);
|
|
27
|
+
__exportStar(require("./cds_define_abstract"), exports);
|
|
28
|
+
__exportStar(require("./cds_define_view"), exports);
|
|
29
|
+
__exportStar(require("./cds_element"), exports);
|
|
30
|
+
__exportStar(require("./cds_function"), exports);
|
|
31
|
+
__exportStar(require("./cds_group_by"), exports);
|
|
32
|
+
__exportStar(require("./cds_join"), exports);
|
|
33
|
+
__exportStar(require("./cds_name"), exports);
|
|
34
|
+
__exportStar(require("./cds_parameters"), exports);
|
|
35
|
+
__exportStar(require("./cds_select"), exports);
|
|
36
|
+
__exportStar(require("./cds_source"), exports);
|
|
37
|
+
__exportStar(require("./cds_string"), exports);
|
|
38
|
+
__exportStar(require("./cds_type"), exports);
|
|
39
|
+
__exportStar(require("./cds_where"), exports);
|
|
40
|
+
__exportStar(require("./cds_with_parameters"), exports);
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
package/build/src/config.js
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArtifactsDDL = void 0;
|
|
4
|
+
const Expressions = require("./expressions");
|
|
5
|
+
class ArtifactsDDL {
|
|
6
|
+
static getExpressions() {
|
|
7
|
+
const ret = [];
|
|
8
|
+
const list = Expressions;
|
|
9
|
+
for (const key in Expressions) {
|
|
10
|
+
if (typeof list[key] === "function") {
|
|
11
|
+
ret.push(list[key]);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return ret;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ArtifactsDDL = ArtifactsDDL;
|
|
18
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -6,7 +6,7 @@ const position_1 = require("../position");
|
|
|
6
6
|
class DDLLexer {
|
|
7
7
|
static run(file) {
|
|
8
8
|
const step1 = [];
|
|
9
|
-
const lines = file.getRaw().replace(/\
|
|
9
|
+
const lines = file.getRaw().replace(/\r/g, "").split("\n");
|
|
10
10
|
for (const l of lines) {
|
|
11
11
|
if (l.startsWith("@")) {
|
|
12
12
|
continue; // skip annotations for now
|
|
@@ -5,7 +5,7 @@ const combi_1 = require("../abap/2_statements/combi");
|
|
|
5
5
|
const nodes_1 = require("../abap/nodes");
|
|
6
6
|
const version_1 = require("../version");
|
|
7
7
|
const ddl_lexer_1 = require("./ddl_lexer");
|
|
8
|
-
const Expressions = require("
|
|
8
|
+
const Expressions = require("./expressions");
|
|
9
9
|
var DDLKind;
|
|
10
10
|
(function (DDLKind) {
|
|
11
11
|
DDLKind["Structure"] = "structure";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLInclude = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
const ddl_name_1 = require("./ddl_name");
|
|
6
6
|
class DDLInclude extends combi_1.Expression {
|
|
7
7
|
getRunnable() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLName = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
class DDLName extends combi_1.Expression {
|
|
6
6
|
getRunnable() {
|
|
7
7
|
return (0, combi_1.regex)(/^\w+$/);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLStructure = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
const ddl_structure_field_1 = require("./ddl_structure_field");
|
|
6
6
|
const ddl_name_1 = require("./ddl_name");
|
|
7
7
|
const ddl_include_1 = require("./ddl_include");
|
package/build/src/{abap/2_statements/expressions/ddl → ddl/expressions}/ddl_structure_field.js
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLStructureField = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
const ddl_name_1 = require("./ddl_name");
|
|
6
6
|
const ddl_type_1 = require("./ddl_type");
|
|
7
7
|
class DDLStructureField extends combi_1.Expression {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLTable = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
const ddl_include_1 = require("./ddl_include");
|
|
6
6
|
const ddl_name_1 = require("./ddl_name");
|
|
7
7
|
const ddl_table_field_1 = require("./ddl_table_field");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLTableField = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
const ddl_name_1 = require("./ddl_name");
|
|
6
6
|
const ddl_type_1 = require("./ddl_type");
|
|
7
7
|
class DDLTableField extends combi_1.Expression {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DDLType = void 0;
|
|
4
|
-
const combi_1 = require("../../combi");
|
|
4
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
5
5
|
class DDLType extends combi_1.Expression {
|
|
6
6
|
getRunnable() {
|
|
7
7
|
return (0, combi_1.regex)(/^(abap\.)?\w+(\(\d+\))?$/);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./ddl_include"), exports);
|
|
14
|
+
__exportStar(require("./ddl_name"), exports);
|
|
15
|
+
__exportStar(require("./ddl_structure_field"), exports);
|
|
16
|
+
__exportStar(require("./ddl_structure"), exports);
|
|
17
|
+
__exportStar(require("./ddl_table_field"), exports);
|
|
18
|
+
__exportStar(require("./ddl_table"), exports);
|
|
19
|
+
__exportStar(require("./ddl_type"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
package/build/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Severity = exports.Visibility = exports.Info = exports.Rename = exports.PrettyPrinter = exports.Position = exports.CurrentScope = exports.ABAPFile = exports.SpaghettiScope = exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.LanguageServerTypes = exports.DDLParser = exports.applyEditList = exports.applyEditSingle = exports.SpaghettiScopeNode = exports.AbstractFile = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.
|
|
3
|
+
exports.Severity = exports.Visibility = exports.Info = exports.Rename = exports.PrettyPrinter = exports.Position = exports.CurrentScope = exports.ABAPFile = exports.SpaghettiScope = exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.LanguageServerTypes = exports.DDLParser = exports.applyEditList = exports.applyEditSingle = exports.SpaghettiScopeNode = exports.AbstractFile = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.ArtifactsABAP = exports.BuiltIn = exports.MethodLengthStats = exports.LanguageServer = exports.Registry = exports.ReferenceType = exports.Version = exports.Config = exports.Issue = exports.MemoryFile = void 0;
|
|
4
4
|
const issue_1 = require("./issue");
|
|
5
5
|
Object.defineProperty(exports, "Issue", { enumerable: true, get: function () { return issue_1.Issue; } });
|
|
6
6
|
const config_1 = require("./config");
|
|
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "LanguageServer", { enumerable: true, get: functi
|
|
|
16
16
|
const LanguageServerTypes = require("./lsp/_interfaces");
|
|
17
17
|
exports.LanguageServerTypes = LanguageServerTypes;
|
|
18
18
|
const artifacts_1 = require("./abap/artifacts");
|
|
19
|
-
Object.defineProperty(exports, "
|
|
19
|
+
Object.defineProperty(exports, "ArtifactsABAP", { enumerable: true, get: function () { return artifacts_1.ArtifactsABAP; } });
|
|
20
20
|
const artifacts_objects_1 = require("./artifacts_objects");
|
|
21
21
|
Object.defineProperty(exports, "ArtifactsObjects", { enumerable: true, get: function () { return artifacts_objects_1.ArtifactsObjects; } });
|
|
22
22
|
const artifacts_rules_1 = require("./artifacts_rules");
|
package/build/src/lsp/help.js
CHANGED
|
@@ -9,13 +9,13 @@ const dump_scope_1 = require("./dump_scope");
|
|
|
9
9
|
class Help {
|
|
10
10
|
static find(reg, textDocument, position) {
|
|
11
11
|
let content = "";
|
|
12
|
-
content = `
|
|
13
|
-
<a href="#_tokens" rel="no-refresh">Tokens</a> |
|
|
14
|
-
<a href="#_statements" rel="no-refresh">Statements</a> |
|
|
15
|
-
<a href="#_structure" rel="no-refresh">Structure</a> |
|
|
16
|
-
<a href="#_files" rel="no-refresh">Files</a> |
|
|
17
|
-
<a href="#_info" rel="no-refresh">Info Dump</a>
|
|
18
|
-
<hr>
|
|
12
|
+
content = `
|
|
13
|
+
<a href="#_tokens" rel="no-refresh">Tokens</a> |
|
|
14
|
+
<a href="#_statements" rel="no-refresh">Statements</a> |
|
|
15
|
+
<a href="#_structure" rel="no-refresh">Structure</a> |
|
|
16
|
+
<a href="#_files" rel="no-refresh">Files</a> |
|
|
17
|
+
<a href="#_info" rel="no-refresh">Info Dump</a>
|
|
18
|
+
<hr>
|
|
19
19
|
` +
|
|
20
20
|
"<tt>" + textDocument.uri + " (" +
|
|
21
21
|
(position.line + 1) + ", " +
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DataDefinition = void 0;
|
|
4
4
|
const basic_1 = require("../abap/types/basic");
|
|
5
|
+
const cds_parser_1 = require("../cds/cds_parser");
|
|
6
|
+
const expressions_1 = require("../cds/expressions");
|
|
5
7
|
const _abstract_object_1 = require("./_abstract_object");
|
|
6
8
|
class DataDefinition extends _abstract_object_1.AbstractObject {
|
|
7
9
|
constructor() {
|
|
8
10
|
super(...arguments);
|
|
9
11
|
this.sqlViewName = undefined;
|
|
12
|
+
this.parserError = undefined;
|
|
13
|
+
this.fieldNames = [];
|
|
14
|
+
this.sources = [];
|
|
10
15
|
}
|
|
11
16
|
getType() {
|
|
12
17
|
return "DDLS";
|
|
@@ -25,23 +30,82 @@ class DataDefinition extends _abstract_object_1.AbstractObject {
|
|
|
25
30
|
return undefined;
|
|
26
31
|
}
|
|
27
32
|
parseType(_reg) {
|
|
28
|
-
|
|
33
|
+
this.parse();
|
|
34
|
+
if (this.fieldNames.length === 0) {
|
|
35
|
+
return new basic_1.VoidType("DDLS:todo");
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const components = [];
|
|
39
|
+
for (const f of this.fieldNames) {
|
|
40
|
+
components.push({
|
|
41
|
+
name: f,
|
|
42
|
+
type: new basic_1.VoidType("DDLS:fieldname"),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return new basic_1.StructureType(components);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
listSources() {
|
|
49
|
+
return this.sources;
|
|
29
50
|
}
|
|
30
51
|
setDirty() {
|
|
31
52
|
this.sqlViewName = undefined;
|
|
53
|
+
this.parserError = undefined;
|
|
54
|
+
this.fieldNames = [];
|
|
55
|
+
this.sources = [];
|
|
32
56
|
super.setDirty();
|
|
33
57
|
}
|
|
58
|
+
findSourceFile() {
|
|
59
|
+
return this.getFiles().find(f => f.getFilename().endsWith(".asddls"));
|
|
60
|
+
}
|
|
61
|
+
hasParserError() {
|
|
62
|
+
return this.parserError;
|
|
63
|
+
}
|
|
34
64
|
parse() {
|
|
65
|
+
var _a;
|
|
35
66
|
if (this.isDirty() === false) {
|
|
36
67
|
return { updated: false, runtime: 0 };
|
|
37
68
|
}
|
|
69
|
+
const start = Date.now();
|
|
38
70
|
this.sqlViewName = undefined;
|
|
39
|
-
const
|
|
40
|
-
const match = asddls === null || asddls === void 0 ? void 0 : asddls.getRaw().match(/@AbapCatalog\.sqlViewName: '(\w+)'/);
|
|
71
|
+
const match = (_a = this.findSourceFile()) === null || _a === void 0 ? void 0 : _a.getRaw().match(/@AbapCatalog\.sqlViewName: '(\w+)'/);
|
|
41
72
|
if (match) {
|
|
42
73
|
this.sqlViewName = match[1].toUpperCase();
|
|
43
74
|
}
|
|
44
|
-
|
|
75
|
+
const tree = new cds_parser_1.CDSParser().parse(this.findSourceFile());
|
|
76
|
+
if (tree) {
|
|
77
|
+
this.findFieldNames(tree);
|
|
78
|
+
this.findSources(tree);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.parserError = true;
|
|
82
|
+
}
|
|
83
|
+
const end = Date.now();
|
|
84
|
+
this.dirty = false;
|
|
85
|
+
return { updated: true, runtime: end - start };
|
|
86
|
+
}
|
|
87
|
+
findFieldNames(tree) {
|
|
88
|
+
var _a;
|
|
89
|
+
this.fieldNames = [];
|
|
90
|
+
for (const e of tree.findAllExpressions(expressions_1.CDSElement)) {
|
|
91
|
+
let found = (_a = e.findDirectExpression(expressions_1.CDSAs)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(expressions_1.CDSName);
|
|
92
|
+
if (found === undefined) {
|
|
93
|
+
found = e.findDirectExpression(expressions_1.CDSName);
|
|
94
|
+
}
|
|
95
|
+
if (found === undefined) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
this.fieldNames.push(found === null || found === void 0 ? void 0 : found.concatTokens());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
findSources(tree) {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
this.sources = [];
|
|
104
|
+
for (const e of tree.findAllExpressions(expressions_1.CDSSource)) {
|
|
105
|
+
const name = e.getFirstToken().getStr();
|
|
106
|
+
const as = (_b = (_a = e.findDirectExpression(expressions_1.CDSAs)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(expressions_1.CDSName)) === null || _b === void 0 ? void 0 : _b.getFirstToken().getStr();
|
|
107
|
+
this.sources.push({ name, as });
|
|
108
|
+
}
|
|
45
109
|
}
|
|
46
110
|
}
|
|
47
111
|
exports.DataDefinition = DataDefinition;
|
package/build/src/registry.js
CHANGED
|
@@ -17,7 +17,9 @@ class SevenBitAscii {
|
|
|
17
17
|
key: "7bit_ascii",
|
|
18
18
|
title: "Check for 7bit ascii",
|
|
19
19
|
shortDescription: `Only allow characters from the 7bit ASCII set.`,
|
|
20
|
-
extendedInformation: `https://docs.abapopenchecks.org/checks/05
|
|
20
|
+
extendedInformation: `https://docs.abapopenchecks.org/checks/05/
|
|
21
|
+
|
|
22
|
+
Checkes files with extension ".abap" and ".asddls"`,
|
|
21
23
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
22
24
|
};
|
|
23
25
|
}
|
|
@@ -33,7 +35,8 @@ class SevenBitAscii {
|
|
|
33
35
|
run(obj) {
|
|
34
36
|
const output = [];
|
|
35
37
|
for (const file of obj.getFiles()) {
|
|
36
|
-
|
|
38
|
+
const filename = file.getFilename();
|
|
39
|
+
if (filename.endsWith(".abap") || filename.endsWith(".asddls")) {
|
|
37
40
|
const rows = file.getRawRows();
|
|
38
41
|
for (let i = 0; i < rows.length; i++) {
|
|
39
42
|
const found = /[\u007f-\uffff]/.exec(rows[i]);
|
|
@@ -23,7 +23,7 @@ class Abapdoc extends _abap_rule_1.ABAPRule {
|
|
|
23
23
|
return {
|
|
24
24
|
key: "abapdoc",
|
|
25
25
|
title: "Check abapdoc",
|
|
26
|
-
shortDescription: `Various checks regarding abapdoc.
|
|
26
|
+
shortDescription: `Various checks regarding abapdoc.
|
|
27
27
|
Base rule checks for existence of abapdoc for public class methods and all interface methods.`,
|
|
28
28
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
29
29
|
};
|
|
@@ -20,42 +20,42 @@ class AlignParameters extends _abap_rule_1.ABAPRule {
|
|
|
20
20
|
key: "align_parameters",
|
|
21
21
|
title: "Align Parameters",
|
|
22
22
|
shortDescription: `Checks for vertially aligned parameters`,
|
|
23
|
-
extendedInformation: `Checks:
|
|
24
|
-
* function module calls
|
|
25
|
-
* method calls
|
|
26
|
-
* VALUE constructors
|
|
27
|
-
* NEW constructors
|
|
28
|
-
* RAISE EXCEPTION statements
|
|
29
|
-
* CREATE OBJECT statements
|
|
30
|
-
* RAISE EVENT statements
|
|
31
|
-
|
|
32
|
-
https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#align-parameters
|
|
33
|
-
|
|
34
|
-
Does not take effect on non functional method calls, use https://rules.abaplint.org/functional_writing/
|
|
35
|
-
|
|
23
|
+
extendedInformation: `Checks:
|
|
24
|
+
* function module calls
|
|
25
|
+
* method calls
|
|
26
|
+
* VALUE constructors
|
|
27
|
+
* NEW constructors
|
|
28
|
+
* RAISE EXCEPTION statements
|
|
29
|
+
* CREATE OBJECT statements
|
|
30
|
+
* RAISE EVENT statements
|
|
31
|
+
|
|
32
|
+
https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#align-parameters
|
|
33
|
+
|
|
34
|
+
Does not take effect on non functional method calls, use https://rules.abaplint.org/functional_writing/
|
|
35
|
+
|
|
36
36
|
Also https://rules.abaplint.org/max_one_method_parameter_per_line/ can help aligning parameter syntax`,
|
|
37
37
|
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Styleguide],
|
|
38
|
-
badExample: `CALL FUNCTION 'FOOBAR'
|
|
39
|
-
EXPORTING
|
|
40
|
-
foo = 2
|
|
41
|
-
parameter = 3.
|
|
42
|
-
|
|
43
|
-
foobar( moo = 1
|
|
44
|
-
param = 1 ).
|
|
45
|
-
|
|
46
|
-
foo = VALUE #(
|
|
47
|
-
foo = bar
|
|
38
|
+
badExample: `CALL FUNCTION 'FOOBAR'
|
|
39
|
+
EXPORTING
|
|
40
|
+
foo = 2
|
|
41
|
+
parameter = 3.
|
|
42
|
+
|
|
43
|
+
foobar( moo = 1
|
|
44
|
+
param = 1 ).
|
|
45
|
+
|
|
46
|
+
foo = VALUE #(
|
|
47
|
+
foo = bar
|
|
48
48
|
moo = 2 ).`,
|
|
49
|
-
goodExample: `CALL FUNCTION 'FOOBAR'
|
|
50
|
-
EXPORTING
|
|
51
|
-
foo = 2
|
|
52
|
-
parameter = 3.
|
|
53
|
-
|
|
54
|
-
foobar( moo = 1
|
|
55
|
-
param = 1 ).
|
|
56
|
-
|
|
57
|
-
foo = VALUE #(
|
|
58
|
-
foo = bar
|
|
49
|
+
goodExample: `CALL FUNCTION 'FOOBAR'
|
|
50
|
+
EXPORTING
|
|
51
|
+
foo = 2
|
|
52
|
+
parameter = 3.
|
|
53
|
+
|
|
54
|
+
foobar( moo = 1
|
|
55
|
+
param = 1 ).
|
|
56
|
+
|
|
57
|
+
foo = VALUE #(
|
|
58
|
+
foo = bar
|
|
59
59
|
moo = 2 ).`,
|
|
60
60
|
};
|
|
61
61
|
}
|
|
@@ -20,14 +20,14 @@ class AmbiguousStatement extends _abap_rule_1.ABAPRule {
|
|
|
20
20
|
return {
|
|
21
21
|
key: "ambiguous_statement",
|
|
22
22
|
title: "Check for ambigious statements",
|
|
23
|
-
shortDescription: `Checks for ambiguity between deleting or modifying from internal and database table
|
|
24
|
-
Add "TABLE" keyword or "@" for escaping SQL variables
|
|
25
|
-
|
|
23
|
+
shortDescription: `Checks for ambiguity between deleting or modifying from internal and database table
|
|
24
|
+
Add "TABLE" keyword or "@" for escaping SQL variables
|
|
25
|
+
|
|
26
26
|
Only works if the target version is 740sp05 or above`,
|
|
27
27
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
28
|
-
badExample: `DELETE foo FROM bar.
|
|
28
|
+
badExample: `DELETE foo FROM bar.
|
|
29
29
|
MODIFY foo FROM bar.`,
|
|
30
|
-
goodExample: `DELETE foo FROM @bar.
|
|
30
|
+
goodExample: `DELETE foo FROM @bar.
|
|
31
31
|
MODIFY TABLE foo FROM bar.`,
|
|
32
32
|
};
|
|
33
33
|
}
|
|
@@ -35,12 +35,12 @@ class AvoidUse extends _abap_rule_1.ABAPRule {
|
|
|
35
35
|
key: "avoid_use",
|
|
36
36
|
title: "Avoid use of certain statements",
|
|
37
37
|
shortDescription: `Detects usage of certain statements.`,
|
|
38
|
-
extendedInformation: `DEFAULT KEY: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-default-key
|
|
39
|
-
|
|
40
|
-
Macros: https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenmacros_guidl.htm
|
|
41
|
-
|
|
42
|
-
STATICS: use CLASS-DATA instead
|
|
43
|
-
|
|
38
|
+
extendedInformation: `DEFAULT KEY: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-default-key
|
|
39
|
+
|
|
40
|
+
Macros: https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenmacros_guidl.htm
|
|
41
|
+
|
|
42
|
+
STATICS: use CLASS-DATA instead
|
|
43
|
+
|
|
44
44
|
DESCRIBE TABLE LINES: use lines() instead (quickfix exists)`,
|
|
45
45
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
46
46
|
};
|