4343from strictdoc .backend .sdoc_source_code .models .source_node import SourceNode
4444from strictdoc .core .constants import GraphLinkType
4545from strictdoc .core .document_iterator import SDocDocumentIterator
46- from strictdoc .core .project_config import ProjectConfig
46+ from strictdoc .core .project_config import ProjectConfig , SourceNodesEntry
4747from strictdoc .core .source_tree import SourceFile
4848from strictdoc .helpers .cast import assert_cast
4949from strictdoc .helpers .exception import StrictDocException
@@ -596,9 +596,11 @@ def create_folder_section(
596596 documents_with_generated_content = set ()
597597
598598 section_cache = {}
599- source_nodes_config : List [Dict [str , str ]] = project_config .source_nodes
599+ source_nodes_config : List [SourceNodesEntry ] = (
600+ project_config .source_nodes
601+ )
600602 unused_source_node_paths = {
601- config_entry_ [ " path" ] for config_entry_ in source_nodes_config
603+ config_entry_ . path for config_entry_ in source_nodes_config
602604 }
603605 for (
604606 path_to_source_file_ ,
@@ -610,16 +612,19 @@ def create_folder_section(
610612 if len (source_nodes_config ) == 0 :
611613 continue
612614
613- for config_entry_ in source_nodes_config :
614- config_entry_path = config_entry_ ["path" ]
615- if path_to_source_file_ .startswith (config_entry_path ):
616- relevant_source_node_entry = config_entry_
617- unused_source_node_paths .discard (config_entry_path )
618- break
615+ relevant_source_node_entry = (
616+ project_config .get_relevant_source_nodes_entry (
617+ path_to_source_file_
618+ )
619+ )
620+ if relevant_source_node_entry is not None :
621+ unused_source_node_paths .discard (
622+ relevant_source_node_entry .path
623+ )
619624 else :
620625 continue
621626
622- document_uid = relevant_source_node_entry [ " uid" ]
627+ document_uid = relevant_source_node_entry . uid
623628 document = traceability_index .get_node_by_uid (document_uid )
624629 documents_with_generated_content .add (document )
625630
@@ -651,7 +656,10 @@ def create_folder_section(
651656 if source_sdoc_node is not None :
652657 source_sdoc_node = assert_cast (source_sdoc_node , SDocNode )
653658 self .merge_sdoc_node_with_source_node (
654- source_sdoc_node , source_node_ , document , config_entry_
659+ source_sdoc_node ,
660+ source_node_ ,
661+ document ,
662+ relevant_source_node_entry ,
655663 )
656664 else :
657665 source_sdoc_node = self .create_sdoc_node_from_source_node (
@@ -969,11 +977,11 @@ def create_sdoc_node_from_source_node(
969977 source_node : SourceNode ,
970978 uid : str ,
971979 parent_document : SDocDocumentIF ,
972- relevant_source_node_entry : dict [ str , str ] ,
980+ relevant_source_node_entry : SourceNodesEntry ,
973981 ) -> SDocNode :
974982 source_sdoc_node = SDocNode (
975983 parent = parent_document ,
976- node_type = relevant_source_node_entry [ " node_type" ] ,
984+ node_type = relevant_source_node_entry . node_type ,
977985 fields = [],
978986 relations = [],
979987 # It is important that this autogenerated node is marked as such.
@@ -1005,10 +1013,10 @@ def merge_sdoc_node_with_source_node(
10051013 sdoc_node : SDocNode ,
10061014 source_node : SourceNode ,
10071015 parent_document : SDocDocumentIF ,
1008- source_node_config_entry : dict [ str , str ] ,
1016+ source_node_config_entry : SourceNodesEntry ,
10091017 ) -> None :
10101018 # First check if grammar element definitions are compatible.
1011- source_node_type = source_node_config_entry [ " node_type" ]
1019+ source_node_type = source_node_config_entry . node_type
10121020 source_node_grammar = assert_cast (
10131021 parent_document .grammar , DocumentGrammar
10141022 )
0 commit comments