@abaplint/cli 2.99.10 → 2.100.0

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.
Files changed (2) hide show
  1. package/build/cli.js +334 -150
  2. package/package.json +4 -3
package/build/cli.js CHANGED
@@ -19569,7 +19569,7 @@ BuiltIn.methods = [
19569
19569
  {
19570
19570
  name: "BOOLC",
19571
19571
  mandatory: {
19572
- "val": new basic_1.StringType(),
19572
+ "val": new basic_1.CLikeType(),
19573
19573
  },
19574
19574
  return: new basic_1.StringType(),
19575
19575
  version: version_1.Version.v702,
@@ -19577,7 +19577,7 @@ BuiltIn.methods = [
19577
19577
  {
19578
19578
  name: "BOOLX",
19579
19579
  mandatory: {
19580
- "bool": new basic_1.StringType(),
19580
+ "bool": new basic_1.CLikeType(),
19581
19581
  },
19582
19582
  optional: {
19583
19583
  "bit": new basic_1.IntegerType(),
@@ -19595,7 +19595,7 @@ BuiltIn.methods = [
19595
19595
  {
19596
19596
  name: "CHAR_OFF",
19597
19597
  mandatory: {
19598
- "val": new basic_1.StringType(),
19598
+ "val": new basic_1.CLikeType(),
19599
19599
  "add": new basic_1.IntegerType(),
19600
19600
  },
19601
19601
  optional: {
@@ -19607,23 +19607,23 @@ BuiltIn.methods = [
19607
19607
  {
19608
19608
  name: "CHARLEN",
19609
19609
  mandatory: {
19610
- "val": new basic_1.StringType(),
19610
+ "val": new basic_1.CLikeType(),
19611
19611
  },
19612
19612
  return: new basic_1.IntegerType(),
19613
19613
  },
19614
19614
  {
19615
19615
  name: "CMAX",
19616
19616
  mandatory: {
19617
- "val1": new basic_1.StringType(),
19618
- "val2": new basic_1.StringType(),
19617
+ "val1": new basic_1.CLikeType(),
19618
+ "val2": new basic_1.CLikeType(),
19619
19619
  },
19620
19620
  optional: {
19621
- "val3": new basic_1.StringType(),
19622
- "val4": new basic_1.StringType(),
19623
- "val5": new basic_1.StringType(),
19624
- "val6": new basic_1.StringType(),
19625
- "val7": new basic_1.StringType(),
19626
- "val9": new basic_1.StringType(),
19621
+ "val3": new basic_1.CLikeType(),
19622
+ "val4": new basic_1.CLikeType(),
19623
+ "val5": new basic_1.CLikeType(),
19624
+ "val6": new basic_1.CLikeType(),
19625
+ "val7": new basic_1.CLikeType(),
19626
+ "val9": new basic_1.CLikeType(),
19627
19627
  },
19628
19628
  return: new basic_1.StringType(),
19629
19629
  version: version_1.Version.v702,
@@ -19631,16 +19631,16 @@ BuiltIn.methods = [
19631
19631
  {
19632
19632
  name: "CMIN",
19633
19633
  mandatory: {
19634
- "val1": new basic_1.StringType(),
19635
- "val2": new basic_1.StringType(),
19634
+ "val1": new basic_1.CLikeType(),
19635
+ "val2": new basic_1.CLikeType(),
19636
19636
  },
19637
19637
  optional: {
19638
- "val3": new basic_1.StringType(),
19639
- "val4": new basic_1.StringType(),
19640
- "val5": new basic_1.StringType(),
19641
- "val6": new basic_1.StringType(),
19642
- "val7": new basic_1.StringType(),
19643
- "val9": new basic_1.StringType(),
19638
+ "val3": new basic_1.CLikeType(),
19639
+ "val4": new basic_1.CLikeType(),
19640
+ "val5": new basic_1.CLikeType(),
19641
+ "val6": new basic_1.CLikeType(),
19642
+ "val7": new basic_1.CLikeType(),
19643
+ "val9": new basic_1.CLikeType(),
19644
19644
  },
19645
19645
  return: new basic_1.StringType(),
19646
19646
  version: version_1.Version.v702,
@@ -19651,7 +19651,7 @@ BuiltIn.methods = [
19651
19651
  "table": new basic_1.TableType(new basic_1.AnyType(), { withHeader: false, keyType: basic_1.TableKeyType.default }),
19652
19652
  },
19653
19653
  optional: {
19654
- "sep": new basic_1.StringType(),
19654
+ "sep": new basic_1.CLikeType(),
19655
19655
  },
19656
19656
  return: new basic_1.StringType(),
19657
19657
  version: version_1.Version.v702,
@@ -19659,12 +19659,12 @@ BuiltIn.methods = [
19659
19659
  {
19660
19660
  name: "CONDENSE",
19661
19661
  mandatory: {
19662
- "val": new basic_1.StringType(),
19662
+ "val": new basic_1.CLikeType(),
19663
19663
  },
19664
19664
  optional: {
19665
- "del": new basic_1.StringType(),
19666
- "from": new basic_1.StringType(),
19667
- "to": new basic_1.StringType(),
19665
+ "del": new basic_1.CLikeType(),
19666
+ "from": new basic_1.CLikeType(),
19667
+ "to": new basic_1.CLikeType(),
19668
19668
  },
19669
19669
  return: new basic_1.StringType(),
19670
19670
  version: version_1.Version.v702,
@@ -19672,14 +19672,14 @@ BuiltIn.methods = [
19672
19672
  {
19673
19673
  name: "CONTAINS",
19674
19674
  mandatory: {
19675
- "val": new basic_1.StringType(),
19675
+ "val": new basic_1.CLikeType(),
19676
19676
  },
19677
19677
  optional: {
19678
- "sub": new basic_1.StringType(),
19679
- "start": new basic_1.StringType(),
19680
- "end": new basic_1.StringType(),
19681
- "regex": new basic_1.StringType(),
19682
- "pcre": new basic_1.StringType(),
19678
+ "sub": new basic_1.CLikeType(),
19679
+ "start": new basic_1.CLikeType(),
19680
+ "end": new basic_1.CLikeType(),
19681
+ "regex": new basic_1.CLikeType(),
19682
+ "pcre": new basic_1.CLikeType(),
19683
19683
  "case": new basic_1.CharacterType(1),
19684
19684
  "off": new basic_1.IntegerType(),
19685
19685
  "len": new basic_1.IntegerType(),
@@ -19692,12 +19692,12 @@ BuiltIn.methods = [
19692
19692
  {
19693
19693
  name: "CONTAINS_ANY_NOT_OF",
19694
19694
  mandatory: {
19695
- "val": new basic_1.StringType(),
19695
+ "val": new basic_1.CLikeType(),
19696
19696
  },
19697
19697
  optional: {
19698
- "sub": new basic_1.StringType(),
19699
- "start": new basic_1.StringType(),
19700
- "end": new basic_1.StringType(),
19698
+ "sub": new basic_1.CLikeType(),
19699
+ "start": new basic_1.CLikeType(),
19700
+ "end": new basic_1.CLikeType(),
19701
19701
  "off": new basic_1.IntegerType(),
19702
19702
  "len": new basic_1.IntegerType(),
19703
19703
  "occ": new basic_1.IntegerType(),
@@ -19708,12 +19708,12 @@ BuiltIn.methods = [
19708
19708
  {
19709
19709
  name: "CONTAINS_ANY_OF",
19710
19710
  mandatory: {
19711
- "val": new basic_1.StringType(),
19711
+ "val": new basic_1.CLikeType(),
19712
19712
  },
19713
19713
  optional: {
19714
- "sub": new basic_1.StringType(),
19715
- "start": new basic_1.StringType(),
19716
- "end": new basic_1.StringType(),
19714
+ "sub": new basic_1.CLikeType(),
19715
+ "start": new basic_1.CLikeType(),
19716
+ "end": new basic_1.CLikeType(),
19717
19717
  "off": new basic_1.IntegerType(),
19718
19718
  "len": new basic_1.IntegerType(),
19719
19719
  "occ": new basic_1.IntegerType(),
@@ -19739,12 +19739,12 @@ BuiltIn.methods = [
19739
19739
  {
19740
19740
  name: "COUNT",
19741
19741
  mandatory: {
19742
- "val": new basic_1.StringType(),
19742
+ "val": new basic_1.CLikeType(),
19743
19743
  },
19744
19744
  optional: {
19745
- "sub": new basic_1.StringType(),
19746
- "regex": new basic_1.StringType(),
19747
- "pcre": new basic_1.StringType(),
19745
+ "sub": new basic_1.CLikeType(),
19746
+ "regex": new basic_1.CLikeType(),
19747
+ "pcre": new basic_1.CLikeType(),
19748
19748
  "case": new basic_1.CharacterType(1),
19749
19749
  "off": new basic_1.IntegerType(),
19750
19750
  "len": new basic_1.IntegerType(),
@@ -19755,12 +19755,12 @@ BuiltIn.methods = [
19755
19755
  {
19756
19756
  name: "COUNT_ANY_NOT_OF",
19757
19757
  mandatory: {
19758
- "val": new basic_1.StringType(),
19758
+ "val": new basic_1.CLikeType(),
19759
19759
  },
19760
19760
  optional: {
19761
- "sub": new basic_1.StringType(),
19762
- "regex": new basic_1.StringType(),
19763
- "pcre": new basic_1.StringType(),
19761
+ "sub": new basic_1.CLikeType(),
19762
+ "regex": new basic_1.CLikeType(),
19763
+ "pcre": new basic_1.CLikeType(),
19764
19764
  "case": new basic_1.CharacterType(1),
19765
19765
  "off": new basic_1.IntegerType(),
19766
19766
  "len": new basic_1.IntegerType(),
@@ -19771,12 +19771,12 @@ BuiltIn.methods = [
19771
19771
  {
19772
19772
  name: "COUNT_ANY_OF",
19773
19773
  mandatory: {
19774
- "val": new basic_1.StringType(),
19774
+ "val": new basic_1.CLikeType(),
19775
19775
  },
19776
19776
  optional: {
19777
- "sub": new basic_1.StringType(),
19778
- "regex": new basic_1.StringType(),
19779
- "pcre": new basic_1.StringType(),
19777
+ "sub": new basic_1.CLikeType(),
19778
+ "regex": new basic_1.CLikeType(),
19779
+ "pcre": new basic_1.CLikeType(),
19780
19780
  "case": new basic_1.CharacterType(1),
19781
19781
  "off": new basic_1.IntegerType(),
19782
19782
  "len": new basic_1.IntegerType(),
@@ -19787,15 +19787,15 @@ BuiltIn.methods = [
19787
19787
  {
19788
19788
  name: "DBMAXLEN",
19789
19789
  mandatory: {
19790
- "val": new basic_1.StringType(),
19790
+ "val": new basic_1.CLikeType(),
19791
19791
  },
19792
19792
  return: new basic_1.IntegerType(),
19793
19793
  },
19794
19794
  {
19795
19795
  name: "DISTANCE",
19796
19796
  mandatory: {
19797
- "val1": new basic_1.StringType(),
19798
- "val2": new basic_1.StringType(),
19797
+ "val1": new basic_1.CLikeType(),
19798
+ "val2": new basic_1.CLikeType(),
19799
19799
  },
19800
19800
  return: new basic_1.IntegerType(),
19801
19801
  version: version_1.Version.v702,
@@ -19803,8 +19803,8 @@ BuiltIn.methods = [
19803
19803
  {
19804
19804
  name: "ESCAPE",
19805
19805
  mandatory: {
19806
- "val": new basic_1.StringType(),
19807
- "format": new basic_1.StringType(),
19806
+ "val": new basic_1.CLikeType(),
19807
+ "format": new basic_1.CLikeType(),
19808
19808
  },
19809
19809
  return: new basic_1.StringType(),
19810
19810
  version: version_1.Version.v702,
@@ -19819,12 +19819,12 @@ BuiltIn.methods = [
19819
19819
  {
19820
19820
  name: "FIND",
19821
19821
  mandatory: {
19822
- "val": new basic_1.StringType(),
19822
+ "val": new basic_1.CLikeType(),
19823
19823
  },
19824
19824
  optional: {
19825
- "sub": new basic_1.StringType(),
19826
- "regex": new basic_1.StringType(),
19827
- "pcre": new basic_1.StringType(),
19825
+ "sub": new basic_1.CLikeType(),
19826
+ "regex": new basic_1.CLikeType(),
19827
+ "pcre": new basic_1.CLikeType(),
19828
19828
  "case": new basic_1.CharacterType(1),
19829
19829
  "off": new basic_1.IntegerType(),
19830
19830
  "len": new basic_1.IntegerType(),
@@ -19836,10 +19836,10 @@ BuiltIn.methods = [
19836
19836
  {
19837
19837
  name: "FIND_ANY_NOT_OF",
19838
19838
  mandatory: {
19839
- "val": new basic_1.StringType(),
19839
+ "val": new basic_1.CLikeType(),
19840
19840
  },
19841
19841
  optional: {
19842
- "sub": new basic_1.StringType(),
19842
+ "sub": new basic_1.CLikeType(),
19843
19843
  "off": new basic_1.IntegerType(),
19844
19844
  "len": new basic_1.IntegerType(),
19845
19845
  "occ": new basic_1.IntegerType(),
@@ -19850,10 +19850,10 @@ BuiltIn.methods = [
19850
19850
  {
19851
19851
  name: "FIND_ANY_OF",
19852
19852
  mandatory: {
19853
- "val": new basic_1.StringType(),
19853
+ "val": new basic_1.CLikeType(),
19854
19854
  },
19855
19855
  optional: {
19856
- "sub": new basic_1.StringType(),
19856
+ "sub": new basic_1.CLikeType(),
19857
19857
  "off": new basic_1.IntegerType(),
19858
19858
  "len": new basic_1.IntegerType(),
19859
19859
  "occ": new basic_1.IntegerType(),
@@ -19864,12 +19864,12 @@ BuiltIn.methods = [
19864
19864
  {
19865
19865
  name: "FIND_END",
19866
19866
  mandatory: {
19867
- "val": new basic_1.StringType(),
19867
+ "val": new basic_1.CLikeType(),
19868
19868
  },
19869
19869
  optional: {
19870
- "sub": new basic_1.StringType(),
19871
- "regex": new basic_1.StringType(),
19872
- "pcre": new basic_1.StringType(),
19870
+ "sub": new basic_1.CLikeType(),
19871
+ "regex": new basic_1.CLikeType(),
19872
+ "pcre": new basic_1.CLikeType(),
19873
19873
  "case": new basic_1.CharacterType(1),
19874
19874
  "off": new basic_1.IntegerType(),
19875
19875
  "len": new basic_1.IntegerType(),
@@ -19894,7 +19894,9 @@ BuiltIn.methods = [
19894
19894
  },
19895
19895
  {
19896
19896
  name: "FROM_MIXED",
19897
- mandatory: { "val": new basic_1.StringType() },
19897
+ mandatory: {
19898
+ "val": new basic_1.CLikeType()
19899
+ },
19898
19900
  optional: {
19899
19901
  "case": new basic_1.CharacterType(1),
19900
19902
  "sep": new basic_1.IntegerType(),
@@ -19906,8 +19908,8 @@ BuiltIn.methods = [
19906
19908
  {
19907
19909
  name: "INSERT",
19908
19910
  mandatory: {
19909
- "val": new basic_1.StringType(),
19910
- "sub": new basic_1.StringType(),
19911
+ "val": new basic_1.CLikeType(),
19912
+ "sub": new basic_1.CLikeType(),
19911
19913
  },
19912
19914
  optional: {
19913
19915
  "off": new basic_1.IntegerType(),
@@ -19936,7 +19938,7 @@ BuiltIn.methods = [
19936
19938
  {
19937
19939
  name: "LINE_INDEX",
19938
19940
  mandatory: {
19939
- "val": new basic_1.StringType(),
19941
+ "val": new basic_1.CLikeType(),
19940
19942
  },
19941
19943
  return: new basic_1.IntegerType(),
19942
19944
  version: version_1.Version.v740sp02,
@@ -19965,11 +19967,11 @@ BuiltIn.methods = [
19965
19967
  {
19966
19968
  name: "MATCH",
19967
19969
  mandatory: {
19968
- "val": new basic_1.StringType(),
19970
+ "val": new basic_1.CLikeType(),
19969
19971
  }, optional: {
19970
19972
  "case": new basic_1.CharacterType(1),
19971
- "regex": new basic_1.StringType(),
19972
- "pcre": new basic_1.StringType(),
19973
+ "regex": new basic_1.CLikeType(),
19974
+ "pcre": new basic_1.CLikeType(),
19973
19975
  "occ": new basic_1.IntegerType(),
19974
19976
  },
19975
19977
  return: new basic_1.StringType(),
@@ -19978,12 +19980,12 @@ BuiltIn.methods = [
19978
19980
  {
19979
19981
  name: "MATCHES",
19980
19982
  mandatory: {
19981
- "val": new basic_1.StringType(),
19983
+ "val": new basic_1.CLikeType(),
19982
19984
  },
19983
19985
  optional: {
19984
19986
  "case": new basic_1.CharacterType(1),
19985
- "regex": new basic_1.StringType(),
19986
- "pcre": new basic_1.StringType(),
19987
+ "regex": new basic_1.CLikeType(),
19988
+ "pcre": new basic_1.CLikeType(),
19987
19989
  "off": new basic_1.IntegerType(),
19988
19990
  "len": new basic_1.IntegerType(),
19989
19991
  },
@@ -19994,17 +19996,17 @@ BuiltIn.methods = [
19994
19996
  {
19995
19997
  name: "NMAX",
19996
19998
  mandatory: {
19997
- "val1": new basic_1.StringType(),
19998
- "val2": new basic_1.StringType(),
19999
+ "val1": new basic_1.CLikeType(),
20000
+ "val2": new basic_1.CLikeType(),
19999
20001
  },
20000
20002
  optional: {
20001
- "val3": new basic_1.StringType(),
20002
- "val4": new basic_1.StringType(),
20003
- "val5": new basic_1.StringType(),
20004
- "val6": new basic_1.StringType(),
20005
- "val7": new basic_1.StringType(),
20006
- "val8": new basic_1.StringType(),
20007
- "val9": new basic_1.StringType(),
20003
+ "val3": new basic_1.CLikeType(),
20004
+ "val4": new basic_1.CLikeType(),
20005
+ "val5": new basic_1.CLikeType(),
20006
+ "val6": new basic_1.CLikeType(),
20007
+ "val7": new basic_1.CLikeType(),
20008
+ "val8": new basic_1.CLikeType(),
20009
+ "val9": new basic_1.CLikeType(),
20008
20010
  },
20009
20011
  return: new basic_1.IntegerType(),
20010
20012
  version: version_1.Version.v702,
@@ -20012,17 +20014,17 @@ BuiltIn.methods = [
20012
20014
  {
20013
20015
  name: "NMIN",
20014
20016
  mandatory: {
20015
- "val1": new basic_1.StringType(),
20016
- "val2": new basic_1.StringType(),
20017
+ "val1": new basic_1.CLikeType(),
20018
+ "val2": new basic_1.CLikeType(),
20017
20019
  },
20018
20020
  optional: {
20019
- "val3": new basic_1.StringType(),
20020
- "val4": new basic_1.StringType(),
20021
- "val5": new basic_1.StringType(),
20022
- "val6": new basic_1.StringType(),
20023
- "val7": new basic_1.StringType(),
20024
- "val8": new basic_1.StringType(),
20025
- "val9": new basic_1.StringType(),
20021
+ "val3": new basic_1.CLikeType(),
20022
+ "val4": new basic_1.CLikeType(),
20023
+ "val5": new basic_1.CLikeType(),
20024
+ "val6": new basic_1.CLikeType(),
20025
+ "val7": new basic_1.CLikeType(),
20026
+ "val8": new basic_1.CLikeType(),
20027
+ "val9": new basic_1.CLikeType(),
20026
20028
  },
20027
20029
  return: new basic_1.IntegerType(),
20028
20030
  version: version_1.Version.v702,
@@ -20030,14 +20032,14 @@ BuiltIn.methods = [
20030
20032
  {
20031
20033
  name: "NUMOFCHAR",
20032
20034
  mandatory: {
20033
- "val": new basic_1.StringType(),
20035
+ "val": new basic_1.CLikeType(),
20034
20036
  },
20035
20037
  return: new basic_1.IntegerType(),
20036
20038
  },
20037
20039
  {
20038
20040
  name: "REPEAT",
20039
20041
  mandatory: {
20040
- "val": new basic_1.StringType(),
20042
+ "val": new basic_1.CLikeType(),
20041
20043
  "occ": new basic_1.IntegerType(),
20042
20044
  },
20043
20045
  return: new basic_1.StringType(),
@@ -20046,13 +20048,13 @@ BuiltIn.methods = [
20046
20048
  {
20047
20049
  name: "REPLACE",
20048
20050
  mandatory: {
20049
- "val": new basic_1.StringType(),
20050
- "with": new basic_1.StringType(),
20051
+ "val": new basic_1.CLikeType(),
20052
+ "with": new basic_1.CLikeType(),
20051
20053
  },
20052
20054
  optional: {
20053
- "sub": new basic_1.StringType(),
20054
- "regex": new basic_1.StringType(),
20055
- "pcre": new basic_1.StringType(),
20055
+ "sub": new basic_1.CLikeType(),
20056
+ "regex": new basic_1.CLikeType(),
20057
+ "pcre": new basic_1.CLikeType(),
20056
20058
  "case": new basic_1.CharacterType(1),
20057
20059
  "off": new basic_1.IntegerType(),
20058
20060
  "len": new basic_1.IntegerType(),
@@ -20077,7 +20079,7 @@ BuiltIn.methods = [
20077
20079
  {
20078
20080
  name: "REVERSE",
20079
20081
  mandatory: {
20080
- "val": new basic_1.StringType(),
20082
+ "val": new basic_1.CLikeType(),
20081
20083
  },
20082
20084
  return: new basic_1.StringType(),
20083
20085
  version: version_1.Version.v702,
@@ -20098,12 +20100,12 @@ BuiltIn.methods = [
20098
20100
  {
20099
20101
  name: "SEGMENT",
20100
20102
  mandatory: {
20101
- "val": new basic_1.StringType(),
20103
+ "val": new basic_1.CLikeType(),
20102
20104
  "index": new basic_1.IntegerType(),
20103
20105
  },
20104
20106
  optional: {
20105
- "sep": new basic_1.StringType(),
20106
- "space": new basic_1.StringType(),
20107
+ "sep": new basic_1.CLikeType(),
20108
+ "space": new basic_1.CLikeType(),
20107
20109
  },
20108
20110
  return: new basic_1.StringType(),
20109
20111
  version: version_1.Version.v702,
@@ -20111,10 +20113,10 @@ BuiltIn.methods = [
20111
20113
  {
20112
20114
  name: "SHIFT_LEFT",
20113
20115
  mandatory: {
20114
- "val": new basic_1.StringType(),
20116
+ "val": new basic_1.CLikeType(),
20115
20117
  },
20116
20118
  optional: {
20117
- "sub": new basic_1.StringType(),
20119
+ "sub": new basic_1.CLikeType(),
20118
20120
  "places": new basic_1.IntegerType(),
20119
20121
  "circular": new basic_1.IntegerType(),
20120
20122
  },
@@ -20124,10 +20126,10 @@ BuiltIn.methods = [
20124
20126
  {
20125
20127
  name: "SHIFT_RIGHT",
20126
20128
  mandatory: {
20127
- "val": new basic_1.StringType(),
20129
+ "val": new basic_1.CLikeType(),
20128
20130
  },
20129
20131
  optional: {
20130
- "sub": new basic_1.StringType(),
20132
+ "sub": new basic_1.CLikeType(),
20131
20133
  "places": new basic_1.IntegerType(),
20132
20134
  "circular": new basic_1.IntegerType(),
20133
20135
  },
@@ -20187,9 +20189,9 @@ BuiltIn.methods = [
20187
20189
  "val": new basic_1.CLikeType(),
20188
20190
  },
20189
20191
  optional: {
20190
- "sub": new basic_1.StringType(),
20191
- "regex": new basic_1.StringType(),
20192
- "pcre": new basic_1.StringType(),
20192
+ "sub": new basic_1.CLikeType(),
20193
+ "regex": new basic_1.CLikeType(),
20194
+ "pcre": new basic_1.CLikeType(),
20193
20195
  "case": new basic_1.CharacterType(1),
20194
20196
  "len": new basic_1.IntegerType(),
20195
20197
  "occ": new basic_1.IntegerType(),
@@ -20203,9 +20205,9 @@ BuiltIn.methods = [
20203
20205
  "val": new basic_1.CLikeType(),
20204
20206
  },
20205
20207
  optional: {
20206
- "sub": new basic_1.StringType(),
20207
- "regex": new basic_1.StringType(),
20208
- "pcre": new basic_1.StringType(),
20208
+ "sub": new basic_1.CLikeType(),
20209
+ "regex": new basic_1.CLikeType(),
20210
+ "pcre": new basic_1.CLikeType(),
20209
20211
  "case": new basic_1.CharacterType(1),
20210
20212
  "len": new basic_1.IntegerType(),
20211
20213
  "occ": new basic_1.IntegerType(),
@@ -20219,9 +20221,9 @@ BuiltIn.methods = [
20219
20221
  "val": new basic_1.CLikeType(),
20220
20222
  },
20221
20223
  optional: {
20222
- "sub": new basic_1.StringType(),
20223
- "regex": new basic_1.StringType(),
20224
- "pcre": new basic_1.StringType(),
20224
+ "sub": new basic_1.CLikeType(),
20225
+ "regex": new basic_1.CLikeType(),
20226
+ "pcre": new basic_1.CLikeType(),
20225
20227
  "case": new basic_1.CharacterType(1),
20226
20228
  "len": new basic_1.IntegerType(),
20227
20229
  "occ": new basic_1.IntegerType(),
@@ -20235,9 +20237,9 @@ BuiltIn.methods = [
20235
20237
  "val": new basic_1.CLikeType(),
20236
20238
  },
20237
20239
  optional: {
20238
- "sub": new basic_1.StringType(),
20239
- "regex": new basic_1.StringType(),
20240
- "pcre": new basic_1.StringType(),
20240
+ "sub": new basic_1.CLikeType(),
20241
+ "regex": new basic_1.CLikeType(),
20242
+ "pcre": new basic_1.CLikeType(),
20241
20243
  "case": new basic_1.CharacterType(1),
20242
20244
  "len": new basic_1.IntegerType(),
20243
20245
  "occ": new basic_1.IntegerType(),
@@ -20262,7 +20264,7 @@ BuiltIn.methods = [
20262
20264
  {
20263
20265
  name: "TO_LOWER",
20264
20266
  mandatory: {
20265
- "val": new basic_1.StringType(),
20267
+ "val": new basic_1.CLikeType(),
20266
20268
  },
20267
20269
  return: new basic_1.StringType(),
20268
20270
  version: version_1.Version.v702,
@@ -20270,7 +20272,7 @@ BuiltIn.methods = [
20270
20272
  {
20271
20273
  name: "TO_MIXED",
20272
20274
  mandatory: {
20273
- "val": new basic_1.StringType(),
20275
+ "val": new basic_1.CLikeType(),
20274
20276
  },
20275
20277
  optional: {
20276
20278
  "case": new basic_1.CharacterType(1),
@@ -20282,16 +20284,16 @@ BuiltIn.methods = [
20282
20284
  },
20283
20285
  {
20284
20286
  name: "TO_UPPER",
20285
- mandatory: { "val": new basic_1.StringType() },
20287
+ mandatory: { "val": new basic_1.CLikeType() },
20286
20288
  return: new basic_1.StringType(),
20287
20289
  version: version_1.Version.v702,
20288
20290
  },
20289
20291
  {
20290
20292
  name: "TRANSLATE",
20291
20293
  mandatory: {
20292
- "val": new basic_1.StringType(),
20293
- "from": new basic_1.StringType(),
20294
- "to": new basic_1.StringType(),
20294
+ "val": new basic_1.CLikeType(),
20295
+ "from": new basic_1.CLikeType(),
20296
+ "to": new basic_1.CLikeType(),
20295
20297
  },
20296
20298
  return: new basic_1.StringType(),
20297
20299
  version: version_1.Version.v702,
@@ -20334,7 +20336,7 @@ BuiltIn.methods = [
20334
20336
  {
20335
20337
  name: "XSDBOOL",
20336
20338
  mandatory: {
20337
- "val": new basic_1.StringType(),
20339
+ "val": new basic_1.CLikeType(),
20338
20340
  },
20339
20341
  return: new basic_1.CharacterType(1),
20340
20342
  version: version_1.Version.v740sp08,
@@ -20685,6 +20687,9 @@ class CurrentScope {
20685
20687
  getDDICReferences() {
20686
20688
  return this.reg.getDDICReferences();
20687
20689
  }
20690
+ getMSAGReferences() {
20691
+ return this.reg.getMSAGReferences();
20692
+ }
20688
20693
  getParentObj() {
20689
20694
  return this.parentObj;
20690
20695
  }
@@ -21551,7 +21556,7 @@ class TypeUtils {
21551
21556
  return false;
21552
21557
  }
21553
21558
  isAssignableStrict(source, target) {
21554
- var _a, _b, _c, _d;
21559
+ var _a, _b, _c, _d, _e;
21555
21560
  /*
21556
21561
  console.dir(source);
21557
21562
  console.dir(target);
@@ -21569,16 +21574,22 @@ class TypeUtils {
21569
21574
  }
21570
21575
  return false;
21571
21576
  }
21577
+ else if (target instanceof basic_1.StringType) {
21578
+ if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
21579
+ return true;
21580
+ }
21581
+ return false;
21582
+ }
21572
21583
  }
21573
21584
  else if (source instanceof basic_1.HexType) {
21574
21585
  if (target instanceof basic_1.HexType) {
21575
- if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
21586
+ if (((_d = source.getAbstractTypeData()) === null || _d === void 0 ? void 0 : _d.derivedFromConstant) === true) {
21576
21587
  return source.getLength() <= target.getLength();
21577
21588
  }
21578
21589
  return source.getLength() === target.getLength();
21579
21590
  }
21580
21591
  else if (target instanceof basic_1.IntegerType) {
21581
- if (((_d = source.getAbstractTypeData()) === null || _d === void 0 ? void 0 : _d.derivedFromConstant) === true) {
21592
+ if (((_e = source.getAbstractTypeData()) === null || _e === void 0 ? void 0 : _e.derivedFromConstant) === true) {
21582
21593
  return true;
21583
21594
  }
21584
21595
  return false;
@@ -24234,9 +24245,26 @@ const Expressions = __webpack_require__(/*! ../../2_statements/expressions */ ".
24234
24245
  const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js");
24235
24246
  class MessageSource {
24236
24247
  runSyntax(node, scope, filename) {
24248
+ var _a, _b, _c, _d;
24237
24249
  for (const f of node.findDirectExpressions(Expressions.Source)) {
24238
24250
  new source_1.Source().runSyntax(f, scope, filename);
24239
24251
  }
24252
+ if (node.getFirstToken().getStr().toUpperCase() === "ID") {
24253
+ const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
24254
+ const number = (_b = node.findDirectExpression(Expressions.MessageNumber)) === null || _b === void 0 ? void 0 : _b.concatTokens();
24255
+ if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
24256
+ const messageClass = id.substring(1, id.length - 1).toUpperCase();
24257
+ scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
24258
+ }
24259
+ }
24260
+ else {
24261
+ const typeAndNumber = (_c = node.findDirectExpression(Expressions.MessageTypeAndNumber)) === null || _c === void 0 ? void 0 : _c.concatTokens();
24262
+ const messageNumber = typeAndNumber === null || typeAndNumber === void 0 ? void 0 : typeAndNumber.substring(1);
24263
+ const messageClass = (_d = node.findDirectExpression(Expressions.MessageClass)) === null || _d === void 0 ? void 0 : _d.concatTokens().toUpperCase();
24264
+ if (messageNumber && messageClass) {
24265
+ scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, messageNumber);
24266
+ }
24267
+ }
24240
24268
  }
24241
24269
  }
24242
24270
  exports.MessageSource = MessageSource;
@@ -31945,6 +31973,7 @@ class SyntaxLogic {
31945
31973
  }
31946
31974
  this.issues = [];
31947
31975
  this.reg.getDDICReferences().clear(this.object);
31976
+ this.reg.getMSAGReferences().clear(this.object);
31948
31977
  if (this.object instanceof objects_1.Program && this.object.isInclude()) {
31949
31978
  // todo, show some kind of error?
31950
31979
  return { issues: [], spaghetti: this.scope.pop(new position_1.Position(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER)) };
@@ -35979,21 +36008,21 @@ exports.InterfaceDefinition = InterfaceDefinition;
35979
36008
  Object.defineProperty(exports, "__esModule", ({ value: true }));
35980
36009
  exports.Message = void 0;
35981
36010
  class Message {
35982
- constructor(num, msg) {
35983
- this.num = num;
35984
- if (this.num === undefined) {
35985
- this.num = "";
36011
+ constructor(number, message) {
36012
+ this.number = number;
36013
+ if (this.number === undefined) {
36014
+ this.number = "";
35986
36015
  }
35987
- this.msg = msg;
35988
- if (this.msg === undefined) {
35989
- this.msg = "";
36016
+ this.message = message;
36017
+ if (this.message === undefined) {
36018
+ this.message = "";
35990
36019
  }
35991
36020
  }
35992
36021
  getNumber() {
35993
- return this.num;
36022
+ return this.number;
35994
36023
  }
35995
36024
  getMessage() {
35996
- return this.msg;
36025
+ return this.message;
35997
36026
  }
35998
36027
  getPlaceholderCount() {
35999
36028
  return (this.getMessage().match(/&/g) || []).length;
@@ -38308,10 +38337,11 @@ class DDICReferences {
38308
38337
  }
38309
38338
  }
38310
38339
  }
38311
- const newName = obj.getName().toUpperCase();
38312
- const newType = obj.getType();
38313
- if ((_b = this.nameTypeIndex[newName]) === null || _b === void 0 ? void 0 : _b[newType]) {
38314
- this.nameTypeIndex[newName][newType] = [];
38340
+ // remove from name + type index
38341
+ const name = obj.getName().toUpperCase();
38342
+ const type = obj.getType();
38343
+ if ((_b = this.nameTypeIndex[name]) === null || _b === void 0 ? void 0 : _b[type]) {
38344
+ this.nameTypeIndex[name][type] = [];
38315
38345
  }
38316
38346
  }
38317
38347
  listByFilename(filename, line) {
@@ -41076,6 +41106,65 @@ exports.Symbols = Symbols;
41076
41106
 
41077
41107
  /***/ }),
41078
41108
 
41109
+ /***/ "./node_modules/@abaplint/core/build/src/msag_references.js":
41110
+ /*!******************************************************************!*\
41111
+ !*** ./node_modules/@abaplint/core/build/src/msag_references.js ***!
41112
+ \******************************************************************/
41113
+ /***/ ((__unused_webpack_module, exports) => {
41114
+
41115
+ "use strict";
41116
+
41117
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
41118
+ exports.MSAGReferences = void 0;
41119
+ class MSAGReferences {
41120
+ constructor() {
41121
+ this.nameNumberIndex = {};
41122
+ this.filenameIndex = {};
41123
+ }
41124
+ addUsing(filename, token, messageClass, number) {
41125
+ if (this.filenameIndex[filename] === undefined) {
41126
+ this.filenameIndex[filename] = [];
41127
+ }
41128
+ this.filenameIndex[filename].push({
41129
+ token: token,
41130
+ messageClass: messageClass,
41131
+ number: number,
41132
+ });
41133
+ if (this.nameNumberIndex[messageClass] === undefined) {
41134
+ this.nameNumberIndex[messageClass] = {};
41135
+ }
41136
+ if (this.nameNumberIndex[messageClass][number] === undefined) {
41137
+ this.nameNumberIndex[messageClass][number] = [];
41138
+ }
41139
+ this.nameNumberIndex[messageClass][number].push({
41140
+ filename: filename,
41141
+ token: token,
41142
+ });
41143
+ }
41144
+ clear(obj) {
41145
+ for (const file of obj.getFiles()) {
41146
+ const filename = file.getFilename();
41147
+ for (const fIndex of this.filenameIndex[filename] || []) {
41148
+ // this should be okay for performance, each message should be referenced less than 10 times typically
41149
+ this.nameNumberIndex[fIndex.messageClass][fIndex.number] =
41150
+ this.nameNumberIndex[fIndex.messageClass][fIndex.number].filter(i => i.filename !== filename);
41151
+ }
41152
+ delete this.filenameIndex[filename];
41153
+ }
41154
+ }
41155
+ listByFilename(filename) {
41156
+ return this.filenameIndex[filename] || [];
41157
+ }
41158
+ listByMessage(messageClass, number) {
41159
+ var _a;
41160
+ return ((_a = this.nameNumberIndex[messageClass]) === null || _a === void 0 ? void 0 : _a[number]) || [];
41161
+ }
41162
+ }
41163
+ exports.MSAGReferences = MSAGReferences;
41164
+ //# sourceMappingURL=msag_references.js.map
41165
+
41166
+ /***/ }),
41167
+
41079
41168
  /***/ "./node_modules/@abaplint/core/build/src/objects/_abap_object.js":
41080
41169
  /*!***********************************************************************!*\
41081
41170
  !*** ./node_modules/@abaplint/core/build/src/objects/_abap_object.js ***!
@@ -44589,6 +44678,7 @@ class MessageClass extends _abstract_object_1.AbstractObject {
44589
44678
  return msg ? msg : [];
44590
44679
  }
44591
44680
  getByNumber(num) {
44681
+ // todo, optimize performance,
44592
44682
  for (const message of this.getMessages()) {
44593
44683
  if (message.getNumber() === num) {
44594
44684
  return message;
@@ -47550,6 +47640,7 @@ const find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global
47550
47640
  const excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ "./node_modules/@abaplint/core/build/src/utils/excludeHelper.js");
47551
47641
  const ddic_references_1 = __webpack_require__(/*! ./ddic_references */ "./node_modules/@abaplint/core/build/src/ddic_references.js");
47552
47642
  const rules_runner_1 = __webpack_require__(/*! ./rules_runner */ "./node_modules/@abaplint/core/build/src/rules_runner.js");
47643
+ const msag_references_1 = __webpack_require__(/*! ./msag_references */ "./node_modules/@abaplint/core/build/src/msag_references.js");
47553
47644
  // todo, this should really be an instance in case there are multiple Registry'ies
47554
47645
  class ParsingPerformance {
47555
47646
  static clear() {
@@ -47602,14 +47693,18 @@ class Registry {
47602
47693
  this.objectsByType = {};
47603
47694
  this.dependencies = {};
47604
47695
  this.conf = conf ? conf : config_1.Config.getDefault();
47605
- this.references = new ddic_references_1.DDICReferences();
47696
+ this.ddicReferences = new ddic_references_1.DDICReferences();
47697
+ this.msagReferences = new msag_references_1.MSAGReferences();
47606
47698
  }
47607
47699
  static abaplintVersion() {
47608
47700
  // magic, see build script "version.sh"
47609
- return "2.99.10";
47701
+ return "2.100.0";
47610
47702
  }
47611
47703
  getDDICReferences() {
47612
- return this.references;
47704
+ return this.ddicReferences;
47705
+ }
47706
+ getMSAGReferences() {
47707
+ return this.msagReferences;
47613
47708
  }
47614
47709
  *getObjects() {
47615
47710
  for (const name in this.objects) {
@@ -47697,7 +47792,8 @@ class Registry {
47697
47792
  const obj = this.find(file.getObjectName(), file.getObjectType());
47698
47793
  obj.removeFile(file);
47699
47794
  if (obj.getFiles().length === 0) {
47700
- this.references.clear(obj);
47795
+ this.ddicReferences.clear(obj);
47796
+ this.msagReferences.clear(obj);
47701
47797
  this.removeObject(obj);
47702
47798
  }
47703
47799
  return this;
@@ -54903,6 +54999,88 @@ exports.Downport = Downport;
54903
54999
 
54904
55000
  /***/ }),
54905
55001
 
55002
+ /***/ "./node_modules/@abaplint/core/build/src/rules/easy_to_find_messages.js":
55003
+ /*!******************************************************************************!*\
55004
+ !*** ./node_modules/@abaplint/core/build/src/rules/easy_to_find_messages.js ***!
55005
+ \******************************************************************************/
55006
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
55007
+
55008
+ "use strict";
55009
+
55010
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
55011
+ exports.EasyToFindMessages = exports.EasyToFindMessagesConf = void 0;
55012
+ const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/core/build/src/issue.js");
55013
+ const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
55014
+ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
55015
+ const position_1 = __webpack_require__(/*! ../position */ "./node_modules/@abaplint/core/build/src/position.js");
55016
+ const syntax_1 = __webpack_require__(/*! ../abap/5_syntax/syntax */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js");
55017
+ const _abap_object_1 = __webpack_require__(/*! ../objects/_abap_object */ "./node_modules/@abaplint/core/build/src/objects/_abap_object.js");
55018
+ class EasyToFindMessagesConf extends _basic_rule_config_1.BasicRuleConfig {
55019
+ }
55020
+ exports.EasyToFindMessagesConf = EasyToFindMessagesConf;
55021
+ class EasyToFindMessages {
55022
+ constructor() {
55023
+ this.conf = new EasyToFindMessagesConf();
55024
+ }
55025
+ getMetadata() {
55026
+ return {
55027
+ key: "easy_to_find_messages",
55028
+ title: "Easy to find messages",
55029
+ shortDescription: `Make messages easy to find`,
55030
+ extendedInformation: `All messages must be statically referenced exactly once
55031
+
55032
+ Only MESSAGE and RAISE statments are counted as static references
55033
+
55034
+ Also see rule "message_exists"
55035
+
55036
+ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#make-messages-easy-to-find`,
55037
+ tags: [_irule_1.RuleTag.Styleguide],
55038
+ };
55039
+ }
55040
+ getConfig() {
55041
+ return this.conf;
55042
+ }
55043
+ setConfig(conf) {
55044
+ this.conf = conf;
55045
+ }
55046
+ initialize(reg) {
55047
+ this.msagReferences = reg.getMSAGReferences();
55048
+ // the SyntaxLogic builds the references
55049
+ for (const obj of reg.getObjects()) {
55050
+ if (obj instanceof _abap_object_1.ABAPObject) {
55051
+ new syntax_1.SyntaxLogic(reg, obj).run();
55052
+ }
55053
+ }
55054
+ return this;
55055
+ }
55056
+ run(object) {
55057
+ const issues = [];
55058
+ if (object.getType() === "MSAG") {
55059
+ const msag = object;
55060
+ for (const message of msag.getMessages()) {
55061
+ const where = this.msagReferences.listByMessage(msag.getName().toUpperCase(), message.getNumber());
55062
+ if (where.length === 0) {
55063
+ const text = `Message ${message.getNumber()} not statically referenced`;
55064
+ const position = new position_1.Position(1, 1);
55065
+ const issue = issue_1.Issue.atPosition(object.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity);
55066
+ issues.push(issue);
55067
+ }
55068
+ else if (where.length >= 2) {
55069
+ const text = `Message ${message.getNumber()} referenced more than once`;
55070
+ const position = new position_1.Position(1, 1);
55071
+ const issue = issue_1.Issue.atPosition(object.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity);
55072
+ issues.push(issue);
55073
+ }
55074
+ }
55075
+ }
55076
+ return issues;
55077
+ }
55078
+ }
55079
+ exports.EasyToFindMessages = EasyToFindMessages;
55080
+ //# sourceMappingURL=easy_to_find_messages.js.map
55081
+
55082
+ /***/ }),
55083
+
54906
55084
  /***/ "./node_modules/@abaplint/core/build/src/rules/empty_line_in_statement.js":
54907
55085
  /*!********************************************************************************!*\
54908
55086
  !*** ./node_modules/@abaplint/core/build/src/rules/empty_line_in_statement.js ***!
@@ -57511,6 +57689,7 @@ __exportStar(__webpack_require__(/*! ./definitions_top */ "./node_modules/@abapl
57511
57689
  __exportStar(__webpack_require__(/*! ./description_empty */ "./node_modules/@abaplint/core/build/src/rules/description_empty.js"), exports);
57512
57690
  __exportStar(__webpack_require__(/*! ./double_space */ "./node_modules/@abaplint/core/build/src/rules/double_space.js"), exports);
57513
57691
  __exportStar(__webpack_require__(/*! ./downport */ "./node_modules/@abaplint/core/build/src/rules/downport.js"), exports);
57692
+ __exportStar(__webpack_require__(/*! ./easy_to_find_messages */ "./node_modules/@abaplint/core/build/src/rules/easy_to_find_messages.js"), exports);
57514
57693
  __exportStar(__webpack_require__(/*! ./empty_line_in_statement */ "./node_modules/@abaplint/core/build/src/rules/empty_line_in_statement.js"), exports);
57515
57694
  __exportStar(__webpack_require__(/*! ./empty_statement */ "./node_modules/@abaplint/core/build/src/rules/empty_statement.js"), exports);
57516
57695
  __exportStar(__webpack_require__(/*! ./empty_structure */ "./node_modules/@abaplint/core/build/src/rules/empty_structure.js"), exports);
@@ -59982,6 +60161,7 @@ class MSAGConsistency {
59982
60161
  key: "msag_consistency",
59983
60162
  title: "MSAG consistency check",
59984
60163
  shortDescription: `Checks the validity of messages in message classes`,
60164
+ extendedInformation: `Message numbers must be 3 digits, and message text must not be empty`,
59985
60165
  };
59986
60166
  }
59987
60167
  getDescription(reason) {
@@ -63593,6 +63773,10 @@ If the target is a sorted/hashed table, no issue is reported`,
63593
63773
  if (this.isTargetSortedOrHashed(s, spaghetti, file)) {
63594
63774
  continue;
63595
63775
  }
63776
+ else if (s.findFirstExpression(Expressions.SQLJoin) && s.findFirstExpression(Expressions.SQLForAllEntries)) {
63777
+ // see https://github.com/abaplint/abaplint/issues/2957
63778
+ continue;
63779
+ }
63596
63780
  issues.push(issue_1.Issue.atStatement(file, s, "Add ORDER BY", this.getMetadata().key, this.conf.severity));
63597
63781
  }
63598
63782
  }
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.99.10",
3
+ "version": "2.100.0",
4
4
  "description": "abaplint - Command Line Interface",
5
+ "funding": "https://github.com/sponsors/larshp",
5
6
  "bin": {
6
7
  "abaplint": "./abaplint"
7
8
  },
@@ -37,12 +38,12 @@
37
38
  },
38
39
  "homepage": "https://abaplint.org",
39
40
  "devDependencies": {
40
- "@abaplint/core": "^2.99.10",
41
+ "@abaplint/core": "^2.100.0",
41
42
  "@types/chai": "^4.3.5",
42
43
  "@types/glob": "^7.2.0",
43
44
  "@types/minimist": "^1.2.2",
44
45
  "@types/mocha": "^10.0.1",
45
- "@types/node": "^20.1.2",
46
+ "@types/node": "^20.1.3",
46
47
  "@types/progress": "^2.0.5",
47
48
  "chai": "^4.3.7",
48
49
  "chalk": "^5.2.0",