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

Function getEntryForMemberCompletion

test/fixtures/snapshot/typescript.js:132607–132685  ·  view source on GitHub ↗
(host, program, options, preferences, name, symbol, location, contextToken, formatContext)

Source from the content-addressed store, hash-verified

132605 ts.isClassLike(location.parent)));
132606 }
132607 function getEntryForMemberCompletion(host, program, options, preferences, name, symbol, location, contextToken, formatContext) {
132608 var classLikeDeclaration = ts.findAncestor(location, ts.isClassLike);
132609 if (!classLikeDeclaration) {
132610 return { insertText: name };
132611 }
132612 var isSnippet;
132613 var replacementSpan;
132614 var insertText = name;
132615 var checker = program.getTypeChecker();
132616 var sourceFile = location.getSourceFile();
132617 var printer = createSnippetPrinter({
132618 removeComments: true,
132619 module: options.module,
132620 target: options.target,
132621 omitTrailingSemicolon: false,
132622 newLine: ts.getNewLineKind(ts.getNewLineCharacter(options, ts.maybeBind(host, host.getNewLine))),
132623 });
132624 var importAdder = ts.codefix.createImportAdder(sourceFile, program, preferences, host);
132625 // Create empty body for possible method implementation.
132626 var body;
132627 if (preferences.includeCompletionsWithSnippetText) {
132628 isSnippet = true;
132629 // We are adding a tabstop (i.e. `$0`) in the body of the suggested member,
132630 // if it has one, so that the cursor ends up in the body once the completion is inserted.
132631 // Note: this assumes we won't have more than one body in the completion nodes, which should be the case.
132632 var emptyStmt = ts.factory.createEmptyStatement();
132633 body = ts.factory.createBlock([emptyStmt], /* multiline */ true);
132634 ts.setSnippetElement(emptyStmt, { kind: 0 /* SnippetKind.TabStop */, order: 0 });
132635 }
132636 else {
132637 body = ts.factory.createBlock([], /* multiline */ true);
132638 }
132639 var modifiers = 0 /* ModifierFlags.None */;
132640 // Whether the suggested member should be abstract.
132641 // e.g. in `abstract class C { abstract | }`, we should offer abstract method signatures at position `|`.
132642 var _a = getPresentModifiers(contextToken), presentModifiers = _a.modifiers, modifiersSpan = _a.span;
132643 var isAbstract = !!(presentModifiers & 128 /* ModifierFlags.Abstract */);
132644 var completionNodes = [];
132645 ts.codefix.addNewNodeForMemberSymbol(symbol, classLikeDeclaration, sourceFile, { program: program, host: host }, preferences, importAdder,
132646 // `addNewNodeForMemberSymbol` calls this callback function for each new member node
132647 // it adds for the given member symbol.
132648 // We store these member nodes in the `completionNodes` array.
132649 // Note: there might be:
132650 // - No nodes if `addNewNodeForMemberSymbol` cannot figure out a node for the member;
132651 // - One node;
132652 // - More than one node if the member is overloaded (e.g. a method with overload signatures).
132653 function (node) {
132654 var requiredModifiers = 0 /* ModifierFlags.None */;
132655 if (isAbstract) {
132656 requiredModifiers |= 128 /* ModifierFlags.Abstract */;
132657 }
132658 if (ts.isClassElement(node)
132659 && checker.getMemberOverrideModifierStatus(classLikeDeclaration, node) === 1 /* MemberOverrideStatus.NeedsOverride */) {
132660 requiredModifiers |= 16384 /* ModifierFlags.Override */;
132661 }
132662 if (!completionNodes.length) {
132663 // Keep track of added missing required modifiers and modifiers already present.
132664 // This is needed when we have overloaded signatures,

Calls 3

createSnippetPrinterFunction · 0.85
getPresentModifiersFunction · 0.85
pushMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…