Skip to content

Commit

Permalink
Delete support for goog.module.declareNamespace
Browse files Browse the repository at this point in the history
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=244438900
  • Loading branch information
shicks authored and tjgq committed Apr 20, 2019
1 parent ff73f3b commit 207d84a
Show file tree
Hide file tree
Showing 13 changed files with 41 additions and 205 deletions.
Expand Up @@ -319,13 +319,10 @@ private void visitScriptNode() {
private boolean isMissingRequire(String namespace, Node node) { private boolean isMissingRequire(String namespace, Node node) {
if (namespace.startsWith("goog.global.") if (namespace.startsWith("goog.global.")
// Most functions in base.js are goog.someName, but // Most functions in base.js are goog.someName, but
// goog.module.{get,declareLegacyNamespace,declareNamespace} are the exceptions, so just // goog.module.{get,declareLegacyNamespace} are the exceptions, so just
// check for them explicitly. // check for them explicitly.
|| namespace.equals("goog.module.get") || namespace.equals("goog.module.get")
|| namespace.equals("goog.module.declareLegacyNamespace") || namespace.equals("goog.module.declareLegacyNamespace")) {
// TODO(johnplaisted): Consolidate on declareModuleId.
|| namespace.equals("goog.module.declareNamespace")
|| namespace.equals("goog.declareModuleId")) {
return false; return false;
} }


Expand Down
3 changes: 1 addition & 2 deletions src/com/google/javascript/jscomp/CompilerInput.java
Expand Up @@ -426,8 +426,7 @@ void visitSubtree(Node n, Node parent) {
} }
} else if (parent.isGetProp() } else if (parent.isGetProp()
// TODO(johnplaisted): Consolidate on declareModuleId // TODO(johnplaisted): Consolidate on declareModuleId
&& (parent.matchesQualifiedName("goog.module.declareNamespace") && parent.matchesQualifiedName("goog.declareModuleId")
|| parent.matchesQualifiedName("goog.declareModuleId"))
&& parent.getParent().isCall()) { && parent.getParent().isCall()) {
Node argument = parent.getParent().getSecondChild(); Node argument = parent.getParent().getSecondChild();
if (!argument.isString()) { if (!argument.isString()) {
Expand Down
3 changes: 1 addition & 2 deletions src/com/google/javascript/jscomp/Es6RewriteModules.java
Expand Up @@ -378,8 +378,7 @@ public void visit(NodeTraversal t, Node n, Node parent) {
visitScript(t, n); visitScript(t, n);
} else if (n.isCall()) { } else if (n.isCall()) {
// TODO(johnplaisted): Consolidate on declareModuleId. // TODO(johnplaisted): Consolidate on declareModuleId.
if (n.getFirstChild().matchesQualifiedName("goog.module.declareNamespace") if (n.getFirstChild().matchesQualifiedName("goog.declareModuleId")) {
|| n.getFirstChild().matchesQualifiedName("goog.declareModuleId")) {
n.getParent().detach(); n.getParent().detach();
} }
} }
Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/conformance.proto
Expand Up @@ -85,7 +85,7 @@ message Requirement {
// - A namespaced value or type: namespace.Banned // - A namespaced value or type: namespace.Banned
// - A 'static' property: "namespace.Foo.banned" // - A 'static' property: "namespace.Foo.banned"
// TODO(b/112325992): If namespace.Banned is a goog.module that does not // TODO(b/112325992): If namespace.Banned is a goog.module that does not
// call goog.module.declareNamespace, the rule will not match. // call goog.declareModuleId, the rule will not match.
BANNED_NAME = 3; BANNED_NAME = 3;


// A banned instance property, for example: // A banned instance property, for example:
Expand Down
5 changes: 2 additions & 3 deletions src/com/google/javascript/jscomp/deps/JsFileParser.java
Expand Up @@ -54,7 +54,7 @@ public final class JsFileParser extends JsFileLineParser {
"(?:^|;)(?:[a-zA-Z0-9$_,:{}\\s]+=)?\\s*" "(?:^|;)(?:[a-zA-Z0-9$_,:{}\\s]+=)?\\s*"
+ "goog\\.(?<func>provide|module|require|requireType|addDependency|declareModuleId)" + "goog\\.(?<func>provide|module|require|requireType|addDependency|declareModuleId)"
// TODO(johnplaisted): Remove declareNamespace. // TODO(johnplaisted): Remove declareNamespace.
+ "(?<subfunc>\\.declareNamespace)?\\s*\\((?<args>.*?)\\)"); + "\\s*\\((?<args>.*?)\\)");


/** /**
* Pattern for matching import ... from './path/to/file'. * Pattern for matching import ... from './path/to/file'.
Expand Down Expand Up @@ -301,8 +301,7 @@ protected boolean parseLine(String line) throws ParseException {
// See if it's a require or provide. // See if it's a require or provide.
String methodName = googMatcher.group("func"); String methodName = googMatcher.group("func");
char firstChar = methodName.charAt(0); char firstChar = methodName.charAt(0);
boolean isDeclareModuleNamespace = boolean isDeclareModuleNamespace = firstChar == 'd';
firstChar == 'd' || (firstChar == 'm' && googMatcher.group("subfunc") != null);
boolean isModule = !isDeclareModuleNamespace && firstChar == 'm'; boolean isModule = !isDeclareModuleNamespace && firstChar == 'm';
boolean isProvide = firstChar == 'p'; boolean isProvide = firstChar == 'p';
boolean providesNamespace = isProvide || isModule || isDeclareModuleNamespace; boolean providesNamespace = isProvide || isModule || isDeclareModuleNamespace;
Expand Down
Expand Up @@ -76,9 +76,7 @@ public class ConvertToTypedInterface implements CompilerPass {
"goog.forwardDeclare", "goog.forwardDeclare",
"goog.module", "goog.module",
"goog.module.declareLegacyNamespace", "goog.module.declareLegacyNamespace",
// TODO(johnplaisted): Consolidate on declareModuleId / delete declareNamespace.
"goog.declareModuleId", "goog.declareModuleId",
"goog.module.declareNamespace",
"goog.provide", "goog.provide",
"goog.require", "goog.require",
"goog.requireType"); "goog.requireType");
Expand Down
Expand Up @@ -98,9 +98,7 @@ private void checkOrder(NodeTraversal t, Node n, OrderedStatement statement) {
private boolean visitExprResult(NodeTraversal t, Node exprResult, Node parent) { private boolean visitExprResult(NodeTraversal t, Node exprResult, Node parent) {
if (parent.isModuleBody() && exprResult.getFirstChild().isCall()) { if (parent.isModuleBody() && exprResult.getFirstChild().isCall()) {
Node call = exprResult.getFirstChild(); Node call = exprResult.getFirstChild();
// TODO(johnplaisted): Remove declareNamespace. if (call.getFirstChild().matchesQualifiedName("goog.declareModuleId")) {
if (call.getFirstChild().matchesQualifiedName("goog.module.declareNamespace")
|| call.getFirstChild().matchesQualifiedName("goog.declareModuleId")) {
checkOrder(t, call, OrderedStatement.DECLARE_MODULE_ID); checkOrder(t, call, OrderedStatement.DECLARE_MODULE_ID);
return false; return false;
} else if (call.getFirstChild().matchesQualifiedName("goog.require")) { } else if (call.getFirstChild().matchesQualifiedName("goog.require")) {
Expand Down
Expand Up @@ -373,18 +373,7 @@ public void testGoogModuleGetForEs6Module() {
public void testGoogModuleGetForEs6ModuleDeclaresNamespace() { public void testGoogModuleGetForEs6ModuleDeclaresNamespace() {
test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export let y; goog.declareModuleId('es6');"),
SourceFile.fromCode(
"closure.js",
"goog.module('my.module'); function f() { const y = goog.module.get('es6'); }")),
expected(
SourceFile.fromCode("es6.js", "/** @const */ var module$es6 = {};"),
SourceFile.fromCode(
"closure.js", "goog.module('my.module'); function f() { const y = module$es6; }")));

test(
srcs(
SourceFile.fromCode("es6.js", "export let y; goog.module.declareNamespace('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"closure.js", "closure.js",
"goog.module('my.module'); function f() { return goog.module.get('es6').y; }")), "goog.module('my.module'); function f() { return goog.module.get('es6').y; }")),
Expand Down Expand Up @@ -415,10 +404,10 @@ public void testDeclareModuleId() {
} }


