(self, project_name, file_path, stack=[])
return extended_meta
returns the full metadata for a given cfc file path
        this is used, rather than just `cfc_index[file_path]["functions"]`
        in order to take into account the `extends` attribute
returns the full metadata for a given cfc file path
        this is used, rather than just `cfc_index[file_path]["functions"]`
        in order to take into account the `extends` attribute
returns the full metadata for a given cfc file path this is used rather than just cfc_index [ file_path ] [ functions ] in order to take into account the extends attribute
def get_extended_metadata_by_file_path(self, project_name, file_path, stack=[]):
        """
        returns the full metadata for a given cfc file path
        this is used, rather than just `cfc_index[file_path]["functions"]`
        in order to take into account the `extends` attribute
        """
        base_meta = self.get_metadata_by_file_path(project_name, file_path)

        if not base_meta:
            return None

        extended_meta = dict(base_meta)
        extended_meta.update({"functions": {}, "function_file_map": {}, "properties": {}, "property_file_map": {}})

        if base_meta["extends"]:
            extends_file_path = self.resolve_path(project_name, file_path, base_meta["extends"])
            if file_path not in stack:
                stack.append(file_path)
                root_meta = self.get_extended_metadata_by_file_path(project_name, extends_file_path, stack)
                if root_meta:
                    for key in ["functions", "function_file_map", "properties", "property_file_map"]:
                        extended_meta[key].update(root_meta[key])

        extended_meta["functions"].update(base_meta["functions"])
        extended_meta["function_file_map"].update({funct_key: file_path for funct_key in base_meta["functions"]})
        extended_meta["properties"].update(base_meta["properties"])
        extended_meta["property_file_map"].update({prop_key: file_path for prop_key in base_meta["properties"]})
        return extended_meta
def get_extended_metadata_by_file_path ( self , project_name , file_path , stack = [ ] ) : base_meta = self . get_metadata_by_file_path ( project_name , file_path ) if not base_meta : return None extended_meta = dict ( base_meta ) extended_meta . update ( { "functions" : { } , "function_file_map" : { } , "properties" : { } , "property_file_map" : { } } ) if base_meta [ "extends" ] : extends_file_path = self . resolve_path ( project_name , file_path , base_meta [ "extends" ] ) if file_path not in stack : stack . append ( file_path ) root_meta = self . get_extended_metadata_by_file_path ( project_name , extends_file_path , stack ) if root_meta : for key in [ "functions" , "function_file_map" , "properties" , "property_file_map" ] : extended_meta [ key ] . update ( root_meta [ key ] ) extended_meta [ "functions" ] . update ( base_meta [ "functions" ] ) extended_meta [ "function_file_map" ] . update ( { funct_key : file_path for funct_key in base_meta [ "functions" ] } ) extended_meta [ "properties" ] . update ( base_meta [ "properties" ] ) extended_meta [ "property_file_map" ] . update ( { prop_key : file_path for prop_key in base_meta [ "properties" ] } ) return extended_meta