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

Camelcade / Perl5-IDEA / #525521851

22 May 2026 05:53AM UTC coverage: 76.208% (+0.01%) from 76.196%
#525521851

push

github

hurricup
Build 2026.2-EAP.6228.19

14772 of 22542 branches covered (65.53%)

Branch coverage included in aggregate %.

31144 of 37709 relevant lines covered (82.59%)

0.83 hits per line

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

85.06
/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.intellij.util.containers.ContainerUtil;
20
import com.perl5.PerlBundle;
21
import org.jetbrains.annotations.Nls;
22

23
import java.util.*;
24

25
import static java.util.Map.entry;
26

27
/**
28
 * Represents internal {@code %^H}, built from {@code feature.pm}
29
 */
30
@SuppressWarnings("unused")
31
public final class PerlFeaturesTable implements Cloneable {
32

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

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

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

118
  public static final Map<String, List<String>> AVAILABLE_FEATURES_BUNDLES = Map.ofEntries(
1✔
119
    entry("all", new ArrayList<>(ContainerUtil.sorted(AVAILABLE_FEATURES.keySet()))),
1✔
120
    entry("default",
1✔
121
          Arrays.asList(FEATURE_APOSTROPHE_AS_PACKAGE_SEPARATOR, FEATURE_BAREWORD_FILEHANDLES, FEATURE_INDIRECT, FEATURE_MULTIDIMENSIONAL,
1✔
122
                        FEATURE_SMARTMATCH)),
123

124
    entry("5.9.5", FEATURES_5_10),
1✔
125
    entry("5.10", FEATURES_5_10),
1✔
126

127
    entry("5.11", FEATURES_5_11),
1✔
128
    entry("5.12", FEATURES_5_11),
1✔
129
    entry("5.13", FEATURES_5_11),
1✔
130
    entry("5.14", FEATURES_5_11),
1✔
131

132
    entry("5.15", FEATURES_5_15),
1✔
133
    entry("5.16", FEATURES_5_15),
1✔
134
    entry("5.17", FEATURES_5_15),
1✔
135
    entry("5.18", FEATURES_5_15),
1✔
136
    entry("5.19", FEATURES_5_15),
1✔
137
    entry("5.20", FEATURES_5_15),
1✔
138
    entry("5.21", FEATURES_5_15),
1✔
139
    entry("5.22", FEATURES_5_15),
1✔
140

141
    entry("5.23", FEATURES_5_23),
1✔
142
    entry("5.24", FEATURES_5_23),
1✔
143
    entry("5.25", FEATURES_5_23),
1✔
144
    entry("5.26", FEATURES_5_23),
1✔
145

146
    entry("5.27", FEATURES_5_27),
1✔
147
    entry("5.28", FEATURES_5_27),
1✔
148
    entry("5.29", FEATURES_5_27),
1✔
149
    entry("5.30", FEATURES_5_27),
1✔
150
    entry("5.31", FEATURES_5_27),
1✔
151
    entry("5.32", FEATURES_5_27),
1✔
152
    entry("5.33", FEATURES_5_27),
1✔
153
    entry("5.34", FEATURES_5_27),
1✔
154

155
    entry("5.35", FEATURES_5_35),
1✔
156
    entry("5.36", FEATURES_5_35),
1✔
157

158
    entry("5.37", FEATURES_5_37),
1✔
159
    entry("5.38", FEATURES_5_37),
1✔
160

161
    entry("5.40", FEATURES_5_39),
1✔
162
    entry("5.42", FEATURES_5_41)
1✔
163
  );
164

165
  private Map<String, Boolean> featuresMap;
166

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

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