MCPcopy Create free account
hub / github.com/microsoft/typescript-go / typeNodeToExpression

Function typeNodeToExpression

internal/ls/completions.go:6081–6141  ·  view source on GitHub ↗
(
	typeNode *ast.TypeNode,
	target core.ScriptTarget,
	quotePreference lsutil.QuotePreference,
	factory *ast.NodeFactory,
)

Source from the content-addressed store, hash-verified

6079}
6080
6081func typeNodeToExpression(
6082 typeNode *ast.TypeNode,
6083 target core.ScriptTarget,
6084 quotePreference lsutil.QuotePreference,
6085 factory *ast.NodeFactory,
6086) *ast.Expression {
6087 switch typeNode.Kind {
6088 case ast.KindTypeReference:
6089 typeName := typeNode.AsTypeReferenceNode().TypeName
6090 return entityNameToExpression(typeName, target, quotePreference, factory)
6091 case ast.KindIndexedAccessType:
6092 objectExpression := typeNodeToExpression(
6093 typeNode.AsIndexedAccessTypeNode().ObjectType,
6094 target,
6095 quotePreference,
6096 factory,
6097 )
6098 indexExpression := typeNodeToExpression(
6099 typeNode.AsIndexedAccessTypeNode().IndexType,
6100 target,
6101 quotePreference,
6102 factory,
6103 )
6104 if objectExpression != nil && indexExpression != nil {
6105 return factory.NewElementAccessExpression(objectExpression, nil /*questionDotToken*/, indexExpression, ast.NodeFlagsNone)
6106 }
6107 return nil
6108 case ast.KindLiteralType:
6109 literal := typeNode.AsLiteralTypeNode().Literal
6110 switch literal.Kind {
6111 case ast.KindStringLiteral:
6112 expr := factory.NewStringLiteral(literal.Text(), core.IfElse(quotePreference == lsutil.QuotePreferenceSingle, ast.TokenFlagsSingleQuote, ast.TokenFlagsNone))
6113 return expr
6114 case ast.KindNumericLiteral:
6115 expr := factory.NewNumericLiteral(literal.Text(), literal.AsNumericLiteral().TokenFlags)
6116 return expr
6117 default:
6118 return nil
6119 }
6120 case ast.KindParenthesizedType:
6121 expr := typeNodeToExpression(
6122 typeNode.AsParenthesizedTypeNode().Type,
6123 target,
6124 quotePreference,
6125 factory,
6126 )
6127 if expr == nil {
6128 return nil
6129 }
6130 if ast.IsIdentifier(expr) {
6131 return expr
6132 }
6133 return factory.NewParenthesizedExpression(expr)
6134 case ast.KindTypeQuery:
6135 return entityNameToExpression(typeNode.AsTypeQueryNode().ExprName, target, quotePreference, factory)
6136 case ast.KindImportType:
6137 debug.Fail(`We should not get an import type after calling 'typeToAutoImportableTypeNode'.`)
6138 return nil

Callers 1

Calls 15

IfElseFunction · 0.92
IsIdentifierFunction · 0.92
FailFunction · 0.92
entityNameToExpressionFunction · 0.85
AsTypeReferenceNodeMethod · 0.80
AsLiteralTypeNodeMethod · 0.80
NewStringLiteralMethod · 0.80
NewNumericLiteralMethod · 0.80
AsNumericLiteralMethod · 0.80

Tested by

no test coverage detected