Skip to content

Commit 7f020da

Browse files
lauraharkercopybara-github
authored andcommitted
Suppress untranspilable feature warnings in @closureUnaware transpilation
Also update TODO about copying CompilerOptions for @closureUnaware. PiperOrigin-RevId: 856761304
1 parent 4a97fcb commit 7f020da

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

src/com/google/javascript/jscomp/ClosureUnawareOptions.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ private ClosureUnawareOptions(CompilerOptions original) {
3333
}
3434

3535
private CompilerOptions toCompilerOptions() {
36+
// TODO: b/473813461 - refactor to make sure this class doesn't accidentally skip copying
37+
// any options.
3638
setTranspilationOptions();
3739
setSafeOptimizationAssumptions();
3840
copyOutputOptions();
@@ -53,6 +55,17 @@ private void setTranspilationOptions() {
5355
shadowOptions.setEs6SubclassTranspilation(
5456
CompilerOptions.Es6SubclassTranspilation.SAFE_REFLECT_CONSTRUCT);
5557
shadowOptions.setOutputFeatureSet(original.getOutputFeatureSet());
58+
59+
// To aid rollout of @closureUnaware transpilation, ignore warnings about untranspilable
60+
// features for now. (Any project using @closureUnaware today (i.e. early 2026) gets zero
61+
// transpilation, so rolling out with these suppressions is an incremental improvement.)
62+
63+
// DiagnosticGroups.CANNOT_TRANSPILE_FEATURE: features for which the compiler theoretically
64+
// might support transpilation, but does not currently.
65+
shadowOptions.setWarningLevel(DiagnosticGroups.CANNOT_TRANSPILE_FEATURE, CheckLevel.OFF);
66+
// DiagnosticGroups.UNSTRANSPILABLE_FEATURES: features JSCompiler will never transpile, like
67+
// regex syntax.
68+
shadowOptions.setWarningLevel(DiagnosticGroups.UNSTRANSPILABLE_FEATURES, CheckLevel.OFF);
5669
}
5770

5871
private void setSafeOptimizationAssumptions() {
@@ -71,8 +84,6 @@ private void copyOutputOptions() {
7184
shadowOptions.setGeneratePseudoNames(original.generatePseudoNames);
7285
shadowOptions.setErrorHandler(original.errorHandler);
7386
shadowOptions.setErrorFormat(original.errorFormat);
74-
75-
// TODO: lharker - is there any use in propagating the VariableMap & PropertyMap?
7687
}
7788

7889
private void copyDebugOptions() {

test/com/google/javascript/jscomp/TranspileAndOptimizeClosureUnawareTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,39 @@ function tag(strings, ...values) {
539539
"""));
540540
}
541541

542+
@Test
543+
public void bigintLiteral_passedThroughUntranspiled() {
544+
setLanguageOut(CompilerOptions.LanguageMode.ECMASCRIPT5);
545+
546+
test(closureUnaware("return 123n + 456n;"), expectedClosureUnaware("return 579n;"));
547+
}
548+
549+
@Test
550+
public void untranspilableRegexFeature_passedThroughUntranspiled() {
551+
setLanguageOut(CompilerOptions.LanguageMode.ECMASCRIPT_2015);
552+
553+
// ES2018 feature: https://github.com/tc39/proposal-regexp-dotall-flag
554+
// ES2022 feature: https://github.com/tc39/proposal-regexp-match-indices
555+
testSame(closureUnaware("return /a/sd"));
556+
}
557+
558+
@Test
559+
public void computedGetterSetter_inEs5Out_passedThroughUntranspiled() {
560+
setLanguageOut(CompilerOptions.LanguageMode.ECMASCRIPT5);
561+
// JSCompiler does not support transpiling computed getters/setters in object literals down to
562+
// ES5. For closureUnaware, verify they are passed through unchanged.
563+
testSame(
564+
closureUnaware(
565+
"""
566+
return {
567+
get [x()]() {
568+
return 1;
569+
},
570+
set [x()](a) {}
571+
};
572+
"""));
573+
}
574+
542575
private static String loadFile(Path path) {
543576
try (Stream<String> lines = Files.lines(path)) {
544577
return lines.collect(joining("\n"));

0 commit comments

Comments
 (0)