Skip to content

Merge master into release-2.1 #12440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 61 commits into from
Nov 22, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
b8082ca
Clean up jsdoc in utilities
sandersn Nov 11, 2016
641948f
Test assignability checking of object rests
sandersn Nov 16, 2016
074014e
Check assignability: rest destructuring assignment
sandersn Nov 16, 2016
eaf2f6c
Merge branch 'master' into getJSDoc-cleanup
sandersn Nov 16, 2016
3e52f3d
Codegen: Do not subtract 0 in arguments to rest array loop
subzey Nov 17, 2016
ad9ad8f
Clean up getJSDocTypeForVariableLikeDeclarationFromJSDocComment
sandersn Nov 17, 2016
5a05b94
Clean up getJSDocs
sandersn Nov 17, 2016
ddffe20
Clean up getJSDocParameterTag
sandersn Nov 17, 2016
a2b13d0
pass project name as a constructor parameter (#12333)
vladima Nov 17, 2016
e81cfa1
Clean cache code and streamline other code
sandersn Nov 17, 2016
9fec775
Merge pull request #12217 from subzey/feature/rest-loop-index
mhegazy Nov 18, 2016
2646828
Type relations for generic mapped types
ahejlsberg Nov 18, 2016
63387bb
Error on circular constraints in mapped types
ahejlsberg Nov 18, 2016
79bdc26
Accept new baselines
ahejlsberg Nov 18, 2016
075a3eb
Add new tests
ahejlsberg Nov 18, 2016
aa0d2ce
Make "exclude" default to empty if "include" is present.
Nov 18, 2016
cbde25f
Handle the scenario when heritage clause of interface is not entity n…
sheetalkamat Nov 18, 2016
2376e30
Support apparent types for T[K] indexed access types
ahejlsberg Nov 18, 2016
a789990
Add tests
ahejlsberg Nov 18, 2016
9945529
use location of config file as initial location for automatic type re…
vladima Nov 18, 2016
8674d92
Disable evolving types with implicit any
sandersn Nov 18, 2016
a4d584f
Update baselines to have no evolving types
sandersn Nov 18, 2016
aa55650
Handle when type alias's type parameter extends type that wont get em…
sheetalkamat Nov 18, 2016
e81da9c
Merge pull request #12351 from Microsoft/mappedTypeRelations
ahejlsberg Nov 18, 2016
7750fe1
Always enable evolving types in Javascript files
sandersn Nov 18, 2016
f626ff7
Merge pull request #12363 from Microsoft/declarationsInFilesWithErrors
sheetalkamat Nov 18, 2016
ab84cd0
Improve readability of types and names
sandersn Nov 18, 2016
7caee79
Rename getJSDocComments -> getCommentsFromJSDoc
sandersn Nov 18, 2016
b514d7c
Merge pull request #12362 from Microsoft/disable-evolving-types-with-…
sandersn Nov 18, 2016
91e6bce
Address PR comments
sandersn Nov 18, 2016
0c5429d
Add missed jsDoc rename in services' Node implementation
sandersn Nov 18, 2016
71b28a0
Merge pull request #12310 from Microsoft/check-object-rest-destructur…
sandersn Nov 19, 2016
eaf791e
update to tslint@next
vladima Nov 19, 2016
c96bc89
Fix issue #12260.
andraaspar Nov 19, 2016
dcd225a
Fix comparable relation for keyof T
ahejlsberg Nov 19, 2016
f2a7434
Merge pull request #12376 from Microsoft/vladima/update-tslint
vladima Nov 19, 2016
a439e62
Add tests
ahejlsberg Nov 19, 2016
4ce494a
Accept new baselines
ahejlsberg Nov 19, 2016
f8b8465
Merge pull request #12378 from andraaspar/master
mhegazy Nov 20, 2016
998246a
Merge pull request #12389 from Microsoft/keyofRelations
ahejlsberg Nov 20, 2016
110c3ac
Add locale options to tsserver (#12369)
zhengbli Nov 21, 2016
7c1f33f
Fix lint errors
Nov 21, 2016
baa228b
Merge pull request #12415 from Microsoft/fix_lint
Nov 21, 2016
4092531
Merge pull request #12335 from Microsoft/getJSDoc-cleanup
sandersn Nov 21, 2016
b060107
recompute character to column when comparing indentations (#12375)
vladima Nov 21, 2016
76ceab9
Make keyof T a string-like type
ahejlsberg Nov 21, 2016
854a20f
Update Record<K, T> type
ahejlsberg Nov 21, 2016
5498a95
Update tests
ahejlsberg Nov 21, 2016
c555848
Accept new baselines
ahejlsberg Nov 21, 2016
90ee161
Merge pull request #12350 from Microsoft/default_excludes
Nov 21, 2016
4c6b94f
wrap subexpressions of conditional expressions in parens if necessary…
vladima Nov 21, 2016
1710df5
Type of for-in variable is keyof T when object type is a type parameter
ahejlsberg Nov 21, 2016
dbc661f
Accept new baselines
ahejlsberg Nov 21, 2016
b662a8b
Add test case
ahejlsberg Nov 21, 2016
77c0540
Merge pull request #12425 from Microsoft/keyofOnlyStrings
ahejlsberg Nov 21, 2016
9009da2
Update baseline-accept configuration
mhegazy Nov 22, 2016
843d08b
increase timeout
mhegazy Nov 22, 2016
5403ce6
normalize path in harness
mhegazy Nov 22, 2016
b8b6e61
handel missing files gracefully
mhegazy Nov 22, 2016
2d16b19
Merge pull request #12431 from Microsoft/rwcFixes
mhegazy Nov 22, 2016
7e8af62
Merge branch 'master' into release-2.1
mhegazy Nov 22, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions Jakefile.js
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,7 @@ function runConsoleTests(defaultReporter, runInParallel) {
}

if (tests && tests.toLocaleLowerCase() === "rwc") {
testTimeout = 400000;
testTimeout = 800000;
}

colors = process.env.colors || process.env.color;
Expand Down Expand Up @@ -1086,12 +1086,10 @@ task("tests-debug", ["setDebugMode", "tests"]);
// Makes the test results the new baseline
desc("Makes the most recent test results the new baseline, overwriting the old baseline");
task("baseline-accept", function () {
acceptBaseline("");
acceptBaseline(localBaseline, refBaseline);
});

function acceptBaseline(containerFolder) {
var sourceFolder = path.join(localBaseline, containerFolder);
var targetFolder = path.join(refBaseline, containerFolder);
function acceptBaseline(sourceFolder, targetFolder) {
console.log('Accept baselines from ' + sourceFolder + ' to ' + targetFolder);
var files = fs.readdirSync(sourceFolder);
var deleteEnding = '.delete';
Expand All @@ -1115,12 +1113,12 @@ function acceptBaseline(containerFolder) {

desc("Makes the most recent rwc test results the new baseline, overwriting the old baseline");
task("baseline-accept-rwc", function () {
acceptBaseline("rwc");
acceptBaseline(localRwcBaseline, refRwcBaseline);
});

desc("Makes the most recent test262 test results the new baseline, overwriting the old baseline");
task("baseline-accept-test262", function () {
acceptBaseline("test262");
acceptBaseline(localTest262Baseline, refTest262Baseline);
});


Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@
"through2": "latest",
"travis-fold": "latest",
"ts-node": "latest",
"tsd": "latest",
"tslint": "4.0.0-dev.0",
"tslint": "4.0.0-dev.2",
"typescript": "^2.1"
},
"scripts": {
Expand Down
20 changes: 12 additions & 8 deletions scripts/parallel-lint.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
var Linter = require("tslint");
var tslint = require("tslint");
var fs = require("fs");

function getLinterOptions() {
return {
configuration: require("../tslint.json"),
formatter: "prose",
formattersDirectory: undefined,
rulesDirectory: "built/local/tslint"
};
}
function getLinterConfiguration() {
return require("../tslint.json");
}

function lintFileContents(options, path, contents) {
var ll = new Linter(path, contents, options);
return ll.lint();
function lintFileContents(options, configuration, path, contents) {
var ll = new tslint.Linter(options);
ll.lint(path, contents, configuration);
return ll.getResult();
}

function lintFileAsync(options, path, cb) {
function lintFileAsync(options, configuration, path, cb) {
fs.readFile(path, "utf8", function (err, contents) {
if (err) {
return cb(err);
}
var result = lintFileContents(options, path, contents);
var result = lintFileContents(options, configuration, path, contents);
cb(undefined, result);
});
}
Expand All @@ -30,7 +33,8 @@ process.on("message", function (data) {
case "file":
var target = data.name;
var lintOptions = getLinterOptions();
lintFileAsync(lintOptions, target, function (err, result) {
var lintConfiguration = getLinterConfiguration();
lintFileAsync(lintOptions, lintConfiguration, target, function (err, result) {
if (err) {
process.send({ kind: "error", error: err.toString() });
return;
Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/booleanTriviaRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";

export class Rule extends Lint.Rules.AbstractRule {
Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/nextLineRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";

const OPTION_CATCH = "check-catch";
Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/noInOperatorRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";


Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/noIncrementDecrementRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";


Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/noTypeAssertionWhitespaceRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";


Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/objectLiteralSurroundingSpaceRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";


Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/preferConstRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";

export class Rule extends Lint.Rules.AbstractRule {
Expand Down
2 changes: 1 addition & 1 deletion scripts/tslint/typeOperatorSpacingRule.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as Lint from "tslint/lib/lint";
import * as Lint from "tslint/lib";
import * as ts from "typescript";


Expand Down
4 changes: 2 additions & 2 deletions src/compiler/binder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -599,8 +599,8 @@ namespace ts {
// Binding of JsDocComment should be done before the current block scope container changes.
// because the scope of JsDocComment should not be affected by whether the current node is a
// container or not.
if (isInJavaScriptFile(node) && node.jsDocComments) {
forEach(node.jsDocComments, bind);
if (isInJavaScriptFile(node) && node.jsDoc) {
forEach(node.jsDoc, bind);
}
if (checkUnreachable(node)) {
bindEachChild(node);
Expand Down
95 changes: 30 additions & 65 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ namespace ts {
const voidType = createIntrinsicType(TypeFlags.Void, "void");
const neverType = createIntrinsicType(TypeFlags.Never, "never");
const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
const stringOrNumberType = getUnionType([stringType, numberType]);

const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);

Expand Down Expand Up @@ -3156,38 +3155,10 @@ namespace ts {
}

function getTypeForVariableLikeDeclarationFromJSDocComment(declaration: VariableLikeDeclaration) {
const jsDocType = getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration);
if (jsDocType) {
return getTypeFromTypeNode(jsDocType);
const jsdocType = getJSDocType(declaration);
if (jsdocType) {
return getTypeFromTypeNode(jsdocType);
}
}

function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration: VariableLikeDeclaration): JSDocType {
// First, see if this node has an @type annotation on it directly.
const typeTag = getJSDocTypeTag(declaration);
if (typeTag && typeTag.typeExpression) {
return typeTag.typeExpression.type;
}

if (declaration.kind === SyntaxKind.VariableDeclaration &&
declaration.parent.kind === SyntaxKind.VariableDeclarationList &&
declaration.parent.parent.kind === SyntaxKind.VariableStatement) {

// @type annotation might have been on the variable statement, try that instead.
const annotation = getJSDocTypeTag(declaration.parent.parent);
if (annotation && annotation.typeExpression) {
return annotation.typeExpression.type;
}
}
else if (declaration.kind === SyntaxKind.Parameter) {
// If it's a parameter, see if the parent has a jsdoc comment with an @param
// annotation.
const paramTag = getCorrespondingJSDocParameterTag(<ParameterDeclaration>declaration);
if (paramTag && paramTag.typeExpression) {
return paramTag.typeExpression.type;
}
}

return undefined;
}

Expand Down Expand Up @@ -3217,9 +3188,11 @@ namespace ts {
}
}

// A variable declared in a for..in statement is always of type string
// A variable declared in a for..in statement is of type string, or of type keyof T when the
// right hand expression is of a type parameter type.
if (declaration.parent.parent.kind === SyntaxKind.ForInStatement) {
return stringType;
const indexType = getIndexType(checkNonNullExpression((<ForInStatement>declaration.parent.parent).expression));
return indexType.flags & TypeFlags.Index ? indexType : stringType;
}

if (declaration.parent.parent.kind === SyntaxKind.ForOfStatement) {
Expand Down Expand Up @@ -3455,9 +3428,9 @@ namespace ts {
declaration.kind === SyntaxKind.PropertyAccessExpression && declaration.parent.kind === SyntaxKind.BinaryExpression) {
// Use JS Doc type if present on parent expression statement
if (declaration.flags & NodeFlags.JavaScriptFile) {
const typeTag = getJSDocTypeTag(declaration.parent);
if (typeTag && typeTag.typeExpression) {
return links.type = getTypeFromTypeNode(typeTag.typeExpression.type);
const jsdocType = getJSDocType(declaration.parent);
if (jsdocType) {
return links.type = getTypeFromTypeNode(jsdocType);
}
}
const declaredTypes = map(symbol.declarations,
Expand Down Expand Up @@ -4688,7 +4661,6 @@ namespace ts {
t.flags & TypeFlags.NumberLike ? globalNumberType :
t.flags & TypeFlags.BooleanLike ? globalBooleanType :
t.flags & TypeFlags.ESSymbol ? getGlobalESSymbolType() :
t.flags & TypeFlags.Index ? stringOrNumberType :
t;
}

Expand Down Expand Up @@ -4901,15 +4873,16 @@ namespace ts {
if (node.type && node.type.kind === SyntaxKind.JSDocOptionalType) {
return true;
}
const paramTags = getJSDocParameterTags(node);
if (paramTags) {
for (const paramTag of paramTags) {
if (paramTag.isBracketed) {
return true;
}

const paramTag = getCorrespondingJSDocParameterTag(node);
if (paramTag) {
if (paramTag.isBracketed) {
return true;
}

if (paramTag.typeExpression) {
return paramTag.typeExpression.type.kind === SyntaxKind.JSDocOptionalType;
if (paramTag.typeExpression) {
return paramTag.typeExpression.type.kind === SyntaxKind.JSDocOptionalType;
}
}
}
}
Expand Down Expand Up @@ -5920,8 +5893,7 @@ namespace ts {
function getIndexType(type: Type): Type {
return type.flags & TypeFlags.TypeParameter ? getIndexTypeForTypeParameter(<TypeParameter>type) :
getObjectFlags(type) & ObjectFlags.Mapped ? getConstraintTypeFromMappedType(<MappedType>type) :
type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? stringOrNumberType :
getIndexInfoOfType(type, IndexKind.Number) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type)]) :
type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? stringType :
getLiteralTypeFromPropertyNames(type);
}

Expand Down Expand Up @@ -6039,19 +6011,19 @@ namespace ts {
const id = objectType.id + "," + indexType.id;
return indexedAccessTypes[id] || (indexedAccessTypes[id] = createIndexedAccessType(objectType, indexType));
}
const apparentType = getApparentType(objectType);
const apparentObjectType = getApparentType(objectType);
if (indexType.flags & TypeFlags.Union && !(indexType.flags & TypeFlags.Primitive)) {
const propTypes: Type[] = [];
for (const t of (<UnionType>indexType).types) {
const propType = getPropertyTypeForIndexType(apparentType, t, accessNode, /*cacheSymbol*/ false);
const propType = getPropertyTypeForIndexType(apparentObjectType, t, accessNode, /*cacheSymbol*/ false);
if (propType === unknownType) {
return unknownType;
}
propTypes.push(propType);
}
return getUnionType(propTypes);
}
return getPropertyTypeForIndexType(apparentType, indexType, accessNode, /*cacheSymbol*/ true);
return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, /*cacheSymbol*/ true);
}

function getTypeFromIndexedAccessTypeNode(node: IndexedAccessTypeNode) {
Expand Down Expand Up @@ -7123,13 +7095,6 @@ namespace ts {

if (isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined)) return Ternary.True;

if (source.flags & TypeFlags.Index) {
// A keyof T is related to a union type containing both string and number
if (maybeTypeOfKind(target, TypeFlags.String) && maybeTypeOfKind(target, TypeFlags.Number)) {
return Ternary.True;
}
}

if (getObjectFlags(source) & ObjectFlags.ObjectLiteral && source.flags & TypeFlags.FreshLiteral) {
if (hasExcessProperties(<FreshObjectLiteralType>source, target, reportErrors)) {
if (reportErrors) {
Expand Down Expand Up @@ -10392,9 +10357,9 @@ namespace ts {
}

function getTypeForThisExpressionFromJSDoc(node: Node) {
const typeTag = getJSDocTypeTag(node);
if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === SyntaxKind.JSDocFunctionType) {
const jsDocFunctionType = <JSDocFunctionType>typeTag.typeExpression.type;
const jsdocType = getJSDocType(node);
if (jsdocType && jsdocType.kind === SyntaxKind.JSDocFunctionType) {
const jsDocFunctionType = <JSDocFunctionType>jsdocType;
if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === SyntaxKind.JSDocThisType) {
return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type);
}
Expand Down Expand Up @@ -13628,7 +13593,7 @@ namespace ts {
// the destructured type into the contained binding elements.
function assignBindingElementTypes(node: VariableLikeDeclaration) {
if (isBindingPattern(node.name)) {
for (const element of (<BindingPattern>node.name).elements) {
for (const element of node.name.elements) {
if (!isOmittedExpression(element)) {
if (element.name.kind === SyntaxKind.Identifier) {
getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
Expand Down Expand Up @@ -14256,7 +14221,7 @@ namespace ts {
if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, TypeFlags.StringLike | TypeFlags.NumberLike | TypeFlags.ESSymbol)) {
error(left, Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
}
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeParameter)) {
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeParameter | TypeFlags.IndexedAccess)) {
error(right, Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
return booleanType;
Expand Down Expand Up @@ -15650,7 +15615,7 @@ namespace ts {
const type = <MappedType>getTypeFromMappedTypeNode(node);
const constraintType = getConstraintTypeFromMappedType(type);
const keyType = constraintType.flags & TypeFlags.TypeParameter ? getApparentTypeOfTypeParameter(<TypeParameter>constraintType) : constraintType;
checkTypeAssignableTo(keyType, stringOrNumberType, node.typeParameter.constraint);
checkTypeAssignableTo(keyType, stringType, node.typeParameter.constraint);
}

function isPrivateWithinAmbient(node: Node): boolean {
Expand Down Expand Up @@ -17161,7 +17126,7 @@ namespace ts {
const rightType = checkNonNullExpression(node.expression);
// unknownType is returned i.e. if node.expression is identifier whose name cannot be resolved
// in this case error about missing name is already reported - do not report extra one
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeParameter)) {
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeParameter | TypeFlags.IndexedAccess)) {
error(node.expression, Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
}

Expand Down
4 changes: 2 additions & 2 deletions src/compiler/commandLineParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -951,8 +951,8 @@ namespace ts {
errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
}
else {
// By default, exclude common package folders and the outDir
excludeSpecs = ["node_modules", "bower_components", "jspm_packages"];
// If no includes were specified, exclude common package folders and the outDir
excludeSpecs = includeSpecs ? [] : ["node_modules", "bower_components", "jspm_packages"];

const outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"];
if (outDir) {
Expand Down
2 changes: 1 addition & 1 deletion src/compiler/declarationEmitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ namespace ts {

function writeJsDocComments(declaration: Node) {
if (declaration) {
const jsDocComments = getJsDocCommentsFromText(declaration, currentText);
const jsDocComments = getJSDocCommentRanges(declaration, currentText);
emitNewLineBeforeLeadingComments(currentLineMap, writer, declaration, jsDocComments);
// jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space
emitComments(currentText, currentLineMap, writer, jsDocComments, /*leadingSeparator*/ false, /*trailingSeparator*/ true, newLine, writeCommentRange);
Expand Down
Loading