@@ -208,53 +208,54 @@ func getCallHierarchyItemName(program *compiler.Program, node *ast.Node) (text s
208208 debug .Assert (declName != nil , "Expected call hierarchy item to have a name" )
209209 }
210210
211- if ast .IsIdentifier (declName ) {
212- text = declName .Text ()
213- } else if ast .IsStringOrNumericLiteralLike (declName ) {
214- text = declName .Text ()
215- } else if ast .IsComputedPropertyName (declName ) {
216- expr := declName .Expression ()
211+ text = getTextOfCallHierarchyName (program , node , declName , node )
212+
213+ sourceFile := ast .GetSourceFileOfNode (node )
214+ namePos := scanner .SkipTrivia (sourceFile .Text (), declName .Pos ())
215+
216+ return text , namePos , declName .End ()
217+ }
218+
219+ func getTextOfCallHierarchyName (program * compiler.Program , sourceNode * ast.Node , name * ast.Node , printNode * ast.Node ) string {
220+ if ast .IsIdentifier (name ) || ast .IsStringOrNumericLiteralLike (name ) {
221+ return name .Text ()
222+ }
223+ if ast .IsComputedPropertyName (name ) {
224+ expr := name .Expression ()
217225 if ast .IsStringOrNumericLiteralLike (expr ) {
218- text = expr .Text ()
226+ return expr .Text ()
219227 }
220228 }
221229
222- if text == "" {
223- c , done := program .GetTypeCheckerForFile (context .Background (), ast .GetSourceFileOfNode (node ))
224- defer done ()
225- symbol := c .GetSymbolAtLocation (declName )
226- if symbol != nil {
227- text = c .SymbolToString (symbol )
230+ c , done := program .GetTypeCheckerForFile (context .Background (), ast .GetSourceFileOfNode (sourceNode ))
231+ defer done ()
232+ symbol := c .GetSymbolAtLocation (name )
233+ if symbol != nil {
234+ text := c .SymbolToString (symbol )
235+ if text != "" {
236+ return text
228237 }
229238 }
230239
231- // get the text from printing the node on a single line without comments...
232- if text == "" {
233- sourceFile := ast .GetSourceFileOfNode (node )
234- writer , putWriter := printer .GetSingleLineStringWriter ()
235- defer putWriter ()
236- p := printer .NewPrinter (printer.PrinterOptions {RemoveComments : true }, printer.PrintHandlers {}, nil )
237- p .Write (node , sourceFile , writer , nil )
238- text = writer .String ()
239- }
240-
241- sourceFile := ast .GetSourceFileOfNode (node )
242- namePos := scanner .SkipTrivia (sourceFile .Text (), declName .Pos ())
243-
244- return text , namePos , declName .End ()
240+ sourceFile := ast .GetSourceFileOfNode (sourceNode )
241+ writer , putWriter := printer .GetSingleLineStringWriter ()
242+ defer putWriter ()
243+ p := printer .NewPrinter (printer.PrinterOptions {RemoveComments : true }, printer.PrintHandlers {}, nil )
244+ p .Write (printNode , sourceFile , writer , nil )
245+ return writer .String ()
245246}
246247
247- func getCallHierarchyItemContainerName (node * ast.Node ) string {
248+ func getCallHierarchyItemContainerName (program * compiler. Program , node * ast.Node ) string {
248249 if isAssignedExpression (node ) {
249250 parent := node .Parent
250251 if ast .IsPropertyDeclaration (parent ) && ast .IsClassLike (parent .Parent ) {
251252 if ast .IsClassExpression (parent .Parent ) {
252253 if assignedName := ast .GetAssignedName (parent .Parent ); assignedName != nil {
253- return assignedName . Text ( )
254+ return getTextOfCallHierarchyName ( program , node , assignedName , assignedName )
254255 }
255256 } else {
256257 if name := parent .Parent .Name (); name != nil {
257- return name . Text ( )
258+ return getTextOfCallHierarchyName ( program , node , name , name )
258259 }
259260 }
260261 }
@@ -273,11 +274,11 @@ func getCallHierarchyItemContainerName(node *ast.Node) string {
273274 case ast .KindGetAccessor , ast .KindSetAccessor , ast .KindMethodDeclaration :
274275 if node .Parent .Kind == ast .KindObjectLiteralExpression {
275276 if assignedName := ast .GetAssignedName (node .Parent ); assignedName != nil {
276- return assignedName . Text ( )
277+ return getTextOfCallHierarchyName ( program , node , assignedName , assignedName )
277278 }
278279 }
279280 if name := ast .GetNameOfDeclaration (node .Parent ); name != nil {
280- return name . Text ( )
281+ return getTextOfCallHierarchyName ( program , node , name , name )
281282 }
282283 case ast .KindFunctionDeclaration , ast .KindClassDeclaration , ast .KindModuleDeclaration :
283284 if ast .IsModuleBlock (node .Parent ) {
@@ -498,7 +499,7 @@ func resolveCallHierarchyDeclaration(program *compiler.Program, location *ast.No
498499func (l * LanguageService ) createCallHierarchyItem (program * compiler.Program , node * ast.Node ) * lsproto.CallHierarchyItem {
499500 sourceFile := ast .GetSourceFileOfNode (node )
500501 nameText , namePos , nameEnd := getCallHierarchyItemName (program , node )
501- containerName := getCallHierarchyItemContainerName (node )
502+ containerName := getCallHierarchyItemContainerName (program , node )
502503
503504 kind := getSymbolKindFromNode (node )
504505
0 commit comments