MCPcopy Index your code
hub / github.com/nodejs/node / collectTypeParameters

Function collectTypeParameters

test/fixtures/snapshot/typescript.js:161809–161863  ·  view source on GitHub ↗
(checker, selection, statement, file)

Source from the content-addressed store, hash-verified

161807 return ts.rangeContainsStartEnd(r1, ts.skipTrivia(file.text, node.pos), node.end);
161808 }
161809 function collectTypeParameters(checker, selection, statement, file) {
161810 var result = [];
161811 return visitor(selection) ? undefined : result;
161812 function visitor(node) {
161813 if (ts.isTypeReferenceNode(node)) {
161814 if (ts.isIdentifier(node.typeName)) {
161815 var typeName = node.typeName;
161816 var symbol = checker.resolveName(typeName.text, typeName, 262144 /* SymbolFlags.TypeParameter */, /* excludeGlobals */ true);
161817 for (var _i = 0, _a = (symbol === null || symbol === void 0 ? void 0 : symbol.declarations) || ts.emptyArray; _i < _a.length; _i++) {
161818 var decl = _a[_i];
161819 if (ts.isTypeParameterDeclaration(decl) && decl.getSourceFile() === file) {
161820 // skip extraction if the type node is in the range of the type parameter declaration.
161821 // function foo<T extends { a?: /**/T }>(): void;
161822 if (decl.name.escapedText === typeName.escapedText && rangeContainsSkipTrivia(decl, selection, file)) {
161823 return true;
161824 }
161825 if (rangeContainsSkipTrivia(statement, decl, file) && !rangeContainsSkipTrivia(selection, decl, file)) {
161826 ts.pushIfUnique(result, decl);
161827 break;
161828 }
161829 }
161830 }
161831 }
161832 }
161833 else if (ts.isInferTypeNode(node)) {
161834 var conditionalTypeNode = ts.findAncestor(node, function (n) { return ts.isConditionalTypeNode(n) && rangeContainsSkipTrivia(n.extendsType, node, file); });
161835 if (!conditionalTypeNode || !rangeContainsSkipTrivia(selection, conditionalTypeNode, file)) {
161836 return true;
161837 }
161838 }
161839 else if ((ts.isTypePredicateNode(node) || ts.isThisTypeNode(node))) {
161840 var functionLikeNode = ts.findAncestor(node.parent, ts.isFunctionLike);
161841 if (functionLikeNode && functionLikeNode.type && rangeContainsSkipTrivia(functionLikeNode.type, node, file) && !rangeContainsSkipTrivia(selection, functionLikeNode, file)) {
161842 return true;
161843 }
161844 }
161845 else if (ts.isTypeQueryNode(node)) {
161846 if (ts.isIdentifier(node.exprName)) {
161847 var symbol = checker.resolveName(node.exprName.text, node.exprName, 111551 /* SymbolFlags.Value */, /* excludeGlobals */ false);
161848 if ((symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) && rangeContainsSkipTrivia(statement, symbol.valueDeclaration, file) && !rangeContainsSkipTrivia(selection, symbol.valueDeclaration, file)) {
161849 return true;
161850 }
161851 }
161852 else {
161853 if (ts.isThisIdentifier(node.exprName.left) && !rangeContainsSkipTrivia(selection, node.parent, file)) {
161854 return true;
161855 }
161856 }
161857 }
161858 if (file && ts.isTupleTypeNode(node) && (ts.getLineAndCharacterOfPosition(file, node.pos).line === ts.getLineAndCharacterOfPosition(file, node.end).line)) {
161859 ts.setEmitFlags(node, 1 /* EmitFlags.SingleLine */);
161860 }
161861 return ts.forEachChild(node, visitor);
161862 }
161863 }
161864 function doTypeAliasChange(changes, file, name, info) {
161865 var firstStatement = info.firstStatement, selection = info.selection, typeParameters = info.typeParameters;
161866 var newTypeNode = ts.factory.createTypeAliasDeclaration(

Callers 1

getRangeToExtractFunction · 0.85

Calls 1

visitorFunction · 0.70

Tested by

no test coverage detected