• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Camelcade / Perl5-IDEA / #525521660

24 Aug 2025 01:28PM UTC coverage: 75.89% (-6.3%) from 82.227%
#525521660

push

github

hurricup
Migrated coverage reporting to https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

See: https://github.com/kt3k/coveralls-gradle-plugin/issues/119

14751 of 22639 branches covered (65.16%)

Branch coverage included in aggregate %.

31091 of 37767 relevant lines covered (82.32%)

0.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.93
/plugin/common/src/main/java/com/perl5/lang/perl/internals/PerlFeaturesTable.java
1
/*
2
 * Copyright 2015-2025 Alexandr Evstigneev
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 * http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
package com.perl5.lang.perl.internals;
18

19
import com.perl5.PerlBundle;
20
import org.apache.groovy.util.Maps;
21
import org.jetbrains.annotations.Nls;
22

23
import java.util.*;
24

25
/**
26
 * Represents internal {@code %^H}, built from {@code feature.pm}
27
 */
28
public final class PerlFeaturesTable implements Cloneable {
29

30
  private static final String FEATURE_APOSTROPHE_AS_PACKAGE_SEPARATOR = "feature_apos_as_name_sep";
31
  private static final String FEATURE_BAREWORD_FILEHANDLES = "bareword_filehandles";
32
  private static final String FEATURE_BITWISE = "bitwise";
33
  private static final String FEATURE_CLASS = "class";
34
  private static final String FEATURE_CURRENT_SUB = "__SUB__";
35
  private static final String FEATURE_DECLARED_REFS = "myref";
36
  private static final String FEATURE_DEFER = "defer";
37
  private static final String FEATURE_EVALBYTES = "evalbytes";
38
  private static final String FEATURE_EXTRA_PAIRED_DELIMITERS = "more_delims";
39
  private static final String FEATURE_FC = "fc";
40
  private static final String FEATURE_INDIRECT = "indirect";
41
  private static final String FEATURE_ISA = "isa";
42
  private static final String FEATURE_KEYWORD_ALL = "feature_keyword_all";
43
  private static final String FEATURE_KEYWORD_ANY = "feature_keyword_any";
44
  private static final String FEATURE_MODULE_TRUE = "module_true";
45
  private static final String FEATURE_MULTIDIMENSIONAL = "multidimensional";
46
  private static final String FEATURE_POSTDEREF_QQ = "postderef_qq";
47
  private static final String FEATURE_REFALIASING = "refaliasing";
48
  private static final String FEATURE_SAY = "say";
49
  private static final String FEATURE_SIGNATURES = "signatures";
50
  private static final String FEATURE_SMARTMATCH = "feature_smartmatch";
51
  private static final String FEATURE_STATE = "state";
52
  private static final String FEATURE_SWITCH = "switch";
53
  private static final String FEATURE_TRY = "try";
54
  private static final String FEATURE_UNICODE_EVAL = "unieval";
55
  private static final String FEATURE_UNICODE_STRINGS = "unicode";
56

57
  public static final Map<String, @Nls String> AVAILABLE_FEATURES = Maps.of(
1✔
58
    FEATURE_APOSTROPHE_AS_PACKAGE_SEPARATOR, PerlBundle.message("feature.apostrophe"),
1✔
59
    FEATURE_BAREWORD_FILEHANDLES, PerlBundle.message("perl.feature.bareword.filehandle.description"),
1✔
60
    FEATURE_BITWISE, PerlBundle.message("perl.feature.bitwise.description"),
1✔
61
    FEATURE_CLASS, PerlBundle.message("perl.feature.class"),
1✔
62
    FEATURE_CURRENT_SUB, PerlBundle.message("perl.feature.current.sub.description"),
1✔
63
    FEATURE_DECLARED_REFS, PerlBundle.message("perl.feature.declared.refs.description"),
1✔
64
    FEATURE_DEFER, PerlBundle.message("perl.feature.defer.description"),
1✔
65
    FEATURE_EVALBYTES, PerlBundle.message("perl.feature.evalbytes.description"),
1✔
66
    FEATURE_EXTRA_PAIRED_DELIMITERS, PerlBundle.message("perl.feature.extra.delimiters.description"),
1✔
67
    FEATURE_FC, PerlBundle.message("perl.feature.fc.description"),
1✔
68
    FEATURE_INDIRECT, PerlBundle.message("perl.feature.indirect.description"),
1✔
69
    FEATURE_ISA, PerlBundle.message("perl.feature.isa.description"),
1✔
70
    FEATURE_KEYWORD_ALL, PerlBundle.message("feature.all.keyword"),
1✔
71
    FEATURE_KEYWORD_ANY, PerlBundle.message("feature.any.keyword"),
1✔
72
    FEATURE_MODULE_TRUE, PerlBundle.message("perl.feature.module.true"),
1✔
73
    FEATURE_MULTIDIMENSIONAL, PerlBundle.message("perl.feature.multidimensional.description"),
1✔
74
    FEATURE_POSTDEREF_QQ, PerlBundle.message("perl.feature.postderef.qq.description"),
1✔
75
    FEATURE_REFALIASING, PerlBundle.message("perl.feature.refaliasing.description"),
1✔
76
    FEATURE_SAY, PerlBundle.message("perl.feature.say.description"),
1✔
77
    FEATURE_SIGNATURES, PerlBundle.message("perl.feature.signatures.description"),
1✔
78
    FEATURE_SMARTMATCH, PerlBundle.message("feature.enabled.smartmatch.operator"),
1✔
79
    FEATURE_STATE, PerlBundle.message("perl.feature.state.description"),
1✔
80
    FEATURE_SWITCH, PerlBundle.message("perl.feature.switch.description"),
1✔
81
    FEATURE_TRY, PerlBundle.message("perl.feature.try.description"),
1✔
82
    FEATURE_UNICODE_EVAL, PerlBundle.message("perl.feature.unicode.eval.description"),
1✔
83
    FEATURE_UNICODE_STRINGS, PerlBundle.message("perl.feature.unicode.strings.description")
1✔
84
  );
85

86
  private static final List<String> FEATURES_5_10 = List.of(
1✔
87
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL, FEATURE_SAY, FEATURE_STATE, FEATURE_SWITCH);
88
  private static final List<String> FEATURES_5_11 = List.of(
1✔
89
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL, FEATURE_SAY, FEATURE_STATE, FEATURE_SWITCH,
90
    FEATURE_UNICODE_STRINGS);
91
  private static final List<String> FEATURES_5_15 = List.of(
1✔
92
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL,
93
    FEATURE_SAY, FEATURE_STATE, FEATURE_SWITCH, FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
94
  private static final List<String> FEATURES_5_23 = List.of(
1✔
95
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL,
96
    FEATURE_POSTDEREF_QQ, FEATURE_SAY, FEATURE_STATE, FEATURE_SWITCH, FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
97
  private static final List<String> FEATURES_5_27 = List.of(
1✔
98
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_BITWISE, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_INDIRECT,
99
    FEATURE_MULTIDIMENSIONAL, FEATURE_POSTDEREF_QQ, FEATURE_SAY, FEATURE_STATE, FEATURE_SWITCH, FEATURE_UNICODE_EVAL,
100
    FEATURE_UNICODE_STRINGS);
101
  private static final List<String> FEATURES_5_35 = List.of(
1✔
102
    FEATURE_BAREWORD_FILEHANDLES, FEATURE_BITWISE, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_ISA, FEATURE_POSTDEREF_QQ,
103
    FEATURE_SAY, FEATURE_SIGNATURES, FEATURE_STATE, FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
104
  private static final List<String> FEATURES_5_37 = List.of(
1✔
105
    FEATURE_BITWISE, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_ISA, FEATURE_MODULE_TRUE, FEATURE_POSTDEREF_QQ,
106
    FEATURE_SAY, FEATURE_SIGNATURES, FEATURE_STATE, FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
107
  private static final List<String> FEATURES_5_39 =
1✔
108
    List.of(FEATURE_APOSTROPHE_AS_PACKAGE_SEPARATOR, FEATURE_BITWISE, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_ISA,
1✔
109
            FEATURE_MODULE_TRUE, FEATURE_POSTDEREF_QQ, FEATURE_SAY, FEATURE_SIGNATURES, FEATURE_SMARTMATCH, FEATURE_STATE, FEATURE_TRY,
110
            FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
111
  private static final List<String> FEATURES_5_41 =
1✔
112
    List.of(FEATURE_BITWISE, FEATURE_CURRENT_SUB, FEATURE_EVALBYTES, FEATURE_FC, FEATURE_ISA, FEATURE_MODULE_TRUE, FEATURE_POSTDEREF_QQ,
1✔
113
            FEATURE_SAY, FEATURE_SIGNATURES, FEATURE_STATE, FEATURE_TRY, FEATURE_UNICODE_EVAL, FEATURE_UNICODE_STRINGS);
114

115
  public static final Map<String, List<String>> AVAILABLE_FEATURES_BUNDLES = Maps.of(
1✔
116
    "all", new ArrayList<>(AVAILABLE_FEATURES.keySet()),
1✔
117
    "default",
118
    Arrays.asList(FEATURE_APOSTROPHE_AS_PACKAGE_SEPARATOR, FEATURE_BAREWORD_FILEHANDLES, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL,
1✔
119
                  FEATURE_SMARTMATCH),
120

121
    "5.9.5", FEATURES_5_10,
122
    "5.10", FEATURES_5_10,
123

124
    "5.11", FEATURES_5_11,
125
    "5.12", FEATURES_5_11,
126
    "5.13", FEATURES_5_11,
127
    "5.14", FEATURES_5_11,
128

129
    "5.15", FEATURES_5_15,
130
    "5.16", FEATURES_5_15,
131
    "5.17", FEATURES_5_15,
132
    "5.18", FEATURES_5_15,
133
    "5.19", FEATURES_5_15,
134
    "5.20", FEATURES_5_15,
135
    "5.21", FEATURES_5_15,
136
    "5.22", FEATURES_5_15,
137

138
    "5.23", FEATURES_5_23,
139
    "5.24", FEATURES_5_23,
140
    "5.25", FEATURES_5_23,
141
    "5.26", FEATURES_5_23,
142

143
    "5.27", FEATURES_5_27,
144
    "5.28", FEATURES_5_27,
145
    "5.29", FEATURES_5_27,
146
    "5.30", FEATURES_5_27,
147
    "5.31", FEATURES_5_27,
148
    "5.32", FEATURES_5_27,
149
    "5.33", FEATURES_5_27,
150
    "5.34", FEATURES_5_27,
151

152
    "5.35", FEATURES_5_35,
153
    "5.36", FEATURES_5_35,
154

155
    "5.37", FEATURES_5_37,
156
    "5.38", FEATURES_5_37,
157

158
    "5.40", FEATURES_5_39,
159
    "5.42", FEATURES_5_41
160
  );
161

162
  private Map<String, Boolean> featuresMap;
163

164
  public PerlFeaturesTable() {
×
165
    featuresMap = new HashMap<>();
×
166
    for (String feature : AVAILABLE_FEATURES.keySet()) {
×
167
      featuresMap.put(feature, false);
×
168
    }
×
169
  }
×
170

171
  @Override
172
  public PerlFeaturesTable clone() {
173
    try {
174
      PerlFeaturesTable newTable = (PerlFeaturesTable)super.clone();
×
175
      newTable.featuresMap = Map.copyOf(featuresMap);
×
176
      return newTable;
×
177
    }
178
    catch (CloneNotSupportedException e) {
×
179
      throw new RuntimeException(e.getMessage());
×
180
    }
181
  }
182
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc