@@ -344,61 +344,56 @@ def _find_imports(self, root_node):
344344 imports = []
345345 query = self .queries ['imports' ]
346346 for node , capture_name in query .captures (root_node ):
347- if capture_name == 'import' :
348- line_number = node .start_point [0 ] + 1
349- if node .type == 'import_statement' :
350- source_node = node .child_by_field_name ('source' )
351- if not source_node : continue
352- source = self ._get_node_text (source_node ).strip ('\' "' )
347+ if capture_name != 'import' :
348+ continue
353349
354- import_clause = next ((c for c in node .children if c .type == 'import_clause' ), None )
355- if not import_clause : # e.g. import "source"
356- imports .append ({"name" : source , "full_import_name" : source , "alias" : source , "line_number" : line_number , "context" : None , "lang" : self .language_name , "is_dependency" : False })
357- continue
358-
359- # default import
360- default_node = next ((c for c in import_clause .children if c .type == 'identifier' ), None )
361- if default_node :
362- alias = self ._get_node_text (default_node )
363- imports .append ({"name" : "default" , "full_import_name" : source , "alias" : alias , "line_number" : line_number , "context" : None , "lang" : self .language_name , "is_dependency" : False })
350+ line_number = node .start_point [0 ] + 1
351+
352+ if node .type == 'import_statement' :
353+ source = self ._get_node_text (node .child_by_field_name ('source' )).strip ('\' "' )
354+
355+ # Look for different import structures
356+ import_clause = node .child_by_field_name ('import' )
357+ if not import_clause :
358+ imports .append ({'name' : source , 'source' : source , 'alias' : None , 'line_number' : line_number , 'lang' : self .language_name })
359+ continue
360+
361+ # Default import: import defaultExport from '...'
362+ if import_clause .type == 'identifier' :
363+ alias = self ._get_node_text (import_clause )
364+ imports .append ({'name' : 'default' , 'source' : source , 'alias' : alias , 'line_number' : line_number , 'lang' : self .language_name })
364365
365- # namespace import
366- namespace_node = next ((c for c in import_clause .children if c .type == 'namespace_import' ), None )
367- if namespace_node :
368- alias_node = None
369- for child in namespace_node .children :
370- if child .type == 'identifier' :
371- alias_node = child
372- break
373- if alias_node :
374- alias = self ._get_node_text (alias_node )
375- imports .append ({"name" : "*" , "full_import_name" : source , "alias" : alias , "line_number" : line_number , "context" : None , "lang" : self .language_name , "is_dependency" : False })
376-
377- # named imports
378- named_imports_node = next ((c for c in import_clause .children if c .type == 'named_imports' ), None )
379- if named_imports_node :
380- for specifier in named_imports_node .children :
381- if specifier .type == 'import_specifier' :
382- name_node = specifier .child_by_field_name ('name' )
383- alias_node = specifier .child_by_field_name ('alias' )
384- name = self ._get_node_text (name_node )
385- alias = self ._get_node_text (alias_node ) if alias_node else name
386- imports .append ({"name" : name , "full_import_name" : f"{ source } /{ name } " , "alias" : alias , "line_number" : line_number , "context" : None , "lang" : self .language_name , "is_dependency" : False })
366+ # Namespace import: import * as name from '...'
367+ elif import_clause .type == 'namespace_import' :
368+ alias_node = import_clause .child_by_field_name ('alias' )
369+ if alias_node :
370+ alias = self ._get_node_text (alias_node )
371+ imports .append ({'name' : '*' , 'source' : source , 'alias' : alias , 'line_number' : line_number , 'lang' : self .language_name })
372+
373+ # Named imports: import { name, name as alias } from '...'
374+ elif import_clause .type == 'named_imports' :
375+ for specifier in import_clause .children :
376+ if specifier .type == 'import_specifier' :
377+ name_node = specifier .child_by_field_name ('name' )
378+ alias_node = specifier .child_by_field_name ('alias' )
379+ original_name = self ._get_node_text (name_node )
380+ alias = self ._get_node_text (alias_node ) if alias_node else None
381+ imports .append ({'name' : original_name , 'source' : source , 'alias' : alias , 'line_number' : line_number , 'lang' : self .language_name })
382+
383+ elif node .type == 'call_expression' : # require('...')
384+ args = node .child_by_field_name ('arguments' )
385+ if not args or args .named_child_count == 0 : continue
386+ source_node = args .named_child (0 )
387+ if not source_node or source_node .type != 'string' : continue
388+ source = self ._get_node_text (source_node ).strip ('\' "' )
389+
390+ alias = None
391+ if node .parent .type == 'variable_declarator' :
392+ alias_node = node .parent .child_by_field_name ('name' )
393+ if alias_node :
394+ alias = self ._get_node_text (alias_node )
395+ imports .append ({'name' : source , 'source' : source , 'alias' : alias , 'line_number' : line_number , 'lang' : self .language_name })
387396
388- elif node .type == 'call_expression' : # require
389- args_node = node .child_by_field_name ('arguments' )
390- if not args_node or args_node .named_child_count == 0 : continue
391- path_node = args_node .named_child (0 )
392- if not path_node or path_node .type != 'string' : continue
393- path = self ._get_node_text (path_node ).strip ('\' "' )
394-
395- alias = None
396- if node .parent .type == 'variable_declarator' :
397- alias_node = node .parent .child_by_field_name ('name' )
398- if alias_node :
399- alias = self ._get_node_text (alias_node )
400-
401- imports .append ({"name" : path , "full_import_name" : path , "alias" : alias if alias else path , "line_number" : line_number , "context" : None , "lang" : self .language_name , "is_dependency" : False })
402397 return imports
403398
404399 def _find_calls (self , root_node ):
0 commit comments