Skip to content

Commit bb5ff0a

Browse files
author
Rob Figueiredo
committed
JsChecker: support extensionless ES6 imports
1 parent b2a6fb7 commit bb5ff0a

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

java/com/google/javascript/jscomp/CheckStrictDeps.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ private void visitEs6Import(NodeTraversal t, Node n) {
136136
private void checkNamespaceIsProvided(NodeTraversal t, Node n, String namespace) {
137137
if (namespace.startsWith("/") || namespace.startsWith(".")) {
138138
// TODO(jart): Unify path resolution with ModuleLoader.
139+
// NOTE(robfig): To enable usage of extensionless ES6 modules,
140+
// copy these 3 lines from NodeModuleResolver.java.
141+
if (!namespace.endsWith(".js")) {
142+
namespace += ".js";
143+
}
144+
139145
Webpath me = Webpath.get(t.getSourceName());
140146
if (!me.isAbsolute()) {
141147
me = Webpath.get("/").resolve(me);

java/com/google/javascript/jscomp/JsChecker.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.google.common.collect.Sets;
2828
import com.google.javascript.jscomp.CompilerOptions.IncrementalCheckMode;
2929
import com.google.javascript.jscomp.CompilerOptions.LanguageMode;
30+
import com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode;
3031
import com.google.javascript.jscomp.parsing.Config;
3132
import io.bazel.rules.closure.BuildInfo.ClosureJsLibrary;
3233
import io.bazel.rules.closure.worker.CommandLineProgram;
@@ -132,6 +133,11 @@ public final class JsChecker {
132133
usage = "Invert exit code and disable printing warnings")
133134
private boolean expectFailure;
134135

136+
@Option(
137+
name = "--module_resolution",
138+
usage = "Specifies how the compiler locates modules")
139+
private String moduleResolution = ResolutionMode.BROWSER.name();
140+
135141
@Option(
136142
name = "--help",
137143
usage = "Displays this message on stdout and exit")
@@ -182,6 +188,7 @@ private boolean run() throws IOException {
182188
options.setPreserveDetailedSourceInfo(true);
183189
options.setEmitUseStrict(false);
184190
options.setParseJsDocDocumentation(Config.JsDocParsing.INCLUDE_DESCRIPTIONS_NO_WHITESPACE);
191+
options.setModuleResolutionMode(ResolutionMode.valueOf(moduleResolution));
185192
JsCheckerErrorFormatter errorFormatter =
186193
new JsCheckerErrorFormatter(compiler, state.roots, labels);
187194
errorFormatter.setColorize(true);

0 commit comments

Comments
 (0)