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

Camelcade / Perl5-IDEA / #525521824

24 Apr 2026 06:38PM UTC coverage: 76.187% (+0.2%) from 75.952%
#525521824

push

github

hurricup
Pass a disposable to Registry.get to revert it in the end

14757 of 22542 branches covered (65.46%)

Branch coverage included in aggregate %.

31096 of 37643 relevant lines covered (82.61%)

0.83 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-2026 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
@SuppressWarnings("unused")
29
public final class PerlFeaturesTable implements Cloneable {
30

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

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

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

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

122
    "5.9.5", FEATURES_5_10,
123
    "5.10", FEATURES_5_10,
124

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

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

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

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

153
    "5.35", FEATURES_5_35,
154
    "5.36", FEATURES_5_35,
155

156
    "5.37", FEATURES_5_37,
157
    "5.38", FEATURES_5_37,
158

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

163
  private Map<String, Boolean> featuresMap;
164

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

172
  @Override
173
  public PerlFeaturesTable clone() {
174
    try {
175
      PerlFeaturesTable newTable = (PerlFeaturesTable)super.clone();
×
176
      newTable.featuresMap = Map.copyOf(featuresMap);
×
177
      return newTable;
×
178
    }
179
    catch (CloneNotSupportedException e) {
×
180
      throw new RuntimeException(e.getMessage());
×
181
    }
182
  }
183
}
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