Skip to content

Commit

Permalink
Lint: report references to requireType'd namespaces by fully qualifie…
Browse files Browse the repository at this point in the history
…d name instead of alias.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=228928413
  • Loading branch information
tjgq authored and EatingW committed Jan 14, 2019
1 parent baa4aef commit b781589
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/com/google/javascript/jscomp/ClosureCheckModule.java
Expand Up @@ -222,6 +222,7 @@ protected void visit(
&& !currentModuleInfo.name.equals(extractFirstArgumentName(n))) { && !currentModuleInfo.name.equals(extractFirstArgumentName(n))) {
t.report(n, MULTIPLE_MODULES_IN_FILE); t.report(n, MULTIPLE_MODULES_IN_FILE);
} else if (callee.matchesQualifiedName("goog.require") } else if (callee.matchesQualifiedName("goog.require")
|| callee.matchesQualifiedName("goog.requireType")
|| callee.matchesQualifiedName("goog.forwardDeclare")) { || callee.matchesQualifiedName("goog.forwardDeclare")) {
checkRequireCall(t, n, parent); checkRequireCall(t, n, parent);
} else if (callee.matchesQualifiedName("goog.module.get") && t.inModuleHoistScope()) { } else if (callee.matchesQualifiedName("goog.module.get") && t.inModuleHoistScope()) {
Expand Down
69 changes: 67 additions & 2 deletions test/com/google/javascript/jscomp/ClosureCheckModuleTest.java
Expand Up @@ -24,6 +24,7 @@
import static com.google.javascript.jscomp.ClosureCheckModule.GOOG_MODULE_USES_THROW; import static com.google.javascript.jscomp.ClosureCheckModule.GOOG_MODULE_USES_THROW;
import static com.google.javascript.jscomp.ClosureCheckModule.INCORRECT_SHORTNAME_CAPITALIZATION; import static com.google.javascript.jscomp.ClosureCheckModule.INCORRECT_SHORTNAME_CAPITALIZATION;
import static com.google.javascript.jscomp.ClosureCheckModule.INVALID_DESTRUCTURING_REQUIRE; import static com.google.javascript.jscomp.ClosureCheckModule.INVALID_DESTRUCTURING_REQUIRE;
import static com.google.javascript.jscomp.ClosureCheckModule.JSDOC_REFERENCE_TO_FULLY_QUALIFIED_IMPORT_NAME;
import static com.google.javascript.jscomp.ClosureCheckModule.JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME; import static com.google.javascript.jscomp.ClosureCheckModule.JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME;
import static com.google.javascript.jscomp.ClosureCheckModule.LET_GOOG_REQUIRE; import static com.google.javascript.jscomp.ClosureCheckModule.LET_GOOG_REQUIRE;
import static com.google.javascript.jscomp.ClosureCheckModule.MULTIPLE_MODULES_IN_FILE; import static com.google.javascript.jscomp.ClosureCheckModule.MULTIPLE_MODULES_IN_FILE;
Expand Down Expand Up @@ -500,7 +501,7 @@ public void testIllegalShortImportReferencedByLongName() {
} }


@Test @Test
public void testIllegalShortImportReferencedByLongName_extends() { public void testIllegalShortImportReferencedByLongNameInJsDoc() {
testError( testError(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -510,6 +511,15 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"/** @constructor @implements {foo.A} */ function B() {}"), "/** @constructor @implements {foo.A} */ function B() {}"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME); JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);


testError(
lines(
"goog.module('x.y.z');",
"",
"var A = goog.requireType('foo.A');",
"",
"/** @constructor @implements {foo.A} */ function B() {}"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);

testError( testError(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -519,6 +529,15 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"/** @type {foo.A} */ var a;"), "/** @type {foo.A} */ var a;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME); JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);


testError(
lines(
"goog.module('x.y.z');",
"",
"var A = goog.requireType('foo.A');",
"",
"/** @type {foo.A} */ var a;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);

testSame( testSame(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -527,6 +546,14 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"", "",
"/** @type {A} */ var a;")); "/** @type {A} */ var a;"));


testSame(
lines(
"goog.module('x.y.z');",
"",
"var A = goog.requireType('foo.A');",
"",
"/** @type {A} */ var a;"));

testSame( testSame(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -535,6 +562,14 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"", "",
"/** @type {Foo} */ var a;")); "/** @type {Foo} */ var a;"));


testSame(
lines(
"goog.module('x.y.z');",
"",
"var Foo = goog.requireType('Foo');",
"",
"/** @type {Foo} */ var a;"));

testError( testError(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -544,6 +579,15 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"/** @type {some.namespace.Foo} */ var foo;"), "/** @type {some.namespace.Foo} */ var foo;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME); JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);


testError(
lines(
"goog.module('x.y.z');",
"",
"var ns = goog.requireType('some.namespace');",
"",
"/** @type {some.namespace.Foo} */ var foo;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);

testError( testError(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -552,6 +596,15 @@ public void testIllegalShortImportReferencedByLongName_extends() {
"", "",
"/** @type {Array<some.namespace.Foo>} */ var foos;"), "/** @type {Array<some.namespace.Foo>} */ var foos;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME); JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);

testError(
lines(
"goog.module('x.y.z');",
"",
"var ns = goog.requireType('some.namespace');",
"",
"/** @type {Array<some.namespace.Foo>} */ var foos;"),
JSDOC_REFERENCE_TO_SHORT_IMPORT_BY_LONG_NAME_INCLUDING_SHORT_NAME);
} }


@Test @Test
Expand All @@ -576,7 +629,7 @@ public void testIllegalShortImportDestructuring() {
} }


@Test @Test
public void testIllegalImportNoAlias() { public void testIllegalRequireNoAlias() {
testError( testError(
lines( lines(
"goog.module('x.y.z');", "goog.module('x.y.z');",
Expand All @@ -587,6 +640,18 @@ public void testIllegalImportNoAlias() {
REFERENCE_TO_FULLY_QUALIFIED_IMPORT_NAME); REFERENCE_TO_FULLY_QUALIFIED_IMPORT_NAME);
} }


@Test
public void testIllegalRequireTypeNoAlias() {
testError(
lines(
"goog.module('x.y.z');",
"",
"goog.requireType('foo');",
"",
"/** @type {foo.Foo} */ var foo;"),
JSDOC_REFERENCE_TO_FULLY_QUALIFIED_IMPORT_NAME);
}

// TODO(johnlenz): Re-enable these tests (they are a bit tricky). // TODO(johnlenz): Re-enable these tests (they are a bit tricky).
public void disable_testSingleNameImportNoAlias1() { public void disable_testSingleNameImportNoAlias1() {
testError( testError(
Expand Down

0 comments on commit b781589

Please sign in to comment.