Skip to content

Commit

Permalink
Output @externs annotation in the @fileoverview block when printing e…
Browse files Browse the repository at this point in the history
…xterns files

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=196708182
  • Loading branch information
blickly committed May 15, 2018
1 parent 950cffa commit 6a51bc8
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 29 deletions.
5 changes: 0 additions & 5 deletions src/com/google/javascript/jscomp/CodeGenerator.java
Expand Up @@ -83,11 +83,6 @@ void tagAsTypeSummary() {
add("/** @fileoverview @typeSummary */\n");
}

/** Insert a top-level @externs comment. */
public void tagAsExterns() {
add("/** @externs */\n");
}

/**
* Insert a ECMASCRIPT 5 strict annotation.
*/
Expand Down
14 changes: 0 additions & 14 deletions src/com/google/javascript/jscomp/CodePrinter.java
Expand Up @@ -705,7 +705,6 @@ public static final class Builder {
private boolean prettyPrint;
private boolean outputTypes = false;
private SourceMap sourceMap = null;
private boolean tagAsExterns;
private boolean tagAsTypeSummary;
private boolean tagAsStrict;
private JSTypeRegistry registry;
Expand Down Expand Up @@ -785,14 +784,6 @@ public Builder setTagAsTypeSummary(boolean tagAsTypeSummary) {
return this;
}

/**
* Set whether the output should be tagged as @externs code.
*/
public Builder setTagAsExterns(boolean tagAsExterns) {
this.tagAsExterns = tagAsExterns;
return this;
}

/**
* Set whether the output should be tags as ECMASCRIPT 5 Strict.
*/
Expand Down Expand Up @@ -828,7 +819,6 @@ public String build() {
options,
sourceMap,
tagAsTypeSummary,
tagAsExterns,
tagAsStrict,
lineBreak,
codeGeneratorFactory);
Expand Down Expand Up @@ -861,7 +851,6 @@ private static String toSource(
CompilerOptions options,
SourceMap sourceMap,
boolean tagAsTypeSummary,
boolean tagAsExterns,
boolean tagAsStrict,
boolean lineBreak,
CodeGeneratorFactory codeGeneratorFactory) {
Expand All @@ -882,9 +871,6 @@ private static String toSource(
options.sourceMapDetailLevel);
CodeGenerator cg = codeGeneratorFactory.getCodeGenerator(outputFormat, mcp);

if (tagAsExterns) {
cg.tagAsExterns();
}
if (tagAsTypeSummary) {
cg.tagAsTypeSummary();
}
Expand Down
1 change: 0 additions & 1 deletion src/com/google/javascript/jscomp/Compiler.java
Expand Up @@ -2320,7 +2320,6 @@ private String toSource(Node n, SourceMap sourceMap, boolean firstOutput) {
builder.setTypeRegistry(getTypeRegistry());
builder.setCompilerOptions(options);
builder.setSourceMap(sourceMap);
builder.setTagAsExterns(n.isFromExterns());
builder.setTagAsTypeSummary(!n.isFromExterns() && options.shouldGenerateTypedExterns());
builder.setTagAsStrict(firstOutput && options.shouldEmitUseStrict());
return builder.build();
Expand Down
7 changes: 7 additions & 0 deletions src/com/google/javascript/jscomp/JSDocInfoPrinter.java
Expand Up @@ -49,6 +49,7 @@ public String print(JSDocInfo info) {
List<String> parts = new ArrayList<>();

// order:
// externs|typeSummary
// export|public|private|package|protected
// abstract
// lends
Expand All @@ -75,6 +76,12 @@ public String print(JSDocInfo info) {
// mixinFunction
parts.add("/**");

if (info.isExterns()) {
parts.add("@externs");
} else if (info.isTypeSummary()) {
parts.add("@typeSummary");
}

if (info.isExport()) {
parts.add("@export");
} else if (info.getVisibility() != null
Expand Down
7 changes: 7 additions & 0 deletions src/com/google/javascript/jscomp/parsing/JsDocInfoParser.java
Expand Up @@ -237,6 +237,13 @@ public static JSDocInfo parseJsdoc(String toParse) {
return parser.retrieveAndResetParsedJSDocInfo();
}

@VisibleForTesting
public static JSDocInfo parseFileOverviewJsdoc(String toParse) {
JsDocInfoParser parser = getParser(toParse);
parser.parse();
return parser.getFileOverviewJSDocInfo();
}

private static JsDocInfoParser getParser(String toParse) {
Config config =
Config.builder()
Expand Down
6 changes: 0 additions & 6 deletions test/com/google/javascript/jscomp/CodePrinterTest.java
Expand Up @@ -2005,12 +2005,6 @@ public void testStrictPretty() {
assertThat(result).isEqualTo("'use strict';\nvar x;\n");
}

public void testExterns() {
String result =
defaultBuilder(parse("var x", /* typeChecked= */ true)).setTagAsExterns(true).build();
assertEquals("/** @externs */\nvar x", result);
}

public void testIjs() {
String result =
defaultBuilder(parse("var x", /* typeChecked= */ true))
Expand Down
5 changes: 3 additions & 2 deletions test/com/google/javascript/jscomp/CompilerTest.java
Expand Up @@ -112,14 +112,15 @@ public void testCyclicalDependencyInInputs() {

public void testPrintExterns() {
List<SourceFile> externs =
ImmutableList.of(SourceFile.fromCode("extern", "function alert(x) {}"));
ImmutableList.of(SourceFile.fromCode("extern", "/** @externs */ function alert(x) {}"));
CompilerOptions options = new CompilerOptions();
options.setPreserveTypeAnnotations(true);
options.setLanguageIn(LanguageMode.ECMASCRIPT3);
options.setPrintExterns(true);
Compiler compiler = new Compiler();
compiler.init(externs, ImmutableList.<SourceFile>of(), options);
compiler.parseInputs();
assertThat(compiler.toSource()).isEqualTo("/** @externs */\nfunction alert(x){};");
assertThat(compiler.toSource()).isEqualTo("/** @externs */ function alert(x){};");
}

public void testLocalUndefined() throws Exception {
Expand Down
19 changes: 18 additions & 1 deletion test/com/google/javascript/jscomp/JSDocInfoPrinterTest.java
Expand Up @@ -27,6 +27,7 @@
import com.google.javascript.rhino.JSTypeExpression;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;
import java.util.function.Function;
import junit.framework.TestCase;

/**
Expand Down Expand Up @@ -340,6 +341,14 @@ public void testDeprecated() {
jsDocInfoPrinter.print(info));
}

public void testExterns() {
testSameFileoverview("/** @externs */ ");
}

public void testTypeSummary() {
testSameFileoverview("/** @typeSummary */ ");
}

public void testExport() {
testSame("/** @export */ ");
}
Expand All @@ -360,10 +369,18 @@ private void testSame(String jsdoc) {
test(jsdoc, jsdoc);
}

private void testSameFileoverview(String jsdoc) {
test(jsdoc, jsdoc, JsDocInfoParser::parseFileOverviewJsdoc);
}

private void test(String input, String output) {
test(input, output, JsDocInfoParser::parseJsdoc);
}

private void test(String input, String output, Function<String, JSDocInfo> parser) {
assertThat(input).startsWith("/**");
String contents = input.substring("/**".length());
JSDocInfo info = JsDocInfoParser.parseJsdoc(contents);
JSDocInfo info = parser.apply(contents);
assertNotNull("Parse error on parsing JSDoc: " + input, info);
assertThat(jsDocInfoPrinter.print(info)).isEqualTo(output);
}
Expand Down

0 comments on commit 6a51bc8

Please sign in to comment.