(changes, sourceFile, parameterInferences, program, host)
| 156799 | return false; |
| 156800 | } |
| 156801 | function annotateJSDocParameters(changes, sourceFile, parameterInferences, program, host) { |
| 156802 | var signature = parameterInferences.length && parameterInferences[0].declaration.parent; |
| 156803 | if (!signature) { |
| 156804 | return; |
| 156805 | } |
| 156806 | var inferences = ts.mapDefined(parameterInferences, function (inference) { |
| 156807 | var param = inference.declaration; |
| 156808 | // only infer parameters that have (1) no type and (2) an accessible inferred type |
| 156809 | if (param.initializer || ts.getJSDocType(param) || !ts.isIdentifier(param.name)) { |
| 156810 | return; |
| 156811 | } |
| 156812 | var typeNode = inference.type && ts.getTypeNodeIfAccessible(inference.type, param, program, host); |
| 156813 | if (typeNode) { |
| 156814 | var name = ts.factory.cloneNode(param.name); |
| 156815 | ts.setEmitFlags(name, 1536 /* EmitFlags.NoComments */ | 2048 /* EmitFlags.NoNestedComments */); |
| 156816 | return { name: ts.factory.cloneNode(param.name), param: param, isOptional: !!inference.isOptional, typeNode: typeNode }; |
| 156817 | } |
| 156818 | }); |
| 156819 | if (!inferences.length) { |
| 156820 | return; |
| 156821 | } |
| 156822 | if (ts.isArrowFunction(signature) || ts.isFunctionExpression(signature)) { |
| 156823 | var needParens = ts.isArrowFunction(signature) && !ts.findChildOfKind(signature, 20 /* SyntaxKind.OpenParenToken */, sourceFile); |
| 156824 | if (needParens) { |
| 156825 | changes.insertNodeBefore(sourceFile, ts.first(signature.parameters), ts.factory.createToken(20 /* SyntaxKind.OpenParenToken */)); |
| 156826 | } |
| 156827 | ts.forEach(inferences, function (_a) { |
| 156828 | var typeNode = _a.typeNode, param = _a.param; |
| 156829 | var typeTag = ts.factory.createJSDocTypeTag(/*tagName*/ undefined, ts.factory.createJSDocTypeExpression(typeNode)); |
| 156830 | var jsDoc = ts.factory.createJSDocComment(/*comment*/ undefined, [typeTag]); |
| 156831 | changes.insertNodeAt(sourceFile, param.getStart(sourceFile), jsDoc, { suffix: " " }); |
| 156832 | }); |
| 156833 | if (needParens) { |
| 156834 | changes.insertNodeAfter(sourceFile, ts.last(signature.parameters), ts.factory.createToken(21 /* SyntaxKind.CloseParenToken */)); |
| 156835 | } |
| 156836 | } |
| 156837 | else { |
| 156838 | var paramTags = ts.map(inferences, function (_a) { |
| 156839 | var name = _a.name, typeNode = _a.typeNode, isOptional = _a.isOptional; |
| 156840 | return ts.factory.createJSDocParameterTag(/*tagName*/ undefined, name, /*isBracketed*/ !!isOptional, ts.factory.createJSDocTypeExpression(typeNode), /* isNameFirst */ false, /*comment*/ undefined); |
| 156841 | }); |
| 156842 | changes.addJSDocTags(sourceFile, signature, paramTags); |
| 156843 | } |
| 156844 | } |
| 156845 | function getReferences(token, program, cancellationToken) { |
| 156846 | // Position shouldn't matter since token is not a SourceFile. |
| 156847 | return ts.mapDefined(ts.FindAllReferences.getReferenceEntriesForNode(-1, token, program, program.getSourceFiles(), cancellationToken), function (entry) { |
no test coverage detected
searching dependent graphs…