@Test @Test
public void testGoogRequireForDeclareNamespace() { public void testGoogRequireForDeclareModuleId() {
test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export var x; goog.module.declareNamespace('my.es6');"), SourceFile.fromCode("es6.js", "export var x; goog.declareModuleId('my.es6');"),
SourceFile.fromCode("goog.js", "const es6 = goog.require('my.es6'); use(es6, es6.x);")), SourceFile.fromCode("goog.js", "const es6 = goog.require('my.es6'); use(es6, es6.x);")),
expected( expected(
SourceFile.fromCode( SourceFile.fromCode(
Expand All @@ -430,10 +419,10 @@ public void testGoogRequireForDeclareNamespace() {
} }


@Test @Test
public void testGoogRequireTypeForDeclareNamespace() { public void testGoogRequireTypeForDeclareModuleId() {
test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export var x; goog.module.declareNamespace('my.es6');"), SourceFile.fromCode("es6.js", "export var x; goog.declareModuleId('my.es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"goog.js", "goog.js",
lines( lines(
Expand Down Expand Up @@ -462,11 +451,10 @@ public void testGoogRequireTypeForDeclareNamespace() {
} }


@Test @Test
public void testGoogRequireForDeclareNamespaceWithDestructure() { public void testGoogRequireForDeclareModuleIdWithDestructure() {
test( test(
srcs( srcs(
SourceFile.fromCode( SourceFile.fromCode("es6.js", "export var x, z; goog.declareModuleId('my.es6');"),
"es6.js", "export var x, z; goog.module.declareNamespace('my.es6');"),
SourceFile.fromCode("goog.js", "const {x, z: y} = goog.require('my.es6'); use(x, y);")), SourceFile.fromCode("goog.js", "const {x, z: y} = goog.require('my.es6'); use(x, y);")),
expected( expected(
SourceFile.fromCode( SourceFile.fromCode(
Expand All @@ -482,11 +470,10 @@ public void testGoogRequireForDeclareNamespaceWithDestructure() {
} }


@Test @Test
public void testGoogRequireTypeForDeclareNamespaceWithDestructure() { public void testGoogRequireTypeForDeclareModuleIdWithDestructure() {
test( test(
srcs( srcs(
SourceFile.fromCode( SourceFile.fromCode("es6.js", "export var x, z; goog.declareModuleId('my.es6');"),
"es6.js", "export var x, z; goog.module.declareNamespace('my.es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"goog.js", "goog.js",
lines( lines(
Expand Down Expand Up @@ -806,58 +793,11 @@ public void testForwardDeclareEs6Module() {
FORWARD_DECLARE_FOR_ES6_SHOULD_BE_CONST); FORWARD_DECLARE_FOR_ES6_SHOULD_BE_CONST);
} }


@Test
public void testForwardDeclareEs6ModuleDeclareNamespace() {
test(
srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"),
SourceFile.fromCode(
"closure.js",
lines(
"goog.module('my.module');",
"const alias = goog.forwardDeclare('es6');",
"let /** !alias.Type */ x;",
"alias;"))),
expected(
SourceFile.fromCode("es6.js", "/** @const */ var module$es6 = {};"),
SourceFile.fromCode(
"closure.js",
lines("goog.module('my.module');", "let /** !module$es6.Type */ x;", "alias;"))));

test(
srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"),
SourceFile.fromCode(
"closure.js",
lines(
"goog.module('my.module');",
"goog.forwardDeclare('es6');",
"let /** !es6.Type */ x;",
"es6;"))),
expected(
SourceFile.fromCode("es6.js", "/** @const */ var module$es6 = {};"),
SourceFile.fromCode(
"closure.js",
lines("goog.module('my.module');", "let /** !module$es6.Type */ x;", "es6;"))));

testError(
ImmutableList.of(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"),
SourceFile.fromCode(
"closure.js",
lines(
"goog.module('my.module');",
"let alias = goog.forwardDeclare('es6');",
"let /** !alias.Type */ x;",
"alias = goog.modle.get('es6');"))),
FORWARD_DECLARE_FOR_ES6_SHOULD_BE_CONST);
}

@Test @Test
public void testWarnAboutRequireEs6FromEs6() { public void testWarnAboutRequireEs6FromEs6() {
test( test(
srcs( srcs(
SourceFile.fromCode("first.js", "goog.module.declareNamespace('first'); export {};"), SourceFile.fromCode("first.js", "goog.declareModuleId('first'); export {};"),
SourceFile.fromCode( SourceFile.fromCode(
"second.js", "const first = goog.require('first'); export {first};")), "second.js", "const first = goog.require('first'); export {first};")),
expected( expected(
Expand All @@ -872,7 +812,7 @@ public void testWarnAboutRequireEs6FromEs6() {


test( test(
srcs( srcs(
SourceFile.fromCode("first.js", "goog.module.declareNamespace('no.alias'); export {};"), SourceFile.fromCode("first.js", "goog.declareModuleId('no.alias'); export {};"),
SourceFile.fromCode("second.js", "goog.require('no.alias'); export {};")), SourceFile.fromCode("second.js", "goog.require('no.alias'); export {};")),
expected( expected(
SourceFile.fromCode("first.js", "/** @const */ var module$first = {};"), SourceFile.fromCode("first.js", "/** @const */ var module$first = {};"),
Expand All @@ -886,7 +826,7 @@ public void testGoogRequireTypeEs6ModuleInEs6Module() {


test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export {}; goog.declareModuleId('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"requiretype.js", "requiretype.js",
lines( lines(
Expand All @@ -903,7 +843,7 @@ public void testGoogRequireTypeEs6ModuleInEs6Module() {


test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export {}; goog.declareModuleId('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"requiretype.js", "requiretype.js",
lines("export {};", "goog.requireType('es6');", "let /** !es6.Type */ x;"))), lines("export {};", "goog.requireType('es6');", "let /** !es6.Type */ x;"))),
Expand All @@ -920,7 +860,7 @@ public void testGoogRequireTypeEs6ModuleInEs6Module() {
public void testGoogModuleGetEs6ModuleInEs6Module() { public void testGoogModuleGetEs6ModuleInEs6Module() {
test( test(
srcs( srcs(
SourceFile.fromCode("first.js", "goog.module.declareNamespace('first'); export let x;"), SourceFile.fromCode("first.js", "goog.declareModuleId('first'); export let x;"),
SourceFile.fromCode( SourceFile.fromCode(
"second.js", "export function foo() { return goog.module.get('first').x; }")), "second.js", "export function foo() { return goog.module.get('first').x; }")),
expected( expected(
Expand All @@ -944,7 +884,7 @@ public void testGoogModuleGetEs6ModuleInEs6Module() {
public void testForwardDeclareEs6ModuleInEs6Module() { public void testForwardDeclareEs6ModuleInEs6Module() {
test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export {}; goog.declareModuleId('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"forwarddeclare.js", "forwarddeclare.js",
lines( lines(
Expand All @@ -963,7 +903,7 @@ public void testForwardDeclareEs6ModuleInEs6Module() {


test( test(
srcs( srcs(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export {}; goog.declareModuleId('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"forwarddeclare.js", "forwarddeclare.js",
lines( lines(
Expand All @@ -982,7 +922,7 @@ public void testForwardDeclareEs6ModuleInEs6Module() {


testError( testError(
ImmutableList.of( ImmutableList.of(
SourceFile.fromCode("es6.js", "export {}; goog.module.declareNamespace('es6');"), SourceFile.fromCode("es6.js", "export {}; goog.declareModuleId('es6');"),
SourceFile.fromCode( SourceFile.fromCode(
"closure.js", "closure.js",
lines( lines(
Expand Down
35 changes: 13 additions & 22 deletions test/com/google/javascript/jscomp/GatherModuleMetadataTest.java
Expand Up @@ -379,25 +379,16 @@ public void testEs6ModuleDeclareModuleId() {
} }


@Test @Test
public void testEs6ModuleDeclareNamespace() { public void testEs6ModuleDeclareModuleIdImportedGoog() {
testSame("export var x; goog.module.declareNamespace('my.module');");
assertThat(metadataMap().getModulesByGoogNamespace().keySet()).containsExactly("my.module");
ModuleMetadata m = metadataMap().getModulesByGoogNamespace().get("my.module");
assertThat(m.googNamespaces()).containsExactly("my.module");
assertThat(m.isEs6Module()).isTrue();
assertThat(m.isGoogModule()).isFalse();
}

@Test
public void testEs6ModuleDeclareNamespaceImportedGoog() {
testSame( testSame(
ImmutableList.of( ImmutableList.of(
SourceFile.fromCode("goog.js", ""), SourceFile.fromCode("goog.js", ""),
SourceFile.fromCode( SourceFile.fromCode(
"testcode", lines( "testcode",
lines(
"import * as goog from './goog.js';", "import * as goog from './goog.js';",
"export var x;", "export var x;",
"goog.module.declareNamespace('my.module');")))); "goog.declareModuleId('my.module');"))));
assertThat(metadataMap().getModulesByGoogNamespace().keySet()).containsExactly("my.module"); assertThat(metadataMap().getModulesByGoogNamespace().keySet()).containsExactly("my.module");
ModuleMetadata m = metadataMap().getModulesByGoogNamespace().get("my.module"); ModuleMetadata m = metadataMap().getModulesByGoogNamespace().get("my.module");
assertThat(m.googNamespaces()).containsExactly("my.module"); assertThat(m.googNamespaces()).containsExactly("my.module");
Expand Down Expand Up @@ -441,12 +432,12 @@ public void testDuplicateProvideAndGoogModule() {
public void testDuplicateProvideAndEs6Module() { public void testDuplicateProvideAndEs6Module() {
testError( testError(
new String[] { new String[] {
"goog.provide('duplciated');", "export {}; goog.module.declareNamespace('duplciated');" "goog.provide('duplciated');", "export {}; goog.declareModuleId('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_NAMESPACE); ClosureRewriteModule.DUPLICATE_NAMESPACE);
testError( testError(
new String[] { new String[] {
"export {}; goog.module.declareNamespace('duplciated');", "goog.provide('duplciated');" "export {}; goog.declareModuleId('duplciated');", "goog.provide('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_MODULE); ClosureRewriteModule.DUPLICATE_MODULE);
} }
Expand All @@ -462,12 +453,12 @@ public void testDuplicateGoogModules() {
public void testDuplicateGoogAndEs6Module() { public void testDuplicateGoogAndEs6Module() {
testError( testError(
new String[] { new String[] {
"goog.module('duplciated');", "export {}; goog.module.declareNamespace('duplciated');" "goog.module('duplciated');", "export {}; goog.declareModuleId('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_MODULE); ClosureRewriteModule.DUPLICATE_MODULE);
testError( testError(
new String[] { new String[] {
"export {}; goog.module.declareNamespace('duplciated');", "goog.module('duplciated');" "export {}; goog.declareModuleId('duplciated');", "goog.module('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_MODULE); ClosureRewriteModule.DUPLICATE_MODULE);
} }
Expand All @@ -476,14 +467,14 @@ public void testDuplicateGoogAndEs6Module() {
public void testDuplicatEs6Modules() { public void testDuplicatEs6Modules() {
testError( testError(
new String[] { new String[] {
"export {}; goog.module.declareNamespace('duplciated');", "export {}; goog.declareModuleId('duplciated');",
"export {}; goog.module.declareNamespace('duplciated');" "export {}; goog.declareModuleId('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_MODULE); ClosureRewriteModule.DUPLICATE_MODULE);
testError( testError(
new String[] { new String[] {
"export {}; goog.module.declareNamespace('duplciated');", "export {}; goog.declareModuleId('duplciated');",
"export {}; goog.module.declareNamespace('duplciated');" "export {}; goog.declareModuleId('duplciated');"
}, },
ClosureRewriteModule.DUPLICATE_MODULE); ClosureRewriteModule.DUPLICATE_MODULE);
} }
Expand Down Expand Up @@ -596,7 +587,7 @@ public void testSetTestOnlyWithInvalidArg() {
@Test @Test
public void testGatherFromExterns() { public void testGatherFromExterns() {
// js_lib will put data in externs for .i.js files. // js_lib will put data in externs for .i.js files.
test(externs("export var x; goog.module.declareNamespace('my.module');"), srcs("")); test(externs("export var x; goog.declareModuleId('my.module');"), srcs(""));
assertThat(metadataMap().getModulesByGoogNamespace().keySet()).containsExactly("my.module"); assertThat(metadataMap().getModulesByGoogNamespace().keySet()).containsExactly("my.module");
ModuleMetadata m = metadataMap().getModulesByGoogNamespace().get("my.module"); ModuleMetadata m = metadataMap().getModulesByGoogNamespace().get("my.module");
assertThat(m.googNamespaces()).containsExactly("my.module"); assertThat(m.googNamespaces()).containsExactly("my.module");
Expand Down

0 comments on commit 207d84a

Please sign in to comment.