From ec7d8e3791c06f3d78b832d10fb6d746de6d8bfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 23 Aug 2024 08:34:14 +0300 Subject: [PATCH 01/40] chore: refactor(remove php) --- README.md | 47 +-- cmd/go-deptrac/main_test.go | 23 -- .../PostProcessEvent/PostProcessEvent.go | 22 -- ...TokenReferenceWithDependenciesInterface.go | 4 +- .../Result/OutputResult/OutputResult.go | 4 +- .../contract/Result/Violation/Violation.go | 6 +- .../analysis_result}/AnalysisResult.php | 0 .../analysis_result/analysis_result.go} | 2 +- .../event_helper}/EventHelper.php | 0 .../event_helper/event_helper.go} | 10 +- .../post_process_event}/PostProcessEvent.php | 0 .../post_process_event/post_process_event.go | 22 ++ .../process_event}/ProcessEvent.php | 0 .../process_event/process_event.go} | 12 +- .../ViolationCreatingInterface.php | 0 .../violation_creating_interface.go} | 2 +- .../AnalyserException/AnalyserException.php | 45 --- .../DependencyLayersAnalyser.php | 73 ----- .../UnmatchedSkippedViolations.php | 32 --- .../AllowDependencyHandler.php | 26 -- .../DependsOnDisallowedLayer.php | 55 ---- .../DependsOnInternalToken.php | 57 ---- .../DependsOnPrivateLayer.php | 45 --- .../MatchingLayersHandler.php | 27 -- .../UncoveredDependentHandler.php | 43 --- .../LayerDependenciesAnalyser.php | 60 ---- .../LayerForTokenAnalyser.php | 79 ------ .../RulesetUsageAnalyser.php | 95 ------- .../TokenInLayerAnalyser.php | 78 ----- pkg/src/core/Analyser/TokenType/TokenType.php | 16 -- .../UnassignedTokenAnalyser.php | 78 ----- .../core/Ast/AstException/AstException.php | 15 - pkg/src/core/Ast/AstLoader/AstLoader.php | 38 --- pkg/src/core/Ast/AstMap/AstInherit.php | 45 --- pkg/src/core/Ast/AstMap/AstInheritType.php | 11 - pkg/src/core/Ast/AstMap/AstMap.php | 137 --------- .../core/Ast/AstMap/ClassLikeReference.php | 38 --- .../Ast/AstMap/ClassLikeReferenceBuilder.php | 74 ----- pkg/src/core/Ast/AstMap/ClassLikeToken.php | 28 -- pkg/src/core/Ast/AstMap/ClassLikeType.php | 17 -- pkg/src/core/Ast/AstMap/DependencyToken.php | 16 -- pkg/src/core/Ast/AstMap/FileReference.php | 40 --- .../core/Ast/AstMap/FileReferenceBuilder.php | 89 ------ pkg/src/core/Ast/AstMap/FileToken.php | 26 -- pkg/src/core/Ast/AstMap/FunctionReference.php | 35 --- .../Ast/AstMap/FunctionReferenceBuilder.php | 30 -- pkg/src/core/Ast/AstMap/FunctionToken.php | 28 -- pkg/src/core/Ast/AstMap/ReferenceBuilder.php | 126 -------- pkg/src/core/Ast/AstMap/SuperGlobalToken.php | 29 -- .../core/Ast/AstMap/TaggedTokenReference.php | 31 -- pkg/src/core/Ast/AstMap/VariableReference.php | 24 -- .../Ast/AstMapExtractor/AstMapExtractor.go | 40 --- .../Ast/AstMapExtractor/AstMapExtractor.php | 26 -- .../AstMapExtractor/AstMapExtractor_test.go | 50 ---- .../AstFileReferenceCacheInterface.go | 10 - .../AstFileReferenceCacheInterface.php | 10 - .../AstFileReferenceDeferredCacheInterface.go | 9 - ...AstFileReferenceDeferredCacheInterface.php | 9 - .../AstFileReferenceFileCache.php | 134 --------- .../AstFileReferenceInMemoryCache.php | 23 -- .../CacheableFileSubscriber.php | 29 -- .../ReferenceExtractorInterface.go | 11 - .../ReferenceExtractorInterface.php | 12 - .../FileReferenceVisitor.php | 268 ------------------ .../NikicPhpParser/NikicPhpParser.php | 106 ------- .../Parser/ParserInterface/ParserInterface.go | 9 - .../ParserInterface/ParserInterface.php | 14 - .../Ast/Parser/TypeResolver/TypeResolver.php | 160 ----------- .../core/Ast/Parser/TypeScope/TypeScope.php | 26 -- .../core/Dependency/Dependency/Dependency.php | 30 -- .../DependencyList/DependencyList.php | 57 ---- .../DependencyResolver/DependencyResolver.php | 47 --- .../ClassDependencyEmitter.php | 35 --- .../ClassSuperglobalDependencyEmitter.go | 29 -- .../ClassSuperglobalDependencyEmitter.php | 27 -- .../DependencyEmitterInterface.go | 11 - .../DependencyEmitterInterface.php | 12 - .../Emitter/FQDNIndexNode/FQDNIndexNode.php | 51 ---- .../FileDependencyEmitter.go | 34 --- .../FileDependencyEmitter.php | 30 -- .../FunctionCallDependencyEmitter.php | 45 --- .../FunctionDependencyEmitter.go | 36 --- .../FunctionDependencyEmitter.php | 32 --- .../FunctionSuperglobalDependencyEmitter.php | 29 -- .../UsesDependencyEmitter.php | 49 ---- .../InheritDependency/InheritDependency.php | 38 --- .../InheritanceFlattener.php | 20 -- .../InvalidEmitterConfigurationException.php | 20 -- .../TokenResolver/TokenResolver.php | 32 --- .../UnrecognizedTokenException.php | 15 - .../FileInputCollector/FileInputCollector.php | 62 ---- .../PathNameFilterIterator.php | 30 -- .../InputCollectorInterface.php | 14 - .../InputException/InputException.php | 15 - .../AbstractTypeCollector.php | 30 -- .../Collector/BoolCollector/BoolCollector.php | 55 ---- .../ClassCollector/ClassCollector.go | 20 -- .../ClassCollector/ClassCollector.php | 13 - .../ClassLikeCollector/ClassLikeCollector.go | 20 -- .../ClassLikeCollector/ClassLikeCollector.php | 13 - .../ClassNameRegexCollector.php | 25 -- .../Collector/Collectable/Collectable.php | 18 -- .../CollectorProvider/CollectorProvider.php | 41 --- .../CollectorResolver/CollectorResolver.php | 32 --- .../CollectorResolverInterface.go | 9 - .../CollectorResolverInterface.php | 12 - .../ComposerCollector/ComposerCollector.php | 47 --- .../ComposerCollector/ComposerFilesParser.php | 127 --------- .../DirectoryCollector/DirectoryCollector.php | 28 -- .../FunctionNameCollector.php | 34 --- .../Collector/GlobCollector/GlobCollector.php | 36 --- .../InheritanceLevelCollector.php | 40 --- .../InheritsCollector/InheritsCollector.php | 49 ---- .../InterfaceCollector/InterfaceCollector.go | 20 -- .../InterfaceCollector/InterfaceCollector.php | 13 - .../LayerCollector/LayerCollector.php | 43 --- .../MethodCollector/MethodCollector.php | 39 --- .../RegexCollector/RegexCollector.php | 29 -- .../SuperglobalCollector.php | 33 --- .../TraitCollector/TraitCollector.go | 20 -- .../TraitCollector/TraitCollector.php | 13 - .../Collector/UsesCollector/UsesCollector.php | 50 ---- .../Layer/Collector/_/AttributeCollector.php | 45 --- .../Layer/Collector/_/ExtendsCollector.php | 50 ---- .../Layer/Collector/_/ImplementsCollector.php | 50 ---- .../Collector/_/PhpInternalCollector.php | 46 --- .../Collector/_/TagValueRegexCollector.php | 57 ---- .../Layer/LayerResolver/LayerResolver.php | 109 ------- .../LayerResolverInterface.php | 30 -- .../analyser_exception.go} | 13 +- .../dependency_layers_analyser.go} | 46 +-- .../unmatched_skipped_violations.go} | 12 +- .../allow_dependency_handler.go} | 6 +- .../depends_on_disallowed_layer.go} | 12 +- .../depends_on_internal_token.go} | 16 +- .../depends_on_private_layer.go} | 12 +- .../process_event/matching_layers_handler.go} | 6 +- .../uncovered_dependent_handler.go} | 12 +- .../layer_dependencies_analyser.go} | 26 +- .../layer_for_token_analyser.go} | 33 ++- .../ruleset_usage_analyser.go} | 26 +- .../token_in_layer_analyser.go} | 43 ++- .../TokenType.go => analyser/token_type.go} | 2 +- .../unassigned_token_analyser.go} | 33 ++- .../AstException.go => ast/ast_exception.go} | 6 +- .../AstLoader.go => ast/ast_loader.go} | 16 +- .../ast_map/ast_inherit.go} | 2 +- .../ast_map/ast_inherit_type.go} | 2 +- .../AstMap.go => ast/ast_map/ast_map.go} | 2 +- .../ast_map/class_like_reference.go} | 2 +- .../ast_map/class_like_reference_builder.go} | 2 +- .../ast_map/class_like_token.go} | 2 +- .../ast_map/class_like_type.go} | 2 +- .../ast_map/dependency_token.go} | 2 +- .../ast_map/file_reference.go} | 2 +- .../ast_map/file_reference_builder.go} | 2 +- .../ast_map/file_token.go} | 2 +- .../ast_map/function_reference.go} | 2 +- .../ast_map/function_reference_builder.go} | 2 +- .../ast_map/function_token.go} | 2 +- .../ast_map/reference_builder.go} | 2 +- .../ast_map/super_global_token.go} | 2 +- .../ast_map/tagged_token_reference.go} | 2 +- .../ast_map/variable_reference.go} | 2 +- pkg/src/core/ast/ast_map_extractor.go | 39 +++ pkg/src/core/ast/ast_map_extractor_test.go | 59 ++++ .../ast_file_reference_cache_interface.go | 10 + ...file_reference_deferred_cache_interface.go | 7 + .../cache/ast_file_reference_file_cache.go} | 22 +- .../ast_file_reference_in_memory_cache.go} | 12 +- .../cache/cacheable_file_subscriber.go} | 7 +- .../AnnotationReferenceExtractor.php | 0 .../extractors}/AnonymousClassExtractor.php | 0 .../extractors}/ClassConstantExtractor.php | 0 .../extractors}/FunctionCallResolver.php | 0 .../extractors}/FunctionLikeExtractor.php | 0 .../parser/extractors}/KeywordExtractor.php | 0 .../parser/extractors}/PropertyExtractor.php | 0 .../parser/extractors}/StaticExtractor.php | 0 .../parser/extractors}/VariableExtractor.php | 0 .../reference_extractor_interface.go | 11 + .../file_reference_visitor.go} | 25 +- .../file_reference_visitor_test.go} | 6 +- .../nikic_php_parser/nikic_php_parser.go} | 31 +- .../nikic_php_parser_test.go} | 2 +- pkg/src/core/ast/parser/parser_interface.go | 9 + .../parser/type_resolver.go} | 23 +- .../TypeScope.go => ast/parser/type_scope.go} | 2 +- .../dependency.go} | 2 +- .../dependency_list.go} | 9 +- .../dependency_resolver.go} | 32 +-- .../emitter/class_dependency_emitter.go} | 19 +- .../class_superglobal_dependency_emitter.go | 28 ++ .../emitter/dependency_emitter_interface.go | 11 + .../emitter/f_q_d_n_index_node.go} | 2 +- .../emitter/file_dependency_emitter.go | 33 +++ .../function_call_dependency_emitter.go} | 23 +- .../emitter/function_dependency_emitter.go | 35 +++ ...unction_superglobal_dependency_emitter.go} | 15 +- .../emitter/uses_dependency_emitter.go} | 16 +- .../inherit_dependency.go} | 10 +- .../inheritance_flattener.go} | 10 +- ...nvalid_emitter_configuration_exception.go} | 2 +- .../token_resolver.go} | 4 +- .../unrecognized_token_exception.go} | 2 +- .../file_input_collector.go} | 8 +- .../input_collector_interface.go} | 2 +- .../input_exception.go} | 2 +- .../collector/abstract_type_collector.go} | 17 +- .../collector/bool_collector.go} | 7 +- .../core/layer/collector/class_collector.go | 19 ++ .../layer/collector/class_like_collector.go | 19 ++ .../collector/class_name_regex_collector.go} | 13 +- .../collector/collectable.go} | 2 +- .../collector/collector_provider.go} | 2 +- .../collector/collector_resolver.go} | 12 +- .../collector/collector_resolver_interface.go | 5 + .../collector/composer_collector.go} | 2 +- .../collector/directory_collector.go} | 7 +- .../collector/directory_collector_test.go} | 2 +- .../collector/function_name_collector.go} | 8 +- .../collector/glob_collector.go} | 7 +- .../collector/inheritance_level_collector.go} | 16 +- .../collector/inherits_collector.go} | 20 +- .../layer/collector/interface_collector.go | 19 ++ .../collector/layer_collector.go} | 8 +- .../collector/method_collector.go} | 19 +- .../collector/regex_collector.go} | 2 +- .../collector/superglobal_collector.go} | 6 +- .../core/layer/collector/trait_collector.go | 19 ++ .../collector/uses_collector.go} | 22 +- .../layer_resolver.go} | 19 +- .../layer_resolver_interface.go} | 2 +- .../Console/Application/Application_test.go | 20 ++ .../Command/AnalyseRunner/AnalyseRunner.go | 6 +- .../ContainerBuilder/ContainerBuilder.go | 110 +++---- .../EventSubscriberInterfaceMapReg.go | 8 +- .../supportive/DependencyInjection/cache.go | 7 +- .../DependencyInjection/services.go | 176 +++++------- 239 files changed, 939 insertions(+), 5430 deletions(-) delete mode 100644 cmd/go-deptrac/main_test.go delete mode 100644 pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.go rename pkg/src/contract/{Analyser/AnalysisResult => analyser/analysis_result}/AnalysisResult.php (100%) rename pkg/src/contract/{Analyser/AnalysisResult/AnalysisResult.go => analyser/analysis_result/analysis_result.go} (98%) rename pkg/src/contract/{Analyser/EventHelper => analyser/event_helper}/EventHelper.php (100%) rename pkg/src/contract/{Analyser/EventHelper/EventHelper.go => analyser/event_helper/event_helper.go} (81%) rename pkg/src/contract/{Analyser/PostProcessEvent => analyser/post_process_event}/PostProcessEvent.php (100%) create mode 100644 pkg/src/contract/analyser/post_process_event/post_process_event.go rename pkg/src/contract/{Analyser/ProcessEvent => analyser/process_event}/ProcessEvent.php (100%) rename pkg/src/contract/{Analyser/ProcessEvent/ProcessEvent.go => analyser/process_event/process_event.go} (78%) rename pkg/src/contract/{Analyser/ViolationCreatingInterface => analyser/violation_creating_interface}/ViolationCreatingInterface.php (100%) rename pkg/src/contract/{Analyser/ViolationCreatingInterface/ViolationCreatingInterface.go => analyser/violation_creating_interface/violation_creating_interface.go} (87%) delete mode 100644 pkg/src/core/Analyser/AnalyserException/AnalyserException.php delete mode 100644 pkg/src/core/Analyser/DependencyLayersAnalyser/DependencyLayersAnalyser.php delete mode 100644 pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.php delete mode 100644 pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.php delete mode 100644 pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.php delete mode 100644 pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.php delete mode 100644 pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.php delete mode 100644 pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.php delete mode 100644 pkg/src/core/Analyser/TokenType/TokenType.php delete mode 100644 pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.php delete mode 100644 pkg/src/core/Ast/AstException/AstException.php delete mode 100644 pkg/src/core/Ast/AstLoader/AstLoader.php delete mode 100644 pkg/src/core/Ast/AstMap/AstInherit.php delete mode 100644 pkg/src/core/Ast/AstMap/AstInheritType.php delete mode 100644 pkg/src/core/Ast/AstMap/AstMap.php delete mode 100644 pkg/src/core/Ast/AstMap/ClassLikeReference.php delete mode 100644 pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.php delete mode 100644 pkg/src/core/Ast/AstMap/ClassLikeToken.php delete mode 100644 pkg/src/core/Ast/AstMap/ClassLikeType.php delete mode 100644 pkg/src/core/Ast/AstMap/DependencyToken.php delete mode 100644 pkg/src/core/Ast/AstMap/FileReference.php delete mode 100644 pkg/src/core/Ast/AstMap/FileReferenceBuilder.php delete mode 100644 pkg/src/core/Ast/AstMap/FileToken.php delete mode 100644 pkg/src/core/Ast/AstMap/FunctionReference.php delete mode 100644 pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.php delete mode 100644 pkg/src/core/Ast/AstMap/FunctionToken.php delete mode 100644 pkg/src/core/Ast/AstMap/ReferenceBuilder.php delete mode 100644 pkg/src/core/Ast/AstMap/SuperGlobalToken.php delete mode 100644 pkg/src/core/Ast/AstMap/TaggedTokenReference.php delete mode 100644 pkg/src/core/Ast/AstMap/VariableReference.php delete mode 100644 pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.go delete mode 100644 pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.php delete mode 100644 pkg/src/core/Ast/AstMapExtractor/AstMapExtractor_test.go delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.go delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.php delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceDeferredCacheInterface/AstFileReferenceDeferredCacheInterface.go delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceDeferredCacheInterface/AstFileReferenceDeferredCacheInterface.php delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache/AstFileReferenceFileCache.php delete mode 100644 pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.php delete mode 100644 pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.php delete mode 100644 pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.go delete mode 100644 pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.php delete mode 100644 pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor.php delete mode 100644 pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.php delete mode 100644 pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.go delete mode 100644 pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.php delete mode 100644 pkg/src/core/Ast/Parser/TypeResolver/TypeResolver.php delete mode 100644 pkg/src/core/Ast/Parser/TypeScope/TypeScope.php delete mode 100644 pkg/src/core/Dependency/Dependency/Dependency.php delete mode 100644 pkg/src/core/Dependency/DependencyList/DependencyList.php delete mode 100644 pkg/src/core/Dependency/DependencyResolver/DependencyResolver.php delete mode 100644 pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.go delete mode 100644 pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.go delete mode 100644 pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.php delete mode 100644 pkg/src/core/Dependency/Emitter/FQDNIndexNode/FQDNIndexNode.php delete mode 100644 pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.go delete mode 100644 pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.go delete mode 100644 pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.php delete mode 100644 pkg/src/core/Dependency/InheritDependency/InheritDependency.php delete mode 100644 pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.php delete mode 100644 pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.php delete mode 100644 pkg/src/core/Dependency/TokenResolver/TokenResolver.php delete mode 100644 pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.php delete mode 100644 pkg/src/core/InputCollector/FileInputCollector/FileInputCollector.php delete mode 100644 pkg/src/core/InputCollector/FileInputCollector/PathNameFilterIterator.php delete mode 100644 pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.php delete mode 100644 pkg/src/core/InputCollector/InputException/InputException.php delete mode 100644 pkg/src/core/Layer/Collector/AbstractTypeCollector/AbstractTypeCollector.php delete mode 100644 pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.php delete mode 100644 pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.go delete mode 100644 pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.php delete mode 100644 pkg/src/core/Layer/Collector/ClassLikeCollector/ClassLikeCollector.go delete mode 100644 pkg/src/core/Layer/Collector/ClassLikeCollector/ClassLikeCollector.php delete mode 100644 pkg/src/core/Layer/Collector/ClassNameRegexCollector/ClassNameRegexCollector.php delete mode 100644 pkg/src/core/Layer/Collector/Collectable/Collectable.php delete mode 100644 pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.php delete mode 100644 pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.php delete mode 100644 pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.go delete mode 100644 pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.php delete mode 100644 pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.php delete mode 100644 pkg/src/core/Layer/Collector/ComposerCollector/ComposerFilesParser.php delete mode 100644 pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.php delete mode 100644 pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.php delete mode 100644 pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.php delete mode 100644 pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.php delete mode 100644 pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.php delete mode 100644 pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.go delete mode 100644 pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.php delete mode 100644 pkg/src/core/Layer/Collector/LayerCollector/LayerCollector.php delete mode 100644 pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.php delete mode 100644 pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.php delete mode 100644 pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.php delete mode 100644 pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.go delete mode 100644 pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.php delete mode 100644 pkg/src/core/Layer/Collector/UsesCollector/UsesCollector.php delete mode 100644 pkg/src/core/Layer/Collector/_/AttributeCollector.php delete mode 100644 pkg/src/core/Layer/Collector/_/ExtendsCollector.php delete mode 100644 pkg/src/core/Layer/Collector/_/ImplementsCollector.php delete mode 100644 pkg/src/core/Layer/Collector/_/PhpInternalCollector.php delete mode 100644 pkg/src/core/Layer/Collector/_/TagValueRegexCollector.php delete mode 100644 pkg/src/core/Layer/LayerResolver/LayerResolver.php delete mode 100644 pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.php rename pkg/src/core/{Analyser/AnalyserException/AnalyserException.go => analyser/analyser_exception.go} (73%) rename pkg/src/core/{Analyser/DependencyLayersAnalyser/DependencyLayersAnalyser.go => analyser/dependency_layers_analyser.go} (67%) rename pkg/src/core/{Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.go => analyser/event_handler/post_process_event/unmatched_skipped_violations.go} (61%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.go => analyser/event_handler/process_event/allow_dependency_handler.go} (77%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.go => analyser/event_handler/process_event/depends_on_disallowed_layer.go} (74%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.go => analyser/event_handler/process_event/depends_on_internal_token.go} (66%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.go => analyser/event_handler/process_event/depends_on_private_layer.go} (68%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.go => analyser/event_handler/process_event/matching_layers_handler.go} (74%) rename pkg/src/core/{Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.go => analyser/event_handler/process_event/uncovered_dependent_handler.go} (77%) rename pkg/src/core/{Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.go => analyser/layer_dependencies_analyser.go} (76%) rename pkg/src/core/{Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.go => analyser/layer_for_token_analyser.go} (70%) rename pkg/src/core/{Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.go => analyser/ruleset_usage_analyser.go} (76%) rename pkg/src/core/{Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.go => analyser/token_in_layer_analyser.go} (61%) rename pkg/src/core/{Analyser/TokenType/TokenType.go => analyser/token_type.go} (97%) rename pkg/src/core/{Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.go => analyser/unassigned_token_analyser.go} (68%) rename pkg/src/core/{Ast/AstException/AstException.go => ast/ast_exception.go} (63%) rename pkg/src/core/{Ast/AstLoader/AstLoader.go => ast/ast_loader.go} (75%) rename pkg/src/core/{Ast/AstMap/AstInherit.go => ast/ast_map/ast_inherit.go} (98%) rename pkg/src/core/{Ast/AstMap/AstInheritType.go => ast/ast_map/ast_inherit_type.go} (92%) rename pkg/src/core/{Ast/AstMap/AstMap.go => ast/ast_map/ast_map.go} (99%) rename pkg/src/core/{Ast/AstMap/ClassLikeReference.go => ast/ast_map/class_like_reference.go} (98%) rename pkg/src/core/{Ast/AstMap/ClassLikeReferenceBuilder.go => ast/ast_map/class_like_reference_builder.go} (99%) rename pkg/src/core/{Ast/AstMap/ClassLikeToken.go => ast/ast_map/class_like_token.go} (97%) rename pkg/src/core/{Ast/AstMap/ClassLikeType.go => ast/ast_map/class_like_type.go} (94%) rename pkg/src/core/{Ast/AstMap/DependencyToken.go => ast/ast_map/dependency_token.go} (96%) rename pkg/src/core/{Ast/AstMap/FileReference.go => ast/ast_map/file_reference.go} (98%) rename pkg/src/core/{Ast/AstMap/FileReferenceBuilder.go => ast/ast_map/file_reference_builder.go} (99%) rename pkg/src/core/{Ast/AstMap/FileToken.go => ast/ast_map/file_token.go} (96%) rename pkg/src/core/{Ast/AstMap/FunctionReference.go => ast/ast_map/function_reference.go} (98%) rename pkg/src/core/{Ast/AstMap/FunctionReferenceBuilder.go => ast/ast_map/function_reference_builder.go} (98%) rename pkg/src/core/{Ast/AstMap/FunctionToken.go => ast/ast_map/function_token.go} (98%) rename pkg/src/core/{Ast/AstMap/ReferenceBuilder.go => ast/ast_map/reference_builder.go} (99%) rename pkg/src/core/{Ast/AstMap/SuperGlobalToken.go => ast/ast_map/super_global_token.go} (98%) rename pkg/src/core/{Ast/AstMap/TaggedTokenReference.go => ast/ast_map/tagged_token_reference.go} (97%) rename pkg/src/core/{Ast/AstMap/VariableReference.go => ast/ast_map/variable_reference.go} (96%) create mode 100644 pkg/src/core/ast/ast_map_extractor.go create mode 100644 pkg/src/core/ast/ast_map_extractor_test.go create mode 100644 pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go create mode 100644 pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go rename pkg/src/core/{Ast/Parser/Cache/AstFileReferenceFileCache/AstFileReferenceFileCache.go => ast/parser/cache/ast_file_reference_file_cache.go} (86%) rename pkg/src/core/{Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.go => ast/parser/cache/ast_file_reference_in_memory_cache.go} (64%) rename pkg/src/core/{Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.go => ast/parser/cache/cacheable_file_subscriber.go} (69%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/AnnotationReferenceExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/AnonymousClassExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/ClassConstantExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/FunctionCallResolver.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/FunctionLikeExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/KeywordExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/PropertyExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/StaticExtractor.php (100%) rename pkg/src/core/{Ast/Parser/Extractors => ast/parser/extractors}/VariableExtractor.php (100%) create mode 100644 pkg/src/core/ast/parser/extractors/reference_extractor_interface.go rename pkg/src/core/{Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor.go => ast/parser/nikic_php_parser/file_reference_visitor.go} (82%) rename pkg/src/core/{Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor_test.go => ast/parser/nikic_php_parser/file_reference_visitor_test.go} (75%) rename pkg/src/core/{Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go => ast/parser/nikic_php_parser/nikic_php_parser.go} (60%) rename pkg/src/core/{Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser_test.go => ast/parser/nikic_php_parser/nikic_php_parser_test.go} (92%) create mode 100644 pkg/src/core/ast/parser/parser_interface.go rename pkg/src/core/{Ast/Parser/TypeResolver/TypeResolver.go => ast/parser/type_resolver.go} (68%) rename pkg/src/core/{Ast/Parser/TypeScope/TypeScope.go => ast/parser/type_scope.go} (98%) rename pkg/src/core/{Dependency/Dependency/Dependency.go => dependency/dependency.go} (98%) rename pkg/src/core/{Dependency/DependencyList/DependencyList.go => dependency/dependency_list.go} (84%) rename pkg/src/core/{Dependency/DependencyResolver/DependencyResolver.go => dependency/dependency_resolver/dependency_resolver.go} (55%) rename pkg/src/core/{Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.go => dependency/emitter/class_dependency_emitter.go} (53%) create mode 100644 pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go create mode 100644 pkg/src/core/dependency/emitter/dependency_emitter_interface.go rename pkg/src/core/{Dependency/Emitter/FQDNIndexNode/FQDNIndexNode.go => dependency/emitter/f_q_d_n_index_node.go} (96%) create mode 100644 pkg/src/core/dependency/emitter/file_dependency_emitter.go rename pkg/src/core/{Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.go => dependency/emitter/function_call_dependency_emitter.go} (67%) create mode 100644 pkg/src/core/dependency/emitter/function_dependency_emitter.go rename pkg/src/core/{Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.go => dependency/emitter/function_superglobal_dependency_emitter.go} (50%) rename pkg/src/core/{Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.go => dependency/emitter/uses_dependency_emitter.go} (71%) rename pkg/src/core/{Dependency/InheritDependency/InheritDependency.go => dependency/inherit_dependency.go} (79%) rename pkg/src/core/{Dependency/InheritanceFlattener/InheritanceFlattener.go => dependency/inheritance_flattener.go} (55%) rename pkg/src/core/{Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.go => dependency/invalid_emitter_configuration_exception.go} (95%) rename pkg/src/core/{Dependency/TokenResolver/TokenResolver.go => dependency/token_resolver.go} (89%) rename pkg/src/core/{Dependency/UnrecognizedTokenException/UnrecognizedTokenException.go => dependency/unrecognized_token_exception.go} (94%) rename pkg/src/core/{InputCollector/FileInputCollector/FileInputCollector.go => input_collector/file_input_collector.go} (83%) rename pkg/src/core/{InputCollector/InputCollectorInterface/InputCollectorInterface.go => input_collector/input_collector_interface.go} (69%) rename pkg/src/core/{InputCollector/InputException/InputException.go => input_collector/input_exception.go} (94%) rename pkg/src/core/{Layer/Collector/AbstractTypeCollector/AbstractTypeCollector.go => layer/collector/abstract_type_collector.go} (68%) rename pkg/src/core/{Layer/Collector/BoolCollector/BoolCollector.go => layer/collector/bool_collector.go} (90%) create mode 100644 pkg/src/core/layer/collector/class_collector.go create mode 100644 pkg/src/core/layer/collector/class_like_collector.go rename pkg/src/core/{Layer/Collector/ClassNameRegexCollector/ClassNameRegexCollector.go => layer/collector/class_name_regex_collector.go} (72%) rename pkg/src/core/{Layer/Collector/Collectable/Collectable.go => layer/collector/collectable.go} (95%) rename pkg/src/core/{Layer/Collector/CollectorProvider/CollectorProvider.go => layer/collector/collector_provider.go} (97%) rename pkg/src/core/{Layer/Collector/CollectorResolver/CollectorResolver.go => layer/collector/collector_resolver.go} (62%) create mode 100644 pkg/src/core/layer/collector/collector_resolver_interface.go rename pkg/src/core/{Layer/Collector/ComposerCollector/ComposerCollector.go => layer/collector/composer_collector.go} (98%) rename pkg/src/core/{Layer/Collector/DirectoryCollector/DirectoryCollector.go => layer/collector/directory_collector.go} (87%) rename pkg/src/core/{Layer/Collector/DirectoryCollector/DirectoryCollector_test.go => layer/collector/directory_collector_test.go} (94%) rename pkg/src/core/{Layer/Collector/FunctionNameCollector/FunctionNameCollector.go => layer/collector/function_name_collector.go} (83%) rename pkg/src/core/{Layer/Collector/GlobCollector/GlobCollector.go => layer/collector/glob_collector.go} (88%) rename pkg/src/core/{Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.go => layer/collector/inheritance_level_collector.go} (71%) rename pkg/src/core/{Layer/Collector/InheritsCollector/InheritsCollector.go => layer/collector/inherits_collector.go} (68%) create mode 100644 pkg/src/core/layer/collector/interface_collector.go rename pkg/src/core/{Layer/Collector/LayerCollector/LayerCollector.go => layer/collector/layer_collector.go} (88%) rename pkg/src/core/{Layer/Collector/MethodCollector/MethodCollector.go => layer/collector/method_collector.go} (71%) rename pkg/src/core/{Layer/Collector/RegexCollector/RegexCollector.go => layer/collector/regex_collector.go} (96%) rename pkg/src/core/{Layer/Collector/SuperglobalCollector/SuperglobalCollector.go => layer/collector/superglobal_collector.go} (88%) create mode 100644 pkg/src/core/layer/collector/trait_collector.go rename pkg/src/core/{Layer/Collector/UsesCollector/UsesCollector.go => layer/collector/uses_collector.go} (64%) rename pkg/src/core/{Layer/LayerResolver/LayerResolver.go => layer/layer_resolver.go} (84%) rename pkg/src/core/{Layer/LayerResolverInterface/LayerResolverInterface.go => layer/layer_resolver_interface/layer_resolver_interface.go} (93%) create mode 100644 pkg/src/supportive/Console/Application/Application_test.go diff --git a/README.md b/README.md index 7c1cbac..504a713 100644 --- a/README.md +++ b/README.md @@ -19,29 +19,30 @@ Here is an example depfile: ```yaml # depfile.yaml -paths: - - ./src -exclude_files: - - .*test.* -layers: - - name: Controller - collectors: - - type: directory - regex: .*Controller.* - - name: Repository - collectors: - - type: directory - regex: .*Repository.* - - name: Service - collectors: - - type: directory - regex: .*Service.* -ruleset: - Controller: - - Service - Service: - - Repository - Repository: ~ +deptrac: + paths: + - ./src + exclude_files: + - .*test.* + layers: + - name: Controller + collectors: + - type: directory + value: .*Controller.* + - name: Repository + collectors: + - type: directory + value: .*Repository.* + - name: Service + collectors: + - type: directory + value: .*Service.* + ruleset: + Controller: + - Service + Service: + - Repository + Repository: ~ ``` #### Explanation diff --git a/cmd/go-deptrac/main_test.go b/cmd/go-deptrac/main_test.go deleted file mode 100644 index d7d6de1..0000000 --- a/cmd/go-deptrac/main_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application" - "os" - "testing" -) - -func TestMainOk(t *testing.T) { - - os.Args = []string{ - "", - "analyse", - } - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - //flag.CommandLine.Parse(os.Args) - - Application.NewApplication().Run() - - fmt.Println("", "") -} diff --git a/pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.go b/pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.go deleted file mode 100644 index 28b7210..0000000 --- a/pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.go +++ /dev/null @@ -1,22 +0,0 @@ -package PostProcessEvent - -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/AnalysisResult" - -// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result of the analysis after it has completed and before it is returned for output processing. -type PostProcessEvent struct { - result *AnalysisResult.AnalysisResult -} - -func NewPostProcessEvent(result *AnalysisResult.AnalysisResult) *PostProcessEvent { - return &PostProcessEvent{ - result: result, - } -} - -func (e *PostProcessEvent) GetResult() *AnalysisResult.AnalysisResult { - return e.result -} - -func (e *PostProcessEvent) ReplaceResult(result *AnalysisResult.AnalysisResult) { - e.result = result -} diff --git a/pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface/TokenReferenceWithDependenciesInterface.go b/pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface/TokenReferenceWithDependenciesInterface.go index d13e91f..1115ba7 100644 --- a/pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface/TokenReferenceWithDependenciesInterface.go +++ b/pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface/TokenReferenceWithDependenciesInterface.go @@ -2,10 +2,10 @@ package TokenReferenceWithDependenciesInterface import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type TokenReferenceWithDependenciesInterface interface { TokenReferenceInterface.TokenReferenceInterface - GetDependencies() []*AstMap.DependencyToken + GetDependencies() []*ast_map.DependencyToken } diff --git a/pkg/src/contract/Result/OutputResult/OutputResult.go b/pkg/src/contract/Result/OutputResult/OutputResult.go index 2b349a6..b5d0b1f 100644 --- a/pkg/src/contract/Result/OutputResult/OutputResult.go +++ b/pkg/src/contract/Result/OutputResult/OutputResult.go @@ -1,7 +1,6 @@ package OutputResult import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/AnalysisResult" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Allowed" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleInterface" @@ -10,6 +9,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Warning" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" ) // OutputResult - Represents a result ready for output formatting @@ -23,7 +23,7 @@ func newOutputResult(rules map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterfac return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} } -func NewOutputResultFromAnalysisResult(analysisResult *AnalysisResult.AnalysisResult) *OutputResult { +func NewOutputResultFromAnalysisResult(analysisResult *analysis_result.AnalysisResult) *OutputResult { return newOutputResult( analysisResult.Rules(), analysisResult.Errors(), diff --git a/pkg/src/contract/Result/Violation/Violation.go b/pkg/src/contract/Result/Violation/Violation.go index 0e4f1d9..3fb3300 100644 --- a/pkg/src/contract/Result/Violation/Violation.go +++ b/pkg/src/contract/Result/Violation/Violation.go @@ -2,8 +2,8 @@ package Violation import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ViolationCreatingInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" ) // Violation - Represents a dependency that is NOT allowed to exist given the defined rules @@ -11,10 +11,10 @@ type Violation struct { Dependency DependencyInterface.DependencyInterface DependerLayer string DependentLayer string - ViolationCreatingRule ViolationCreatingInterface.ViolationCreatingInterface + ViolationCreatingRule violation_creating_interface.ViolationCreatingInterface } -func NewViolation(dependency DependencyInterface.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule ViolationCreatingInterface.ViolationCreatingInterface) *Violation { +func NewViolation(dependency DependencyInterface.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { if dependentLayer == dependerLayer { panic("1") diff --git a/pkg/src/contract/Analyser/AnalysisResult/AnalysisResult.php b/pkg/src/contract/analyser/analysis_result/AnalysisResult.php similarity index 100% rename from pkg/src/contract/Analyser/AnalysisResult/AnalysisResult.php rename to pkg/src/contract/analyser/analysis_result/AnalysisResult.php diff --git a/pkg/src/contract/Analyser/AnalysisResult/AnalysisResult.go b/pkg/src/contract/analyser/analysis_result/analysis_result.go similarity index 98% rename from pkg/src/contract/Analyser/AnalysisResult/AnalysisResult.go rename to pkg/src/contract/analyser/analysis_result/analysis_result.go index 3bb262a..e05a54a 100644 --- a/pkg/src/contract/Analyser/AnalysisResult/AnalysisResult.go +++ b/pkg/src/contract/analyser/analysis_result/analysis_result.go @@ -1,4 +1,4 @@ -package AnalysisResult +package analysis_result import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" diff --git a/pkg/src/contract/Analyser/EventHelper/EventHelper.php b/pkg/src/contract/analyser/event_helper/EventHelper.php similarity index 100% rename from pkg/src/contract/Analyser/EventHelper/EventHelper.php rename to pkg/src/contract/analyser/event_helper/EventHelper.php diff --git a/pkg/src/contract/Analyser/EventHelper/EventHelper.go b/pkg/src/contract/analyser/event_helper/event_helper.go similarity index 81% rename from pkg/src/contract/Analyser/EventHelper/EventHelper.go rename to pkg/src/contract/analyser/event_helper/event_helper.go index 6821534..ea902a5 100644 --- a/pkg/src/contract/Analyser/EventHelper/EventHelper.go +++ b/pkg/src/contract/analyser/event_helper/event_helper.go @@ -1,12 +1,12 @@ -package EventHelper +package event_helper import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/AnalysisResult" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ViolationCreatingInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/SkippedViolation" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -56,7 +56,7 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *ProcessEvent.ProcessEvent, analysisResult *AnalysisResult.AnalysisResult, dependentLayer string, violationCreatingRule ViolationCreatingInterface.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *process_event.ProcessEvent, analysisResult *analysis_result.AnalysisResult, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { analysisResult.AddRule(SkippedViolation.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { diff --git a/pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.php b/pkg/src/contract/analyser/post_process_event/PostProcessEvent.php similarity index 100% rename from pkg/src/contract/Analyser/PostProcessEvent/PostProcessEvent.php rename to pkg/src/contract/analyser/post_process_event/PostProcessEvent.php diff --git a/pkg/src/contract/analyser/post_process_event/post_process_event.go b/pkg/src/contract/analyser/post_process_event/post_process_event.go new file mode 100644 index 0000000..fad28f5 --- /dev/null +++ b/pkg/src/contract/analyser/post_process_event/post_process_event.go @@ -0,0 +1,22 @@ +package post_process_event + +import "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" + +// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result of the analysis after it has completed and before it is returned for output processing. +type PostProcessEvent struct { + result *analysis_result.AnalysisResult +} + +func NewPostProcessEvent(result *analysis_result.AnalysisResult) *PostProcessEvent { + return &PostProcessEvent{ + result: result, + } +} + +func (e *PostProcessEvent) GetResult() *analysis_result.AnalysisResult { + return e.result +} + +func (e *PostProcessEvent) ReplaceResult(result *analysis_result.AnalysisResult) { + e.result = result +} diff --git a/pkg/src/contract/Analyser/ProcessEvent/ProcessEvent.php b/pkg/src/contract/analyser/process_event/ProcessEvent.php similarity index 100% rename from pkg/src/contract/Analyser/ProcessEvent/ProcessEvent.php rename to pkg/src/contract/analyser/process_event/ProcessEvent.php diff --git a/pkg/src/contract/Analyser/ProcessEvent/ProcessEvent.go b/pkg/src/contract/analyser/process_event/process_event.go similarity index 78% rename from pkg/src/contract/Analyser/ProcessEvent/ProcessEvent.go rename to pkg/src/contract/analyser/process_event/process_event.go index 5134cc8..84f1b85 100644 --- a/pkg/src/contract/Analyser/ProcessEvent/ProcessEvent.go +++ b/pkg/src/contract/analyser/process_event/process_event.go @@ -1,10 +1,10 @@ -package ProcessEvent +package process_event import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/AnalysisResult" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" ) // ProcessEvent - Event that is triggered on every found dependency. Used to apply rules on the found dependencies. @@ -14,7 +14,7 @@ type ProcessEvent struct { DependerLayer string DependentReference TokenReferenceInterface.TokenReferenceInterface DependentLayers map[string]bool - result *AnalysisResult.AnalysisResult + result *analysis_result.AnalysisResult } func NewProcessEvent( @@ -23,7 +23,7 @@ func NewProcessEvent( dependerLayer string, dependentReference TokenReferenceInterface.TokenReferenceInterface, dependentLayers map[string]bool, - result *AnalysisResult.AnalysisResult, + result *analysis_result.AnalysisResult, ) *ProcessEvent { if dependerLayer == "File" && dependentLayers["Ast"] { fmt.Println() @@ -39,10 +39,10 @@ func NewProcessEvent( } } -func (e *ProcessEvent) GetResult() *AnalysisResult.AnalysisResult { +func (e *ProcessEvent) GetResult() *analysis_result.AnalysisResult { return e.result } -func (e *ProcessEvent) ReplaceResult(result *AnalysisResult.AnalysisResult) { +func (e *ProcessEvent) ReplaceResult(result *analysis_result.AnalysisResult) { e.result = result } diff --git a/pkg/src/contract/Analyser/ViolationCreatingInterface/ViolationCreatingInterface.php b/pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php similarity index 100% rename from pkg/src/contract/Analyser/ViolationCreatingInterface/ViolationCreatingInterface.php rename to pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php diff --git a/pkg/src/contract/Analyser/ViolationCreatingInterface/ViolationCreatingInterface.go b/pkg/src/contract/analyser/violation_creating_interface/violation_creating_interface.go similarity index 87% rename from pkg/src/contract/Analyser/ViolationCreatingInterface/ViolationCreatingInterface.go rename to pkg/src/contract/analyser/violation_creating_interface/violation_creating_interface.go index 1c190c3..f3b0406 100644 --- a/pkg/src/contract/Analyser/ViolationCreatingInterface/ViolationCreatingInterface.go +++ b/pkg/src/contract/analyser/violation_creating_interface/violation_creating_interface.go @@ -1,4 +1,4 @@ -package ViolationCreatingInterface +package violation_creating_interface // ViolationCreatingInterface - Every rule that can create a Violation has to implement this interface. It is used for output processing to display what rule has been violated. type ViolationCreatingInterface interface { diff --git a/pkg/src/core/Analyser/AnalyserException/AnalyserException.php b/pkg/src/core/Analyser/AnalyserException/AnalyserException.php deleted file mode 100644 index c82f7d7..0000000 --- a/pkg/src/core/Analyser/AnalyserException/AnalyserException.php +++ /dev/null @@ -1,45 +0,0 @@ -astMapExtractor->extract(); - $dependencies = $this->dependencyResolver->resolve($astMap); - $result = new AnalysisResult(); - $warnings = []; - foreach ($dependencies->getDependenciesAndInheritDependencies() as $dependency) { - $depender = $dependency->getDepender(); - $dependerRef = $this->tokenResolver->resolve($depender, $astMap); - $dependerLayers = \array_keys($this->layerResolver->getLayersForReference($dependerRef)); - if (!isset($warnings[$depender->toString()]) && count($dependerLayers) > 1) { - $warnings[$depender->toString()] = Warning::tokenIsInMoreThanOneLayer($depender->toString(), $dependerLayers); - } - $dependent = $dependency->getDependent(); - $dependentRef = $this->tokenResolver->resolve($dependent, $astMap); - $dependentLayers = $this->layerResolver->getLayersForReference($dependentRef); - foreach ($dependerLayers as $dependerLayer) { - $event = new ProcessEvent($dependency, $dependerRef, $dependerLayer, $dependentRef, $dependentLayers, $result); - $this->eventDispatcher->dispatch($event); - $result = $event->getResult(); - } - } - foreach ($warnings as $warning) { - $result->addWarning($warning); - } - $event = new PostProcessEvent($result); - $this->eventDispatcher->dispatch($event); - return $event->getResult(); - } catch (InvalidEmitterConfigurationException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidEmitterConfiguration($e); - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } - } -} diff --git a/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.php b/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.php deleted file mode 100644 index dcbed6e..0000000 --- a/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.php +++ /dev/null @@ -1,32 +0,0 @@ -getResult(); - foreach ($this->eventHelper->unmatchedSkippedViolations() as $tokenA => $tokensB) { - foreach ($tokensB as $tokenB) { - $ruleset->addError(new Error(sprintf('Skipped violation "%s" for "%s" was not matched.', $tokenB, $tokenA))); - } - } - } - public static function getSubscribedEvents() - { - return [PostProcessEvent::class => ['handleUnmatchedSkipped']]; - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.php deleted file mode 100644 index 671c981..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.php +++ /dev/null @@ -1,26 +0,0 @@ - ['invoke', -100]]; - } - public function invoke(ProcessEvent $event) : void - { - $ruleset = $event->getResult(); - foreach ($event->dependentLayers as $dependentLayer => $_) { - $ruleset->addRule(new Allowed($event->dependency, $event->dependerLayer, $dependentLayer)); - $event->stopPropagation(); - } - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.php deleted file mode 100644 index c587628..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.php +++ /dev/null @@ -1,55 +0,0 @@ - ['invoke', -1]]; - } - public function invoke(ProcessEvent $event) : void - { - $ruleset = $event->getResult(); - try { - $allowedLayers = $this->eventHelper->layerProvider->getAllowedLayers($event->dependerLayer); - } catch (CircularReferenceException $circularReferenceException) { - $ruleset->addError(new Error($circularReferenceException->getMessage())); - $event->stopPropagation(); - return; - } - foreach ($event->dependentLayers as $dependentLayer => $_) { - if (!in_array($dependentLayer, $allowedLayers, \true)) { - $this->eventHelper->addSkippableViolation($event, $ruleset, $dependentLayer, $this); - $event->stopPropagation(); - } - } - } - /** - * @psalm-pure - */ - public function ruleName() : string - { - return 'DependsOnDisallowedLayer'; - } - /** - * @psalm-pure - */ - public function ruleDescription() : string - { - return 'You are depending on token that is a part of a layer that you are not allowed to depend on.'; - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.php deleted file mode 100644 index fa72ebe..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.php +++ /dev/null @@ -1,57 +0,0 @@ -internalTag = $config['internal_tag']; - } - public static function getSubscribedEvents() - { - return [ProcessEvent::class => ['invoke', -2]]; - } - public function invoke(ProcessEvent $event) : void - { - $ruleset = $event->getResult(); - foreach ($event->dependentLayers as $dependentLayer => $_) { - if ($event->dependerLayer !== $dependentLayer && $event->dependentReference instanceof ClassLikeReference) { - $isInternal = $event->dependentReference->hasTag('@deptrac-internal'); - if (!$isInternal && null !== $this->internalTag) { - $isInternal = $event->dependentReference->hasTag($this->internalTag); - } - if ($isInternal) { - $this->eventHelper->addSkippableViolation($event, $ruleset, $dependentLayer, $this); - $event->stopPropagation(); - } - } - } - } - /** - * @psalm-pure - */ - public function ruleName() : string - { - return 'DependsOnInternalToken'; - } - /** - * @psalm-pure - */ - public function ruleDescription() : string - { - return 'You are depending on a token that is internal to the layer and you are not part of that layer.'; - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.php deleted file mode 100644 index a4b8ae2..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.php +++ /dev/null @@ -1,45 +0,0 @@ - ['invoke', -3]]; - } - public function invoke(ProcessEvent $event) : void - { - $ruleset = $event->getResult(); - foreach ($event->dependentLayers as $dependentLayer => $isPublic) { - if ($event->dependerLayer === $dependentLayer && !$isPublic) { - $this->eventHelper->addSkippableViolation($event, $ruleset, $dependentLayer, $this); - $event->stopPropagation(); - } - } - } - /** - * @psalm-pure - */ - public function ruleName() : string - { - return 'DependsOnPrivateLayer'; - } - /** - * @psalm-pure - */ - public function ruleDescription() : string - { - return 'You are depending on a part of a layer that was defined as private to that layer and you are not part of that layer.'; - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.php deleted file mode 100644 index 61efff8..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.php +++ /dev/null @@ -1,27 +0,0 @@ -dependentLayers as $dependeeLayer => $_) { - if ($event->dependerLayer !== $dependeeLayer) { - return; - } - } - // For empty dependee layers see UncoveredDependeeHandler - $event->stopPropagation(); - } - public static function getSubscribedEvents() - { - return [ProcessEvent::class => ['invoke', 1]]; - } -} diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.php b/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.php deleted file mode 100644 index db62f35..0000000 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.php +++ /dev/null @@ -1,43 +0,0 @@ -dependency->getDependent(); - $ruleset = $event->getResult(); - if ([] !== $event->dependentLayers) { - return; - } - if ($dependent instanceof ClassLikeToken && !$this->ignoreUncoveredInternalClass($dependent)) { - $ruleset->addRule(new Uncovered($event->dependency, $event->dependerLayer)); - } - $event->stopPropagation(); - } - private function ignoreUncoveredInternalClass(ClassLikeToken $token) : bool - { - if (!$this->ignoreUncoveredInternalClasses) { - return \false; - } - $tokenString = $token->toString(); - return isset(PhpStormStubsMap::CLASSES[$tokenString]) || 'ReturnTypeWillChange' === $tokenString; - } - public static function getSubscribedEvents() - { - return [ProcessEvent::class => ['invoke', 2]]; - } -} diff --git a/pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.php b/pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.php deleted file mode 100644 index 2db9f90..0000000 --- a/pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.php +++ /dev/null @@ -1,60 +0,0 @@ -> - * - * @throws AnalyserException - */ - public function getDependencies(string $layer, ?string $targetLayer) : array - { - try { - $result = []; - $astMap = $this->astMapExtractor->extract(); - $dependencies = $this->dependencyResolver->resolve($astMap); - foreach ($dependencies->getDependenciesAndInheritDependencies() as $dependency) { - $dependerLayerNames = $this->layerResolver->getLayersForReference($this->tokenResolver->resolve($dependency->getDepender(), $astMap)); - if (\array_key_exists($layer, $dependerLayerNames)) { - $dependentLayerNames = $this->layerResolver->getLayersForReference($this->tokenResolver->resolve($dependency->getDependent(), $astMap)); - foreach ($dependentLayerNames as $dependentLayerName => $_) { - if ($layer === $dependentLayerName || null !== $targetLayer && $targetLayer !== $dependentLayerName) { - continue; - } - $result[$dependentLayerName][] = new Uncovered($dependency, $dependentLayerName); - } - } - } - return $result; - } catch (InvalidEmitterConfigurationException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidEmitterConfiguration($e); - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } - } -} diff --git a/pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.php b/pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.php deleted file mode 100644 index bc0fb4d..0000000 --- a/pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.php +++ /dev/null @@ -1,79 +0,0 @@ - - * - * @throws AnalyserException - */ - public function findLayerForToken(string $tokenName, \Qossmic\Deptrac\Core\Analyser\TokenType $tokenType) : array - { - try { - $astMap = $this->astMapExtractor->extract(); - return match ($tokenType) { - \Qossmic\Deptrac\Core\Analyser\TokenType::CLASS_LIKE => $this->findLayersForReferences($astMap->getClassLikeReferences(), $tokenName, $astMap), - \Qossmic\Deptrac\Core\Analyser\TokenType::FUNCTION => $this->findLayersForReferences($astMap->getFunctionReferences(), $tokenName, $astMap), - \Qossmic\Deptrac\Core\Analyser\TokenType::FILE => $this->findLayersForReferences($astMap->getFileReferences(), $tokenName, $astMap), - }; - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } - } - /** - * @param TokenReferenceInterface[] $references - * - * @return array - * - * @throws UnrecognizedTokenException - * @throws InvalidLayerDefinitionException - * @throws InvalidCollectorDefinitionException - * @throws CouldNotParseFileException - */ - private function findLayersForReferences(array $references, string $tokenName, AstMap $astMap) : array - { - if ([] === $references) { - return []; - } - $layersForReference = []; - foreach ($references as $reference) { - if (!str_contains($reference->getToken()->toString(), $tokenName)) { - continue; - } - $token = $this->tokenResolver->resolve($reference->getToken(), $astMap); - $matchingLayers = \array_keys($this->layerResolver->getLayersForReference($token)); - natcasesort($matchingLayers); - $layersForReference[$reference->getToken()->toString()] = array_values($matchingLayers); - } - ksort($layersForReference); - return $layersForReference; - } -} diff --git a/pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.php b/pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.php deleted file mode 100644 index 8f62ed9..0000000 --- a/pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.php +++ /dev/null @@ -1,95 +0,0 @@ - $layers - */ - public function __construct(private readonly LayerProvider $layerProvider, private readonly LayerResolverInterface $layerResolver, private readonly AstMapExtractor $astMapExtractor, private readonly DependencyResolver $dependencyResolver, private readonly TokenResolver $tokenResolver, private readonly array $layers) - { - } - /** - * @return array> - * - * @throws AnalyserException - */ - public function analyse() : array - { - try { - return $this->findRulesetUsages($this->rulesetResolution()); - } catch (InvalidEmitterConfigurationException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidEmitterConfiguration($e); - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } catch (CircularReferenceException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::circularReference($e); - } - } - /** - * @return array> sourceLayer -> (targetLayer -> 0) - * - * @throws CircularReferenceException - */ - private function rulesetResolution() : array - { - $layerNames = []; - foreach (\array_map(static fn(array $layerDef): string => $layerDef['name'], $this->layers) as $sourceLayerName) { - foreach ($this->layerProvider->getAllowedLayers($sourceLayerName) as $destinationLayerName) { - $layerNames[$sourceLayerName][$destinationLayerName] = 0; - } - } - return $layerNames; - } - /** - * @param array> $rulesets - * - * @return array> - * - * @throws AstException - * @throws CouldNotParseFileException - * @throws InvalidEmitterConfigurationException - * @throws InvalidCollectorDefinitionException - * @throws InvalidLayerDefinitionException - * @throws UnrecognizedTokenException - */ - private function findRulesetUsages(array $rulesets) : array - { - $astMap = $this->astMapExtractor->extract(); - $dependencyResult = $this->dependencyResolver->resolve($astMap); - foreach ($dependencyResult->getDependenciesAndInheritDependencies() as $dependency) { - $dependerLayerNames = $this->layerResolver->getLayersForReference($this->tokenResolver->resolve($dependency->getDepender(), $astMap)); - foreach ($dependerLayerNames as $dependerLayerName => $_) { - $dependentLayerNames = $this->layerResolver->getLayersForReference($this->tokenResolver->resolve($dependency->getDependent(), $astMap)); - foreach ($dependentLayerNames as $dependentLayerName => $__) { - if (\array_key_exists($dependerLayerName, $rulesets) && \array_key_exists($dependentLayerName, $rulesets[$dependerLayerName])) { - ++$rulesets[$dependerLayerName][$dependentLayerName]; - } - } - } - } - return $rulesets; - } -} diff --git a/pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.php b/pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.php deleted file mode 100644 index 30abbbb..0000000 --- a/pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.php +++ /dev/null @@ -1,78 +0,0 @@ - - */ - private readonly array $tokenTypes; - /** - * @param array{types: array} $config - */ - public function __construct(private readonly AstMapExtractor $astMapExtractor, private readonly TokenResolver $tokenResolver, private readonly LayerResolverInterface $layerResolver, array $config) - { - $this->tokenTypes = \array_filter(\array_map(static fn(string $emitterType): ?\Qossmic\Deptrac\Core\Analyser\TokenType => \Qossmic\Deptrac\Core\Analyser\TokenType::tryFromEmitterType(EmitterType::from($emitterType)), $config['types'])); - } - /** - * @return list - * - * @throws AnalyserException - */ - public function findTokensInLayer(string $layer) : array - { - try { - $astMap = $this->astMapExtractor->extract(); - $matchingTokens = []; - if (in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::CLASS_LIKE, $this->tokenTypes, \true)) { - foreach ($astMap->getClassLikeReferences() as $classReference) { - $classToken = $this->tokenResolver->resolve($classReference->getToken(), $astMap); - if (\array_key_exists($layer, $this->layerResolver->getLayersForReference($classToken))) { - $matchingTokens[] = [$classToken->getToken()->toString(), \Qossmic\Deptrac\Core\Analyser\TokenType::CLASS_LIKE->value]; - } - } - } - if (in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::FUNCTION, $this->tokenTypes, \true)) { - foreach ($astMap->getFunctionReferences() as $functionReference) { - $functionToken = $this->tokenResolver->resolve($functionReference->getToken(), $astMap); - if (\array_key_exists($layer, $this->layerResolver->getLayersForReference($functionToken))) { - $matchingTokens[] = [$functionToken->getToken()->toString(), \Qossmic\Deptrac\Core\Analyser\TokenType::FUNCTION->value]; - } - } - } - if (in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::FILE, $this->tokenTypes, \true)) { - foreach ($astMap->getFileReferences() as $fileReference) { - $fileToken = $this->tokenResolver->resolve($fileReference->getToken(), $astMap); - if (\array_key_exists($layer, $this->layerResolver->getLayersForReference($fileToken))) { - $matchingTokens[] = [$fileToken->getToken()->toString(), \Qossmic\Deptrac\Core\Analyser\TokenType::FILE->value]; - } - } - } - \uasort($matchingTokens, static fn(array $a, array $b): int => $a[0] <=> $b[0]); - return array_values($matchingTokens); - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } - } -} diff --git a/pkg/src/core/Analyser/TokenType/TokenType.php b/pkg/src/core/Analyser/TokenType/TokenType.php deleted file mode 100644 index a08643a..0000000 --- a/pkg/src/core/Analyser/TokenType/TokenType.php +++ /dev/null @@ -1,16 +0,0 @@ -value); - } -} diff --git a/pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.php b/pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.php deleted file mode 100644 index 34f2bef..0000000 --- a/pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.php +++ /dev/null @@ -1,78 +0,0 @@ - - */ - private readonly array $tokenTypes; - /** - * @param array{types: array} $config - */ - public function __construct(private readonly AstMapExtractor $astMapExtractor, private readonly TokenResolver $tokenResolver, private readonly LayerResolverInterface $layerResolver, array $config) - { - $this->tokenTypes = \array_filter(\array_map(static fn(string $emitterType): ?\Qossmic\Deptrac\Core\Analyser\TokenType => \Qossmic\Deptrac\Core\Analyser\TokenType::tryFromEmitterType(EmitterType::from($emitterType)), $config['types'])); - } - /** - * @return string[] - * - * @throws AnalyserException - */ - public function findUnassignedTokens() : array - { - try { - $astMap = $this->astMapExtractor->extract(); - $unassignedTokens = []; - if (\in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::CLASS_LIKE, $this->tokenTypes, \true)) { - foreach ($astMap->getClassLikeReferences() as $classReference) { - $token = $this->tokenResolver->resolve($classReference->getToken(), $astMap); - if ([] === $this->layerResolver->getLayersForReference($token)) { - $unassignedTokens[] = $classReference->getToken()->toString(); - } - } - } - if (\in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::FUNCTION, $this->tokenTypes, \true)) { - foreach ($astMap->getFunctionReferences() as $functionReference) { - $token = $this->tokenResolver->resolve($functionReference->getToken(), $astMap); - if ([] === $this->layerResolver->getLayersForReference($token)) { - $unassignedTokens[] = $functionReference->getToken()->toString(); - } - } - } - if (\in_array(\Qossmic\Deptrac\Core\Analyser\TokenType::FILE, $this->tokenTypes, \true)) { - foreach ($astMap->getFileReferences() as $fileReference) { - $token = $this->tokenResolver->resolve($fileReference->getToken(), $astMap); - if ([] === $this->layerResolver->getLayersForReference($token)) { - $unassignedTokens[] = $fileReference->getToken()->toString(); - } - } - } - natcasesort($unassignedTokens); - return array_values($unassignedTokens); - } catch (UnrecognizedTokenException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::unrecognizedToken($e); - } catch (InvalidLayerDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidLayerDefinition($e); - } catch (InvalidCollectorDefinitionException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::invalidCollectorDefinition($e); - } catch (AstException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::failedAstParsing($e); - } catch (CouldNotParseFileException $e) { - throw \Qossmic\Deptrac\Core\Analyser\AnalyserException::couldNotParseFile($e); - } - } -} diff --git a/pkg/src/core/Ast/AstException/AstException.php b/pkg/src/core/Ast/AstException/AstException.php deleted file mode 100644 index d027847..0000000 --- a/pkg/src/core/Ast/AstException/AstException.php +++ /dev/null @@ -1,15 +0,0 @@ - $files - */ - public function createAstMap(array $files) : AstMap - { - $references = []; - $this->eventDispatcher->dispatch(new PreCreateAstMapEvent(\count($files))); - foreach ($files as $file) { - try { - $references[] = $this->parser->parseFile($file); - $this->eventDispatcher->dispatch(new AstFileAnalysedEvent($file)); - } catch (CouldNotParseFileException $e) { - $this->eventDispatcher->dispatch(new AstFileSyntaxErrorEvent($file, $e->getMessage())); - } - } - $astMap = new AstMap($references); - $this->eventDispatcher->dispatch(new PostCreateAstMapEvent()); - return $astMap; - } -} diff --git a/pkg/src/core/Ast/AstMap/AstInherit.php b/pkg/src/core/Ast/AstMap/AstInherit.php deleted file mode 100644 index 2331954..0000000 --- a/pkg/src/core/Ast/AstMap/AstInherit.php +++ /dev/null @@ -1,45 +0,0 @@ -path; - } - public function __toString() : string - { - $description = "{$this->classLikeName->toString()}::{$this->fileOccurrence->line} ({$this->type->value})"; - if ([] === $this->path) { - return $description; - } - return sprintf('%s (path: %s)', $description, implode(' -> ', array_reverse($this->path))); - } - /** - * @param AstInherit[] $path - */ - public function replacePath(array $path) : self - { - return new self($this->classLikeName, $this->fileOccurrence, $this->type, $path); - } -} diff --git a/pkg/src/core/Ast/AstMap/AstInheritType.php b/pkg/src/core/Ast/AstMap/AstInheritType.php deleted file mode 100644 index 6cad763..0000000 --- a/pkg/src/core/Ast/AstMap/AstInheritType.php +++ /dev/null @@ -1,11 +0,0 @@ - - */ - private array $classReferences = []; - /** - * @var array - */ - private array $fileReferences = []; - /** - * @var array - */ - private array $functionReferences = []; - /** - * @param FileReference[] $astFileReferences - */ - public function __construct(array $astFileReferences) - { - foreach ($astFileReferences as $astFileReference) { - $this->addAstFileReference($astFileReference); - } - } - /** - * @return ClassLikeReference[] - */ - public function getClassLikeReferences() : array - { - return $this->classReferences; - } - /** - * @return FileReference[] - */ - public function getFileReferences() : array - { - return $this->fileReferences; - } - /** - * @return FunctionReference[] - */ - public function getFunctionReferences() : array - { - return $this->functionReferences; - } - public function getClassReferenceForToken(ClassLikeToken $className) : ?ClassLikeReference - { - return $this->classReferences[$className->toString()] ?? null; - } - public function getFunctionReferenceForToken(FunctionToken $tokenName) : ?FunctionReference - { - return $this->functionReferences[$tokenName->toString()] ?? null; - } - public function getFileReferenceForToken(FileToken $tokenName) : ?FileReference - { - return $this->fileReferences[$tokenName->toString()] ?? null; - } - /** - * @return iterable - */ - public function getClassInherits(ClassLikeToken $classLikeName) : iterable - { - $classReference = $this->getClassReferenceForToken($classLikeName); - if (null === $classReference) { - return []; - } - foreach ($classReference->inherits as $dep) { - (yield $dep); - yield from $this->recursivelyResolveDependencies($dep); - } - } - /** - * @param ArrayObject|null $alreadyResolved - * @param SplStack|null $pathStack - * - * @return iterable - */ - private function recursivelyResolveDependencies(\Qossmic\Deptrac\Core\Ast\AstMap\AstInherit $inheritDependency, ?ArrayObject $alreadyResolved = null, ?SplStack $pathStack = null) : iterable - { - $alreadyResolved ??= new ArrayObject(); - /** @var ArrayObject $alreadyResolved */ - if (null === $pathStack) { - /** @var SplStack $pathStack */ - $pathStack = new SplStack(); - $pathStack->push($inheritDependency); - } - $className = $inheritDependency->classLikeName->toString(); - if (isset($alreadyResolved[$className])) { - $pathStack->pop(); - return []; - } - $classReference = $this->getClassReferenceForToken($inheritDependency->classLikeName); - if (null === $classReference) { - return []; - } - foreach ($classReference->inherits as $inherit) { - $alreadyResolved[$className] = \true; - /** @var AstInherit[] $path */ - $path = \iterator_to_array($pathStack); - (yield $inherit->replacePath($path)); - $pathStack->push($inherit); - yield from $this->recursivelyResolveDependencies($inherit, $alreadyResolved, $pathStack); - unset($alreadyResolved[$className]); - $pathStack->pop(); - } - } - private function addClassLike(ClassLikeReference $astClassReference) : void - { - $this->classReferences[$astClassReference->getToken()->toString()] = $astClassReference; - } - private function addAstFileReference(FileReference $astFileReference) : void - { - $this->fileReferences[$astFileReference->filepath] = $astFileReference; - foreach ($astFileReference->classLikeReferences as $astClassReference) { - $this->addClassLike($astClassReference); - } - foreach ($astFileReference->functionReferences as $astFunctionReference) { - $this->addFunction($astFunctionReference); - } - } - private function addFunction(FunctionReference $astFunctionReference) : void - { - $this->functionReferences[$astFunctionReference->getToken()->toString()] = $astFunctionReference; - } -} diff --git a/pkg/src/core/Ast/AstMap/ClassLikeReference.php b/pkg/src/core/Ast/AstMap/ClassLikeReference.php deleted file mode 100644 index 3a17daa..0000000 --- a/pkg/src/core/Ast/AstMap/ClassLikeReference.php +++ /dev/null @@ -1,38 +0,0 @@ -> $tags - */ - public function __construct(private readonly \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken $classLikeName, ?\Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType $classLikeType = null, public readonly array $inherits = [], public readonly array $dependencies = [], public readonly array $tags = [], private readonly ?FileReference $fileReference = null) - { - parent::__construct($tags); - $this->type = $classLikeType ?? \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType::TYPE_CLASSLIKE; - } - public function withFileReference(FileReference $astFileReference) : self - { - return new self($this->classLikeName, $this->type, $this->inherits, $this->dependencies, $this->tags, $astFileReference); - } - public function getFilepath() : ?string - { - return $this->fileReference?->filepath; - } - public function getToken() : \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken - { - return $this->classLikeName; - } -} diff --git a/pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.php b/pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.php deleted file mode 100644 index 43aa23f..0000000 --- a/pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.php +++ /dev/null @@ -1,74 +0,0 @@ - $tokenTemplates - * @param array> $tags - */ - private function __construct(array $tokenTemplates, string $filepath, private readonly \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken $classLikeToken, private readonly \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType $classLikeType, private readonly array $tags) - { - parent::__construct($tokenTemplates, $filepath); - } - /** - * @param list $classTemplates - * @param array> $tags - */ - public static function createClassLike(string $filepath, string $classLikeName, array $classTemplates, array $tags) : self - { - return new self($classTemplates, $filepath, \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType::TYPE_CLASSLIKE, $tags); - } - /** - * @param list $classTemplates - * @param array> $tags - */ - public static function createClass(string $filepath, string $classLikeName, array $classTemplates, array $tags) : self - { - return new self($classTemplates, $filepath, \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType::TYPE_CLASS, $tags); - } - /** - * @param list $classTemplates - * @param array> $tags - */ - public static function createTrait(string $filepath, string $classLikeName, array $classTemplates, array $tags) : self - { - return new self($classTemplates, $filepath, \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType::TYPE_TRAIT, $tags); - } - /** - * @param list $classTemplates - * @param array> $tags - */ - public static function createInterface(string $filepath, string $classLikeName, array $classTemplates, array $tags) : self - { - return new self($classTemplates, $filepath, \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeType::TYPE_INTERFACE, $tags); - } - /** @internal */ - public function build() : \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeReference - { - return new \Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeReference($this->classLikeToken, $this->classLikeType, $this->inherits, $this->dependencies, $this->tags); - } - public function extends(string $classLikeName, int $occursAtLine) : self - { - $this->inherits[] = new AstInherit(\Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), new FileOccurrence($this->filepath, $occursAtLine), AstInheritType::EXTENDS); - return $this; - } - public function implements(string $classLikeName, int $occursAtLine) : self - { - $this->inherits[] = new AstInherit(\Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), new FileOccurrence($this->filepath, $occursAtLine), AstInheritType::IMPLEMENTS); - return $this; - } - public function trait(string $classLikeName, int $occursAtLine) : self - { - $this->inherits[] = new AstInherit(\Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken::fromFQCN($classLikeName), new FileOccurrence($this->filepath, $occursAtLine), AstInheritType::USES); - return $this; - } -} diff --git a/pkg/src/core/Ast/AstMap/ClassLikeToken.php b/pkg/src/core/Ast/AstMap/ClassLikeToken.php deleted file mode 100644 index 7e65b4a..0000000 --- a/pkg/src/core/Ast/AstMap/ClassLikeToken.php +++ /dev/null @@ -1,28 +0,0 @@ -className); - } - public function toString() : string - { - return $this->className; - } - public function equals(\Qossmic\Deptrac\Core\Ast\AstMap\ClassLike\ClassLikeToken $classLikeName) : bool - { - return $this->className === $classLikeName->className; - } -} diff --git a/pkg/src/core/Ast/AstMap/ClassLikeType.php b/pkg/src/core/Ast/AstMap/ClassLikeType.php deleted file mode 100644 index e7b967c..0000000 --- a/pkg/src/core/Ast/AstMap/ClassLikeType.php +++ /dev/null @@ -1,17 +0,0 @@ -value; - } -} diff --git a/pkg/src/core/Ast/AstMap/DependencyToken.php b/pkg/src/core/Ast/AstMap/DependencyToken.php deleted file mode 100644 index ed6d5fb..0000000 --- a/pkg/src/core/Ast/AstMap/DependencyToken.php +++ /dev/null @@ -1,16 +0,0 @@ -classLikeReferences = \array_map(fn(ClassLikeReference $classReference): ClassLikeReference => $classReference->withFileReference($this), $classLikeReferences); - /** @psalm-suppress ImpureFunctionCall */ - $this->functionReferences = \array_map(fn(FunctionReference $functionReference): FunctionReference => $functionReference->withFileReference($this), $functionReferences); - } - public function getFilepath() : ?string - { - return $this->filepath; - } - public function getToken() : TokenInterface - { - return new \Qossmic\Deptrac\Core\Ast\AstMap\File\FileToken($this->filepath); - } -} diff --git a/pkg/src/core/Ast/AstMap/FileReferenceBuilder.php b/pkg/src/core/Ast/AstMap/FileReferenceBuilder.php deleted file mode 100644 index 95be870..0000000 --- a/pkg/src/core/Ast/AstMap/FileReferenceBuilder.php +++ /dev/null @@ -1,89 +0,0 @@ -dependencies[] = new DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::USE)); - return $this; - } - /** - * @param list $templateTypes - * @param array> $tags - */ - public function newClass(string $classLikeName, array $templateTypes, array $tags) : ClassLikeReferenceBuilder - { - $classReference = ClassLikeReferenceBuilder::createClass($this->filepath, $classLikeName, $templateTypes, $tags); - $this->classReferences[] = $classReference; - return $classReference; - } - /** - * @param list $templateTypes - * @param array> $tags - */ - public function newTrait(string $classLikeName, array $templateTypes, array $tags) : ClassLikeReferenceBuilder - { - $classReference = ClassLikeReferenceBuilder::createTrait($this->filepath, $classLikeName, $templateTypes, $tags); - $this->classReferences[] = $classReference; - return $classReference; - } - /** - * @param list $templateTypes - * @param array> $tags - */ - public function newClassLike(string $classLikeName, array $templateTypes, array $tags) : ClassLikeReferenceBuilder - { - $classReference = ClassLikeReferenceBuilder::createClassLike($this->filepath, $classLikeName, $templateTypes, $tags); - $this->classReferences[] = $classReference; - return $classReference; - } - /** - * @param list $templateTypes - * @param array> $tags - */ - public function newInterface(string $classLikeName, array $templateTypes, array $tags) : ClassLikeReferenceBuilder - { - $classReference = ClassLikeReferenceBuilder::createInterface($this->filepath, $classLikeName, $templateTypes, $tags); - $this->classReferences[] = $classReference; - return $classReference; - } - /** - * @param list $templateTypes - * @param array> $tags - */ - public function newFunction(string $functionName, array $templateTypes = [], array $tags = []) : FunctionReferenceBuilder - { - $functionReference = FunctionReferenceBuilder::create($this->filepath, $functionName, $templateTypes, $tags); - $this->functionReferences[] = $functionReference; - return $functionReference; - } - public function build() : \Qossmic\Deptrac\Core\Ast\AstMap\File\FileReference - { - $classReferences = []; - foreach ($this->classReferences as $classReference) { - $classReferences[] = $classReference->build(); - } - $functionReferences = []; - foreach ($this->functionReferences as $functionReference) { - $functionReferences[] = $functionReference->build(); - } - return new \Qossmic\Deptrac\Core\Ast\AstMap\File\FileReference($this->filepath, $classReferences, $functionReferences, $this->dependencies); - } -} diff --git a/pkg/src/core/Ast/AstMap/FileToken.php b/pkg/src/core/Ast/AstMap/FileToken.php deleted file mode 100644 index e36a0c9..0000000 --- a/pkg/src/core/Ast/AstMap/FileToken.php +++ /dev/null @@ -1,26 +0,0 @@ -path = Path::normalize($path); - } - public function toString() : string - { - $wd = \getcwd(); - if (\false !== $wd) { - $wd = Path::normalize($wd); - } - if (\false !== $wd && \str_starts_with($this->path, $wd)) { - return \substr($this->path, \strlen($wd)); - } - return $this->path; - } -} diff --git a/pkg/src/core/Ast/AstMap/FunctionReference.php b/pkg/src/core/Ast/AstMap/FunctionReference.php deleted file mode 100644 index ba0ca87..0000000 --- a/pkg/src/core/Ast/AstMap/FunctionReference.php +++ /dev/null @@ -1,35 +0,0 @@ -> $tags - */ - public function __construct(private readonly \Qossmic\Deptrac\Core\Ast\AstMap\Function\FunctionToken $functionName, public readonly array $dependencies = [], public readonly array $tags = [], private readonly ?FileReference $fileReference = null) - { - parent::__construct($tags); - } - public function withFileReference(FileReference $astFileReference) : self - { - return new self($this->functionName, $this->dependencies, $this->tags, $astFileReference); - } - public function getFilepath() : ?string - { - return $this->fileReference?->filepath; - } - public function getToken() : TokenInterface - { - return $this->functionName; - } -} diff --git a/pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.php b/pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.php deleted file mode 100644 index 35ec862..0000000 --- a/pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.php +++ /dev/null @@ -1,30 +0,0 @@ - $tokenTemplates - * @param array> $tags - */ - private function __construct(array $tokenTemplates, string $filepath, private readonly string $functionName, private readonly array $tags) - { - parent::__construct($tokenTemplates, $filepath); - } - /** - * @param list $functionTemplates - * @param array> $tags - */ - public static function create(string $filepath, string $functionName, array $functionTemplates, array $tags) : self - { - return new self($functionTemplates, $filepath, $functionName, $tags); - } - /** @internal */ - public function build() : \Qossmic\Deptrac\Core\Ast\AstMap\Function\FunctionReference - { - return new \Qossmic\Deptrac\Core\Ast\AstMap\Function\FunctionReference(\Qossmic\Deptrac\Core\Ast\AstMap\Function\FunctionToken::fromFQCN($this->functionName), $this->dependencies, $this->tags); - } -} diff --git a/pkg/src/core/Ast/AstMap/FunctionToken.php b/pkg/src/core/Ast/AstMap/FunctionToken.php deleted file mode 100644 index 39ca41b..0000000 --- a/pkg/src/core/Ast/AstMap/FunctionToken.php +++ /dev/null @@ -1,28 +0,0 @@ -functionName); - } - public function toString() : string - { - return $this->functionName . '()'; - } - public function equals(self $functionName) : bool - { - return $this->functionName === $functionName->functionName; - } -} diff --git a/pkg/src/core/Ast/AstMap/ReferenceBuilder.php b/pkg/src/core/Ast/AstMap/ReferenceBuilder.php deleted file mode 100644 index ee9cbe8..0000000 --- a/pkg/src/core/Ast/AstMap/ReferenceBuilder.php +++ /dev/null @@ -1,126 +0,0 @@ - $tokenTemplates - */ - protected function __construct(protected array $tokenTemplates, protected string $filepath) - { - } - /** - * @return string[] - */ - public final function getTokenTemplates() : array - { - return $this->tokenTemplates; - } - protected function createContext(int $occursAtLine, DependencyType $type) : DependencyContext - { - return new DependencyContext(new FileOccurrence($this->filepath, $occursAtLine), $type); - } - /** - * Unqualified function and constant names inside a namespace cannot be - * statically resolved. Inside a namespace Foo, a call to strlen() may - * either refer to the namespaced \Foo\strlen(), or the global \strlen(). - * Because PHP-Parser does not have the necessary context to decide this, - * such names are left unresolved. - */ - public function unresolvedFunctionCall(string $functionName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(FunctionToken::fromFQCN($functionName), $this->createContext($occursAtLine, DependencyType::UNRESOLVED_FUNCTION_CALL)); - return $this; - } - public function variable(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::VARIABLE)); - return $this; - } - public function superglobal(string $superglobalName, int $occursAtLine) : void - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(SuperGlobalToken::from($superglobalName), $this->createContext($occursAtLine, DependencyType::SUPERGLOBAL_VARIABLE)); - } - public function returnType(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::RETURN_TYPE)); - return $this; - } - public function throwStatement(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::THROW)); - return $this; - } - public function anonymousClassExtends(string $classLikeName, int $occursAtLine) : void - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::ANONYMOUS_CLASS_EXTENDS)); - } - public function anonymousClassTrait(string $classLikeName, int $occursAtLine) : void - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::ANONYMOUS_CLASS_TRAIT)); - } - public function constFetch(string $classLikeName, int $occursAtLine) : void - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::CONST)); - } - public function anonymousClassImplements(string $classLikeName, int $occursAtLine) : void - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::ANONYMOUS_CLASS_IMPLEMENTS)); - } - public function parameter(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::PARAMETER)); - return $this; - } - public function attribute(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::ATTRIBUTE)); - return $this; - } - public function instanceof(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::INSTANCEOF)); - return $this; - } - public function newStatement(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::NEW)); - return $this; - } - public function staticProperty(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::STATIC_PROPERTY)); - return $this; - } - public function staticMethod(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::STATIC_METHOD)); - return $this; - } - public function catchStmt(string $classLikeName, int $occursAtLine) : self - { - $this->dependencies[] = new \Qossmic\Deptrac\Core\Ast\AstMap\DependencyToken(ClassLikeToken::fromFQCN($classLikeName), $this->createContext($occursAtLine, DependencyType::CATCH)); - return $this; - } - public function addTokenTemplate(string $tokenTemplate) : void - { - $this->tokenTemplates[] = $tokenTemplate; - } - public function removeTokenTemplate(string $tokenTemplate) : void - { - $key = \array_search($tokenTemplate, $this->tokenTemplates, \true); - if (\false !== $key) { - unset($this->tokenTemplates[$key]); - } - } -} diff --git a/pkg/src/core/Ast/AstMap/SuperGlobalToken.php b/pkg/src/core/Ast/AstMap/SuperGlobalToken.php deleted file mode 100644 index d384312..0000000 --- a/pkg/src/core/Ast/AstMap/SuperGlobalToken.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ - public static function allowedNames() : array - { - return \array_map(static fn(self $token): string => $token->value, self::cases()); - } - public function toString() : string - { - return '$' . $this->value; - } -} diff --git a/pkg/src/core/Ast/AstMap/TaggedTokenReference.php b/pkg/src/core/Ast/AstMap/TaggedTokenReference.php deleted file mode 100644 index 1623e92..0000000 --- a/pkg/src/core/Ast/AstMap/TaggedTokenReference.php +++ /dev/null @@ -1,31 +0,0 @@ -> $tags - */ - protected function __construct(private readonly array $tags) - { - } - public function hasTag(string $name) : bool - { - return isset($this->tags[$name]); - } - /** - * @return ?list - */ - public function getTagLines(string $name) : ?array - { - return $this->tags[$name] ?? null; - } -} diff --git a/pkg/src/core/Ast/AstMap/VariableReference.php b/pkg/src/core/Ast/AstMap/VariableReference.php deleted file mode 100644 index 8898195..0000000 --- a/pkg/src/core/Ast/AstMap/VariableReference.php +++ /dev/null @@ -1,24 +0,0 @@ -tokenName; - } -} diff --git a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.go b/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.go deleted file mode 100644 index 5be0b18..0000000 --- a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.go +++ /dev/null @@ -1,40 +0,0 @@ -package AstMapExtractor - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/InputCollectorInterface" -) - -type AstMapExtractor struct { - inputCollector InputCollectorInterface.InputCollectorInterface - astLoader *AstLoader.AstLoader - astMapCache *AstMap.AstMap -} - -func NewAstMapExtractor(inputCollector InputCollectorInterface.InputCollectorInterface, astLoader *AstLoader.AstLoader) *AstMapExtractor { - return &AstMapExtractor{ - inputCollector: inputCollector, - astLoader: astLoader, - astMapCache: nil, - } -} - -func (e *AstMapExtractor) Extract() (*AstMap.AstMap, error) { - if e.astMapCache == nil { - collected, err := e.inputCollector.Collect() - - if err != nil { - return nil, err - } - - createdAstMap, errCreateAstMap := e.astLoader.CreateAstMap(collected) - if errCreateAstMap != nil { - return nil, errCreateAstMap - } - - e.astMapCache = createdAstMap - } - - return e.astMapCache, nil -} diff --git a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.php b/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.php deleted file mode 100644 index b29fbe5..0000000 --- a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor.php +++ /dev/null @@ -1,26 +0,0 @@ -astMapCache ??= $this->astLoader->createAstMap($this->inputCollector->collect()); - } catch (InputException $exception) { - throw \Qossmic\Deptrac\Core\Ast\AstException::couldNotCollectFiles($exception); - } - } -} diff --git a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor_test.go b/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor_test.go deleted file mode 100644 index d2ab5c6..0000000 --- a/pkg/src/core/Ast/AstMapExtractor/AstMapExtractor_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package AstMapExtractor - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/FileInputCollector" - "github.com/KoNekoD/go-deptrac/pkg/test_projects" - "os" - "testing" -) - -func TestAstMapExtractorExtractWorkedFine(t *testing.T) { - paths := []string{ - "analyser", - "ast", - "config", - "dumper", - "layer", - "output_formatter", - "result", - "util", - } - var excluded = make([]string, 0) - - wd, err := os.Getwd() - - if err != nil { - t.Error(err) - } - - basePath := wd + "/pkg/" - - fileInputCollector, err := FileInputCollector.NewFileInputCollector(paths, excluded, basePath) - - if err != nil { - t.Error(err) - } - - astLoader := AstLoader.NewAstLoader(test_projects.NewFileParser(), nil) - - e := NewAstMapExtractor(fileInputCollector, astLoader) - - extract, err := e.Extract() - if err != nil { - t.Error(err) - } - - if extract == nil { - t.Error("extract is nil") - } -} diff --git a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.go b/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.go deleted file mode 100644 index 496ff07..0000000 --- a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.go +++ /dev/null @@ -1,10 +0,0 @@ -package AstFileReferenceCacheInterface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" -) - -type AstFileReferenceCacheInterface interface { - Get(filepath string) (*AstMap.FileReference, error) - Set(fileReference *AstMap.FileReference) error -} diff --git a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.php b/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.php deleted file mode 100644 index a308e5b..0000000 --- a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface/AstFileReferenceCacheInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - */ - private array $cache = []; - private bool $loaded = \false; - /** @var array */ - private array $parsedFiles = []; - public function __construct(private readonly string $cacheFile, private readonly string $cacheVersion) - { - } - public function get(string $filepath) : ?FileReference - { - $this->load(); - /** @throws void */ - $filepath = $this->normalizeFilepath($filepath); - /** @throws void */ - if ($this->has($filepath)) { - $this->parsedFiles[$filepath] = \true; - return $this->cache[$filepath]['reference']; - } - return null; - } - public function set(FileReference $fileReference) : void - { - $this->load(); - /** @throws void */ - $filepath = $this->normalizeFilepath($fileReference->filepath); - $this->parsedFiles[$filepath] = \true; - $this->cache[$filepath] = ['hash' => (string) sha1_file($filepath), 'reference' => $fileReference]; - } - public function load() : void - { - if (\true === $this->loaded) { - return; - } - if (!file_exists($this->cacheFile) || !is_readable($this->cacheFile)) { - return; - } - try { - $contents = FileReader::read($this->cacheFile); - } catch (CouldNotReadFileException) { - return; - } - /** @var ?array{version: string, payload: array} $cache */ - $cache = json_decode($contents, \true); - $this->loaded = \true; - if (null === $cache || $this->cacheVersion !== $cache['version']) { - return; - } - $this->cache = array_map( - /** @param array{hash: string, reference: string} $data */ - static function (array $data) : array { - $reference = unserialize($data['reference'], ['allowed_classes' => [FileReference::class, ClassLikeReference::class, FunctionReference::class, VariableReference::class, AstInherit::class, DependencyToken::class, DependencyType::class, FileToken::class, ClassLikeToken::class, ClassLikeType::class, FunctionToken::class, SuperGlobalToken::class, FileOccurrence::class, DependencyContext::class]]); - assert($reference instanceof FileReference); - return ['hash' => $data['hash'], 'reference' => $reference]; - }, - $cache['payload'] - ); - } - public function write() : void - { - if (!is_writable(dirname($this->cacheFile))) { - return; - } - $cache = array_filter($this->cache, fn(string $key): bool => isset($this->parsedFiles[$key]), \ARRAY_FILTER_USE_KEY); - $payload = array_map(static function (array $data) : array { - $data['reference'] = \serialize($data['reference']); - return $data; - }, $cache); - \file_put_contents($this->cacheFile, json_encode(['version' => $this->cacheVersion, 'payload' => $payload])); - } - /** - * @throws FileNotExistsException - */ - private function has(string $filepath) : bool - { - $this->load(); - $filepath = $this->normalizeFilepath($filepath); - if (!isset($this->cache[$filepath])) { - return \false; - } - $hash = sha1_file($filepath); - if ($hash !== $this->cache[$filepath]['hash']) { - unset($this->cache[$filepath]); - return \false; - } - return \true; - } - /** - * @throws FileNotExistsException - */ - private function normalizeFilepath(string $filepath) : string - { - $normalized = realpath($filepath); - if (\false === $normalized) { - throw FileNotExistsException::fromFilePath($filepath); - } - return $normalized; - } -} diff --git a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.php b/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.php deleted file mode 100644 index 5a59ece..0000000 --- a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - private array $cache = []; - public function get(string $filepath) : ?FileReference - { - $filepath = \realpath($filepath); - return $this->cache[$filepath] ?? null; - } - public function set(FileReference $fileReference) : void - { - $filepath = (string) \realpath($fileReference->filepath); - $this->cache[$filepath] = $fileReference; - } -} diff --git a/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.php b/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.php deleted file mode 100644 index 6211e90..0000000 --- a/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.php +++ /dev/null @@ -1,29 +0,0 @@ -> - */ - public static function getSubscribedEvents() : array - { - return [PreCreateAstMapEvent::class => 'onPreCreateAstMapEvent', PostCreateAstMapEvent::class => 'onPostCreateAstMapEvent']; - } - public function onPreCreateAstMapEvent(PreCreateAstMapEvent $event) : void - { - $this->deferredCache->load(); - } - public function onPostCreateAstMapEvent(PostCreateAstMapEvent $event) : void - { - $this->deferredCache->write(); - } -} diff --git a/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.go b/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.go deleted file mode 100644 index 3fe41d9..0000000 --- a/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.go +++ /dev/null @@ -1,11 +0,0 @@ -package ReferenceExtractorInterface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeScope" - "go/ast" -) - -type ReferenceExtractorInterface interface { - ProcessNode(node ast.Node, referenceBuilder AstMap.ReferenceBuilderInterface, typeScope *TypeScope.TypeScope) -} diff --git a/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.php b/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.php deleted file mode 100644 index e9d78ea..0000000 --- a/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface/ReferenceExtractorInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -currentTypeScope = new TypeScope(''); - $this->lexer = new Lexer(); - $this->docParser = new PhpDocParser(new TypeParser(), new ConstExprParser()); - $this->dependencyResolvers = $dependencyResolvers; - $this->currentReference = $fileReferenceBuilder; - } - /** - * @return list - */ - private function templatesFromDocs(Node $node) : array - { - $docComment = $node->getDocComment(); - if (null === $docComment) { - return []; - } - $docText = $docComment->getText(); - // prevent expensive parsing, when not templates involved. - if (!\str_contains($docText, '@template')) { - return []; - } - $tokens = new TokenIterator($this->lexer->tokenize($docText)); - $docNode = $this->docParser->parse($tokens); - return \array_values(\array_map(static fn(TemplateTagValueNode $tag): string => $tag->name, $docNode->getTemplateTagValues())); - } - public function enterNode(Node $node) - { - match (\true) { - $node instanceof Namespace_ => $this->currentTypeScope = new TypeScope($node->name ? $node->name->toCodeString() : ''), - $node instanceof Node\Stmt\Function_ => $this->enterFunction($node), - $node instanceof ClassLike => $this->enterClassLike($node), - $node instanceof Node\FunctionLike => $this->enterFunctionLike($node), - default => null, - }; - return null; - } - public function leaveNode(Node $node) - { - if ($node instanceof Node\FunctionLike) { - foreach ($this->templatesFromDocs($node) as $template) { - $this->currentReference->removeTokenTemplate($template); - } - } - match (\true) { - $node instanceof Node\Stmt\Function_ => $this->currentReference = $this->fileReferenceBuilder, - $node instanceof ClassLike && null !== $this->getClassReferenceName($node) => $this->currentReference = $this->fileReferenceBuilder, - $node instanceof Use_ && Use_::TYPE_NORMAL === $node->type => $this->leaveUse($node), - $node instanceof GroupUse => $this->leaveGroupUse($node), - default => null, - }; - foreach ($this->dependencyResolvers as $resolver) { - $resolver->processNode($node, $this->currentReference, $this->currentTypeScope); - } - return null; - } - /** - * @return ?array{PhpDocNode, int} DocNode, comment start line - */ - private function getDocNodeCrate(Node $node) : ?array - { - $docComment = $node->getDocComment(); - if (null === $docComment) { - return null; - } - $tokens = new TokenIterator($this->lexer->tokenize($docComment->getText())); - return [$this->docParser->parse($tokens), $docComment->getStartLine()]; - } - private function enterClassLike(ClassLike $node) : void - { - $name = $this->getClassReferenceName($node); - $docNodeCrate = $this->getDocNodeCrate($node); - if (null !== $name) { - $tags = []; - if (null !== $docNodeCrate) { - $tags = $this->extractTags($docNodeCrate[0]); - } - match (\true) { - $node instanceof Interface_ => $this->enterInterface($name, $node, $tags), - $node instanceof Class_ => $this->enterClass($name, $node, $tags), - $node instanceof Trait_ => $this->currentReference = $this->fileReferenceBuilder->newTrait($name, $this->templatesFromDocs($node), $tags), - default => $this->currentReference = $this->fileReferenceBuilder->newClassLike($name, $this->templatesFromDocs($node), $tags), - }; - } - foreach ($node->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - foreach ($this->typeResolver->resolvePHPParserTypes($this->currentTypeScope, $attribute->name) as $classLikeName) { - $this->currentReference->attribute($classLikeName, $attribute->getLine()); - } - } - } - if (null !== $docNodeCrate) { - $this->processClassLikeDocs($docNodeCrate); - } - } - private function enterFunction(Node\Stmt\Function_ $node) : void - { - if (isset($node->namespacedName)) { - $namespacedName = $node->namespacedName; - $name = $namespacedName->toCodeString(); - } else { - $name = $node->name->toString(); - } - $docNodeCrate = $this->getDocNodeCrate($node); - $tags = []; - if (null !== $docNodeCrate) { - $tags = $this->extractTags($docNodeCrate[0]); - } - $this->currentReference = $this->fileReferenceBuilder->newFunction($name, $this->templatesFromDocs($node), $tags); - foreach ($node->getParams() as $param) { - if (null !== $param->type) { - foreach ($this->typeResolver->resolvePHPParserTypes($this->currentTypeScope, $param->type) as $classLikeName) { - $this->currentReference->parameter($classLikeName, $param->getLine()); - } - } - } - $returnType = $node->getReturnType(); - if (null !== $returnType) { - foreach ($this->typeResolver->resolvePHPParserTypes($this->currentTypeScope, $returnType) as $classLikeName) { - $this->currentReference->returnType($classLikeName, $returnType->getLine()); - } - } - foreach ($node->getAttrGroups() as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - foreach ($this->typeResolver->resolvePHPParserTypes($this->currentTypeScope, $attribute) as $classLikeName) { - $this->currentReference->attribute($classLikeName, $attribute->getLine()); - } - } - } - } - private function getClassReferenceName(ClassLike $node) : ?string - { - if (isset($node->namespacedName)) { - return $node->namespacedName->toCodeString(); - } - if ($node->name instanceof Identifier) { - return $node->name->toString(); - } - return null; - } - /** - * @param array> $tags - */ - private function enterInterface(string $name, Interface_ $node, array $tags) : void - { - $this->currentReference = $this->fileReferenceBuilder->newInterface($name, $this->templatesFromDocs($node), $tags); - foreach ($node->extends as $extend) { - $this->currentReference->implements($extend->toCodeString(), $extend->getLine()); - } - } - /** - * @param array> $tags - */ - private function enterClass(string $name, Class_ $node, array $tags) : void - { - $this->currentReference = $this->fileReferenceBuilder->newClass($name, $this->templatesFromDocs($node), $tags); - if ($node->extends instanceof Name) { - $this->currentReference->extends($node->extends->toCodeString(), $node->extends->getLine()); - } - foreach ($node->implements as $implement) { - $this->currentReference->implements($implement->toCodeString(), $implement->getLine()); - } - } - private function enterFunctionLike(Node\FunctionLike $node) : void - { - foreach ($this->templatesFromDocs($node) as $template) { - $this->currentReference->addTokenTemplate($template); - } - } - private function leaveUse(Use_ $node) : void - { - foreach ($node->uses as $use) { - $this->currentTypeScope->addUse($use->name->toString(), $use->getAlias()->toString()); - $this->fileReferenceBuilder->useStatement($use->name->toString(), $use->name->getLine()); - } - } - private function leaveGroupUse(GroupUse $node) : void - { - foreach ($node->uses as $use) { - if (Use_::TYPE_NORMAL === $use->type) { - $classLikeName = $node->prefix->toString() . '\\' . $use->name->toString(); - $this->currentTypeScope->addUse($classLikeName, $use->getAlias()->toString()); - $this->fileReferenceBuilder->useStatement($classLikeName, $use->name->getLine()); - } - } - } - /** - * @param array{PhpDocNode, int} $docNodeCrate - */ - private function processClassLikeDocs(array $docNodeCrate) : void - { - [$docNode, $line] = $docNodeCrate; - foreach ($docNode->getMethodTagValues() as $methodTagValue) { - $templateTypes = \array_merge(\array_map(static fn(TemplateTagValueNode $node): string => $node->name, $methodTagValue->templateTypes), $this->currentReference->getTokenTemplates()); - foreach ($methodTagValue->parameters as $tag) { - if (null !== $tag->type) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $this->currentTypeScope, $templateTypes); - foreach ($types as $type) { - $this->currentReference->parameter($type, $line); - } - } - } - $returnType = $methodTagValue->returnType; - if (null !== $returnType) { - $types = $this->typeResolver->resolvePHPStanDocParserType($returnType, $this->currentTypeScope, $templateTypes); - foreach ($types as $type) { - $this->currentReference->returnType($type, $line); - } - } - } - /** @var list $propertyTags */ - $propertyTags = \array_merge($docNode->getPropertyTagValues(), $docNode->getPropertyReadTagValues(), $docNode->getPropertyWriteTagValues()); - foreach ($propertyTags as $tag) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $this->currentTypeScope, $this->currentReference->getTokenTemplates()); - foreach ($types as $type) { - $this->currentReference->variable($type, $line); - } - } - } - /** - * @return array> - */ - private function extractTags(PhpDocNode $doc) : array - { - $tags = []; - foreach ($doc->getTags() as $tag) { - $tags[$tag->name][] = (string) $tag->value; - } - return $tags; - } -} diff --git a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.php b/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.php deleted file mode 100644 index dc94876..0000000 --- a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.php +++ /dev/null @@ -1,106 +0,0 @@ - - */ - private static array $classAstMap = []; - private readonly NodeTraverser $traverser; - /** - * @param ReferenceExtractorInterface[] $extractors - */ - public function __construct(private readonly Parser $parser, private readonly AstFileReferenceCacheInterface $cache, private readonly TypeResolver $typeResolver, private readonly iterable $extractors) - { - $this->traverser = new NodeTraverser(); - $this->traverser->addVisitor(new NameResolver()); - } - public function parseFile(string $file) : FileReference - { - if (null !== ($fileReference = $this->cache->get($file))) { - return $fileReference; - } - $fileReferenceBuilder = FileReferenceBuilder::create($file);// - $visitor = new \Qossmic\Deptrac\Core\Ast\Parser\NikicPhpParser\FileReferenceVisitor($fileReferenceBuilder, $this->typeResolver, ...$this->extractors); - $nodes = $this->loadNodesFromFile($file); - $this->traverser->addVisitor($visitor); - $this->traverser->traverse($nodes); - $this->traverser->removeVisitor($visitor); - $fileReference = $fileReferenceBuilder->build(); - $this->cache->set($fileReference); - return $fileReference; - } - /** - * @throws CouldNotParseFileException - */ - public function getNodeForClassLikeReference(ClassLikeReference $classReference) : ?ClassLike - { - $classLikeName = $classReference->getToken()->toString(); - if (isset(self::$classAstMap[$classLikeName])) { - return self::$classAstMap[$classLikeName]; - } - $filepath = $classReference->getFilepath(); - if (null === $filepath) { - return null; - } - $visitor = new FindingVisitor(static fn(Node $node): bool => $node instanceof ClassLike); - $nodes = $this->loadNodesFromFile($filepath); - $this->traverser->addVisitor($visitor); - $this->traverser->traverse($nodes); - $this->traverser->removeVisitor($visitor); - /** @var ClassLike[] $classLikeNodes */ - $classLikeNodes = $visitor->getFoundNodes(); - foreach ($classLikeNodes as $classLikeNode) { - if (isset($classLikeNode->namespacedName)) { - $namespacedName = $classLikeNode->namespacedName; - $className = $namespacedName->toCodeString(); - } elseif ($classLikeNode->name instanceof Identifier) { - $className = $classLikeNode->name->toString(); - } else { - continue; - } - self::$classAstMap[$className] = $classLikeNode; - } - /** @psalm-var ?ClassLike */ - return self::$classAstMap[$classLikeName] ?? null; - } - /** - * @return array - * - * @throws CouldNotParseFileException - */ - private function loadNodesFromFile(string $filepath) : array - { - try { - $fileContents = FileReader::read($filepath); - /** @throws Error */ - $nodes = $this->parser->parse($fileContents, new Throwing()); - /** @var array $nodes */ - return $nodes; - } catch (Error|CouldNotReadFileException $e) { - throw CouldNotParseFileException::because($e->getMessage(), $e); - } - } -} diff --git a/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.go b/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.go deleted file mode 100644 index 8f8ecb1..0000000 --- a/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.go +++ /dev/null @@ -1,9 +0,0 @@ -package ParserInterface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" -) - -type ParserInterface interface { - ParseFile(file string) (*AstMap.FileReference, error) -} diff --git a/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.php b/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.php deleted file mode 100644 index 814fe58..0000000 --- a/pkg/src/core/Ast/Parser/ParserInterface/ParserInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -typeResolver = new phpDocumentorTypeResolver(new FqsenResolver()); - } - /** - * @return string[] - */ - public function resolvePHPParserTypes(\Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, NodeAbstract ...$nodes) : array - { - $types = []; - foreach ($nodes as $node) { - $types[] = $this->resolvePHPParserType($typeScope, $node); - } - return \array_merge([], ...$types); - } - /** - * @return string[] - */ - private function resolvePHPParserType(\Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, NodeAbstract $node) : array - { - return match (\true) { - $node instanceof Name && $node->isSpecialClassName() => [], - $node instanceof Name => $this->resolveString($node->toCodeString(), $typeScope), - $node instanceof NullableType => $this->resolvePHPParserType($typeScope, $node->type), - $node instanceof UnionType => $this->resolvePHPParserTypes($typeScope, ...$node->types), - $node instanceof IntersectionType => $this->resolvePHPParserTypes($typeScope, ...$node->types), - default => [], - }; - } - /** - * @param array $templateTypes - * - * @return string[] - */ - public function resolvePHPStanDocParserType(TypeNode $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, array $templateTypes) : array - { - return match (\true) { - $type instanceof IdentifierTypeNode => \in_array($type->name, $templateTypes, \true) ? [] : $this->resolveString($type->name, $typeScope), - $type instanceof ConstTypeNode && $type->constExpr instanceof ConstFetchNode => $this->resolveString($type->constExpr->className, $typeScope), - $type instanceof NullableTypeNode => $this->resolvePHPStanDocParserType($type->type, $typeScope, $templateTypes), - $type instanceof ArrayTypeNode => $this->resolvePHPStanDocParserType($type->type, $typeScope, $templateTypes), - $type instanceof UnionTypeNode || $type instanceof IntersectionTypeNode => $this->resolveVariableType($type, $typeScope, $templateTypes), - $type instanceof GenericTypeNode => $this->resolveGeneric($type, $typeScope, $templateTypes), - $type instanceof ArrayShapeNode => $this->resolveArray($type, $typeScope, $templateTypes), - $type instanceof CallableTypeNode => $this->resolveCallable($type, $typeScope, $templateTypes), - default => $this->resolveString((string) $type, $typeScope), - }; - } - /** - * @return string[] - */ - private function resolveString(string $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $nameScope) : array - { - try { - $context = new Context($nameScope->namespace, $nameScope->getUses()); - /** @throws InvalidArgumentException */ - $resolvedType = $this->typeResolver->resolve($type, $context); - return $this->resolveReflectionType($resolvedType); - } catch (Throwable) { - return []; - } - } - /** - * @return string[] - */ - public function resolvePropertyType(Identifier|Name|ComplexType $type) : array - { - return match (\true) { - $type instanceof FullyQualified => [(string) $type], - $type instanceof NullableType => $this->resolvePropertyType($type->type), - $type instanceof UnionType || $type instanceof IntersectionType => \array_merge([], ...\array_map(fn(Identifier|Name|IntersectionType $typeNode): array => $this->resolvePropertyType($typeNode), $type->types)), - default => [], - }; - } - /** - * @return string[] - */ - private function resolveReflectionType(Type $resolvedType) : array - { - return match (\true) { - $resolvedType instanceof Object_ => ($fqsen = $resolvedType->getFqsen()) ? [(string) $fqsen] : [], - $resolvedType instanceof Compound => \array_merge([], ...\array_map(fn(Type $type) => $this->resolveReflectionType($type), \iterator_to_array($resolvedType))), - default => [], - }; - } - /** - * @param array $templateTypes - * - * @return string[] - */ - private function resolveGeneric(GenericTypeNode $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, array $templateTypes) : array - { - $preType = 'list' === $type->type->name ? [] : $this->resolvePHPStanDocParserType($type->type, $typeScope, $templateTypes); - return \array_merge($preType, ...\array_map(fn(TypeNode $typeNode): array => $this->resolvePHPStanDocParserType($typeNode, $typeScope, $templateTypes), $type->genericTypes)); - } - /** - * @param array $templateTypes - * - * @return string[] - */ - private function resolveCallable(CallableTypeNode $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, array $templateTypes) : array - { - return \array_merge($this->resolvePHPStanDocParserType($type->returnType, $typeScope, $templateTypes), ...\array_map(fn(CallableTypeParameterNode $parameterNode): array => $this->resolvePHPStanDocParserType($parameterNode->type, $typeScope, $templateTypes), $type->parameters)); - } - /** - * @param array $templateTypes - * - * @return string[] - */ - private function resolveArray(ArrayShapeNode $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, array $templateTypes) : array - { - return \array_merge([], ...\array_map(fn(ArrayShapeItemNode $itemNode): array => $this->resolvePHPStanDocParserType($itemNode->valueType, $typeScope, $templateTypes), $type->items)); - } - /** - * @param array $templateTypes - * - * @return string[] - */ - private function resolveVariableType(UnionTypeNode|IntersectionTypeNode $type, \Qossmic\Deptrac\Core\Ast\Parser\TypeScope $typeScope, array $templateTypes) : array - { - return \array_merge([], ...\array_map(fn(TypeNode $typeNode): array => $this->resolvePHPStanDocParserType($typeNode, $typeScope, $templateTypes), $type->types)); - } -} diff --git a/pkg/src/core/Ast/Parser/TypeScope/TypeScope.php b/pkg/src/core/Ast/Parser/TypeScope/TypeScope.php deleted file mode 100644 index de81a50..0000000 --- a/pkg/src/core/Ast/Parser/TypeScope/TypeScope.php +++ /dev/null @@ -1,26 +0,0 @@ - alias => className - */ - private array $uses = []; - public function __construct(public readonly string $namespace) - { - } - public function addUse(string $className, ?string $alias) : void - { - $this->uses[$alias ?: $className] = $className; - } - /** - * @return array - */ - public function getUses() : array - { - return $this->uses; - } -} diff --git a/pkg/src/core/Dependency/Dependency/Dependency.php b/pkg/src/core/Dependency/Dependency/Dependency.php deleted file mode 100644 index dde6dbe..0000000 --- a/pkg/src/core/Dependency/Dependency/Dependency.php +++ /dev/null @@ -1,30 +0,0 @@ - $this->dependent->toString(), 'line' => $this->context->fileOccurrence->line]]; - } - public function getDepender() : TokenInterface - { - return $this->depender; - } - public function getDependent() : TokenInterface - { - return $this->dependent; - } - public function getContext() : DependencyContext - { - return $this->context; - } -} diff --git a/pkg/src/core/Dependency/DependencyList/DependencyList.php b/pkg/src/core/Dependency/DependencyList/DependencyList.php deleted file mode 100644 index 9300911..0000000 --- a/pkg/src/core/Dependency/DependencyList/DependencyList.php +++ /dev/null @@ -1,57 +0,0 @@ - */ - private array $dependencies = []; - /** @var array */ - private array $inheritDependencies = []; - public function addDependency(\Qossmic\Deptrac\Core\Dependency\Dependency $dependency) : self - { - $tokenName = $dependency->getDepender()->toString(); - if (!isset($this->dependencies[$tokenName])) { - $this->dependencies[$tokenName] = []; - } - $this->dependencies[$tokenName][] = $dependency; - return $this; - } - public function addInheritDependency(\Qossmic\Deptrac\Core\Dependency\InheritDependency $dependency) : self - { - $classLikeName = $dependency->getDepender()->toString(); - if (!isset($this->inheritDependencies[$classLikeName])) { - $this->inheritDependencies[$classLikeName] = []; - } - $this->inheritDependencies[$classLikeName][] = $dependency; - return $this; - } - /** - * @return Dependency[] - */ - public function getDependenciesByClass(ClassLikeToken $classLikeName) : array - { - return $this->dependencies[$classLikeName->toString()] ?? []; - } - /** - * @return DependencyInterface[] - */ - public function getDependenciesAndInheritDependencies() : array - { - $buffer = []; - foreach ($this->dependencies as $deps) { - foreach ($deps as $dependency) { - $buffer[] = $dependency; - } - } - foreach ($this->inheritDependencies as $deps) { - foreach ($deps as $dependency) { - $buffer[] = $dependency; - } - } - return $buffer; - } -} diff --git a/pkg/src/core/Dependency/DependencyResolver/DependencyResolver.php b/pkg/src/core/Dependency/DependencyResolver/DependencyResolver.php deleted file mode 100644 index eee9807..0000000 --- a/pkg/src/core/Dependency/DependencyResolver/DependencyResolver.php +++ /dev/null @@ -1,47 +0,0 @@ -} $config - */ - public function __construct(private readonly array $config, private readonly \Qossmic\Deptrac\Core\Dependency\InheritanceFlattener $inheritanceFlattener, private readonly ContainerInterface $emitterLocator, private readonly EventDispatcherInterface $eventDispatcher) - { - } - /** - * @throws InvalidEmitterConfigurationException - */ - public function resolve(AstMap $astMap) : \Qossmic\Deptrac\Core\Dependency\DependencyList - { - $result = new \Qossmic\Deptrac\Core\Dependency\DependencyList(); - foreach ($this->config['types'] as $type) { - try { - $emitter = $this->emitterLocator->get($type); - } catch (ContainerExceptionInterface) { - throw \Qossmic\Deptrac\Core\Dependency\InvalidEmitterConfigurationException::couldNotLocate($type); - } - if (!$emitter instanceof DependencyEmitterInterface) { - throw \Qossmic\Deptrac\Core\Dependency\InvalidEmitterConfigurationException::isNotEmitter($type, $emitter); - } - $this->eventDispatcher->dispatch(new PreEmitEvent($emitter->getName())); - $emitter->applyDependencies($astMap, $result); - $this->eventDispatcher->dispatch(new PostEmitEvent()); - } - $this->eventDispatcher->dispatch(new PreFlattenEvent()); - $this->inheritanceFlattener->flattenDependencies($astMap, $result); - $this->eventDispatcher->dispatch(new PostFlattenEvent()); - return $result; - } -} diff --git a/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.php deleted file mode 100644 index 66c6e56..0000000 --- a/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.php +++ /dev/null @@ -1,35 +0,0 @@ -getClassLikeReferences() as $classReference) { - $classLikeName = $classReference->getToken(); - foreach ($classReference->dependencies as $dependency) { - if (DependencyType::SUPERGLOBAL_VARIABLE === $dependency->context->dependencyType) { - continue; - } - if (DependencyType::UNRESOLVED_FUNCTION_CALL === $dependency->context->dependencyType) { - continue; - } - $dependencyList->addDependency(new Dependency($classLikeName, $dependency->token, $dependency->context)); - } - foreach ($astMap->getClassInherits($classLikeName) as $inherit) { - $dependencyList->addDependency(new Dependency($classLikeName, $inherit->classLikeName, new DependencyContext($inherit->fileOccurrence, DependencyType::INHERIT))); - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.go b/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.go deleted file mode 100644 index 64440b3..0000000 --- a/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.go +++ /dev/null @@ -1,29 +0,0 @@ -package ClassSuperglobalDependencyEmitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" -) - -type ClassSuperglobalDependencyEmitter struct{} - -func NewClassSuperglobalDependencyEmitter() *ClassSuperglobalDependencyEmitter { - return &ClassSuperglobalDependencyEmitter{} -} - -func (c ClassSuperglobalDependencyEmitter) GetName() string { - return "ClassSuperglobalDependencyEmitter" -} - -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { - for _, classReference := range astMap.GetClassLikeReferences() { - for _, dependency := range classReference.Dependencies { - if dependency.Context.DependencyType != DependencyType.DependencyTypeSuperGlobalVariable { - continue - } - dependencyList.AddDependency(Dependency.NewDependency(classReference.GetToken(), dependency.Token, dependency.Context)) - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.php deleted file mode 100644 index cafb134..0000000 --- a/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter/ClassSuperglobalDependencyEmitter.php +++ /dev/null @@ -1,27 +0,0 @@ -getClassLikeReferences() as $classReference) { - foreach ($classReference->dependencies as $dependency) { - if (DependencyType::SUPERGLOBAL_VARIABLE !== $dependency->context->dependencyType) { - continue; - } - $dependencyList->addDependency(new Dependency($classReference->getToken(), $dependency->token, $dependency->context)); - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.go b/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.go deleted file mode 100644 index 6efa1c7..0000000 --- a/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.go +++ /dev/null @@ -1,11 +0,0 @@ -package DependencyEmitterInterface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" -) - -type DependencyEmitterInterface interface { - GetName() string - ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) -} diff --git a/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.php b/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.php deleted file mode 100644 index 67cf594..0000000 --- a/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface/DependencyEmitterInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - - */ - private array $nodes = []; - public function isFQDN() : bool - { - return $this->FQDN; - } - /** - * @param string[] $keys - */ - public function getNestedNode(array $keys) : ?self - { - $index = $this; - foreach ($keys as $key) { - $node = $index->nodes[$key] ?? null; - if (null === $node) { - return null; - } - $index = $node; - } - return $index; - } - /** - * @param string[] $keys - */ - public function setNestedNode(array $keys) : void - { - if (0 === count($keys)) { - $this->FQDN = \true; - return; - } - $key = array_shift($keys); - $node = $this->nodes[$key] ?? null; - if (null === $node) { - $node = new self(); - $this->nodes[$key] = $node; - } - $node->setNestedNode($keys); - } -} diff --git a/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.go b/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.go deleted file mode 100644 index 57049ad..0000000 --- a/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.go +++ /dev/null @@ -1,34 +0,0 @@ -package FileDependencyEmitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" -) - -type FileDependencyEmitter struct{} - -func NewFileDependencyEmitter() *FileDependencyEmitter { - return &FileDependencyEmitter{} -} - -func (f FileDependencyEmitter) GetName() string { - return "FileDependencyEmitter" -} - -func (f FileDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { - for _, fileReference := range astMap.GetFileReferences() { - for _, dependency := range fileReference.Dependencies { - if dependency.Context.DependencyType == DependencyType.DependencyTypeUse { - continue - } - - if dependency.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { - continue - } - - dependencyList.AddDependency(Dependency.NewDependency(fileReference.GetToken(), dependency.Token, dependency.Context)) - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.php deleted file mode 100644 index a38b2c2..0000000 --- a/pkg/src/core/Dependency/Emitter/FileDependencyEmitter/FileDependencyEmitter.php +++ /dev/null @@ -1,30 +0,0 @@ -getFileReferences() as $fileReference) { - foreach ($fileReference->dependencies as $dependency) { - if (DependencyType::USE === $dependency->context->dependencyType) { - continue; - } - if (DependencyType::UNRESOLVED_FUNCTION_CALL === $dependency->context->dependencyType) { - continue; - } - $dependencyList->addDependency(new Dependency($fileReference->getToken(), $dependency->token, $dependency->context)); - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.php deleted file mode 100644 index ec801e9..0000000 --- a/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.php +++ /dev/null @@ -1,45 +0,0 @@ -createDependenciesForReferences($astMap->getClassLikeReferences(), $astMap, $dependencyList); - $this->createDependenciesForReferences($astMap->getFunctionReferences(), $astMap, $dependencyList); - $this->createDependenciesForReferences($astMap->getFileReferences(), $astMap, $dependencyList); - } - /** - * @param array $references - */ - private function createDependenciesForReferences(array $references, AstMap $astMap, DependencyList $dependencyList) : void - { - foreach ($references as $reference) { - foreach ($reference->dependencies as $dependency) { - if (DependencyType::UNRESOLVED_FUNCTION_CALL !== $dependency->context->dependencyType) { - continue; - } - $token = $dependency->token; - \assert($token instanceof FunctionToken); - if (null === $astMap->getFunctionReferenceForToken($token)) { - continue; - } - $dependencyList->addDependency(new Dependency($reference->getToken(), $dependency->token, $dependency->context)); - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.go b/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.go deleted file mode 100644 index 044aa8d..0000000 --- a/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.go +++ /dev/null @@ -1,36 +0,0 @@ -package FunctionDependencyEmitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" -) - -type FunctionDependencyEmitter struct{} - -func NewFunctionDependencyEmitter() *FunctionDependencyEmitter { - return &FunctionDependencyEmitter{} -} - -func (f FunctionDependencyEmitter) GetName() string { - return "FunctionDependencyEmitter" -} - -func (f FunctionDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { - for _, fileReference := range astMap.GetFileReferences() { - for _, astFunctionReference := range fileReference.FunctionReferences { - for _, dependency := range astFunctionReference.Dependencies { - if dependency.Context.DependencyType == DependencyType.DependencyTypeSuperGlobalVariable { - continue - } - - if dependency.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { - continue - } - - dependencyList.AddDependency(Dependency.NewDependency(astFunctionReference.GetToken(), dependency.Token, dependency.Context)) - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.php deleted file mode 100644 index 5499daa..0000000 --- a/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter/FunctionDependencyEmitter.php +++ /dev/null @@ -1,32 +0,0 @@ -getFileReferences() as $astFileReference) { - foreach ($astFileReference->functionReferences as $astFunctionReference) { - foreach ($astFunctionReference->dependencies as $dependency) { - if (DependencyType::SUPERGLOBAL_VARIABLE === $dependency->context->dependencyType) { - continue; - } - if (DependencyType::UNRESOLVED_FUNCTION_CALL === $dependency->context->dependencyType) { - continue; - } - $dependencyList->addDependency(new Dependency($astFunctionReference->getToken(), $dependency->token, $dependency->context)); - } - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.php deleted file mode 100644 index fe97683..0000000 --- a/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.php +++ /dev/null @@ -1,29 +0,0 @@ -getFileReferences() as $astFileReference) { - foreach ($astFileReference->functionReferences as $astFunctionReference) { - foreach ($astFunctionReference->dependencies as $dependency) { - if (DependencyType::SUPERGLOBAL_VARIABLE !== $dependency->context->dependencyType) { - continue; - } - $dependencyList->addDependency(new Dependency($astFunctionReference->getToken(), $dependency->token, $dependency->context)); - } - } - } - } -} diff --git a/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.php b/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.php deleted file mode 100644 index 47229e0..0000000 --- a/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.php +++ /dev/null @@ -1,49 +0,0 @@ -getClassLikeReferences(), $astMap->getFunctionReferences()); - $referencesFQDN = array_map(static fn($ref): string => $ref->getToken()->toString(), $references); - $FQDNIndex = new \Qossmic\Deptrac\Core\Dependency\Emitter\FQDNIndexNode(); - foreach ($referencesFQDN as $reference) { - $path = explode('\\', $reference); - $FQDNIndex->setNestedNode($path); - } - foreach ($astMap->getFileReferences() as $fileReference) { - foreach ($fileReference->classLikeReferences as $astClassReference) { - foreach ($fileReference->dependencies as $emittedDependency) { - if (DependencyType::USE === $emittedDependency->context->dependencyType && $this->isFQDN($emittedDependency, $FQDNIndex)) { - $dependencyList->addDependency(new Dependency($astClassReference->getToken(), $emittedDependency->token, $emittedDependency->context)); - } - } - } - } - } - private function isFQDN(DependencyToken $dependency, \Qossmic\Deptrac\Core\Dependency\Emitter\FQDNIndexNode $FQDNIndex) : bool - { - $dependencyFQDN = $dependency->token->toString(); - $path = explode('\\', $dependencyFQDN); - $value = $FQDNIndex->getNestedNode($path); - if (null === $value) { - return \true; - } - return $value->isFQDN(); - } -} diff --git a/pkg/src/core/Dependency/InheritDependency/InheritDependency.php b/pkg/src/core/Dependency/InheritDependency/InheritDependency.php deleted file mode 100644 index edf6c7f..0000000 --- a/pkg/src/core/Dependency/InheritDependency/InheritDependency.php +++ /dev/null @@ -1,38 +0,0 @@ -inheritPath->getPath() as $p) { - \array_unshift($buffer, ['name' => $p->classLikeName->toString(), 'line' => $p->fileOccurrence->line]); - } - $buffer[] = ['name' => $this->inheritPath->classLikeName->toString(), 'line' => $this->inheritPath->fileOccurrence->line]; - $buffer[] = ['name' => $this->originalDependency->getDependent()->toString(), 'line' => $this->originalDependency->getContext()->fileOccurrence->line]; - return $buffer; - } - public function getDepender() : ClassLikeToken - { - return $this->depender; - } - public function getDependent() : TokenInterface - { - return $this->dependent; - } - public function getContext() : DependencyContext - { - return $this->originalDependency->getContext(); - } -} diff --git a/pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.php b/pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.php deleted file mode 100644 index 5bb256d..0000000 --- a/pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.php +++ /dev/null @@ -1,20 +0,0 @@ -getClassLikeReferences() as $classReference) { - $classLikeName = $classReference->getToken(); - foreach ($astMap->getClassInherits($classLikeName) as $inherit) { - foreach ($dependencyList->getDependenciesByClass($inherit->classLikeName) as $dep) { - $dependencyList->addInheritDependency(new \Qossmic\Deptrac\Core\Dependency\InheritDependency($classLikeName, $dep->getDependent(), $dep, $inherit)); - } - } - } - } -} diff --git a/pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.php b/pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.php deleted file mode 100644 index c81c2db..0000000 --- a/pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.php +++ /dev/null @@ -1,20 +0,0 @@ - $astMap->getClassReferenceForToken($token) ?? new ClassLikeReference($token), - $token instanceof FunctionToken => $astMap->getFunctionReferenceForToken($token) ?? new FunctionReference($token), - $token instanceof SuperGlobalToken => new VariableReference($token), - $token instanceof FileToken => $astMap->getFileReferenceForToken($token) ?? new FileReference($token->path, [], [], []), - default => throw \Qossmic\Deptrac\Core\Dependency\UnrecognizedTokenException::cannotCreateReference($token), - }; - } -} diff --git a/pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.php b/pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.php deleted file mode 100644 index 28a02fa..0000000 --- a/pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.php +++ /dev/null @@ -1,15 +0,0 @@ -isDir() || !$basePathInfo->isReadable()) { - throw InvalidPathException::unreadablePath($basePathInfo); - } - $this->paths = []; - foreach ($paths as $originalPath) { - if (Path::isRelative($originalPath)) { - /** @throws void */ - $path = Path::makeAbsolute($originalPath, $basePathInfo->getPathname()); - } else { - $path = $originalPath; - } - $path = new SplFileInfo($path); - if (!$path->isReadable()) { - throw InvalidPathException::unreadablePath($path); - } - $this->paths[] = Path::canonicalize($path->getPathname()); - } - } - public function collect() : array - { - try { - if ([] === $this->paths) { - throw new LogicException("No 'paths' defined in the depfile."); - } - $finder = (new Finder())->in($this->paths)->name('*.php')->files()->followLinks()->ignoreUnreadableDirs()->ignoreVCS(\true)->notPath($this->excludedFilePatterns); - $customFilterIterator = $finder->getIterator(); - } catch (LogicException|DirectoryNotFoundException $exception) { - throw \Qossmic\Deptrac\Core\InputCollector\InputException::couldNotCollectFiles($exception); - } - $finder = new \Qossmic\Deptrac\Core\InputCollector\PathNameFilterIterator($customFilterIterator, [], $this->excludedFilePatterns); - return \array_values(\array_map(static fn(SplFileInfo $fileInfo) => (string) $fileInfo->getRealPath(), \iterator_to_array($finder))); - } -} diff --git a/pkg/src/core/InputCollector/FileInputCollector/PathNameFilterIterator.php b/pkg/src/core/InputCollector/FileInputCollector/PathNameFilterIterator.php deleted file mode 100644 index 17b0bee..0000000 --- a/pkg/src/core/InputCollector/FileInputCollector/PathNameFilterIterator.php +++ /dev/null @@ -1,30 +0,0 @@ -current(); - $filename = $this->isWindows() ? Path::normalize($fileInfo->getPathname()) : $fileInfo->getPathName(); - return $this->isAccepted($filename); - } - private function isWindows() : bool - { - return '\\' === DIRECTORY_SEPARATOR; - } -} diff --git a/pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.php b/pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.php deleted file mode 100644 index 3bf9ae2..0000000 --- a/pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - - * - * @throws InputException - */ - public function collect() : array; -} diff --git a/pkg/src/core/InputCollector/InputException/InputException.php b/pkg/src/core/InputCollector/InputException/InputException.php deleted file mode 100644 index 8712eb4..0000000 --- a/pkg/src/core/InputCollector/InputException/InputException.php +++ /dev/null @@ -1,15 +0,0 @@ -getType(); - $isSameType = $reference->type === $this->getType(); - return ($isClassLike || $isSameType) && $reference->getToken()->match($this->getValidatedPattern($config)); - } - protected function getPattern(array $config) : string - { - if (!isset($config['value']) || !is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration(\sprintf('Collector "%s" needs the regex configuration.', $this->getType()->toString())); - } - return '/' . $config['value'] . '/i'; - } -} diff --git a/pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.php b/pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.php deleted file mode 100644 index 268f1aa..0000000 --- a/pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.php +++ /dev/null @@ -1,55 +0,0 @@ -normalizeConfiguration($config); - /** @var array{type: string, args: array} $v */ - foreach ((array) $configuration['must'] as $v) { - $collectable = $this->collectorResolver->resolve($v); - $satisfied = $collectable->collector->satisfy($collectable->attributes, $reference); - if (!$satisfied) { - return \false; - } - } - /** @var array{type: string, args: array} $v */ - foreach ((array) $configuration['must_not'] as $v) { - $collectable = $this->collectorResolver->resolve($v); - $satisfied = $collectable->collector->satisfy($collectable->attributes, $reference); - if ($satisfied) { - return \false; - } - } - return \true; - } - /** - * @param array> $configuration - * - * @return array> - * - * @throws InvalidCollectorDefinitionException - */ - private function normalizeConfiguration(array $configuration) : array - { - if (!isset($configuration['must'])) { - $configuration['must'] = []; - } - if (!isset($configuration['must_not'])) { - $configuration['must_not'] = []; - } - if (!$configuration['must'] && !$configuration['must_not']) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('"bool" collector must have a "must" or a "must_not" attribute.'); - } - return $configuration; - } -} diff --git a/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.go b/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.go deleted file mode 100644 index 537e6f0..0000000 --- a/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.go +++ /dev/null @@ -1,20 +0,0 @@ -package ClassCollector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/AbstractTypeCollector" -) - -type ClassCollector struct { - *AbstractTypeCollector.AbstractTypeCollector -} - -func NewClassCollector() *ClassCollector { - return &ClassCollector{ - AbstractTypeCollector: AbstractTypeCollector.NewAbstractTypeCollector(), - } -} - -func (c *ClassCollector) GetType() AstMap.ClassLikeType { - return AstMap.TypeClass -} diff --git a/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.php b/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.php deleted file mode 100644 index 6a8244c..0000000 --- a/pkg/src/core/Layer/Collector/ClassCollector/ClassCollector.php +++ /dev/null @@ -1,13 +0,0 @@ -getToken()->match($this->getValidatedPattern($config)); - } - protected function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ClassNameRegexCollector needs the regex configuration.'); - } - return $config['value']; - } -} diff --git a/pkg/src/core/Layer/Collector/Collectable/Collectable.php b/pkg/src/core/Layer/Collector/Collectable/Collectable.php deleted file mode 100644 index 3bcfee0..0000000 --- a/pkg/src/core/Layer/Collector/Collectable/Collectable.php +++ /dev/null @@ -1,18 +0,0 @@ -> $attributes - */ - public function __construct(public readonly CollectorInterface $collector, public readonly array $attributes) - { - } -} diff --git a/pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.php b/pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.php deleted file mode 100644 index bc8930b..0000000 --- a/pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.php +++ /dev/null @@ -1,41 +0,0 @@ - $collectorLocator - */ - public function __construct(private readonly ServiceLocator $collectorLocator) - { - } - public function get(string $id) : CollectorInterface - { - $collector = $this->collectorLocator->get($id); - if (!$collector instanceof CollectorInterface) { - $exception = InvalidCollectorDefinitionException::unsupportedClass($id, $collector); - throw new \DEPTRAC_INTERNAL\Symfony\Component\DependencyInjection\Exception\RuntimeException($exception->getMessage(), 0, $exception); - } - return $collector; - } - public function has(string $id) : bool - { - return $this->collectorLocator->has($id); - } - /** - * @psalm-suppress MixedReturnTypeCoercion - * - * @return string[] - */ - public function getKnownCollectors() : array - { - return array_keys($this->collectorLocator->getProvidedServices()); - } -} diff --git a/pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.php b/pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.php deleted file mode 100644 index 6cdf15e..0000000 --- a/pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.php +++ /dev/null @@ -1,32 +0,0 @@ -> $config - * - * @throws InvalidCollectorDefinitionException - */ - public function resolve(array $config) : \Qossmic\Deptrac\Core\Layer\Collector\Collectable - { - if (!array_key_exists('type', $config) || !is_string($config['type'])) { - throw InvalidCollectorDefinitionException::missingType(); - } - try { - $collector = $this->collectorProvider->get($config['type']); - } catch (ContainerExceptionInterface $containerException) { - throw InvalidCollectorDefinitionException::unsupportedType($config['type'], $this->collectorProvider->getKnownCollectors(), $containerException); - } - return new \Qossmic\Deptrac\Core\Layer\Collector\Collectable($collector, $config); - } -} diff --git a/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.go b/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.go deleted file mode 100644 index 942c411..0000000 --- a/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.go +++ /dev/null @@ -1,9 +0,0 @@ -package CollectorResolverInterface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/Collectable" -) - -type CollectorResolverInterface interface { - Resolve(config map[string]interface{}) (*Collectable.Collectable, error) -} diff --git a/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.php b/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.php deleted file mode 100644 index d4fb20d..0000000 --- a/pkg/src/core/Layer/Collector/CollectorResolverInterface/CollectorResolverInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -> $config - */ - public function resolve(array $config) : \Qossmic\Deptrac\Core\Layer\Collector\Collectable; -} diff --git a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.php b/pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.php deleted file mode 100644 index f3cbfd8..0000000 --- a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.php +++ /dev/null @@ -1,47 +0,0 @@ - - */ - private array $parser = []; - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!isset($config['composerPath']) || !\is_string($config['composerPath'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ComposerCollector needs the path to the composer.json file as string.'); - } - if (!isset($config['composerLockPath']) || !\is_string($config['composerLockPath'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ComposerCollector needs the path to the composer.lock file as string.'); - } - if (!isset($config['packages']) || !\is_array($config['packages'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ComposerCollector needs the list of packages as string.'); - } - try { - $this->parser[$config['composerLockPath']] ??= new \Qossmic\Deptrac\Core\Layer\Collector\ComposerFilesParser($config['composerLockPath']); - $parser = $this->parser[$config['composerLockPath']]; - } catch (RuntimeException $exception) { - throw new CouldNotParseFileException('Could not parse composer files.', 0, $exception); - } - try { - $namespaces = $parser->autoloadableNamespacesForRequirements($config['packages'], \true); - } catch (RuntimeException $e) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration(\sprintf('ComposerCollector has a non-existent package defined. %s', $e->getMessage())); - } - $token = $reference->getToken()->toString(); - foreach ($namespaces as $namespace) { - if (\str_starts_with($token, $namespace)) { - return \true; - } - } - return \false; - } -} diff --git a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerFilesParser.php b/pkg/src/core/Layer/Collector/ComposerCollector/ComposerFilesParser.php deleted file mode 100644 index 7f6ebab..0000000 --- a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerFilesParser.php +++ /dev/null @@ -1,127 +0,0 @@ -, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }>, - * packages-dev?: array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }>, - * } - */ - private array $lockFile; - /** - * @var array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }> - */ - private array $lockedPackages; - /** - * @throws RuntimeException - */ - public function __construct(string $lockFile) - { - $contents = \file_get_contents($lockFile); - if (\false === $contents) { - throw new RuntimeException('Could not load composer.lock file'); - } - try { - /** - * @var array{ - * packages?: array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }>, - * packages-dev?: array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }>, - * } $jsonDecode - */ - $jsonDecode = \json_decode($contents, \true, 512, \JSON_THROW_ON_ERROR); - $this->lockFile = $jsonDecode; - } catch (JsonException $exception) { - throw new RuntimeException('Could not parse composer.lock file', 0, $exception); - } - $this->lockedPackages = $this->getPackagesFromLockFile(); - } - /** - * Resolves an array of package names to an array of namespaces declared by those packages. - * - * @param string[] $requirements - * - * @return string[] - * - * @throws RuntimeException - */ - public function autoloadableNamespacesForRequirements(array $requirements, bool $includeDev) : array - { - $namespaces = [[]]; - foreach ($requirements as $package) { - if (!\array_key_exists($package, $this->lockedPackages)) { - throw new RuntimeException(\sprintf('Could not find a "%s" package', $package)); - } - $namespaces[] = $this->extractNamespaces($this->lockedPackages[$package], $includeDev); - } - return \array_merge(...$namespaces); - } - /** - * @return array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * }> - */ - private function getPackagesFromLockFile() : array - { - $lockedPackages = []; - foreach ($this->lockFile['packages'] ?? [] as $package) { - $lockedPackages[$package['name']] = $package; - } - foreach ($this->lockFile['packages-dev'] ?? [] as $package) { - $lockedPackages[$package['name']] = $package; - } - return $lockedPackages; - } - /** - * @param array{ - * autoload?: array{'psr-0'?: array, 'psr-4'?: array}, - * autoload-dev?: array{'psr-0'?: array, 'psr-4'?: array}, - * } $package - * - * @return string[] - */ - private function extractNamespaces(array $package, bool $includeDev) : array - { - $namespaces = []; - foreach (\array_keys($package['autoload']['psr-0'] ?? []) as $namespace) { - $namespaces[] = $namespace; - } - foreach (\array_keys($package['autoload']['psr-4'] ?? []) as $namespace) { - $namespaces[] = $namespace; - } - if ($includeDev) { - foreach (\array_keys($package['autoload-dev']['psr-0'] ?? []) as $namespace) { - $namespaces[] = $namespace; - } - foreach (\array_keys($package['autoload-dev']['psr-4'] ?? []) as $namespace) { - $namespaces[] = $namespace; - } - } - return $namespaces; - } -} diff --git a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.php b/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.php deleted file mode 100644 index c9f26dc..0000000 --- a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.php +++ /dev/null @@ -1,28 +0,0 @@ -getFilepath(); - if (null === $filepath) { - return \false; - } - $validatedPattern = $this->getValidatedPattern($config); - $normalizedPath = Path::normalize($filepath); - return 1 === \preg_match($validatedPattern, $normalizedPath); - } - protected function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('DirectoryCollector needs the regex configuration.'); - } - return '#' . $config['value'] . '#i'; - } -} diff --git a/pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.php b/pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.php deleted file mode 100644 index 226f62a..0000000 --- a/pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.php +++ /dev/null @@ -1,34 +0,0 @@ -getToken(); - return $tokenName->match($this->getPattern($config)); - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('FunctionNameCollector needs the regex configuration.'); - } - return '/' . $config['value'] . '/i'; - } -} diff --git a/pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.php b/pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.php deleted file mode 100644 index e042d78..0000000 --- a/pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.php +++ /dev/null @@ -1,36 +0,0 @@ -basePath = Path::normalize($basePath); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - $filepath = $reference->getFilepath(); - if (null === $filepath) { - return \false; - } - $validatedPattern = $this->getValidatedPattern($config); - $normalizedPath = Path::normalize($filepath); - /** @throws void */ - $relativeFilePath = Path::makeRelative($normalizedPath, $this->basePath); - return 1 === \preg_match($validatedPattern, $relativeFilePath); - } - protected function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('GlobCollector needs the glob pattern configuration.'); - } - return Glob::toRegex($config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.php b/pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.php deleted file mode 100644 index d595815..0000000 --- a/pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.php +++ /dev/null @@ -1,40 +0,0 @@ -astMap = $this->astMapExtractor->extract(); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof ClassLikeReference) { - return \false; - } - $classInherits = $this->astMap->getClassInherits($reference->getToken()); - if (!isset($config['value']) || !\is_numeric($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('InheritanceLevelCollector needs inheritance depth as int.'); - } - $depth = (int) $config['value']; - foreach ($classInherits as $classInherit) { - if (\count($classInherit->getPath()) >= $depth) { - return \true; - } - } - return \false; - } -} diff --git a/pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.php b/pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.php deleted file mode 100644 index 4c26416..0000000 --- a/pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.php +++ /dev/null @@ -1,49 +0,0 @@ -astMap = $this->astMapExtractor->extract(); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof ClassLikeReference) { - return \false; - } - $classLikeName = $this->getClassLikeName($config); - foreach ($this->astMap->getClassInherits($reference->getToken()) as $inherit) { - if ($inherit->classLikeName->equals($classLikeName)) { - return \true; - } - } - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getClassLikeName(array $config) : ClassLikeToken - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('InheritsCollector needs the interface, trait or class name as a string.'); - } - return ClassLikeToken::fromFQCN($config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.go b/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.go deleted file mode 100644 index f0e8eac..0000000 --- a/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.go +++ /dev/null @@ -1,20 +0,0 @@ -package InterfaceCollector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/AbstractTypeCollector" -) - -type InterfaceCollector struct { - *AbstractTypeCollector.AbstractTypeCollector -} - -func NewInterfaceCollector() *InterfaceCollector { - return &InterfaceCollector{ - AbstractTypeCollector: AbstractTypeCollector.NewAbstractTypeCollector(), - } -} - -func (c *InterfaceCollector) GetType() AstMap.ClassLikeType { - return AstMap.TypeInterface -} diff --git a/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.php b/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.php deleted file mode 100644 index 8033774..0000000 --- a/pkg/src/core/Layer/Collector/InterfaceCollector/InterfaceCollector.php +++ /dev/null @@ -1,13 +0,0 @@ -> - */ - private array $resolved = []; - public function __construct(private readonly LayerResolverInterface $resolver) - { - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!isset($config['value']) || !is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('LayerCollector needs the layer configuration, expected \'value\' config is missing or invalid.'); - } - $layer = $config['value']; - if (!$this->resolver->has($layer)) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration(sprintf('Unknown layer "%s" specified in collector.', $config['value'])); - } - $token = $reference->getToken()->toString(); - if (array_key_exists($token, $this->resolved) && array_key_exists($layer, $this->resolved[$token])) { - if (null === $this->resolved[$token][$layer]) { - throw InvalidLayerDefinitionException::circularTokenReference($token); - } - return $this->resolved[$token][$layer]; - } - // Set resolved for current token to null in case resolver comes back to it (circular reference) - $this->resolved[$token][$layer] = null; - return $this->resolved[$token][$layer] = $this->resolver->isReferenceInLayer($config['value'], $reference); - } -} diff --git a/pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.php b/pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.php deleted file mode 100644 index 393ef78..0000000 --- a/pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.php +++ /dev/null @@ -1,39 +0,0 @@ -getValidatedPattern($config); - $classLike = $this->astParser->getNodeForClassLikeReference($reference); - if (null === $classLike) { - return \false; - } - foreach ($classLike->getMethods() as $classMethod) { - if (1 === \preg_match($pattern, (string) $classMethod->name)) { - return \true; - } - } - return \false; - } - protected function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('MethodCollector needs the name configuration.'); - } - return '/' . $config['value'] . '/i'; - } -} diff --git a/pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.php b/pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.php deleted file mode 100644 index e5aa68c..0000000 --- a/pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.php +++ /dev/null @@ -1,29 +0,0 @@ -> $config - * - * @throws InvalidCollectorDefinitionException - */ - protected abstract function getPattern(array $config) : string; - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - protected function getValidatedPattern(array $config) : string - { - $pattern = $this->getPattern($config); - if (\false !== @\preg_match($pattern, '')) { - return $pattern; - } - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('Invalid regex pattern ' . $pattern); - } -} diff --git a/pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.php b/pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.php deleted file mode 100644 index c4655ec..0000000 --- a/pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.php +++ /dev/null @@ -1,33 +0,0 @@ -getToken()->toString(), $this->getNames($config), \true); - } - /** - * @param array> $config - * - * @return string[] - * - * @throws InvalidCollectorDefinitionException - */ - private function getNames(array $config) : array - { - if (!isset($config['value']) || !\is_array($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('SuperglobalCollector needs the names configuration.'); - } - return \array_map(static fn($name): string => '$' . $name, $config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.go b/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.go deleted file mode 100644 index cf65685..0000000 --- a/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.go +++ /dev/null @@ -1,20 +0,0 @@ -package TraitCollector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/AbstractTypeCollector" -) - -type TraitCollector struct { - *AbstractTypeCollector.AbstractTypeCollector -} - -func NewTraitCollector() *TraitCollector { - return &TraitCollector{ - AbstractTypeCollector: AbstractTypeCollector.NewAbstractTypeCollector(), - } -} - -func (c *TraitCollector) GetType() AstMap.ClassLikeType { - return AstMap.TypeTrait -} diff --git a/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.php b/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.php deleted file mode 100644 index da4d075..0000000 --- a/pkg/src/core/Layer/Collector/TraitCollector/TraitCollector.php +++ /dev/null @@ -1,13 +0,0 @@ -astMap = $this->astMapExtractor->extract(); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof ClassLikeReference) { - return \false; - } - $traitName = $this->getTraitName($config); - foreach ($this->astMap->getClassInherits($reference->getToken()) as $inherit) { - if (AstInheritType::USES === $inherit->type && $inherit->classLikeName->equals($traitName)) { - return \true; - } - } - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getTraitName(array $config) : ClassLikeToken - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('UsesCollector needs the trait name as a string.'); - } - return ClassLikeToken::fromFQCN($config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/_/AttributeCollector.php b/pkg/src/core/Layer/Collector/_/AttributeCollector.php deleted file mode 100644 index a6357b7..0000000 --- a/pkg/src/core/Layer/Collector/_/AttributeCollector.php +++ /dev/null @@ -1,45 +0,0 @@ -getSearchedSubstring($config); - foreach ($reference->dependencies as $dependency) { - if (DependencyType::ATTRIBUTE !== $dependency->context->dependencyType) { - continue; - } - $usedAttribute = $dependency->token->toString(); - if (str_contains($usedAttribute, $match)) { - return \true; - } - } - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getSearchedSubstring(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('AttributeCollector needs the attribute name as a string.'); - } - return $config['value']; - } -} diff --git a/pkg/src/core/Layer/Collector/_/ExtendsCollector.php b/pkg/src/core/Layer/Collector/_/ExtendsCollector.php deleted file mode 100644 index 6929a9a..0000000 --- a/pkg/src/core/Layer/Collector/_/ExtendsCollector.php +++ /dev/null @@ -1,50 +0,0 @@ -astMap = $astMapExtractor->extract(); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof ClassLikeReference) { - return \false; - } - $interfaceName = $this->getInterfaceName($config); - foreach ($this->astMap->getClassInherits($reference->getToken()) as $inherit) { - if (AstInheritType::EXTENDS === $inherit->type && $inherit->classLikeName->equals($interfaceName)) { - return \true; - } - } - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getInterfaceName(array $config) : ClassLikeToken - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ExtendsCollector needs the interface or class name as a string.'); - } - return ClassLikeToken::fromFQCN($config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/_/ImplementsCollector.php b/pkg/src/core/Layer/Collector/_/ImplementsCollector.php deleted file mode 100644 index 52811d0..0000000 --- a/pkg/src/core/Layer/Collector/_/ImplementsCollector.php +++ /dev/null @@ -1,50 +0,0 @@ -astMap = $this->astMapExtractor->extract(); - } - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof ClassLikeReference) { - return \false; - } - $interfaceName = $this->getInterfaceName($config); - foreach ($this->astMap->getClassInherits($reference->getToken()) as $inherit) { - if (AstInheritType::IMPLEMENTS === $inherit->type && $inherit->classLikeName->equals($interfaceName)) { - return \true; - } - } - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getInterfaceName(array $config) : ClassLikeToken - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('ImplementsCollector needs the interface name as a string.'); - } - return ClassLikeToken::fromFQCN($config['value']); - } -} diff --git a/pkg/src/core/Layer/Collector/_/PhpInternalCollector.php b/pkg/src/core/Layer/Collector/_/PhpInternalCollector.php deleted file mode 100644 index 3f3659a..0000000 --- a/pkg/src/core/Layer/Collector/_/PhpInternalCollector.php +++ /dev/null @@ -1,46 +0,0 @@ -getToken(); - return $token->match($this->getPattern($config)) && \array_key_exists($token->toString(), PhpStormStubsMap::CLASSES); - } - if ($reference instanceof FunctionReference) { - $token = $reference->getToken(); - \assert($token instanceof FunctionToken); - return $token->match($this->getPattern($config)) && \array_key_exists($token->functionName, PhpStormStubsMap::FUNCTIONS); - } - // future-proof catch all - return \false; - } - /** - * @param array> $config - * - * @throws InvalidCollectorDefinitionException - */ - private function getPattern(array $config) : string - { - if (!isset($config['value']) || !\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('PhpInternalCollector needs configuration.'); - } - return '/' . $config['value'] . '/i'; - } -} diff --git a/pkg/src/core/Layer/Collector/_/TagValueRegexCollector.php b/pkg/src/core/Layer/Collector/_/TagValueRegexCollector.php deleted file mode 100644 index 8811d45..0000000 --- a/pkg/src/core/Layer/Collector/_/TagValueRegexCollector.php +++ /dev/null @@ -1,57 +0,0 @@ -> $config - */ - public function satisfy(array $config, TokenReferenceInterface $reference) : bool - { - if (!$reference instanceof TaggedTokenReferenceInterface) { - return \false; - } - $tagLines = $reference->getTagLines($this->getTagName($config)); - $pattern = $this->getValidatedPattern($config); - if (null === $tagLines || [] === $tagLines) { - return \false; - } - foreach ($tagLines as $line) { - if (\preg_match($pattern, $line)) { - return \true; - } - } - return \false; - } - /** - * @param array|null> $config - * - * @throws InvalidCollectorDefinitionException - */ - protected function getTagName(array $config) : string - { - if (!isset($config['tag']) || !\is_string($config['tag'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('TagValueRegexCollector needs the tag name.'); - } - if (!\preg_match('/^@[-\\w]+$/', $config['tag'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('TagValueRegexCollector needs a valid tag name.'); - } - return $config['tag']; - } - protected function getPattern(array $config) : string - { - if (!isset($config['value'])) { - return '/^.?/'; - // any string - } - if (!\is_string($config['value'])) { - throw InvalidCollectorDefinitionException::invalidCollectorConfiguration('TagValueRegexCollector regex value must be a string.'); - } - return $config['value']; - } -} diff --git a/pkg/src/core/Layer/LayerResolver/LayerResolver.php b/pkg/src/core/Layer/LayerResolver/LayerResolver.php deleted file mode 100644 index 8ce55e8..0000000 --- a/pkg/src/core/Layer/LayerResolver/LayerResolver.php +++ /dev/null @@ -1,109 +0,0 @@ - - */ - private array $layers = []; - private bool $initialized = \false; - /** - * @var array> - */ - private array $resolved = []; - /** - * @param array>>}> $layersConfig - */ - public function __construct(private readonly CollectorResolverInterface $collectorResolver, private readonly array $layersConfig) - { - } - public function getLayersForReference(TokenReferenceInterface $reference) : array - { - if (\false === $this->initialized) { - $this->initializeLayers(); - } - $tokenName = $reference->getToken()->toString(); - if (array_key_exists($tokenName, $this->resolved)) { - return $this->resolved[$tokenName]; - } - $this->resolved[$tokenName] = []; - foreach ($this->layers as $layer => $collectables) { - foreach ($collectables as $collectable) { - $attributes = $collectable->attributes; - if ($collectable->collector->satisfy($attributes, $reference)) { - if (array_key_exists($layer, $this->resolved[$tokenName]) && $this->resolved[$tokenName][$layer]) { - continue; - } - if (array_key_exists('private', $attributes) && \true === $attributes['private']) { - $this->resolved[$tokenName][$layer] = \false; - } else { - $this->resolved[$tokenName][$layer] = \true; - } - } - } - } - return $this->resolved[$tokenName]; - } - public function isReferenceInLayer(string $layer, TokenReferenceInterface $reference) : bool - { - if (\false === $this->initialized) { - $this->initializeLayers(); - } - $tokenName = $reference->getToken()->toString(); - if (array_key_exists($tokenName, $this->resolved) && [] !== $this->resolved[$tokenName]) { - return array_key_exists($layer, $this->resolved[$tokenName]); - } - if (!array_key_exists($layer, $this->layers)) { - return \false; - } - $collectables = $this->layers[$layer]; - foreach ($collectables as $collectable) { - if ($collectable->collector->satisfy($collectable->attributes, $reference)) { - return \true; - } - } - return \false; - } - public function has(string $layer) : bool - { - if (\false === $this->initialized) { - $this->initializeLayers(); - } - return array_key_exists($layer, $this->layers); - } - /** - * @throws InvalidLayerDefinitionException - */ - private function initializeLayers() : void - { - $this->layers = []; - foreach ($this->layersConfig as $layer) { - if (!array_key_exists('name', $layer)) { - throw InvalidLayerDefinitionException::missingName(); - } - $layerName = $layer['name']; - if (array_key_exists($layerName, $this->layers)) { - throw InvalidLayerDefinitionException::duplicateName($layerName); - } - $this->layers[$layerName] = []; - foreach ($layer['collectors'] ?? [] as $config) { - $this->layers[$layerName][] = $this->collectorResolver->resolve($config); - } - if ([] === $this->layers[$layerName]) { - throw InvalidLayerDefinitionException::collectorRequired($layerName); - } - } - if ([] === $this->layers) { - throw InvalidLayerDefinitionException::layerRequired(); - } - $this->initialized = \true; - } -} diff --git a/pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.php b/pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.php deleted file mode 100644 index 469c02f..0000000 --- a/pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - layer name and whether the dependency is public(true) or private(false) - * - * @throws InvalidLayerDefinitionException - * @throws InvalidCollectorDefinitionException - * @throws CouldNotParseFileException - */ - public function getLayersForReference(TokenReferenceInterface $reference) : array; - /** - * @throws InvalidLayerDefinitionException - * @throws InvalidCollectorDefinitionException - * @throws CouldNotParseFileException - */ - public function isReferenceInLayer(string $layer, TokenReferenceInterface $reference) : bool; - /** - * @throws InvalidLayerDefinitionException - */ - public function has(string $layer) : bool; -} diff --git a/pkg/src/core/Analyser/AnalyserException/AnalyserException.go b/pkg/src/core/analyser/analyser_exception.go similarity index 73% rename from pkg/src/core/Analyser/AnalyserException/AnalyserException.go rename to pkg/src/core/analyser/analyser_exception.go index 6266a4a..575f210 100644 --- a/pkg/src/core/Analyser/AnalyserException/AnalyserException.go +++ b/pkg/src/core/analyser/analyser_exception.go @@ -1,4 +1,4 @@ -package AnalyserException +package analyser import ( "fmt" @@ -6,9 +6,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CircularReferenceException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidLayerDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InvalidEmitterConfigurationException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/UnrecognizedTokenException" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" ) type AnalyserException struct { @@ -24,11 +23,11 @@ func (a *AnalyserException) Error() string { } } -func NewInvalidEmitterConfiguration(e *InvalidEmitterConfigurationException.InvalidEmitterConfigurationException) *AnalyserException { +func NewInvalidEmitterConfiguration(e *dependency.InvalidEmitterConfigurationException) *AnalyserException { return &AnalyserException{Message: "Invalid emitter configuration.", Previous: e} } -func NewUnrecognizedToken(e *UnrecognizedTokenException.UnrecognizedTokenException) *AnalyserException { +func NewUnrecognizedToken(e *dependency.UnrecognizedTokenException) *AnalyserException { return &AnalyserException{Message: "Unrecognized token.", Previous: e} } @@ -40,7 +39,7 @@ func NewInvalidCollectorDefinition(e *InvalidCollectorDefinitionException.Invali return &AnalyserException{Message: "Invalid collector definition.", Previous: e} } -func NewFailedAstParsing(e *AstException.AstException) *AnalyserException { +func NewFailedAstParsing(e *ast.AstException) *AnalyserException { return &AnalyserException{Message: "Failed Ast parsing.", Previous: e} } diff --git a/pkg/src/core/Analyser/DependencyLayersAnalyser/DependencyLayersAnalyser.go b/pkg/src/core/analyser/dependency_layers_analyser.go similarity index 67% rename from pkg/src/core/Analyser/DependencyLayersAnalyser/DependencyLayersAnalyser.go rename to pkg/src/core/analyser/dependency_layers_analyser.go index b0c3e1f..4e8654b 100644 --- a/pkg/src/core/Analyser/DependencyLayersAnalyser/DependencyLayersAnalyser.go +++ b/pkg/src/core/analyser/dependency_layers_analyser.go @@ -1,32 +1,32 @@ -package DependencyLayersAnalyser +package analyser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/AnalysisResult" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/PostProcessEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Warning" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" ) type DependencyLayersAnalyser struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - dependencyResolver *DependencyResolver.DependencyResolver - tokenResolver *TokenResolver.TokenResolver - layerResolver LayerResolverInterface.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + dependencyResolver *dependency_resolver.DependencyResolver + tokenResolver *dependency.TokenResolver + layerResolver layer_resolver_interface.LayerResolverInterface eventDispatcher util.EventDispatcherInterface } func NewDependencyLayersAnalyser( - astMapExtractor *AstMapExtractor.AstMapExtractor, - dependencyResolver *DependencyResolver.DependencyResolver, - tokenResolver *TokenResolver.TokenResolver, - layerResolver LayerResolverInterface.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + dependencyResolver *dependency_resolver.DependencyResolver, + tokenResolver *dependency.TokenResolver, + layerResolver layer_resolver_interface.LayerResolverInterface, eventDispatcher util.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ astMapExtractor: astMapExtractor, @@ -37,7 +37,7 @@ func NewDependencyLayersAnalyser( } } -func (a *DependencyLayersAnalyser) Analyse() (*AnalysisResult.AnalysisResult, error) { +func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -46,15 +46,15 @@ func (a *DependencyLayersAnalyser) Analyse() (*AnalysisResult.AnalysisResult, er if err != nil { return nil, err } - result := AnalysisResult.NewAnalysisResult() + result := analysis_result.NewAnalysisResult() warnings := make(map[string]*Warning.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) - if v, ok55 := dependerRef.(*AstMap.FunctionReference); ok55 { + if v, ok55 := dependerRef.(*ast_map.FunctionReference); ok55 { t := v.GetToken() - if tt, ok66 := t.(*AstMap.FunctionToken); ok66 { + if tt, ok66 := t.(*ast_map.FunctionToken); ok66 { if tt.FunctionName == "ParseFile" { fmt.Println() } @@ -84,7 +84,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*AnalysisResult.AnalysisResult, er } for _, dependerLayer := range dependerLayers { - event := ProcessEvent.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, result) + event := process_event.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, result) err := a.eventDispatcher.DispatchEvent(event) if err != nil { return nil, err @@ -97,7 +97,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*AnalysisResult.AnalysisResult, er result.AddWarning(warning) } - event := PostProcessEvent.NewPostProcessEvent(result) + event := post_process_event.NewPostProcessEvent(result) errDispatch := a.eventDispatcher.DispatchEvent(event) if errDispatch != nil { return nil, errDispatch diff --git a/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.go b/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go similarity index 61% rename from pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.go rename to pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go index 9c6265e..415aad2 100644 --- a/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations/UnmatchedSkippedViolations.go +++ b/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go @@ -1,22 +1,22 @@ -package UnmatchedSkippedViolations +package post_process_event import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/PostProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" ) type UnmatchedSkippedViolations struct { - eventHelper *EventHelper.EventHelper + eventHelper *event_helper.EventHelper } -func NewUnmatchedSkippedViolations(eventHelper *EventHelper.EventHelper) *UnmatchedSkippedViolations { +func NewUnmatchedSkippedViolations(eventHelper *event_helper.EventHelper) *UnmatchedSkippedViolations { return &UnmatchedSkippedViolations{eventHelper: eventHelper} } func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*PostProcessEvent.PostProcessEvent) + event := rawEvent.(*post_process_event.PostProcessEvent) ruleset := event.GetResult() for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.go b/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go similarity index 77% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.go rename to pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go index bf40d60..4c62abc 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler/AllowDependencyHandler.go +++ b/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go @@ -1,8 +1,8 @@ -package AllowDependencyHandler +package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Allowed" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" ) type AllowDependencyHandler struct{} @@ -12,7 +12,7 @@ func NewAllowDependencyHandler() *AllowDependencyHandler { } func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.go b/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go similarity index 74% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.go rename to pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go index 96d36aa..39e961d 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer/DependsOnDisallowedLayer.go +++ b/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go @@ -1,22 +1,22 @@ -package DependsOnDisallowedLayer +package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" "github.com/KoNekoD/go-deptrac/pkg/util" ) type DependsOnDisallowedLayer struct { - eventHelper *EventHelper.EventHelper + eventHelper *event_helper.EventHelper } -func NewDependsOnDisallowedLayer(eventHelper *EventHelper.EventHelper) *DependsOnDisallowedLayer { +func NewDependsOnDisallowedLayer(eventHelper *event_helper.EventHelper) *DependsOnDisallowedLayer { return &DependsOnDisallowedLayer{eventHelper: eventHelper} } func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.go b/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go similarity index 66% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.go rename to pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go index 02c407b..b52dc0a 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken/DependsOnInternalToken.go +++ b/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go @@ -1,28 +1,28 @@ -package DependsOnInternalToken +package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type DependsOnInternalToken struct { - eventHelper *EventHelper.EventHelper + eventHelper *event_helper.EventHelper internalTag *string } -func NewDependsOnInternalToken(eventHelper *EventHelper.EventHelper, analyser *AnalyserConfig.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *AnalyserConfig.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } func (d *DependsOnInternalToken) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { if event.DependerLayer != dependentLayer { - if ref, ok := event.DependentReference.(*AstMap.ClassLikeReference); ok { + if ref, ok := event.DependentReference.(*ast_map.ClassLikeReference); ok { isInternal := ref.HasTag("@deptrac-internal") if !isInternal && nil != d.internalTag { isInternal = ref.HasTag(*d.internalTag) diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.go b/pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go similarity index 68% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.go rename to pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go index 550d9e8..6e3ac5d 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer/DependsOnPrivateLayer.go +++ b/pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go @@ -1,20 +1,20 @@ -package DependsOnPrivateLayer +package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" ) type DependsOnPrivateLayer struct { - eventHelper *EventHelper.EventHelper + eventHelper *event_helper.EventHelper } -func NewDependsOnPrivateLayer(eventHelper *EventHelper.EventHelper) *DependsOnPrivateLayer { +func NewDependsOnPrivateLayer(eventHelper *event_helper.EventHelper) *DependsOnPrivateLayer { return &DependsOnPrivateLayer{eventHelper: eventHelper} } func (d *DependsOnPrivateLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) ruleset := event.GetResult() for dependentLayer, isPublic := range event.DependentLayers { if event.DependerLayer == dependentLayer && !isPublic { diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.go b/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go similarity index 74% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.go rename to pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go index e523d91..0911485 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler/MatchingLayersHandler.go +++ b/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go @@ -1,6 +1,6 @@ -package MatchingLayersHandler +package process_event -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" +import "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" type MatchingLayersHandler struct{} @@ -9,7 +9,7 @@ func NewMatchingLayersHandler() *MatchingLayersHandler { } func (m *MatchingLayersHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) for dependeeLayer := range event.DependentLayers { if event.DependerLayer != dependeeLayer { return nil diff --git a/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.go b/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go similarity index 77% rename from pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.go rename to pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go index beba1df..16f1d2b 100644 --- a/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler/UncoveredDependentHandler.go +++ b/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ -package UncoveredDependentHandler +package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type UncoveredDependentHandler struct { @@ -15,7 +15,7 @@ func NewUncoveredDependentHandler(ignoreUncoveredInternalClasses bool) *Uncovere } func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*ProcessEvent.ProcessEvent) + event := rawEvent.(*process_event.ProcessEvent) dependent := event.Dependency.GetDependent() @@ -25,7 +25,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, return nil } - if dependentClassLike, ok := dependent.(*AstMap.ClassLikeToken); ok { + if dependentClassLike, ok := dependent.(*ast_map.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { ruleset.AddRule(Uncovered.NewUncovered(event.Dependency, event.DependerLayer)) } @@ -36,7 +36,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, return nil } -func (h *UncoveredDependentHandler) isIgnoreUncoveredInternalClasses(token *AstMap.ClassLikeToken) bool { +func (h *UncoveredDependentHandler) isIgnoreUncoveredInternalClasses(token *ast_map.ClassLikeToken) bool { if !h.ignoreUncoveredInternalClasses { return false } diff --git a/pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.go b/pkg/src/core/analyser/layer_dependencies_analyser.go similarity index 76% rename from pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.go rename to pkg/src/core/analyser/layer_dependencies_analyser.go index e6c880b..b9d1905 100644 --- a/pkg/src/core/Analyser/LayerDependenciesAnalyser/LayerDependenciesAnalyser.go +++ b/pkg/src/core/analyser/layer_dependencies_analyser.go @@ -1,25 +1,25 @@ -package LayerDependenciesAnalyser +package analyser import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" ) type LayerDependenciesAnalyser struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - tokenResolver *TokenResolver.TokenResolver - dependencyResolver *DependencyResolver.DependencyResolver - layerResolver LayerResolverInterface.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + tokenResolver *dependency.TokenResolver + dependencyResolver *dependency_resolver.DependencyResolver + layerResolver layer_resolver_interface.LayerResolverInterface } func NewLayerDependenciesAnalyser( - astMapExtractor *AstMapExtractor.AstMapExtractor, - tokenResolver *TokenResolver.TokenResolver, - dependencyResolver *DependencyResolver.DependencyResolver, - layerResolver LayerResolverInterface.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + tokenResolver *dependency.TokenResolver, + dependencyResolver *dependency_resolver.DependencyResolver, + layerResolver layer_resolver_interface.LayerResolverInterface, ) *LayerDependenciesAnalyser { return &LayerDependenciesAnalyser{ astMapExtractor: astMapExtractor, diff --git a/pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.go b/pkg/src/core/analyser/layer_for_token_analyser.go similarity index 70% rename from pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.go rename to pkg/src/core/analyser/layer_for_token_analyser.go index 399752b..85520ac 100644 --- a/pkg/src/core/Analyser/LayerForTokenAnalyser/LayerForTokenAnalyser.go +++ b/pkg/src/core/analyser/layer_for_token_analyser.go @@ -1,27 +1,26 @@ -package LayerForTokenAnalyser +package analyser import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/TokenType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "github.com/pkg/errors" "golang.org/x/exp/maps" "strings" ) type LayerForTokenAnalyser struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - tokenResolver *TokenResolver.TokenResolver - layerResolver LayerResolverInterface.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + tokenResolver *dependency.TokenResolver + layerResolver layer_resolver_interface.LayerResolverInterface } func NewLayerForTokenAnalyser( - astMapExtractor *AstMapExtractor.AstMapExtractor, - tokenResolver *TokenResolver.TokenResolver, - layerResolver LayerResolverInterface.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + tokenResolver *dependency.TokenResolver, + layerResolver layer_resolver_interface.LayerResolverInterface, ) *LayerForTokenAnalyser { return &LayerForTokenAnalyser{ astMapExtractor: astMapExtractor, @@ -30,7 +29,7 @@ func NewLayerForTokenAnalyser( } } -func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType TokenType.TokenType) (map[string][]string, error) { +func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType TokenType) (map[string][]string, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -50,18 +49,18 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType To // } switch tokenType { - case TokenType.TokenTypeClassLike: + case TokenTypeClassLike: return a.findLayersForReferences(astMap.GetClassLikeReferences(), tokenName, astMap) - case TokenType.TokenTypeFunction: + case TokenTypeFunction: return a.findLayersForReferences(astMap.GetFunctionReferences(), tokenName, astMap) - case TokenType.TokenTypeFile: + case TokenTypeFile: return a.findLayersForReferences(astMap.GetFileReferences(), tokenName, astMap) default: return nil, errors.New("Invalid token type") } } -func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *AstMap.AstMap) (map[string][]string, error) { +func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map.AstMap) (map[string][]string, error) { references := referencesAny.([]TokenReferenceInterface.TokenReferenceInterface) if len(references) == 0 { return make(map[string][]string), nil diff --git a/pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.go b/pkg/src/core/analyser/ruleset_usage_analyser.go similarity index 76% rename from pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.go rename to pkg/src/core/analyser/ruleset_usage_analyser.go index 734fbdd..c95e870 100644 --- a/pkg/src/core/Analyser/RulesetUsageAnalyser/RulesetUsageAnalyser.go +++ b/pkg/src/core/analyser/ruleset_usage_analyser.go @@ -1,29 +1,29 @@ -package RulesetUsageAnalyser +package analyser import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Layer" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" + Layer2 "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" ) type RulesetUsageAnalyser struct { layerProvider *LayerProvider.LayerProvider - layerResolver LayerResolverInterface.LayerResolverInterface - astMapExtractor *AstMapExtractor.AstMapExtractor - dependencyResolver *DependencyResolver.DependencyResolver - tokenResolver *TokenResolver.TokenResolver + layerResolver Layer2.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + dependencyResolver *dependency_resolver.DependencyResolver + tokenResolver *dependency.TokenResolver layers []*Layer.Layer } func NewRulesetUsageAnalyser( layerProvider *LayerProvider.LayerProvider, - layerResolver LayerResolverInterface.LayerResolverInterface, - astMapExtractor *AstMapExtractor.AstMapExtractor, - dependencyResolver *DependencyResolver.DependencyResolver, - tokenResolver *TokenResolver.TokenResolver, + layerResolver Layer2.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + dependencyResolver *dependency_resolver.DependencyResolver, + tokenResolver *dependency.TokenResolver, layers []*Layer.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ diff --git a/pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.go b/pkg/src/core/analyser/token_in_layer_analyser.go similarity index 61% rename from pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.go rename to pkg/src/core/analyser/token_in_layer_analyser.go index 7bec5d3..8f45220 100644 --- a/pkg/src/core/Analyser/TokenInLayerAnalyser/TokenInLayerAnalyser.go +++ b/pkg/src/core/analyser/token_in_layer_analyser.go @@ -1,30 +1,29 @@ -package TokenInLayerAnalyser +package analyser import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/TokenType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "slices" ) type TokenInLayerAnalyser struct { - tokenTypes []TokenType.TokenType + tokenTypes []TokenType config *AnalyserConfig.AnalyserConfig - astMapExtractor *AstMapExtractor.AstMapExtractor - tokenResolver *TokenResolver.TokenResolver - layerResolver LayerResolverInterface.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + tokenResolver *dependency.TokenResolver + layerResolver layer_resolver_interface.LayerResolverInterface } func NewTokenInLayerAnalyser( - astMapExtractor *AstMapExtractor.AstMapExtractor, - tokenResolver *TokenResolver.TokenResolver, - layerResolver LayerResolverInterface.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + tokenResolver *dependency.TokenResolver, + layerResolver layer_resolver_interface.LayerResolverInterface, config *AnalyserConfig.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ - tokenTypes: make([]TokenType.TokenType, 0), + tokenTypes: make([]TokenType, 0), astMapExtractor: astMapExtractor, tokenResolver: tokenResolver, layerResolver: layerResolver, @@ -32,7 +31,7 @@ func NewTokenInLayerAnalyser( } for _, configType := range config.Types { - newTokenType := TokenType.NewTokenTypeTryFromEmitterType(configType) + newTokenType := NewTokenTypeTryFromEmitterType(configType) if newTokenType == nil { continue } @@ -43,14 +42,14 @@ func NewTokenInLayerAnalyser( return analyser } -func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]TokenType.TokenType, error) { +func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]TokenType, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err } - matchingTokens := make(map[string]TokenType.TokenType) + matchingTokens := make(map[string]TokenType) - if slices.Contains(a.tokenTypes, TokenType.TokenTypeClassLike) { + if slices.Contains(a.tokenTypes, TokenTypeClassLike) { for _, classReference := range astMap.GetClassLikeReferences() { classToken := a.tokenResolver.Resolve(classReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(classToken) @@ -58,12 +57,12 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[classToken.GetToken().ToString()] = TokenType.TokenTypeClassLike + matchingTokens[classToken.GetToken().ToString()] = TokenTypeClassLike } } } - if slices.Contains(a.tokenTypes, TokenType.TokenTypeFunction) { + if slices.Contains(a.tokenTypes, TokenTypeFunction) { for _, functionReference := range astMap.GetFunctionReferences() { functionToken := a.tokenResolver.Resolve(functionReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(functionToken) @@ -71,12 +70,12 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[functionToken.GetToken().ToString()] = TokenType.TokenTypeFunction + matchingTokens[functionToken.GetToken().ToString()] = TokenTypeFunction } } } - if slices.Contains(a.tokenTypes, TokenType.TokenTypeFile) { + if slices.Contains(a.tokenTypes, TokenTypeFile) { for _, fileReference := range astMap.GetFileReferences() { fileToken := a.tokenResolver.Resolve(fileReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(fileToken) @@ -84,7 +83,7 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[fileToken.GetToken().ToString()] = TokenType.TokenTypeFile + matchingTokens[fileToken.GetToken().ToString()] = TokenTypeFile } } } diff --git a/pkg/src/core/Analyser/TokenType/TokenType.go b/pkg/src/core/analyser/token_type.go similarity index 97% rename from pkg/src/core/Analyser/TokenType/TokenType.go rename to pkg/src/core/analyser/token_type.go index b225f64..8a25bd0 100644 --- a/pkg/src/core/Analyser/TokenType/TokenType.go +++ b/pkg/src/core/analyser/token_type.go @@ -1,4 +1,4 @@ -package TokenType +package analyser import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" diff --git a/pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.go b/pkg/src/core/analyser/unassigned_token_analyser.go similarity index 68% rename from pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.go rename to pkg/src/core/analyser/unassigned_token_analyser.go index c292810..0224275 100644 --- a/pkg/src/core/Analyser/UnassignedTokenAnalyser/UnassignedTokenAnalyser.go +++ b/pkg/src/core/analyser/unassigned_token_analyser.go @@ -1,30 +1,29 @@ -package UnassignedTokenAnalyser +package analyser import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/TokenType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "slices" ) type UnassignedTokenAnalyser struct { - tokenTypes []TokenType.TokenType + tokenTypes []TokenType config *AnalyserConfig.AnalyserConfig - astMapExtractor *AstMapExtractor.AstMapExtractor - tokenResolver *TokenResolver.TokenResolver - layerResolver LayerResolverInterface.LayerResolverInterface + astMapExtractor *ast.AstMapExtractor + tokenResolver *dependency.TokenResolver + layerResolver layer_resolver_interface.LayerResolverInterface } func NewUnassignedTokenAnalyser( - astMapExtractor *AstMapExtractor.AstMapExtractor, - tokenResolver *TokenResolver.TokenResolver, - layerResolver LayerResolverInterface.LayerResolverInterface, + astMapExtractor *ast.AstMapExtractor, + tokenResolver *dependency.TokenResolver, + layerResolver layer_resolver_interface.LayerResolverInterface, config *AnalyserConfig.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ - tokenTypes: make([]TokenType.TokenType, 0), + tokenTypes: make([]TokenType, 0), astMapExtractor: astMapExtractor, tokenResolver: tokenResolver, layerResolver: layerResolver, @@ -32,7 +31,7 @@ func NewUnassignedTokenAnalyser( } for _, configType := range config.Types { - newTokenType := TokenType.NewTokenTypeTryFromEmitterType(configType) + newTokenType := NewTokenTypeTryFromEmitterType(configType) if newTokenType == nil { continue } @@ -50,7 +49,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } unassignedTokens := make([]string, 0) - if slices.Contains(a.tokenTypes, TokenType.TokenTypeClassLike) { + if slices.Contains(a.tokenTypes, TokenTypeClassLike) { for _, classReference := range astMap.GetClassLikeReferences() { classToken := a.tokenResolver.Resolve(classReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(classToken) @@ -64,7 +63,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } } - if slices.Contains(a.tokenTypes, TokenType.TokenTypeFunction) { + if slices.Contains(a.tokenTypes, TokenTypeFunction) { for _, functionReference := range astMap.GetFunctionReferences() { functionToken := a.tokenResolver.Resolve(functionReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(functionToken) @@ -78,7 +77,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } } - if slices.Contains(a.tokenTypes, TokenType.TokenTypeFile) { + if slices.Contains(a.tokenTypes, TokenTypeFile) { for _, fileReference := range astMap.GetFileReferences() { fileToken := a.tokenResolver.Resolve(fileReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(fileToken) diff --git a/pkg/src/core/Ast/AstException/AstException.go b/pkg/src/core/ast/ast_exception.go similarity index 63% rename from pkg/src/core/Ast/AstException/AstException.go rename to pkg/src/core/ast/ast_exception.go index ebe025c..f28ba56 100644 --- a/pkg/src/core/Ast/AstException/AstException.go +++ b/pkg/src/core/ast/ast_exception.go @@ -1,8 +1,8 @@ -package AstException +package ast import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/InputException" + "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" ) type AstException struct { @@ -18,6 +18,6 @@ func (a *AstException) Error() string { } } -func NewCouldNotCollectFiles(exception *InputException.InputException) *AstException { +func NewCouldNotCollectFiles(exception *input_collector.InputException) *AstException { return &AstException{Message: "Could not create AstMap.", Previous: exception} } diff --git a/pkg/src/core/Ast/AstLoader/AstLoader.go b/pkg/src/core/ast/ast_loader.go similarity index 75% rename from pkg/src/core/Ast/AstLoader/AstLoader.go rename to pkg/src/core/ast/ast_loader.go index bb5e8b9..81e28b2 100644 --- a/pkg/src/core/Ast/AstLoader/AstLoader.go +++ b/pkg/src/core/ast/ast_loader.go @@ -1,29 +1,29 @@ -package AstLoader +package ast import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileAnalysedEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileSyntaxErrorEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/ParserInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" ) type AstLoader struct { - parser ParserInterface.ParserInterface + parser parser.ParserInterface eventDispatcher util.EventDispatcherInterface } -func NewAstLoader(parser ParserInterface.ParserInterface, eventDispatcher util.EventDispatcherInterface) *AstLoader { +func NewAstLoader(parser parser.ParserInterface, eventDispatcher util.EventDispatcherInterface) *AstLoader { return &AstLoader{ parser: parser, eventDispatcher: eventDispatcher, } } -func (l *AstLoader) CreateAstMap(files []string) (*AstMap.AstMap, error) { - references := make([]*AstMap.FileReference, 0) +func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { + references := make([]*ast_map.FileReference, 0) err := l.eventDispatcher.DispatchEvent(PreCreateAstMapEvent.NewPreCreateAstMapEvent(len(files))) if err != nil { @@ -50,7 +50,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*AstMap.AstMap, error) { } } - astMap := AstMap.NewAstMap(references) + astMap := ast_map.NewAstMap(references) errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(PostCreateAstMapEvent.NewPostCreateAstMapEvent()) if errDispatchPostCreateMap != nil { diff --git a/pkg/src/core/Ast/AstMap/AstInherit.go b/pkg/src/core/ast/ast_map/ast_inherit.go similarity index 98% rename from pkg/src/core/Ast/AstMap/AstInherit.go rename to pkg/src/core/ast/ast_map/ast_inherit.go index 59baf7c..79c889f 100644 --- a/pkg/src/core/Ast/AstMap/AstInherit.go +++ b/pkg/src/core/ast/ast_map/ast_inherit.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "fmt" diff --git a/pkg/src/core/Ast/AstMap/AstInheritType.go b/pkg/src/core/ast/ast_map/ast_inherit_type.go similarity index 92% rename from pkg/src/core/Ast/AstMap/AstInheritType.go rename to pkg/src/core/ast/ast_map/ast_inherit_type.go index 9c63e82..f68b0d3 100644 --- a/pkg/src/core/Ast/AstMap/AstInheritType.go +++ b/pkg/src/core/ast/ast_map/ast_inherit_type.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map type AstInheritType string diff --git a/pkg/src/core/Ast/AstMap/AstMap.go b/pkg/src/core/ast/ast_map/ast_map.go similarity index 99% rename from pkg/src/core/Ast/AstMap/AstMap.go rename to pkg/src/core/ast/ast_map/ast_map.go index 73d0c82..09276d8 100644 --- a/pkg/src/core/Ast/AstMap/AstMap.go +++ b/pkg/src/core/ast/ast_map/ast_map.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import "strings" diff --git a/pkg/src/core/Ast/AstMap/ClassLikeReference.go b/pkg/src/core/ast/ast_map/class_like_reference.go similarity index 98% rename from pkg/src/core/Ast/AstMap/ClassLikeReference.go rename to pkg/src/core/ast/ast_map/class_like_reference.go index 556d4ae..48cad08 100644 --- a/pkg/src/core/Ast/AstMap/ClassLikeReference.go +++ b/pkg/src/core/ast/ast_map/class_like_reference.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" diff --git a/pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.go b/pkg/src/core/ast/ast_map/class_like_reference_builder.go similarity index 99% rename from pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.go rename to pkg/src/core/ast/ast_map/class_like_reference_builder.go index 291a227..0a7ce1d 100644 --- a/pkg/src/core/Ast/AstMap/ClassLikeReferenceBuilder.go +++ b/pkg/src/core/ast/ast_map/class_like_reference_builder.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/FileOccurrence" diff --git a/pkg/src/core/Ast/AstMap/ClassLikeToken.go b/pkg/src/core/ast/ast_map/class_like_token.go similarity index 97% rename from pkg/src/core/Ast/AstMap/ClassLikeToken.go rename to pkg/src/core/ast/ast_map/class_like_token.go index 0468fbd..5c6d3ab 100644 --- a/pkg/src/core/Ast/AstMap/ClassLikeToken.go +++ b/pkg/src/core/ast/ast_map/class_like_token.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "regexp" diff --git a/pkg/src/core/Ast/AstMap/ClassLikeType.go b/pkg/src/core/ast/ast_map/class_like_type.go similarity index 94% rename from pkg/src/core/Ast/AstMap/ClassLikeType.go rename to pkg/src/core/ast/ast_map/class_like_type.go index 6a31274..92ed25e 100644 --- a/pkg/src/core/Ast/AstMap/ClassLikeType.go +++ b/pkg/src/core/ast/ast_map/class_like_type.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map type ClassLikeType string diff --git a/pkg/src/core/Ast/AstMap/DependencyToken.go b/pkg/src/core/ast/ast_map/dependency_token.go similarity index 96% rename from pkg/src/core/Ast/AstMap/DependencyToken.go rename to pkg/src/core/ast/ast_map/dependency_token.go index d52dea5..37c25e4 100644 --- a/pkg/src/core/Ast/AstMap/DependencyToken.go +++ b/pkg/src/core/ast/ast_map/dependency_token.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyContext" diff --git a/pkg/src/core/Ast/AstMap/FileReference.go b/pkg/src/core/ast/ast_map/file_reference.go similarity index 98% rename from pkg/src/core/Ast/AstMap/FileReference.go rename to pkg/src/core/ast/ast_map/file_reference.go index b4d122d..0e10b50 100644 --- a/pkg/src/core/Ast/AstMap/FileReference.go +++ b/pkg/src/core/ast/ast_map/file_reference.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" diff --git a/pkg/src/core/Ast/AstMap/FileReferenceBuilder.go b/pkg/src/core/ast/ast_map/file_reference_builder.go similarity index 99% rename from pkg/src/core/Ast/AstMap/FileReferenceBuilder.go rename to pkg/src/core/ast/ast_map/file_reference_builder.go index 9c04ff2..a811ef9 100644 --- a/pkg/src/core/Ast/AstMap/FileReferenceBuilder.go +++ b/pkg/src/core/ast/ast_map/file_reference_builder.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" diff --git a/pkg/src/core/Ast/AstMap/FileToken.go b/pkg/src/core/ast/ast_map/file_token.go similarity index 96% rename from pkg/src/core/Ast/AstMap/FileToken.go rename to pkg/src/core/ast/ast_map/file_token.go index 8f7a8b1..e6d9a3b 100644 --- a/pkg/src/core/Ast/AstMap/FileToken.go +++ b/pkg/src/core/ast/ast_map/file_token.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/util" diff --git a/pkg/src/core/Ast/AstMap/FunctionReference.go b/pkg/src/core/ast/ast_map/function_reference.go similarity index 98% rename from pkg/src/core/Ast/AstMap/FunctionReference.go rename to pkg/src/core/ast/ast_map/function_reference.go index 217a31b..ce339cf 100644 --- a/pkg/src/core/Ast/AstMap/FunctionReference.go +++ b/pkg/src/core/ast/ast_map/function_reference.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" diff --git a/pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.go b/pkg/src/core/ast/ast_map/function_reference_builder.go similarity index 98% rename from pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.go rename to pkg/src/core/ast/ast_map/function_reference_builder.go index 3a10146..25dd695 100644 --- a/pkg/src/core/Ast/AstMap/FunctionReferenceBuilder.go +++ b/pkg/src/core/ast/ast_map/function_reference_builder.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map type FunctionReferenceBuilder struct { *ReferenceBuilder diff --git a/pkg/src/core/Ast/AstMap/FunctionToken.go b/pkg/src/core/ast/ast_map/function_token.go similarity index 98% rename from pkg/src/core/Ast/AstMap/FunctionToken.go rename to pkg/src/core/ast/ast_map/function_token.go index 46d255b..c45b191 100644 --- a/pkg/src/core/Ast/AstMap/FunctionToken.go +++ b/pkg/src/core/ast/ast_map/function_token.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "regexp" diff --git a/pkg/src/core/Ast/AstMap/ReferenceBuilder.go b/pkg/src/core/ast/ast_map/reference_builder.go similarity index 99% rename from pkg/src/core/Ast/AstMap/ReferenceBuilder.go rename to pkg/src/core/ast/ast_map/reference_builder.go index db5ff42..e6c8b0e 100644 --- a/pkg/src/core/Ast/AstMap/ReferenceBuilder.go +++ b/pkg/src/core/ast/ast_map/reference_builder.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyContext" diff --git a/pkg/src/core/Ast/AstMap/SuperGlobalToken.go b/pkg/src/core/ast/ast_map/super_global_token.go similarity index 98% rename from pkg/src/core/Ast/AstMap/SuperGlobalToken.go rename to pkg/src/core/ast/ast_map/super_global_token.go index dda70a2..fbe6fe6 100644 --- a/pkg/src/core/Ast/AstMap/SuperGlobalToken.go +++ b/pkg/src/core/ast/ast_map/super_global_token.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map type SuperGlobalToken string diff --git a/pkg/src/core/Ast/AstMap/TaggedTokenReference.go b/pkg/src/core/ast/ast_map/tagged_token_reference.go similarity index 97% rename from pkg/src/core/Ast/AstMap/TaggedTokenReference.go rename to pkg/src/core/ast/ast_map/tagged_token_reference.go index 09884ac..812f1ef 100644 --- a/pkg/src/core/Ast/AstMap/TaggedTokenReference.go +++ b/pkg/src/core/ast/ast_map/tagged_token_reference.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map // TaggedTokenReference - Helper trait for implementing TaggedTokenReferenceInterface. type TaggedTokenReference struct { diff --git a/pkg/src/core/Ast/AstMap/VariableReference.go b/pkg/src/core/ast/ast_map/variable_reference.go similarity index 96% rename from pkg/src/core/Ast/AstMap/VariableReference.go rename to pkg/src/core/ast/ast_map/variable_reference.go index 32938e2..a49f4c6 100644 --- a/pkg/src/core/Ast/AstMap/VariableReference.go +++ b/pkg/src/core/ast/ast_map/variable_reference.go @@ -1,4 +1,4 @@ -package AstMap +package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" diff --git a/pkg/src/core/ast/ast_map_extractor.go b/pkg/src/core/ast/ast_map_extractor.go new file mode 100644 index 0000000..9f7827d --- /dev/null +++ b/pkg/src/core/ast/ast_map_extractor.go @@ -0,0 +1,39 @@ +package ast + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" +) + +type AstMapExtractor struct { + inputCollector input_collector.InputCollectorInterface + astLoader *AstLoader + astMapCache *ast_map.AstMap +} + +func NewAstMapExtractor(inputCollector input_collector.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { + return &AstMapExtractor{ + inputCollector: inputCollector, + astLoader: astLoader, + astMapCache: nil, + } +} + +func (e *AstMapExtractor) Extract() (*ast_map.AstMap, error) { + if e.astMapCache == nil { + collected, err := e.inputCollector.Collect() + + if err != nil { + return nil, err + } + + createdAstMap, errCreateAstMap := e.astLoader.CreateAstMap(collected) + if errCreateAstMap != nil { + return nil, errCreateAstMap + } + + e.astMapCache = createdAstMap + } + + return e.astMapCache, nil +} diff --git a/pkg/src/core/ast/ast_map_extractor_test.go b/pkg/src/core/ast/ast_map_extractor_test.go new file mode 100644 index 0000000..f808aa4 --- /dev/null +++ b/pkg/src/core/ast/ast_map_extractor_test.go @@ -0,0 +1,59 @@ +package ast + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "os" + "testing" +) + +func TestAstMapExtractorExtractWorkedFine(t *testing.T) { + paths := []string{ + "analyser", + "ast", + "config", + "dumper", + "layer", + "output_formatter", + "result", + "util", + } + var excluded = make([]string, 0) + + wd, err := os.Getwd() + + if err != nil { + t.Error(err) + } + + basePath := wd + "/pkg/" + + fileInputCollector, err := input_collector.NewFileInputCollector(paths, excluded, basePath) + + if err != nil { + t.Error(err) + } + + astLoader := NewAstLoader( + nikic_php_parser.NewNikicPhpParser( + cache.NewAstFileReferenceInMemoryCache(), + parser.NewTypeResolver(), + []extractors.ReferenceExtractorInterface{}, + ), + nil, + ) + + e := NewAstMapExtractor(fileInputCollector, astLoader) + + extract, err := e.Extract() + if err != nil { + t.Error(err) + } + + if extract == nil { + t.Error("extract is nil") + } +} diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go b/pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go new file mode 100644 index 0000000..e8089ea --- /dev/null +++ b/pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go @@ -0,0 +1,10 @@ +package cache + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type AstFileReferenceCacheInterface interface { + Get(filepath string) (*ast_map.FileReference, error) + Set(fileReference *ast_map.FileReference) error +} diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go b/pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go new file mode 100644 index 0000000..5cb6d88 --- /dev/null +++ b/pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go @@ -0,0 +1,7 @@ +package cache + +type AstFileReferenceDeferredCacheInterface interface { + AstFileReferenceCacheInterface + Load() error + Write() error +} diff --git a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache/AstFileReferenceFileCache.go b/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go similarity index 86% rename from pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache/AstFileReferenceFileCache.go rename to pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go index 54ee0bd..635ad8e 100644 --- a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache/AstFileReferenceFileCache.go +++ b/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go @@ -1,8 +1,8 @@ -package AstFileReferenceFileCache +package cache import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/FileReader" "github.com/KoNekoD/go-deptrac/pkg/util" "os" @@ -12,7 +12,7 @@ import ( type AstFileReferenceFileCache struct { cache map[string]struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference } loaded bool parsedFiles map[string]bool @@ -24,7 +24,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil return &AstFileReferenceFileCache{ cache: make(map[string]struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference }), loaded: false, parsedFiles: make(map[string]bool), @@ -33,7 +33,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil } } -func (c *AstFileReferenceFileCache) Get(filepath string) (*AstMap.FileReference, error) { +func (c *AstFileReferenceFileCache) Get(filepath string) (*ast_map.FileReference, error) { err := c.Load() if err != nil { return nil, err @@ -54,7 +54,7 @@ func (c *AstFileReferenceFileCache) Get(filepath string) (*AstMap.FileReference, return nil, nil } -func (c *AstFileReferenceFileCache) Set(fileReference *AstMap.FileReference) error { +func (c *AstFileReferenceFileCache) Set(fileReference *ast_map.FileReference) error { err := c.Load() if err != nil { return err @@ -69,7 +69,7 @@ func (c *AstFileReferenceFileCache) Set(fileReference *AstMap.FileReference) err c.cache[normalizedFilepath] = struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference }{hash: hash, reference: fileReference} return nil @@ -90,7 +90,7 @@ func (c *AstFileReferenceFileCache) Load() error { version string payload map[string]struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference } }{} err = json.Unmarshal([]byte(contents), &cache) @@ -101,7 +101,7 @@ func (c *AstFileReferenceFileCache) Load() error { for filepathData, data := range cache.payload { c.cache[filepathData] = struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference }{hash: data.hash, reference: data.reference} } return nil @@ -113,7 +113,7 @@ func (c *AstFileReferenceFileCache) Write() error { } cache := make(map[string]struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference }) for filepathData, data := range c.cache { if _, ok := c.parsedFiles[filepathData]; ok { @@ -125,7 +125,7 @@ func (c *AstFileReferenceFileCache) Write() error { version string payload map[string]struct { hash string - reference *AstMap.FileReference + reference *ast_map.FileReference } }{ version: c.cacheVersion, diff --git a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.go b/pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go similarity index 64% rename from pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.go rename to pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go index fda626d..1db0bab 100644 --- a/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache/AstFileReferenceInMemoryCache.go +++ b/pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go @@ -1,21 +1,21 @@ -package AstFileReferenceInMemoryCache +package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "path/filepath" ) type AstFileReferenceInMemoryCache struct { - cache map[string]*AstMap.FileReference + cache map[string]*ast_map.FileReference } func NewAstFileReferenceInMemoryCache() *AstFileReferenceInMemoryCache { return &AstFileReferenceInMemoryCache{ - cache: make(map[string]*AstMap.FileReference), + cache: make(map[string]*ast_map.FileReference), } } -func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*AstMap.FileReference, error) { +func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*ast_map.FileReference, error) { path, err := filepath.Abs(pathInput) if err != nil { return nil, err @@ -29,7 +29,7 @@ func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*AstMap.FileRefer return v, nil } -func (c *AstFileReferenceInMemoryCache) Set(fileReference *AstMap.FileReference) error { +func (c *AstFileReferenceInMemoryCache) Set(fileReference *ast_map.FileReference) error { path, err := filepath.Abs(*fileReference.Filepath) if err != nil { return err diff --git a/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.go b/pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go similarity index 69% rename from pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.go rename to pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go index 97040d6..9a27d6e 100644 --- a/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber/CacheableFileSubscriber.go +++ b/pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go @@ -1,16 +1,15 @@ -package CacheableFileSubscriber +package cache import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceDeferredCacheInterface" ) type CacheableFileSubscriber struct { - deferredCache AstFileReferenceDeferredCacheInterface.AstFileReferenceDeferredCacheInterface + deferredCache AstFileReferenceDeferredCacheInterface } -func NewCacheableFileSubscriber(deferredCache AstFileReferenceDeferredCacheInterface.AstFileReferenceDeferredCacheInterface) *CacheableFileSubscriber { +func NewCacheableFileSubscriber(deferredCache AstFileReferenceDeferredCacheInterface) *CacheableFileSubscriber { return &CacheableFileSubscriber{ deferredCache: deferredCache, } diff --git a/pkg/src/core/Ast/Parser/Extractors/AnnotationReferenceExtractor.php b/pkg/src/core/ast/parser/extractors/AnnotationReferenceExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/AnnotationReferenceExtractor.php rename to pkg/src/core/ast/parser/extractors/AnnotationReferenceExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/AnonymousClassExtractor.php b/pkg/src/core/ast/parser/extractors/AnonymousClassExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/AnonymousClassExtractor.php rename to pkg/src/core/ast/parser/extractors/AnonymousClassExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/ClassConstantExtractor.php b/pkg/src/core/ast/parser/extractors/ClassConstantExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/ClassConstantExtractor.php rename to pkg/src/core/ast/parser/extractors/ClassConstantExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/FunctionCallResolver.php b/pkg/src/core/ast/parser/extractors/FunctionCallResolver.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/FunctionCallResolver.php rename to pkg/src/core/ast/parser/extractors/FunctionCallResolver.php diff --git a/pkg/src/core/Ast/Parser/Extractors/FunctionLikeExtractor.php b/pkg/src/core/ast/parser/extractors/FunctionLikeExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/FunctionLikeExtractor.php rename to pkg/src/core/ast/parser/extractors/FunctionLikeExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/KeywordExtractor.php b/pkg/src/core/ast/parser/extractors/KeywordExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/KeywordExtractor.php rename to pkg/src/core/ast/parser/extractors/KeywordExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/PropertyExtractor.php b/pkg/src/core/ast/parser/extractors/PropertyExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/PropertyExtractor.php rename to pkg/src/core/ast/parser/extractors/PropertyExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/StaticExtractor.php b/pkg/src/core/ast/parser/extractors/StaticExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/StaticExtractor.php rename to pkg/src/core/ast/parser/extractors/StaticExtractor.php diff --git a/pkg/src/core/Ast/Parser/Extractors/VariableExtractor.php b/pkg/src/core/ast/parser/extractors/VariableExtractor.php similarity index 100% rename from pkg/src/core/Ast/Parser/Extractors/VariableExtractor.php rename to pkg/src/core/ast/parser/extractors/VariableExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/reference_extractor_interface.go b/pkg/src/core/ast/parser/extractors/reference_extractor_interface.go new file mode 100644 index 0000000..ae64bd9 --- /dev/null +++ b/pkg/src/core/ast/parser/extractors/reference_extractor_interface.go @@ -0,0 +1,11 @@ +package extractors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "go/ast" +) + +type ReferenceExtractorInterface interface { + ProcessNode(node ast.Node, referenceBuilder ast_map.ReferenceBuilderInterface, typeScope *parser.TypeScope) +} diff --git a/pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor.go b/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go similarity index 82% rename from pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor.go rename to pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go index 3633149..c835f71 100644 --- a/pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor.go +++ b/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go @@ -1,32 +1,31 @@ -package FileReferenceVisitor +package nikic_php_parser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeScope" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" "github.com/KoNekoD/go-deptrac/pkg/util" "go/ast" "go/token" ) type FileReferenceVisitor struct { - dependencyResolvers []ReferenceExtractorInterface.ReferenceExtractorInterface - currentTypeScope *TypeScope.TypeScope - currentReference AstMap.ReferenceBuilderInterface - fileReferenceBuilder *AstMap.FileReferenceBuilder - typeResolver *TypeResolver.TypeResolver + dependencyResolvers []extractors.ReferenceExtractorInterface + currentTypeScope *parser.TypeScope + currentReference ast_map.ReferenceBuilderInterface + fileReferenceBuilder *ast_map.FileReferenceBuilder + typeResolver *parser.TypeResolver nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *AstMap.FileReferenceBuilder, resolver *TypeResolver.TypeResolver, extractors ...ReferenceExtractorInterface.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *ast_map.FileReferenceBuilder, resolver *parser.TypeResolver, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, typeResolver: resolver, dependencyResolvers: extractors, - currentTypeScope: TypeScope.NewTypeScope(""), + currentTypeScope: parser.NewTypeScope(""), } } @@ -63,7 +62,7 @@ func (f *FileReferenceVisitor) Visit(node ast.Node) (w ast.Visitor) { func (f *FileReferenceVisitor) enterNode(node ast.Node) { switch typedNode := node.(type) { case *ast.File: - f.currentTypeScope = TypeScope.NewTypeScope(typedNode.Name.Name).SetFileNode(typedNode) + f.currentTypeScope = parser.NewTypeScope(typedNode.Name.Name).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: diff --git a/pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor_test.go b/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go similarity index 75% rename from pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor_test.go rename to pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go index 30783c5..6d21041 100644 --- a/pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor/FileReferenceVisitor_test.go +++ b/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go @@ -1,7 +1,7 @@ -package FileReferenceVisitor +package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" @@ -19,7 +19,7 @@ func TestFileReferenceVisitorOk(t *testing.T) { } fileReferenceVisitor := NewFileReferenceVisitor( - AstMap.CreateFileReferenceBuilder(file), + ast_map.CreateFileReferenceBuilder(file), nil, nil, ) diff --git a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go b/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go similarity index 60% rename from pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go rename to pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go index 31d4246..351ed79 100644 --- a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go +++ b/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go @@ -1,11 +1,10 @@ -package NikicPhpParser +package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/NikicPhpParser/FileReferenceVisitor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeResolver" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + astParser "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" "go/ast" "go/parser" "go/token" @@ -19,7 +18,7 @@ type parsedFilesBag struct { parsedFiles map[string]*parsedFile } -func (p *parsedFilesBag) Add(fileReference *AstMap.FileReference, rootNode *ast.File) { +func (p *parsedFilesBag) Add(fileReference *ast_map.FileReference, rootNode *ast.File) { filepath := fileReference.GetFilepath() file := &parsedFile{fileReference: fileReference, rootNode: rootNode} p.parsedFiles[*filepath] = file @@ -30,7 +29,7 @@ func (p *parsedFilesBag) Get(filepath string) *parsedFile { } type parsedFile struct { - fileReference *AstMap.FileReference + fileReference *ast_map.FileReference rootNode *ast.File debt []interface{} } @@ -47,12 +46,12 @@ func (p *parsedFile) GetOwnType(name string) *ast.Ident { type NikicPhpParser struct { classAstMap map[string]*ast.Ident - cache AstFileReferenceCacheInterface.AstFileReferenceCacheInterface - typeResolver *TypeResolver.TypeResolver - extractors []ReferenceExtractorInterface.ReferenceExtractorInterface + cache cache.AstFileReferenceCacheInterface + typeResolver *astParser.TypeResolver + extractors []extractors.ReferenceExtractorInterface } -func NewNikicPhpParser(cache AstFileReferenceCacheInterface.AstFileReferenceCacheInterface, typeResolver *TypeResolver.TypeResolver, extractors []ReferenceExtractorInterface.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver *astParser.TypeResolver, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, @@ -61,7 +60,7 @@ func NewNikicPhpParser(cache AstFileReferenceCacheInterface.AstFileReferenceCach } } -func (p *NikicPhpParser) ParseFile(file string) (*AstMap.FileReference, error) { +func (p *NikicPhpParser) ParseFile(file string) (*ast_map.FileReference, error) { v, err := p.cache.Get(file) if err != nil { return nil, err @@ -70,8 +69,8 @@ func (p *NikicPhpParser) ParseFile(file string) (*AstMap.FileReference, error) { return v, nil } - fileReferenceBuilder := AstMap.CreateFileReferenceBuilder(file) - visitor := FileReferenceVisitor.NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.extractors...) + fileReferenceBuilder := ast_map.CreateFileReferenceBuilder(file) + visitor := NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.extractors...) rootNode := p.loadNodesFromFile(file) ast.Walk(visitor, rootNode) @@ -87,7 +86,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*AstMap.FileReference, error) { return fileReference, nil } -func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *AstMap.ClassLikeReference) *ast.Ident { +func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *ast_map.ClassLikeReference) *ast.Ident { classLikeName := classReference.GetToken().ToString() if v, ok := classAstMap[classLikeName]; ok { return v diff --git a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser_test.go b/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go similarity index 92% rename from pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser_test.go rename to pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go index 9ae709f..b902ed0 100644 --- a/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser_test.go +++ b/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go @@ -1,4 +1,4 @@ -package NikicPhpParser +package nikic_php_parser import ( "go/parser" diff --git a/pkg/src/core/ast/parser/parser_interface.go b/pkg/src/core/ast/parser/parser_interface.go new file mode 100644 index 0000000..c8fe727 --- /dev/null +++ b/pkg/src/core/ast/parser/parser_interface.go @@ -0,0 +1,9 @@ +package parser + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type ParserInterface interface { + ParseFile(file string) (*ast_map.FileReference, error) +} diff --git a/pkg/src/core/Ast/Parser/TypeResolver/TypeResolver.go b/pkg/src/core/ast/parser/type_resolver.go similarity index 68% rename from pkg/src/core/Ast/Parser/TypeResolver/TypeResolver.go rename to pkg/src/core/ast/parser/type_resolver.go index 1904877..1dddf22 100644 --- a/pkg/src/core/Ast/Parser/TypeResolver/TypeResolver.go +++ b/pkg/src/core/ast/parser/type_resolver.go @@ -1,7 +1,6 @@ -package TypeResolver +package parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeScope" "go/ast" ) @@ -12,7 +11,7 @@ func NewTypeResolver() *TypeResolver { return &TypeResolver{} } -func (r *TypeResolver) ResolvePHPParserTypes(typeScope *TypeScope.TypeScope, nodes ...ast.Expr) []string { +func (r *TypeResolver) ResolvePHPParserTypes(typeScope *TypeScope, nodes ...ast.Expr) []string { types := make([]string, 0) for _, node := range nodes { resolved := r.resolvePHPParserType(typeScope, node) @@ -29,7 +28,7 @@ func (r *TypeResolver) ResolvePHPParserTypes(typeScope *TypeScope.TypeScope, nod return types } -func (r *TypeResolver) resolvePHPParserType(scope *TypeScope.TypeScope, node ast.Expr) []string { +func (r *TypeResolver) resolvePHPParserType(scope *TypeScope, node ast.Expr) []string { switch v := node.(type) { case *ast.StarExpr: return r.resolveStarExpr(scope, v) @@ -52,11 +51,11 @@ func (r *TypeResolver) resolvePHPParserType(scope *TypeScope.TypeScope, node ast } } -func (r *TypeResolver) resolveStarExpr(scope *TypeScope.TypeScope, expr *ast.StarExpr) []string { +func (r *TypeResolver) resolveStarExpr(scope *TypeScope, expr *ast.StarExpr) []string { return r.resolvePHPParserType(scope, expr.X) } -func (r *TypeResolver) resolveIdent(scope *TypeScope.TypeScope, v *ast.Ident) []string { +func (r *TypeResolver) resolveIdent(scope *TypeScope, v *ast.Ident) []string { resolved := scope.GetUse(v.Name) if resolved == nil { @@ -66,7 +65,7 @@ func (r *TypeResolver) resolveIdent(scope *TypeScope.TypeScope, v *ast.Ident) [] return []string{*resolved} } -func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope.TypeScope, v *ast.SelectorExpr) []string { +func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope, v *ast.SelectorExpr) []string { if ident, ok := v.X.(*ast.Ident); ok { return r.resolveIdent(scope, ident) } @@ -74,11 +73,11 @@ func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope.TypeScope, v *ast.Se return r.resolvePHPParserType(scope, v.X) } -func (r *TypeResolver) resolveMapType(scope *TypeScope.TypeScope, v *ast.MapType) []string { +func (r *TypeResolver) resolveMapType(scope *TypeScope, v *ast.MapType) []string { return r.ResolvePHPParserTypes(scope, v.Key, v.Value) } -func (r *TypeResolver) resolveArrayType(scope *TypeScope.TypeScope, v *ast.ArrayType) []string { +func (r *TypeResolver) resolveArrayType(scope *TypeScope, v *ast.ArrayType) []string { if v.Len == nil { return r.resolvePHPParserType(scope, v.Elt) } @@ -86,14 +85,14 @@ func (r *TypeResolver) resolveArrayType(scope *TypeScope.TypeScope, v *ast.Array return r.ResolvePHPParserTypes(scope, v.Len, v.Elt) } -func (r *TypeResolver) resolveInterfaceType(scope *TypeScope.TypeScope, v *ast.InterfaceType) []string { +func (r *TypeResolver) resolveInterfaceType(scope *TypeScope, v *ast.InterfaceType) []string { if v.Methods.List == nil { return make([]string, 0) } return r.resolveFields(scope, v.Methods.List...) } -func (r *TypeResolver) resolveFieldList(scope *TypeScope.TypeScope, list ...*ast.FieldList) []string { +func (r *TypeResolver) resolveFieldList(scope *TypeScope, list ...*ast.FieldList) []string { resolved := make([]string, 0) for _, fieldList := range list { @@ -106,7 +105,7 @@ func (r *TypeResolver) resolveFieldList(scope *TypeScope.TypeScope, list ...*ast return resolved } -func (r *TypeResolver) resolveFields(scope *TypeScope.TypeScope, fields ...*ast.Field) []string { +func (r *TypeResolver) resolveFields(scope *TypeScope, fields ...*ast.Field) []string { resolved := make([]string, 0) for _, field := range fields { if field.Names == nil { diff --git a/pkg/src/core/Ast/Parser/TypeScope/TypeScope.go b/pkg/src/core/ast/parser/type_scope.go similarity index 98% rename from pkg/src/core/Ast/Parser/TypeScope/TypeScope.go rename to pkg/src/core/ast/parser/type_scope.go index 4957cba..8673113 100644 --- a/pkg/src/core/Ast/Parser/TypeScope/TypeScope.go +++ b/pkg/src/core/ast/parser/type_scope.go @@ -1,4 +1,4 @@ -package TypeScope +package parser import ( "go/ast" diff --git a/pkg/src/core/Dependency/Dependency/Dependency.go b/pkg/src/core/dependency/dependency.go similarity index 98% rename from pkg/src/core/Dependency/Dependency/Dependency.go rename to pkg/src/core/dependency/dependency.go index b5c496d..ca70e24 100644 --- a/pkg/src/core/Dependency/Dependency/Dependency.go +++ b/pkg/src/core/dependency/dependency.go @@ -1,4 +1,4 @@ -package Dependency +package dependency import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyContext" diff --git a/pkg/src/core/Dependency/DependencyList/DependencyList.go b/pkg/src/core/dependency/dependency_list.go similarity index 84% rename from pkg/src/core/Dependency/DependencyList/DependencyList.go rename to pkg/src/core/dependency/dependency_list.go index fdf2ad0..c498cdd 100644 --- a/pkg/src/core/Dependency/DependencyList/DependencyList.go +++ b/pkg/src/core/dependency/dependency_list.go @@ -1,19 +1,18 @@ -package DependencyList +package dependency import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InheritDependency" ) type DependencyList struct { dependencies map[string][]DependencyInterface.DependencyInterface - inheritDependencies map[string][]*InheritDependency.InheritDependency + inheritDependencies map[string][]*InheritDependency } func NewDependencyList() *DependencyList { return &DependencyList{ dependencies: map[string][]DependencyInterface.DependencyInterface{}, - inheritDependencies: map[string][]*InheritDependency.InheritDependency{}, + inheritDependencies: map[string][]*InheritDependency{}, } } @@ -25,7 +24,7 @@ func (l *DependencyList) AddDependency(dep DependencyInterface.DependencyInterfa l.dependencies[tokenName] = append(l.dependencies[tokenName], dep) } -func (l *DependencyList) AddInheritDependency(dep *InheritDependency.InheritDependency) { +func (l *DependencyList) AddInheritDependency(dep *InheritDependency) { tokenName := dep.GetDepender().ToString() l.inheritDependencies[tokenName] = append(l.inheritDependencies[dep.GetDepender().ToString()], dep) } diff --git a/pkg/src/core/Dependency/DependencyResolver/DependencyResolver.go b/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go similarity index 55% rename from pkg/src/core/Dependency/DependencyResolver/DependencyResolver.go rename to pkg/src/core/dependency/dependency_resolver/dependency_resolver.go index 9a22955..5c7aefb 100644 --- a/pkg/src/core/Dependency/DependencyResolver/DependencyResolver.go +++ b/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go @@ -1,4 +1,4 @@ -package DependencyResolver +package dependency_resolver import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" @@ -7,23 +7,21 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostFlattenEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreEmitEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreFlattenEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InheritanceFlattener" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InvalidEmitterConfigurationException" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/emitter" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" "reflect" ) type DependencyResolver struct { config *AnalyserConfig.AnalyserConfig - inheritanceFlattener *InheritanceFlattener.InheritanceFlattener - emitterLocator map[EmitterType.EmitterType]DependencyEmitterInterface.DependencyEmitterInterface + inheritanceFlattener *dependency.InheritanceFlattener + emitterLocator map[EmitterType.EmitterType]emitter.DependencyEmitterInterface eventDispatcher util.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *AnalyserConfig.AnalyserConfig, emitterLocator map[EmitterType.EmitterType]DependencyEmitterInterface.DependencyEmitterInterface, inheritanceFlattener *InheritanceFlattener.InheritanceFlattener, eventDispatcher util.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *AnalyserConfig.AnalyserConfig, emitterLocator map[EmitterType.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher util.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, @@ -32,26 +30,26 @@ func NewDependencyResolver(typesConfig *AnalyserConfig.AnalyserConfig, emitterLo } } -func (r *DependencyResolver) Resolve(astMap *AstMap.AstMap) (*DependencyList.DependencyList, error) { - result := DependencyList.NewDependencyList() +func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependency.DependencyList, error) { + result := dependency.NewDependencyList() for _, typeConfig := range r.config.Types { - emitter, ok := r.emitterLocator[typeConfig] + dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] if !ok { - return nil, InvalidEmitterConfigurationException.NewInvalidEmitterConfigurationExceptionCouldNotLocate(typeConfig) + return nil, dependency.NewInvalidEmitterConfigurationExceptionCouldNotLocate(typeConfig) } - if reflect.TypeOf(emitter).Kind() != reflect.Ptr { - return nil, InvalidEmitterConfigurationException.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, emitter) + if reflect.TypeOf(dependencyEmitterInterface).Kind() != reflect.Ptr { + return nil, dependency.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, dependencyEmitterInterface) } - err := r.eventDispatcher.DispatchEvent(PreEmitEvent.NewPreEmitEvent(emitter.GetName())) + err := r.eventDispatcher.DispatchEvent(PreEmitEvent.NewPreEmitEvent(dependencyEmitterInterface.GetName())) if err != nil { return nil, err } - emitter.ApplyDependencies(*astMap, result) + dependencyEmitterInterface.ApplyDependencies(*astMap, result) errDispatchPostEmit := r.eventDispatcher.DispatchEvent(PostEmitEvent.NewPostEmitEvent()) if errDispatchPostEmit != nil { diff --git a/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.go b/pkg/src/core/dependency/emitter/class_dependency_emitter.go similarity index 53% rename from pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.go rename to pkg/src/core/dependency/emitter/class_dependency_emitter.go index af7ca92..b16c442 100644 --- a/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter/ClassDependencyEmitter.go +++ b/pkg/src/core/dependency/emitter/class_dependency_emitter.go @@ -1,11 +1,10 @@ -package ClassDependencyEmitter +package emitter import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyContext" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" ) type ClassDependencyEmitter struct{} @@ -18,24 +17,24 @@ func (c *ClassDependencyEmitter) GetName() string { return "ClassDependencyEmitter" } -func (c *ClassDependencyEmitter) ApplyDependencies(astMap AstMap2.AstMap, dependencyList *DependencyList.DependencyList) { +func (c *ClassDependencyEmitter) ApplyDependencies(astMap AstMap2.AstMap, dependencyList *dependency.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { classLikeName := classReference.GetToken().(*AstMap2.ClassLikeToken) - for _, dependency := range classReference.Dependencies { - if dependency.Context.DependencyType == DependencyType.DependencyTypeSuperGlobalVariable { + for _, dependencyToken := range classReference.Dependencies { + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeSuperGlobalVariable { continue } - if dependency.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { continue } - dependencyList.AddDependency(Dependency.NewDependency(classLikeName, dependency.Token, dependency.Context)) + dependencyList.AddDependency(dependency.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) } for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(Dependency.NewDependency(classLikeName, inherit.ClassLikeName, DependencyContext.NewDependencyContext(inherit.FileOccurrence, DependencyType.DependencyTypeInherit))) + dependencyList.AddDependency(dependency.NewDependency(classLikeName, inherit.ClassLikeName, DependencyContext.NewDependencyContext(inherit.FileOccurrence, DependencyType.DependencyTypeInherit))) } } } diff --git a/pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go b/pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go new file mode 100644 index 0000000..1036838 --- /dev/null +++ b/pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go @@ -0,0 +1,28 @@ +package emitter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" +) + +type ClassSuperglobalDependencyEmitter struct{} + +func NewClassSuperglobalDependencyEmitter() *ClassSuperglobalDependencyEmitter { + return &ClassSuperglobalDependencyEmitter{} +} + +func (c ClassSuperglobalDependencyEmitter) GetName() string { + return "ClassSuperglobalDependencyEmitter" +} + +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { + for _, classReference := range astMap.GetClassLikeReferences() { + for _, dependencyToken := range classReference.Dependencies { + if dependencyToken.Context.DependencyType != DependencyType.DependencyTypeSuperGlobalVariable { + continue + } + dependencyList.AddDependency(dependency.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + } + } +} diff --git a/pkg/src/core/dependency/emitter/dependency_emitter_interface.go b/pkg/src/core/dependency/emitter/dependency_emitter_interface.go new file mode 100644 index 0000000..dca4f0e --- /dev/null +++ b/pkg/src/core/dependency/emitter/dependency_emitter_interface.go @@ -0,0 +1,11 @@ +package emitter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" +) + +type DependencyEmitterInterface interface { + GetName() string + ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) +} diff --git a/pkg/src/core/Dependency/Emitter/FQDNIndexNode/FQDNIndexNode.go b/pkg/src/core/dependency/emitter/f_q_d_n_index_node.go similarity index 96% rename from pkg/src/core/Dependency/Emitter/FQDNIndexNode/FQDNIndexNode.go rename to pkg/src/core/dependency/emitter/f_q_d_n_index_node.go index 0390ec6..d379040 100644 --- a/pkg/src/core/Dependency/Emitter/FQDNIndexNode/FQDNIndexNode.go +++ b/pkg/src/core/dependency/emitter/f_q_d_n_index_node.go @@ -1,4 +1,4 @@ -package FQDNIndexNode +package emitter type FQDNIndexNode struct { FQDN bool diff --git a/pkg/src/core/dependency/emitter/file_dependency_emitter.go b/pkg/src/core/dependency/emitter/file_dependency_emitter.go new file mode 100644 index 0000000..caeedf2 --- /dev/null +++ b/pkg/src/core/dependency/emitter/file_dependency_emitter.go @@ -0,0 +1,33 @@ +package emitter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" +) + +type FileDependencyEmitter struct{} + +func NewFileDependencyEmitter() *FileDependencyEmitter { + return &FileDependencyEmitter{} +} + +func (f FileDependencyEmitter) GetName() string { + return "FileDependencyEmitter" +} + +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { + for _, fileReference := range astMap.GetFileReferences() { + for _, dependencyToken := range fileReference.Dependencies { + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeUse { + continue + } + + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { + continue + } + + dependencyList.AddDependency(dependency.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + } + } +} diff --git a/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.go b/pkg/src/core/dependency/emitter/function_call_dependency_emitter.go similarity index 67% rename from pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.go rename to pkg/src/core/dependency/emitter/function_call_dependency_emitter.go index 53aaf92..5457691 100644 --- a/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter/FunctionCallDependencyEmitter.go +++ b/pkg/src/core/dependency/emitter/function_call_dependency_emitter.go @@ -1,11 +1,10 @@ -package FunctionCallDependencyEmitter +package emitter import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" ) type FunctionCallDependencyEmitter struct{} @@ -17,7 +16,7 @@ func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { func (f *FunctionCallDependencyEmitter) GetName() string { return "FunctionCallDependencyEmitter" } -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { references := make([]TokenReferenceWithDependenciesInterface.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetClassLikeReferences() { references = append(references, reference) @@ -37,18 +36,18 @@ func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, f.createDependenciesForReferences(references, astMap, dependencyList) } -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []TokenReferenceWithDependenciesInterface.TokenReferenceWithDependenciesInterface, astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []TokenReferenceWithDependenciesInterface.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { for _, referenceInterface := range references { reference := referenceInterface.(TokenReferenceWithDependenciesInterface.TokenReferenceWithDependenciesInterface) - for _, dependency := range reference.GetDependencies() { - if dependency.Context.DependencyType != DependencyType.DependencyTypeUnresolvedFunctionCall { + for _, dependencyToken := range reference.GetDependencies() { + if dependencyToken.Context.DependencyType != DependencyType.DependencyTypeUnresolvedFunctionCall { continue } - token := dependency.Token - dependencyList.AddDependency(Dependency.NewDependency(reference.GetToken(), token, dependency.Context)) - functionToken := token.(*AstMap.FunctionToken) + token := dependencyToken.Token + dependencyList.AddDependency(dependency.NewDependency(reference.GetToken(), token, dependencyToken.Context)) + functionToken := token.(*ast_map.FunctionToken) if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { - dependencyList.AddDependency(Dependency.NewDependency(reference.GetToken(), dependency.Token, dependency.Context)) + dependencyList.AddDependency(dependency.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/src/core/dependency/emitter/function_dependency_emitter.go b/pkg/src/core/dependency/emitter/function_dependency_emitter.go new file mode 100644 index 0000000..fb8a7db --- /dev/null +++ b/pkg/src/core/dependency/emitter/function_dependency_emitter.go @@ -0,0 +1,35 @@ +package emitter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" +) + +type FunctionDependencyEmitter struct{} + +func NewFunctionDependencyEmitter() *FunctionDependencyEmitter { + return &FunctionDependencyEmitter{} +} + +func (f FunctionDependencyEmitter) GetName() string { + return "FunctionDependencyEmitter" +} + +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { + for _, fileReference := range astMap.GetFileReferences() { + for _, astFunctionReference := range fileReference.FunctionReferences { + for _, dependencyToken := range astFunctionReference.Dependencies { + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeSuperGlobalVariable { + continue + } + + if dependencyToken.Context.DependencyType == DependencyType.DependencyTypeUnresolvedFunctionCall { + continue + } + + dependencyList.AddDependency(dependency.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + } + } + } +} diff --git a/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.go b/pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go similarity index 50% rename from pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.go rename to pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go index fbf9bd3..782e970 100644 --- a/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter/FunctionSuperglobalDependencyEmitter.go +++ b/pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go @@ -1,10 +1,9 @@ -package FunctionSuperglobalDependencyEmitter +package emitter import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" ) type FunctionSuperglobalDependencyEmitter struct{} @@ -17,15 +16,15 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { - for _, dependency := range astFunctionReference.Dependencies { - if dependency.Context.DependencyType != DependencyType.DependencyTypeSuperGlobalVariable { + for _, dependencyToken := range astFunctionReference.Dependencies { + if dependencyToken.Context.DependencyType != DependencyType.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(Dependency.NewDependency(astFunctionReference.GetToken(), dependency.Token, dependency.Context)) + dependencyList.AddDependency(dependency.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.go b/pkg/src/core/dependency/emitter/uses_dependency_emitter.go similarity index 71% rename from pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.go rename to pkg/src/core/dependency/emitter/uses_dependency_emitter.go index d02fbe6..4c0b03a 100644 --- a/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter/UsesDependencyEmitter.go +++ b/pkg/src/core/dependency/emitter/uses_dependency_emitter.go @@ -1,12 +1,10 @@ -package UsesDependencyEmitter +package emitter import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TaggedTokenReferenceInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/FQDNIndexNode" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "strings" ) @@ -20,7 +18,7 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependencyList *DependencyList.DependencyList) { +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { references := make([]TaggedTokenReferenceInterface.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) @@ -34,7 +32,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependen referencesFQDN = append(referencesFQDN, reference.GetToken().ToString()) } - FQDNIndex := FQDNIndexNode.FQDNIndexNode{} + FQDNIndex := FQDNIndexNode{} for _, reference := range referencesFQDN { pathSplit := strings.Split(reference, "\\") @@ -45,14 +43,14 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap AstMap.AstMap, dependen for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { if emittedDependency.Context.DependencyType == DependencyType.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { - dependencyList.AddDependency(Dependency.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) + dependencyList.AddDependency(dependency.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } } } } -func (u *UsesDependencyEmitter) IsFQDN(dependency *AstMap.DependencyToken, FQDNIndex FQDNIndexNode.FQDNIndexNode) bool { +func (u *UsesDependencyEmitter) IsFQDN(dependency *ast_map.DependencyToken, FQDNIndex FQDNIndexNode) bool { dependencyFQDN := dependency.Token.ToString() pathSplit := strings.Split(dependencyFQDN, "\\") value := FQDNIndex.GetNestedNode(pathSplit) diff --git a/pkg/src/core/Dependency/InheritDependency/InheritDependency.go b/pkg/src/core/dependency/inherit_dependency.go similarity index 79% rename from pkg/src/core/Dependency/InheritDependency/InheritDependency.go rename to pkg/src/core/dependency/inherit_dependency.go index 70b6fa5..070f877 100644 --- a/pkg/src/core/Dependency/InheritDependency/InheritDependency.go +++ b/pkg/src/core/dependency/inherit_dependency.go @@ -1,20 +1,20 @@ -package InheritDependency +package dependency import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/DependencyContext" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type InheritDependency struct { - depender *AstMap.ClassLikeToken + depender *ast_map.ClassLikeToken dependent TokenInterface.TokenInterface originalDependency DependencyInterface.DependencyInterface - inheritPath *AstMap.AstInherit + inheritPath *ast_map.AstInherit } -func NewInheritDependency(depender *AstMap.ClassLikeToken, dependent TokenInterface.TokenInterface, originalDependency DependencyInterface.DependencyInterface, inheritPath *AstMap.AstInherit) *InheritDependency { +func NewInheritDependency(depender *ast_map.ClassLikeToken, dependent TokenInterface.TokenInterface, originalDependency DependencyInterface.DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { return &InheritDependency{depender: depender, dependent: dependent, originalDependency: originalDependency, inheritPath: inheritPath} } diff --git a/pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.go b/pkg/src/core/dependency/inheritance_flattener.go similarity index 55% rename from pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.go rename to pkg/src/core/dependency/inheritance_flattener.go index 54a0ee0..c2fe29c 100644 --- a/pkg/src/core/Dependency/InheritanceFlattener/InheritanceFlattener.go +++ b/pkg/src/core/dependency/inheritance_flattener.go @@ -1,9 +1,7 @@ -package InheritanceFlattener +package dependency import ( - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyList" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InheritDependency" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type InheritanceFlattener struct{} @@ -12,12 +10,12 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap AstMap2.AstMap, dependencyList *DependencyList.DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap AstMap2.AstMap, dependencyList *DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { classLikeName := classLikeReference.GetToken().(*AstMap2.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { for _, dep := range dependencyList.GetDependenciesByClass(inherit.ClassLikeName.ToString()) { - dependencyList.AddInheritDependency(InheritDependency.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) + dependencyList.AddInheritDependency(NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) } } } diff --git a/pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.go b/pkg/src/core/dependency/invalid_emitter_configuration_exception.go similarity index 95% rename from pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.go rename to pkg/src/core/dependency/invalid_emitter_configuration_exception.go index 2c35aba..06cca8a 100644 --- a/pkg/src/core/Dependency/InvalidEmitterConfigurationException/InvalidEmitterConfigurationException.go +++ b/pkg/src/core/dependency/invalid_emitter_configuration_exception.go @@ -1,4 +1,4 @@ -package InvalidEmitterConfigurationException +package dependency import ( "fmt" diff --git a/pkg/src/core/Dependency/TokenResolver/TokenResolver.go b/pkg/src/core/dependency/token_resolver.go similarity index 89% rename from pkg/src/core/Dependency/TokenResolver/TokenResolver.go rename to pkg/src/core/dependency/token_resolver.go index 6b7ba56..e6ef5fe 100644 --- a/pkg/src/core/Dependency/TokenResolver/TokenResolver.go +++ b/pkg/src/core/dependency/token_resolver.go @@ -1,9 +1,9 @@ -package TokenResolver +package dependency import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type TokenResolver struct{} diff --git a/pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.go b/pkg/src/core/dependency/unrecognized_token_exception.go similarity index 94% rename from pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.go rename to pkg/src/core/dependency/unrecognized_token_exception.go index 7c34c05..43410ba 100644 --- a/pkg/src/core/Dependency/UnrecognizedTokenException/UnrecognizedTokenException.go +++ b/pkg/src/core/dependency/unrecognized_token_exception.go @@ -1,4 +1,4 @@ -package UnrecognizedTokenException +package dependency import ( "fmt" diff --git a/pkg/src/core/InputCollector/FileInputCollector/FileInputCollector.go b/pkg/src/core/input_collector/file_input_collector.go similarity index 83% rename from pkg/src/core/InputCollector/FileInputCollector/FileInputCollector.go rename to pkg/src/core/input_collector/file_input_collector.go index b25279a..22f956e 100644 --- a/pkg/src/core/InputCollector/FileInputCollector/FileInputCollector.go +++ b/pkg/src/core/input_collector/file_input_collector.go @@ -1,9 +1,7 @@ -package FileInputCollector +package input_collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/ExceptionInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/InputCollectorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/InputException" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Exception/InvalidPathException" "github.com/KoNekoD/go-deptrac/pkg/util" "os" @@ -16,7 +14,7 @@ type FileInputCollector struct { excludedFilePatterns []string } -func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string, basePath string) (InputCollectorInterface.InputCollectorInterface, error) { +func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string, basePath string) (InputCollectorInterface, error) { fileInfo, err := os.Stat(basePath) if err != nil { return nil, err @@ -66,7 +64,7 @@ func (c *FileInputCollector) Collect() ([]string, error) { return err }) if err != nil { - return nil, InputException.NewInputExceptionCouldNotCollectFiles(err) + return nil, NewInputExceptionCouldNotCollectFiles(err) } } return paths, nil diff --git a/pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.go b/pkg/src/core/input_collector/input_collector_interface.go similarity index 69% rename from pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.go rename to pkg/src/core/input_collector/input_collector_interface.go index 329f34d..5c8c68e 100644 --- a/pkg/src/core/InputCollector/InputCollectorInterface/InputCollectorInterface.go +++ b/pkg/src/core/input_collector/input_collector_interface.go @@ -1,4 +1,4 @@ -package InputCollectorInterface +package input_collector type InputCollectorInterface interface { Collect() ([]string, error) diff --git a/pkg/src/core/InputCollector/InputException/InputException.go b/pkg/src/core/input_collector/input_exception.go similarity index 94% rename from pkg/src/core/InputCollector/InputException/InputException.go rename to pkg/src/core/input_collector/input_exception.go index 3326de5..96b0ba2 100644 --- a/pkg/src/core/InputCollector/InputException/InputException.go +++ b/pkg/src/core/input_collector/input_exception.go @@ -1,4 +1,4 @@ -package InputException +package input_collector import "fmt" diff --git a/pkg/src/core/Layer/Collector/AbstractTypeCollector/AbstractTypeCollector.go b/pkg/src/core/layer/collector/abstract_type_collector.go similarity index 68% rename from pkg/src/core/Layer/Collector/AbstractTypeCollector/AbstractTypeCollector.go rename to pkg/src/core/layer/collector/abstract_type_collector.go index fb1a4eb..bd6b28c 100644 --- a/pkg/src/core/Layer/Collector/AbstractTypeCollector/AbstractTypeCollector.go +++ b/pkg/src/core/layer/collector/abstract_type_collector.go @@ -1,29 +1,28 @@ -package AbstractTypeCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/RegexCollector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type AbstractTypeCollector struct { - *RegexCollector.RegexCollector + *RegexCollector } func NewAbstractTypeCollector() *AbstractTypeCollector { return &AbstractTypeCollector{ - RegexCollector: RegexCollector.NewRegexCollector(), + RegexCollector: NewRegexCollector(), } } -func (c *AbstractTypeCollector) GetType() AstMap.ClassLikeType { +func (c *AbstractTypeCollector) GetType() ast_map.ClassLikeType { panic("Not implemented") } func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - v, ok := reference.(*AstMap.ClassLikeReference) + v, ok := reference.(*ast_map.ClassLikeReference) if !ok { return false, nil } @@ -33,10 +32,10 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference return false, err } - isClassLike := AstMap.TypeClasslike == c.GetType() + isClassLike := ast_map.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() - return (isClassLike || isSameType) && v.GetToken().(*AstMap.ClassLikeToken).Match(pattern), nil + return (isClassLike || isSameType) && v.GetToken().(*ast_map.ClassLikeToken).Match(pattern), nil } func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.go b/pkg/src/core/layer/collector/bool_collector.go similarity index 90% rename from pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.go rename to pkg/src/core/layer/collector/bool_collector.go index 6629c03..297e9fd 100644 --- a/pkg/src/core/Layer/Collector/BoolCollector/BoolCollector.go +++ b/pkg/src/core/layer/collector/bool_collector.go @@ -1,18 +1,17 @@ -package BoolCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorConfig" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorResolverInterface" ) type BoolCollector struct { - collectorResolver CollectorResolverInterface.CollectorResolverInterface + collectorResolver CollectorResolverInterface } -func NewBoolCollector(collectorResolver CollectorResolverInterface.CollectorResolverInterface) *BoolCollector { +func NewBoolCollector(collectorResolver CollectorResolverInterface) *BoolCollector { return &BoolCollector{ collectorResolver: collectorResolver, } diff --git a/pkg/src/core/layer/collector/class_collector.go b/pkg/src/core/layer/collector/class_collector.go new file mode 100644 index 0000000..f89943f --- /dev/null +++ b/pkg/src/core/layer/collector/class_collector.go @@ -0,0 +1,19 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type ClassCollector struct { + *AbstractTypeCollector +} + +func NewClassCollector() *ClassCollector { + return &ClassCollector{ + AbstractTypeCollector: NewAbstractTypeCollector(), + } +} + +func (c *ClassCollector) GetType() ast_map.ClassLikeType { + return ast_map.TypeClass +} diff --git a/pkg/src/core/layer/collector/class_like_collector.go b/pkg/src/core/layer/collector/class_like_collector.go new file mode 100644 index 0000000..f123872 --- /dev/null +++ b/pkg/src/core/layer/collector/class_like_collector.go @@ -0,0 +1,19 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type ClassLikeCollector struct { + *AbstractTypeCollector +} + +func NewClassLikeCollector() *ClassLikeCollector { + return &ClassLikeCollector{ + AbstractTypeCollector: NewAbstractTypeCollector(), + } +} + +func (c *ClassLikeCollector) GetType() ast_map.ClassLikeType { + return ast_map.TypeClasslike +} diff --git a/pkg/src/core/Layer/Collector/ClassNameRegexCollector/ClassNameRegexCollector.go b/pkg/src/core/layer/collector/class_name_regex_collector.go similarity index 72% rename from pkg/src/core/Layer/Collector/ClassNameRegexCollector/ClassNameRegexCollector.go rename to pkg/src/core/layer/collector/class_name_regex_collector.go index c97d9e3..05414ae 100644 --- a/pkg/src/core/Layer/Collector/ClassNameRegexCollector/ClassNameRegexCollector.go +++ b/pkg/src/core/layer/collector/class_name_regex_collector.go @@ -1,25 +1,24 @@ -package ClassNameRegexCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/RegexCollector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) type ClassNameRegexCollector struct { - *RegexCollector.RegexCollector + *RegexCollector } func NewClassNameRegexCollector() *ClassNameRegexCollector { return &ClassNameRegexCollector{ - RegexCollector: RegexCollector.NewRegexCollector(), + RegexCollector: NewRegexCollector(), } } func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } @@ -28,7 +27,7 @@ func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, referenc return false, err } - return reference.GetToken().(*AstMap.ClassLikeToken).Match(validatedPattern), nil + return reference.GetToken().(*ast_map.ClassLikeToken).Match(validatedPattern), nil } func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/src/core/Layer/Collector/Collectable/Collectable.go b/pkg/src/core/layer/collector/collectable.go similarity index 95% rename from pkg/src/core/Layer/Collector/Collectable/Collectable.go rename to pkg/src/core/layer/collector/collectable.go index 5f678cf..ed7f3bf 100644 --- a/pkg/src/core/Layer/Collector/Collectable/Collectable.go +++ b/pkg/src/core/layer/collector/collectable.go @@ -1,4 +1,4 @@ -package Collectable +package collector import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CollectorInterface" diff --git a/pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.go b/pkg/src/core/layer/collector/collector_provider.go similarity index 97% rename from pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.go rename to pkg/src/core/layer/collector/collector_provider.go index fbbc94d..952bf85 100644 --- a/pkg/src/core/Layer/Collector/CollectorProvider/CollectorProvider.go +++ b/pkg/src/core/layer/collector/collector_provider.go @@ -1,4 +1,4 @@ -package CollectorProvider +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" diff --git a/pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.go b/pkg/src/core/layer/collector/collector_resolver.go similarity index 62% rename from pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.go rename to pkg/src/core/layer/collector/collector_resolver.go index e309c04..87acf2d 100644 --- a/pkg/src/core/Layer/Collector/CollectorResolver/CollectorResolver.go +++ b/pkg/src/core/layer/collector/collector_resolver.go @@ -1,21 +1,19 @@ -package CollectorResolver +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/Collectable" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorProvider" ) type CollectorResolver struct { - collectorProvider *CollectorProvider.CollectorProvider + collectorProvider *CollectorProvider } -func NewCollectorResolver(collectorProvider *CollectorProvider.CollectorProvider) *CollectorResolver { +func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolver { return &CollectorResolver{collectorProvider: collectorProvider} } -func (c *CollectorResolver) Resolve(config map[string]interface{}) (*Collectable.Collectable, error) { +func (c *CollectorResolver) Resolve(config map[string]interface{}) (*Collectable, error) { classLikeType, err := CollectorType.NewCollectorTypeFromString(config["type"].(string)) if err != nil { return nil, err @@ -27,5 +25,5 @@ func (c *CollectorResolver) Resolve(config map[string]interface{}) (*Collectable collector := c.collectorProvider.Get(classLikeType) - return Collectable.NewCollectable(collector, config), nil + return NewCollectable(collector, config), nil } diff --git a/pkg/src/core/layer/collector/collector_resolver_interface.go b/pkg/src/core/layer/collector/collector_resolver_interface.go new file mode 100644 index 0000000..a84470b --- /dev/null +++ b/pkg/src/core/layer/collector/collector_resolver_interface.go @@ -0,0 +1,5 @@ +package collector + +type CollectorResolverInterface interface { + Resolve(config map[string]interface{}) (*Collectable, error) +} diff --git a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.go b/pkg/src/core/layer/collector/composer_collector.go similarity index 98% rename from pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.go rename to pkg/src/core/layer/collector/composer_collector.go index 7486f91..f3035fd 100644 --- a/pkg/src/core/Layer/Collector/ComposerCollector/ComposerCollector.go +++ b/pkg/src/core/layer/collector/composer_collector.go @@ -1,4 +1,4 @@ -package ComposerCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" diff --git a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.go b/pkg/src/core/layer/collector/directory_collector.go similarity index 87% rename from pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.go rename to pkg/src/core/layer/collector/directory_collector.go index 0a831c4..9fd5814 100644 --- a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector.go +++ b/pkg/src/core/layer/collector/directory_collector.go @@ -1,21 +1,20 @@ -package DirectoryCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/RegexCollector" "github.com/KoNekoD/go-deptrac/pkg/util" "regexp" ) type DirectoryCollector struct { - *RegexCollector.RegexCollector + *RegexCollector } func NewDirectoryCollector() *DirectoryCollector { return &DirectoryCollector{ - RegexCollector: RegexCollector.NewRegexCollector(), + RegexCollector: NewRegexCollector(), } } diff --git a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector_test.go b/pkg/src/core/layer/collector/directory_collector_test.go similarity index 94% rename from pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector_test.go rename to pkg/src/core/layer/collector/directory_collector_test.go index 3e3a11a..c882c13 100644 --- a/pkg/src/core/Layer/Collector/DirectoryCollector/DirectoryCollector_test.go +++ b/pkg/src/core/layer/collector/directory_collector_test.go @@ -1,4 +1,4 @@ -package DirectoryCollector +package collector import ( "regexp" diff --git a/pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.go b/pkg/src/core/layer/collector/function_name_collector.go similarity index 83% rename from pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.go rename to pkg/src/core/layer/collector/function_name_collector.go index 821840a..27b3d3e 100644 --- a/pkg/src/core/Layer/Collector/FunctionNameCollector/FunctionNameCollector.go +++ b/pkg/src/core/layer/collector/function_name_collector.go @@ -1,10 +1,10 @@ -package FunctionNameCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -15,7 +15,7 @@ func NewFunctionNameCollector() *FunctionNameCollector { } func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.FunctionReference); !ok { + if _, ok := reference.(*ast_map.FunctionReference); !ok { return false, nil } @@ -24,7 +24,7 @@ func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference return false, err } - tokenName := reference.GetToken().(*AstMap.FunctionToken) + tokenName := reference.GetToken().(*ast_map.FunctionToken) return tokenName.Match(pattern), nil } diff --git a/pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.go b/pkg/src/core/layer/collector/glob_collector.go similarity index 88% rename from pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.go rename to pkg/src/core/layer/collector/glob_collector.go index f59c2aa..3e9966f 100644 --- a/pkg/src/core/Layer/Collector/GlobCollector/GlobCollector.go +++ b/pkg/src/core/layer/collector/glob_collector.go @@ -1,22 +1,21 @@ -package GlobCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/RegexCollector" "github.com/KoNekoD/go-deptrac/pkg/util" filepath2 "path/filepath" "regexp" ) type GlobCollector struct { - *RegexCollector.RegexCollector + *RegexCollector basePath string } func NewGlobCollector(basePath string) *GlobCollector { return &GlobCollector{ - RegexCollector: RegexCollector.NewRegexCollector(), + RegexCollector: NewRegexCollector(), basePath: util.PathNormalize(basePath), } } diff --git a/pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.go b/pkg/src/core/layer/collector/inheritance_level_collector.go similarity index 71% rename from pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.go rename to pkg/src/core/layer/collector/inheritance_level_collector.go index 547f5f5..89f7688 100644 --- a/pkg/src/core/Layer/Collector/InheritanceLevelCollector/InheritanceLevelCollector.go +++ b/pkg/src/core/layer/collector/inheritance_level_collector.go @@ -1,19 +1,19 @@ -package InheritanceLevelCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) type InheritanceLevelCollector struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - astMap *AstMap.AstMap + astMapExtractor *ast.AstMapExtractor + astMap *ast_map.AstMap } -func NewInheritanceLevelCollector(astMapExtractor *AstMapExtractor.AstMapExtractor) (*InheritanceLevelCollector, error) { +func NewInheritanceLevelCollector(astMapExtractor *ast.AstMapExtractor) (*InheritanceLevelCollector, error) { astMap, err := astMapExtractor.Extract() if err != nil { return nil, err @@ -25,11 +25,11 @@ func NewInheritanceLevelCollector(astMapExtractor *AstMapExtractor.AstMapExtract } func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } - classInherits := c.astMap.GetClassInherits(reference.GetToken().(*AstMap.ClassLikeToken)) + classInherits := c.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) if !util.MapKeyExists(config, "value") || util.MapKeyIsInt(config, "value") { return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") diff --git a/pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.go b/pkg/src/core/layer/collector/inherits_collector.go similarity index 68% rename from pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.go rename to pkg/src/core/layer/collector/inherits_collector.go index 5f880f4..4ff6ba9 100644 --- a/pkg/src/core/Layer/Collector/InheritsCollector/InheritsCollector.go +++ b/pkg/src/core/layer/collector/inherits_collector.go @@ -1,19 +1,19 @@ -package InheritsCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) type InheritsCollector struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - astMap *AstMap.AstMap + astMapExtractor *ast.AstMapExtractor + astMap *ast_map.AstMap } -func NewInheritsCollector(astMapExtractor *AstMapExtractor.AstMapExtractor) (*InheritsCollector, error) { +func NewInheritsCollector(astMapExtractor *ast.AstMapExtractor) (*InheritsCollector, error) { astMap, err := astMapExtractor.Extract() if err != nil { return nil, err @@ -25,7 +25,7 @@ func NewInheritsCollector(astMapExtractor *AstMapExtractor.AstMapExtractor) (*In } func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } @@ -34,7 +34,7 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference Tok return false, err } - for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*AstMap.ClassLikeToken)) { + for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) { if inherit.ClassLikeName.Equals(classLikeName) { return true, nil } @@ -43,10 +43,10 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference Tok return false, nil } -func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*AstMap.ClassLikeToken, error) { +func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") } - return AstMap.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/src/core/layer/collector/interface_collector.go b/pkg/src/core/layer/collector/interface_collector.go new file mode 100644 index 0000000..ca729d9 --- /dev/null +++ b/pkg/src/core/layer/collector/interface_collector.go @@ -0,0 +1,19 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type InterfaceCollector struct { + *AbstractTypeCollector +} + +func NewInterfaceCollector() *InterfaceCollector { + return &InterfaceCollector{ + AbstractTypeCollector: NewAbstractTypeCollector(), + } +} + +func (c *InterfaceCollector) GetType() ast_map.ClassLikeType { + return ast_map.TypeInterface +} diff --git a/pkg/src/core/Layer/Collector/LayerCollector/LayerCollector.go b/pkg/src/core/layer/collector/layer_collector.go similarity index 88% rename from pkg/src/core/Layer/Collector/LayerCollector/LayerCollector.go rename to pkg/src/core/layer/collector/layer_collector.go index c7f6b9a..4903bc3 100644 --- a/pkg/src/core/Layer/Collector/LayerCollector/LayerCollector.go +++ b/pkg/src/core/layer/collector/layer_collector.go @@ -1,20 +1,20 @@ -package LayerCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidLayerDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/util" ) type LayerCollector struct { - resolver LayerResolverInterface.LayerResolverInterface + resolver layer_resolver_interface.LayerResolverInterface resolved map[string]map[string]*bool } -func NewLayerCollector(resolver LayerResolverInterface.LayerResolverInterface) *LayerCollector { +func NewLayerCollector(resolver layer_resolver_interface.LayerResolverInterface) *LayerCollector { return &LayerCollector{ resolver: resolver, } diff --git a/pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.go b/pkg/src/core/layer/collector/method_collector.go similarity index 71% rename from pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.go rename to pkg/src/core/layer/collector/method_collector.go index 6dd06db..2ad8739 100644 --- a/pkg/src/core/Layer/Collector/MethodCollector/MethodCollector.go +++ b/pkg/src/core/layer/collector/method_collector.go @@ -1,29 +1,28 @@ -package MethodCollector +package collector import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/RegexCollector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" "github.com/KoNekoD/go-deptrac/pkg/util" ) type MethodCollector struct { - *RegexCollector.RegexCollector - astParser *NikicPhpParser.NikicPhpParser + *RegexCollector + astParser *nikic_php_parser.NikicPhpParser } -func NewMethodCollector(astParser *NikicPhpParser.NikicPhpParser) *MethodCollector { +func NewMethodCollector(astParser *nikic_php_parser.NikicPhpParser) *MethodCollector { return &MethodCollector{ - RegexCollector: RegexCollector.NewRegexCollector(), + RegexCollector: NewRegexCollector(), astParser: astParser, } } func (c *MethodCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } @@ -32,7 +31,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference Token return false, err } - classLike := c.astParser.GetNodeForClassLikeReference(reference.(*AstMap.ClassLikeReference)) + classLike := c.astParser.GetNodeForClassLikeReference(reference.(*ast_map.ClassLikeReference)) if classLike == nil { return false, nil } diff --git a/pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.go b/pkg/src/core/layer/collector/regex_collector.go similarity index 96% rename from pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.go rename to pkg/src/core/layer/collector/regex_collector.go index 7c5ec25..38adadb 100644 --- a/pkg/src/core/Layer/Collector/RegexCollector/RegexCollector.go +++ b/pkg/src/core/layer/collector/regex_collector.go @@ -1,4 +1,4 @@ -package RegexCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" diff --git a/pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.go b/pkg/src/core/layer/collector/superglobal_collector.go similarity index 88% rename from pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.go rename to pkg/src/core/layer/collector/superglobal_collector.go index 7588dd9..53ff2fb 100644 --- a/pkg/src/core/Layer/Collector/SuperglobalCollector/SuperglobalCollector.go +++ b/pkg/src/core/layer/collector/superglobal_collector.go @@ -1,9 +1,9 @@ -package SuperglobalCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -14,7 +14,7 @@ func NewSuperglobalCollector() *SuperglobalCollector { } func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.VariableReference); !ok { + if _, ok := reference.(*ast_map.VariableReference); !ok { return false, nil } diff --git a/pkg/src/core/layer/collector/trait_collector.go b/pkg/src/core/layer/collector/trait_collector.go new file mode 100644 index 0000000..5332f3e --- /dev/null +++ b/pkg/src/core/layer/collector/trait_collector.go @@ -0,0 +1,19 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" +) + +type TraitCollector struct { + *AbstractTypeCollector +} + +func NewTraitCollector() *TraitCollector { + return &TraitCollector{ + AbstractTypeCollector: NewAbstractTypeCollector(), + } +} + +func (c *TraitCollector) GetType() ast_map.ClassLikeType { + return ast_map.TypeTrait +} diff --git a/pkg/src/core/Layer/Collector/UsesCollector/UsesCollector.go b/pkg/src/core/layer/collector/uses_collector.go similarity index 64% rename from pkg/src/core/Layer/Collector/UsesCollector/UsesCollector.go rename to pkg/src/core/layer/collector/uses_collector.go index 94cc673..1190abe 100644 --- a/pkg/src/core/Layer/Collector/UsesCollector/UsesCollector.go +++ b/pkg/src/core/layer/collector/uses_collector.go @@ -1,19 +1,19 @@ -package UsesCollector +package collector import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMap" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) type UsesCollector struct { - astMapExtractor *AstMapExtractor.AstMapExtractor - astMap *AstMap.AstMap + astMapExtractor *ast.AstMapExtractor + astMap *ast_map.AstMap } -func NewUsesCollector(astMapExtractor *AstMapExtractor.AstMapExtractor) (*UsesCollector, error) { +func NewUsesCollector(astMapExtractor *ast.AstMapExtractor) (*UsesCollector, error) { astMap, err := astMapExtractor.Extract() if err != nil { return nil, err @@ -25,7 +25,7 @@ func NewUsesCollector(astMapExtractor *AstMapExtractor.AstMapExtractor) (*UsesCo } func (u *UsesCollector) Satisfy(config map[string]interface{}, reference TokenReferenceInterface.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*AstMap.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } @@ -34,8 +34,8 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference TokenRe return false, err } - for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*AstMap.ClassLikeToken)) { - if AstMap.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { + for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) { + if ast_map.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { return true, nil } } @@ -43,10 +43,10 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference TokenRe return false, nil } -func (u *UsesCollector) getTraitName(config map[string]interface{}) (*AstMap.ClassLikeToken, error) { +func (u *UsesCollector) getTraitName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") } - return AstMap.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/src/core/Layer/LayerResolver/LayerResolver.go b/pkg/src/core/layer/layer_resolver.go similarity index 84% rename from pkg/src/core/Layer/LayerResolver/LayerResolver.go rename to pkg/src/core/layer/layer_resolver.go index 7d530a8..30151c7 100644 --- a/pkg/src/core/Layer/LayerResolver/LayerResolver.go +++ b/pkg/src/core/layer/layer_resolver.go @@ -1,32 +1,31 @@ -package LayerResolver +package layer import ( "errors" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/Collectable" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorResolverInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "reflect" "sync" ) // LayerResolver - LayerResolverInterface defines the structure for a layer resolver type LayerResolver struct { - collectorResolver CollectorResolverInterface.CollectorResolverInterface + collectorResolver collector.CollectorResolverInterface layersConfig []*Layer.Layer - layers map[string][]*Collectable.Collectable + layers map[string][]*collector.Collectable initialized bool resolved map[string]map[string]bool mu sync.Mutex } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver CollectorResolverInterface.CollectorResolverInterface, layersConfig []*Layer.Layer) LayerResolverInterface.LayerResolverInterface { +func NewLayerResolver(collectorResolver collector.CollectorResolverInterface, layersConfig []*Layer.Layer) layer_resolver_interface.LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, - layers: make(map[string][]*Collectable.Collectable), + layers: make(map[string][]*collector.Collectable), resolved: make(map[string]map[string]bool), } } @@ -129,14 +128,14 @@ func (r *LayerResolver) Has(layer string) (bool, error) { // initializeLayers initializes the layers from the configuration func (r *LayerResolver) initializeLayers() error { - r.layers = make(map[string][]*Collectable.Collectable) + r.layers = make(map[string][]*collector.Collectable) for _, layer := range r.layersConfig { layerName := layer.Name if _, exists := r.layers[layerName]; exists { return errors.New("invalid layer definition: duplicate name " + layerName) } - r.layers[layerName] = []*Collectable.Collectable{} + r.layers[layerName] = []*collector.Collectable{} for _, config := range layer.Collectors { resolvedCollector, err := r.collectorResolver.Resolve(config.ToArray()) diff --git a/pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.go b/pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go similarity index 93% rename from pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.go rename to pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go index 9907758..1724303 100644 --- a/pkg/src/core/Layer/LayerResolverInterface/LayerResolverInterface.go +++ b/pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go @@ -1,4 +1,4 @@ -package LayerResolverInterface +package layer_resolver_interface import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/TokenReferenceInterface" diff --git a/pkg/src/supportive/Console/Application/Application_test.go b/pkg/src/supportive/Console/Application/Application_test.go new file mode 100644 index 0000000..5df896d --- /dev/null +++ b/pkg/src/supportive/Console/Application/Application_test.go @@ -0,0 +1,20 @@ +package Application + +import ( + "flag" + "fmt" + "os" + "testing" +) + +func TestApplicationOk(t *testing.T) { + os.Args = []string{ + "", + "analyse", + } + flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) + + NewApplication().Run() + + fmt.Println("", "") +} diff --git a/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.go b/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.go index da2b446..1034c82 100644 --- a/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.go +++ b/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.go @@ -8,7 +8,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/OutputResult" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/DependencyLayersAnalyser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseOptions" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/CommandRunException" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/FormatterProvider" @@ -18,11 +18,11 @@ import ( // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { - analyzer *DependencyLayersAnalyser.DependencyLayersAnalyser + analyzer *analyser.DependencyLayersAnalyser formatterProvider *FormatterProvider.FormatterProvider } -func NewAnalyseRunner(analyzer *DependencyLayersAnalyser.DependencyLayersAnalyser, formatterProvider *FormatterProvider.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *analyser.DependencyLayersAnalyser, formatterProvider *FormatterProvider.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, diff --git a/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go b/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go index 9a9331f..35aba6a 100644 --- a/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go +++ b/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go @@ -1,40 +1,22 @@ package ContainerBuilder import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/DeptracConfig" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/DependencyLayersAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/LayerDependenciesAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/LayerForTokenAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/RulesetUsageAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/TokenInLayerAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/UnassignedTokenAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceCacheInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceDeferredCacheInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/ParserInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InheritanceFlattener" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/InputCollectorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolverInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseCommand" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseRunner" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" @@ -54,27 +36,27 @@ type ContainerBuilder struct { CacheFile *string Configuration *DeptracConfig.DeptracConfig EventDispatcher util.EventDispatcherInterface - FileInputCollector InputCollectorInterface.InputCollectorInterface + FileInputCollector input_collector.InputCollectorInterface YmlFileLoader *YmlFileLoader.YmlFileLoader Dumper *Dumper.Dumper - AstLoader *AstLoader.AstLoader - AstFileReferenceFileCache *AstFileReferenceFileCache.AstFileReferenceFileCache - AstFileReferenceDeferredCacheInterface AstFileReferenceDeferredCacheInterface.AstFileReferenceDeferredCacheInterface - AstFileReferenceCacheInterface AstFileReferenceCacheInterface.AstFileReferenceCacheInterface - CacheableFileSubscriber *CacheableFileSubscriber.CacheableFileSubscriber - AstFileReferenceInMemoryCache *AstFileReferenceInMemoryCache.AstFileReferenceInMemoryCache - TypeResolver *TypeResolver.TypeResolver - ReferenceExtractors []ReferenceExtractorInterface.ReferenceExtractorInterface - ParserInterface ParserInterface.ParserInterface + AstLoader *ast.AstLoader + AstFileReferenceFileCache *cache.AstFileReferenceFileCache + AstFileReferenceDeferredCacheInterface cache.AstFileReferenceDeferredCacheInterface + AstFileReferenceCacheInterface cache.AstFileReferenceCacheInterface + CacheableFileSubscriber *cache.CacheableFileSubscriber + AstFileReferenceInMemoryCache *cache.AstFileReferenceInMemoryCache + TypeResolver *parser.TypeResolver + ReferenceExtractors []extractors.ReferenceExtractorInterface + ParserInterface parser.ParserInterface LayerProvider *LayerProvider.LayerProvider - EventHelper *EventHelper.EventHelper - AllowDependencyHandler *AllowDependencyHandler.AllowDependencyHandler - DependsOnPrivateLayer *DependsOnPrivateLayer.DependsOnPrivateLayer - DependsOnInternalToken *DependsOnInternalToken.DependsOnInternalToken - DependsOnDisallowedLayer *DependsOnDisallowedLayer.DependsOnDisallowedLayer - MatchingLayersHandler *MatchingLayersHandler.MatchingLayersHandler - UncoveredDependentHandler *UncoveredDependentHandler.UncoveredDependentHandler - UnmatchedSkippedViolations *UnmatchedSkippedViolations.UnmatchedSkippedViolations + EventHelper *event_helper.EventHelper + AllowDependencyHandler *process_event.AllowDependencyHandler + DependsOnPrivateLayer *process_event.DependsOnPrivateLayer + DependsOnInternalToken *process_event.DependsOnInternalToken + DependsOnDisallowedLayer *process_event.DependsOnDisallowedLayer + MatchingLayersHandler *process_event.MatchingLayersHandler + UncoveredDependentHandler *process_event.UncoveredDependentHandler + UnmatchedSkippedViolations *post_process_event.UnmatchedSkippedViolations ConsoleSubscriber *ConsoleSubscriber.ConsoleSubscriber ProgressSubscriber *ProgressSubscriber.ProgressSubscriber VerboseBoolFlag *bool @@ -82,20 +64,20 @@ type ContainerBuilder struct { Style *Style.Style SymfonyOutput *SymfonyOutput.SymfonyOutput TimeStopwatch *TimeStopwatch.Stopwatch - AstMapExtractor *AstMapExtractor.AstMapExtractor - InheritanceFlattener *InheritanceFlattener.InheritanceFlattener - DependencyResolver *DependencyResolver.DependencyResolver - TokenResolver *TokenResolver.TokenResolver - CollectorResolver *CollectorResolver.CollectorResolver - LayerResolver LayerResolverInterface.LayerResolverInterface - NikicPhpParser *NikicPhpParser.NikicPhpParser - CollectorProvider *CollectorProvider.CollectorProvider - DependencyLayersAnalyser *DependencyLayersAnalyser.DependencyLayersAnalyser - TokenInLayerAnalyser *TokenInLayerAnalyser.TokenInLayerAnalyser - LayerForTokenAnalyser *LayerForTokenAnalyser.LayerForTokenAnalyser - UnassignedTokenAnalyser *UnassignedTokenAnalyser.UnassignedTokenAnalyser - LayerDependenciesAnalyser *LayerDependenciesAnalyser.LayerDependenciesAnalyser - RulesetUsageAnalyser *RulesetUsageAnalyser.RulesetUsageAnalyser + AstMapExtractor *ast.AstMapExtractor + InheritanceFlattener *dependency.InheritanceFlattener + DependencyResolver *dependency_resolver.DependencyResolver + TokenResolver *dependency.TokenResolver + CollectorResolver *collector.CollectorResolver + LayerResolver layer_resolver_interface.LayerResolverInterface + NikicPhpParser *nikic_php_parser.NikicPhpParser + CollectorProvider *collector.CollectorProvider + DependencyLayersAnalyser *analyser.DependencyLayersAnalyser + TokenInLayerAnalyser *analyser.TokenInLayerAnalyser + LayerForTokenAnalyser *analyser.LayerForTokenAnalyser + UnassignedTokenAnalyser *analyser.UnassignedTokenAnalyser + LayerDependenciesAnalyser *analyser.LayerDependenciesAnalyser + RulesetUsageAnalyser *analyser.RulesetUsageAnalyser FormatterProvider *FormatterProvider.FormatterProvider FormatterConfiguration *FormatterConfiguration.FormatterConfiguration AnalyseRunner *AnalyseRunner.AnalyseRunner diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go b/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go index cda444b..27cb3ba 100644 --- a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go +++ b/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go @@ -1,8 +1,6 @@ package EventSubscriberInterfaceMapReg import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/PostProcessEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileAnalysedEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileSyntaxErrorEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" @@ -11,6 +9,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostFlattenEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreEmitEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreFlattenEvent" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ProgressSubscriber" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority" @@ -21,8 +21,8 @@ import ( ) func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber.ConsoleSubscriber, progressSubscriber *ProgressSubscriber.ProgressSubscriber, withProgress bool) { - processEvent := &ProcessEvent.ProcessEvent{} - postProcessEvent := &PostProcessEvent.PostProcessEvent{} + processEvent := &process_event.ProcessEvent{} + postProcessEvent := &post_process_event.PostProcessEvent{} preCreateAstMapEvent := &PreCreateAstMapEvent.PreCreateAstMapEvent{} postCreateAstMapEvent := &PostCreateAstMapEvent.PostCreateAstMapEvent{} astFileAnalysedEvent := &AstFileAnalysedEvent.AstFileAnalysedEvent{} diff --git a/pkg/src/supportive/DependencyInjection/cache.go b/pkg/src/supportive/DependencyInjection/cache.go index 8183ee4..d46bb36 100644 --- a/pkg/src/supportive/DependencyInjection/cache.go +++ b/pkg/src/supportive/DependencyInjection/cache.go @@ -1,15 +1,14 @@ package DependencyInjection import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceFileCache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/CacheableFileSubscriber" + Cache2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application/ApplicationVersion" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/ContainerBuilder" ) func Cache(builder *ContainerBuilder.ContainerBuilder) { - builder.AstFileReferenceFileCache = AstFileReferenceFileCache.NewAstFileReferenceFileCache(*builder.CacheFile, ApplicationVersion.Version) + builder.AstFileReferenceFileCache = Cache2.NewAstFileReferenceFileCache(*builder.CacheFile, ApplicationVersion.Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache - builder.CacheableFileSubscriber = CacheableFileSubscriber.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) + builder.CacheableFileSubscriber = Cache2.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) } diff --git a/pkg/src/supportive/DependencyInjection/services.go b/pkg/src/supportive/DependencyInjection/services.go index 5d7d21c..e01d817 100644 --- a/pkg/src/supportive/DependencyInjection/services.go +++ b/pkg/src/supportive/DependencyInjection/services.go @@ -2,9 +2,6 @@ package DependencyInjection import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/EventHelper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/PostProcessEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Analyser/ProcessEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" @@ -13,56 +10,23 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/DependencyLayersAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/PostProcessEvent/UnmatchedSkippedViolations" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/AllowDependencyHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnDisallowedLayer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnInternalToken" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/DependsOnPrivateLayer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/MatchingLayersHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/EventHandler/ProcessEvent/UncoveredDependentHandler" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/LayerDependenciesAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/LayerForTokenAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/RulesetUsageAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/TokenInLayerAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Analyser/UnassignedTokenAnalyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/AstMapExtractor" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Cache/AstFileReferenceInMemoryCache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/Extractors/ReferenceExtractorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/NikicPhpParser/NikicPhpParser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Ast/Parser/TypeResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/DependencyResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/ClassDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/ClassSuperglobalDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/DependencyEmitterInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/FileDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/FunctionCallDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/FunctionDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/FunctionSuperglobalDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/Emitter/UsesDependencyEmitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/InheritanceFlattener" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Dependency/TokenResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/InputCollector/FileInputCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/BoolCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/ClassCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/ClassLikeCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/ClassNameRegexCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/CollectorResolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/ComposerCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/DirectoryCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/FunctionNameCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/GlobCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/InheritanceLevelCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/InheritsCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/InterfaceCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/LayerCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/MethodCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/SuperglobalCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/TraitCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/Collector/UsesCollector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/Layer/LayerResolver" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" + process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + Cache2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/emitter" + "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer" + "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseCommand" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseRunner" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" @@ -104,7 +68,7 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { */ eventDispatcher := EventDispatcher.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) - fileInputCollector, err := FileInputCollector.NewFileInputCollector( + fileInputCollector, err := input_collector.NewFileInputCollector( configuration.Paths, configuration.ExcludeFiles, projectDirectory, @@ -119,12 +83,12 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { /* * AST */ - astFileReferenceInMemoryCache := AstFileReferenceInMemoryCache.NewAstFileReferenceInMemoryCache() + astFileReferenceInMemoryCache := Cache2.NewAstFileReferenceInMemoryCache() if builder.AstFileReferenceCacheInterface == nil { builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache } - typeResolver := TypeResolver.NewTypeResolver() - referenceExtractors := []ReferenceExtractorInterface.ReferenceExtractorInterface{ + typeResolver := parser.NewTypeResolver() + referenceExtractors := []extractors.ReferenceExtractorInterface{ /** TODO: Implement all reference extractors @@ -140,30 +104,30 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { */ } - nikicPhpParser := NikicPhpParser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, referenceExtractors) + nikicPhpParser := nikic_php_parser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, referenceExtractors) parserInterface := nikicPhpParser - astLoader := AstLoader.NewAstLoader(parserInterface, eventDispatcher) + astLoader := ast.NewAstLoader(parserInterface, eventDispatcher) /* * Dependency */ - dependencyEmitters := map[EmitterType.EmitterType]DependencyEmitterInterface.DependencyEmitterInterface{ - EmitterType.ClassToken: ClassDependencyEmitter.NewClassDependencyEmitter(), - EmitterType.ClassSuperGlobalToken: ClassSuperglobalDependencyEmitter.NewClassSuperglobalDependencyEmitter(), - EmitterType.FileToken: FileDependencyEmitter.NewFileDependencyEmitter(), - EmitterType.FunctionToken: FunctionDependencyEmitter.NewFunctionDependencyEmitter(), - EmitterType.FunctionCall: FunctionCallDependencyEmitter.NewFunctionCallDependencyEmitter(), - EmitterType.FunctionSuperGlobalToken: FunctionSuperglobalDependencyEmitter.NewFunctionSuperglobalDependencyEmitter(), - EmitterType.UseToken: UsesDependencyEmitter.NewUsesDependencyEmitter(), + dependencyEmitters := map[EmitterType.EmitterType]emitter.DependencyEmitterInterface{ + EmitterType.ClassToken: emitter.NewClassDependencyEmitter(), + EmitterType.ClassSuperGlobalToken: emitter.NewClassSuperglobalDependencyEmitter(), + EmitterType.FileToken: emitter.NewFileDependencyEmitter(), + EmitterType.FunctionToken: emitter.NewFunctionDependencyEmitter(), + EmitterType.FunctionCall: emitter.NewFunctionCallDependencyEmitter(), + EmitterType.FunctionSuperGlobalToken: emitter.NewFunctionSuperglobalDependencyEmitter(), + EmitterType.UseToken: emitter.NewUsesDependencyEmitter(), } - inheritanceFlattener := InheritanceFlattener.NewInheritanceFlattener() - dependencyResolver := DependencyResolver.NewDependencyResolver(configuration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) - tokenResolver := TokenResolver.NewTokenResolver() + inheritanceFlattener := dependency.NewInheritanceFlattener() + dependencyResolver := dependency_resolver.NewDependencyResolver(configuration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + tokenResolver := dependency.NewTokenResolver() - astMapExtractor := AstMapExtractor.NewAstMapExtractor(fileInputCollector, astLoader) + astMapExtractor := ast.NewAstMapExtractor(fileInputCollector, astLoader) layerProvider := LayerProvider.NewLayerProvider(configuration.Rulesets) - eventHelper := EventHelper.NewEventHelper(configuration.SkipViolations, layerProvider) + eventHelper := event_helper.NewEventHelper(configuration.SkipViolations, layerProvider) /* * Events (before first possible event) @@ -174,18 +138,18 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { EventSubscriberInterfaceMap.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface2.EventSubscriberInterface]]() // Events - uncoveredDependentHandler := UncoveredDependentHandler.NewUncoveredDependentHandler(configuration.IgnoreUncoveredInternalStructs) - matchingLayersHandler := MatchingLayersHandler.NewMatchingLayersHandler() - allowDependencyHandler := AllowDependencyHandler.NewAllowDependencyHandler() + uncoveredDependentHandler := process_event.NewUncoveredDependentHandler(configuration.IgnoreUncoveredInternalStructs) + matchingLayersHandler := process_event.NewMatchingLayersHandler() + allowDependencyHandler := process_event.NewAllowDependencyHandler() consoleSubscriber := ConsoleSubscriber.NewConsoleSubscriber(symfonyOutput, timeStopwatch) progressSubscriber := ProgressSubscriber.NewProgressSubscriber(symfonyOutput) - dependsOnDisallowedLayer := DependsOnDisallowedLayer.NewDependsOnDisallowedLayer(eventHelper) - dependsOnPrivateLayer := DependsOnPrivateLayer.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := DependsOnInternalToken.NewDependsOnInternalToken(eventHelper, configuration.Analyser) - unmatchedSkippedViolations := UnmatchedSkippedViolations.NewUnmatchedSkippedViolations(eventHelper) + dependsOnDisallowedLayer := process_event.NewDependsOnDisallowedLayer(eventHelper) + dependsOnPrivateLayer := process_event.NewDependsOnPrivateLayer(eventHelper) + dependsOnInternalToken := process_event.NewDependsOnInternalToken(eventHelper, configuration.Analyser) + unmatchedSkippedViolations := post_process_event.NewUnmatchedSkippedViolations(eventHelper) - processEvent := &ProcessEvent.ProcessEvent{} - postProcessEvent := &PostProcessEvent.PostProcessEvent{} + processEvent := &process_event2.ProcessEvent{} + postProcessEvent := &post_process_event2.PostProcessEvent{} preCreateAstMapEvent := &PreCreateAstMapEvent.PreCreateAstMapEvent{} postCreateAstMapEvent := &PostCreateAstMapEvent.PostCreateAstMapEvent{} // Events Handlers @@ -205,55 +169,55 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { /* * Layer */ - inheritanceLevelCollector, err := InheritanceLevelCollector.NewInheritanceLevelCollector(astMapExtractor) + inheritanceLevelCollector, err := collector.NewInheritanceLevelCollector(astMapExtractor) if err != nil { return err } - inheritsCollector, err := InheritsCollector.NewInheritsCollector(astMapExtractor) + inheritsCollector, err := collector.NewInheritsCollector(astMapExtractor) if err != nil { return err } - usesCollector, err := UsesCollector.NewUsesCollector(astMapExtractor) + usesCollector, err := collector.NewUsesCollector(astMapExtractor) if err != nil { return err } - collectorProvider := CollectorProvider.NewCollectorProvider() - collectorResolver := CollectorResolver.NewCollectorResolver(collectorProvider) - layerResolver := LayerResolver.NewLayerResolver(collectorResolver, configuration.Layers) + collectorProvider := collector.NewCollectorProvider() + collectorResolver := collector.NewCollectorResolver(collectorProvider) + layerResolver := layer.NewLayerResolver(collectorResolver, configuration.Layers) collectors := map[CollectorType.CollectorType]CollectorInterface.CollectorInterface{ //AttributeCollector - CollectorType.TypeBool: BoolCollector.NewBoolCollector(collectorResolver), - CollectorType.TypeClass: ClassCollector.NewClassCollector(), - CollectorType.TypeClasslike: ClassLikeCollector.NewClassLikeCollector(), - CollectorType.TypeClassNameRegex: ClassNameRegexCollector.NewClassNameRegexCollector(), + CollectorType.TypeBool: collector.NewBoolCollector(collectorResolver), + CollectorType.TypeClass: collector.NewClassCollector(), + CollectorType.TypeClasslike: collector.NewClassLikeCollector(), + CollectorType.TypeClassNameRegex: collector.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - CollectorType.TypeDirectory: DirectoryCollector.NewDirectoryCollector(), + CollectorType.TypeDirectory: collector.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - CollectorType.TypeFunctionName: FunctionNameCollector.NewFunctionNameCollector(), - CollectorType.TypeGlob: GlobCollector.NewGlobCollector(projectDirectory), + CollectorType.TypeFunctionName: collector.NewFunctionNameCollector(), + CollectorType.TypeGlob: collector.NewGlobCollector(projectDirectory), //ImplementsCollector CollectorType.TypeInheritance: inheritanceLevelCollector, - CollectorType.TypeInterface: InterfaceCollector.NewInterfaceCollector(), + CollectorType.TypeInterface: collector.NewInterfaceCollector(), CollectorType.TypeInherits: inheritsCollector, - CollectorType.TypeLayer: LayerCollector.NewLayerCollector(layerResolver), - CollectorType.TypeMethod: MethodCollector.NewMethodCollector(nikicPhpParser), - CollectorType.TypeSuperGlobal: SuperglobalCollector.NewSuperglobalCollector(), - CollectorType.TypeTrait: TraitCollector.NewTraitCollector(), + CollectorType.TypeLayer: collector.NewLayerCollector(layerResolver), + CollectorType.TypeMethod: collector.NewMethodCollector(nikicPhpParser), + CollectorType.TypeSuperGlobal: collector.NewSuperglobalCollector(), + CollectorType.TypeTrait: collector.NewTraitCollector(), CollectorType.TypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - CollectorType.TypeComposer: ComposerCollector.NewComposerCollector(), + CollectorType.TypeComposer: collector.NewComposerCollector(), } collectorProvider.Set(collectors) /* * SetAnalyser */ - dependencyLayersAnalyser := DependencyLayersAnalyser.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := TokenInLayerAnalyser.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) - layerForTokenAnalyser := LayerForTokenAnalyser.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := UnassignedTokenAnalyser.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) - layerDependenciesAnalyser := LayerDependenciesAnalyser.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := RulesetUsageAnalyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, configuration.Layers) + dependencyLayersAnalyser := analyser.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + tokenInLayerAnalyser := analyser.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) + layerForTokenAnalyser := analyser.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := analyser.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) + layerDependenciesAnalyser := analyser.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + rulesetUsageAnalyser := analyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, configuration.Layers) /* * OutputFormatter From a82088ece8bff8a17ffe0f551c15c53ffc9264ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 23 Aug 2024 08:39:14 +0300 Subject: [PATCH 02/40] chore: refactor(remove php in contract/ast) --- .../AstFileAnalysedEvent.php | 15 ------- .../AstFileSyntaxErrorEvent.php | 15 ------- .../CouldNotParseFileException.php | 18 -------- .../DependencyContext/DependencyContext.go | 16 ------- .../DependencyContext/DependencyContext.php | 18 -------- .../Ast/DependencyType/DependencyType.php | 35 ---------------- .../Ast/FileOccurrence/FileOccurrence.php | 16 ------- .../PostCreateAstMapEvent.php | 12 ------ .../PreCreateAstMapEvent.php | 15 ------- .../TaggedTokenReferenceInterface.php | 16 ------- .../Ast/TokenInterface/TokenInterface.php | 12 ------ .../TokenReferenceInterface.go | 11 ----- .../TokenReferenceInterface.php | 13 ------ .../DependencyInterface.go | 9 ++-- .../CollectorInterface/CollectorInterface.go | 6 ++- .../analyser/process_event/process_event.go | 10 ++--- .../ast_file_analysed_event.go} | 2 +- .../ast_file_syntax_error_event.go} | 2 +- .../could_not_parse_file_exception.go} | 2 +- pkg/src/contract/ast/dependency_context.go | 11 +++++ .../dependency_type.go} | 2 +- .../file_occurrence.go} | 2 +- .../post_create_ast_map_event.go} | 2 +- .../pre_create_ast_map_event.go} | 2 +- .../tagged_token_reference_interface.go} | 6 +-- .../token_interface.go} | 2 +- .../contract/ast/token_reference_interface.go | 7 ++++ ..._reference_with_dependencies_interface.go} | 6 +-- pkg/src/core/analyser/analyser_exception.go | 4 +- .../core/analyser/layer_for_token_analyser.go | 4 +- pkg/src/core/ast/ast_loader.go | 13 +++--- pkg/src/core/ast/ast_map/ast_inherit.go | 6 +-- .../core/ast/ast_map/class_like_reference.go | 4 +- .../ast_map/class_like_reference_builder.go | 8 ++-- pkg/src/core/ast/ast_map/dependency_token.go | 9 ++-- pkg/src/core/ast/ast_map/file_reference.go | 4 +- .../ast/ast_map/file_reference_builder.go | 4 +- .../core/ast/ast_map/function_reference.go | 4 +- pkg/src/core/ast/ast_map/reference_builder.go | 42 +++++++++---------- .../core/ast/ast_map/variable_reference.go | 4 +- .../parser/cache/cacheable_file_subscriber.go | 7 ++-- pkg/src/core/dependency/dependency.go | 17 ++++---- .../emitter/class_dependency_emitter.go | 9 ++-- .../class_superglobal_dependency_emitter.go | 4 +- .../emitter/file_dependency_emitter.go | 6 +-- .../function_call_dependency_emitter.go | 16 +++---- .../emitter/function_dependency_emitter.go | 6 +-- ...function_superglobal_dependency_emitter.go | 4 +- .../emitter/uses_dependency_emitter.go | 7 ++-- pkg/src/core/dependency/inherit_dependency.go | 13 +++--- pkg/src/core/dependency/token_resolver.go | 5 +-- .../unrecognized_token_exception.go | 4 +- .../collector/abstract_type_collector.go | 4 +- .../core/layer/collector/bool_collector.go | 4 +- .../collector/class_name_regex_collector.go | 4 +- .../layer/collector/composer_collector.go | 4 +- .../layer/collector/directory_collector.go | 4 +- .../collector/function_name_collector.go | 4 +- .../core/layer/collector/glob_collector.go | 4 +- .../collector/inheritance_level_collector.go | 4 +- .../layer/collector/inherits_collector.go | 4 +- .../core/layer/collector/layer_collector.go | 4 +- .../core/layer/collector/method_collector.go | 4 +- .../layer/collector/superglobal_collector.go | 4 +- .../core/layer/collector/uses_collector.go | 4 +- pkg/src/core/layer/layer_resolver.go | 6 +-- .../layer_resolver_interface.go | 8 ++-- .../ConsoleSubscriber/ConsoleSubscriber.go | 13 +++--- .../ProgressSubscriber/ProgressSubscriber.go | 10 ++--- .../EventSubscriberInterfaceMapReg.go | 13 +++--- .../DependencyInjection/services.go | 7 ++-- 71 files changed, 191 insertions(+), 405 deletions(-) delete mode 100644 pkg/src/contract/Ast/AstFileAnalysedEvent/AstFileAnalysedEvent.php delete mode 100644 pkg/src/contract/Ast/AstFileSyntaxErrorEvent/AstFileSyntaxErrorEvent.php delete mode 100644 pkg/src/contract/Ast/CouldNotParseFileException/CouldNotParseFileException.php delete mode 100644 pkg/src/contract/Ast/DependencyContext/DependencyContext.go delete mode 100644 pkg/src/contract/Ast/DependencyContext/DependencyContext.php delete mode 100644 pkg/src/contract/Ast/DependencyType/DependencyType.php delete mode 100644 pkg/src/contract/Ast/FileOccurrence/FileOccurrence.php delete mode 100644 pkg/src/contract/Ast/PostCreateAstMapEvent/PostCreateAstMapEvent.php delete mode 100644 pkg/src/contract/Ast/PreCreateAstMapEvent/PreCreateAstMapEvent.php delete mode 100644 pkg/src/contract/Ast/TaggedTokenReferenceInterface/TaggedTokenReferenceInterface.php delete mode 100644 pkg/src/contract/Ast/TokenInterface/TokenInterface.php delete mode 100644 pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceInterface.go delete mode 100644 pkg/src/contract/Ast/TokenReferenceInterface/TokenReferenceInterface.php rename pkg/src/contract/{Ast/AstFileAnalysedEvent/AstFileAnalysedEvent.go => ast/ast_file_analysed_event.go} (89%) rename pkg/src/contract/{Ast/AstFileSyntaxErrorEvent/AstFileSyntaxErrorEvent.go => ast/ast_file_syntax_error_event.go} (91%) rename pkg/src/contract/{Ast/CouldNotParseFileException/CouldNotParseFileException.go => ast/could_not_parse_file_exception.go} (92%) create mode 100644 pkg/src/contract/ast/dependency_context.go rename pkg/src/contract/{Ast/DependencyType/DependencyType.go => ast/dependency_type.go} (98%) rename pkg/src/contract/{Ast/FileOccurrence/FileOccurrence.go => ast/file_occurrence.go} (91%) rename pkg/src/contract/{Ast/PostCreateAstMapEvent/PostCreateAstMapEvent.go => ast/post_create_ast_map_event.go} (88%) rename pkg/src/contract/{Ast/PreCreateAstMapEvent/PreCreateAstMapEvent.go => ast/pre_create_ast_map_event.go} (91%) rename pkg/src/contract/{Ast/TaggedTokenReferenceInterface/TaggedTokenReferenceInterface.go => ast/tagged_token_reference_interface.go} (55%) rename pkg/src/contract/{Ast/TokenInterface/TokenInterface.go => ast/token_interface.go} (86%) create mode 100644 pkg/src/contract/ast/token_reference_interface.go rename pkg/src/contract/{Ast/TokenReferenceInterface/TokenReferenceWithDependenciesInterface/TokenReferenceWithDependenciesInterface.go => ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go} (50%) diff --git a/pkg/src/contract/Ast/AstFileAnalysedEvent/AstFileAnalysedEvent.php b/pkg/src/contract/Ast/AstFileAnalysedEvent/AstFileAnalysedEvent.php deleted file mode 100644 index a4794ec..0000000 --- a/pkg/src/contract/Ast/AstFileAnalysedEvent/AstFileAnalysedEvent.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - public function getTagLines(string $name) : ?array; -} diff --git a/pkg/src/contract/Ast/TokenInterface/TokenInterface.php b/pkg/src/contract/Ast/TokenInterface/TokenInterface.php deleted file mode 100644 index 585ece0..0000000 --- a/pkg/src/contract/Ast/TokenInterface/TokenInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -%d Files.", event.ExpectedFileCount)}) } - case *PostCreateAstMapEvent.PostCreateAstMapEvent: + case *ast.PostCreateAstMapEvent: if s.output.IsVerbose() { s.printMessageWithTime("ast", "AstMap created in %01.2f sec.", "AstMap created.") } - case *AstFileAnalysedEvent.AstFileAnalysedEvent: + case *ast.AstFileAnalysedEvent: if s.output.IsVerbose() { s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } - case *AstFileSyntaxErrorEvent.AstFileSyntaxErrorEvent: + case *ast.AstFileSyntaxErrorEvent: s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) case *PreEmitEvent.PreEmitEvent: if s.output.IsVerbose() { diff --git a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go b/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go index 23fc654..4252439 100644 --- a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go +++ b/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go @@ -1,11 +1,9 @@ package ProgressSubscriber import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileAnalysedEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" ) type ProgressSubscriber struct { @@ -20,14 +18,14 @@ func NewProgressSubscriber(output OutputInterface.OutputInterface) *ProgressSubs func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { switch event := rawEvent.(type) { - case *PreCreateAstMapEvent.PreCreateAstMapEvent: + case *ast.PreCreateAstMapEvent: s.output.GetStyle().ProgressStart(event.ExpectedFileCount) - case *PostCreateAstMapEvent.PostCreateAstMapEvent: + case *ast.PostCreateAstMapEvent: err := s.output.GetStyle().ProgressFinish() if err != nil { return err } - case *AstFileAnalysedEvent.AstFileAnalysedEvent: + case *ast.AstFileAnalysedEvent: err := s.output.GetStyle().ProgressAdvance(OutputStyleInterface.ProgressAdvanceDefault) if err != nil { return err diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go b/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go index 27cb3ba..166d877 100644 --- a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go +++ b/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go @@ -1,16 +1,13 @@ package EventSubscriberInterfaceMapReg import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileAnalysedEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/AstFileSyntaxErrorEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostEmitEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostFlattenEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreEmitEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreFlattenEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ProgressSubscriber" "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority" @@ -23,10 +20,10 @@ import ( func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber.ConsoleSubscriber, progressSubscriber *ProgressSubscriber.ProgressSubscriber, withProgress bool) { processEvent := &process_event.ProcessEvent{} postProcessEvent := &post_process_event.PostProcessEvent{} - preCreateAstMapEvent := &PreCreateAstMapEvent.PreCreateAstMapEvent{} - postCreateAstMapEvent := &PostCreateAstMapEvent.PostCreateAstMapEvent{} - astFileAnalysedEvent := &AstFileAnalysedEvent.AstFileAnalysedEvent{} - astFileSyntaxErrorEvent := &AstFileSyntaxErrorEvent.AstFileSyntaxErrorEvent{} + preCreateAstMapEvent := &ast.PreCreateAstMapEvent{} + postCreateAstMapEvent := &ast.PostCreateAstMapEvent{} + astFileAnalysedEvent := &ast.AstFileAnalysedEvent{} + astFileSyntaxErrorEvent := &ast.AstFileSyntaxErrorEvent{} preEmitEvent := &PreEmitEvent.PreEmitEvent{} postEmitEvent := &PostEmitEvent.PostEmitEvent{} preFlattenEvent := &PreFlattenEvent.PreFlattenEvent{} diff --git a/pkg/src/supportive/DependencyInjection/services.go b/pkg/src/supportive/DependencyInjection/services.go index e01d817..2ff5971 100644 --- a/pkg/src/supportive/DependencyInjection/services.go +++ b/pkg/src/supportive/DependencyInjection/services.go @@ -2,8 +2,6 @@ package DependencyInjection import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PostCreateAstMapEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Ast/PreCreateAstMapEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CollectorInterface" @@ -13,6 +11,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" @@ -150,8 +149,8 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { processEvent := &process_event2.ProcessEvent{} postProcessEvent := &post_process_event2.PostProcessEvent{} - preCreateAstMapEvent := &PreCreateAstMapEvent.PreCreateAstMapEvent{} - postCreateAstMapEvent := &PostCreateAstMapEvent.PostCreateAstMapEvent{} + preCreateAstMapEvent := &astContract.PreCreateAstMapEvent{} + postCreateAstMapEvent := &astContract.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" EventSubscriberInterfaceMapReg.Reg(processEvent, allowDependencyHandler, -100) From 7b4b57989ea2ab842fdbd453c427770831e5b9eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 23 Aug 2024 23:22:46 +0300 Subject: [PATCH 03/40] chore: refactor(remove php) --- cmd/go-deptrac/main.go | 4 +- deptrac.yaml | 20 +-- pkg/config/analyse_options_hook.go | 8 +- .../Config/AnalyserConfig/AnalyserConfig.php | 42 ----- .../CodeclimateLevelEnum.php | 12 -- .../AttributeConfig/AttributeConfig.go | 18 -- .../AttributeConfig/AttributeConfig.php | 10 -- .../Config/Collector/BoolConfig/BoolConfig.go | 32 ---- .../Collector/BoolConfig/BoolConfig.php | 49 ----- .../Collector/ClassConfig/ClassConfig.go | 18 -- .../Collector/ClassConfig/ClassConfig.php | 10 -- .../ClassLikeConfig/ClassLikeConfig.go | 18 -- .../ClassLikeConfig/ClassLikeConfig.php | 10 -- .../ClassNameRegexConfig.go | 18 -- .../ClassNameRegexConfig.php | 10 -- .../ComposerConfig/ComposerConfig.php | 42 ----- .../DirectoryConfig/DirectoryConfig.go | 18 -- .../DirectoryConfig/DirectoryConfig.php | 10 -- .../Collector/ExtendsConfig/ExtendsConfig.go | 18 -- .../Collector/ExtendsConfig/ExtendsConfig.php | 10 -- .../FunctionNameConfig/FunctionNameConfig.go | 18 -- .../FunctionNameConfig/FunctionNameConfig.php | 10 -- .../Config/Collector/GlobConfig/GlobConfig.go | 18 -- .../Collector/GlobConfig/GlobConfig.php | 10 -- .../ImplementsConfig/ImplementsConfig.go | 18 -- .../ImplementsConfig/ImplementsConfig.php | 10 -- .../InheritsConfig/InheritsConfig.go | 18 -- .../InheritsConfig/InheritsConfig.php | 10 -- .../InterfaceConfig/InterfaceConfig.go | 18 -- .../InterfaceConfig/InterfaceConfig.php | 10 -- .../Collector/LayerConfig/LayerConfig.go | 18 -- .../Collector/LayerConfig/LayerConfig.php | 10 -- .../Collector/MethodConfig/MethodConfig.go | 18 -- .../Collector/MethodConfig/MethodConfig.php | 10 -- .../PhpInteralConfig/PhpInteralConfig.go | 18 -- .../PhpInteralConfig/PhpInteralConfig.php | 10 -- .../SuperGlobalConfig/SuperGlobalConfig.php | 27 --- .../TagValueRegexConfig.php | 26 --- .../Collector/TraitConfig/TraitConfig.go | 18 -- .../Collector/TraitConfig/TraitConfig.php | 10 -- .../Config/Collector/UsesConfig/UsesConfig.go | 18 -- .../Collector/UsesConfig/UsesConfig.php | 10 -- .../CollectorConfig/CollectorConfig.php | 20 --- .../Config/CollectorType/CollectorType.php | 30 ---- .../ConfigurableCollectorConfig.php | 29 --- .../Config/DeptracConfig/DeptracConfig.php | 126 ------------- .../Config/EmitterType/EmitterType.php | 22 --- .../CodeclimateConfig/CodeclimateConfig.go | 69 ------- .../CodeclimateConfig/CodeclimateConfig.php | 33 ---- .../FormatterConfigInterface.go | 8 - .../FormatterConfigInterface.php | 11 -- .../GraphvizConfig/GraphvizConfig.php | 57 ------ .../MermaidJsConfig/MermaidJsConfig.php | 42 ----- pkg/src/contract/Config/Layer/Layer.php | 33 ---- pkg/src/contract/Config/Ruleset/Ruleset.php | 34 ---- .../DependencyInterface.php | 20 --- .../PostEmitEvent/PostEmitEvent.php | 12 -- .../PostFlattenEvent/PostFlattenEvent.php | 14 -- .../Dependency/PreEmitEvent/PreEmitEvent.php | 15 -- .../PreFlattenEvent/PreFlattenEvent.php | 14 -- .../ExceptionInterface/ExceptionInterface.php | 15 -- .../CircularReferenceException.php | 27 --- .../CollectorInterface/CollectorInterface.php | 21 --- .../InvalidCollectorDefinitionException.php | 37 ---- .../InvalidLayerDefinitionException.php | 36 ---- .../Layer/LayerProvider/LayerProvider.php | 48 ----- .../OutputException/OutputException.php | 17 -- .../OutputFormatterInput.php | 14 -- .../OutputFormatterInterface.go | 16 -- .../OutputFormatterInterface.php | 22 --- .../OutputInterface/OutputInterface.go | 15 -- .../OutputInterface/OutputInterface.php | 20 --- .../OutputStyleInterface.php | 47 ----- pkg/src/contract/Result/Allowed/Allowed.php | 29 --- .../CoveredRuleInterface.php | 18 -- pkg/src/contract/Result/Error/Error.php | 19 -- .../Result/OutputResult/OutputResult.go | 118 ------------ .../Result/OutputResult/OutputResult.php | 95 ---------- .../Result/RuleInterface/RuleInterface.go | 8 - .../Result/RuleInterface/RuleInterface.php | 15 -- .../Result/RuleTypeEnum/RuleTypeEnum.go | 34 ---- .../SkippedViolation/SkippedViolation.php | 29 --- .../contract/Result/Uncovered/Uncovered.go | 20 --- .../contract/Result/Uncovered/Uncovered.php | 21 --- .../contract/Result/Violation/Violation.php | 38 ---- pkg/src/contract/Result/Warning/Warning.php | 29 --- .../analysis_result/AnalysisResult.php | 64 ------- .../analysis_result/analysis_result.go | 37 ++-- .../analyser/event_helper/EventHelper.php | 55 ------ .../analyser/event_helper/event_helper.go | 13 +- .../post_process_event/PostProcessEvent.php | 26 --- .../analyser/process_event/ProcessEvent.php | 30 ---- .../analyser/process_event/process_event.go | 2 +- .../ViolationCreatingInterface.php | 22 --- .../analyser_config.go} | 18 +- .../codeclimate_level_enum.go} | 2 +- .../config/collector/attribute_config.go | 17 ++ .../contract/config/collector/bool_config.go | 31 ++++ .../contract/config/collector/class_config.go | 17 ++ .../config/collector/class_like_config.go | 17 ++ .../collector/class_name_regex_config.go | 17 ++ .../collector/composer_config.go} | 13 +- .../config/collector/directory_config.go | 17 ++ .../config/collector/extends_config.go | 17 ++ .../config/collector/function_name_config.go | 17 ++ .../contract/config/collector/glob_config.go | 17 ++ .../config/collector/implements_config.go | 17 ++ .../config/collector/inherits_config.go | 17 ++ .../config/collector/interface_config.go | 17 ++ .../contract/config/collector/layer_config.go | 17 ++ .../config/collector/method_config.go | 17 ++ .../config/collector/php_interal_config.go | 17 ++ .../collector/super_global_config.go} | 13 +- .../collector/tag_value_regex_config.go} | 13 +- .../contract/config/collector/trait_config.go | 17 ++ .../contract/config/collector/uses_config.go | 17 ++ .../collector_config.go} | 10 +- .../collector_type.go} | 2 +- .../configurable_collector_config.go} | 7 +- .../deptrac_config/deptrac_config.go} | 90 +++++----- .../EmitterType.go => config/emitter_type.go} | 2 +- .../DeptracConfig => config}/example.yaml | 0 .../config/formatter/codeclimate_config.go | 68 +++++++ .../formatter/formatter_config_interface.go | 6 + .../formatter/formatter_type.go} | 2 +- .../formatter/graphviz_config.go} | 21 ++- .../formatter/mermaid_js_config.go} | 15 +- .../Layer/Layer.go => config/layer.go} | 12 +- .../Ruleset/Ruleset.go => config/ruleset.go} | 16 +- .../dependency_interface.go} | 2 +- .../post_emit_event.go} | 2 +- .../post_flatten_event.go} | 2 +- .../pre_emit_event.go} | 2 +- .../pre_flatten_event.go} | 2 +- ...ionInterface.go => exception_interface.go} | 2 +- .../circular_reference_exception.go} | 2 +- .../collector_interface.go} | 2 +- ...invalid_collector_definition_exception.go} | 6 +- .../invalid_layer_definition_exception.go} | 2 +- .../layer_provider.go} | 11 +- .../output_exception.go} | 2 +- .../output_formatter_input.go} | 2 +- .../output_formatter_interface.go | 13 ++ .../output_formatter_type.go} | 2 +- .../output_formatter/output_interface.go | 11 ++ .../output_style_interface.go} | 2 +- .../Allowed/Allowed.go => result/allowed.go} | 12 +- .../covered_rule_interface.go} | 2 +- .../Error/Error.go => result/error.go} | 2 +- .../result/output_result/output_result.go | 111 ++++++++++++ pkg/src/contract/result/rule_interface.go | 10 ++ pkg/src/contract/result/rule_type_enum.go | 29 +++ .../skipped_violation.go} | 12 +- pkg/src/contract/result/uncovered.go | 22 +++ .../Violation.go => result/violation.go} | 10 +- .../Warning/Warning.go => result/warning.go} | 2 +- pkg/src/core/analyser/analyser_exception.go | 10 +- .../analyser/dependency_layers_analyser.go | 18 +- .../unmatched_skipped_violations.go | 4 +- .../process_event/allow_dependency_handler.go | 4 +- .../depends_on_disallowed_layer.go | 4 +- .../depends_on_internal_token.go | 4 +- .../process_event/matching_layers_handler.go | 4 +- .../uncovered_dependent_handler.go | 4 +- .../analyser/layer_dependencies_analyser.go | 14 +- .../core/analyser/ruleset_usage_analyser.go | 12 +- .../core/analyser/token_in_layer_analyser.go | 6 +- pkg/src/core/analyser/token_type.go | 8 +- .../analyser/unassigned_token_analyser.go | 6 +- pkg/src/core/ast/ast_loader.go | 2 +- .../cache/ast_file_reference_file_cache.go | 4 +- pkg/src/core/dependency/dependency_list.go | 16 +- .../dependency_resolver.go | 24 ++- pkg/src/core/dependency/inherit_dependency.go | 6 +- ...invalid_emitter_configuration_exception.go | 6 +- .../input_collector/file_input_collector.go | 10 +- .../collector/abstract_type_collector.go | 4 +- .../core/layer/collector/bool_collector.go | 10 +- .../collector/class_name_regex_collector.go | 4 +- pkg/src/core/layer/collector/collectable.go | 8 +- .../layer/collector/collector_provider.go | 14 +- .../layer/collector/collector_resolver.go | 12 +- .../layer/collector/composer_collector.go | 8 +- .../layer/collector/directory_collector.go | 4 +- .../collector/function_name_collector.go | 4 +- .../core/layer/collector/glob_collector.go | 4 +- .../collector/inheritance_level_collector.go | 4 +- .../layer/collector/inherits_collector.go | 4 +- .../core/layer/collector/layer_collector.go | 25 ++- .../core/layer/collector/method_collector.go | 4 +- .../core/layer/collector/regex_collector.go | 4 +- .../layer/collector/superglobal_collector.go | 4 +- .../core/layer/collector/uses_collector.go | 4 +- pkg/src/core/layer/layer_resolver.go | 6 +- .../Console/Application/Application.php | 79 -------- ...notGetCurrentWorkingDirectoryException.php | 18 -- .../Command/AnalyseCommand/AnalyseCommand.go | 94 ---------- .../Command/AnalyseCommand/AnalyseCommand.php | 67 ------- .../Command/AnalyseOptions/AnalyseOptions.php | 10 -- .../Command/AnalyseRunner/AnalyseRunner.go | 117 ------------ .../Command/AnalyseRunner/AnalyseRunner.php | 94 ---------- .../CommandRunException.php | 31 ---- pkg/src/supportive/Console/Env/Env.php | 15 -- .../ConsoleSubscriber/ConsoleSubscriber.go | 94 ---------- .../ConsoleSubscriber/ConsoleSubscriber.php | 104 ----------- .../ProgressSubscriber/ProgressSubscriber.php | 35 ---- .../Console/Symfony/Style/Style.php | 86 --------- .../Symfony/SymfonyOutput/SymfonyOutput.php | 44 ----- .../EventSubscriberInterfaceMap.go | 8 - pkg/src/supportive/File/Dumper/Dumper.php | 46 ----- .../CouldNotReadFileException.php | 14 -- .../FileAlreadyExistsException.php | 17 -- .../FileCannotBeParsedAsYamlException.php | 18 -- .../FileNotExistsException.php | 14 -- .../FileNotWritableException.php | 17 -- .../Exception/IOException/IOException.php | 14 -- .../InvalidPathException.php | 17 -- .../ParsedYamlIsNotAnArrayException.php | 17 -- .../supportive/File/FileReader/FileReader.go | 14 -- .../supportive/File/FileReader/FileReader.php | 20 --- .../File/YmlFileLoader/YmlFileLoader.php | 35 ---- .../ConfigurationCodeclimate.php | 25 --- .../ConfigurationGraphViz.php | 22 --- .../FormatterConfiguration.go | 18 -- .../FormatterConfiguration.php | 21 --- .../FormatterProvider/FormatterProvider.go | 38 ---- .../FormatterProvider/FormatterProvider.php | 41 ----- .../GithubActionsOutputFormatter.go | 126 ------------- .../GithubActionsOutputFormatter.php | 85 --------- .../TableOutputFormatter.php | 128 ------------- pkg/src/supportive/TimeStopwatch/Period.php | 27 --- .../TimeStopwatch/StartedPeriod.php | 22 --- .../supportive/TimeStopwatch/Stopwatch.php | 55 ------ .../TimeStopwatch/StopwatchException.php | 19 -- .../application/application.go} | 10 +- .../application/application_test.go} | 2 +- .../application_version.go} | 2 +- ...et_current_working_directory_exception.go} | 2 +- .../command}/ChangedFilesCommand.php | 0 .../command}/ChangedFilesRunner.php | 0 .../command}/DebugDependenciesCommand.php | 0 .../command}/DebugDependenciesRunner.php | 0 .../command}/DebugLayerCommand.php | 0 .../command}/DebugLayerRunner.php | 0 .../command}/DebugTokenCommand.php | 0 .../command}/DebugTokenRunner.php | 0 .../command}/DebugUnassignedCommand.php | 0 .../command}/DebugUnassignedRunner.php | 0 .../command}/DebugUnusedCommand.php | 0 .../command}/DebugUnusedRunner.php | 0 .../command}/InitCommand.php | 0 .../console/command/analyse_command.go | 88 +++++++++ .../command/analyse_options.go} | 2 +- .../console/command/analyse_runner.go | 112 ++++++++++++ .../command/command_run_exception.go} | 2 +- .../{Console/Env/Env.go => console/env.go} | 2 +- .../console/subscriber/console_subscriber.go | 90 ++++++++++ .../subscriber/progress_subscriber.go} | 11 +- .../Style.go => console/symfony/style.go} | 16 +- .../symfony/symfony_output.go} | 12 +- .../Configuration.php | 0 .../DeptracExtension.php | 0 .../CacheFileException/CacheFileException.go | 0 .../CacheFileException/CacheFileException.php | 0 .../CannotLoadConfiguration.go | 0 .../CannotLoadConfiguration.php | 0 .../InvalidServiceInLocatorException.go | 4 +- .../InvalidServiceInLocatorException.php | 0 .../ServiceContainerBuilder.go | 28 +-- .../ServiceContainerBuilder.php | 0 .../cache.go | 10 +- .../cache.php | 0 .../container_builder/container_builder.go} | 56 +++--- .../event_dispatcher_interface.go} | 8 +- .../event_dispatcher_interface.go} | 0 .../event_subscriber_default_priority.go} | 0 .../event_subscriber_interface.go} | 2 +- .../event_subscriber_interface_map.go | 8 + .../event_subscriber_interface_map_reg.go} | 32 ++-- .../services.go | 169 +++++++++--------- .../services.php | 0 .../{File/Dumper/Dumper.go => file/dumper.go} | 2 +- .../could_not_read_file_exception.go} | 2 +- .../file_already_exists_exception.go} | 2 +- ...ile_cannot_be_parsed_as_yaml_exception.go} | 2 +- .../exception/file_not_exists_exception.go} | 2 +- .../exception/file_not_writable_exception.go} | 2 +- .../exception/i_o_exception.go} | 2 +- .../exception/invalid_path_exception.go} | 2 +- .../parsed_yaml_is_not_an_array_exception.go} | 2 +- pkg/src/supportive/file/file_reader.go | 14 ++ .../yml_file_loader.go} | 9 +- .../BaselineOutputFormatter.php | 0 .../CodeclimateOutputFormatter.php | 0 .../ConsoleOutputFormatter.php | 0 .../GraphVizOutputDisplayFormatter.php | 0 .../GraphVizOutputDotFormatter.php | 0 .../GraphVizOutputFormatter.php | 0 .../GraphVizOutputHtmlFormatter.php | 0 .../GraphVizOutputImageFormatter.php | 0 .../JUnitOutputFormatter.php | 0 .../JsonOutputFormatter.php | 0 .../MermaidJSOutputFormatter.php | 0 .../XMLOutputFormatter.php | 0 .../configuration_codeclimate.go} | 2 +- .../configuration/configuration_graph_viz.go} | 2 +- .../configuration/formatter_configuration.go | 17 ++ .../output_formatter/formatter_provider.go | 37 ++++ .../github_actions_output_formatter.go | 120 +++++++++++++ .../table_output_formatter.go} | 48 +++-- .../table_output_formatter_test.go} | 2 +- .../Period.go => time_stopwatch/period.go} | 2 +- .../started_period.go} | 2 +- .../stopwatch.go} | 2 +- .../stopwatch_exception.go} | 2 +- .../examples/simple-cleanarch/run_test.go | 4 +- .../examples/simple-invalid-mvc/run_test.go | 4 +- .../examples/simple-mvc/run_test.go | 4 +- 318 files changed, 1614 insertions(+), 4650 deletions(-) delete mode 100644 pkg/src/contract/Config/AnalyserConfig/AnalyserConfig.php delete mode 100644 pkg/src/contract/Config/CodeclimateLevelEnum/CodeclimateLevelEnum.php delete mode 100644 pkg/src/contract/Config/Collector/AttributeConfig/AttributeConfig.go delete mode 100644 pkg/src/contract/Config/Collector/AttributeConfig/AttributeConfig.php delete mode 100644 pkg/src/contract/Config/Collector/BoolConfig/BoolConfig.go delete mode 100644 pkg/src/contract/Config/Collector/BoolConfig/BoolConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.go delete mode 100644 pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ClassLikeConfig/ClassLikeConfig.go delete mode 100644 pkg/src/contract/Config/Collector/ClassLikeConfig/ClassLikeConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ClassNameRegexConfig/ClassNameRegexConfig.go delete mode 100644 pkg/src/contract/Config/Collector/ClassNameRegexConfig/ClassNameRegexConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ComposerConfig/ComposerConfig.php delete mode 100644 pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.go delete mode 100644 pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ExtendsConfig/ExtendsConfig.go delete mode 100644 pkg/src/contract/Config/Collector/ExtendsConfig/ExtendsConfig.php delete mode 100644 pkg/src/contract/Config/Collector/FunctionNameConfig/FunctionNameConfig.go delete mode 100644 pkg/src/contract/Config/Collector/FunctionNameConfig/FunctionNameConfig.php delete mode 100644 pkg/src/contract/Config/Collector/GlobConfig/GlobConfig.go delete mode 100644 pkg/src/contract/Config/Collector/GlobConfig/GlobConfig.php delete mode 100644 pkg/src/contract/Config/Collector/ImplementsConfig/ImplementsConfig.go delete mode 100644 pkg/src/contract/Config/Collector/ImplementsConfig/ImplementsConfig.php delete mode 100644 pkg/src/contract/Config/Collector/InheritsConfig/InheritsConfig.go delete mode 100644 pkg/src/contract/Config/Collector/InheritsConfig/InheritsConfig.php delete mode 100644 pkg/src/contract/Config/Collector/InterfaceConfig/InterfaceConfig.go delete mode 100644 pkg/src/contract/Config/Collector/InterfaceConfig/InterfaceConfig.php delete mode 100644 pkg/src/contract/Config/Collector/LayerConfig/LayerConfig.go delete mode 100644 pkg/src/contract/Config/Collector/LayerConfig/LayerConfig.php delete mode 100644 pkg/src/contract/Config/Collector/MethodConfig/MethodConfig.go delete mode 100644 pkg/src/contract/Config/Collector/MethodConfig/MethodConfig.php delete mode 100644 pkg/src/contract/Config/Collector/PhpInteralConfig/PhpInteralConfig.go delete mode 100644 pkg/src/contract/Config/Collector/PhpInteralConfig/PhpInteralConfig.php delete mode 100644 pkg/src/contract/Config/Collector/SuperGlobalConfig/SuperGlobalConfig.php delete mode 100644 pkg/src/contract/Config/Collector/TagValueRegexConfig/TagValueRegexConfig.php delete mode 100644 pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.go delete mode 100644 pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.php delete mode 100644 pkg/src/contract/Config/Collector/UsesConfig/UsesConfig.go delete mode 100644 pkg/src/contract/Config/Collector/UsesConfig/UsesConfig.php delete mode 100644 pkg/src/contract/Config/CollectorConfig/CollectorConfig.php delete mode 100644 pkg/src/contract/Config/CollectorType/CollectorType.php delete mode 100644 pkg/src/contract/Config/ConfigurableCollectorConfig/ConfigurableCollectorConfig.php delete mode 100644 pkg/src/contract/Config/DeptracConfig/DeptracConfig.php delete mode 100644 pkg/src/contract/Config/EmitterType/EmitterType.php delete mode 100644 pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.go delete mode 100644 pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.php delete mode 100644 pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.go delete mode 100644 pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.php delete mode 100644 pkg/src/contract/Config/Formatter/GraphvizConfig/GraphvizConfig.php delete mode 100644 pkg/src/contract/Config/Formatter/MermaidJsConfig/MermaidJsConfig.php delete mode 100644 pkg/src/contract/Config/Layer/Layer.php delete mode 100644 pkg/src/contract/Config/Ruleset/Ruleset.php delete mode 100644 pkg/src/contract/Dependency/DependencyInterface/DependencyInterface.php delete mode 100644 pkg/src/contract/Dependency/PostEmitEvent/PostEmitEvent.php delete mode 100644 pkg/src/contract/Dependency/PostFlattenEvent/PostFlattenEvent.php delete mode 100644 pkg/src/contract/Dependency/PreEmitEvent/PreEmitEvent.php delete mode 100644 pkg/src/contract/Dependency/PreFlattenEvent/PreFlattenEvent.php delete mode 100644 pkg/src/contract/ExceptionInterface/ExceptionInterface.php delete mode 100644 pkg/src/contract/Layer/CircularReferenceException/CircularReferenceException.php delete mode 100644 pkg/src/contract/Layer/CollectorInterface/CollectorInterface.php delete mode 100644 pkg/src/contract/Layer/InvalidCollectorDefinitionException/InvalidCollectorDefinitionException.php delete mode 100644 pkg/src/contract/Layer/InvalidLayerDefinitionException/InvalidLayerDefinitionException.php delete mode 100644 pkg/src/contract/Layer/LayerProvider/LayerProvider.php delete mode 100644 pkg/src/contract/OutputFormatter/OutputException/OutputException.php delete mode 100644 pkg/src/contract/OutputFormatter/OutputFormatterInput/OutputFormatterInput.php delete mode 100644 pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterInterface.go delete mode 100644 pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterInterface.php delete mode 100644 pkg/src/contract/OutputFormatter/OutputInterface/OutputInterface.go delete mode 100644 pkg/src/contract/OutputFormatter/OutputInterface/OutputInterface.php delete mode 100644 pkg/src/contract/OutputFormatter/OutputStyleInterface/OutputStyleInterface.php delete mode 100644 pkg/src/contract/Result/Allowed/Allowed.php delete mode 100644 pkg/src/contract/Result/CoveredRuleInterface/CoveredRuleInterface.php delete mode 100644 pkg/src/contract/Result/Error/Error.php delete mode 100644 pkg/src/contract/Result/OutputResult/OutputResult.go delete mode 100644 pkg/src/contract/Result/OutputResult/OutputResult.php delete mode 100644 pkg/src/contract/Result/RuleInterface/RuleInterface.go delete mode 100644 pkg/src/contract/Result/RuleInterface/RuleInterface.php delete mode 100644 pkg/src/contract/Result/RuleTypeEnum/RuleTypeEnum.go delete mode 100644 pkg/src/contract/Result/SkippedViolation/SkippedViolation.php delete mode 100644 pkg/src/contract/Result/Uncovered/Uncovered.go delete mode 100644 pkg/src/contract/Result/Uncovered/Uncovered.php delete mode 100644 pkg/src/contract/Result/Violation/Violation.php delete mode 100644 pkg/src/contract/Result/Warning/Warning.php delete mode 100644 pkg/src/contract/analyser/analysis_result/AnalysisResult.php delete mode 100644 pkg/src/contract/analyser/event_helper/EventHelper.php delete mode 100644 pkg/src/contract/analyser/post_process_event/PostProcessEvent.php delete mode 100644 pkg/src/contract/analyser/process_event/ProcessEvent.php delete mode 100644 pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php rename pkg/src/contract/{Config/AnalyserConfig/AnalyserConfig.go => config/analyser_config.go} (57%) rename pkg/src/contract/{Config/CodeclimateLevelEnum/CodeclimateLevelEnum.go => config/codeclimate_level_enum.go} (92%) create mode 100644 pkg/src/contract/config/collector/attribute_config.go create mode 100644 pkg/src/contract/config/collector/bool_config.go create mode 100644 pkg/src/contract/config/collector/class_config.go create mode 100644 pkg/src/contract/config/collector/class_like_config.go create mode 100644 pkg/src/contract/config/collector/class_name_regex_config.go rename pkg/src/contract/{Config/Collector/ComposerConfig/ComposerConfig.go => config/collector/composer_config.go} (70%) create mode 100644 pkg/src/contract/config/collector/directory_config.go create mode 100644 pkg/src/contract/config/collector/extends_config.go create mode 100644 pkg/src/contract/config/collector/function_name_config.go create mode 100644 pkg/src/contract/config/collector/glob_config.go create mode 100644 pkg/src/contract/config/collector/implements_config.go create mode 100644 pkg/src/contract/config/collector/inherits_config.go create mode 100644 pkg/src/contract/config/collector/interface_config.go create mode 100644 pkg/src/contract/config/collector/layer_config.go create mode 100644 pkg/src/contract/config/collector/method_config.go create mode 100644 pkg/src/contract/config/collector/php_interal_config.go rename pkg/src/contract/{Config/Collector/SuperGlobalConfig/SuperGlobalConfig.go => config/collector/super_global_config.go} (58%) rename pkg/src/contract/{Config/Collector/TagValueRegexConfig/TagValueRegexConfig.go => config/collector/tag_value_regex_config.go} (66%) create mode 100644 pkg/src/contract/config/collector/trait_config.go create mode 100644 pkg/src/contract/config/collector/uses_config.go rename pkg/src/contract/{Config/CollectorConfig/CollectorConfig.go => config/collector_config.go} (62%) rename pkg/src/contract/{Config/CollectorType/CollectorType.go => config/collector_type.go} (98%) rename pkg/src/contract/{Config/ConfigurableCollectorConfig/ConfigurableCollectorConfig.go => config/configurable_collector_config.go} (89%) rename pkg/src/contract/{Config/DeptracConfig/DeptracConfig.go => config/deptrac_config/deptrac_config.go} (64%) rename pkg/src/contract/{Config/EmitterType/EmitterType.go => config/emitter_type.go} (97%) rename pkg/src/contract/{Config/DeptracConfig => config}/example.yaml (100%) create mode 100644 pkg/src/contract/config/formatter/codeclimate_config.go create mode 100644 pkg/src/contract/config/formatter/formatter_config_interface.go rename pkg/src/contract/{Config/Formatter/FormatterConfigInterface/FormatterType/FormatterType.go => config/formatter/formatter_type.go} (91%) rename pkg/src/contract/{Config/Formatter/GraphvizConfig/GraphvizConfig.go => config/formatter/graphviz_config.go} (67%) rename pkg/src/contract/{Config/Formatter/MermaidJsConfig/MermaidJsConfig.go => config/formatter/mermaid_js_config.go} (64%) rename pkg/src/contract/{Config/Layer/Layer.go => config/layer.go} (71%) rename pkg/src/contract/{Config/Ruleset/Ruleset.go => config/ruleset.go} (60%) rename pkg/src/contract/{Dependency/DependencyInterface/DependencyInterface.go => dependency/dependency_interface.go} (92%) rename pkg/src/contract/{Dependency/PostEmitEvent/PostEmitEvent.go => dependency/post_emit_event.go} (89%) rename pkg/src/contract/{Dependency/PostFlattenEvent/PostFlattenEvent.go => dependency/post_flatten_event.go} (91%) rename pkg/src/contract/{Dependency/PreEmitEvent/PreEmitEvent.go => dependency/pre_emit_event.go} (92%) rename pkg/src/contract/{Dependency/PreFlattenEvent/PreFlattenEvent.go => dependency/pre_flatten_event.go} (91%) rename pkg/src/contract/{ExceptionInterface/ExceptionInterface.go => exception_interface.go} (94%) rename pkg/src/contract/{Layer/CircularReferenceException/CircularReferenceException.go => layer/circular_reference_exception.go} (97%) rename pkg/src/contract/{Layer/CollectorInterface/CollectorInterface.go => layer/collector_interface.go} (92%) rename pkg/src/contract/{Layer/InvalidCollectorDefinitionException/InvalidCollectorDefinitionException.go => layer/invalid_collector_definition_exception.go} (87%) rename pkg/src/contract/{Layer/InvalidLayerDefinitionException/InvalidLayerDefinitionException.go => layer/invalid_layer_definition_exception.go} (97%) rename pkg/src/contract/{Layer/LayerProvider/LayerProvider.go => layer/layer_provider.go} (69%) rename pkg/src/contract/{OutputFormatter/OutputException/OutputException.go => output_formatter/output_exception.go} (91%) rename pkg/src/contract/{OutputFormatter/OutputFormatterInput/OutputFormatterInput.go => output_formatter/output_formatter_input.go} (93%) create mode 100644 pkg/src/contract/output_formatter/output_formatter_interface.go rename pkg/src/contract/{OutputFormatter/OutputFormatterInterface/OutputFormatterType/OutputFormatterType.go => output_formatter/output_formatter_type.go} (94%) create mode 100644 pkg/src/contract/output_formatter/output_interface.go rename pkg/src/contract/{OutputFormatter/OutputStyleInterface/OutputStyleInterface.go => output_formatter/output_style_interface.go} (97%) rename pkg/src/contract/{Result/Allowed/Allowed.go => result/allowed.go} (55%) rename pkg/src/contract/{Result/CoveredRuleInterface/CoveredRuleInterface.go => result/covered_rule_interface.go} (91%) rename pkg/src/contract/{Result/Error/Error.go => result/error.go} (92%) create mode 100644 pkg/src/contract/result/output_result/output_result.go create mode 100644 pkg/src/contract/result/rule_interface.go create mode 100644 pkg/src/contract/result/rule_type_enum.go rename pkg/src/contract/{Result/SkippedViolation/SkippedViolation.go => result/skipped_violation.go} (55%) create mode 100644 pkg/src/contract/result/uncovered.go rename pkg/src/contract/{Result/Violation/Violation.go => result/violation.go} (70%) rename pkg/src/contract/{Result/Warning/Warning.go => result/warning.go} (97%) delete mode 100644 pkg/src/supportive/Console/Application/Application.php delete mode 100644 pkg/src/supportive/Console/CannotGetCurrentWorkingDirectoryException/CannotGetCurrentWorkingDirectoryException.php delete mode 100644 pkg/src/supportive/Console/Command/AnalyseCommand/AnalyseCommand.go delete mode 100644 pkg/src/supportive/Console/Command/AnalyseCommand/AnalyseCommand.php delete mode 100644 pkg/src/supportive/Console/Command/AnalyseOptions/AnalyseOptions.php delete mode 100644 pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.go delete mode 100644 pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.php delete mode 100644 pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.php delete mode 100644 pkg/src/supportive/Console/Env/Env.php delete mode 100644 pkg/src/supportive/Console/Subscriber/ConsoleSubscriber/ConsoleSubscriber.go delete mode 100644 pkg/src/supportive/Console/Subscriber/ConsoleSubscriber/ConsoleSubscriber.php delete mode 100644 pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.php delete mode 100644 pkg/src/supportive/Console/Symfony/Style/Style.php delete mode 100644 pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.php delete mode 100644 pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMap.go delete mode 100644 pkg/src/supportive/File/Dumper/Dumper.php delete mode 100644 pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.php delete mode 100644 pkg/src/supportive/File/Exception/FileAlreadyExistsException/FileAlreadyExistsException.php delete mode 100644 pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.php delete mode 100644 pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.php delete mode 100644 pkg/src/supportive/File/Exception/FileNotWritableException/FileNotWritableException.php delete mode 100644 pkg/src/supportive/File/Exception/IOException/IOException.php delete mode 100644 pkg/src/supportive/File/Exception/InvalidPathException/InvalidPathException.php delete mode 100644 pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.php delete mode 100644 pkg/src/supportive/File/FileReader/FileReader.go delete mode 100644 pkg/src/supportive/File/FileReader/FileReader.php delete mode 100644 pkg/src/supportive/File/YmlFileLoader/YmlFileLoader.php delete mode 100644 pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.php delete mode 100644 pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.php delete mode 100644 pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.go delete mode 100644 pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.php delete mode 100644 pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.go delete mode 100644 pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.php delete mode 100644 pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.go delete mode 100644 pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.php delete mode 100644 pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.php delete mode 100644 pkg/src/supportive/TimeStopwatch/Period.php delete mode 100644 pkg/src/supportive/TimeStopwatch/StartedPeriod.php delete mode 100644 pkg/src/supportive/TimeStopwatch/Stopwatch.php delete mode 100644 pkg/src/supportive/TimeStopwatch/StopwatchException.php rename pkg/src/supportive/{Console/Application/Application.go => console/application/application.go} (87%) rename pkg/src/supportive/{Console/Application/Application_test.go => console/application/application_test.go} (92%) rename pkg/src/supportive/{Console/Application/ApplicationVersion/ApplicationVersion.go => console/application/application_version/application_version.go} (54%) rename pkg/src/supportive/{Console/CannotGetCurrentWorkingDirectoryException/CannotGetCurrentWorkingDirectoryException.go => console/cannot_get_current_working_directory_exception.go} (92%) rename pkg/src/supportive/{Console/Command => console/command}/ChangedFilesCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/ChangedFilesRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugDependenciesCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugDependenciesRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugLayerCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugLayerRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugTokenCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugTokenRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugUnassignedCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugUnassignedRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugUnusedCommand.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/DebugUnusedRunner.php (100%) rename pkg/src/supportive/{Console/Command => console/command}/InitCommand.php (100%) create mode 100644 pkg/src/supportive/console/command/analyse_command.go rename pkg/src/supportive/{Console/Command/AnalyseOptions/AnalyseOptions.go => console/command/analyse_options.go} (95%) create mode 100644 pkg/src/supportive/console/command/analyse_runner.go rename pkg/src/supportive/{Console/Command/CommandRunException/CommandRunException.go => console/command/command_run_exception.go} (97%) rename pkg/src/supportive/{Console/Env/Env.go => console/env.go} (89%) create mode 100644 pkg/src/supportive/console/subscriber/console_subscriber.go rename pkg/src/supportive/{Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go => console/subscriber/progress_subscriber.go} (58%) rename pkg/src/supportive/{Console/Symfony/Style/Style.go => console/symfony/style.go} (85%) rename pkg/src/supportive/{Console/Symfony/SymfonyOutput/SymfonyOutput.go => console/symfony/symfony_output.go} (51%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Configuration.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/DeptracExtension.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/CacheFileException/CacheFileException.go (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/CacheFileException/CacheFileException.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go (67%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/ServiceContainerBuilder.go (71%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/ServiceContainerBuilder.php (100%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/cache.go (56%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/cache.php (100%) rename pkg/src/supportive/{DependencyInjection/ContainerBuilder/ContainerBuilder.go => dependency_injection/container_builder/container_builder.go} (61%) rename pkg/src/supportive/{DependencyInjection/EventDispatcher/EventDispatcherInterface.go => dependency_injection/event_dispatcher/event_dispatcher_interface.go} (77%) rename pkg/src/supportive/{DependencyInjection/EventDispatcher/EventDispatcherInterface/EventDispatcherInterface.go => dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go} (100%) rename pkg/src/supportive/{DependencyInjection/EventSubscriberDefaultPriority/EventSubscriberDefaultPriority.go => dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go} (100%) rename pkg/src/supportive/{DependencyInjection/EventSubscriberInterface/EventSubscriberInterface.go => dependency_injection/event_subscriber_interface/event_subscriber_interface.go} (77%) create mode 100644 pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go rename pkg/src/supportive/{DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go => dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go} (60%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/services.go (58%) rename pkg/src/supportive/{DependencyInjection => dependency_injection}/services.php (100%) rename pkg/src/supportive/{File/Dumper/Dumper.go => file/dumper.go} (97%) rename pkg/src/supportive/{File/Exception/CouldNotReadFileException/CouldNotReadFileException.go => file/exception/could_not_read_file_exception.go} (94%) rename pkg/src/supportive/{File/Exception/FileAlreadyExistsException/FileAlreadyExistsException.go => file/exception/file_already_exists_exception.go} (94%) rename pkg/src/supportive/{File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.go => file/exception/file_cannot_be_parsed_as_yaml_exception.go} (93%) rename pkg/src/supportive/{File/Exception/FileNotExistsException/FileNotExistsException.go => file/exception/file_not_exists_exception.go} (93%) rename pkg/src/supportive/{File/Exception/FileNotWritableException/FileNotWritableException.go => file/exception/file_not_writable_exception.go} (94%) rename pkg/src/supportive/{File/Exception/IOException/IOException.go => file/exception/i_o_exception.go} (93%) rename pkg/src/supportive/{File/Exception/InvalidPathException/InvalidPathException.go => file/exception/invalid_path_exception.go} (94%) rename pkg/src/supportive/{File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.go => file/exception/parsed_yaml_is_not_an_array_exception.go} (93%) create mode 100644 pkg/src/supportive/file/file_reader.go rename pkg/src/supportive/{File/YmlFileLoader/YmlFileLoader.go => file/yml_file_loader.go} (66%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/BaselineOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/CodeclimateOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/ConsoleOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/GraphVizOutputDisplayFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/GraphVizOutputDotFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/GraphVizOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/GraphVizOutputHtmlFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/GraphVizOutputImageFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/JUnitOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/JsonOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/MermaidJSOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter => output_formatter}/XMLOutputFormatter.php (100%) rename pkg/src/supportive/{OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.go => output_formatter/configuration/configuration_codeclimate.go} (96%) rename pkg/src/supportive/{OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.go => output_formatter/configuration/configuration_graph_viz.go} (95%) create mode 100644 pkg/src/supportive/output_formatter/configuration/formatter_configuration.go create mode 100644 pkg/src/supportive/output_formatter/formatter_provider.go create mode 100644 pkg/src/supportive/output_formatter/github_actions_output_formatter.go rename pkg/src/supportive/{OutputFormatter/TableOutputFormatter/TableOutputFormatter.go => output_formatter/table_output_formatter.go} (71%) rename pkg/src/supportive/{OutputFormatter/TableOutputFormatter/TableOutputFormatter_test.go => output_formatter/table_output_formatter_test.go} (83%) rename pkg/src/supportive/{TimeStopwatch/Period.go => time_stopwatch/period.go} (95%) rename pkg/src/supportive/{TimeStopwatch/StartedPeriod.go => time_stopwatch/started_period.go} (96%) rename pkg/src/supportive/{TimeStopwatch/Stopwatch.go => time_stopwatch/stopwatch.go} (97%) rename pkg/src/supportive/{TimeStopwatch/StopwatchException.go => time_stopwatch/stopwatch_exception.go} (96%) diff --git a/cmd/go-deptrac/main.go b/cmd/go-deptrac/main.go index 462aac1..8aab0e3 100644 --- a/cmd/go-deptrac/main.go +++ b/cmd/go-deptrac/main.go @@ -1,9 +1,9 @@ package main import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" ) func main() { - Application.NewApplication().Run() + application.NewApplication().Run() } diff --git a/deptrac.yaml b/deptrac.yaml index 14b3523..e671832 100644 --- a/deptrac.yaml +++ b/deptrac.yaml @@ -42,11 +42,11 @@ deptrac: - name: Analyser collectors: - type: directory - value: pkg/src/core/Analyser/.* + value: pkg/src/core/analyser/.* - name: Ast collectors: - type: directory - value: pkg/src/core/Ast/.* + value: pkg/src/core/ast/.* - type: composer private: true composerPath: composer.json @@ -58,15 +58,15 @@ deptrac: - name: Console collectors: - type: directory - value: pkg/src/supportive/Console/.* + value: pkg/src/supportive/console/.* - name: Dependency collectors: - type: directory - value: pkg/src/core/Dependency/.* + value: pkg/src/core/dependency/.* - name: DependencyInjection collectors: - type: directory - value: pkg/src/supportive/DependencyInjection/.* + value: pkg/src/supportive/dependency_injection/.* - name: Contract collectors: - type: directory @@ -74,15 +74,15 @@ deptrac: - name: InputCollector collectors: - type: directory - value: pkg/src/core/InputCollector/.* + value: pkg/src/core/input_collector/.* - name: Layer collectors: - type: directory - value: pkg/src/core/Layer/.* + value: pkg/src/core/layer/.* - name: OutputFormatter collectors: - type: directory - value: pkg/src/supportive/OutputFormatter/.* + value: pkg/src/supportive/output_formatter/.* - type: composer private: true composerPath: composer.json @@ -92,11 +92,11 @@ deptrac: - name: File collectors: - type: directory - value: pkg/src/supportive/File/.* + value: pkg/src/supportive/file/.* - name: Time collectors: - type: directory - value: pkg/src/supportive/Time/.* + value: pkg/src/supportive/time/.* - name: Supportive collectors: - type: bool diff --git a/pkg/config/analyse_options_hook.go b/pkg/config/analyse_options_hook.go index e61e5b1..aeb5bd0 100644 --- a/pkg/config/analyse_options_hook.go +++ b/pkg/config/analyse_options_hook.go @@ -2,12 +2,12 @@ package config import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseOptions" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" ) type analyseOptionsHook struct{} type AnalyseOptionsHook interface { - GetOptions() *AnalyseOptions.AnalyseOptions + GetOptions() *command.AnalyseOptions } func NewAnalyseOptionsHook() AnalyseOptionsHook { @@ -30,7 +30,7 @@ const ( OptionNoProgressUsage = "Do not show progress bar" ) -func (h *analyseOptionsHook) GetOptions() *AnalyseOptions.AnalyseOptions { +func (h *analyseOptionsHook) GetOptions() *command.AnalyseOptions { reportUncovered := flag.Bool(OptionReportUncovered, false, OptionReportUncoveredUsage) failOnUncovered := flag.Bool(OptionFailOnUncovered, false, OptionFailOnUncoveredUsage) @@ -39,7 +39,7 @@ func (h *analyseOptionsHook) GetOptions() *AnalyseOptions.AnalyseOptions { output := flag.String(OptionOutput, "", OptionOutputUsage) noProgress := flag.Bool(OptionNoProgress, false, OptionNoProgressUsage) - return &AnalyseOptions.AnalyseOptions{ + return &command.AnalyseOptions{ ReportUncovered: *reportUncovered, FailOnUncovered: *failOnUncovered, ReportSkipped: *reportSkipped, diff --git a/pkg/src/contract/Config/AnalyserConfig/AnalyserConfig.php b/pkg/src/contract/Config/AnalyserConfig/AnalyserConfig.php deleted file mode 100644 index caea4f9..0000000 --- a/pkg/src/contract/Config/AnalyserConfig/AnalyserConfig.php +++ /dev/null @@ -1,42 +0,0 @@ - */ - private array $types = []; - /** @var ?string */ - private ?string $internalTag = null; - private function __construct() - { - } - /** @param ?array $types */ - public static function create(?array $types = null, ?string $internalTag = null) : self - { - $analyser = new self(); - $types ??= [\Qossmic\Deptrac\Contract\Config\EmitterType::CLASS_TOKEN, \Qossmic\Deptrac\Contract\Config\EmitterType::FUNCTION_TOKEN]; - $analyser->types(...$types); - $analyser->internalTag($internalTag); - return $analyser; - } - public function types(\Qossmic\Deptrac\Contract\Config\EmitterType ...$types) : self - { - $this->types = []; - foreach ($types as $type) { - $this->types[$type->value] = $type; - } - return $this; - } - public function internalTag(?string $tag) : self - { - $this->internalTag = $tag; - return $this; - } - /** @return array */ - public function toArray() : array - { - return ['types' => \array_map(static fn(\Qossmic\Deptrac\Contract\Config\EmitterType $emitterType) => $emitterType->value, $this->types), 'internal_tag' => $this->internalTag]; - } -} diff --git a/pkg/src/contract/Config/CodeclimateLevelEnum/CodeclimateLevelEnum.php b/pkg/src/contract/Config/CodeclimateLevelEnum/CodeclimateLevelEnum.php deleted file mode 100644 index 97dddfe..0000000 --- a/pkg/src/contract/Config/CodeclimateLevelEnum/CodeclimateLevelEnum.php +++ /dev/null @@ -1,12 +0,0 @@ - */ - private array $mustNot = []; - /** @var array */ - private array $must = []; - private function __construct() - { - } - /** - * @param array $must - * @param array $mostNot - */ - public static function create(array $must = [], array $mostNot = []) : self - { - return (new self())->must(...$must)->mustNot(...$mostNot); - } - public function mustNot(CollectorConfig ...$collectorConfigs) : self - { - foreach ($collectorConfigs as $collectorConfig) { - $this->mustNot[] = $collectorConfig; - } - return $this; - } - public function must(CollectorConfig ...$collectorConfigs) : self - { - foreach ($collectorConfigs as $collectorConfig) { - $this->must[] = $collectorConfig; - } - return $this; - } - /** @return array{ - * must: array|mixed, - * must_not: array|mixed, - * private: bool, - * type: string} - */ - public function toArray() : array - { - return ['must_not' => \array_map(static fn(CollectorConfig $v) => $v->toArray(), $this->mustNot), 'must' => \array_map(static fn(CollectorConfig $v) => $v->toArray(), $this->must), 'private' => $this->private, 'type' => $this->collectorType->value]; - } -} diff --git a/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.go b/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.go deleted file mode 100644 index 188fa4a..0000000 --- a/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.go +++ /dev/null @@ -1,18 +0,0 @@ -package ClassConfig - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/ConfigurableCollectorConfig" -) - -type ClassConfig struct { - *ConfigurableCollectorConfig.ConfigurableCollectorConfig - collectorType CollectorType.CollectorType -} - -func NewClassConfig(config string) *ClassConfig { - return &ClassConfig{ - ConfigurableCollectorConfig: ConfigurableCollectorConfig.CreateConfigurableCollectorConfig(config), - collectorType: CollectorType.TypeClass, - } -} diff --git a/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.php b/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.php deleted file mode 100644 index 4716784..0000000 --- a/pkg/src/contract/Config/Collector/ClassConfig/ClassConfig.php +++ /dev/null @@ -1,10 +0,0 @@ - */ - private array $packages = []; - private function __construct(private readonly string $composerPath, private readonly string $composerLockPath) - { - } - /** - * @param list $packages - */ - public static function create(string $composerPath = 'composer.json', string $composerLockPath = 'composer.lock', array $packages = []) : self - { - $result = new self($composerPath, $composerLockPath); - foreach ($packages as $package) { - $result->addPackage($package); - } - return $result; - } - public function addPackage(string $package) : self - { - $this->packages[] = $package; - return $this; - } - /** @return array{ - * composerPath: string, - * composerLockPath: string, - * packages: list, - * private: bool, - * type: string} - */ - public function toArray() : array - { - return ['composerPath' => $this->composerPath, 'composerLockPath' => $this->composerLockPath, 'packages' => $this->packages, 'private' => $this->private, 'type' => $this->collectorType->value]; - } -} diff --git a/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.go b/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.go deleted file mode 100644 index de87b84..0000000 --- a/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.go +++ /dev/null @@ -1,18 +0,0 @@ -package DirectoryConfig - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/ConfigurableCollectorConfig" -) - -type DirectoryConfig struct { - *ConfigurableCollectorConfig.ConfigurableCollectorConfig - collectorType CollectorType.CollectorType -} - -func NewDirectoryConfig(config string) *DirectoryConfig { - return &DirectoryConfig{ - ConfigurableCollectorConfig: ConfigurableCollectorConfig.CreateConfigurableCollectorConfig(config), - collectorType: CollectorType.TypeDirectory, - } -} diff --git a/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.php b/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.php deleted file mode 100644 index b008608..0000000 --- a/pkg/src/contract/Config/Collector/DirectoryConfig/DirectoryConfig.php +++ /dev/null @@ -1,10 +0,0 @@ - $this->private, 'type' => $this->collectorType->value, 'value' => $this->config]; - } -} diff --git a/pkg/src/contract/Config/Collector/TagValueRegexConfig/TagValueRegexConfig.php b/pkg/src/contract/Config/Collector/TagValueRegexConfig/TagValueRegexConfig.php deleted file mode 100644 index da352a7..0000000 --- a/pkg/src/contract/Config/Collector/TagValueRegexConfig/TagValueRegexConfig.php +++ /dev/null @@ -1,26 +0,0 @@ -value = $regexpr; - return $this; - } - public function toArray() : array - { - return ['tag' => $this->tag, 'value' => $this->value] + parent::toArray(); - } -} diff --git a/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.go b/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.go deleted file mode 100644 index 671201b..0000000 --- a/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.go +++ /dev/null @@ -1,18 +0,0 @@ -package TraitConfig - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/ConfigurableCollectorConfig" -) - -type TraitConfig struct { - *ConfigurableCollectorConfig.ConfigurableCollectorConfig - collectorType CollectorType.CollectorType -} - -func NewTraitConfig(config string) *TraitConfig { - return &TraitConfig{ - ConfigurableCollectorConfig: ConfigurableCollectorConfig.CreateConfigurableCollectorConfig(config), - collectorType: CollectorType.TypeTrait, - } -} diff --git a/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.php b/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.php deleted file mode 100644 index 322d175..0000000 --- a/pkg/src/contract/Config/Collector/TraitConfig/TraitConfig.php +++ /dev/null @@ -1,10 +0,0 @@ -private = \true; - return $this; - } - /** @return array{'type': string, 'private': bool, ...} */ - public function toArray() : array - { - return ['type' => $this->collectorType->value, 'private' => $this->private]; - } -} diff --git a/pkg/src/contract/Config/CollectorType/CollectorType.php b/pkg/src/contract/Config/CollectorType/CollectorType.php deleted file mode 100644 index f529ea4..0000000 --- a/pkg/src/contract/Config/CollectorType/CollectorType.php +++ /dev/null @@ -1,30 +0,0 @@ - $this->config, 'type' => $this->collectorType->value, 'private' => $this->private]; - } - private static function regex(string $regex) : string - { - return \sprintf('%s', \str_replace(self::ESCAPEES, self::ESCAPED, $regex)); - } -} diff --git a/pkg/src/contract/Config/DeptracConfig/DeptracConfig.php b/pkg/src/contract/Config/DeptracConfig/DeptracConfig.php deleted file mode 100644 index d8179d4..0000000 --- a/pkg/src/contract/Config/DeptracConfig/DeptracConfig.php +++ /dev/null @@ -1,126 +0,0 @@ - */ - private array $paths = []; - /** @var array */ - private array $layers = []; - /** @var array */ - private array $formatters = []; - /** @var array */ - private array $rulesets = []; - private ?\Qossmic\Deptrac\Contract\Config\AnalyserConfig $analyser = null; - /** @var array> */ - private array $skipViolations = []; - /** @var array */ - private array $excludeFiles = []; - private ?string $cacheFile = null; - /** - * @deprecated use analyser(AnalyserConfig::create()) instead - */ - public function analysers(\Qossmic\Deptrac\Contract\Config\EmitterType ...$types) : self - { - return $this->analyser(\Qossmic\Deptrac\Contract\Config\AnalyserConfig::create($types)); - } - public function analyser(\Qossmic\Deptrac\Contract\Config\AnalyserConfig $analyser) : self - { - $this->analyser = $analyser; - return $this; - } - /** - * @throws ParseException - */ - public function baseline(string $baseline) : self - { - /** @var array>> $baselineAsArray */ - $baselineAsArray = Yaml::parseFile($baseline); - /** @var array> $skipViolations */ - $skipViolations = $baselineAsArray['deptrac']['skip_violations'] ?? []; - foreach ($skipViolations as $class => $skipViolation) { - $this->skipViolations[$class] = $skipViolation; - } - return $this; - } - public function formatters(FormatterConfigInterface ...$formatters) : self - { - foreach ($formatters as $formatter) { - $this->formatters[$formatter->getName()] = $formatter; - } - return $this; - } - public function paths(string ...$paths) : self - { - foreach ($paths as $path) { - $this->paths[] = $path; - } - return $this; - } - public function excludeFiles(string ...$excludeFiles) : self - { - foreach ($excludeFiles as $excludeFile) { - $this->excludeFiles[] = $excludeFile; - } - return $this; - } - public function layers(\Qossmic\Deptrac\Contract\Config\Layer ...$layerConfigs) : self - { - foreach ($layerConfigs as $layerConfig) { - $this->layers[$layerConfig->name] = $layerConfig; - } - return $this; - } - public function rulesets(\Qossmic\Deptrac\Contract\Config\Ruleset ...$rulesetConfigs) : self - { - foreach ($rulesetConfigs as $rulesetConfig) { - $this->rulesets[$rulesetConfig->layerConfig->name] = $rulesetConfig; - } - return $this; - } - public function cacheFile(string $path) : self - { - $this->cacheFile = $path; - return $this; - } - /** @return array */ - public function toArray() : array - { - $config = []; - if ([] !== $this->paths) { - $config['paths'] = $this->paths; - } - if ($this->analyser) { - $config['analyser'] = $this->analyser->toArray(); - } - if ([] !== $this->formatters) { - $config['formatters'] = \array_map(static fn(FormatterConfigInterface $formatterConfig) => $formatterConfig->toArray(), $this->formatters); - } - if ([] !== $this->excludeFiles) { - $config['exclude_files'] = $this->excludeFiles; - } - if ([] !== $this->layers) { - $config['layers'] = \array_map(static fn(\Qossmic\Deptrac\Contract\Config\Layer $layerConfig) => $layerConfig->toArray(), $this->layers); - } - if ([] !== $this->rulesets) { - $config['ruleset'] = \array_map(static fn(\Qossmic\Deptrac\Contract\Config\Ruleset $rulesetConfig) => $rulesetConfig->toArray(), $this->rulesets); - } - if ([] !== $this->skipViolations) { - $config['skip_violations'] = $this->skipViolations; - } - $config['ignore_uncovered_internal_classes'] = $this->ignoreUncoveredInternalClasses; - $config['cache_file'] = $this->cacheFile; - return $config; - } - public function getExtensionAlias() : string - { - return 'deptrac'; - } -} diff --git a/pkg/src/contract/Config/EmitterType/EmitterType.php b/pkg/src/contract/Config/EmitterType/EmitterType.php deleted file mode 100644 index 19db187..0000000 --- a/pkg/src/contract/Config/EmitterType/EmitterType.php +++ /dev/null @@ -1,22 +0,0 @@ - - */ - public static function values() : array - { - return \array_map(static fn(self $type): string => $type->value, self::cases()); - } -} diff --git a/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.go b/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.go deleted file mode 100644 index 673f56a..0000000 --- a/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.go +++ /dev/null @@ -1,69 +0,0 @@ -package CodeclimateConfig - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CodeclimateLevelEnum" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterType" -) - -type CodeclimateConfig struct { - Failure CodeclimateLevelEnum.CodeclimateLevelEnum - Skipped CodeclimateLevelEnum.CodeclimateLevelEnum - Uncovered CodeclimateLevelEnum.CodeclimateLevelEnum -} - -func newCodeclimateConfig(failure CodeclimateLevelEnum.CodeclimateLevelEnum, skipped CodeclimateLevelEnum.CodeclimateLevelEnum, uncovered CodeclimateLevelEnum.CodeclimateLevelEnum) *CodeclimateConfig { - return &CodeclimateConfig{ - Failure: failure, - Skipped: skipped, - Uncovered: uncovered, - } -} - -func CreateCodeclimateConfig(failure *CodeclimateLevelEnum.CodeclimateLevelEnum, skipped *CodeclimateLevelEnum.CodeclimateLevelEnum, uncovered *CodeclimateLevelEnum.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := CodeclimateLevelEnum.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := CodeclimateLevelEnum.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := CodeclimateLevelEnum.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - return newCodeclimateConfig(*failure, *skipped, *uncovered) -} - -func (c *CodeclimateConfig) severity(failure *CodeclimateLevelEnum.CodeclimateLevelEnum, skipped *CodeclimateLevelEnum.CodeclimateLevelEnum, uncovered *CodeclimateLevelEnum.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := CodeclimateLevelEnum.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := CodeclimateLevelEnum.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := CodeclimateLevelEnum.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - c.Failure = *failure - c.Skipped = *skipped - c.Uncovered = *uncovered - return c -} - -func (c *CodeclimateConfig) ToArray() map[string]interface{} { - return map[string]interface{}{ - "severity": map[string]interface{}{ - "failure": string(c.Failure), - "skipped": string(c.Skipped), - "uncovered": string(c.Uncovered), - }, - } -} - -func (c *CodeclimateConfig) GetName() FormatterType.FormatterType { - return FormatterType.FormatterTypeCodeclimateConfig -} diff --git a/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.php b/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.php deleted file mode 100644 index 39c67f9..0000000 --- a/pkg/src/contract/Config/Formatter/CodeclimateConfig/CodeclimateConfig.php +++ /dev/null @@ -1,33 +0,0 @@ -failure = $failure; - $this->skipped = $skipped; - $this->uncovered = $uncovered; - return $this; - } - /** - * @return array{'severity': array{'failure': string, 'skipped': string, 'uncovered': string}} - */ - public function toArray() : array - { - return ['severity' => ['failure' => $this->failure->value, 'skipped' => $this->skipped->value, 'uncovered' => $this->uncovered->value]]; - } - public function getName() : string - { - return 'codeclimate'; - } -} diff --git a/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.go b/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.go deleted file mode 100644 index d3b18ee..0000000 --- a/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.go +++ /dev/null @@ -1,8 +0,0 @@ -package FormatterConfigInterface - -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterType" - -type FormatterConfigInterface interface { - GetName() FormatterType.FormatterType - ToArray() map[string]interface{} -} diff --git a/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.php b/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.php deleted file mode 100644 index d80cddf..0000000 --- a/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterConfigInterface.php +++ /dev/null @@ -1,11 +0,0 @@ - */ - public function toArray() : array; -} diff --git a/pkg/src/contract/Config/Formatter/GraphvizConfig/GraphvizConfig.php b/pkg/src/contract/Config/Formatter/GraphvizConfig/GraphvizConfig.php deleted file mode 100644 index 87c4dd9..0000000 --- a/pkg/src/contract/Config/Formatter/GraphvizConfig/GraphvizConfig.php +++ /dev/null @@ -1,57 +0,0 @@ - */ - private array $groups = []; - private function __construct() - { - } - public static function create() : self - { - return new self(); - } - public function pointsToGroup(bool $pointsToGroup = \true) : self - { - $this->pointsToGroup = $pointsToGroup; - return $this; - } - public function hiddenLayers(Layer ...$LayerConfigs) : self - { - foreach ($LayerConfigs as $layerConfig) { - $this->hiddenLayers[] = $layerConfig; - } - return $this; - } - public function groups(string $name, Layer ...$layerConfigs) : self - { - foreach ($layerConfigs as $layerConfig) { - $this->groups[$name][] = $layerConfig; - } - return $this; - } - public function toArray() : array - { - $output = []; - if ([] !== $this->hiddenLayers) { - $output['hidden_layers'] = \array_map(static fn(Layer $config) => $config->name, $this->hiddenLayers); - } - if ([] !== $this->groups) { - $output['groups'] = \array_map(static fn(array $configs) => \array_map(static fn(Layer $layer) => $layer->name, $configs), $this->groups); - } - $output['point_to_groups'] = $this->pointsToGroup; - return $output; - } - public function getName() : string - { - return $this->name; - } -} diff --git a/pkg/src/contract/Config/Formatter/MermaidJsConfig/MermaidJsConfig.php b/pkg/src/contract/Config/Formatter/MermaidJsConfig/MermaidJsConfig.php deleted file mode 100644 index 6519476..0000000 --- a/pkg/src/contract/Config/Formatter/MermaidJsConfig/MermaidJsConfig.php +++ /dev/null @@ -1,42 +0,0 @@ - */ - private array $groups = []; - public static function create() : self - { - return new self(); - } - public function getName() : string - { - return $this->name; - } - public function direction(string $direction) : self - { - $this->direction = $direction; - return $this; - } - public function groups(string $name, Layer ...$layerConfigs) : self - { - foreach ($layerConfigs as $layerConfig) { - $this->groups[$name][] = $layerConfig; - } - return $this; - } - public function toArray() : array - { - $output = []; - if ([] !== $this->groups) { - $output['groups'] = \array_map(static fn(array $configs) => \array_map(static fn(Layer $layer) => $layer->name, $configs), $this->groups); - } - $output['direction'] = $this->direction; - return $output; - } -} diff --git a/pkg/src/contract/Config/Layer/Layer.php b/pkg/src/contract/Config/Layer/Layer.php deleted file mode 100644 index ed3b8a6..0000000 --- a/pkg/src/contract/Config/Layer/Layer.php +++ /dev/null @@ -1,33 +0,0 @@ - */ - private array $collectors = []; - public string $name; - /** @param array $collectorConfig */ - public function __construct(string $name, array $collectorConfig = []) - { - $this->name = $name; - $this->collectors(...$collectorConfig); - } - public static function withName(string $name) : self - { - return new self($name); - } - public function collectors(\Qossmic\Deptrac\Contract\Config\CollectorConfig ...$collectorConfigs) : self - { - foreach ($collectorConfigs as $collectorConfig) { - $this->collectors[] = $collectorConfig; - } - return $this; - } - /** @return array */ - public function toArray() : array - { - return ['name' => $this->name, 'collectors' => \array_map(static fn(\Qossmic\Deptrac\Contract\Config\CollectorConfig $config) => $config->toArray(), $this->collectors)]; - } -} diff --git a/pkg/src/contract/Config/Ruleset/Ruleset.php b/pkg/src/contract/Config/Ruleset/Ruleset.php deleted file mode 100644 index a5f96e7..0000000 --- a/pkg/src/contract/Config/Ruleset/Ruleset.php +++ /dev/null @@ -1,34 +0,0 @@ - */ - private array $accessableLayers = []; - /** @param array $layerConfigs */ - public function __construct(\Qossmic\Deptrac\Contract\Config\Layer $layerConfig, array $layerConfigs) - { - $this->layerConfig = $layerConfig; - $this->accesses(...$layerConfigs); - } - public static function forLayer(\Qossmic\Deptrac\Contract\Config\Layer $layerConfig) : self - { - return new self($layerConfig, []); - } - public function accesses(\Qossmic\Deptrac\Contract\Config\Layer ...$layerConfigs) : self - { - foreach ($layerConfigs as $layerConfig) { - $this->accessableLayers[] = $layerConfig; - } - return $this; - } - /** @return non-empty-array */ - public function toArray() : array - { - $data = \array_map(static fn(\Qossmic\Deptrac\Contract\Config\Layer $layerConfig) => $layerConfig->name, $this->accessableLayers); - return $data + ['name' => $this->layerConfig->name]; - } -} diff --git a/pkg/src/contract/Dependency/DependencyInterface/DependencyInterface.php b/pkg/src/contract/Dependency/DependencyInterface/DependencyInterface.php deleted file mode 100644 index 9d611fd..0000000 --- a/pkg/src/contract/Dependency/DependencyInterface/DependencyInterface.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function serialize() : array; -} diff --git a/pkg/src/contract/Dependency/PostEmitEvent/PostEmitEvent.php b/pkg/src/contract/Dependency/PostEmitEvent/PostEmitEvent.php deleted file mode 100644 index dba37d0..0000000 --- a/pkg/src/contract/Dependency/PostEmitEvent/PostEmitEvent.php +++ /dev/null @@ -1,12 +0,0 @@ - $others - */ - public static function circularLayerDependency(string $layer, array $others) : self - { - return new self(sprintf('Circular ruleset dependency for layer %s depending on: %s', $layer, implode('->', $others))); - } -} diff --git a/pkg/src/contract/Layer/CollectorInterface/CollectorInterface.php b/pkg/src/contract/Layer/CollectorInterface/CollectorInterface.php deleted file mode 100644 index 8528993..0000000 --- a/pkg/src/contract/Layer/CollectorInterface/CollectorInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -> $config - * - * @throws InvalidLayerDefinitionException - * @throws InvalidCollectorDefinitionException - * @throws CouldNotParseFileException - */ - public function satisfy(array $config, TokenReferenceInterface $reference) : bool; -} diff --git a/pkg/src/contract/Layer/InvalidCollectorDefinitionException/InvalidCollectorDefinitionException.php b/pkg/src/contract/Layer/InvalidCollectorDefinitionException/InvalidCollectorDefinitionException.php deleted file mode 100644 index 5d7fc1d..0000000 --- a/pkg/src/contract/Layer/InvalidCollectorDefinitionException/InvalidCollectorDefinitionException.php +++ /dev/null @@ -1,37 +0,0 @@ -> $allowedLayers source layer -> target layers - */ - public function __construct(private readonly array $allowedLayers) - { - } - /** - * @return list - * - * @throws CircularReferenceException - */ - public function getAllowedLayers(string $layerName) : array - { - return \array_values(\array_unique($this->getTransitiveDependencies($layerName, []))); - } - /** - * @param list $previousLayers - * - * @return string[] - * - * @throws CircularReferenceException - */ - private function getTransitiveDependencies(string $layerName, array $previousLayers) : array - { - if (\in_array($layerName, $previousLayers, \true)) { - throw \Qossmic\Deptrac\Contract\Layer\CircularReferenceException::circularLayerDependency($layerName, $previousLayers); - } - $dependencies = []; - foreach ($this->allowedLayers[$layerName] ?? [] as $layer) { - if (\str_starts_with($layer, '+')) { - $layer = \ltrim($layer, '+'); - $dependencies[] = $this->getTransitiveDependencies($layer, \array_merge([$layerName], $previousLayers)); - } - $dependencies[] = [$layer]; - } - return [] === $dependencies ? [] : \array_merge(...$dependencies); - } -} diff --git a/pkg/src/contract/OutputFormatter/OutputException/OutputException.php b/pkg/src/contract/OutputFormatter/OutputException/OutputException.php deleted file mode 100644 index e1aaa40..0000000 --- a/pkg/src/contract/OutputFormatter/OutputException/OutputException.php +++ /dev/null @@ -1,17 +0,0 @@ -|TableSeparator ...$list - */ - public function definitionList(string|array|TableSeparator ...$list) : void; - /** - * @param mixed[] $headers - * @param mixed[] $rows - */ - public function table(array $headers, array $rows) : void; - public function newLine(int $count = 1) : void; - public function progressStart(int $max = 0) : void; - public function progressAdvance(int $step = 1) : void; - public function progressFinish() : void; -} diff --git a/pkg/src/contract/Result/Allowed/Allowed.php b/pkg/src/contract/Result/Allowed/Allowed.php deleted file mode 100644 index b7faf0e..0000000 --- a/pkg/src/contract/Result/Allowed/Allowed.php +++ /dev/null @@ -1,29 +0,0 @@ -dependency; - } - public function getDependerLayer() : string - { - return $this->dependerLayer; - } - public function getDependentLayer() : string - { - return $this->dependentLayer; - } -} diff --git a/pkg/src/contract/Result/CoveredRuleInterface/CoveredRuleInterface.php b/pkg/src/contract/Result/CoveredRuleInterface/CoveredRuleInterface.php deleted file mode 100644 index dca555b..0000000 --- a/pkg/src/contract/Result/CoveredRuleInterface/CoveredRuleInterface.php +++ /dev/null @@ -1,18 +0,0 @@ -message; - } -} diff --git a/pkg/src/contract/Result/OutputResult/OutputResult.go b/pkg/src/contract/Result/OutputResult/OutputResult.go deleted file mode 100644 index b5d0b1f..0000000 --- a/pkg/src/contract/Result/OutputResult/OutputResult.go +++ /dev/null @@ -1,118 +0,0 @@ -package OutputResult - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Allowed" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleTypeEnum" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/SkippedViolation" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Warning" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" -) - -// OutputResult - Represents a result ready for output formatting -type OutputResult struct { - rules map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterface.RuleInterface - Errors []*Error.Error - Warnings []*Warning.Warning -} - -func newOutputResult(rules map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterface.RuleInterface, errors []*Error.Error, warnings []*Warning.Warning) *OutputResult { - return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} -} - -func NewOutputResultFromAnalysisResult(analysisResult *analysis_result.AnalysisResult) *OutputResult { - return newOutputResult( - analysisResult.Rules(), - analysisResult.Errors(), - analysisResult.Warnings(), - ) -} - -func (r *OutputResult) AllOf(ruleType RuleTypeEnum.RuleTypeEnum) []RuleInterface.RuleInterface { - rulesByIds, ok := r.rules[ruleType] - if ok { - rules := make([]RuleInterface.RuleInterface, 0, len(rulesByIds)) - - for _, rule := range rulesByIds { - rules = append(rules, rule) - } - - return rules - } - return nil -} -func (r *OutputResult) AllRules() []RuleInterface.RuleInterface { - var rules []RuleInterface.RuleInterface - for _, ruleArray := range r.rules { - for _, ruleItem := range ruleArray { - rules = append(rules, ruleItem) - } - } - return rules -} -func (r *OutputResult) Violations() []*Violation.Violation { - untyped := r.AllOf(RuleTypeEnum.TypeViolation) - - items := make([]*Violation.Violation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*Violation.Violation)) - } - - return items -} - -func (r *OutputResult) HasViolations() bool { - return len(r.Violations()) > 0 -} - -func (r *OutputResult) SkippedViolations() []*SkippedViolation.SkippedViolation { - untyped := r.AllOf(RuleTypeEnum.TypeSkippedViolation) - - items := make([]*SkippedViolation.SkippedViolation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*SkippedViolation.SkippedViolation)) - } - - return items -} - -func (r *OutputResult) Uncovered() []*Uncovered.Uncovered { - untyped := r.AllOf(RuleTypeEnum.TypeUncovered) - - items := make([]*Uncovered.Uncovered, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*Uncovered.Uncovered)) - } - - return items -} - -func (r *OutputResult) HasUncovered() bool { - return len(r.Uncovered()) > 0 -} - -func (r *OutputResult) HasAllowed() bool { - return len(r.Allowed()) > 0 -} - -func (r *OutputResult) Allowed() []*Allowed.Allowed { - untyped := r.AllOf(RuleTypeEnum.TypeAllowed) - - items := make([]*Allowed.Allowed, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*Allowed.Allowed)) - } - - return items -} - -func (r *OutputResult) HasErrors() bool { - return len(r.Errors) > 0 -} - -func (r *OutputResult) HasWarnings() bool { - return len(r.Warnings) > 0 -} diff --git a/pkg/src/contract/Result/OutputResult/OutputResult.php b/pkg/src/contract/Result/OutputResult/OutputResult.php deleted file mode 100644 index f5d07d8..0000000 --- a/pkg/src/contract/Result/OutputResult/OutputResult.php +++ /dev/null @@ -1,95 +0,0 @@ -, array> $rules - * @param list $errors - * @param list $warnings - */ - private function __construct(public readonly array $rules, public readonly array $errors, public readonly array $warnings) - { - } - public static function fromAnalysisResult(AnalysisResult $analysisResult) : self - { - return new self($analysisResult->rules(), $analysisResult->errors(), $analysisResult->warnings()); - } - /** - * @template T of RuleInterface - * - * @param class-string $type - * - * @return list - */ - public function allOf(string $type) : array - { - return \array_key_exists($type, $this->rules) ? \array_values($this->rules[$type]) : []; - } - /** - * @return list - */ - public function allRules() : array - { - $rules = []; - foreach ($this->rules as $ruleArray) { - foreach ($ruleArray as $rule) { - $rules[] = $rule; - } - } - return $rules; - } - /** - * @return list - */ - public function violations() : array - { - return $this->allOf(\Qossmic\Deptrac\Contract\Result\Violation::class); - } - public function hasViolations() : bool - { - return count($this->violations()) > 0; - } - /** - * @return list - */ - public function skippedViolations() : array - { - return $this->allOf(\Qossmic\Deptrac\Contract\Result\SkippedViolation::class); - } - /** - * @return list - */ - public function uncovered() : array - { - return $this->allOf(\Qossmic\Deptrac\Contract\Result\Uncovered::class); - } - public function hasUncovered() : bool - { - return count($this->uncovered()) > 0; - } - /** - * @return list - */ - public function allowed() : array - { - return $this->allOf(\Qossmic\Deptrac\Contract\Result\Allowed::class); - } - public function hasErrors() : bool - { - return count($this->errors) > 0; - } - public function hasWarnings() : bool - { - return count($this->warnings) > 0; - } -} diff --git a/pkg/src/contract/Result/RuleInterface/RuleInterface.go b/pkg/src/contract/Result/RuleInterface/RuleInterface.go deleted file mode 100644 index 3197385..0000000 --- a/pkg/src/contract/Result/RuleInterface/RuleInterface.go +++ /dev/null @@ -1,8 +0,0 @@ -package RuleInterface - -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - -// RuleInterface - Represents a dependency -type RuleInterface interface { - GetDependency() DependencyInterface.DependencyInterface -} diff --git a/pkg/src/contract/Result/RuleInterface/RuleInterface.php b/pkg/src/contract/Result/RuleInterface/RuleInterface.php deleted file mode 100644 index 4b456bb..0000000 --- a/pkg/src/contract/Result/RuleInterface/RuleInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -dependency; - } - public function getDependerLayer() : string - { - return $this->dependerLayer; - } - public function getDependentLayer() : string - { - return $this->dependentLayer; - } -} diff --git a/pkg/src/contract/Result/Uncovered/Uncovered.go b/pkg/src/contract/Result/Uncovered/Uncovered.go deleted file mode 100644 index f80e571..0000000 --- a/pkg/src/contract/Result/Uncovered/Uncovered.go +++ /dev/null @@ -1,20 +0,0 @@ -package Uncovered - -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - -// Uncovered - Represents a dependency that is NOT covered by the current configuration. -type Uncovered struct { - Dependency DependencyInterface.DependencyInterface - Layer string -} - -func NewUncovered(dependency DependencyInterface.DependencyInterface, layer string) *Uncovered { - return &Uncovered{ - Dependency: dependency, - Layer: layer, - } -} - -func (u *Uncovered) GetDependency() DependencyInterface.DependencyInterface { - return u.Dependency -} diff --git a/pkg/src/contract/Result/Uncovered/Uncovered.php b/pkg/src/contract/Result/Uncovered/Uncovered.php deleted file mode 100644 index 63bbea9..0000000 --- a/pkg/src/contract/Result/Uncovered/Uncovered.php +++ /dev/null @@ -1,21 +0,0 @@ -dependency; - } -} diff --git a/pkg/src/contract/Result/Violation/Violation.php b/pkg/src/contract/Result/Violation/Violation.php deleted file mode 100644 index 6fdba1b..0000000 --- a/pkg/src/contract/Result/Violation/Violation.php +++ /dev/null @@ -1,38 +0,0 @@ -dependency; - } - public function getDependerLayer() : string - { - return $this->dependerLayer; - } - public function getDependentLayer() : string - { - return $this->dependentLayer; - } - public function ruleName() : string - { - return $this->violationCreatingRule->ruleName(); - } - public function ruleDescription() : string - { - return $this->violationCreatingRule->ruleDescription(); - } -} diff --git a/pkg/src/contract/Result/Warning/Warning.php b/pkg/src/contract/Result/Warning/Warning.php deleted file mode 100644 index e810ead..0000000 --- a/pkg/src/contract/Result/Warning/Warning.php +++ /dev/null @@ -1,29 +0,0 @@ -message; - } -} diff --git a/pkg/src/contract/analyser/analysis_result/AnalysisResult.php b/pkg/src/contract/analyser/analysis_result/AnalysisResult.php deleted file mode 100644 index ecb179e..0000000 --- a/pkg/src/contract/analyser/analysis_result/AnalysisResult.php +++ /dev/null @@ -1,64 +0,0 @@ -, array> Rule type -> (ruleInstanceHash -> Rule) - */ - private array $rules = []; - /** - * @var list - */ - private array $warnings = []; - /** - * @var list - */ - private array $errors = []; - public function addRule(RuleInterface $rule) : void - { - $this->rules[$rule::class][spl_object_id($rule)] = $rule; - } - public function removeRule(RuleInterface $rule) : void - { - unset($this->rules[$rule::class][spl_object_id($rule)]); - } - /** - * @return array, array> - */ - public function rules() : array - { - return $this->rules; - } - public function addWarning(Warning $warning) : void - { - $this->warnings[] = $warning; - } - /** - * @return list - */ - public function warnings() : array - { - return $this->warnings; - } - public function addError(Error $error) : void - { - $this->errors[] = $error; - } - /** - * @return list - */ - public function errors() : array - { - return $this->errors; - } -} diff --git a/pkg/src/contract/analyser/analysis_result/analysis_result.go b/pkg/src/contract/analyser/analysis_result/analysis_result.go index e05a54a..e4b32d4 100644 --- a/pkg/src/contract/analyser/analysis_result/analysis_result.go +++ b/pkg/src/contract/analyser/analysis_result/analysis_result.go @@ -1,64 +1,61 @@ package analysis_result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleTypeEnum" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Warning" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) // AnalysisResult - Describes the result of a source code analysis. type AnalysisResult struct { - rules map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterface.RuleInterface + rules map[result.RuleTypeEnum]map[string]result.RuleInterface - warnings []*Warning.Warning + warnings []*result.Warning - errors []*Error.Error + errors []*result.Error } func NewAnalysisResult() *AnalysisResult { return &AnalysisResult{ - rules: make(map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterface.RuleInterface), - warnings: make([]*Warning.Warning, 0), - errors: make([]*Error.Error, 0), + rules: make(map[result.RuleTypeEnum]map[string]result.RuleInterface), + warnings: make([]*result.Warning, 0), + errors: make([]*result.Error, 0), } } -func (r *AnalysisResult) AddRule(rule RuleInterface.RuleInterface) { - ruleType := RuleTypeEnum.NewRuleTypeEnumByRule(rule) +func (r *AnalysisResult) AddRule(rule result.RuleInterface) { + ruleType := result.NewRuleTypeEnumByRule(rule) id := util.SplObjectID(rule) if _, ok := r.rules[ruleType]; !ok { - r.rules[ruleType] = make(map[string]RuleInterface.RuleInterface) + r.rules[ruleType] = make(map[string]result.RuleInterface) } r.rules[ruleType][id] = rule } -func (r *AnalysisResult) RemoveRule(rule RuleInterface.RuleInterface) { - ruleType := RuleTypeEnum.NewRuleTypeEnumByRule(rule) +func (r *AnalysisResult) RemoveRule(rule result.RuleInterface) { + ruleType := result.NewRuleTypeEnumByRule(rule) id := util.SplObjectID(rule) delete(r.rules[ruleType], id) } -func (r *AnalysisResult) Rules() map[RuleTypeEnum.RuleTypeEnum]map[string]RuleInterface.RuleInterface { +func (r *AnalysisResult) Rules() map[result.RuleTypeEnum]map[string]result.RuleInterface { return r.rules } -func (r *AnalysisResult) AddWarning(warning *Warning.Warning) { +func (r *AnalysisResult) AddWarning(warning *result.Warning) { r.warnings = append(r.warnings, warning) } -func (r *AnalysisResult) Warnings() []*Warning.Warning { +func (r *AnalysisResult) Warnings() []*result.Warning { return r.warnings } -func (r *AnalysisResult) AddError(error *Error.Error) { +func (r *AnalysisResult) AddError(error *result.Error) { r.errors = append(r.errors, error) } -func (r *AnalysisResult) Errors() []*Error.Error { +func (r *AnalysisResult) Errors() []*result.Error { return r.errors } diff --git a/pkg/src/contract/analyser/event_helper/EventHelper.php b/pkg/src/contract/analyser/event_helper/EventHelper.php deleted file mode 100644 index fdd0103..0000000 --- a/pkg/src/contract/analyser/event_helper/EventHelper.php +++ /dev/null @@ -1,55 +0,0 @@ -> depender layer -> list - */ - private array $unmatchedSkippedViolation; - /** - * @param array> $skippedViolations - */ - public function __construct(private readonly array $skippedViolations, public readonly LayerProvider $layerProvider) - { - $this->unmatchedSkippedViolation = $skippedViolations; - } - /** - * @internal - */ - public function shouldViolationBeSkipped(string $depender, string $dependent) : bool - { - $skippedViolation = $this->skippedViolations[$depender] ?? []; - $matched = [] !== $skippedViolation && \in_array($dependent, $skippedViolation, \true); - if (!$matched) { - return \false; - } - if (\false !== ($key = \array_search($dependent, $this->unmatchedSkippedViolation[$depender], \true))) { - unset($this->unmatchedSkippedViolation[$depender][$key]); - } - return \true; - } - /** - * @return array depender layer -> list - */ - public function unmatchedSkippedViolations() : array - { - return \array_filter($this->unmatchedSkippedViolation); - } - public function addSkippableViolation(\Qossmic\Deptrac\Contract\Analyser\ProcessEvent $event, \Qossmic\Deptrac\Contract\Analyser\AnalysisResult $result, string $dependentLayer, \Qossmic\Deptrac\Contract\Analyser\ViolationCreatingInterface $violationCreatingRule) : void - { - if ($this->shouldViolationBeSkipped($event->dependency->getDepender()->toString(), $event->dependency->getDependent()->toString())) { - $result->addRule(new SkippedViolation($event->dependency, $event->dependerLayer, $dependentLayer)); - } else { - $result->addRule(new Violation($event->dependency, $event->dependerLayer, $dependentLayer, $violationCreatingRule)); - } - } -} diff --git a/pkg/src/contract/analyser/event_helper/event_helper.go b/pkg/src/contract/analyser/event_helper/event_helper.go index ea902a5..e42eb3e 100644 --- a/pkg/src/contract/analyser/event_helper/event_helper.go +++ b/pkg/src/contract/analyser/event_helper/event_helper.go @@ -1,12 +1,11 @@ package event_helper import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/SkippedViolation" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -14,10 +13,10 @@ import ( type EventHelper struct { UnmatchedSkippedViolation map[string][]string SkippedViolations map[string][]string - LayerProvider *LayerProvider.LayerProvider + LayerProvider *layer.LayerProvider } -func NewEventHelper(skippedViolations map[string][]string, layerProvider *LayerProvider.LayerProvider) *EventHelper { +func NewEventHelper(skippedViolations map[string][]string, layerProvider *layer.LayerProvider) *EventHelper { return &EventHelper{ UnmatchedSkippedViolation: skippedViolations, SkippedViolations: skippedViolations, @@ -58,8 +57,8 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { func (e *EventHelper) AddSkippableViolation(event *process_event.ProcessEvent, analysisResult *analysis_result.AnalysisResult, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(SkippedViolation.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(result.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(Violation.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(result.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/src/contract/analyser/post_process_event/PostProcessEvent.php b/pkg/src/contract/analyser/post_process_event/PostProcessEvent.php deleted file mode 100644 index 2be7a71..0000000 --- a/pkg/src/contract/analyser/post_process_event/PostProcessEvent.php +++ /dev/null @@ -1,26 +0,0 @@ -result; - } - public function replaceResult(\Qossmic\Deptrac\Contract\Analyser\AnalysisResult $result) : void - { - $this->result = $result; - } -} diff --git a/pkg/src/contract/analyser/process_event/ProcessEvent.php b/pkg/src/contract/analyser/process_event/ProcessEvent.php deleted file mode 100644 index 6577df5..0000000 --- a/pkg/src/contract/analyser/process_event/ProcessEvent.php +++ /dev/null @@ -1,30 +0,0 @@ - $dependentLayers layer name and whether the dependency is public(true) or private(false) - */ - public function __construct(public readonly DependencyInterface $dependency, public readonly TokenReferenceInterface $dependerReference, public readonly string $dependerLayer, public readonly TokenReferenceInterface $dependentReference, public readonly array $dependentLayers, private \Qossmic\Deptrac\Contract\Analyser\AnalysisResult $result = new \Qossmic\Deptrac\Contract\Analyser\AnalysisResult()) - { - } - public function getResult() : \Qossmic\Deptrac\Contract\Analyser\AnalysisResult - { - return $this->result; - } - public function replaceResult(\Qossmic\Deptrac\Contract\Analyser\AnalysisResult $ruleset) : void - { - $this->result = $ruleset; - } -} diff --git a/pkg/src/contract/analyser/process_event/process_event.go b/pkg/src/contract/analyser/process_event/process_event.go index a71a6ca..55a0749 100644 --- a/pkg/src/contract/analyser/process_event/process_event.go +++ b/pkg/src/contract/analyser/process_event/process_event.go @@ -2,9 +2,9 @@ package process_event import ( "fmt" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" ) // ProcessEvent - Event that is triggered on every found dependency. Used to apply rules on the found dependencies. diff --git a/pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php b/pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php deleted file mode 100644 index 5d569d0..0000000 --- a/pkg/src/contract/analyser/violation_creating_interface/ViolationCreatingInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - 0 +} + +func (r *OutputResult) SkippedViolations() []*result.SkippedViolation { + untyped := r.AllOf(result.TypeSkippedViolation) + + items := make([]*result.SkippedViolation, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result.SkippedViolation)) + } + + return items +} + +func (r *OutputResult) Uncovered() []*result.Uncovered { + untyped := r.AllOf(result.TypeUncovered) + + items := make([]*result.Uncovered, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result.Uncovered)) + } + + return items +} + +func (r *OutputResult) HasUncovered() bool { + return len(r.Uncovered()) > 0 +} + +func (r *OutputResult) HasAllowed() bool { + return len(r.Allowed()) > 0 +} + +func (r *OutputResult) Allowed() []*result.Allowed { + untyped := r.AllOf(result.TypeAllowed) + + items := make([]*result.Allowed, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result.Allowed)) + } + + return items +} + +func (r *OutputResult) HasErrors() bool { + return len(r.Errors) > 0 +} + +func (r *OutputResult) HasWarnings() bool { + return len(r.Warnings) > 0 +} diff --git a/pkg/src/contract/result/rule_interface.go b/pkg/src/contract/result/rule_interface.go new file mode 100644 index 0000000..f25b8e8 --- /dev/null +++ b/pkg/src/contract/result/rule_interface.go @@ -0,0 +1,10 @@ +package result + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" +) + +// RuleInterface - Represents a dependency +type RuleInterface interface { + GetDependency() dependency.DependencyInterface +} diff --git a/pkg/src/contract/result/rule_type_enum.go b/pkg/src/contract/result/rule_type_enum.go new file mode 100644 index 0000000..d3ff6ee --- /dev/null +++ b/pkg/src/contract/result/rule_type_enum.go @@ -0,0 +1,29 @@ +package result + +import ( + "fmt" +) + +type RuleTypeEnum string + +const ( + TypeViolation RuleTypeEnum = "violation" + TypeSkippedViolation RuleTypeEnum = "skipped_violation" + TypeUncovered RuleTypeEnum = "uncovered" + TypeAllowed RuleTypeEnum = "allowed" +) + +func NewRuleTypeEnumByRule(rule RuleInterface) RuleTypeEnum { + switch rule.(type) { + case *Violation: + return TypeViolation + case *SkippedViolation: + return TypeSkippedViolation + case *Uncovered: + return TypeUncovered + case *Allowed: + return TypeAllowed + default: + panic(fmt.Errorf("unknown rule type: %T", rule)) + } +} diff --git a/pkg/src/contract/Result/SkippedViolation/SkippedViolation.go b/pkg/src/contract/result/skipped_violation.go similarity index 55% rename from pkg/src/contract/Result/SkippedViolation/SkippedViolation.go rename to pkg/src/contract/result/skipped_violation.go index cc8a8fc..c0f32bc 100644 --- a/pkg/src/contract/Result/SkippedViolation/SkippedViolation.go +++ b/pkg/src/contract/result/skipped_violation.go @@ -1,15 +1,17 @@ -package SkippedViolation +package result -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" +) // SkippedViolation - Represents a Violation that is being skipped by the baseline file type SkippedViolation struct { - Dependency DependencyInterface.DependencyInterface + Dependency dependency.DependencyInterface DependerLayer string DependentLayer string } -func NewSkippedViolation(dependency DependencyInterface.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { +func NewSkippedViolation(dependency dependency.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { return &SkippedViolation{ Dependency: dependency, DependerLayer: dependerLayer, @@ -17,7 +19,7 @@ func NewSkippedViolation(dependency DependencyInterface.DependencyInterface, dep } } -func (v *SkippedViolation) GetDependency() DependencyInterface.DependencyInterface { +func (v *SkippedViolation) GetDependency() dependency.DependencyInterface { return v.Dependency } func (v *SkippedViolation) GetDependerLayer() string { diff --git a/pkg/src/contract/result/uncovered.go b/pkg/src/contract/result/uncovered.go new file mode 100644 index 0000000..e59d1a6 --- /dev/null +++ b/pkg/src/contract/result/uncovered.go @@ -0,0 +1,22 @@ +package result + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" +) + +// Uncovered - Represents a dependency that is NOT covered by the current configuration. +type Uncovered struct { + Dependency dependency.DependencyInterface + Layer string +} + +func NewUncovered(dependency dependency.DependencyInterface, layer string) *Uncovered { + return &Uncovered{ + Dependency: dependency, + Layer: layer, + } +} + +func (u *Uncovered) GetDependency() dependency.DependencyInterface { + return u.Dependency +} diff --git a/pkg/src/contract/Result/Violation/Violation.go b/pkg/src/contract/result/violation.go similarity index 70% rename from pkg/src/contract/Result/Violation/Violation.go rename to pkg/src/contract/result/violation.go index 3fb3300..5260063 100644 --- a/pkg/src/contract/Result/Violation/Violation.go +++ b/pkg/src/contract/result/violation.go @@ -1,20 +1,20 @@ -package Violation +package result import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" ) // Violation - Represents a dependency that is NOT allowed to exist given the defined rules type Violation struct { - Dependency DependencyInterface.DependencyInterface + Dependency dependency.DependencyInterface DependerLayer string DependentLayer string ViolationCreatingRule violation_creating_interface.ViolationCreatingInterface } -func NewViolation(dependency DependencyInterface.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { +func NewViolation(dependency dependency.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { if dependentLayer == dependerLayer { panic("1") @@ -32,7 +32,7 @@ func NewViolation(dependency DependencyInterface.DependencyInterface, dependerLa } } -func (v *Violation) GetDependency() DependencyInterface.DependencyInterface { +func (v *Violation) GetDependency() dependency.DependencyInterface { return v.Dependency } func (v *Violation) GetDependerLayer() string { diff --git a/pkg/src/contract/Result/Warning/Warning.go b/pkg/src/contract/result/warning.go similarity index 97% rename from pkg/src/contract/Result/Warning/Warning.go rename to pkg/src/contract/result/warning.go index e82c8c9..63515cb 100644 --- a/pkg/src/contract/Result/Warning/Warning.go +++ b/pkg/src/contract/result/warning.go @@ -1,4 +1,4 @@ -package Warning +package result import ( "fmt" diff --git a/pkg/src/core/analyser/analyser_exception.go b/pkg/src/core/analyser/analyser_exception.go index 7e03f09..3f6d7c6 100644 --- a/pkg/src/core/analyser/analyser_exception.go +++ b/pkg/src/core/analyser/analyser_exception.go @@ -2,10 +2,8 @@ package analyser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CircularReferenceException" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidLayerDefinitionException" astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" ) @@ -31,11 +29,11 @@ func NewUnrecognizedToken(e *dependency.UnrecognizedTokenException) *AnalyserExc return &AnalyserException{Message: "Unrecognized token.", Previous: e} } -func NewInvalidLayerDefinition(e *InvalidLayerDefinitionException.InvalidLayerDefinitionException) *AnalyserException { +func NewInvalidLayerDefinition(e *layer.InvalidLayerDefinitionException) *AnalyserException { return &AnalyserException{Message: "Invalid layer definition.", Previous: e} } -func NewInvalidCollectorDefinition(e *InvalidCollectorDefinitionException.InvalidCollectorDefinitionException) *AnalyserException { +func NewInvalidCollectorDefinition(e *layer.InvalidCollectorDefinitionException) *AnalyserException { return &AnalyserException{Message: "Invalid collector definition.", Previous: e} } @@ -47,6 +45,6 @@ func NewCouldNotParseFile(e *astContract.CouldNotParseFileException) *AnalyserEx return &AnalyserException{Message: "Could not parse file.", Previous: e} } -func NewCircularReference(e *CircularReferenceException.CircularReferenceException) *AnalyserException { +func NewCircularReference(e *layer.CircularReferenceException) *AnalyserException { return &AnalyserException{Message: "Circular layer dependency.", Previous: e} } diff --git a/pkg/src/core/analyser/dependency_layers_analyser.go b/pkg/src/core/analyser/dependency_layers_analyser.go index 4e8654b..e13c713 100644 --- a/pkg/src/core/analyser/dependency_layers_analyser.go +++ b/pkg/src/core/analyser/dependency_layers_analyser.go @@ -2,16 +2,16 @@ package analyser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Warning" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" ) type DependencyLayersAnalyser struct { @@ -46,8 +46,8 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e if err != nil { return nil, err } - result := analysis_result.NewAnalysisResult() - warnings := make(map[string]*Warning.Warning) + analysisResult := analysis_result.NewAnalysisResult() + warnings := make(map[string]*result.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) @@ -72,7 +72,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e _, ok := warnings[depender.ToString()] if !ok && len(dependerLayers) > 1 { - warnings[depender.ToString()] = Warning.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) + warnings[depender.ToString()] = result.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) } dependent := dependency.GetDependent() @@ -84,20 +84,20 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e } for _, dependerLayer := range dependerLayers { - event := process_event.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, result) + event := process_event.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) err := a.eventDispatcher.DispatchEvent(event) if err != nil { return nil, err } - result = event.GetResult() + analysisResult = event.GetResult() } } for _, warning := range warnings { - result.AddWarning(warning) + analysisResult.AddWarning(warning) } - event := post_process_event.NewPostProcessEvent(result) + event := post_process_event.NewPostProcessEvent(analysisResult) errDispatch := a.eventDispatcher.DispatchEvent(event) if errDispatch != nil { return nil, errDispatch diff --git a/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go b/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go index 415aad2..792bee8 100644 --- a/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go +++ b/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go @@ -2,9 +2,9 @@ package post_process_event import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" ) type UnmatchedSkippedViolations struct { @@ -21,7 +21,7 @@ func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, ruleset := event.GetResult() for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { for _, tokenB := range tokensB { - ruleset.AddError(Error.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) + ruleset.AddError(result.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) } } stopPropagation() diff --git a/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go b/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go index 4c62abc..88418ae 100644 --- a/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go +++ b/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Allowed" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" ) type AllowDependencyHandler struct{} @@ -16,7 +16,7 @@ func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPr ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { - ruleset.AddRule(Allowed.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) + ruleset.AddRule(result.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) stopPropagation() } diff --git a/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go b/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go index 39e961d..4e945f7 100644 --- a/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go +++ b/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Error" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -21,7 +21,7 @@ func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, s ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) if err != nil { - ruleset.AddError(Error.NewError(err.Error())) + ruleset.AddError(result.NewError(err.Error())) stopPropagation() return nil } diff --git a/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go b/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go index b52dc0a..b97b288 100644 --- a/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go +++ b/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) @@ -12,7 +12,7 @@ type DependsOnInternalToken struct { internalTag *string } -func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *AnalyserConfig.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *config.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } diff --git a/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go b/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go index 0911485..6fed5f1 100644 --- a/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go +++ b/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go @@ -1,6 +1,8 @@ package process_event -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" +) type MatchingLayersHandler struct{} diff --git a/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go b/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go index 16f1d2b..f19ee79 100644 --- a/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go +++ b/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) @@ -27,7 +27,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, if dependentClassLike, ok := dependent.(*ast_map.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { - ruleset.AddRule(Uncovered.NewUncovered(event.Dependency, event.DependerLayer)) + ruleset.AddRule(result.NewUncovered(event.Dependency, event.DependerLayer)) } } diff --git a/pkg/src/core/analyser/layer_dependencies_analyser.go b/pkg/src/core/analyser/layer_dependencies_analyser.go index b9d1905..39c17a0 100644 --- a/pkg/src/core/analyser/layer_dependencies_analyser.go +++ b/pkg/src/core/analyser/layer_dependencies_analyser.go @@ -1,7 +1,7 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" @@ -29,8 +29,8 @@ func NewLayerDependenciesAnalyser( } } -func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*Uncovered.Uncovered, error) { - result := make(map[string][]*Uncovered.Uncovered) +func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*result.Uncovered, error) { + uncoveredResult := make(map[string][]*result.Uncovered) astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -53,10 +53,10 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s if layer == dependentLayerName || targetLayer != nil && *targetLayer != dependentLayerName { continue } - if _, ok := result[dependentLayerName]; !ok { - result[dependentLayerName] = make([]*Uncovered.Uncovered, 0) + if _, ok := uncoveredResult[dependentLayerName]; !ok { + uncoveredResult[dependentLayerName] = make([]*result.Uncovered, 0) } - result[dependentLayerName] = append(result[dependentLayerName], Uncovered.NewUncovered(dependency, dependentLayerName)) + uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], result.NewUncovered(dependency, dependentLayerName)) } } } @@ -76,5 +76,5 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::couldNotParseFile($e); //} - return result, nil + return uncoveredResult, nil } diff --git a/pkg/src/core/analyser/ruleset_usage_analyser.go b/pkg/src/core/analyser/ruleset_usage_analyser.go index c95e870..2f77bdd 100644 --- a/pkg/src/core/analyser/ruleset_usage_analyser.go +++ b/pkg/src/core/analyser/ruleset_usage_analyser.go @@ -1,8 +1,8 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Layer" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" @@ -10,21 +10,21 @@ import ( ) type RulesetUsageAnalyser struct { - layerProvider *LayerProvider.LayerProvider + layerProvider *layer.LayerProvider layerResolver Layer2.LayerResolverInterface astMapExtractor *ast.AstMapExtractor dependencyResolver *dependency_resolver.DependencyResolver tokenResolver *dependency.TokenResolver - layers []*Layer.Layer + layers []*config.Layer } func NewRulesetUsageAnalyser( - layerProvider *LayerProvider.LayerProvider, + layerProvider *layer.LayerProvider, layerResolver Layer2.LayerResolverInterface, astMapExtractor *ast.AstMapExtractor, dependencyResolver *dependency_resolver.DependencyResolver, tokenResolver *dependency.TokenResolver, - layers []*Layer.Layer, + layers []*config.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, diff --git a/pkg/src/core/analyser/token_in_layer_analyser.go b/pkg/src/core/analyser/token_in_layer_analyser.go index 8f45220..92b8705 100644 --- a/pkg/src/core/analyser/token_in_layer_analyser.go +++ b/pkg/src/core/analyser/token_in_layer_analyser.go @@ -1,7 +1,7 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" @@ -10,7 +10,7 @@ import ( type TokenInLayerAnalyser struct { tokenTypes []TokenType - config *AnalyserConfig.AnalyserConfig + config *config.AnalyserConfig astMapExtractor *ast.AstMapExtractor tokenResolver *dependency.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface @@ -20,7 +20,7 @@ func NewTokenInLayerAnalyser( astMapExtractor *ast.AstMapExtractor, tokenResolver *dependency.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, - config *AnalyserConfig.AnalyserConfig, + config *config.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/src/core/analyser/token_type.go b/pkg/src/core/analyser/token_type.go index 8a25bd0..9d8eb8c 100644 --- a/pkg/src/core/analyser/token_type.go +++ b/pkg/src/core/analyser/token_type.go @@ -1,6 +1,8 @@ package analyser -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" +) type TokenType string @@ -10,8 +12,8 @@ const ( TokenTypeFile TokenType = "file" ) -func NewTokenTypeTryFromEmitterType(emitterType EmitterType.EmitterType) *TokenType { - if emitterType == EmitterType.ClassToken { +func NewTokenTypeTryFromEmitterType(emitterType config.EmitterType) *TokenType { + if emitterType == config.ClassToken { classLikeTokenType := TokenTypeClassLike return &classLikeTokenType } else { diff --git a/pkg/src/core/analyser/unassigned_token_analyser.go b/pkg/src/core/analyser/unassigned_token_analyser.go index 0224275..bfb0972 100644 --- a/pkg/src/core/analyser/unassigned_token_analyser.go +++ b/pkg/src/core/analyser/unassigned_token_analyser.go @@ -1,7 +1,7 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" @@ -10,7 +10,7 @@ import ( type UnassignedTokenAnalyser struct { tokenTypes []TokenType - config *AnalyserConfig.AnalyserConfig + config *config.AnalyserConfig astMapExtractor *ast.AstMapExtractor tokenResolver *dependency.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface @@ -20,7 +20,7 @@ func NewUnassignedTokenAnalyser( astMapExtractor *ast.AstMapExtractor, tokenResolver *dependency.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, - config *AnalyserConfig.AnalyserConfig, + config *config.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/src/core/ast/ast_loader.go b/pkg/src/core/ast/ast_loader.go index 58c723e..f3c0f2a 100644 --- a/pkg/src/core/ast/ast_loader.go +++ b/pkg/src/core/ast/ast_loader.go @@ -4,7 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" ) type AstLoader struct { diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go b/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go index 635ad8e..b8c5181 100644 --- a/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go +++ b/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go @@ -3,7 +3,7 @@ package cache import ( "encoding/json" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/FileReader" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -82,7 +82,7 @@ func (c *AstFileReferenceFileCache) Load() error { if !util.FileExists(c.cacheFile) || !util.IsReadable(c.cacheFile) { return nil } - contents, err := FileReader.FileReaderRead(c.cacheFile) + contents, err := file.FileReaderRead(c.cacheFile) if err != nil { return err } diff --git a/pkg/src/core/dependency/dependency_list.go b/pkg/src/core/dependency/dependency_list.go index c498cdd..53487b7 100644 --- a/pkg/src/core/dependency/dependency_list.go +++ b/pkg/src/core/dependency/dependency_list.go @@ -1,25 +1,25 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" ) type DependencyList struct { - dependencies map[string][]DependencyInterface.DependencyInterface + dependencies map[string][]Dependency2.DependencyInterface inheritDependencies map[string][]*InheritDependency } func NewDependencyList() *DependencyList { return &DependencyList{ - dependencies: map[string][]DependencyInterface.DependencyInterface{}, + dependencies: map[string][]Dependency2.DependencyInterface{}, inheritDependencies: map[string][]*InheritDependency{}, } } -func (l *DependencyList) AddDependency(dep DependencyInterface.DependencyInterface) { +func (l *DependencyList) AddDependency(dep Dependency2.DependencyInterface) { tokenName := dep.GetDepender().ToString() if l.dependencies[tokenName] == nil { - l.dependencies[tokenName] = make([]DependencyInterface.DependencyInterface, 0) + l.dependencies[tokenName] = make([]Dependency2.DependencyInterface, 0) } l.dependencies[tokenName] = append(l.dependencies[tokenName], dep) } @@ -29,12 +29,12 @@ func (l *DependencyList) AddInheritDependency(dep *InheritDependency) { l.inheritDependencies[tokenName] = append(l.inheritDependencies[dep.GetDepender().ToString()], dep) } -func (l *DependencyList) GetDependenciesByClass(classLikeName string) []DependencyInterface.DependencyInterface { +func (l *DependencyList) GetDependenciesByClass(classLikeName string) []Dependency2.DependencyInterface { return l.dependencies[classLikeName] } -func (l *DependencyList) GetDependenciesAndInheritDependencies() []DependencyInterface.DependencyInterface { - buffer := make([]DependencyInterface.DependencyInterface, 0) +func (l *DependencyList) GetDependenciesAndInheritDependencies() []Dependency2.DependencyInterface { + buffer := make([]Dependency2.DependencyInterface, 0) for _, v := range l.dependencies { buffer = append(buffer, v...) } diff --git a/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go b/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go index 5c7aefb..73e02c6 100644 --- a/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go +++ b/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go @@ -1,27 +1,23 @@ package dependency_resolver import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/AnalyserConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostEmitEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostFlattenEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreEmitEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreFlattenEvent" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + contractDependency "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/emitter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" "reflect" ) type DependencyResolver struct { - config *AnalyserConfig.AnalyserConfig + config *config.AnalyserConfig inheritanceFlattener *dependency.InheritanceFlattener - emitterLocator map[EmitterType.EmitterType]emitter.DependencyEmitterInterface + emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface eventDispatcher util.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *AnalyserConfig.AnalyserConfig, emitterLocator map[EmitterType.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher util.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *config.AnalyserConfig, emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher util.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, @@ -44,27 +40,27 @@ func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependency.Depend return nil, dependency.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, dependencyEmitterInterface) } - err := r.eventDispatcher.DispatchEvent(PreEmitEvent.NewPreEmitEvent(dependencyEmitterInterface.GetName())) + err := r.eventDispatcher.DispatchEvent(contractDependency.NewPreEmitEvent(dependencyEmitterInterface.GetName())) if err != nil { return nil, err } dependencyEmitterInterface.ApplyDependencies(*astMap, result) - errDispatchPostEmit := r.eventDispatcher.DispatchEvent(PostEmitEvent.NewPostEmitEvent()) + errDispatchPostEmit := r.eventDispatcher.DispatchEvent(contractDependency.NewPostEmitEvent()) if errDispatchPostEmit != nil { return nil, errDispatchPostEmit } } - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(PreFlattenEvent.NewPreFlattenEvent()) + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(contractDependency.NewPreFlattenEvent()) if errDispatchPreFlatten != nil { return nil, errDispatchPreFlatten } r.inheritanceFlattener.FlattenDependencies(*astMap, result) - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(PostFlattenEvent.NewPostFlattenEvent()) + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(contractDependency.NewPostFlattenEvent()) if errDispatchPostFlatten != nil { return nil, errDispatchPostFlatten } diff --git a/pkg/src/core/dependency/inherit_dependency.go b/pkg/src/core/dependency/inherit_dependency.go index b96b91a..6e04fcb 100644 --- a/pkg/src/core/dependency/inherit_dependency.go +++ b/pkg/src/core/dependency/inherit_dependency.go @@ -1,19 +1,19 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) type InheritDependency struct { depender *ast_map.ClassLikeToken dependent ast.TokenInterface - originalDependency DependencyInterface.DependencyInterface + originalDependency Dependency2.DependencyInterface inheritPath *ast_map.AstInherit } -func NewInheritDependency(depender *ast_map.ClassLikeToken, dependent ast.TokenInterface, originalDependency DependencyInterface.DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { +func NewInheritDependency(depender *ast_map.ClassLikeToken, dependent ast.TokenInterface, originalDependency Dependency2.DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { return &InheritDependency{depender: depender, dependent: dependent, originalDependency: originalDependency, inheritPath: inheritPath} } diff --git a/pkg/src/core/dependency/invalid_emitter_configuration_exception.go b/pkg/src/core/dependency/invalid_emitter_configuration_exception.go index 06cca8a..25c7368 100644 --- a/pkg/src/core/dependency/invalid_emitter_configuration_exception.go +++ b/pkg/src/core/dependency/invalid_emitter_configuration_exception.go @@ -2,7 +2,7 @@ package dependency import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" ) type InvalidEmitterConfigurationException struct { @@ -17,10 +17,10 @@ func NewInvalidEmitterConfigurationException(message string) *InvalidEmitterConf return &InvalidEmitterConfigurationException{Message: message} } -func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType EmitterType.EmitterType) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType config.EmitterType) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Could not locate emitter type '%s' in the DI container.", emitterType)) } -func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType EmitterType.EmitterType, emitter interface{}) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType config.EmitterType, emitter interface{}) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Type \"%s\" is not valid emitter (expected \"%s\", but is \"%T\").", emitterType, "DependencyEmitterInterface", emitter)) } diff --git a/pkg/src/core/input_collector/file_input_collector.go b/pkg/src/core/input_collector/file_input_collector.go index 22f956e..4e05115 100644 --- a/pkg/src/core/input_collector/file_input_collector.go +++ b/pkg/src/core/input_collector/file_input_collector.go @@ -1,8 +1,8 @@ package input_collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ExceptionInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Exception/InvalidPathException" + "github.com/KoNekoD/go-deptrac/pkg/src/contract" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -20,7 +20,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string return nil, err } if !fileInfo.IsDir() || !util.IsReadable(basePath) { - return nil, InvalidPathException.NewInvalidPathExceptionUnreadablePath(fileInfo) + return nil, exception.NewInvalidPathExceptionUnreadablePath(fileInfo) } paths := make([]string, 0) for _, originalPath := range originalPaths { @@ -36,7 +36,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string if err != nil { return nil, err } - return nil, InvalidPathException.NewInvalidPathExceptionUnreadablePath(pathFileInfo) + return nil, exception.NewInvalidPathExceptionUnreadablePath(pathFileInfo) } paths = append(paths, util.PathCanonicalize(path)) } @@ -46,7 +46,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string func (c *FileInputCollector) Collect() ([]string, error) { if len(c.paths) == 0 { - return nil, ExceptionInterface.NewException("No 'paths' defined in the depfile.") + return nil, contract.NewException("No 'paths' defined in the depfile.") } regex, err := regexp.Compile(".*\\.go") diff --git a/pkg/src/core/layer/collector/abstract_type_collector.go b/pkg/src/core/layer/collector/abstract_type_collector.go index 554a1cf..58795de 100644 --- a/pkg/src/core/layer/collector/abstract_type_collector.go +++ b/pkg/src/core/layer/collector/abstract_type_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" ) @@ -41,7 +41,7 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) } } return fmt.Sprintf("/%s/i", config["value"].(string)), nil diff --git a/pkg/src/core/layer/collector/bool_collector.go b/pkg/src/core/layer/collector/bool_collector.go index 8ae39fe..368104e 100644 --- a/pkg/src/core/layer/collector/bool_collector.go +++ b/pkg/src/core/layer/collector/bool_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" ) type BoolCollector struct { @@ -55,15 +55,15 @@ func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast.Tok func (b *BoolCollector) normalizeConfiguration(configuration map[string]interface{}) (map[string]interface{}, error) { if _, ok := configuration["must"]; !ok { - configuration["must"] = make([]*CollectorConfig.CollectorConfig, 0) + configuration["must"] = make([]*config.CollectorConfig, 0) } if _, ok := configuration["must_not"]; !ok { - configuration["must_not"] = make([]*CollectorConfig.CollectorConfig, 0) + configuration["must_not"] = make([]*config.CollectorConfig, 0) } if len(configuration["must"].([]interface{})) == 0 && len(configuration["must_not"].([]interface{})) == 0 { - return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) + return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) } return configuration, nil diff --git a/pkg/src/core/layer/collector/class_name_regex_collector.go b/pkg/src/core/layer/collector/class_name_regex_collector.go index e8c1036..9c52882 100644 --- a/pkg/src/core/layer/collector/class_name_regex_collector.go +++ b/pkg/src/core/layer/collector/class_name_regex_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -32,7 +32,7 @@ func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, referenc func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") } return config["value"].(string), nil diff --git a/pkg/src/core/layer/collector/collectable.go b/pkg/src/core/layer/collector/collectable.go index ed7f3bf..8d4a0a1 100644 --- a/pkg/src/core/layer/collector/collectable.go +++ b/pkg/src/core/layer/collector/collectable.go @@ -1,12 +1,14 @@ package collector -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CollectorInterface" +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" +) type Collectable struct { - Collector CollectorInterface.CollectorInterface + Collector layer.CollectorInterface Attributes map[string]interface{} } -func NewCollectable(collector CollectorInterface.CollectorInterface, attributes map[string]interface{}) *Collectable { +func NewCollectable(collector layer.CollectorInterface, attributes map[string]interface{}) *Collectable { return &Collectable{Collector: collector, Attributes: attributes} } diff --git a/pkg/src/core/layer/collector/collector_provider.go b/pkg/src/core/layer/collector/collector_provider.go index 952bf85..f8d540c 100644 --- a/pkg/src/core/layer/collector/collector_provider.go +++ b/pkg/src/core/layer/collector/collector_provider.go @@ -1,33 +1,33 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CollectorInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "golang.org/x/exp/maps" ) type CollectorProvider struct { - collectors map[CollectorType.CollectorType]CollectorInterface.CollectorInterface + collectors map[config.CollectorType]layer.CollectorInterface } func NewCollectorProvider() *CollectorProvider { return &CollectorProvider{} } -func (p *CollectorProvider) Set(collectors map[CollectorType.CollectorType]CollectorInterface.CollectorInterface) *CollectorProvider { +func (p *CollectorProvider) Set(collectors map[config.CollectorType]layer.CollectorInterface) *CollectorProvider { p.collectors = collectors return p } -func (p *CollectorProvider) Get(id CollectorType.CollectorType) CollectorInterface.CollectorInterface { +func (p *CollectorProvider) Get(id config.CollectorType) layer.CollectorInterface { return p.collectors[id] } -func (p *CollectorProvider) Has(id CollectorType.CollectorType) bool { +func (p *CollectorProvider) Has(id config.CollectorType) bool { _, ok := p.collectors[id] return ok } -func (p *CollectorProvider) GetKnownCollectors() []CollectorType.CollectorType { +func (p *CollectorProvider) GetKnownCollectors() []config.CollectorType { return maps.Keys(p.collectors) } diff --git a/pkg/src/core/layer/collector/collector_resolver.go b/pkg/src/core/layer/collector/collector_resolver.go index 87acf2d..cd084c3 100644 --- a/pkg/src/core/layer/collector/collector_resolver.go +++ b/pkg/src/core/layer/collector/collector_resolver.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" ) type CollectorResolver struct { @@ -13,17 +13,17 @@ func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolv return &CollectorResolver{collectorProvider: collectorProvider} } -func (c *CollectorResolver) Resolve(config map[string]interface{}) (*Collectable, error) { - classLikeType, err := CollectorType.NewCollectorTypeFromString(config["type"].(string)) +func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*Collectable, error) { + classLikeType, err := config.NewCollectorTypeFromString(configMap["type"].(string)) if err != nil { return nil, err } if !c.collectorProvider.Has(classLikeType) { - return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionUnsupportedType(classLikeType, c.collectorProvider.GetKnownCollectors(), nil) + return nil, layer.NewInvalidCollectorDefinitionExceptionUnsupportedType(classLikeType, c.collectorProvider.GetKnownCollectors(), nil) } collector := c.collectorProvider.Get(classLikeType) - return NewCollectable(collector, config), nil + return NewCollectable(collector, configMap), nil } diff --git a/pkg/src/core/layer/collector/composer_collector.go b/pkg/src/core/layer/collector/composer_collector.go index ed0cf25..645c0e6 100644 --- a/pkg/src/core/layer/collector/composer_collector.go +++ b/pkg/src/core/layer/collector/composer_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -14,13 +14,13 @@ func NewComposerCollector() *ComposerCollector { func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { if !util.MapKeyExists(config, "composerPath") || !util.MapKeyIsString(config, "composerPath") { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file as string.") + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file as string.") } if !util.MapKeyExists(config, "composerLockPath") || !util.MapKeyIsString(config, "composerLockPath") { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file as string.") + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file as string.") } if !util.MapKeyExists(config, "packages") || !util.MapKeyIsArrayOfStrings(config, "packages") { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") } // TODO: implement go.mod parsing diff --git a/pkg/src/core/layer/collector/directory_collector.go b/pkg/src/core/layer/collector/directory_collector.go index 9443f65..087bc82 100644 --- a/pkg/src/core/layer/collector/directory_collector.go +++ b/pkg/src/core/layer/collector/directory_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" "regexp" ) @@ -42,7 +42,7 @@ func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference as func (c *DirectoryCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") } } diff --git a/pkg/src/core/layer/collector/function_name_collector.go b/pkg/src/core/layer/collector/function_name_collector.go index 01872cf..a9dac22 100644 --- a/pkg/src/core/layer/collector/function_name_collector.go +++ b/pkg/src/core/layer/collector/function_name_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -31,7 +31,7 @@ func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference func (c FunctionNameCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") } return fmt.Sprintf("/%s/i", config["value"].(string)), nil diff --git a/pkg/src/core/layer/collector/glob_collector.go b/pkg/src/core/layer/collector/glob_collector.go index cf7a707..95126f8 100644 --- a/pkg/src/core/layer/collector/glob_collector.go +++ b/pkg/src/core/layer/collector/glob_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" filepath2 "path/filepath" "regexp" @@ -49,7 +49,7 @@ func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast.Tok func (c *GlobCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") } return util.GlogToRegex(config["value"].(string)), nil diff --git a/pkg/src/core/layer/collector/inheritance_level_collector.go b/pkg/src/core/layer/collector/inheritance_level_collector.go index a05e560..23f4e59 100644 --- a/pkg/src/core/layer/collector/inheritance_level_collector.go +++ b/pkg/src/core/layer/collector/inheritance_level_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" @@ -32,7 +32,7 @@ func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, refer classInherits := c.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) if !util.MapKeyExists(config, "value") || util.MapKeyIsInt(config, "value") { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") } depth := config["value"].(int) diff --git a/pkg/src/core/layer/collector/inherits_collector.go b/pkg/src/core/layer/collector/inherits_collector.go index 4f96329..cbdedba 100644 --- a/pkg/src/core/layer/collector/inherits_collector.go +++ b/pkg/src/core/layer/collector/inherits_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" @@ -45,7 +45,7 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference ast func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") + return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") } return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil diff --git a/pkg/src/core/layer/collector/layer_collector.go b/pkg/src/core/layer/collector/layer_collector.go index f4c4baa..4bc4c05 100644 --- a/pkg/src/core/layer/collector/layer_collector.go +++ b/pkg/src/core/layer/collector/layer_collector.go @@ -2,9 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidLayerDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -23,39 +22,39 @@ func NewLayerCollector(resolver layer_resolver_interface.LayerResolverInterface) func (c *LayerCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("LayerCollector needs the layer configuration, expected 'value' config is missing or invalid.") + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("LayerCollector needs the layer configuration, expected 'value' config is missing or invalid.") } } - layer := config["value"].(string) + configValueLayer := config["value"].(string) - hasInResolver, err := c.resolver.Has(layer) + hasInResolver, err := c.resolver.Has(configValueLayer) if err != nil { return false, err } if !hasInResolver { - return false, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer \"%s\" specified in collector.", layer)) + return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer \"%s\" specified in collector.", configValueLayer)) } token := reference.GetToken().ToString() - if util.MapKeyExists(c.resolved, token) && util.MapKeyExists(c.resolved[token], layer) { - if c.resolved[token][layer] == nil { - return false, InvalidLayerDefinitionException.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) + if util.MapKeyExists(c.resolved, token) && util.MapKeyExists(c.resolved[token], configValueLayer) { + if c.resolved[token][configValueLayer] == nil { + return false, layer.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) } - return *c.resolved[token][layer], nil + return *c.resolved[token][configValueLayer], nil } // Set resolved for current token to null in case resolver comes back to it (circular reference) - c.resolved[token][layer] = nil + c.resolved[token][configValueLayer] = nil - resolvedValue, err := c.resolver.IsReferenceInLayer(layer, reference) + resolvedValue, err := c.resolver.IsReferenceInLayer(configValueLayer, reference) if err != nil { return false, err } - c.resolved[token][layer] = &resolvedValue + c.resolved[token][configValueLayer] = &resolvedValue return resolvedValue, nil } diff --git a/pkg/src/core/layer/collector/method_collector.go b/pkg/src/core/layer/collector/method_collector.go index 93c07f3..76f1d60 100644 --- a/pkg/src/core/layer/collector/method_collector.go +++ b/pkg/src/core/layer/collector/method_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" "github.com/KoNekoD/go-deptrac/pkg/util" @@ -48,7 +48,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast.T func (c *MethodCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") } return fmt.Sprintf("/%s/i", config["value"].(string)), nil } diff --git a/pkg/src/core/layer/collector/regex_collector.go b/pkg/src/core/layer/collector/regex_collector.go index 38adadb..354bf2e 100644 --- a/pkg/src/core/layer/collector/regex_collector.go +++ b/pkg/src/core/layer/collector/regex_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "regexp" ) @@ -18,7 +18,7 @@ func (c *RegexCollector) GetValidatedPattern(config map[string]interface{}, getP } if _, err = regexp.Compile(pattern); err != nil { - return "", InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) + return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) } return pattern, nil diff --git a/pkg/src/core/layer/collector/superglobal_collector.go b/pkg/src/core/layer/collector/superglobal_collector.go index 0bea8f4..1105c6c 100644 --- a/pkg/src/core/layer/collector/superglobal_collector.go +++ b/pkg/src/core/layer/collector/superglobal_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -34,7 +34,7 @@ func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference a func (c SuperglobalCollector) getNames(config map[string]interface{}) ([]string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsArrayOfStrings(config, "value") { - return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") + return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") } return config["value"].([]string), nil diff --git a/pkg/src/core/layer/collector/uses_collector.go b/pkg/src/core/layer/collector/uses_collector.go index b7880c8..eacbb74 100644 --- a/pkg/src/core/layer/collector/uses_collector.go +++ b/pkg/src/core/layer/collector/uses_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/InvalidCollectorDefinitionException" astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" @@ -45,7 +45,7 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference astCont func (u *UsesCollector) getTraitName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, InvalidCollectorDefinitionException.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") + return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") } return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil diff --git a/pkg/src/core/layer/layer_resolver.go b/pkg/src/core/layer/layer_resolver.go index 8dcf957..5b728ee 100644 --- a/pkg/src/core/layer/layer_resolver.go +++ b/pkg/src/core/layer/layer_resolver.go @@ -2,8 +2,8 @@ package layer import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Layer" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" "reflect" @@ -13,7 +13,7 @@ import ( // LayerResolver - LayerResolverInterface defines the structure for a layer resolver type LayerResolver struct { collectorResolver collector.CollectorResolverInterface - layersConfig []*Layer.Layer + layersConfig []*config.Layer layers map[string][]*collector.Collectable initialized bool resolved map[string]map[string]bool @@ -21,7 +21,7 @@ type LayerResolver struct { } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collector.CollectorResolverInterface, layersConfig []*Layer.Layer) layer_resolver_interface.LayerResolverInterface { +func NewLayerResolver(collectorResolver collector.CollectorResolverInterface, layersConfig []*config.Layer) layer_resolver_interface.LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, diff --git a/pkg/src/supportive/Console/Application/Application.php b/pkg/src/supportive/Console/Application/Application.php deleted file mode 100644 index 53ab724..0000000 --- a/pkg/src/supportive/Console/Application/Application.php +++ /dev/null @@ -1,79 +0,0 @@ -addOptions([new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display help for the given command. When no command is given display help for the analyse command'), new InputOption('--no-cache', null, InputOption::VALUE_NONE, 'Disable caching mechanisms (wins over --cache-file)'), new InputOption('--clear-cache', null, InputOption::VALUE_NONE, 'Clears cache file before run'), new InputOption('--cache-file', null, InputOption::VALUE_REQUIRED, 'Location where cache file will be stored', null), new InputOption('--config-file', '-c', InputOption::VALUE_REQUIRED, 'Location of Depfile containing the configuration', getcwd() . DIRECTORY_SEPARATOR . 'deptrac.yaml')]); - return $definition; - } - /** - * @throws Throwable - */ - public function doRun(InputInterface $input, OutputInterface $output) : int - { - if (\false === ($currentWorkingDirectory = getcwd())) { - throw \Qossmic\Deptrac\Supportive\Console\CannotGetCurrentWorkingDirectoryException::cannotGetCWD(); - } - try { - $input->bind($this->getDefinition()); - } catch (ExceptionInterface) { - // Errors must be ignored, full binding/validation happens later when the command is known. - } - if (null === $input->getArgument('command') && \true === $input->getOption('version')) { - return parent::doRun($input, $output); - } - /** @var string|numeric|null $configFile */ - $configFile = $input->getOption('config-file'); - $config = $input->hasOption('config-file') ? (string) $configFile : $currentWorkingDirectory . DIRECTORY_SEPARATOR . 'deptrac.yaml'; - /** @var ?string $cache */ - $cache = $input->getParameterOption('--cache-file', null); - $factory = new ServiceContainerBuilder($currentWorkingDirectory); - if (!in_array($input->getArgument('command'), ['init', 'list', 'help', 'completion'], \true)) { - $factory = $factory->withConfig($config); - } - $noCache = $input->hasParameterOption('--no-cache', \true); - try { - $container = $factory->build($noCache ? \false : $cache, $input->hasParameterOption('--clear-cache', \true)); - $commandLoader = $container->get('console.command_loader'); - if (!$commandLoader instanceof CommandLoaderInterface) { - throw new RuntimeException('CommandLoader not initialized. Commands can not be registered.'); - } - $this->setCommandLoader($commandLoader); - $this->setDefaultCommand('analyse'); - } catch (CannotLoadConfiguration $e) { - if (\false === $input->hasParameterOption(['--help', '-h'], \true)) { - throw $e; - } - $this->setDefaultCommand('help'); - } - return parent::doRun($input, $output); - } -} diff --git a/pkg/src/supportive/Console/CannotGetCurrentWorkingDirectoryException/CannotGetCurrentWorkingDirectoryException.php b/pkg/src/supportive/Console/CannotGetCurrentWorkingDirectoryException/CannotGetCurrentWorkingDirectoryException.php deleted file mode 100644 index 1469f24..0000000 --- a/pkg/src/supportive/Console/CannotGetCurrentWorkingDirectoryException/CannotGetCurrentWorkingDirectoryException.php +++ /dev/null @@ -1,18 +0,0 @@ -addOption('formatter', 'f', InputOption::VALUE_OPTIONAL, \sprintf('Format in which to print the result of the analysis. Possible: ["%s"]', \implode('", "', $this->formatterProvider->getKnownFormatters()))); - $this->addOption('output', 'o', InputOption::VALUE_OPTIONAL, 'Output file path for formatter (if applicable)'); - $this->addOption('no-progress', null, InputOption::VALUE_NONE, 'Do not show progress bar'); - $this->addOption(self::OPTION_FAIL_ON_UNCOVERED, null, InputOption::VALUE_NONE, 'Fails if any uncovered dependency is found'); - $this->addOption(self::OPTION_REPORT_UNCOVERED, null, InputOption::VALUE_NONE, 'Report uncovered dependencies'); - $this->addOption(self::OPTION_REPORT_SKIPPED, null, InputOption::VALUE_NONE, 'Report skipped violations'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - \ini_set('memory_limit', '-1'); - $symfonyOutput = new SymfonyOutput($output, new Style(new SymfonyStyle($input, $output))); - /** @var ?string $formatter */ - $formatter = $input->getOption('formatter'); - $formatter ??= self::getDefaultFormatter(); - /** @var string|numeric|null $output */ - $output = $input->getOption('output'); - $options = new \Qossmic\Deptrac\Supportive\Console\Command\AnalyseOptions((bool) $input->getOption('no-progress'), $formatter, null === $output ? null : (string) $output, (bool) $input->getOption(self::OPTION_REPORT_SKIPPED), (bool) $input->getOption(self::OPTION_REPORT_UNCOVERED), (bool) $input->getOption(self::OPTION_FAIL_ON_UNCOVERED)); - $this->dispatcher->addSubscriber(new ConsoleSubscriber($symfonyOutput, new Stopwatch())); - if (!$options->noProgress) { - $this->dispatcher->addSubscriber(new ProgressSubscriber($symfonyOutput)); - } - try { - $this->runner->run($options, $symfonyOutput); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException) { - return self::FAILURE; - } - return self::SUCCESS; - } - public static function getDefaultFormatter() : string - { - return \false !== (new Env())->get('GITHUB_ACTIONS') ? GithubActionsOutputFormatter::getName() : TableOutputFormatter::getName(); - } -} diff --git a/pkg/src/supportive/Console/Command/AnalyseOptions/AnalyseOptions.php b/pkg/src/supportive/Console/Command/AnalyseOptions/AnalyseOptions.php deleted file mode 100644 index 2c27909..0000000 --- a/pkg/src/supportive/Console/Command/AnalyseOptions/AnalyseOptions.php +++ /dev/null @@ -1,10 +0,0 @@ -collecting violations."}) - } -} - -func (r *AnalyseRunner) printFormattingStart(output OutputInterface.OutputInterface) { - if output.IsVerbose() { - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: "formatting dependencies."}) - } -} - -func (r *AnalyseRunner) printFormatterError(output OutputInterface.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(OutputStyleInterface.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: ""}) -} - -var JsonMultiErrFormatFunc = func(es []error) string { - errorsStrings := make([]string, len(es)) - for i, err := range es { - errorsStrings[i] = err.Error() - } - - marshalled, err := json.Marshal(errorsStrings) - - if err != nil { - return "(marshall json err) " + err.Error() - } - - return string(marshalled) -} - -func (r *AnalyseRunner) printAnalysisException(output OutputInterface.OutputInterface, exception *multierror.Error) { - message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(OutputStyleInterface.StringOrArrayOfStrings{Strings: message}) -} - -func (r *AnalyseRunner) printFormatterNotFoundException(output OutputInterface.OutputInterface, formatterName string) { - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: ""}) - - knownFormatters := make([]string, 0) - for _, formatterType := range r.formatterProvider.GetKnownFormatters() { - knownFormatters = append(knownFormatters, string(formatterType)) - } - - output.GetStyle().Error(OutputStyleInterface.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: ""}) -} diff --git a/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.php b/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.php deleted file mode 100644 index c6c0fce..0000000 --- a/pkg/src/supportive/Console/Command/AnalyseRunner/AnalyseRunner.php +++ /dev/null @@ -1,94 +0,0 @@ -formatterProvider->get($options->formatter); - } catch (ContainerExceptionInterface) { - $this->printFormatterNotFoundException($output, $options->formatter); - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::invalidFormatter(); - } - $formatterInput = new OutputFormatterInput($options->output, $options->reportSkipped, $options->reportUncovered, $options->failOnUncovered); - $this->printCollectViolations($output); - try { - $result = OutputResult::fromAnalysisResult($this->analyser->analyse()); - } catch (AnalyserException $e) { - $this->printAnalysisException($output, $e); - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - $this->printFormattingStart($output); - try { - $formatter->finish($result, $output, $formatterInput); - } catch (Throwable $error) { - $this->printFormatterError($output, $formatter::getName(), $error); - } - if ($options->failOnUncovered && $result->hasUncovered()) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::finishedWithUncovered(); - } - if ($result->hasViolations()) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::finishedWithViolations(); - } - if ($result->hasErrors()) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::failedWithErrors(); - } - } - private function printCollectViolations(OutputInterface $output) : void - { - if ($output->isVerbose()) { - $output->writeLineFormatted('collecting violations.'); - } - } - private function printFormattingStart(OutputInterface $output) : void - { - if ($output->isVerbose()) { - $output->writeLineFormatted('formatting dependencies.'); - } - } - private function printFormatterError(OutputInterface $output, string $formatterName, Throwable $error) : void - { - $output->writeLineFormatted(''); - $output->getStyle()->error(['', sprintf('Output formatter %s threw an Exception:', $formatterName), sprintf('Message: %s', $error->getMessage()), '']); - $output->writeLineFormatted(''); - } - private function printAnalysisException(OutputInterface $output, AnalyserException $exception) : void - { - $exceptionMessageStack = [$exception->getMessage()]; - $previous = $exception->getPrevious(); - while (null !== $previous) { - $exceptionMessageStack[] = $previous->getMessage(); - $previous = $previous->getPrevious(); - } - $message = ['Analysis finished with an Exception.', ...$exceptionMessageStack]; - $output->getStyle()->error($message); - } - private function printFormatterNotFoundException(OutputInterface $output, string $formatterName) : void - { - $output->writeLineFormatted(''); - $output->getStyle()->error(['', sprintf('Output formatter %s not found.', $formatterName), sprintf('Available formatters: ["%s"]', implode('", "', $this->formatterProvider->getKnownFormatters())), '']); - $output->writeLineFormatted(''); - } -} diff --git a/pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.php b/pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.php deleted file mode 100644 index da3c2a6..0000000 --- a/pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.php +++ /dev/null @@ -1,31 +0,0 @@ -%d Files.", event.ExpectedFileCount)}) - } - case *ast.PostCreateAstMapEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("ast", "AstMap created in %01.2f sec.", "AstMap created.") - } - case *ast.AstFileAnalysedEvent: - if s.output.IsVerbose() { - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) - } - case *ast.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) - case *PreEmitEvent.PreEmitEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("deps") - if err != nil { - return err - } - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) - } - case *PostEmitEvent.PostEmitEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") - } - case *PreFlattenEvent.PreFlattenEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("flatten") - if err != nil { - return err - } - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: "start flatten dependencies"}) - } - case *PostFlattenEvent.PostFlattenEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") - } - } - - return nil -} - -func (s *ConsoleSubscriber) stopwatchStart(event string) error { - err := s.stopwatch.Start(event) - if err != nil { - return err - } - - return nil -} - -func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { - period, err := s.stopwatch.Stop(event) - - if err != nil { - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: messageWithoutTime}) - return - } - - s.output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) -} diff --git a/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber/ConsoleSubscriber.php b/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber/ConsoleSubscriber.php deleted file mode 100644 index 11f08c8..0000000 --- a/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber/ConsoleSubscriber.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - public static function getSubscribedEvents() : array - { - return [PreCreateAstMapEvent::class => 'onPreCreateAstMapEvent', PostCreateAstMapEvent::class => 'onPostCreateAstMapEvent', AstFileAnalysedEvent::class => 'onAstFileAnalysedEvent', AstFileSyntaxErrorEvent::class => 'onAstFileSyntaxErrorEvent', PreEmitEvent::class => 'onPreDependencyEmit', PostEmitEvent::class => 'onPostDependencyEmit', PreFlattenEvent::class => 'onPreDependencyFlatten', PostFlattenEvent::class => 'onPostDependencyFlatten']; - } - public function onPreCreateAstMapEvent(PreCreateAstMapEvent $preCreateAstMapEvent) : void - { - if ($this->output->isVerbose()) { - $this->stopwatchStart('ast'); - $this->output->writeLineFormatted(sprintf('Start to create an AstMap for %u Files.', $preCreateAstMapEvent->expectedFileCount)); - } - } - public function onPostCreateAstMapEvent(PostCreateAstMapEvent $postCreateAstMapEvent) : void - { - if ($this->output->isVerbose()) { - $this->printMessageWithTime('ast', 'AstMap created in %01.2f sec.', 'AstMap created.'); - } - } - public function onAstFileAnalysedEvent(AstFileAnalysedEvent $analysedEvent) : void - { - if ($this->output->isVerbose()) { - $this->output->writeLineFormatted(sprintf('Parsing File %s', $analysedEvent->file)); - } - } - public function onAstFileSyntaxErrorEvent(AstFileSyntaxErrorEvent $astFileSyntaxErrorEvent) : void - { - $this->output->writeLineFormatted(sprintf("\nSyntax Error on File %s\n%s\n", $astFileSyntaxErrorEvent->file, $astFileSyntaxErrorEvent->syntaxError)); - } - public function onPreDependencyEmit(PreEmitEvent $event) : void - { - if ($this->output->isVerbose()) { - $this->stopwatchStart('deps'); - $this->output->writeLineFormatted(sprintf('start emitting dependencies "%s"', $event->emitterName)); - } - } - public function onPostDependencyEmit(PostEmitEvent $event) : void - { - if ($this->output->isVerbose()) { - $this->printMessageWithTime('deps', 'Dependencies emitted in %01.f sec.', 'Dependencies emitted.'); - } - } - public function onPreDependencyFlatten(PreFlattenEvent $event) : void - { - if ($this->output->isVerbose()) { - $this->stopwatchStart('flatten'); - $this->output->writeLineFormatted('start flatten dependencies'); - } - } - public function onPostDependencyFlatten(PostFlattenEvent $event) : void - { - if ($this->output->isVerbose()) { - $this->printMessageWithTime('flatten', 'Dependencies flattened in %01.f sec.', 'Dependencies flattened.'); - } - } - /** - * @param non-empty-string $event - */ - private function stopwatchStart(string $event) : void - { - try { - $this->stopwatch->start($event); - } catch (StopwatchException) { - } - } - /** - * @param non-empty-string $event - * @param non-empty-string $messageWithTime - * @param non-empty-string $messageWithoutTime - */ - private function printMessageWithTime(string $event, string $messageWithTime, string $messageWithoutTime) : void - { - try { - $period = $this->stopwatch->stop($event); - $this->output->writeLineFormatted(sprintf($messageWithTime, $period->toSeconds())); - } catch (StopwatchException) { - $this->output->writeLineFormatted($messageWithoutTime); - } - } -} diff --git a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.php b/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.php deleted file mode 100644 index 8345356..0000000 --- a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.php +++ /dev/null @@ -1,35 +0,0 @@ -> - */ - public static function getSubscribedEvents() : array - { - return [PreCreateAstMapEvent::class => 'onPreCreateAstMapEvent', PostCreateAstMapEvent::class => ['onPostCreateAstMapEvent', 1], AstFileAnalysedEvent::class => 'onAstFileAnalysedEvent']; - } - public function onPreCreateAstMapEvent(PreCreateAstMapEvent $preCreateAstMapEvent) : void - { - $this->output->getStyle()->progressStart($preCreateAstMapEvent->expectedFileCount); - } - public function onPostCreateAstMapEvent(PostCreateAstMapEvent $postCreateAstMapEvent) : void - { - $this->output->getStyle()->progressFinish(); - } - public function onAstFileAnalysedEvent(AstFileAnalysedEvent $analysedEvent) : void - { - $this->output->getStyle()->progressAdvance(); - } -} diff --git a/pkg/src/supportive/Console/Symfony/Style/Style.php b/pkg/src/supportive/Console/Symfony/Style/Style.php deleted file mode 100644 index 8203045..0000000 --- a/pkg/src/supportive/Console/Symfony/Style/Style.php +++ /dev/null @@ -1,86 +0,0 @@ -symfonyStyle->title($message); - } - public function section(string $message) : void - { - $this->symfonyStyle->section($message); - } - /** - * {@inheritdoc} - */ - public function success($message) : void - { - $this->symfonyStyle->success($message); - } - /** - * {@inheritdoc} - */ - public function error($message) : void - { - $this->symfonyStyle->error($message); - } - /** - * {@inheritdoc} - */ - public function warning($message) : void - { - $this->symfonyStyle->warning($message); - } - /** - * {@inheritdoc} - */ - public function note($message) : void - { - $this->symfonyStyle->note($message); - } - /** - * {@inheritdoc} - */ - public function caution($message) : void - { - $this->symfonyStyle->caution($message); - } - /** - * {@inheritdoc} - */ - public function definitionList(...$list) : void - { - $this->symfonyStyle->definitionList(...$list); - } - public function table(array $headers, array $rows) : void - { - $this->symfonyStyle->table($headers, $rows); - } - public function newLine(int $count = 1) : void - { - $this->symfonyStyle->newLine($count); - } - public function progressStart(int $max = 0) : void - { - $this->symfonyStyle->progressStart($max); - } - public function progressAdvance(int $step = 1) : void - { - $this->symfonyStyle->progressAdvance($step); - } - public function progressFinish() : void - { - $this->symfonyStyle->progressFinish(); - } -} diff --git a/pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.php b/pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.php deleted file mode 100644 index 5a7d3a2..0000000 --- a/pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.php +++ /dev/null @@ -1,44 +0,0 @@ -symfonyOutput->write($message, \false, SymfonyOutputInterface::OUTPUT_NORMAL); - } - /** - * {@inheritdoc} - */ - public function writeLineFormatted($message) : void - { - $this->symfonyOutput->writeln($message, SymfonyOutputInterface::OUTPUT_NORMAL); - } - public function writeRaw(string $message) : void - { - $this->symfonyOutput->write($message, \false, SymfonyOutputInterface::OUTPUT_RAW); - } - public function getStyle() : OutputStyleInterface - { - return $this->style; - } - public function isVerbose() : bool - { - return $this->symfonyOutput->isVerbose(); - } - public function isDebug() : bool - { - return $this->symfonyOutput->isDebug(); - } -} diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMap.go b/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMap.go deleted file mode 100644 index 76ecfad..0000000 --- a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMap.go +++ /dev/null @@ -1,8 +0,0 @@ -package EventSubscriberInterfaceMap - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterface" - "github.com/elliotchance/orderedmap/v2" -) - -var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface.EventSubscriberInterface]] diff --git a/pkg/src/supportive/File/Dumper/Dumper.php b/pkg/src/supportive/File/Dumper/Dumper.php deleted file mode 100644 index 105ae63..0000000 --- a/pkg/src/supportive/File/Dumper/Dumper.php +++ /dev/null @@ -1,46 +0,0 @@ -templateFile = new SplFileInfo($templateFile); - } - /** - * @throws FileAlreadyExistsException - * @throws FileNotWritableException - * @throws FileNotExistsException - * @throws IOException - */ - public function dump(string $file) : void - { - $filesystem = new Filesystem(); - $target = new SplFileInfo($file); - if ($filesystem->exists($target->getPathname())) { - throw FileAlreadyExistsException::alreadyExists($target); - } - if (!is_writable($target->getPath())) { - throw FileNotWritableException::notWritable($target); - } - try { - $filesystem->copy($this->templateFile->getPathname(), $target->getPathname()); - } catch (FileNotFoundException) { - throw FileNotExistsException::fromFilePath($this->templateFile->getPathname()); - } catch (SymfonyIOException $e) { - throw IOException::couldNotCopy($e->getMessage()); - } - } -} diff --git a/pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.php b/pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.php deleted file mode 100644 index 04a1558..0000000 --- a/pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.php +++ /dev/null @@ -1,14 +0,0 @@ -getPathname()))); - } -} diff --git a/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.php b/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.php deleted file mode 100644 index 23dec65..0000000 --- a/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.php +++ /dev/null @@ -1,18 +0,0 @@ -getMessage())); - } -} diff --git a/pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.php b/pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.php deleted file mode 100644 index c14fb0e..0000000 --- a/pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.php +++ /dev/null @@ -1,14 +0,0 @@ -getPathname()))); - } -} diff --git a/pkg/src/supportive/File/Exception/IOException/IOException.php b/pkg/src/supportive/File/Exception/IOException/IOException.php deleted file mode 100644 index d43d287..0000000 --- a/pkg/src/supportive/File/Exception/IOException/IOException.php +++ /dev/null @@ -1,14 +0,0 @@ -getPathname()))); - } -} diff --git a/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.php b/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.php deleted file mode 100644 index 633b4a5..0000000 --- a/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.php +++ /dev/null @@ -1,17 +0,0 @@ -, services: array, imports?: array} - * - * @throws FileCannotBeParsedAsYamlException - * @throws ParsedYamlIsNotAnArrayException - * @throws CouldNotReadFileException - */ - public function parseFile(string $file) : array - { - try { - $data = Yaml::parse(\Qossmic\Deptrac\Supportive\File\FileReader::read($file)); - } catch (ParseException $exception) { - throw FileCannotBeParsedAsYamlException::fromFilenameAndException($file, $exception); - } - if (!\is_array($data)) { - throw ParsedYamlIsNotAnArrayException::fromFilename($file); - } - /** @var array{parameters: array, services: array, imports?: array} $data */ - return $data; - } -} diff --git a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.php b/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.php deleted file mode 100644 index cbdc7e0..0000000 --- a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.php +++ /dev/null @@ -1,25 +0,0 @@ -severityMap[$key] ?? null; - } -} diff --git a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.php b/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.php deleted file mode 100644 index 9bdcba9..0000000 --- a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.php +++ /dev/null @@ -1,22 +0,0 @@ -, point_to_groups?: bool} $arr - */ - public static function fromArray(array $arr) : self - { - return new self($arr['hidden_layers'] ?? [], $arr['groups'] ?? [], $arr['point_to_groups'] ?? \false); - } - /** - * @param string[] $hiddenLayers - * @param array $groupsLayerMap - */ - private function __construct(public readonly array $hiddenLayers, public readonly array $groupsLayerMap, public readonly bool $pointToGroups) - { - } -} diff --git a/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.go b/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.go deleted file mode 100644 index 02802ed..0000000 --- a/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.go +++ /dev/null @@ -1,18 +0,0 @@ -package FormatterConfiguration - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Formatter/FormatterConfigInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/Formatter/FormatterConfigInterface/FormatterType" -) - -type FormatterConfiguration struct { - config map[FormatterType.FormatterType]FormatterConfigInterface.FormatterConfigInterface -} - -func NewFormatterConfiguration(config map[FormatterType.FormatterType]FormatterConfigInterface.FormatterConfigInterface) *FormatterConfiguration { - return &FormatterConfiguration{config: config} -} - -func (f *FormatterConfiguration) GetConfigFor(area FormatterType.FormatterType) FormatterConfigInterface.FormatterConfigInterface { - return f.config[area] -} diff --git a/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.php b/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.php deleted file mode 100644 index 229b79f..0000000 --- a/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration/FormatterConfiguration.php +++ /dev/null @@ -1,21 +0,0 @@ -> $config - */ - public function __construct(private readonly array $config) - { - } - /** - * @return array - */ - public function getConfigFor(string $area) : array - { - return $this->config[$area] ?? []; - } -} diff --git a/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.go b/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.go deleted file mode 100644 index 79e9563..0000000 --- a/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.go +++ /dev/null @@ -1,38 +0,0 @@ -package FormatterProvider - -import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException" - "golang.org/x/exp/maps" - "reflect" -) - -type FormatterProvider struct { - formatterLocator map[OutputFormatterType.OutputFormatterType]OutputFormatterInterface.OutputFormatterInterface -} - -func NewFormatterProvider(formatterLocator map[OutputFormatterType.OutputFormatterType]OutputFormatterInterface.OutputFormatterInterface) *FormatterProvider { - return &FormatterProvider{ - formatterLocator: formatterLocator, - } -} - -func (f *FormatterProvider) Get(id OutputFormatterType.OutputFormatterType) (OutputFormatterInterface.OutputFormatterInterface, error) { - service, ok := f.formatterLocator[id] - - if !ok { - return nil, InvalidServiceInLocatorException.NewInvalidServiceInLocatorExceptionInvalidType(id, reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") - } - - return service, nil -} - -func (f *FormatterProvider) Has(id OutputFormatterType.OutputFormatterType) bool { - _, ok := f.formatterLocator[id] - return ok -} - -func (f *FormatterProvider) GetKnownFormatters() []OutputFormatterType.OutputFormatterType { - return maps.Keys(f.formatterLocator) -} diff --git a/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.php b/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.php deleted file mode 100644 index b4ac2db..0000000 --- a/pkg/src/supportive/OutputFormatter/FormatterProvider/FormatterProvider.php +++ /dev/null @@ -1,41 +0,0 @@ - $formatterLocator - */ - public function __construct(private readonly ServiceLocator $formatterLocator) - { - } - public function get(string $id) : OutputFormatterInterface - { - $service = $this->formatterLocator->get($id); - if (!$service instanceof OutputFormatterInterface) { - throw InvalidServiceInLocatorException::invalidType($id, OutputFormatterInterface::class, get_debug_type($service)); - } - return $service; - } - public function has(string $id) : bool - { - return $this->formatterLocator->has($id); - } - /** - * @psalm-suppress MixedReturnTypeCoercion - * - * @return string[] - */ - public function getKnownFormatters() : array - { - return array_keys($this->formatterLocator->getProvidedServices()); - } -} diff --git a/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.go b/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.go deleted file mode 100644 index c663826..0000000 --- a/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.go +++ /dev/null @@ -1,126 +0,0 @@ -package GithubActionsOutputFormatter - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInput" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/OutputResult" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleTypeEnum" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/SkippedViolation" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" - "strings" -) - -type GithubActionsOutputFormatter struct{} - -func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { - return &GithubActionsOutputFormatter{} -} - -func (g *GithubActionsOutputFormatter) GetName() OutputFormatterType.OutputFormatterType { - return OutputFormatterType.GithubActions -} - -func (g *GithubActionsOutputFormatter) Finish(result *OutputResult.OutputResult, output OutputInterface.OutputInterface, outputFormatterInput *OutputFormatterInput.OutputFormatterInput) error { - for _, rule := range result.AllOf(RuleTypeEnum.TypeViolation) { - g.printViolation(rule, output) - } - if outputFormatterInput.ReportSkipped { - for _, rule := range result.AllOf(RuleTypeEnum.TypeSkippedViolation) { - g.printViolation(rule, output) - } - } - if outputFormatterInput.ReportUncovered { - g.printUncovered(result, output, outputFormatterInput.FailOnUncovered) - } - if result.HasErrors() { - g.printErrors(result, output) - } - if result.HasWarnings() { - g.printWarnings(result, output) - } - - return nil -} - -func (g *GithubActionsOutputFormatter) determineLogLevel(rule RuleInterface.RuleInterface) string { - switch rule.(type) { - case *Violation.Violation: - return "error" - case *SkippedViolation.SkippedViolation: - return "warning" - default: - return "debug" - } -} - -func (g *GithubActionsOutputFormatter) printUncovered(result *OutputResult.OutputResult, output OutputInterface.OutputInterface, reportAsError bool) { - for _, u := range result.Uncovered() { - dependency := u.GetDependency() - - reportAs := "warning" - if reportAsError { - reportAs = "error" - } - - output.WriteLineFormatted( - OutputStyleInterface.StringOrArrayOfStrings{ - String: fmt.Sprintf( - "::%s file=%s,line=%d::%s has uncovered dependency on %s (%s)", - reportAs, - dependency.GetContext().FileOccurrence.Filepath, - dependency.GetContext().FileOccurrence.Line, - dependency.GetDepender().ToString(), - dependency.GetDependent().ToString(), - u.Layer, - ), - }, - ) - } -} - -func (g *GithubActionsOutputFormatter) multilinePathMessage(dep DependencyInterface.DependencyInterface) string { - lines := make([]string, 0) - for _, serializedDependency := range dep.Serialize() { - lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) - } - return strings.Join(lines, " ->%0A") -} - -func (g *GithubActionsOutputFormatter) printErrors(result *OutputResult.OutputResult, output OutputInterface.OutputInterface) { - for _, e := range result.Errors { - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) - } -} - -func (g *GithubActionsOutputFormatter) printWarnings(result *OutputResult.OutputResult, output OutputInterface.OutputInterface) { - for _, warning := range result.Warnings { - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) - } -} - -func (g *GithubActionsOutputFormatter) printViolation(rule RuleInterface.RuleInterface, output OutputInterface.OutputInterface) { - dependency := rule.GetDependency() - prefix := "" - dependerLayer := "" - dependentLayer := "" - switch v := rule.(type) { - case *SkippedViolation.SkippedViolation: - prefix = "[SKIPPED] " - dependerLayer = v.GetDependerLayer() - dependentLayer = v.GetDependentLayer() - case *Violation.Violation: - dependerLayer = v.GetDependerLayer() - dependentLayer = v.GetDependentLayer() - } - message := fmt.Sprintf("%s%s must not depend on %s (%s on %s)", prefix, dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), dependerLayer, dependentLayer) - if len(dependency.Serialize()) > 1 { - message += "%0A" + g.multilinePathMessage(dependency) - - } - output.WriteLineFormatted(OutputStyleInterface.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.Filepath, dependency.GetContext().FileOccurrence.Line, message)}) -} diff --git a/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.php b/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.php deleted file mode 100644 index 0a18c89..0000000 --- a/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter/GithubActionsOutputFormatter.php +++ /dev/null @@ -1,85 +0,0 @@ -allOf(Violation::class) as $rule) { - $this->printViolation($rule, $output); - } - if ($outputFormatterInput->reportSkipped) { - foreach ($result->allOf(SkippedViolation::class) as $rule) { - $this->printViolation($rule, $output); - } - } - if ($outputFormatterInput->reportUncovered) { - $this->printUncovered($result, $output, $outputFormatterInput->failOnUncovered); - } - if ($result->hasErrors()) { - $this->printErrors($result, $output); - } - if ($result->hasWarnings()) { - $this->printWarnings($result, $output); - } - } - private function determineLogLevel(RuleInterface $rule) : string - { - return match ($rule::class) { - Violation::class => 'error', - SkippedViolation::class => 'warning', - default => 'debug', - }; - } - private function printUncovered(OutputResult $result, OutputInterface $output, bool $reportAsError) : void - { - foreach ($result->uncovered() as $u) { - $dependency = $u->getDependency(); - $output->writeLineFormatted(\sprintf('::%s file=%s,line=%s::%s has uncovered dependency on %s (%s)', $reportAsError ? 'error' : 'warning', $dependency->getContext()->fileOccurrence->filepath, $dependency->getContext()->fileOccurrence->line, $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $u->layer)); - } - } - private function multilinePathMessage(DependencyInterface $dep) : string - { - return \implode(' ->%0A', \array_map(static fn(array $dependency): string => \sprintf('%s::%d', $dependency['name'], $dependency['line']), $dep->serialize())); - } - private function printErrors(OutputResult $result, OutputInterface $output) : void - { - foreach ($result->errors as $error) { - $output->writeLineFormatted('::error ::' . (string) $error); - } - } - private function printWarnings(OutputResult $result, OutputInterface $output) : void - { - foreach ($result->warnings as $warning) { - $output->writeLineFormatted('::warning ::' . (string) $warning); - } - } - private function printViolation(Violation|SkippedViolation $rule, OutputInterface $output) : void - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s%s must not depend on %s (%s on %s)', $rule instanceof SkippedViolation ? '[SKIPPED] ' : '', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $rule->getDependerLayer(), $rule->getDependentLayer()); - if (\count($dependency->serialize()) > 1) { - $message .= '%0A' . $this->multilinePathMessage($dependency); - } - $output->writeLineFormatted(\sprintf('::%s file=%s,line=%s::%s', $this->determineLogLevel($rule), $dependency->getContext()->fileOccurrence->filepath, $dependency->getContext()->fileOccurrence->line, $message)); - } -} diff --git a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.php b/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.php deleted file mode 100644 index 4a77c9b..0000000 --- a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.php +++ /dev/null @@ -1,128 +0,0 @@ -allOf(Violation::class) as $rule) { - $groupedRules[$rule->getDependerLayer()][] = $rule; - } - if ($outputFormatterInput->reportSkipped) { - foreach ($result->allOf(SkippedViolation::class) as $rule) { - $groupedRules[$rule->getDependerLayer()][] = $rule; - } - } - if ($outputFormatterInput->reportUncovered) { - foreach ($result->allOf(Uncovered::class) as $rule) { - $groupedRules[$rule->layer][] = $rule; - } - } - $style = $output->getStyle(); - foreach ($groupedRules as $layer => $rules) { - $rows = []; - foreach ($rules as $rule) { - $rows[] = match (\true) { - $rule instanceof Uncovered => $this->uncoveredRow($rule, $outputFormatterInput->failOnUncovered), - $rule instanceof Violation => $this->violationRow($rule), - $rule instanceof SkippedViolation => $this->skippedViolationRow($rule), - }; - } - $style->table(['Reason', $layer], $rows); - } - if ($result->hasErrors()) { - $this->printErrors($result, $output); - } - if ($result->hasWarnings()) { - $this->printWarnings($result, $output); - } - $this->printSummary($result, $output, $outputFormatterInput->failOnUncovered); - } - /** - * @return array{string, string} - */ - private function skippedViolationRow(SkippedViolation $rule) : array - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s must not depend on %s (%s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $rule->getDependentLayer()); - if (count($dependency->serialize()) > 1) { - $message .= "\n" . $this->formatMultilinePath($dependency); - } - $fileOccurrence = $rule->getDependency()->getContext()->fileOccurrence; - $message .= \sprintf("\n%s:%d", $fileOccurrence->filepath, $fileOccurrence->line); - return ['Skipped', $message]; - } - /** - * @return array{string, string} - */ - private function violationRow(Violation $rule) : array - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s must not depend on %s', $dependency->getDepender()->toString(), $dependency->getDependent()->toString()); - $message .= \sprintf("\n%s (%s)", $rule->ruleDescription(), $rule->getDependentLayer()); - if (count($dependency->serialize()) > 1) { - $message .= "\n" . $this->formatMultilinePath($dependency); - } - $fileOccurrence = $rule->getDependency()->getContext()->fileOccurrence; - $message .= \sprintf("\n%s:%d", $fileOccurrence->filepath, $fileOccurrence->line); - return [\sprintf('%s', $rule->ruleName()), $message]; - } - private function formatMultilinePath(DependencyInterface $dep) : string - { - return \implode(" -> \n", \array_map(static fn(array $dependency): string => \sprintf('%s::%d', $dependency['name'], $dependency['line']), $dep->serialize())); - } - private function printSummary(OutputResult $result, OutputInterface $output, bool $reportUncoveredAsError) : void - { - $violationCount = count($result->violations()); - $skippedViolationCount = count($result->skippedViolations()); - $uncoveredCount = count($result->uncovered()); - $allowedCount = count($result->allowed()); - $warningsCount = count($result->warnings); - $errorsCount = count($result->errors); - $uncoveredFg = $reportUncoveredAsError ? 'red' : 'yellow'; - $style = $output->getStyle(); - $style->newLine(); - $style->definitionList('Report', new TableSeparator(), ['Violations' => \sprintf('%d', $violationCount > 0 ? 'red' : 'default', $violationCount)], ['Skipped violations' => \sprintf('%d', $skippedViolationCount > 0 ? 'yellow' : 'default', $skippedViolationCount)], ['Uncovered' => \sprintf('%d', $uncoveredCount > 0 ? $uncoveredFg : 'default', $uncoveredCount)], ['Allowed' => $allowedCount], ['Warnings' => \sprintf('%d', $warningsCount > 0 ? 'yellow' : 'default', $warningsCount)], ['Errors' => \sprintf('%d', $errorsCount > 0 ? 'red' : 'default', $errorsCount)]); - } - /** - * @return array{string, string} - */ - private function uncoveredRow(Uncovered $rule, bool $reportAsError) : array - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s has uncovered dependency on %s', $dependency->getDepender()->toString(), $dependency->getDependent()->toString()); - if (count($dependency->serialize()) > 1) { - $message .= "\n" . $this->formatMultilinePath($dependency); - } - $fileOccurrence = $rule->getDependency()->getContext()->fileOccurrence; - $message .= \sprintf("\n%s:%d", $fileOccurrence->filepath, $fileOccurrence->line); - return [\sprintf('Uncovered', $reportAsError ? 'red' : 'yellow'), $message]; - } - private function printErrors(OutputResult $result, OutputInterface $output) : void - { - $output->getStyle()->table(['Errors'], \array_map(static fn(Error $error) => [(string) $error], $result->errors)); - } - private function printWarnings(OutputResult $result, OutputInterface $output) : void - { - $output->getStyle()->table(['Warnings'], \array_map(static fn(Warning $warning) => [(string) $warning], $result->warnings)); - } -} diff --git a/pkg/src/supportive/TimeStopwatch/Period.php b/pkg/src/supportive/TimeStopwatch/Period.php deleted file mode 100644 index cae2aef..0000000 --- a/pkg/src/supportive/TimeStopwatch/Period.php +++ /dev/null @@ -1,27 +0,0 @@ -startedAt, hrtime(\true)); - } - public function toSeconds() : float - { - $duration = $this->endedAt - $this->startedAt; - return $duration / 1000000000.0; - } -} diff --git a/pkg/src/supportive/TimeStopwatch/StartedPeriod.php b/pkg/src/supportive/TimeStopwatch/StartedPeriod.php deleted file mode 100644 index 56d04a9..0000000 --- a/pkg/src/supportive/TimeStopwatch/StartedPeriod.php +++ /dev/null @@ -1,22 +0,0 @@ - */ - private array $periods = []; - /** - * @param non-empty-string $event - * - * @throws StopwatchException - */ - public function start(string $event) : void - { - $this->assertPeriodNotStarted($event); - $this->periods[$event] = \Qossmic\Deptrac\Supportive\Time\StartedPeriod::start(); - } - /** - * @param non-empty-string $event - * - * @throws StopwatchException - */ - public function stop(string $event) : \Qossmic\Deptrac\Supportive\Time\Period - { - $this->assertPeriodStarted($event); - $period = $this->periods[$event]->stop(); - unset($this->periods[$event]); - return $period; - } - /** - * @param non-empty-string $event - * - * @throws StopwatchException - */ - private function assertPeriodNotStarted(string $event) : void - { - if (array_key_exists($event, $this->periods)) { - throw \Qossmic\Deptrac\Supportive\Time\StopwatchException::periodAlreadyStarted($event); - } - } - /** - * @param non-empty-string $event - * - * @throws StopwatchException - */ - private function assertPeriodStarted(string $event) : void - { - if (!array_key_exists($event, $this->periods)) { - throw \Qossmic\Deptrac\Supportive\Time\StopwatchException::periodNotStarted($event); - } - } -} diff --git a/pkg/src/supportive/TimeStopwatch/StopwatchException.php b/pkg/src/supportive/TimeStopwatch/StopwatchException.php deleted file mode 100644 index d0f463c..0000000 --- a/pkg/src/supportive/TimeStopwatch/StopwatchException.php +++ /dev/null @@ -1,19 +0,0 @@ -collecting violations."}) + } +} + +func (r *AnalyseRunner) printFormattingStart(output output_formatter.OutputInterface) { + if output.IsVerbose() { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "formatting dependencies."}) + } +} + +func (r *AnalyseRunner) printFormatterError(output output_formatter.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) +} + +var JsonMultiErrFormatFunc = func(es []error) string { + errorsStrings := make([]string, len(es)) + for i, err := range es { + errorsStrings[i] = err.Error() + } + + marshalled, err := json.Marshal(errorsStrings) + + if err != nil { + return "(marshall json err) " + err.Error() + } + + return string(marshalled) +} + +func (r *AnalyseRunner) printAnalysisException(output output_formatter.OutputInterface, exception *multierror.Error) { + message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} + output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: message}) +} + +func (r *AnalyseRunner) printFormatterNotFoundException(output output_formatter.OutputInterface, formatterName string) { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + + knownFormatters := make([]string, 0) + for _, formatterType := range r.formatterProvider.GetKnownFormatters() { + knownFormatters = append(knownFormatters, string(formatterType)) + } + + output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) +} diff --git a/pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.go b/pkg/src/supportive/console/command/command_run_exception.go similarity index 97% rename from pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.go rename to pkg/src/supportive/console/command/command_run_exception.go index 4f337de..1ba704a 100644 --- a/pkg/src/supportive/Console/Command/CommandRunException/CommandRunException.go +++ b/pkg/src/supportive/console/command/command_run_exception.go @@ -1,4 +1,4 @@ -package CommandRunException +package command import "fmt" diff --git a/pkg/src/supportive/Console/Env/Env.go b/pkg/src/supportive/console/env.go similarity index 89% rename from pkg/src/supportive/Console/Env/Env.go rename to pkg/src/supportive/console/env.go index fb688cc..5c14afe 100644 --- a/pkg/src/supportive/Console/Env/Env.go +++ b/pkg/src/supportive/console/env.go @@ -1,4 +1,4 @@ -package Env +package console import "os" diff --git a/pkg/src/supportive/console/subscriber/console_subscriber.go b/pkg/src/supportive/console/subscriber/console_subscriber.go new file mode 100644 index 0000000..9ec889b --- /dev/null +++ b/pkg/src/supportive/console/subscriber/console_subscriber.go @@ -0,0 +1,90 @@ +package subscriber + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" +) + +type ConsoleSubscriber struct { + output output_formatter.OutputInterface + stopwatch *time_stopwatch.Stopwatch +} + +func NewConsoleSubscriber(output output_formatter.OutputInterface, stopwatch *time_stopwatch.Stopwatch) *ConsoleSubscriber { + return &ConsoleSubscriber{ + output: output, + stopwatch: stopwatch, + } +} + +func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + switch event := rawEvent.(type) { + case *ast.PreCreateAstMapEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("ast") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + } + case *ast.PostCreateAstMapEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("ast", "AstMap created in %01.2f sec.", "AstMap created.") + } + case *ast.AstFileAnalysedEvent: + if s.output.IsVerbose() { + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + } + case *ast.AstFileSyntaxErrorEvent: + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + case *dependency.PreEmitEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("deps") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + } + case *dependency.PostEmitEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") + } + case *dependency.PreFlattenEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("flatten") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "start flatten dependencies"}) + } + case *dependency.PostFlattenEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") + } + } + + return nil +} + +func (s *ConsoleSubscriber) stopwatchStart(event string) error { + err := s.stopwatch.Start(event) + if err != nil { + return err + } + + return nil +} + +func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { + period, err := s.stopwatch.Stop(event) + + if err != nil { + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: messageWithoutTime}) + return + } + + s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) +} diff --git a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go b/pkg/src/supportive/console/subscriber/progress_subscriber.go similarity index 58% rename from pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go rename to pkg/src/supportive/console/subscriber/progress_subscriber.go index 4252439..78cfa3b 100644 --- a/pkg/src/supportive/Console/Subscriber/ProgressSubscriber/ProgressSubscriber.go +++ b/pkg/src/supportive/console/subscriber/progress_subscriber.go @@ -1,16 +1,15 @@ -package ProgressSubscriber +package subscriber import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" ) type ProgressSubscriber struct { - output OutputInterface.OutputInterface + output output_formatter.OutputInterface } -func NewProgressSubscriber(output OutputInterface.OutputInterface) *ProgressSubscriber { +func NewProgressSubscriber(output output_formatter.OutputInterface) *ProgressSubscriber { return &ProgressSubscriber{ output: output, } @@ -26,7 +25,7 @@ func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPro return err } case *ast.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(OutputStyleInterface.ProgressAdvanceDefault) + err := s.output.GetStyle().ProgressAdvance(output_formatter.ProgressAdvanceDefault) if err != nil { return err } diff --git a/pkg/src/supportive/Console/Symfony/Style/Style.go b/pkg/src/supportive/console/symfony/style.go similarity index 85% rename from pkg/src/supportive/Console/Symfony/Style/Style.go rename to pkg/src/supportive/console/symfony/style.go index fc2806e..e36e260 100644 --- a/pkg/src/supportive/Console/Symfony/Style/Style.go +++ b/pkg/src/supportive/console/symfony/style.go @@ -1,8 +1,8 @@ -package Style +package symfony import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" @@ -33,27 +33,27 @@ func (s *Style) Section(message string) { color.Printf("%s\n", strings.Repeat("-", len(message))) } -func (s *Style) Success(message OutputStyleInterface.StringOrArrayOfStrings) { +func (s *Style) Success(message output_formatter.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Error(message OutputStyleInterface.StringOrArrayOfStrings) { +func (s *Style) Error(message output_formatter.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Warning(message OutputStyleInterface.StringOrArrayOfStrings) { +func (s *Style) Warning(message output_formatter.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Note(message OutputStyleInterface.StringOrArrayOfStrings) { +func (s *Style) Note(message output_formatter.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Caution(message OutputStyleInterface.StringOrArrayOfStrings) { +func (s *Style) Caution(message output_formatter.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) DefinitionList(list []OutputStyleInterface.StringOrArrayOfStringsOrTableSeparator) { +func (s *Style) DefinitionList(list []output_formatter.StringOrArrayOfStringsOrTableSeparator) { headers := make([]string, 0) row := make([]string, 0) for _, value := range list { diff --git a/pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.go b/pkg/src/supportive/console/symfony/symfony_output.go similarity index 51% rename from pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.go rename to pkg/src/supportive/console/symfony/symfony_output.go index 9abc512..5434dca 100644 --- a/pkg/src/supportive/Console/Symfony/SymfonyOutput/SymfonyOutput.go +++ b/pkg/src/supportive/console/symfony/symfony_output.go @@ -1,15 +1,15 @@ -package SymfonyOutput +package symfony import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" ) type SymfonyOutput struct { - style OutputStyleInterface.OutputStyleInterface + style output_formatter.OutputStyleInterface } -func NewSymfonyOutput(style OutputStyleInterface.OutputStyleInterface) *SymfonyOutput { +func NewSymfonyOutput(style output_formatter.OutputStyleInterface) *SymfonyOutput { return &SymfonyOutput{ style: style, } @@ -19,7 +19,7 @@ func (o *SymfonyOutput) WriteFormatted(message string) { fmt.Print(message) } -func (o *SymfonyOutput) WriteLineFormatted(message OutputStyleInterface.StringOrArrayOfStrings) { +func (o *SymfonyOutput) WriteLineFormatted(message output_formatter.StringOrArrayOfStrings) { fmt.Println(message.ToString()) } @@ -27,7 +27,7 @@ func (o *SymfonyOutput) WriteRaw(message string) { fmt.Println(message) } -func (o *SymfonyOutput) GetStyle() OutputStyleInterface.OutputStyleInterface { +func (o *SymfonyOutput) GetStyle() output_formatter.OutputStyleInterface { return o.style } diff --git a/pkg/src/supportive/DependencyInjection/Configuration.php b/pkg/src/supportive/dependency_injection/Configuration.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/Configuration.php rename to pkg/src/supportive/dependency_injection/Configuration.php diff --git a/pkg/src/supportive/DependencyInjection/DeptracExtension.php b/pkg/src/supportive/dependency_injection/DeptracExtension.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/DeptracExtension.php rename to pkg/src/supportive/dependency_injection/DeptracExtension.php diff --git a/pkg/src/supportive/DependencyInjection/Exception/CacheFileException/CacheFileException.go b/pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go similarity index 100% rename from pkg/src/supportive/DependencyInjection/Exception/CacheFileException/CacheFileException.go rename to pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go diff --git a/pkg/src/supportive/DependencyInjection/Exception/CacheFileException/CacheFileException.php b/pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/Exception/CacheFileException/CacheFileException.php rename to pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php diff --git a/pkg/src/supportive/DependencyInjection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go b/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go similarity index 100% rename from pkg/src/supportive/DependencyInjection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go rename to pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go diff --git a/pkg/src/supportive/DependencyInjection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php b/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php rename to pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php diff --git a/pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go b/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go similarity index 67% rename from pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go rename to pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go index 5de85f0..ad5bfc5 100644 --- a/pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go +++ b/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go @@ -2,7 +2,7 @@ package InvalidServiceInLocatorException import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" "strings" ) @@ -18,7 +18,7 @@ func newInvalidServiceInLocatorException(message string) *InvalidServiceInLocato return &InvalidServiceInLocatorException{Message: message} } -func NewInvalidServiceInLocatorExceptionInvalidType(id OutputFormatterType.OutputFormatterType, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { +func NewInvalidServiceInLocatorExceptionInvalidType(id output_formatter.OutputFormatterType, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { message := fmt.Sprintf("Trying to get unsupported service \"%s\" from locator (expected \"%s\", but is \"%s\").", id, actualType, strings.Join(expectedTypes, "\", \"")) return newInvalidServiceInLocatorException(message) } diff --git a/pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php b/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php rename to pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php diff --git a/pkg/src/supportive/DependencyInjection/ServiceContainerBuilder.go b/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go similarity index 71% rename from pkg/src/supportive/DependencyInjection/ServiceContainerBuilder.go rename to pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go index 8dac0d7..a3988d4 100644 --- a/pkg/src/supportive/DependencyInjection/ServiceContainerBuilder.go +++ b/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go @@ -1,11 +1,11 @@ -package DependencyInjection +package dependency_injection import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/DeptracConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/ContainerBuilder" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/Exception/CannotLoadConfiguration" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/deptrac_config" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -14,7 +14,7 @@ import ( type ServiceContainerBuilder struct { workingDirectory string - containerBuilder *ContainerBuilder.ContainerBuilder + containerBuilder *container_builder.ContainerBuilder configFile *string cacheFile *string } @@ -66,8 +66,8 @@ func (b *ServiceContainerBuilder) clearCache(cacheFile string) error { return os.Remove(cacheFile) } -func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) (*ContainerBuilder.ContainerBuilder, error) { - container := ContainerBuilder.NewContainerBuilder(b.workingDirectory) +func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) (*container_builder.ContainerBuilder, error) { + container := container_builder.NewContainerBuilder(b.workingDirectory) b.containerBuilder = container if b.configFile != nil { @@ -83,8 +83,8 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) // Debug event subscriber if b.containerBuilder.DebugBoolFlag != nil && *b.containerBuilder.DebugBoolFlag == true { - for _, key := range EventSubscriberInterfaceMap.Map.Keys() { - mapByPriorities, _ := EventSubscriberInterfaceMap.Map.Get(key) + for _, key := range event_subscriber_interface_map.Map.Keys() { + mapByPriorities, _ := event_subscriber_interface_map.Map.Get(key) for _, priority := range mapByPriorities.Keys() { subscribers, _ := mapByPriorities.Get(priority) @@ -101,11 +101,11 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) return container, nil } -func (b *ServiceContainerBuilder) GetContainer() *ContainerBuilder.ContainerBuilder { +func (b *ServiceContainerBuilder) GetContainer() *container_builder.ContainerBuilder { return b.containerBuilder } -func loadServices(container *ContainerBuilder.ContainerBuilder, cacheFile *string) error { +func loadServices(container *container_builder.ContainerBuilder, cacheFile *string) error { if cacheFile != nil { container.CacheFile = cacheFile Cache(container) @@ -119,7 +119,7 @@ func loadServices(container *ContainerBuilder.ContainerBuilder, cacheFile *strin return nil } -func (b *ServiceContainerBuilder) loadConfiguration(container *ContainerBuilder.ContainerBuilder, configFile string) *CannotLoadConfiguration.CannotLoadConfiguration { +func (b *ServiceContainerBuilder) loadConfiguration(container *container_builder.ContainerBuilder, configFile string) *CannotLoadConfiguration.CannotLoadConfiguration { projectDirectory := filepath.Dir(configFile) if projectDirectory == "" { return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, "Unable to load configuration: Invalid or missing path.") @@ -133,7 +133,7 @@ func (b *ServiceContainerBuilder) loadConfiguration(container *ContainerBuilder. return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, err.Error()) } - deptracConfig, err := DeptracConfig.NewDeptracConfig(parsed) + deptracConfig, err := deptrac_config.NewDeptracConfig(parsed) if err != nil { return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, err.Error()) diff --git a/pkg/src/supportive/DependencyInjection/ServiceContainerBuilder.php b/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/ServiceContainerBuilder.php rename to pkg/src/supportive/dependency_injection/ServiceContainerBuilder.php diff --git a/pkg/src/supportive/DependencyInjection/cache.go b/pkg/src/supportive/dependency_injection/cache.go similarity index 56% rename from pkg/src/supportive/DependencyInjection/cache.go rename to pkg/src/supportive/dependency_injection/cache.go index d46bb36..e6d5668 100644 --- a/pkg/src/supportive/DependencyInjection/cache.go +++ b/pkg/src/supportive/dependency_injection/cache.go @@ -1,13 +1,13 @@ -package DependencyInjection +package dependency_injection import ( Cache2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application/ApplicationVersion" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/ContainerBuilder" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application/application_version" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" ) -func Cache(builder *ContainerBuilder.ContainerBuilder) { - builder.AstFileReferenceFileCache = Cache2.NewAstFileReferenceFileCache(*builder.CacheFile, ApplicationVersion.Version) +func Cache(builder *container_builder.ContainerBuilder) { + builder.AstFileReferenceFileCache = Cache2.NewAstFileReferenceFileCache(*builder.CacheFile, application_version.Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache builder.CacheableFileSubscriber = Cache2.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) diff --git a/pkg/src/supportive/DependencyInjection/cache.php b/pkg/src/supportive/dependency_injection/cache.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/cache.php rename to pkg/src/supportive/dependency_injection/cache.php diff --git a/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go b/pkg/src/supportive/dependency_injection/container_builder/container_builder.go similarity index 61% rename from pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go rename to pkg/src/supportive/dependency_injection/container_builder/container_builder.go index 35aba6a..1353296 100644 --- a/pkg/src/supportive/DependencyInjection/ContainerBuilder/ContainerBuilder.go +++ b/pkg/src/supportive/dependency_injection/container_builder/container_builder.go @@ -1,9 +1,9 @@ -package ContainerBuilder +package container_builder import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/DeptracConfig" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + analyser2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/deptrac_config" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" @@ -17,28 +17,24 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseCommand" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseRunner" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ProgressSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Symfony/Style" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Symfony/SymfonyOutput" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Dumper" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/YmlFileLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/FormatterProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/TimeStopwatch" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/symfony" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" ) type ContainerBuilder struct { ProjectDirectory string CacheFile *string - Configuration *DeptracConfig.DeptracConfig + Configuration *deptrac_config.DeptracConfig EventDispatcher util.EventDispatcherInterface FileInputCollector input_collector.InputCollectorInterface - YmlFileLoader *YmlFileLoader.YmlFileLoader - Dumper *Dumper.Dumper + YmlFileLoader *file.YmlFileLoader + Dumper *file.Dumper AstLoader *ast.AstLoader AstFileReferenceFileCache *cache.AstFileReferenceFileCache AstFileReferenceDeferredCacheInterface cache.AstFileReferenceDeferredCacheInterface @@ -48,8 +44,8 @@ type ContainerBuilder struct { TypeResolver *parser.TypeResolver ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parser.ParserInterface - LayerProvider *LayerProvider.LayerProvider - EventHelper *event_helper.EventHelper + LayerProvider *layer.LayerProvider + EventHelper *analyser2.EventHelper AllowDependencyHandler *process_event.AllowDependencyHandler DependsOnPrivateLayer *process_event.DependsOnPrivateLayer DependsOnInternalToken *process_event.DependsOnInternalToken @@ -57,13 +53,13 @@ type ContainerBuilder struct { MatchingLayersHandler *process_event.MatchingLayersHandler UncoveredDependentHandler *process_event.UncoveredDependentHandler UnmatchedSkippedViolations *post_process_event.UnmatchedSkippedViolations - ConsoleSubscriber *ConsoleSubscriber.ConsoleSubscriber - ProgressSubscriber *ProgressSubscriber.ProgressSubscriber + ConsoleSubscriber *subscriber.ConsoleSubscriber + ProgressSubscriber *subscriber.ProgressSubscriber VerboseBoolFlag *bool DebugBoolFlag *bool - Style *Style.Style - SymfonyOutput *SymfonyOutput.SymfonyOutput - TimeStopwatch *TimeStopwatch.Stopwatch + Style *symfony.Style + SymfonyOutput *symfony.SymfonyOutput + TimeStopwatch *time_stopwatch.Stopwatch AstMapExtractor *ast.AstMapExtractor InheritanceFlattener *dependency.InheritanceFlattener DependencyResolver *dependency_resolver.DependencyResolver @@ -78,10 +74,10 @@ type ContainerBuilder struct { UnassignedTokenAnalyser *analyser.UnassignedTokenAnalyser LayerDependenciesAnalyser *analyser.LayerDependenciesAnalyser RulesetUsageAnalyser *analyser.RulesetUsageAnalyser - FormatterProvider *FormatterProvider.FormatterProvider - FormatterConfiguration *FormatterConfiguration.FormatterConfiguration - AnalyseRunner *AnalyseRunner.AnalyseRunner - AnalyseCommand *AnalyseCommand.AnalyseCommand + FormatterProvider *output_formatter.FormatterProvider + FormatterConfiguration *configuration.FormatterConfiguration + AnalyseRunner *command.AnalyseRunner + AnalyseCommand *command.AnalyseCommand } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface.go b/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go similarity index 77% rename from pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface.go rename to pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go index 7964285..440375a 100644 --- a/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface.go +++ b/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go @@ -1,9 +1,9 @@ -package EventDispatcher +package event_dispatcher import ( "fmt" - util "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap" + util "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" "reflect" "slices" ) @@ -21,7 +21,7 @@ func NewEventDispatcher(isDebug bool) util.EventDispatcherInterface { func (d *EventDispatcher) DispatchEvent(event interface{}) error { typeName := reflect.TypeOf(event).String() - subscribers, ok := EventSubscriberInterfaceMap.Map.Get(typeName) + subscribers, ok := event_subscriber_interface_map.Map.Get(typeName) if !ok { return nil // No subscribers registered for this event diff --git a/pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface/EventDispatcherInterface.go b/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go similarity index 100% rename from pkg/src/supportive/DependencyInjection/EventDispatcher/EventDispatcherInterface/EventDispatcherInterface.go rename to pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority/EventSubscriberDefaultPriority.go b/pkg/src/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go similarity index 100% rename from pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority/EventSubscriberDefaultPriority.go rename to pkg/src/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberInterface/EventSubscriberInterface.go b/pkg/src/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go similarity index 77% rename from pkg/src/supportive/DependencyInjection/EventSubscriberInterface/EventSubscriberInterface.go rename to pkg/src/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go index a2317a1..b7f09ba 100644 --- a/pkg/src/supportive/DependencyInjection/EventSubscriberInterface/EventSubscriberInterface.go +++ b/pkg/src/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go @@ -1,4 +1,4 @@ -package EventSubscriberInterface +package event_subscriber_interface type EventSubscriberInterface interface { InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error diff --git a/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go b/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go new file mode 100644 index 0000000..a4c24b6 --- /dev/null +++ b/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go @@ -0,0 +1,8 @@ +package event_subscriber_interface_map + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" + "github.com/elliotchance/orderedmap/v2" +) + +var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []event_subscriber_interface.EventSubscriberInterface]] diff --git a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go b/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go similarity index 60% rename from pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go rename to pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go index 166d877..616abe5 100644 --- a/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg/EventSubscriberInterfaceMapReg.go +++ b/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go @@ -1,33 +1,29 @@ -package EventSubscriberInterfaceMapReg +package event_subscriber_interface_map_reg import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostEmitEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PostFlattenEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreEmitEvent" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/PreFlattenEvent" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ProgressSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterface" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_default_priority" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" "github.com/elliotchance/orderedmap/v2" "reflect" ) -func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber.ConsoleSubscriber, progressSubscriber *ProgressSubscriber.ProgressSubscriber, withProgress bool) { +func RegForAnalyseCommand(consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber, withProgress bool) { processEvent := &process_event.ProcessEvent{} postProcessEvent := &post_process_event.PostProcessEvent{} preCreateAstMapEvent := &ast.PreCreateAstMapEvent{} postCreateAstMapEvent := &ast.PostCreateAstMapEvent{} astFileAnalysedEvent := &ast.AstFileAnalysedEvent{} astFileSyntaxErrorEvent := &ast.AstFileSyntaxErrorEvent{} - preEmitEvent := &PreEmitEvent.PreEmitEvent{} - postEmitEvent := &PostEmitEvent.PostEmitEvent{} - preFlattenEvent := &PreFlattenEvent.PreFlattenEvent{} - postFlattenEvent := &PostFlattenEvent.PostFlattenEvent{} + preEmitEvent := &dependency.PreEmitEvent{} + postEmitEvent := &dependency.PostEmitEvent{} + preFlattenEvent := &dependency.PreFlattenEvent{} + postFlattenEvent := &dependency.PostFlattenEvent{} Reg(preCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) Reg(postCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) @@ -47,21 +43,21 @@ func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber.ConsoleSubscriber } } -func Reg(event interface{}, sub EventSubscriberInterface.EventSubscriberInterface, priority int) { +func Reg(event interface{}, sub event_subscriber_interface.EventSubscriberInterface, priority int) { eventTypeof := reflect.TypeOf(event) eventType := eventTypeof.String() // Get or create event type row e, ok := EventSubscriberInterfaceMap2.Map.Get(eventType) if !ok { - e = orderedmap.NewOrderedMap[int, []EventSubscriberInterface.EventSubscriberInterface]() + e = orderedmap.NewOrderedMap[int, []event_subscriber_interface.EventSubscriberInterface]() EventSubscriberInterfaceMap2.Map.Set(eventType, e) } // Get or create priority column subs, ok := e.Get(priority) if !ok { - subs = []EventSubscriberInterface.EventSubscriberInterface{} + subs = []event_subscriber_interface.EventSubscriberInterface{} } subs = append(subs, sub) diff --git a/pkg/src/supportive/DependencyInjection/services.go b/pkg/src/supportive/dependency_injection/services.go similarity index 58% rename from pkg/src/supportive/DependencyInjection/services.go rename to pkg/src/supportive/dependency_injection/services.go index 2ff5971..e69a71d 100644 --- a/pkg/src/supportive/DependencyInjection/services.go +++ b/pkg/src/supportive/dependency_injection/services.go @@ -1,17 +1,14 @@ -package DependencyInjection +package dependency_injection import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/CollectorType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Config/EmitterType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/CollectorInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Layer/LayerProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + contractLayer "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" @@ -26,58 +23,52 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer" "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseCommand" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Command/AnalyseRunner" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ConsoleSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Subscriber/ProgressSubscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Symfony/Style" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Symfony/SymfonyOutput" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/ContainerBuilder" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventDispatcher" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberDefaultPriority" - EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/DependencyInjection/EventSubscriberInterfaceMap/EventSubscriberInterfaceMapReg" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Dumper" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/YmlFileLoader" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/Configuration/FormatterConfiguration" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/FormatterProvider" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/GithubActionsOutputFormatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/OutputFormatter/TableOutputFormatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/TimeStopwatch" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/symfony" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_default_priority" + EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" "github.com/elliotchance/orderedmap/v2" ) -func Services(builder *ContainerBuilder.ContainerBuilder) error { +func Services(builder *container_builder.ContainerBuilder) error { cacheableFileSubscriber := builder.CacheableFileSubscriber - configuration := builder.Configuration + builderConfiguration := builder.Configuration projectDirectory := builder.ProjectDirectory verboseBoolFlag := flag.Bool("verbose", false, "Verbose mode") debugBoolFlag := flag.Bool("debug", false, "Debug mode") - style := Style.NewStyle( + style := symfony.NewStyle( verboseBoolFlag != nil && *verboseBoolFlag == true, debugBoolFlag != nil && *debugBoolFlag == true, ) - symfonyOutput := SymfonyOutput.NewSymfonyOutput(style) + symfonyOutput := symfony.NewSymfonyOutput(style) - timeStopwatch := TimeStopwatch.NewStopwatch() + timeStopwatch := time_stopwatch.NewStopwatch() /* * Utilities */ - eventDispatcher := EventDispatcher.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + eventDispatcher := event_dispatcher.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) fileInputCollector, err := input_collector.NewFileInputCollector( - configuration.Paths, - configuration.ExcludeFiles, + builderConfiguration.Paths, + builderConfiguration.ExcludeFiles, projectDirectory, ) if err != nil { return err } - ymlFileLoader := YmlFileLoader.NewYmlFileLoader() - dumper := Dumper.NewDumper("/deptrac_template.yaml") + ymlFileLoader := file.NewYmlFileLoader() + dumper := file.NewDumper("/deptrac_template.yaml") /* * AST @@ -110,23 +101,23 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { /* * Dependency */ - dependencyEmitters := map[EmitterType.EmitterType]emitter.DependencyEmitterInterface{ - EmitterType.ClassToken: emitter.NewClassDependencyEmitter(), - EmitterType.ClassSuperGlobalToken: emitter.NewClassSuperglobalDependencyEmitter(), - EmitterType.FileToken: emitter.NewFileDependencyEmitter(), - EmitterType.FunctionToken: emitter.NewFunctionDependencyEmitter(), - EmitterType.FunctionCall: emitter.NewFunctionCallDependencyEmitter(), - EmitterType.FunctionSuperGlobalToken: emitter.NewFunctionSuperglobalDependencyEmitter(), - EmitterType.UseToken: emitter.NewUsesDependencyEmitter(), + dependencyEmitters := map[config.EmitterType]emitter.DependencyEmitterInterface{ + config.ClassToken: emitter.NewClassDependencyEmitter(), + config.ClassSuperGlobalToken: emitter.NewClassSuperglobalDependencyEmitter(), + config.FileToken: emitter.NewFileDependencyEmitter(), + config.FunctionToken: emitter.NewFunctionDependencyEmitter(), + config.FunctionCall: emitter.NewFunctionCallDependencyEmitter(), + config.FunctionSuperGlobalToken: emitter.NewFunctionSuperglobalDependencyEmitter(), + config.UseToken: emitter.NewUsesDependencyEmitter(), } inheritanceFlattener := dependency.NewInheritanceFlattener() - dependencyResolver := dependency_resolver.NewDependencyResolver(configuration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + dependencyResolver := dependency_resolver.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) tokenResolver := dependency.NewTokenResolver() astMapExtractor := ast.NewAstMapExtractor(fileInputCollector, astLoader) - layerProvider := LayerProvider.NewLayerProvider(configuration.Rulesets) - eventHelper := event_helper.NewEventHelper(configuration.SkipViolations, layerProvider) + layerProvider := contractLayer.NewLayerProvider(builderConfiguration.Rulesets) + eventHelper := event_helper.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* * Events (before first possible event) @@ -134,17 +125,17 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { /* * Events */ - EventSubscriberInterfaceMap.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface2.EventSubscriberInterface]]() + event_subscriber_interface_map.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface2.EventSubscriberInterface]]() // Events - uncoveredDependentHandler := process_event.NewUncoveredDependentHandler(configuration.IgnoreUncoveredInternalStructs) + uncoveredDependentHandler := process_event.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) matchingLayersHandler := process_event.NewMatchingLayersHandler() allowDependencyHandler := process_event.NewAllowDependencyHandler() - consoleSubscriber := ConsoleSubscriber.NewConsoleSubscriber(symfonyOutput, timeStopwatch) - progressSubscriber := ProgressSubscriber.NewProgressSubscriber(symfonyOutput) + consoleSubscriber := subscriber.NewConsoleSubscriber(symfonyOutput, timeStopwatch) + progressSubscriber := subscriber.NewProgressSubscriber(symfonyOutput) dependsOnDisallowedLayer := process_event.NewDependsOnDisallowedLayer(eventHelper) dependsOnPrivateLayer := process_event.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := process_event.NewDependsOnInternalToken(eventHelper, configuration.Analyser) + dependsOnInternalToken := process_event.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) unmatchedSkippedViolations := post_process_event.NewUnmatchedSkippedViolations(eventHelper) processEvent := &process_event2.ProcessEvent{} @@ -153,16 +144,16 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { postCreateAstMapEvent := &astContract.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" - EventSubscriberInterfaceMapReg.Reg(processEvent, allowDependencyHandler, -100) - EventSubscriberInterfaceMapReg.Reg(processEvent, dependsOnPrivateLayer, -3) - EventSubscriberInterfaceMapReg.Reg(processEvent, dependsOnInternalToken, -2) - EventSubscriberInterfaceMapReg.Reg(processEvent, dependsOnDisallowedLayer, -1) - EventSubscriberInterfaceMapReg.Reg(processEvent, matchingLayersHandler, 1) - EventSubscriberInterfaceMapReg.Reg(processEvent, uncoveredDependentHandler, 2) - EventSubscriberInterfaceMapReg.Reg(postProcessEvent, unmatchedSkippedViolations, EventSubscriberInterfaceMap2.DefaultPriority) + event_subscriber_interface_map_reg.Reg(processEvent, allowDependencyHandler, -100) + event_subscriber_interface_map_reg.Reg(processEvent, dependsOnPrivateLayer, -3) + event_subscriber_interface_map_reg.Reg(processEvent, dependsOnInternalToken, -2) + event_subscriber_interface_map_reg.Reg(processEvent, dependsOnDisallowedLayer, -1) + event_subscriber_interface_map_reg.Reg(processEvent, matchingLayersHandler, 1) + event_subscriber_interface_map_reg.Reg(processEvent, uncoveredDependentHandler, 2) + event_subscriber_interface_map_reg.Reg(postProcessEvent, unmatchedSkippedViolations, EventSubscriberInterfaceMap2.DefaultPriority) if cacheableFileSubscriber != nil { - EventSubscriberInterfaceMapReg.Reg(preCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) - EventSubscriberInterfaceMapReg.Reg(postCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) + event_subscriber_interface_map_reg.Reg(preCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) + event_subscriber_interface_map_reg.Reg(postCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) } /* @@ -182,29 +173,29 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { } collectorProvider := collector.NewCollectorProvider() collectorResolver := collector.NewCollectorResolver(collectorProvider) - layerResolver := layer.NewLayerResolver(collectorResolver, configuration.Layers) - collectors := map[CollectorType.CollectorType]CollectorInterface.CollectorInterface{ + layerResolver := layer.NewLayerResolver(collectorResolver, builderConfiguration.Layers) + collectors := map[config.CollectorType]contractLayer.CollectorInterface{ //AttributeCollector - CollectorType.TypeBool: collector.NewBoolCollector(collectorResolver), - CollectorType.TypeClass: collector.NewClassCollector(), - CollectorType.TypeClasslike: collector.NewClassLikeCollector(), - CollectorType.TypeClassNameRegex: collector.NewClassNameRegexCollector(), + config.TypeBool: collector.NewBoolCollector(collectorResolver), + config.TypeClass: collector.NewClassCollector(), + config.TypeClasslike: collector.NewClassLikeCollector(), + config.TypeClassNameRegex: collector.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - CollectorType.TypeDirectory: collector.NewDirectoryCollector(), + config.TypeDirectory: collector.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - CollectorType.TypeFunctionName: collector.NewFunctionNameCollector(), - CollectorType.TypeGlob: collector.NewGlobCollector(projectDirectory), + config.TypeFunctionName: collector.NewFunctionNameCollector(), + config.TypeGlob: collector.NewGlobCollector(projectDirectory), //ImplementsCollector - CollectorType.TypeInheritance: inheritanceLevelCollector, - CollectorType.TypeInterface: collector.NewInterfaceCollector(), - CollectorType.TypeInherits: inheritsCollector, - CollectorType.TypeLayer: collector.NewLayerCollector(layerResolver), - CollectorType.TypeMethod: collector.NewMethodCollector(nikicPhpParser), - CollectorType.TypeSuperGlobal: collector.NewSuperglobalCollector(), - CollectorType.TypeTrait: collector.NewTraitCollector(), - CollectorType.TypeUses: usesCollector, + config.TypeInheritance: inheritanceLevelCollector, + config.TypeInterface: collector.NewInterfaceCollector(), + config.TypeInherits: inheritsCollector, + config.TypeLayer: collector.NewLayerCollector(layerResolver), + config.TypeMethod: collector.NewMethodCollector(nikicPhpParser), + config.TypeSuperGlobal: collector.NewSuperglobalCollector(), + config.TypeTrait: collector.NewTraitCollector(), + config.TypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - CollectorType.TypeComposer: collector.NewComposerCollector(), + config.TypeComposer: collector.NewComposerCollector(), } collectorProvider.Set(collectors) @@ -212,18 +203,18 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { * SetAnalyser */ dependencyLayersAnalyser := analyser.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := analyser.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) + tokenInLayerAnalyser := analyser.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerForTokenAnalyser := analyser.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := analyser.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, configuration.Analyser) + unassignedTokenAnalyser := analyser.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerDependenciesAnalyser := analyser.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := analyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, configuration.Layers) + rulesetUsageAnalyser := analyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* * OutputFormatter */ - outputFormatter := map[OutputFormatterType.OutputFormatterType]OutputFormatterInterface.OutputFormatterInterface{ - OutputFormatterType.Table: TableOutputFormatter.NewTableOutputFormatter(), - OutputFormatterType.GithubActions: GithubActionsOutputFormatter.NewGithubActionsOutputFormatter(), + outputFormatter := map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface{ + output_formatter.Table: output_formatter2.NewTableOutputFormatter(), + output_formatter.GithubActions: output_formatter2.NewGithubActionsOutputFormatter(), // TODO: // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter'); // $services->set(JUnitOutputFormatter::class)->tag('output_formatter'); @@ -237,14 +228,14 @@ func Services(builder *ContainerBuilder.ContainerBuilder) error { // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter'); // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter'); } - formatterProvider := FormatterProvider.NewFormatterProvider(outputFormatter) - formatterConfiguration := FormatterConfiguration.NewFormatterConfiguration(configuration.Formatters) + formatterProvider := output_formatter2.NewFormatterProvider(outputFormatter) + formatterConfiguration := configuration.NewFormatterConfiguration(builderConfiguration.Formatters) /* * Console */ - analyseRunner := AnalyseRunner.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) - analyseCommand := AnalyseCommand.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber) + analyseRunner := command.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + analyseCommand := command.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber) // TODO: other commands // $services->set(InitCommand::class)->autowire()->tag('console.command'); diff --git a/pkg/src/supportive/DependencyInjection/services.php b/pkg/src/supportive/dependency_injection/services.php similarity index 100% rename from pkg/src/supportive/DependencyInjection/services.php rename to pkg/src/supportive/dependency_injection/services.php diff --git a/pkg/src/supportive/File/Dumper/Dumper.go b/pkg/src/supportive/file/dumper.go similarity index 97% rename from pkg/src/supportive/File/Dumper/Dumper.go rename to pkg/src/supportive/file/dumper.go index 1964512..129ff9d 100644 --- a/pkg/src/supportive/File/Dumper/Dumper.go +++ b/pkg/src/supportive/file/dumper.go @@ -1,4 +1,4 @@ -package Dumper +package file import ( "errors" diff --git a/pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.go b/pkg/src/supportive/file/exception/could_not_read_file_exception.go similarity index 94% rename from pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.go rename to pkg/src/supportive/file/exception/could_not_read_file_exception.go index 26eac2c..1be940d 100644 --- a/pkg/src/supportive/File/Exception/CouldNotReadFileException/CouldNotReadFileException.go +++ b/pkg/src/supportive/file/exception/could_not_read_file_exception.go @@ -1,4 +1,4 @@ -package CouldNotReadFileException +package exception import "fmt" diff --git a/pkg/src/supportive/File/Exception/FileAlreadyExistsException/FileAlreadyExistsException.go b/pkg/src/supportive/file/exception/file_already_exists_exception.go similarity index 94% rename from pkg/src/supportive/File/Exception/FileAlreadyExistsException/FileAlreadyExistsException.go rename to pkg/src/supportive/file/exception/file_already_exists_exception.go index 27443d7..907241a 100644 --- a/pkg/src/supportive/File/Exception/FileAlreadyExistsException/FileAlreadyExistsException.go +++ b/pkg/src/supportive/file/exception/file_already_exists_exception.go @@ -1,4 +1,4 @@ -package FileAlreadyExistsException +package exception import ( "fmt" diff --git a/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.go b/pkg/src/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go similarity index 93% rename from pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.go rename to pkg/src/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go index 6c41c45..1b65471 100644 --- a/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException/FileCannotBeParsedAsYamlException.go +++ b/pkg/src/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go @@ -1,4 +1,4 @@ -package FileCannotBeParsedAsYamlException +package exception import "fmt" diff --git a/pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.go b/pkg/src/supportive/file/exception/file_not_exists_exception.go similarity index 93% rename from pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.go rename to pkg/src/supportive/file/exception/file_not_exists_exception.go index 94e6970..f909516 100644 --- a/pkg/src/supportive/File/Exception/FileNotExistsException/FileNotExistsException.go +++ b/pkg/src/supportive/file/exception/file_not_exists_exception.go @@ -1,4 +1,4 @@ -package FileNotExistsException +package exception import "fmt" diff --git a/pkg/src/supportive/File/Exception/FileNotWritableException/FileNotWritableException.go b/pkg/src/supportive/file/exception/file_not_writable_exception.go similarity index 94% rename from pkg/src/supportive/File/Exception/FileNotWritableException/FileNotWritableException.go rename to pkg/src/supportive/file/exception/file_not_writable_exception.go index db729bb..0405ec4 100644 --- a/pkg/src/supportive/File/Exception/FileNotWritableException/FileNotWritableException.go +++ b/pkg/src/supportive/file/exception/file_not_writable_exception.go @@ -1,4 +1,4 @@ -package FileNotWritableException +package exception import ( "fmt" diff --git a/pkg/src/supportive/File/Exception/IOException/IOException.go b/pkg/src/supportive/file/exception/i_o_exception.go similarity index 93% rename from pkg/src/supportive/File/Exception/IOException/IOException.go rename to pkg/src/supportive/file/exception/i_o_exception.go index 32fd4be..a68dffd 100644 --- a/pkg/src/supportive/File/Exception/IOException/IOException.go +++ b/pkg/src/supportive/file/exception/i_o_exception.go @@ -1,4 +1,4 @@ -package IOException +package exception type IOException struct { Message string diff --git a/pkg/src/supportive/File/Exception/InvalidPathException/InvalidPathException.go b/pkg/src/supportive/file/exception/invalid_path_exception.go similarity index 94% rename from pkg/src/supportive/File/Exception/InvalidPathException/InvalidPathException.go rename to pkg/src/supportive/file/exception/invalid_path_exception.go index 59cd5b0..546f62c 100644 --- a/pkg/src/supportive/File/Exception/InvalidPathException/InvalidPathException.go +++ b/pkg/src/supportive/file/exception/invalid_path_exception.go @@ -1,4 +1,4 @@ -package InvalidPathException +package exception import ( "fmt" diff --git a/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.go b/pkg/src/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go similarity index 93% rename from pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.go rename to pkg/src/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go index 9c3fd68..90f9072 100644 --- a/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException/ParsedYamlIsNotAnArrayException.go +++ b/pkg/src/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go @@ -1,4 +1,4 @@ -package ParsedYamlIsNotAnArrayException +package exception import "fmt" diff --git a/pkg/src/supportive/file/file_reader.go b/pkg/src/supportive/file/file_reader.go new file mode 100644 index 0000000..0f7bb69 --- /dev/null +++ b/pkg/src/supportive/file/file_reader.go @@ -0,0 +1,14 @@ +package file + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" + "os" +) + +func FileReaderRead(fileName string) (string, error) { + contents, err := os.ReadFile(fileName) + if err != nil { + return "", exception.NewCouldNotReadFileExceptionFromFilename(fileName, err) + } + return string(contents), nil +} diff --git a/pkg/src/supportive/File/YmlFileLoader/YmlFileLoader.go b/pkg/src/supportive/file/yml_file_loader.go similarity index 66% rename from pkg/src/supportive/File/YmlFileLoader/YmlFileLoader.go rename to pkg/src/supportive/file/yml_file_loader.go index 3fd1aa6..3a00694 100644 --- a/pkg/src/supportive/File/YmlFileLoader/YmlFileLoader.go +++ b/pkg/src/supportive/file/yml_file_loader.go @@ -1,8 +1,7 @@ -package YmlFileLoader +package file import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Exception/FileCannotBeParsedAsYamlException" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/File/Exception/ParsedYamlIsNotAnArrayException" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" "gopkg.in/yaml.v3" ) @@ -23,7 +22,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { err := yaml.Unmarshal([]byte(file), &yamlMap) if err != nil { - return nil, FileCannotBeParsedAsYamlException.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) + return nil, exception.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) } _, ok1 := yamlMap["parameters"] @@ -31,7 +30,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { _, ok3 := yamlMap["imports"] if !ok1 || !ok2 || !ok3 { - return nil, ParsedYamlIsNotAnArrayException.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) + return nil, exception.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) } result := &ParseFileResult{ diff --git a/pkg/src/supportive/OutputFormatter/BaselineOutputFormatter.php b/pkg/src/supportive/output_formatter/BaselineOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/BaselineOutputFormatter.php rename to pkg/src/supportive/output_formatter/BaselineOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/CodeclimateOutputFormatter.php b/pkg/src/supportive/output_formatter/CodeclimateOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/CodeclimateOutputFormatter.php rename to pkg/src/supportive/output_formatter/CodeclimateOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/ConsoleOutputFormatter.php b/pkg/src/supportive/output_formatter/ConsoleOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/ConsoleOutputFormatter.php rename to pkg/src/supportive/output_formatter/ConsoleOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/GraphVizOutputDisplayFormatter.php b/pkg/src/supportive/output_formatter/GraphVizOutputDisplayFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/GraphVizOutputDisplayFormatter.php rename to pkg/src/supportive/output_formatter/GraphVizOutputDisplayFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/GraphVizOutputDotFormatter.php b/pkg/src/supportive/output_formatter/GraphVizOutputDotFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/GraphVizOutputDotFormatter.php rename to pkg/src/supportive/output_formatter/GraphVizOutputDotFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/GraphVizOutputFormatter.php b/pkg/src/supportive/output_formatter/GraphVizOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/GraphVizOutputFormatter.php rename to pkg/src/supportive/output_formatter/GraphVizOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/GraphVizOutputHtmlFormatter.php b/pkg/src/supportive/output_formatter/GraphVizOutputHtmlFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/GraphVizOutputHtmlFormatter.php rename to pkg/src/supportive/output_formatter/GraphVizOutputHtmlFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/GraphVizOutputImageFormatter.php b/pkg/src/supportive/output_formatter/GraphVizOutputImageFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/GraphVizOutputImageFormatter.php rename to pkg/src/supportive/output_formatter/GraphVizOutputImageFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/JUnitOutputFormatter.php b/pkg/src/supportive/output_formatter/JUnitOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/JUnitOutputFormatter.php rename to pkg/src/supportive/output_formatter/JUnitOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/JsonOutputFormatter.php b/pkg/src/supportive/output_formatter/JsonOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/JsonOutputFormatter.php rename to pkg/src/supportive/output_formatter/JsonOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/MermaidJSOutputFormatter.php b/pkg/src/supportive/output_formatter/MermaidJSOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/MermaidJSOutputFormatter.php rename to pkg/src/supportive/output_formatter/MermaidJSOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/XMLOutputFormatter.php b/pkg/src/supportive/output_formatter/XMLOutputFormatter.php similarity index 100% rename from pkg/src/supportive/OutputFormatter/XMLOutputFormatter.php rename to pkg/src/supportive/output_formatter/XMLOutputFormatter.php diff --git a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.go b/pkg/src/supportive/output_formatter/configuration/configuration_codeclimate.go similarity index 96% rename from pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.go rename to pkg/src/supportive/output_formatter/configuration/configuration_codeclimate.go index c95b3c7..50d3f76 100644 --- a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationCodeclimate/ConfigurationCodeclimate.go +++ b/pkg/src/supportive/output_formatter/configuration/configuration_codeclimate.go @@ -1,4 +1,4 @@ -package ConfigurationCodeclimate +package configuration type severityType string diff --git a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.go b/pkg/src/supportive/output_formatter/configuration/configuration_graph_viz.go similarity index 95% rename from pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.go rename to pkg/src/supportive/output_formatter/configuration/configuration_graph_viz.go index 09da1e0..e1a3393 100644 --- a/pkg/src/supportive/OutputFormatter/Configuration/ConfigurationGraphViz/ConfigurationGraphViz.go +++ b/pkg/src/supportive/output_formatter/configuration/configuration_graph_viz.go @@ -1,4 +1,4 @@ -package ConfigurationGraphViz +package configuration type ConfigurationGraphViz struct { hiddenLayers []string diff --git a/pkg/src/supportive/output_formatter/configuration/formatter_configuration.go b/pkg/src/supportive/output_formatter/configuration/formatter_configuration.go new file mode 100644 index 0000000..0adb211 --- /dev/null +++ b/pkg/src/supportive/output_formatter/configuration/formatter_configuration.go @@ -0,0 +1,17 @@ +package configuration + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/formatter" +) + +type FormatterConfiguration struct { + config map[formatter.FormatterType]formatter.FormatterConfigInterface +} + +func NewFormatterConfiguration(config map[formatter.FormatterType]formatter.FormatterConfigInterface) *FormatterConfiguration { + return &FormatterConfiguration{config: config} +} + +func (f *FormatterConfiguration) GetConfigFor(area formatter.FormatterType) formatter.FormatterConfigInterface { + return f.config[area] +} diff --git a/pkg/src/supportive/output_formatter/formatter_provider.go b/pkg/src/supportive/output_formatter/formatter_provider.go new file mode 100644 index 0000000..fe9cf15 --- /dev/null +++ b/pkg/src/supportive/output_formatter/formatter_provider.go @@ -0,0 +1,37 @@ +package output_formatter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException" + "golang.org/x/exp/maps" + "reflect" +) + +type FormatterProvider struct { + formatterLocator map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface +} + +func NewFormatterProvider(formatterLocator map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface) *FormatterProvider { + return &FormatterProvider{ + formatterLocator: formatterLocator, + } +} + +func (f *FormatterProvider) Get(id output_formatter.OutputFormatterType) (output_formatter.OutputFormatterInterface, error) { + service, ok := f.formatterLocator[id] + + if !ok { + return nil, InvalidServiceInLocatorException.NewInvalidServiceInLocatorExceptionInvalidType(id, reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") + } + + return service, nil +} + +func (f *FormatterProvider) Has(id output_formatter.OutputFormatterType) bool { + _, ok := f.formatterLocator[id] + return ok +} + +func (f *FormatterProvider) GetKnownFormatters() []output_formatter.OutputFormatterType { + return maps.Keys(f.formatterLocator) +} diff --git a/pkg/src/supportive/output_formatter/github_actions_output_formatter.go b/pkg/src/supportive/output_formatter/github_actions_output_formatter.go new file mode 100644 index 0000000..fff7b4e --- /dev/null +++ b/pkg/src/supportive/output_formatter/github_actions_output_formatter.go @@ -0,0 +1,120 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" + "strings" +) + +type GithubActionsOutputFormatter struct{} + +func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { + return &GithubActionsOutputFormatter{} +} + +func (g *GithubActionsOutputFormatter) GetName() output_formatter.OutputFormatterType { + return output_formatter.GithubActions +} + +func (g *GithubActionsOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { + for _, rule := range outputResult.AllOf(result.TypeViolation) { + g.printViolation(rule, output) + } + if outputFormatterInput.ReportSkipped { + for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { + g.printViolation(rule, output) + } + } + if outputFormatterInput.ReportUncovered { + g.printUncovered(outputResult, output, outputFormatterInput.FailOnUncovered) + } + if outputResult.HasErrors() { + g.printErrors(outputResult, output) + } + if outputResult.HasWarnings() { + g.printWarnings(outputResult, output) + } + + return nil +} + +func (g *GithubActionsOutputFormatter) determineLogLevel(rule result.RuleInterface) string { + switch rule.(type) { + case *result.Violation: + return "error" + case *result.SkippedViolation: + return "warning" + default: + return "debug" + } +} + +func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.OutputResult, output output_formatter.OutputInterface, reportAsError bool) { + for _, u := range result.Uncovered() { + dependency := u.GetDependency() + + reportAs := "warning" + if reportAsError { + reportAs = "error" + } + + output.WriteLineFormatted( + output_formatter.StringOrArrayOfStrings{ + String: fmt.Sprintf( + "::%s file=%s,line=%d::%s has uncovered dependency on %s (%s)", + reportAs, + dependency.GetContext().FileOccurrence.Filepath, + dependency.GetContext().FileOccurrence.Line, + dependency.GetDepender().ToString(), + dependency.GetDependent().ToString(), + u.Layer, + ), + }, + ) + } +} + +func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependency.DependencyInterface) string { + lines := make([]string, 0) + for _, serializedDependency := range dep.Serialize() { + lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) + } + return strings.Join(lines, " ->%0A") +} + +func (g *GithubActionsOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter.OutputInterface) { + for _, e := range result.Errors { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + } +} + +func (g *GithubActionsOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter.OutputInterface) { + for _, warning := range result.Warnings { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + } +} + +func (g *GithubActionsOutputFormatter) printViolation(rule result.RuleInterface, output output_formatter.OutputInterface) { + dependency := rule.GetDependency() + prefix := "" + dependerLayer := "" + dependentLayer := "" + switch v := rule.(type) { + case *result.SkippedViolation: + prefix = "[SKIPPED] " + dependerLayer = v.GetDependerLayer() + dependentLayer = v.GetDependentLayer() + case *result.Violation: + dependerLayer = v.GetDependerLayer() + dependentLayer = v.GetDependentLayer() + } + message := fmt.Sprintf("%s%s must not depend on %s (%s on %s)", prefix, dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), dependerLayer, dependentLayer) + if len(dependency.Serialize()) > 1 { + message += "%0A" + g.multilinePathMessage(dependency) + + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.Filepath, dependency.GetContext().FileOccurrence.Line, message)}) +} diff --git a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.go b/pkg/src/supportive/output_formatter/table_output_formatter.go similarity index 71% rename from pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.go rename to pkg/src/supportive/output_formatter/table_output_formatter.go index 7695bca..1b3147b 100644 --- a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter.go +++ b/pkg/src/supportive/output_formatter/table_output_formatter.go @@ -1,17 +1,11 @@ -package TableOutputFormatter +package output_formatter import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Dependency/DependencyInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInput" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputFormatterInterface/OutputFormatterType" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/OutputFormatter/OutputStyleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/OutputResult" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/RuleInterface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/SkippedViolation" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Uncovered" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/Result/Violation" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -24,12 +18,12 @@ func NewTableOutputFormatter() *TableOutputFormatter { return &TableOutputFormatter{} } -func (t *TableOutputFormatter) GetName() OutputFormatterType.OutputFormatterType { - return OutputFormatterType.Table +func (t *TableOutputFormatter) GetName() output_formatter.OutputFormatterType { + return output_formatter.Table } -func (t *TableOutputFormatter) Finish(outputResult *OutputResult.OutputResult, output OutputInterface.OutputInterface, outputFormatterInput *OutputFormatterInput.OutputFormatterInput) error { - groupedRules := make(map[string][]RuleInterface.RuleInterface) +func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { + groupedRules := make(map[string][]result.RuleInterface) for _, ruleItem := range outputResult.Violations() { groupedRules[ruleItem.GetDependerLayer()] = append(groupedRules[ruleItem.GetDependerLayer()], ruleItem) @@ -54,7 +48,7 @@ func (t *TableOutputFormatter) Finish(outputResult *OutputResult.OutputResult, o for _, layer := range groupedRulesLayers { rules := groupedRules[layer] - slices.SortFunc(rules, func(a, b RuleInterface.RuleInterface) int { + slices.SortFunc(rules, func(a, b result.RuleInterface) int { if a.GetDependency().GetDepender().ToString() < b.GetDependency().GetDepender().ToString() { return -1 } @@ -64,11 +58,11 @@ func (t *TableOutputFormatter) Finish(outputResult *OutputResult.OutputResult, o rows := make([][]string, 0) for _, ruleItem := range rules { switch item := ruleItem.(type) { - case *Uncovered.Uncovered: + case *result.Uncovered: rows = append(rows, t.uncoveredRow(item, outputFormatterInput.FailOnUncovered)) - case *Violation.Violation: + case *result.Violation: rows = append(rows, t.violationRow(item)) - case *SkippedViolation.SkippedViolation: + case *result.SkippedViolation: rows = append(rows, t.skippedViolationRow(item)) } } @@ -85,7 +79,7 @@ func (t *TableOutputFormatter) Finish(outputResult *OutputResult.OutputResult, o return nil } -func (t *TableOutputFormatter) skippedViolationRow(rule *SkippedViolation.SkippedViolation) []string { +func (t *TableOutputFormatter) skippedViolationRow(rule *result.SkippedViolation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s (%s)", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { @@ -97,7 +91,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *SkippedViolation.Skippe } -func (t *TableOutputFormatter) violationRow(rule *Violation.Violation) []string { +func (t *TableOutputFormatter) violationRow(rule *result.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) message += fmt.Sprintf("\n%s (%s -> %s)", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) @@ -108,7 +102,7 @@ func (t *TableOutputFormatter) violationRow(rule *Violation.Violation) []string message += fmt.Sprintf("\n%s:%d", fileOccurrence.Filepath, fileOccurrence.Line) return []string{color.Sprint("Violation"), message} } -func (t *TableOutputFormatter) formatMultilinePath(dep DependencyInterface.DependencyInterface) string { +func (t *TableOutputFormatter) formatMultilinePath(dep dependency.DependencyInterface) string { lines := make([]string, 0) for _, serializedDependency := range dep.Serialize() { lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) @@ -116,7 +110,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep DependencyInterface.Depen return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *OutputResult.OutputResult, output OutputInterface.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, output output_formatter.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -157,7 +151,7 @@ func (t *TableOutputFormatter) printSummary(result *OutputResult.OutputResult, o style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []OutputStyleInterface.StringOrArrayOfStringsOrTableSeparator{ + []output_formatter.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -170,7 +164,7 @@ func (t *TableOutputFormatter) printSummary(result *OutputResult.OutputResult, o ) } -func (t *TableOutputFormatter) uncoveredRow(rule *Uncovered.Uncovered, reportAsError bool) []string { +func (t *TableOutputFormatter) uncoveredRow(rule *result.Uncovered, reportAsError bool) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s has uncovered dependency on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) if len(gotDependency.Serialize()) > 1 { @@ -185,7 +179,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *Uncovered.Uncovered, reportAsE return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *OutputResult.OutputResult, output OutputInterface.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -195,7 +189,7 @@ func (t *TableOutputFormatter) printErrors(result *OutputResult.OutputResult, ou output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *OutputResult.OutputResult, output OutputInterface.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter_test.go b/pkg/src/supportive/output_formatter/table_output_formatter_test.go similarity index 83% rename from pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter_test.go rename to pkg/src/supportive/output_formatter/table_output_formatter_test.go index 7abd038..f161e39 100644 --- a/pkg/src/supportive/OutputFormatter/TableOutputFormatter/TableOutputFormatter_test.go +++ b/pkg/src/supportive/output_formatter/table_output_formatter_test.go @@ -1,4 +1,4 @@ -package TableOutputFormatter +package output_formatter import ( "fmt" diff --git a/pkg/src/supportive/TimeStopwatch/Period.go b/pkg/src/supportive/time_stopwatch/period.go similarity index 95% rename from pkg/src/supportive/TimeStopwatch/Period.go rename to pkg/src/supportive/time_stopwatch/period.go index 64e5c96..0a2c6a2 100644 --- a/pkg/src/supportive/TimeStopwatch/Period.go +++ b/pkg/src/supportive/time_stopwatch/period.go @@ -1,4 +1,4 @@ -package TimeStopwatch +package time_stopwatch import ( "github.com/loov/hrtime" diff --git a/pkg/src/supportive/TimeStopwatch/StartedPeriod.go b/pkg/src/supportive/time_stopwatch/started_period.go similarity index 96% rename from pkg/src/supportive/TimeStopwatch/StartedPeriod.go rename to pkg/src/supportive/time_stopwatch/started_period.go index 26f3b24..d567a55 100644 --- a/pkg/src/supportive/TimeStopwatch/StartedPeriod.go +++ b/pkg/src/supportive/time_stopwatch/started_period.go @@ -1,4 +1,4 @@ -package TimeStopwatch +package time_stopwatch import ( "github.com/loov/hrtime" diff --git a/pkg/src/supportive/TimeStopwatch/Stopwatch.go b/pkg/src/supportive/time_stopwatch/stopwatch.go similarity index 97% rename from pkg/src/supportive/TimeStopwatch/Stopwatch.go rename to pkg/src/supportive/time_stopwatch/stopwatch.go index 919d96a..f6c6697 100644 --- a/pkg/src/supportive/TimeStopwatch/Stopwatch.go +++ b/pkg/src/supportive/time_stopwatch/stopwatch.go @@ -1,4 +1,4 @@ -package TimeStopwatch +package time_stopwatch type Stopwatch struct { periods map[string]*StartedPeriod diff --git a/pkg/src/supportive/TimeStopwatch/StopwatchException.go b/pkg/src/supportive/time_stopwatch/stopwatch_exception.go similarity index 96% rename from pkg/src/supportive/TimeStopwatch/StopwatchException.go rename to pkg/src/supportive/time_stopwatch/stopwatch_exception.go index 5060fe1..81fe2d5 100644 --- a/pkg/src/supportive/TimeStopwatch/StopwatchException.go +++ b/pkg/src/supportive/time_stopwatch/stopwatch_exception.go @@ -1,4 +1,4 @@ -package TimeStopwatch +package time_stopwatch import "fmt" diff --git a/pkg/test_projects/examples/simple-cleanarch/run_test.go b/pkg/test_projects/examples/simple-cleanarch/run_test.go index cf22485..6869b35 100644 --- a/pkg/test_projects/examples/simple-cleanarch/run_test.go +++ b/pkg/test_projects/examples/simple-cleanarch/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -21,7 +21,7 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - Application. + application. NewApplication(). Run() } diff --git a/pkg/test_projects/examples/simple-invalid-mvc/run_test.go b/pkg/test_projects/examples/simple-invalid-mvc/run_test.go index acee663..218678a 100644 --- a/pkg/test_projects/examples/simple-invalid-mvc/run_test.go +++ b/pkg/test_projects/examples/simple-invalid-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -21,7 +21,7 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - Application. + application. NewApplication(). Run() } diff --git a/pkg/test_projects/examples/simple-mvc/run_test.go b/pkg/test_projects/examples/simple-mvc/run_test.go index 849c917..ee426e1 100644 --- a/pkg/test_projects/examples/simple-mvc/run_test.go +++ b/pkg/test_projects/examples/simple-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/Console/Application" + "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -21,7 +21,7 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - Application. + application. NewApplication(). Run() } From 3b52b701961eaadc1aa3e78e932ffb3a90c88127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Sat, 24 Aug 2024 11:05:05 +0300 Subject: [PATCH 04/40] chore: refactor(remove php) --- deptrac.yaml | 28 ++++---- pkg/config/analyse_options_hook.go | 2 +- .../analysis_result/analysis_result.go | 2 +- .../analyser/event_helper/event_helper.go | 10 +-- .../post_process_event/post_process_event.go | 2 +- .../analyser/process_event/process_event.go | 11 +-- .../violation_creating_interface.go | 0 .../contract/ast/ast_file_analysed_event.go | 0 .../ast/ast_file_syntax_error_event.go | 0 .../ast/could_not_parse_file_exception.go | 0 .../contract/ast/dependency_context.go | 0 pkg/{src => }/contract/ast/dependency_type.go | 0 pkg/{src => }/contract/ast/file_occurrence.go | 0 .../contract/ast/post_create_ast_map_event.go | 0 .../contract/ast/pre_create_ast_map_event.go | 0 .../ast/tagged_token_reference_interface.go | 0 pkg/{src => }/contract/ast/token_interface.go | 0 .../contract/ast/token_reference_interface.go | 0 ...n_reference_with_dependencies_interface.go | 4 +- .../contract/config/analyser_config.go | 0 .../contract/config/codeclimate_level_enum.go | 0 .../config/collector/attribute_config.go | 2 +- .../contract/config/collector/bool_config.go | 2 +- .../contract/config/collector/class_config.go | 2 +- .../config/collector/class_like_config.go | 2 +- .../collector/class_name_regex_config.go | 2 +- .../config/collector/composer_config.go | 2 +- .../config/collector/directory_config.go | 2 +- .../config/collector/extends_config.go | 2 +- .../config/collector/function_name_config.go | 2 +- .../contract/config/collector/glob_config.go | 2 +- .../config/collector/implements_config.go | 2 +- .../config/collector/inherits_config.go | 2 +- .../config/collector/interface_config.go | 2 +- .../contract/config/collector/layer_config.go | 2 +- .../config/collector/method_config.go | 2 +- .../config/collector/php_interal_config.go | 2 +- .../config/collector/super_global_config.go | 2 +- .../collector/tag_value_regex_config.go | 2 +- .../contract/config/collector/trait_config.go | 2 +- .../contract/config/collector/uses_config.go | 2 +- .../contract/config/collector_config.go | 0 .../contract/config/collector_type.go | 0 .../config/configurable_collector_config.go | 0 .../config/deptrac_config/deptrac_config.go | 6 +- pkg/{src => }/contract/config/emitter_type.go | 0 pkg/{src => }/contract/config/example.yaml | 0 .../config/formatter/codeclimate_config.go | 2 +- .../formatter/formatter_config_interface.go | 0 .../config/formatter/formatter_type.go | 0 .../config/formatter/graphviz_config.go | 2 +- .../config/formatter/mermaid_js_config.go | 2 +- pkg/{src => }/contract/config/layer.go | 0 pkg/{src => }/contract/config/ruleset.go | 0 .../dependency/dependency_interface.go | 2 +- .../contract/dependency/post_emit_event.go | 0 .../contract/dependency/post_flatten_event.go | 0 .../contract/dependency/pre_emit_event.go | 0 .../contract/dependency/pre_flatten_event.go | 0 pkg/{src => }/contract/exception_interface.go | 0 .../layer/circular_reference_exception.go | 0 .../contract/layer/collector_interface.go | 2 +- .../invalid_collector_definition_exception.go | 2 +- .../invalid_layer_definition_exception.go | 0 .../contract/layer/layer_provider.go | 2 +- .../output_formatter/output_exception.go | 0 .../output_formatter_input.go | 0 .../output_formatter_interface.go | 2 +- .../output_formatter/output_formatter_type.go | 0 .../output_formatter/output_interface.go | 0 .../output_style_interface.go | 0 pkg/{src => }/contract/result/allowed.go | 2 +- .../contract/result/covered_rule_interface.go | 0 pkg/{src => }/contract/result/error.go | 0 .../result/output_result/output_result.go | 4 +- .../contract/result/rule_interface.go | 2 +- .../contract/result/rule_type_enum.go | 0 .../contract/result/skipped_violation.go | 2 +- pkg/{src => }/contract/result/uncovered.go | 2 +- pkg/{src => }/contract/result/violation.go | 4 +- pkg/{src => }/contract/result/warning.go | 0 .../core/analyser/analyser_exception.go | 8 +-- .../analyser/dependency_layers_analyser.go | 20 +++--- .../unmatched_skipped_violations.go | 6 +- .../process_event/allow_dependency_handler.go | 4 +- .../depends_on_disallowed_layer.go | 6 +- .../depends_on_internal_token.go | 8 +-- .../process_event/depends_on_private_layer.go | 4 +- .../process_event/matching_layers_handler.go | 2 +- .../uncovered_dependent_handler.go | 6 +- .../analyser/layer_dependencies_analyser.go | 10 +-- .../core/analyser/layer_for_token_analyser.go | 10 +-- .../core/analyser/ruleset_usage_analyser.go | 12 ++-- .../core/analyser/token_in_layer_analyser.go | 8 +-- pkg/{src => }/core/analyser/token_type.go | 2 +- .../analyser/unassigned_token_analyser.go | 8 +-- pkg/{src => }/core/ast/ast_exception.go | 2 +- pkg/{src => }/core/ast/ast_loader.go | 8 +-- pkg/{src => }/core/ast/ast_map/ast_inherit.go | 2 +- .../core/ast/ast_map/ast_inherit_type.go | 0 pkg/{src => }/core/ast/ast_map/ast_map.go | 0 .../core/ast/ast_map/class_like_reference.go | 2 +- .../ast_map/class_like_reference_builder.go | 2 +- .../core/ast/ast_map/class_like_token.go | 0 .../core/ast/ast_map/class_like_type.go | 0 .../core/ast/ast_map/dependency_token.go | 2 +- .../core/ast/ast_map/file_reference.go | 2 +- .../ast/ast_map/file_reference_builder.go | 2 +- pkg/{src => }/core/ast/ast_map/file_token.go | 0 .../core/ast/ast_map/function_reference.go | 2 +- .../ast/ast_map/function_reference_builder.go | 0 .../core/ast/ast_map/function_token.go | 0 .../core/ast/ast_map/reference_builder.go | 2 +- .../core/ast/ast_map/super_global_token.go | 0 .../ast/ast_map/tagged_token_reference.go | 0 .../core/ast/ast_map/variable_reference.go | 2 +- pkg/{src => }/core/ast/ast_map_extractor.go | 4 +- .../core/ast/ast_map_extractor_test.go | 10 +-- .../ast_file_reference_cache_interface.go | 2 +- ...file_reference_deferred_cache_interface.go | 0 .../cache/ast_file_reference_file_cache.go | 4 +- .../ast_file_reference_in_memory_cache.go | 2 +- .../parser/cache/cacheable_file_subscriber.go | 2 +- .../AnnotationReferenceExtractor.php | 0 .../extractors/AnonymousClassExtractor.php | 0 .../extractors/ClassConstantExtractor.php | 0 .../extractors/FunctionCallResolver.php | 0 .../extractors/FunctionLikeExtractor.php | 0 .../parser/extractors/KeywordExtractor.php | 0 .../parser/extractors/PropertyExtractor.php | 0 .../ast/parser/extractors/StaticExtractor.php | 0 .../parser/extractors/VariableExtractor.php | 0 .../reference_extractor_interface.go | 4 +- .../file_reference_visitor.go | 6 +- .../file_reference_visitor_test.go | 2 +- .../nikic_php_parser/nikic_php_parser.go | 8 +-- .../nikic_php_parser/nikic_php_parser_test.go | 2 +- .../core/ast/parser/parser_interface.go | 2 +- .../core/ast/parser/type_resolver.go | 0 pkg/{src => }/core/ast/parser/type_scope.go | 0 pkg/{src => }/core/dependency/dependency.go | 2 +- .../core/dependency/dependency_list.go | 2 +- .../dependency_resolver.go | 12 ++-- .../emitter/class_dependency_emitter.go | 6 +- .../class_superglobal_dependency_emitter.go | 6 +- .../emitter/dependency_emitter_interface.go | 4 +- .../dependency/emitter/f_q_d_n_index_node.go | 0 .../emitter/file_dependency_emitter.go | 6 +- .../function_call_dependency_emitter.go | 8 +-- .../emitter/function_dependency_emitter.go | 6 +- ...function_superglobal_dependency_emitter.go | 6 +- .../emitter/uses_dependency_emitter.go | 6 +- .../core/dependency/inherit_dependency.go | 6 +- .../core/dependency/inheritance_flattener.go | 2 +- ...invalid_emitter_configuration_exception.go | 2 +- .../core/dependency/token_resolver.go | 4 +- .../unrecognized_token_exception.go | 2 +- .../input_collector/file_input_collector.go | 4 +- .../input_collector_interface.go | 0 .../core/input_collector/input_exception.go | 0 .../collector/abstract_type_collector.go | 6 +- .../core/layer/collector/bool_collector.go | 6 +- .../core/layer/collector/class_collector.go | 2 +- .../layer/collector/class_like_collector.go | 2 +- .../collector/class_name_regex_collector.go | 6 +- .../core/layer/collector/collectable.go | 2 +- .../layer/collector/collector_provider.go | 4 +- .../layer/collector/collector_resolver.go | 4 +- .../collector/collector_resolver_interface.go | 0 .../layer/collector/composer_collector.go | 4 +- .../layer/collector/directory_collector.go | 4 +- .../collector/directory_collector_test.go | 4 +- .../collector/function_name_collector.go | 6 +- .../core/layer/collector/glob_collector.go | 4 +- .../collector/inheritance_level_collector.go | 8 +-- .../layer/collector/inherits_collector.go | 8 +-- .../layer/collector/interface_collector.go | 2 +- .../core/layer/collector/layer_collector.go | 6 +- .../core/layer/collector/method_collector.go | 8 +-- .../core/layer/collector/regex_collector.go | 2 +- .../layer/collector/superglobal_collector.go | 6 +- .../core/layer/collector/trait_collector.go | 2 +- .../core/layer/collector/uses_collector.go | 8 +-- pkg/{src => }/core/layer/layer_resolver.go | 8 +-- .../layer_resolver_interface.go | 2 +- .../console/application/application.go | 4 +- .../console/application/application_test.go | 0 .../application_version.go | 0 ...get_current_working_directory_exception.go | 0 .../console/command/ChangedFilesCommand.php | 0 .../console/command/ChangedFilesRunner.php | 0 .../command/DebugDependenciesCommand.php | 0 .../command/DebugDependenciesRunner.php | 0 .../console/command/DebugLayerCommand.php | 0 .../console/command/DebugLayerRunner.php | 0 .../console/command/DebugTokenCommand.php | 0 .../console/command/DebugTokenRunner.php | 0 .../command/DebugUnassignedCommand.php | 0 .../console/command/DebugUnassignedRunner.php | 0 .../console/command/DebugUnusedCommand.php | 0 .../console/command/DebugUnusedRunner.php | 0 .../console/command/InitCommand.php | 0 .../console/command/analyse_command.go | 14 ++-- .../console/command/analyse_options.go | 0 .../console/command/analyse_runner.go | 8 +-- .../console/command/command_run_exception.go | 0 pkg/{src => }/supportive/console/env.go | 0 .../console/subscriber/console_subscriber.go | 8 +-- .../console/subscriber/progress_subscriber.go | 4 +- .../supportive/console/symfony/style.go | 2 +- .../console/symfony/symfony_output.go | 2 +- .../dependency_injection/Configuration.php | 0 .../dependency_injection/DeptracExtension.php | 0 .../CacheFileException/CacheFileException.go | 0 .../CacheFileException/CacheFileException.php | 0 .../CannotLoadConfiguration.go | 0 .../CannotLoadConfiguration.php | 0 .../InvalidServiceInLocatorException.go | 2 +- .../InvalidServiceInLocatorException.php | 0 .../ServiceContainerBuilder.go | 8 +-- .../ServiceContainerBuilder.php | 0 .../supportive/dependency_injection/cache.go | 6 +- .../supportive/dependency_injection/cache.php | 0 .../container_builder/container_builder.go | 48 ++++++------- .../event_dispatcher_interface.go | 4 +- .../event_dispatcher_interface.go | 0 .../event_subscriber_default_priority.go | 0 .../event_subscriber_interface.go | 0 .../event_subscriber_interface_map.go | 2 +- .../event_subscriber_interface_map_reg.go | 16 ++--- .../dependency_injection/services.go | 68 +++++++++---------- .../dependency_injection/services.php | 0 pkg/{src => }/supportive/file/dumper.go | 0 .../could_not_read_file_exception.go | 0 .../file_already_exists_exception.go | 0 ...file_cannot_be_parsed_as_yaml_exception.go | 0 .../exception/file_not_exists_exception.go | 0 .../exception/file_not_writable_exception.go | 0 .../file/exception/i_o_exception.go | 0 .../file/exception/invalid_path_exception.go | 0 .../parsed_yaml_is_not_an_array_exception.go | 0 pkg/{src => }/supportive/file/file_reader.go | 2 +- .../supportive/file/yml_file_loader.go | 2 +- .../BaselineOutputFormatter.php | 0 .../CodeclimateOutputFormatter.php | 0 .../ConsoleOutputFormatter.php | 0 .../GraphVizOutputDisplayFormatter.php | 0 .../GraphVizOutputDotFormatter.php | 0 .../GraphVizOutputFormatter.php | 0 .../GraphVizOutputHtmlFormatter.php | 0 .../GraphVizOutputImageFormatter.php | 0 .../output_formatter/JUnitOutputFormatter.php | 0 .../output_formatter/JsonOutputFormatter.php | 0 .../MermaidJSOutputFormatter.php | 0 .../output_formatter/XMLOutputFormatter.php | 0 .../configuration_codeclimate.go | 0 .../configuration/configuration_graph_viz.go | 0 .../configuration/formatter_configuration.go | 2 +- .../output_formatter/formatter_provider.go | 4 +- .../github_actions_output_formatter.go | 8 +-- .../table_output_formatter.go | 8 +-- .../table_output_formatter_test.go | 0 .../supportive/time_stopwatch/period.go | 0 .../time_stopwatch/started_period.go | 0 .../supportive/time_stopwatch/stopwatch.go | 0 .../time_stopwatch/stopwatch_exception.go | 0 .../examples/simple-cleanarch/run_test.go | 2 +- .../examples/simple-invalid-mvc/run_test.go | 2 +- .../examples/simple-mvc/run_test.go | 2 +- 269 files changed, 374 insertions(+), 379 deletions(-) rename pkg/{src => }/contract/analyser/analysis_result/analysis_result.go (96%) rename pkg/{src => }/contract/analyser/event_helper/event_helper.go (85%) rename pkg/{src => }/contract/analyser/post_process_event/post_process_event.go (88%) rename pkg/{src => }/contract/analyser/process_event/process_event.go (80%) rename pkg/{src => }/contract/analyser/violation_creating_interface/violation_creating_interface.go (100%) rename pkg/{src => }/contract/ast/ast_file_analysed_event.go (100%) rename pkg/{src => }/contract/ast/ast_file_syntax_error_event.go (100%) rename pkg/{src => }/contract/ast/could_not_parse_file_exception.go (100%) rename pkg/{src => }/contract/ast/dependency_context.go (100%) rename pkg/{src => }/contract/ast/dependency_type.go (100%) rename pkg/{src => }/contract/ast/file_occurrence.go (100%) rename pkg/{src => }/contract/ast/post_create_ast_map_event.go (100%) rename pkg/{src => }/contract/ast/pre_create_ast_map_event.go (100%) rename pkg/{src => }/contract/ast/tagged_token_reference_interface.go (100%) rename pkg/{src => }/contract/ast/token_interface.go (100%) rename pkg/{src => }/contract/ast/token_reference_interface.go (100%) rename pkg/{src => }/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go (63%) rename pkg/{src => }/contract/config/analyser_config.go (100%) rename pkg/{src => }/contract/config/codeclimate_level_enum.go (100%) rename pkg/{src => }/contract/config/collector/attribute_config.go (86%) rename pkg/{src => }/contract/config/collector/bool_config.go (92%) rename pkg/{src => }/contract/config/collector/class_config.go (85%) rename pkg/{src => }/contract/config/collector/class_like_config.go (86%) rename pkg/{src => }/contract/config/collector/class_name_regex_config.go (87%) rename pkg/{src => }/contract/config/collector/composer_config.go (94%) rename pkg/{src => }/contract/config/collector/directory_config.go (86%) rename pkg/{src => }/contract/config/collector/extends_config.go (85%) rename pkg/{src => }/contract/config/collector/function_name_config.go (86%) rename pkg/{src => }/contract/config/collector/glob_config.go (85%) rename pkg/{src => }/contract/config/collector/implements_config.go (86%) rename pkg/{src => }/contract/config/collector/inherits_config.go (86%) rename pkg/{src => }/contract/config/collector/interface_config.go (86%) rename pkg/{src => }/contract/config/collector/layer_config.go (85%) rename pkg/{src => }/contract/config/collector/method_config.go (85%) rename pkg/{src => }/contract/config/collector/php_interal_config.go (86%) rename pkg/{src => }/contract/config/collector/super_global_config.go (92%) rename pkg/{src => }/contract/config/collector/tag_value_regex_config.go (93%) rename pkg/{src => }/contract/config/collector/trait_config.go (85%) rename pkg/{src => }/contract/config/collector/uses_config.go (85%) rename pkg/{src => }/contract/config/collector_config.go (100%) rename pkg/{src => }/contract/config/collector_type.go (100%) rename pkg/{src => }/contract/config/configurable_collector_config.go (100%) rename pkg/{src => }/contract/config/deptrac_config/deptrac_config.go (97%) rename pkg/{src => }/contract/config/emitter_type.go (100%) rename pkg/{src => }/contract/config/example.yaml (100%) rename pkg/{src => }/contract/config/formatter/codeclimate_config.go (97%) rename pkg/{src => }/contract/config/formatter/formatter_config_interface.go (100%) rename pkg/{src => }/contract/config/formatter/formatter_type.go (100%) rename pkg/{src => }/contract/config/formatter/graphviz_config.go (96%) rename pkg/{src => }/contract/config/formatter/mermaid_js_config.go (95%) rename pkg/{src => }/contract/config/layer.go (100%) rename pkg/{src => }/contract/config/ruleset.go (100%) rename pkg/{src => }/contract/dependency/dependency_interface.go (85%) rename pkg/{src => }/contract/dependency/post_emit_event.go (100%) rename pkg/{src => }/contract/dependency/post_flatten_event.go (100%) rename pkg/{src => }/contract/dependency/pre_emit_event.go (100%) rename pkg/{src => }/contract/dependency/pre_flatten_event.go (100%) rename pkg/{src => }/contract/exception_interface.go (100%) rename pkg/{src => }/contract/layer/circular_reference_exception.go (100%) rename pkg/{src => }/contract/layer/collector_interface.go (83%) rename pkg/{src => }/contract/layer/invalid_collector_definition_exception.go (97%) rename pkg/{src => }/contract/layer/invalid_layer_definition_exception.go (100%) rename pkg/{src => }/contract/layer/layer_provider.go (95%) rename pkg/{src => }/contract/output_formatter/output_exception.go (100%) rename pkg/{src => }/contract/output_formatter/output_formatter_input.go (100%) rename pkg/{src => }/contract/output_formatter/output_formatter_interface.go (85%) rename pkg/{src => }/contract/output_formatter/output_formatter_type.go (100%) rename pkg/{src => }/contract/output_formatter/output_interface.go (100%) rename pkg/{src => }/contract/output_formatter/output_style_interface.go (100%) rename pkg/{src => }/contract/result/allowed.go (92%) rename pkg/{src => }/contract/result/covered_rule_interface.go (100%) rename pkg/{src => }/contract/result/error.go (100%) rename pkg/{src => }/contract/result/output_result/output_result.go (95%) rename pkg/{src => }/contract/result/rule_interface.go (71%) rename pkg/{src => }/contract/result/rule_type_enum.go (100%) rename pkg/{src => }/contract/result/skipped_violation.go (92%) rename pkg/{src => }/contract/result/uncovered.go (88%) rename pkg/{src => }/contract/result/violation.go (89%) rename pkg/{src => }/contract/result/warning.go (100%) rename pkg/{src => }/core/analyser/analyser_exception.go (86%) rename pkg/{src => }/core/analyser/dependency_layers_analyser.go (84%) rename pkg/{src => }/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go (78%) rename pkg/{src => }/core/analyser/event_handler/process_event/allow_dependency_handler.go (80%) rename pkg/{src => }/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go (85%) rename pkg/{src => }/core/analyser/event_handler/process_event/depends_on_internal_token.go (83%) rename pkg/{src => }/core/analyser/event_handler/process_event/depends_on_private_layer.go (86%) rename pkg/{src => }/core/analyser/event_handler/process_event/matching_layers_handler.go (87%) rename pkg/{src => }/core/analyser/event_handler/process_event/uncovered_dependent_handler.go (86%) rename pkg/{src => }/core/analyser/layer_dependencies_analyser.go (90%) rename pkg/{src => }/core/analyser/layer_for_token_analyser.go (89%) rename pkg/{src => }/core/analyser/ruleset_usage_analyser.go (87%) rename pkg/{src => }/core/analyser/token_in_layer_analyser.go (91%) rename pkg/{src => }/core/analyser/token_type.go (92%) rename pkg/{src => }/core/analyser/unassigned_token_analyser.go (91%) rename pkg/{src => }/core/ast/ast_exception.go (87%) rename pkg/{src => }/core/ast/ast_loader.go (81%) rename pkg/{src => }/core/ast/ast_map/ast_inherit.go (96%) rename pkg/{src => }/core/ast/ast_map/ast_inherit_type.go (100%) rename pkg/{src => }/core/ast/ast_map/ast_map.go (100%) rename pkg/{src => }/core/ast/ast_map/class_like_reference.go (96%) rename pkg/{src => }/core/ast/ast_map/class_like_reference_builder.go (98%) rename pkg/{src => }/core/ast/ast_map/class_like_token.go (100%) rename pkg/{src => }/core/ast/ast_map/class_like_type.go (100%) rename pkg/{src => }/core/ast/ast_map/dependency_token.go (83%) rename pkg/{src => }/core/ast/ast_map/file_reference.go (96%) rename pkg/{src => }/core/ast/ast_map/file_reference_builder.go (98%) rename pkg/{src => }/core/ast/ast_map/file_token.go (100%) rename pkg/{src => }/core/ast/ast_map/function_reference.go (95%) rename pkg/{src => }/core/ast/ast_map/function_reference_builder.go (100%) rename pkg/{src => }/core/ast/ast_map/function_token.go (100%) rename pkg/{src => }/core/ast/ast_map/reference_builder.go (99%) rename pkg/{src => }/core/ast/ast_map/super_global_token.go (100%) rename pkg/{src => }/core/ast/ast_map/tagged_token_reference.go (100%) rename pkg/{src => }/core/ast/ast_map/variable_reference.go (87%) rename pkg/{src => }/core/ast/ast_map_extractor.go (86%) rename pkg/{src => }/core/ast/ast_map_extractor_test.go (72%) rename pkg/{src => }/core/ast/parser/cache/ast_file_reference_cache_interface.go (75%) rename pkg/{src => }/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go (100%) rename pkg/{src => }/core/ast/parser/cache/ast_file_reference_file_cache.go (96%) rename pkg/{src => }/core/ast/parser/cache/ast_file_reference_in_memory_cache.go (92%) rename pkg/{src => }/core/ast/parser/cache/cacheable_file_subscriber.go (92%) rename pkg/{src => }/core/ast/parser/extractors/AnnotationReferenceExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/AnonymousClassExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/ClassConstantExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/FunctionCallResolver.php (100%) rename pkg/{src => }/core/ast/parser/extractors/FunctionLikeExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/KeywordExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/PropertyExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/StaticExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/VariableExtractor.php (100%) rename pkg/{src => }/core/ast/parser/extractors/reference_extractor_interface.go (63%) rename pkg/{src => }/core/ast/parser/nikic_php_parser/file_reference_visitor.go (96%) rename pkg/{src => }/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go (88%) rename pkg/{src => }/core/ast/parser/nikic_php_parser/nikic_php_parser.go (91%) rename pkg/{src => }/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go (79%) rename pkg/{src => }/core/ast/parser/parser_interface.go (67%) rename pkg/{src => }/core/ast/parser/type_resolver.go (100%) rename pkg/{src => }/core/ast/parser/type_scope.go (100%) rename pkg/{src => }/core/dependency/dependency.go (93%) rename pkg/{src => }/core/dependency/dependency_list.go (95%) rename pkg/{src => }/core/dependency/dependency_resolver/dependency_resolver.go (83%) rename pkg/{src => }/core/dependency/emitter/class_dependency_emitter.go (86%) rename pkg/{src => }/core/dependency/emitter/class_superglobal_dependency_emitter.go (82%) rename pkg/{src => }/core/dependency/emitter/dependency_emitter_interface.go (60%) rename pkg/{src => }/core/dependency/emitter/f_q_d_n_index_node.go (100%) rename pkg/{src => }/core/dependency/emitter/file_dependency_emitter.go (83%) rename pkg/{src => }/core/dependency/emitter/function_call_dependency_emitter.go (89%) rename pkg/{src => }/core/dependency/emitter/function_dependency_emitter.go (85%) rename pkg/{src => }/core/dependency/emitter/function_superglobal_dependency_emitter.go (84%) rename pkg/{src => }/core/dependency/emitter/uses_dependency_emitter.go (91%) rename pkg/{src => }/core/dependency/inherit_dependency.go (89%) rename pkg/{src => }/core/dependency/inheritance_flattener.go (91%) rename pkg/{src => }/core/dependency/invalid_emitter_configuration_exception.go (94%) rename pkg/{src => }/core/dependency/token_resolver.go (83%) rename pkg/{src => }/core/dependency/unrecognized_token_exception.go (90%) rename pkg/{src => }/core/input_collector/file_input_collector.go (93%) rename pkg/{src => }/core/input_collector/input_collector_interface.go (100%) rename pkg/{src => }/core/input_collector/input_exception.go (100%) rename pkg/{src => }/core/layer/collector/abstract_type_collector.go (88%) rename pkg/{src => }/core/layer/collector/bool_collector.go (91%) rename pkg/{src => }/core/layer/collector/class_collector.go (83%) rename pkg/{src => }/core/layer/collector/class_like_collector.go (84%) rename pkg/{src => }/core/layer/collector/class_name_regex_collector.go (86%) rename pkg/{src => }/core/layer/collector/collectable.go (84%) rename pkg/{src => }/core/layer/collector/collector_provider.go (86%) rename pkg/{src => }/core/layer/collector/collector_resolver.go (87%) rename pkg/{src => }/core/layer/collector/collector_resolver_interface.go (100%) rename pkg/{src => }/core/layer/collector/composer_collector.go (95%) rename pkg/{src => }/core/layer/collector/directory_collector.go (91%) rename pkg/{src => }/core/layer/collector/directory_collector_test.go (74%) rename pkg/{src => }/core/layer/collector/function_name_collector.go (85%) rename pkg/{src => }/core/layer/collector/glob_collector.go (92%) rename pkg/{src => }/core/layer/collector/inheritance_level_collector.go (83%) rename pkg/{src => }/core/layer/collector/inherits_collector.go (85%) rename pkg/{src => }/core/layer/collector/interface_collector.go (84%) rename pkg/{src => }/core/layer/collector/layer_collector.go (90%) rename pkg/{src => }/core/layer/collector/method_collector.go (85%) rename pkg/{src => }/core/layer/collector/regex_collector.go (91%) rename pkg/{src => }/core/layer/collector/superglobal_collector.go (85%) rename pkg/{src => }/core/layer/collector/trait_collector.go (83%) rename pkg/{src => }/core/layer/collector/uses_collector.go (85%) rename pkg/{src => }/core/layer/layer_resolver.go (94%) rename pkg/{src => }/core/layer/layer_resolver_interface/layer_resolver_interface.go (88%) rename pkg/{src => }/supportive/console/application/application.go (95%) rename pkg/{src => }/supportive/console/application/application_test.go (100%) rename pkg/{src => }/supportive/console/application/application_version/application_version.go (100%) rename pkg/{src => }/supportive/console/cannot_get_current_working_directory_exception.go (100%) rename pkg/{src => }/supportive/console/command/ChangedFilesCommand.php (100%) rename pkg/{src => }/supportive/console/command/ChangedFilesRunner.php (100%) rename pkg/{src => }/supportive/console/command/DebugDependenciesCommand.php (100%) rename pkg/{src => }/supportive/console/command/DebugDependenciesRunner.php (100%) rename pkg/{src => }/supportive/console/command/DebugLayerCommand.php (100%) rename pkg/{src => }/supportive/console/command/DebugLayerRunner.php (100%) rename pkg/{src => }/supportive/console/command/DebugTokenCommand.php (100%) rename pkg/{src => }/supportive/console/command/DebugTokenRunner.php (100%) rename pkg/{src => }/supportive/console/command/DebugUnassignedCommand.php (100%) rename pkg/{src => }/supportive/console/command/DebugUnassignedRunner.php (100%) rename pkg/{src => }/supportive/console/command/DebugUnusedCommand.php (100%) rename pkg/{src => }/supportive/console/command/DebugUnusedRunner.php (100%) rename pkg/{src => }/supportive/console/command/InitCommand.php (100%) rename pkg/{src => }/supportive/console/command/analyse_command.go (83%) rename pkg/{src => }/supportive/console/command/analyse_options.go (100%) rename pkg/{src => }/supportive/console/command/analyse_runner.go (93%) rename pkg/{src => }/supportive/console/command/command_run_exception.go (100%) rename pkg/{src => }/supportive/console/env.go (100%) rename pkg/{src => }/supportive/console/subscriber/console_subscriber.go (92%) rename pkg/{src => }/supportive/console/subscriber/progress_subscriber.go (86%) rename pkg/{src => }/supportive/console/symfony/style.go (98%) rename pkg/{src => }/supportive/console/symfony/symfony_output.go (91%) rename pkg/{src => }/supportive/dependency_injection/Configuration.php (100%) rename pkg/{src => }/supportive/dependency_injection/DeptracExtension.php (100%) rename pkg/{src => }/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go (100%) rename pkg/{src => }/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php (100%) rename pkg/{src => }/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go (100%) rename pkg/{src => }/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php (100%) rename pkg/{src => }/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go (92%) rename pkg/{src => }/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php (100%) rename pkg/{src => }/supportive/dependency_injection/ServiceContainerBuilder.go (90%) rename pkg/{src => }/supportive/dependency_injection/ServiceContainerBuilder.php (100%) rename pkg/{src => }/supportive/dependency_injection/cache.go (66%) rename pkg/{src => }/supportive/dependency_injection/cache.php (100%) rename pkg/{src => }/supportive/dependency_injection/container_builder/container_builder.go (68%) rename pkg/{src => }/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go (84%) rename pkg/{src => }/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go (100%) rename pkg/{src => }/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go (100%) rename pkg/{src => }/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go (100%) rename pkg/{src => }/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go (68%) rename pkg/{src => }/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go (80%) rename pkg/{src => }/supportive/dependency_injection/services.go (83%) rename pkg/{src => }/supportive/dependency_injection/services.php (100%) rename pkg/{src => }/supportive/file/dumper.go (100%) rename pkg/{src => }/supportive/file/exception/could_not_read_file_exception.go (100%) rename pkg/{src => }/supportive/file/exception/file_already_exists_exception.go (100%) rename pkg/{src => }/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go (100%) rename pkg/{src => }/supportive/file/exception/file_not_exists_exception.go (100%) rename pkg/{src => }/supportive/file/exception/file_not_writable_exception.go (100%) rename pkg/{src => }/supportive/file/exception/i_o_exception.go (100%) rename pkg/{src => }/supportive/file/exception/invalid_path_exception.go (100%) rename pkg/{src => }/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go (100%) rename pkg/{src => }/supportive/file/file_reader.go (79%) rename pkg/{src => }/supportive/file/yml_file_loader.go (93%) rename pkg/{src => }/supportive/output_formatter/BaselineOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/CodeclimateOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/ConsoleOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/GraphVizOutputDisplayFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/GraphVizOutputDotFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/GraphVizOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/GraphVizOutputHtmlFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/GraphVizOutputImageFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/JUnitOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/JsonOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/MermaidJSOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/XMLOutputFormatter.php (100%) rename pkg/{src => }/supportive/output_formatter/configuration/configuration_codeclimate.go (100%) rename pkg/{src => }/supportive/output_formatter/configuration/configuration_graph_viz.go (100%) rename pkg/{src => }/supportive/output_formatter/configuration/formatter_configuration.go (87%) rename pkg/{src => }/supportive/output_formatter/formatter_provider.go (85%) rename pkg/{src => }/supportive/output_formatter/github_actions_output_formatter.go (93%) rename pkg/{src => }/supportive/output_formatter/table_output_formatter.go (96%) rename pkg/{src => }/supportive/output_formatter/table_output_formatter_test.go (100%) rename pkg/{src => }/supportive/time_stopwatch/period.go (100%) rename pkg/{src => }/supportive/time_stopwatch/started_period.go (100%) rename pkg/{src => }/supportive/time_stopwatch/stopwatch.go (100%) rename pkg/{src => }/supportive/time_stopwatch/stopwatch_exception.go (100%) diff --git a/deptrac.yaml b/deptrac.yaml index e671832..70da739 100644 --- a/deptrac.yaml +++ b/deptrac.yaml @@ -5,7 +5,7 @@ services: deptrac: paths: - - ./pkg/src + - ./pkg analyser: internal_tag: "@internal" @@ -42,11 +42,11 @@ deptrac: - name: Analyser collectors: - type: directory - value: pkg/src/core/analyser/.* + value: pkg/core/analyser/.* - name: Ast collectors: - type: directory - value: pkg/src/core/ast/.* + value: pkg/core/ast/.* - type: composer private: true composerPath: composer.json @@ -58,31 +58,31 @@ deptrac: - name: Console collectors: - type: directory - value: pkg/src/supportive/console/.* + value: pkg/supportive/console/.* - name: Dependency collectors: - type: directory - value: pkg/src/core/dependency/.* + value: pkg/core/dependency/.* - name: DependencyInjection collectors: - type: directory - value: pkg/src/supportive/dependency_injection/.* + value: pkg/supportive/dependency_injection/.* - name: Contract collectors: - type: directory - value: pkg/src/contract/.* + value: pkg/contract/.* - name: InputCollector collectors: - type: directory - value: pkg/src/core/input_collector/.* + value: pkg/core/input_collector/.* - name: Layer collectors: - type: directory - value: pkg/src/core/layer/.* + value: pkg/core/layer/.* - name: OutputFormatter collectors: - type: directory - value: pkg/src/supportive/output_formatter/.* + value: pkg/supportive/output_formatter/.* - type: composer private: true composerPath: composer.json @@ -92,20 +92,20 @@ deptrac: - name: File collectors: - type: directory - value: pkg/src/supportive/file/.* + value: pkg/supportive/file/.* - name: Time collectors: - type: directory - value: pkg/src/supportive/time/.* + value: pkg/supportive/time/.* - name: Supportive collectors: - type: bool must_not: - type: directory - value: pkg/src/supportive/.*/.* + value: pkg/supportive/.*/.* must: - type: directory - value: pkg/src/supportive/.* + value: pkg/supportive/.* - name: Symfony collectors: - type: composer diff --git a/pkg/config/analyse_options_hook.go b/pkg/config/analyse_options_hook.go index aeb5bd0..71e3866 100644 --- a/pkg/config/analyse_options_hook.go +++ b/pkg/config/analyse_options_hook.go @@ -2,7 +2,7 @@ package config import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" ) type analyseOptionsHook struct{} diff --git a/pkg/src/contract/analyser/analysis_result/analysis_result.go b/pkg/contract/analyser/analysis_result/analysis_result.go similarity index 96% rename from pkg/src/contract/analyser/analysis_result/analysis_result.go rename to pkg/contract/analyser/analysis_result/analysis_result.go index e4b32d4..bed43da 100644 --- a/pkg/src/contract/analyser/analysis_result/analysis_result.go +++ b/pkg/contract/analyser/analysis_result/analysis_result.go @@ -1,7 +1,7 @@ package analysis_result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/contract/analyser/event_helper/event_helper.go b/pkg/contract/analyser/event_helper/event_helper.go similarity index 85% rename from pkg/src/contract/analyser/event_helper/event_helper.go rename to pkg/contract/analyser/event_helper/event_helper.go index e42eb3e..f9ca22f 100644 --- a/pkg/src/contract/analyser/event_helper/event_helper.go +++ b/pkg/contract/analyser/event_helper/event_helper.go @@ -1,11 +1,11 @@ package event_helper import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/contract/analyser/post_process_event/post_process_event.go b/pkg/contract/analyser/post_process_event/post_process_event.go similarity index 88% rename from pkg/src/contract/analyser/post_process_event/post_process_event.go rename to pkg/contract/analyser/post_process_event/post_process_event.go index fad28f5..e15999e 100644 --- a/pkg/src/contract/analyser/post_process_event/post_process_event.go +++ b/pkg/contract/analyser/post_process_event/post_process_event.go @@ -1,6 +1,6 @@ package post_process_event -import "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" +import "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" // PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result of the analysis after it has completed and before it is returned for output processing. type PostProcessEvent struct { diff --git a/pkg/src/contract/analyser/process_event/process_event.go b/pkg/contract/analyser/process_event/process_event.go similarity index 80% rename from pkg/src/contract/analyser/process_event/process_event.go rename to pkg/contract/analyser/process_event/process_event.go index 55a0749..2a2cb94 100644 --- a/pkg/src/contract/analyser/process_event/process_event.go +++ b/pkg/contract/analyser/process_event/process_event.go @@ -1,10 +1,9 @@ package process_event import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // ProcessEvent - Event that is triggered on every found dependency. Used to apply rules on the found dependencies. @@ -25,10 +24,6 @@ func NewProcessEvent( dependentLayers map[string]bool, result *analysis_result.AnalysisResult, ) *ProcessEvent { - if dependerLayer == "File" && dependentLayers["Ast"] { - fmt.Println() - } - return &ProcessEvent{ Dependency: dependency, DependerReference: dependerReference, diff --git a/pkg/src/contract/analyser/violation_creating_interface/violation_creating_interface.go b/pkg/contract/analyser/violation_creating_interface/violation_creating_interface.go similarity index 100% rename from pkg/src/contract/analyser/violation_creating_interface/violation_creating_interface.go rename to pkg/contract/analyser/violation_creating_interface/violation_creating_interface.go diff --git a/pkg/src/contract/ast/ast_file_analysed_event.go b/pkg/contract/ast/ast_file_analysed_event.go similarity index 100% rename from pkg/src/contract/ast/ast_file_analysed_event.go rename to pkg/contract/ast/ast_file_analysed_event.go diff --git a/pkg/src/contract/ast/ast_file_syntax_error_event.go b/pkg/contract/ast/ast_file_syntax_error_event.go similarity index 100% rename from pkg/src/contract/ast/ast_file_syntax_error_event.go rename to pkg/contract/ast/ast_file_syntax_error_event.go diff --git a/pkg/src/contract/ast/could_not_parse_file_exception.go b/pkg/contract/ast/could_not_parse_file_exception.go similarity index 100% rename from pkg/src/contract/ast/could_not_parse_file_exception.go rename to pkg/contract/ast/could_not_parse_file_exception.go diff --git a/pkg/src/contract/ast/dependency_context.go b/pkg/contract/ast/dependency_context.go similarity index 100% rename from pkg/src/contract/ast/dependency_context.go rename to pkg/contract/ast/dependency_context.go diff --git a/pkg/src/contract/ast/dependency_type.go b/pkg/contract/ast/dependency_type.go similarity index 100% rename from pkg/src/contract/ast/dependency_type.go rename to pkg/contract/ast/dependency_type.go diff --git a/pkg/src/contract/ast/file_occurrence.go b/pkg/contract/ast/file_occurrence.go similarity index 100% rename from pkg/src/contract/ast/file_occurrence.go rename to pkg/contract/ast/file_occurrence.go diff --git a/pkg/src/contract/ast/post_create_ast_map_event.go b/pkg/contract/ast/post_create_ast_map_event.go similarity index 100% rename from pkg/src/contract/ast/post_create_ast_map_event.go rename to pkg/contract/ast/post_create_ast_map_event.go diff --git a/pkg/src/contract/ast/pre_create_ast_map_event.go b/pkg/contract/ast/pre_create_ast_map_event.go similarity index 100% rename from pkg/src/contract/ast/pre_create_ast_map_event.go rename to pkg/contract/ast/pre_create_ast_map_event.go diff --git a/pkg/src/contract/ast/tagged_token_reference_interface.go b/pkg/contract/ast/tagged_token_reference_interface.go similarity index 100% rename from pkg/src/contract/ast/tagged_token_reference_interface.go rename to pkg/contract/ast/tagged_token_reference_interface.go diff --git a/pkg/src/contract/ast/token_interface.go b/pkg/contract/ast/token_interface.go similarity index 100% rename from pkg/src/contract/ast/token_interface.go rename to pkg/contract/ast/token_interface.go diff --git a/pkg/src/contract/ast/token_reference_interface.go b/pkg/contract/ast/token_reference_interface.go similarity index 100% rename from pkg/src/contract/ast/token_reference_interface.go rename to pkg/contract/ast/token_reference_interface.go diff --git a/pkg/src/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go b/pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go similarity index 63% rename from pkg/src/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go rename to pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go index 5535536..ebf1e82 100644 --- a/pkg/src/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go +++ b/pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go @@ -1,8 +1,8 @@ package token_reference_with_dependencies_interface import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type TokenReferenceWithDependenciesInterface interface { diff --git a/pkg/src/contract/config/analyser_config.go b/pkg/contract/config/analyser_config.go similarity index 100% rename from pkg/src/contract/config/analyser_config.go rename to pkg/contract/config/analyser_config.go diff --git a/pkg/src/contract/config/codeclimate_level_enum.go b/pkg/contract/config/codeclimate_level_enum.go similarity index 100% rename from pkg/src/contract/config/codeclimate_level_enum.go rename to pkg/contract/config/codeclimate_level_enum.go diff --git a/pkg/src/contract/config/collector/attribute_config.go b/pkg/contract/config/collector/attribute_config.go similarity index 86% rename from pkg/src/contract/config/collector/attribute_config.go rename to pkg/contract/config/collector/attribute_config.go index 32079e4..0d6854c 100644 --- a/pkg/src/contract/config/collector/attribute_config.go +++ b/pkg/contract/config/collector/attribute_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type AttributeConfig struct { diff --git a/pkg/src/contract/config/collector/bool_config.go b/pkg/contract/config/collector/bool_config.go similarity index 92% rename from pkg/src/contract/config/collector/bool_config.go rename to pkg/contract/config/collector/bool_config.go index 0d7c965..6f70b3a 100644 --- a/pkg/src/contract/config/collector/bool_config.go +++ b/pkg/contract/config/collector/bool_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type BoolConfig struct { diff --git a/pkg/src/contract/config/collector/class_config.go b/pkg/contract/config/collector/class_config.go similarity index 85% rename from pkg/src/contract/config/collector/class_config.go rename to pkg/contract/config/collector/class_config.go index e593f0a..a638533 100644 --- a/pkg/src/contract/config/collector/class_config.go +++ b/pkg/contract/config/collector/class_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ClassConfig struct { diff --git a/pkg/src/contract/config/collector/class_like_config.go b/pkg/contract/config/collector/class_like_config.go similarity index 86% rename from pkg/src/contract/config/collector/class_like_config.go rename to pkg/contract/config/collector/class_like_config.go index bd7fa27..e924c84 100644 --- a/pkg/src/contract/config/collector/class_like_config.go +++ b/pkg/contract/config/collector/class_like_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ClassLikeConfig struct { diff --git a/pkg/src/contract/config/collector/class_name_regex_config.go b/pkg/contract/config/collector/class_name_regex_config.go similarity index 87% rename from pkg/src/contract/config/collector/class_name_regex_config.go rename to pkg/contract/config/collector/class_name_regex_config.go index 5393676..abcbedf 100644 --- a/pkg/src/contract/config/collector/class_name_regex_config.go +++ b/pkg/contract/config/collector/class_name_regex_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ClassNameRegexConfig struct { diff --git a/pkg/src/contract/config/collector/composer_config.go b/pkg/contract/config/collector/composer_config.go similarity index 94% rename from pkg/src/contract/config/collector/composer_config.go rename to pkg/contract/config/collector/composer_config.go index 77a1387..388e75e 100644 --- a/pkg/src/contract/config/collector/composer_config.go +++ b/pkg/contract/config/collector/composer_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ComposerConfig struct { diff --git a/pkg/src/contract/config/collector/directory_config.go b/pkg/contract/config/collector/directory_config.go similarity index 86% rename from pkg/src/contract/config/collector/directory_config.go rename to pkg/contract/config/collector/directory_config.go index b283626..e8a1a5f 100644 --- a/pkg/src/contract/config/collector/directory_config.go +++ b/pkg/contract/config/collector/directory_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type DirectoryConfig struct { diff --git a/pkg/src/contract/config/collector/extends_config.go b/pkg/contract/config/collector/extends_config.go similarity index 85% rename from pkg/src/contract/config/collector/extends_config.go rename to pkg/contract/config/collector/extends_config.go index ce1e1a8..9ec0863 100644 --- a/pkg/src/contract/config/collector/extends_config.go +++ b/pkg/contract/config/collector/extends_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ExtendsConfig struct { diff --git a/pkg/src/contract/config/collector/function_name_config.go b/pkg/contract/config/collector/function_name_config.go similarity index 86% rename from pkg/src/contract/config/collector/function_name_config.go rename to pkg/contract/config/collector/function_name_config.go index fe45dc9..22957ec 100644 --- a/pkg/src/contract/config/collector/function_name_config.go +++ b/pkg/contract/config/collector/function_name_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type FunctionNameConfig struct { diff --git a/pkg/src/contract/config/collector/glob_config.go b/pkg/contract/config/collector/glob_config.go similarity index 85% rename from pkg/src/contract/config/collector/glob_config.go rename to pkg/contract/config/collector/glob_config.go index 2d17904..ff6a853 100644 --- a/pkg/src/contract/config/collector/glob_config.go +++ b/pkg/contract/config/collector/glob_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type GlobConfig struct { diff --git a/pkg/src/contract/config/collector/implements_config.go b/pkg/contract/config/collector/implements_config.go similarity index 86% rename from pkg/src/contract/config/collector/implements_config.go rename to pkg/contract/config/collector/implements_config.go index 5b287a2..1f9b1ab 100644 --- a/pkg/src/contract/config/collector/implements_config.go +++ b/pkg/contract/config/collector/implements_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type ImplementsConfig struct { diff --git a/pkg/src/contract/config/collector/inherits_config.go b/pkg/contract/config/collector/inherits_config.go similarity index 86% rename from pkg/src/contract/config/collector/inherits_config.go rename to pkg/contract/config/collector/inherits_config.go index e1635c2..387715a 100644 --- a/pkg/src/contract/config/collector/inherits_config.go +++ b/pkg/contract/config/collector/inherits_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type InheritsConfig struct { diff --git a/pkg/src/contract/config/collector/interface_config.go b/pkg/contract/config/collector/interface_config.go similarity index 86% rename from pkg/src/contract/config/collector/interface_config.go rename to pkg/contract/config/collector/interface_config.go index 303a0cf..2560d8d 100644 --- a/pkg/src/contract/config/collector/interface_config.go +++ b/pkg/contract/config/collector/interface_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type InterfaceConfig struct { diff --git a/pkg/src/contract/config/collector/layer_config.go b/pkg/contract/config/collector/layer_config.go similarity index 85% rename from pkg/src/contract/config/collector/layer_config.go rename to pkg/contract/config/collector/layer_config.go index 96b8c4d..d44b448 100644 --- a/pkg/src/contract/config/collector/layer_config.go +++ b/pkg/contract/config/collector/layer_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type LayerConfig struct { diff --git a/pkg/src/contract/config/collector/method_config.go b/pkg/contract/config/collector/method_config.go similarity index 85% rename from pkg/src/contract/config/collector/method_config.go rename to pkg/contract/config/collector/method_config.go index b88a3ac..071e236 100644 --- a/pkg/src/contract/config/collector/method_config.go +++ b/pkg/contract/config/collector/method_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type MethodConfig struct { diff --git a/pkg/src/contract/config/collector/php_interal_config.go b/pkg/contract/config/collector/php_interal_config.go similarity index 86% rename from pkg/src/contract/config/collector/php_interal_config.go rename to pkg/contract/config/collector/php_interal_config.go index 428f7de..43ffca4 100644 --- a/pkg/src/contract/config/collector/php_interal_config.go +++ b/pkg/contract/config/collector/php_interal_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type PhpInteralConfig struct { diff --git a/pkg/src/contract/config/collector/super_global_config.go b/pkg/contract/config/collector/super_global_config.go similarity index 92% rename from pkg/src/contract/config/collector/super_global_config.go rename to pkg/contract/config/collector/super_global_config.go index c63ac53..544cc8c 100644 --- a/pkg/src/contract/config/collector/super_global_config.go +++ b/pkg/contract/config/collector/super_global_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type SuperGlobalConfig struct { diff --git a/pkg/src/contract/config/collector/tag_value_regex_config.go b/pkg/contract/config/collector/tag_value_regex_config.go similarity index 93% rename from pkg/src/contract/config/collector/tag_value_regex_config.go rename to pkg/contract/config/collector/tag_value_regex_config.go index cc76130..17fa33f 100644 --- a/pkg/src/contract/config/collector/tag_value_regex_config.go +++ b/pkg/contract/config/collector/tag_value_regex_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type TagValueRegexConfig struct { diff --git a/pkg/src/contract/config/collector/trait_config.go b/pkg/contract/config/collector/trait_config.go similarity index 85% rename from pkg/src/contract/config/collector/trait_config.go rename to pkg/contract/config/collector/trait_config.go index 5485158..9f54ca0 100644 --- a/pkg/src/contract/config/collector/trait_config.go +++ b/pkg/contract/config/collector/trait_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type TraitConfig struct { diff --git a/pkg/src/contract/config/collector/uses_config.go b/pkg/contract/config/collector/uses_config.go similarity index 85% rename from pkg/src/contract/config/collector/uses_config.go rename to pkg/contract/config/collector/uses_config.go index 16e7cad..1816c83 100644 --- a/pkg/src/contract/config/collector/uses_config.go +++ b/pkg/contract/config/collector/uses_config.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type UsesConfig struct { diff --git a/pkg/src/contract/config/collector_config.go b/pkg/contract/config/collector_config.go similarity index 100% rename from pkg/src/contract/config/collector_config.go rename to pkg/contract/config/collector_config.go diff --git a/pkg/src/contract/config/collector_type.go b/pkg/contract/config/collector_type.go similarity index 100% rename from pkg/src/contract/config/collector_type.go rename to pkg/contract/config/collector_type.go diff --git a/pkg/src/contract/config/configurable_collector_config.go b/pkg/contract/config/configurable_collector_config.go similarity index 100% rename from pkg/src/contract/config/configurable_collector_config.go rename to pkg/contract/config/configurable_collector_config.go diff --git a/pkg/src/contract/config/deptrac_config/deptrac_config.go b/pkg/contract/config/deptrac_config/deptrac_config.go similarity index 97% rename from pkg/src/contract/config/deptrac_config/deptrac_config.go rename to pkg/contract/config/deptrac_config/deptrac_config.go index 714c902..87794c5 100644 --- a/pkg/src/contract/config/deptrac_config/deptrac_config.go +++ b/pkg/contract/config/deptrac_config/deptrac_config.go @@ -2,9 +2,9 @@ package deptrac_config import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/formatter" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" + Layer2 "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/contract/config/emitter_type.go b/pkg/contract/config/emitter_type.go similarity index 100% rename from pkg/src/contract/config/emitter_type.go rename to pkg/contract/config/emitter_type.go diff --git a/pkg/src/contract/config/example.yaml b/pkg/contract/config/example.yaml similarity index 100% rename from pkg/src/contract/config/example.yaml rename to pkg/contract/config/example.yaml diff --git a/pkg/src/contract/config/formatter/codeclimate_config.go b/pkg/contract/config/formatter/codeclimate_config.go similarity index 97% rename from pkg/src/contract/config/formatter/codeclimate_config.go rename to pkg/contract/config/formatter/codeclimate_config.go index fe07c69..d61ca16 100644 --- a/pkg/src/contract/config/formatter/codeclimate_config.go +++ b/pkg/contract/config/formatter/codeclimate_config.go @@ -1,7 +1,7 @@ package formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type CodeclimateConfig struct { diff --git a/pkg/src/contract/config/formatter/formatter_config_interface.go b/pkg/contract/config/formatter/formatter_config_interface.go similarity index 100% rename from pkg/src/contract/config/formatter/formatter_config_interface.go rename to pkg/contract/config/formatter/formatter_config_interface.go diff --git a/pkg/src/contract/config/formatter/formatter_type.go b/pkg/contract/config/formatter/formatter_type.go similarity index 100% rename from pkg/src/contract/config/formatter/formatter_type.go rename to pkg/contract/config/formatter/formatter_type.go diff --git a/pkg/src/contract/config/formatter/graphviz_config.go b/pkg/contract/config/formatter/graphviz_config.go similarity index 96% rename from pkg/src/contract/config/formatter/graphviz_config.go rename to pkg/contract/config/formatter/graphviz_config.go index ad443a0..85434dd 100644 --- a/pkg/src/contract/config/formatter/graphviz_config.go +++ b/pkg/contract/config/formatter/graphviz_config.go @@ -1,7 +1,7 @@ package formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type GraphvizConfig struct { diff --git a/pkg/src/contract/config/formatter/mermaid_js_config.go b/pkg/contract/config/formatter/mermaid_js_config.go similarity index 95% rename from pkg/src/contract/config/formatter/mermaid_js_config.go rename to pkg/contract/config/formatter/mermaid_js_config.go index 0277b2d..1180dea 100644 --- a/pkg/src/contract/config/formatter/mermaid_js_config.go +++ b/pkg/contract/config/formatter/mermaid_js_config.go @@ -1,7 +1,7 @@ package formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type MermaidJsConfig struct { diff --git a/pkg/src/contract/config/layer.go b/pkg/contract/config/layer.go similarity index 100% rename from pkg/src/contract/config/layer.go rename to pkg/contract/config/layer.go diff --git a/pkg/src/contract/config/ruleset.go b/pkg/contract/config/ruleset.go similarity index 100% rename from pkg/src/contract/config/ruleset.go rename to pkg/contract/config/ruleset.go diff --git a/pkg/src/contract/dependency/dependency_interface.go b/pkg/contract/dependency/dependency_interface.go similarity index 85% rename from pkg/src/contract/dependency/dependency_interface.go rename to pkg/contract/dependency/dependency_interface.go index 128ff1d..77ea907 100644 --- a/pkg/src/contract/dependency/dependency_interface.go +++ b/pkg/contract/dependency/dependency_interface.go @@ -1,7 +1,7 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) // DependencyInterface - Represents a dependency between 2 tokens (depender and dependent). diff --git a/pkg/src/contract/dependency/post_emit_event.go b/pkg/contract/dependency/post_emit_event.go similarity index 100% rename from pkg/src/contract/dependency/post_emit_event.go rename to pkg/contract/dependency/post_emit_event.go diff --git a/pkg/src/contract/dependency/post_flatten_event.go b/pkg/contract/dependency/post_flatten_event.go similarity index 100% rename from pkg/src/contract/dependency/post_flatten_event.go rename to pkg/contract/dependency/post_flatten_event.go diff --git a/pkg/src/contract/dependency/pre_emit_event.go b/pkg/contract/dependency/pre_emit_event.go similarity index 100% rename from pkg/src/contract/dependency/pre_emit_event.go rename to pkg/contract/dependency/pre_emit_event.go diff --git a/pkg/src/contract/dependency/pre_flatten_event.go b/pkg/contract/dependency/pre_flatten_event.go similarity index 100% rename from pkg/src/contract/dependency/pre_flatten_event.go rename to pkg/contract/dependency/pre_flatten_event.go diff --git a/pkg/src/contract/exception_interface.go b/pkg/contract/exception_interface.go similarity index 100% rename from pkg/src/contract/exception_interface.go rename to pkg/contract/exception_interface.go diff --git a/pkg/src/contract/layer/circular_reference_exception.go b/pkg/contract/layer/circular_reference_exception.go similarity index 100% rename from pkg/src/contract/layer/circular_reference_exception.go rename to pkg/contract/layer/circular_reference_exception.go diff --git a/pkg/src/contract/layer/collector_interface.go b/pkg/contract/layer/collector_interface.go similarity index 83% rename from pkg/src/contract/layer/collector_interface.go rename to pkg/contract/layer/collector_interface.go index 4e82c1e..1ac8739 100644 --- a/pkg/src/contract/layer/collector_interface.go +++ b/pkg/contract/layer/collector_interface.go @@ -1,7 +1,7 @@ package layer import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) // CollectorInterface - A collector is responsible to tell whether an AST node (e.g. a specific class) is part of a layer. diff --git a/pkg/src/contract/layer/invalid_collector_definition_exception.go b/pkg/contract/layer/invalid_collector_definition_exception.go similarity index 97% rename from pkg/src/contract/layer/invalid_collector_definition_exception.go rename to pkg/contract/layer/invalid_collector_definition_exception.go index 6fabc23..988e4b6 100644 --- a/pkg/src/contract/layer/invalid_collector_definition_exception.go +++ b/pkg/contract/layer/invalid_collector_definition_exception.go @@ -2,7 +2,7 @@ package layer import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" "reflect" "strings" ) diff --git a/pkg/src/contract/layer/invalid_layer_definition_exception.go b/pkg/contract/layer/invalid_layer_definition_exception.go similarity index 100% rename from pkg/src/contract/layer/invalid_layer_definition_exception.go rename to pkg/contract/layer/invalid_layer_definition_exception.go diff --git a/pkg/src/contract/layer/layer_provider.go b/pkg/contract/layer/layer_provider.go similarity index 95% rename from pkg/src/contract/layer/layer_provider.go rename to pkg/contract/layer/layer_provider.go index c847a08..c651421 100644 --- a/pkg/src/contract/layer/layer_provider.go +++ b/pkg/contract/layer/layer_provider.go @@ -1,7 +1,7 @@ package layer import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" "github.com/KoNekoD/go-deptrac/pkg/util" "strings" ) diff --git a/pkg/src/contract/output_formatter/output_exception.go b/pkg/contract/output_formatter/output_exception.go similarity index 100% rename from pkg/src/contract/output_formatter/output_exception.go rename to pkg/contract/output_formatter/output_exception.go diff --git a/pkg/src/contract/output_formatter/output_formatter_input.go b/pkg/contract/output_formatter/output_formatter_input.go similarity index 100% rename from pkg/src/contract/output_formatter/output_formatter_input.go rename to pkg/contract/output_formatter/output_formatter_input.go diff --git a/pkg/src/contract/output_formatter/output_formatter_interface.go b/pkg/contract/output_formatter/output_formatter_interface.go similarity index 85% rename from pkg/src/contract/output_formatter/output_formatter_interface.go rename to pkg/contract/output_formatter/output_formatter_interface.go index d6a2040..efa37be 100644 --- a/pkg/src/contract/output_formatter/output_formatter_interface.go +++ b/pkg/contract/output_formatter/output_formatter_interface.go @@ -1,7 +1,7 @@ package output_formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" ) type OutputFormatterInterface interface { diff --git a/pkg/src/contract/output_formatter/output_formatter_type.go b/pkg/contract/output_formatter/output_formatter_type.go similarity index 100% rename from pkg/src/contract/output_formatter/output_formatter_type.go rename to pkg/contract/output_formatter/output_formatter_type.go diff --git a/pkg/src/contract/output_formatter/output_interface.go b/pkg/contract/output_formatter/output_interface.go similarity index 100% rename from pkg/src/contract/output_formatter/output_interface.go rename to pkg/contract/output_formatter/output_interface.go diff --git a/pkg/src/contract/output_formatter/output_style_interface.go b/pkg/contract/output_formatter/output_style_interface.go similarity index 100% rename from pkg/src/contract/output_formatter/output_style_interface.go rename to pkg/contract/output_formatter/output_style_interface.go diff --git a/pkg/src/contract/result/allowed.go b/pkg/contract/result/allowed.go similarity index 92% rename from pkg/src/contract/result/allowed.go rename to pkg/contract/result/allowed.go index d3702ed..fc7d38c 100644 --- a/pkg/src/contract/result/allowed.go +++ b/pkg/contract/result/allowed.go @@ -1,7 +1,7 @@ package result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // Allowed - Represents a dependency that is allowed to exist given the defined rules diff --git a/pkg/src/contract/result/covered_rule_interface.go b/pkg/contract/result/covered_rule_interface.go similarity index 100% rename from pkg/src/contract/result/covered_rule_interface.go rename to pkg/contract/result/covered_rule_interface.go diff --git a/pkg/src/contract/result/error.go b/pkg/contract/result/error.go similarity index 100% rename from pkg/src/contract/result/error.go rename to pkg/contract/result/error.go diff --git a/pkg/src/contract/result/output_result/output_result.go b/pkg/contract/result/output_result/output_result.go similarity index 95% rename from pkg/src/contract/result/output_result/output_result.go rename to pkg/contract/result/output_result/output_result.go index a2d7fad..5746c80 100644 --- a/pkg/src/contract/result/output_result/output_result.go +++ b/pkg/contract/result/output_result/output_result.go @@ -1,8 +1,8 @@ package output_result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" ) // OutputResult - Represents a result ready for output formatting diff --git a/pkg/src/contract/result/rule_interface.go b/pkg/contract/result/rule_interface.go similarity index 71% rename from pkg/src/contract/result/rule_interface.go rename to pkg/contract/result/rule_interface.go index f25b8e8..336e74e 100644 --- a/pkg/src/contract/result/rule_interface.go +++ b/pkg/contract/result/rule_interface.go @@ -1,7 +1,7 @@ package result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // RuleInterface - Represents a dependency diff --git a/pkg/src/contract/result/rule_type_enum.go b/pkg/contract/result/rule_type_enum.go similarity index 100% rename from pkg/src/contract/result/rule_type_enum.go rename to pkg/contract/result/rule_type_enum.go diff --git a/pkg/src/contract/result/skipped_violation.go b/pkg/contract/result/skipped_violation.go similarity index 92% rename from pkg/src/contract/result/skipped_violation.go rename to pkg/contract/result/skipped_violation.go index c0f32bc..4603777 100644 --- a/pkg/src/contract/result/skipped_violation.go +++ b/pkg/contract/result/skipped_violation.go @@ -1,7 +1,7 @@ package result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // SkippedViolation - Represents a Violation that is being skipped by the baseline file diff --git a/pkg/src/contract/result/uncovered.go b/pkg/contract/result/uncovered.go similarity index 88% rename from pkg/src/contract/result/uncovered.go rename to pkg/contract/result/uncovered.go index e59d1a6..3c95a9d 100644 --- a/pkg/src/contract/result/uncovered.go +++ b/pkg/contract/result/uncovered.go @@ -1,7 +1,7 @@ package result import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // Uncovered - Represents a dependency that is NOT covered by the current configuration. diff --git a/pkg/src/contract/result/violation.go b/pkg/contract/result/violation.go similarity index 89% rename from pkg/src/contract/result/violation.go rename to pkg/contract/result/violation.go index 5260063..ed32e32 100644 --- a/pkg/src/contract/result/violation.go +++ b/pkg/contract/result/violation.go @@ -2,8 +2,8 @@ package result import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) // Violation - Represents a dependency that is NOT allowed to exist given the defined rules diff --git a/pkg/src/contract/result/warning.go b/pkg/contract/result/warning.go similarity index 100% rename from pkg/src/contract/result/warning.go rename to pkg/contract/result/warning.go diff --git a/pkg/src/core/analyser/analyser_exception.go b/pkg/core/analyser/analyser_exception.go similarity index 86% rename from pkg/src/core/analyser/analyser_exception.go rename to pkg/core/analyser/analyser_exception.go index 3f6d7c6..4e02b92 100644 --- a/pkg/src/core/analyser/analyser_exception.go +++ b/pkg/core/analyser/analyser_exception.go @@ -2,10 +2,10 @@ package analyser import ( "fmt" - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type AnalyserException struct { diff --git a/pkg/src/core/analyser/dependency_layers_analyser.go b/pkg/core/analyser/dependency_layers_analyser.go similarity index 84% rename from pkg/src/core/analyser/dependency_layers_analyser.go rename to pkg/core/analyser/dependency_layers_analyser.go index e13c713..300cd00 100644 --- a/pkg/src/core/analyser/dependency_layers_analyser.go +++ b/pkg/core/analyser/dependency_layers_analyser.go @@ -2,16 +2,16 @@ package analyser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" ) type DependencyLayersAnalyser struct { diff --git a/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go b/pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go similarity index 78% rename from pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go rename to pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go index 792bee8..34b6af2 100644 --- a/pkg/src/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go +++ b/pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go @@ -2,9 +2,9 @@ package post_process_event import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" ) type UnmatchedSkippedViolations struct { diff --git a/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go b/pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go similarity index 80% rename from pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go rename to pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go index 88418ae..c5a1fbf 100644 --- a/pkg/src/core/analyser/event_handler/process_event/allow_dependency_handler.go +++ b/pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" ) type AllowDependencyHandler struct{} diff --git a/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go b/pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go similarity index 85% rename from pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go rename to pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go index 4e945f7..13858e5 100644 --- a/pkg/src/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go +++ b/pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go b/pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go similarity index 83% rename from pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go rename to pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go index b97b288..d320cf3 100644 --- a/pkg/src/core/analyser/event_handler/process_event/depends_on_internal_token.go +++ b/pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go @@ -1,10 +1,10 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type DependsOnInternalToken struct { diff --git a/pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go b/pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go similarity index 86% rename from pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go rename to pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go index 6e3ac5d..46746fb 100644 --- a/pkg/src/core/analyser/event_handler/process_event/depends_on_private_layer.go +++ b/pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" ) type DependsOnPrivateLayer struct { diff --git a/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go b/pkg/core/analyser/event_handler/process_event/matching_layers_handler.go similarity index 87% rename from pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go rename to pkg/core/analyser/event_handler/process_event/matching_layers_handler.go index 6fed5f1..ef96dcc 100644 --- a/pkg/src/core/analyser/event_handler/process_event/matching_layers_handler.go +++ b/pkg/core/analyser/event_handler/process_event/matching_layers_handler.go @@ -1,7 +1,7 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" ) type MatchingLayersHandler struct{} diff --git a/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go b/pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go similarity index 86% rename from pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go rename to pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go index f19ee79..286ad0c 100644 --- a/pkg/src/core/analyser/event_handler/process_event/uncovered_dependent_handler.go +++ b/pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type UncoveredDependentHandler struct { diff --git a/pkg/src/core/analyser/layer_dependencies_analyser.go b/pkg/core/analyser/layer_dependencies_analyser.go similarity index 90% rename from pkg/src/core/analyser/layer_dependencies_analyser.go rename to pkg/core/analyser/layer_dependencies_analyser.go index 39c17a0..5efa92f 100644 --- a/pkg/src/core/analyser/layer_dependencies_analyser.go +++ b/pkg/core/analyser/layer_dependencies_analyser.go @@ -1,11 +1,11 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" ) type LayerDependenciesAnalyser struct { diff --git a/pkg/src/core/analyser/layer_for_token_analyser.go b/pkg/core/analyser/layer_for_token_analyser.go similarity index 89% rename from pkg/src/core/analyser/layer_for_token_analyser.go rename to pkg/core/analyser/layer_for_token_analyser.go index d7989ac..af7508f 100644 --- a/pkg/src/core/analyser/layer_for_token_analyser.go +++ b/pkg/core/analyser/layer_for_token_analyser.go @@ -1,11 +1,11 @@ package analyser import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" "github.com/pkg/errors" "golang.org/x/exp/maps" "strings" diff --git a/pkg/src/core/analyser/ruleset_usage_analyser.go b/pkg/core/analyser/ruleset_usage_analyser.go similarity index 87% rename from pkg/src/core/analyser/ruleset_usage_analyser.go rename to pkg/core/analyser/ruleset_usage_analyser.go index 2f77bdd..a797782 100644 --- a/pkg/src/core/analyser/ruleset_usage_analyser.go +++ b/pkg/core/analyser/ruleset_usage_analyser.go @@ -1,12 +1,12 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" + Layer2 "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" ) type RulesetUsageAnalyser struct { diff --git a/pkg/src/core/analyser/token_in_layer_analyser.go b/pkg/core/analyser/token_in_layer_analyser.go similarity index 91% rename from pkg/src/core/analyser/token_in_layer_analyser.go rename to pkg/core/analyser/token_in_layer_analyser.go index 92b8705..c7d89e2 100644 --- a/pkg/src/core/analyser/token_in_layer_analyser.go +++ b/pkg/core/analyser/token_in_layer_analyser.go @@ -1,10 +1,10 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" "slices" ) diff --git a/pkg/src/core/analyser/token_type.go b/pkg/core/analyser/token_type.go similarity index 92% rename from pkg/src/core/analyser/token_type.go rename to pkg/core/analyser/token_type.go index 9d8eb8c..304accc 100644 --- a/pkg/src/core/analyser/token_type.go +++ b/pkg/core/analyser/token_type.go @@ -1,7 +1,7 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type TokenType string diff --git a/pkg/src/core/analyser/unassigned_token_analyser.go b/pkg/core/analyser/unassigned_token_analyser.go similarity index 91% rename from pkg/src/core/analyser/unassigned_token_analyser.go rename to pkg/core/analyser/unassigned_token_analyser.go index bfb0972..a4da424 100644 --- a/pkg/src/core/analyser/unassigned_token_analyser.go +++ b/pkg/core/analyser/unassigned_token_analyser.go @@ -1,10 +1,10 @@ package analyser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" "slices" ) diff --git a/pkg/src/core/ast/ast_exception.go b/pkg/core/ast/ast_exception.go similarity index 87% rename from pkg/src/core/ast/ast_exception.go rename to pkg/core/ast/ast_exception.go index f28ba56..eca1738 100644 --- a/pkg/src/core/ast/ast_exception.go +++ b/pkg/core/ast/ast_exception.go @@ -2,7 +2,7 @@ package ast import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" ) type AstException struct { diff --git a/pkg/src/core/ast/ast_loader.go b/pkg/core/ast/ast_loader.go similarity index 81% rename from pkg/src/core/ast/ast_loader.go rename to pkg/core/ast/ast_loader.go index f3c0f2a..35d252e 100644 --- a/pkg/src/core/ast/ast_loader.go +++ b/pkg/core/ast/ast_loader.go @@ -1,10 +1,10 @@ package ast import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" ) type AstLoader struct { diff --git a/pkg/src/core/ast/ast_map/ast_inherit.go b/pkg/core/ast/ast_map/ast_inherit.go similarity index 96% rename from pkg/src/core/ast/ast_map/ast_inherit.go rename to pkg/core/ast/ast_map/ast_inherit.go index 6ecd5ca..4551275 100644 --- a/pkg/src/core/ast/ast_map/ast_inherit.go +++ b/pkg/core/ast/ast_map/ast_inherit.go @@ -2,7 +2,7 @@ package ast_map import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" "strings" ) diff --git a/pkg/src/core/ast/ast_map/ast_inherit_type.go b/pkg/core/ast/ast_map/ast_inherit_type.go similarity index 100% rename from pkg/src/core/ast/ast_map/ast_inherit_type.go rename to pkg/core/ast/ast_map/ast_inherit_type.go diff --git a/pkg/src/core/ast/ast_map/ast_map.go b/pkg/core/ast/ast_map/ast_map.go similarity index 100% rename from pkg/src/core/ast/ast_map/ast_map.go rename to pkg/core/ast/ast_map/ast_map.go diff --git a/pkg/src/core/ast/ast_map/class_like_reference.go b/pkg/core/ast/ast_map/class_like_reference.go similarity index 96% rename from pkg/src/core/ast/ast_map/class_like_reference.go rename to pkg/core/ast/ast_map/class_like_reference.go index 22133c6..07d09bc 100644 --- a/pkg/src/core/ast/ast_map/class_like_reference.go +++ b/pkg/core/ast/ast_map/class_like_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type ClassLikeReference struct { diff --git a/pkg/src/core/ast/ast_map/class_like_reference_builder.go b/pkg/core/ast/ast_map/class_like_reference_builder.go similarity index 98% rename from pkg/src/core/ast/ast_map/class_like_reference_builder.go rename to pkg/core/ast/ast_map/class_like_reference_builder.go index 7829a14..fab8202 100644 --- a/pkg/src/core/ast/ast_map/class_like_reference_builder.go +++ b/pkg/core/ast/ast_map/class_like_reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type ClassLikeReferenceBuilder struct { diff --git a/pkg/src/core/ast/ast_map/class_like_token.go b/pkg/core/ast/ast_map/class_like_token.go similarity index 100% rename from pkg/src/core/ast/ast_map/class_like_token.go rename to pkg/core/ast/ast_map/class_like_token.go diff --git a/pkg/src/core/ast/ast_map/class_like_type.go b/pkg/core/ast/ast_map/class_like_type.go similarity index 100% rename from pkg/src/core/ast/ast_map/class_like_type.go rename to pkg/core/ast/ast_map/class_like_type.go diff --git a/pkg/src/core/ast/ast_map/dependency_token.go b/pkg/core/ast/ast_map/dependency_token.go similarity index 83% rename from pkg/src/core/ast/ast_map/dependency_token.go rename to pkg/core/ast/ast_map/dependency_token.go index 5cb9430..90c27e6 100644 --- a/pkg/src/core/ast/ast_map/dependency_token.go +++ b/pkg/core/ast/ast_map/dependency_token.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type DependencyToken struct { diff --git a/pkg/src/core/ast/ast_map/file_reference.go b/pkg/core/ast/ast_map/file_reference.go similarity index 96% rename from pkg/src/core/ast/ast_map/file_reference.go rename to pkg/core/ast/ast_map/file_reference.go index b21ffad..7120b35 100644 --- a/pkg/src/core/ast/ast_map/file_reference.go +++ b/pkg/core/ast/ast_map/file_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type FileReference struct { diff --git a/pkg/src/core/ast/ast_map/file_reference_builder.go b/pkg/core/ast/ast_map/file_reference_builder.go similarity index 98% rename from pkg/src/core/ast/ast_map/file_reference_builder.go rename to pkg/core/ast/ast_map/file_reference_builder.go index b16d7b9..77662b2 100644 --- a/pkg/src/core/ast/ast_map/file_reference_builder.go +++ b/pkg/core/ast/ast_map/file_reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type FileReferenceBuilder struct { diff --git a/pkg/src/core/ast/ast_map/file_token.go b/pkg/core/ast/ast_map/file_token.go similarity index 100% rename from pkg/src/core/ast/ast_map/file_token.go rename to pkg/core/ast/ast_map/file_token.go diff --git a/pkg/src/core/ast/ast_map/function_reference.go b/pkg/core/ast/ast_map/function_reference.go similarity index 95% rename from pkg/src/core/ast/ast_map/function_reference.go rename to pkg/core/ast/ast_map/function_reference.go index 2bc9e92..94319ce 100644 --- a/pkg/src/core/ast/ast_map/function_reference.go +++ b/pkg/core/ast/ast_map/function_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type FunctionReference struct { diff --git a/pkg/src/core/ast/ast_map/function_reference_builder.go b/pkg/core/ast/ast_map/function_reference_builder.go similarity index 100% rename from pkg/src/core/ast/ast_map/function_reference_builder.go rename to pkg/core/ast/ast_map/function_reference_builder.go diff --git a/pkg/src/core/ast/ast_map/function_token.go b/pkg/core/ast/ast_map/function_token.go similarity index 100% rename from pkg/src/core/ast/ast_map/function_token.go rename to pkg/core/ast/ast_map/function_token.go diff --git a/pkg/src/core/ast/ast_map/reference_builder.go b/pkg/core/ast/ast_map/reference_builder.go similarity index 99% rename from pkg/src/core/ast/ast_map/reference_builder.go rename to pkg/core/ast/ast_map/reference_builder.go index afc920e..99d4c05 100644 --- a/pkg/src/core/ast/ast_map/reference_builder.go +++ b/pkg/core/ast/ast_map/reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type ReferenceBuilder struct { diff --git a/pkg/src/core/ast/ast_map/super_global_token.go b/pkg/core/ast/ast_map/super_global_token.go similarity index 100% rename from pkg/src/core/ast/ast_map/super_global_token.go rename to pkg/core/ast/ast_map/super_global_token.go diff --git a/pkg/src/core/ast/ast_map/tagged_token_reference.go b/pkg/core/ast/ast_map/tagged_token_reference.go similarity index 100% rename from pkg/src/core/ast/ast_map/tagged_token_reference.go rename to pkg/core/ast/ast_map/tagged_token_reference.go diff --git a/pkg/src/core/ast/ast_map/variable_reference.go b/pkg/core/ast/ast_map/variable_reference.go similarity index 87% rename from pkg/src/core/ast/ast_map/variable_reference.go rename to pkg/core/ast/ast_map/variable_reference.go index 68923a6..0c2bc4e 100644 --- a/pkg/src/core/ast/ast_map/variable_reference.go +++ b/pkg/core/ast/ast_map/variable_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type VariableReference struct { diff --git a/pkg/src/core/ast/ast_map_extractor.go b/pkg/core/ast/ast_map_extractor.go similarity index 86% rename from pkg/src/core/ast/ast_map_extractor.go rename to pkg/core/ast/ast_map_extractor.go index 9f7827d..d5734d7 100644 --- a/pkg/src/core/ast/ast_map_extractor.go +++ b/pkg/core/ast/ast_map_extractor.go @@ -1,8 +1,8 @@ package ast import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" ) type AstMapExtractor struct { diff --git a/pkg/src/core/ast/ast_map_extractor_test.go b/pkg/core/ast/ast_map_extractor_test.go similarity index 72% rename from pkg/src/core/ast/ast_map_extractor_test.go rename to pkg/core/ast/ast_map_extractor_test.go index f808aa4..4b2c20e 100644 --- a/pkg/src/core/ast/ast_map_extractor_test.go +++ b/pkg/core/ast/ast_map_extractor_test.go @@ -1,11 +1,11 @@ package ast import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" "os" "testing" ) diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go b/pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go similarity index 75% rename from pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go rename to pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go index e8089ea..2ded631 100644 --- a/pkg/src/core/ast/parser/cache/ast_file_reference_cache_interface.go +++ b/pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type AstFileReferenceCacheInterface interface { diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go b/pkg/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go similarity index 100% rename from pkg/src/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go rename to pkg/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go b/pkg/core/ast/parser/cache/ast_file_reference_file_cache.go similarity index 96% rename from pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go rename to pkg/core/ast/parser/cache/ast_file_reference_file_cache.go index b8c5181..0c592d4 100644 --- a/pkg/src/core/ast/parser/cache/ast_file_reference_file_cache.go +++ b/pkg/core/ast/parser/cache/ast_file_reference_file_cache.go @@ -2,8 +2,8 @@ package cache import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" diff --git a/pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go b/pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go similarity index 92% rename from pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go rename to pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go index 1db0bab..d330c0d 100644 --- a/pkg/src/core/ast/parser/cache/ast_file_reference_in_memory_cache.go +++ b/pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "path/filepath" ) diff --git a/pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go b/pkg/core/ast/parser/cache/cacheable_file_subscriber.go similarity index 92% rename from pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go rename to pkg/core/ast/parser/cache/cacheable_file_subscriber.go index 6c31ec7..cc3cdf8 100644 --- a/pkg/src/core/ast/parser/cache/cacheable_file_subscriber.go +++ b/pkg/core/ast/parser/cache/cacheable_file_subscriber.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type CacheableFileSubscriber struct { diff --git a/pkg/src/core/ast/parser/extractors/AnnotationReferenceExtractor.php b/pkg/core/ast/parser/extractors/AnnotationReferenceExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/AnnotationReferenceExtractor.php rename to pkg/core/ast/parser/extractors/AnnotationReferenceExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/AnonymousClassExtractor.php b/pkg/core/ast/parser/extractors/AnonymousClassExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/AnonymousClassExtractor.php rename to pkg/core/ast/parser/extractors/AnonymousClassExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/ClassConstantExtractor.php b/pkg/core/ast/parser/extractors/ClassConstantExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/ClassConstantExtractor.php rename to pkg/core/ast/parser/extractors/ClassConstantExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/FunctionCallResolver.php b/pkg/core/ast/parser/extractors/FunctionCallResolver.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/FunctionCallResolver.php rename to pkg/core/ast/parser/extractors/FunctionCallResolver.php diff --git a/pkg/src/core/ast/parser/extractors/FunctionLikeExtractor.php b/pkg/core/ast/parser/extractors/FunctionLikeExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/FunctionLikeExtractor.php rename to pkg/core/ast/parser/extractors/FunctionLikeExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/KeywordExtractor.php b/pkg/core/ast/parser/extractors/KeywordExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/KeywordExtractor.php rename to pkg/core/ast/parser/extractors/KeywordExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/PropertyExtractor.php b/pkg/core/ast/parser/extractors/PropertyExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/PropertyExtractor.php rename to pkg/core/ast/parser/extractors/PropertyExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/StaticExtractor.php b/pkg/core/ast/parser/extractors/StaticExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/StaticExtractor.php rename to pkg/core/ast/parser/extractors/StaticExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/VariableExtractor.php b/pkg/core/ast/parser/extractors/VariableExtractor.php similarity index 100% rename from pkg/src/core/ast/parser/extractors/VariableExtractor.php rename to pkg/core/ast/parser/extractors/VariableExtractor.php diff --git a/pkg/src/core/ast/parser/extractors/reference_extractor_interface.go b/pkg/core/ast/parser/extractors/reference_extractor_interface.go similarity index 63% rename from pkg/src/core/ast/parser/extractors/reference_extractor_interface.go rename to pkg/core/ast/parser/extractors/reference_extractor_interface.go index ae64bd9..0c23220 100644 --- a/pkg/src/core/ast/parser/extractors/reference_extractor_interface.go +++ b/pkg/core/ast/parser/extractors/reference_extractor_interface.go @@ -1,8 +1,8 @@ package extractors import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" "go/ast" ) diff --git a/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go similarity index 96% rename from pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go rename to pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go index c835f71..4b13122 100644 --- a/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor.go +++ b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go @@ -2,9 +2,9 @@ package nikic_php_parser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" "github.com/KoNekoD/go-deptrac/pkg/util" "go/ast" "go/token" diff --git a/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go similarity index 88% rename from pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go rename to pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go index 6d21041..32338cd 100644 --- a/pkg/src/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go +++ b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go @@ -1,7 +1,7 @@ package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" diff --git a/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go similarity index 91% rename from pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go rename to pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go index 351ed79..e6f09de 100644 --- a/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser.go +++ b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go @@ -1,10 +1,10 @@ package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - astParser "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + astParser "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" "go/ast" "go/parser" "go/token" diff --git a/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go similarity index 79% rename from pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go rename to pkg/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go index b902ed0..9501877 100644 --- a/pkg/src/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go +++ b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go @@ -7,7 +7,7 @@ import ( ) func TestParsePackage(t *testing.T) { - dir, err := parser.ParseDir(token.NewFileSet(), "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/pkg/src/Core/Ast/AstMap", nil, 0) + dir, err := parser.ParseDir(token.NewFileSet(), "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/pkg/Core/Ast/AstMap", nil, 0) if err != nil { t.Error(err) } diff --git a/pkg/src/core/ast/parser/parser_interface.go b/pkg/core/ast/parser/parser_interface.go similarity index 67% rename from pkg/src/core/ast/parser/parser_interface.go rename to pkg/core/ast/parser/parser_interface.go index c8fe727..327b63f 100644 --- a/pkg/src/core/ast/parser/parser_interface.go +++ b/pkg/core/ast/parser/parser_interface.go @@ -1,7 +1,7 @@ package parser import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type ParserInterface interface { diff --git a/pkg/src/core/ast/parser/type_resolver.go b/pkg/core/ast/parser/type_resolver.go similarity index 100% rename from pkg/src/core/ast/parser/type_resolver.go rename to pkg/core/ast/parser/type_resolver.go diff --git a/pkg/src/core/ast/parser/type_scope.go b/pkg/core/ast/parser/type_scope.go similarity index 100% rename from pkg/src/core/ast/parser/type_scope.go rename to pkg/core/ast/parser/type_scope.go diff --git a/pkg/src/core/dependency/dependency.go b/pkg/core/dependency/dependency.go similarity index 93% rename from pkg/src/core/dependency/dependency.go rename to pkg/core/dependency/dependency.go index c9ac7bf..e903088 100644 --- a/pkg/src/core/dependency/dependency.go +++ b/pkg/core/dependency/dependency.go @@ -1,7 +1,7 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type Dependency struct { diff --git a/pkg/src/core/dependency/dependency_list.go b/pkg/core/dependency/dependency_list.go similarity index 95% rename from pkg/src/core/dependency/dependency_list.go rename to pkg/core/dependency/dependency_list.go index 53487b7..011f343 100644 --- a/pkg/src/core/dependency/dependency_list.go +++ b/pkg/core/dependency/dependency_list.go @@ -1,7 +1,7 @@ package dependency import ( - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" ) type DependencyList struct { diff --git a/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go b/pkg/core/dependency/dependency_resolver/dependency_resolver.go similarity index 83% rename from pkg/src/core/dependency/dependency_resolver/dependency_resolver.go rename to pkg/core/dependency/dependency_resolver/dependency_resolver.go index 73e02c6..3512264 100644 --- a/pkg/src/core/dependency/dependency_resolver/dependency_resolver.go +++ b/pkg/core/dependency/dependency_resolver/dependency_resolver.go @@ -1,12 +1,12 @@ package dependency_resolver import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - contractDependency "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/emitter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + contractDependency "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/emitter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" "reflect" ) diff --git a/pkg/src/core/dependency/emitter/class_dependency_emitter.go b/pkg/core/dependency/emitter/class_dependency_emitter.go similarity index 86% rename from pkg/src/core/dependency/emitter/class_dependency_emitter.go rename to pkg/core/dependency/emitter/class_dependency_emitter.go index f269a8e..27e2243 100644 --- a/pkg/src/core/dependency/emitter/class_dependency_emitter.go +++ b/pkg/core/dependency/emitter/class_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type ClassDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go b/pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go similarity index 82% rename from pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go rename to pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go index 7b9e6c3..40231b0 100644 --- a/pkg/src/core/dependency/emitter/class_superglobal_dependency_emitter.go +++ b/pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type ClassSuperglobalDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/dependency_emitter_interface.go b/pkg/core/dependency/emitter/dependency_emitter_interface.go similarity index 60% rename from pkg/src/core/dependency/emitter/dependency_emitter_interface.go rename to pkg/core/dependency/emitter/dependency_emitter_interface.go index dca4f0e..83c41d0 100644 --- a/pkg/src/core/dependency/emitter/dependency_emitter_interface.go +++ b/pkg/core/dependency/emitter/dependency_emitter_interface.go @@ -1,8 +1,8 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type DependencyEmitterInterface interface { diff --git a/pkg/src/core/dependency/emitter/f_q_d_n_index_node.go b/pkg/core/dependency/emitter/f_q_d_n_index_node.go similarity index 100% rename from pkg/src/core/dependency/emitter/f_q_d_n_index_node.go rename to pkg/core/dependency/emitter/f_q_d_n_index_node.go diff --git a/pkg/src/core/dependency/emitter/file_dependency_emitter.go b/pkg/core/dependency/emitter/file_dependency_emitter.go similarity index 83% rename from pkg/src/core/dependency/emitter/file_dependency_emitter.go rename to pkg/core/dependency/emitter/file_dependency_emitter.go index 58a56b5..0e29d5f 100644 --- a/pkg/src/core/dependency/emitter/file_dependency_emitter.go +++ b/pkg/core/dependency/emitter/file_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type FileDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/function_call_dependency_emitter.go b/pkg/core/dependency/emitter/function_call_dependency_emitter.go similarity index 89% rename from pkg/src/core/dependency/emitter/function_call_dependency_emitter.go rename to pkg/core/dependency/emitter/function_call_dependency_emitter.go index 6cafb59..8a7bddc 100644 --- a/pkg/src/core/dependency/emitter/function_call_dependency_emitter.go +++ b/pkg/core/dependency/emitter/function_call_dependency_emitter.go @@ -1,10 +1,10 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast/token_reference_with_dependencies_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast/token_reference_with_dependencies_interface" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type FunctionCallDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/function_dependency_emitter.go b/pkg/core/dependency/emitter/function_dependency_emitter.go similarity index 85% rename from pkg/src/core/dependency/emitter/function_dependency_emitter.go rename to pkg/core/dependency/emitter/function_dependency_emitter.go index 1058279..2ee192c 100644 --- a/pkg/src/core/dependency/emitter/function_dependency_emitter.go +++ b/pkg/core/dependency/emitter/function_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type FunctionDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go b/pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go similarity index 84% rename from pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go rename to pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go index eddeb35..0004268 100644 --- a/pkg/src/core/dependency/emitter/function_superglobal_dependency_emitter.go +++ b/pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" ) type FunctionSuperglobalDependencyEmitter struct{} diff --git a/pkg/src/core/dependency/emitter/uses_dependency_emitter.go b/pkg/core/dependency/emitter/uses_dependency_emitter.go similarity index 91% rename from pkg/src/core/dependency/emitter/uses_dependency_emitter.go rename to pkg/core/dependency/emitter/uses_dependency_emitter.go index b783bd1..5ee5ce5 100644 --- a/pkg/src/core/dependency/emitter/uses_dependency_emitter.go +++ b/pkg/core/dependency/emitter/uses_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" "strings" ) diff --git a/pkg/src/core/dependency/inherit_dependency.go b/pkg/core/dependency/inherit_dependency.go similarity index 89% rename from pkg/src/core/dependency/inherit_dependency.go rename to pkg/core/dependency/inherit_dependency.go index 6e04fcb..08e416f 100644 --- a/pkg/src/core/dependency/inherit_dependency.go +++ b/pkg/core/dependency/inherit_dependency.go @@ -1,9 +1,9 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type InheritDependency struct { diff --git a/pkg/src/core/dependency/inheritance_flattener.go b/pkg/core/dependency/inheritance_flattener.go similarity index 91% rename from pkg/src/core/dependency/inheritance_flattener.go rename to pkg/core/dependency/inheritance_flattener.go index c2fe29c..958c37f 100644 --- a/pkg/src/core/dependency/inheritance_flattener.go +++ b/pkg/core/dependency/inheritance_flattener.go @@ -1,7 +1,7 @@ package dependency import ( - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type InheritanceFlattener struct{} diff --git a/pkg/src/core/dependency/invalid_emitter_configuration_exception.go b/pkg/core/dependency/invalid_emitter_configuration_exception.go similarity index 94% rename from pkg/src/core/dependency/invalid_emitter_configuration_exception.go rename to pkg/core/dependency/invalid_emitter_configuration_exception.go index 25c7368..20822ca 100644 --- a/pkg/src/core/dependency/invalid_emitter_configuration_exception.go +++ b/pkg/core/dependency/invalid_emitter_configuration_exception.go @@ -2,7 +2,7 @@ package dependency import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" ) type InvalidEmitterConfigurationException struct { diff --git a/pkg/src/core/dependency/token_resolver.go b/pkg/core/dependency/token_resolver.go similarity index 83% rename from pkg/src/core/dependency/token_resolver.go rename to pkg/core/dependency/token_resolver.go index 98908f0..08caa3e 100644 --- a/pkg/src/core/dependency/token_resolver.go +++ b/pkg/core/dependency/token_resolver.go @@ -1,8 +1,8 @@ package dependency import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type TokenResolver struct{} diff --git a/pkg/src/core/dependency/unrecognized_token_exception.go b/pkg/core/dependency/unrecognized_token_exception.go similarity index 90% rename from pkg/src/core/dependency/unrecognized_token_exception.go rename to pkg/core/dependency/unrecognized_token_exception.go index 7251190..8ce52cb 100644 --- a/pkg/src/core/dependency/unrecognized_token_exception.go +++ b/pkg/core/dependency/unrecognized_token_exception.go @@ -2,7 +2,7 @@ package dependency import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type UnrecognizedTokenException struct { diff --git a/pkg/src/core/input_collector/file_input_collector.go b/pkg/core/input_collector/file_input_collector.go similarity index 93% rename from pkg/src/core/input_collector/file_input_collector.go rename to pkg/core/input_collector/file_input_collector.go index 4e05115..02c839e 100644 --- a/pkg/src/core/input_collector/file_input_collector.go +++ b/pkg/core/input_collector/file_input_collector.go @@ -1,8 +1,8 @@ package input_collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" + "github.com/KoNekoD/go-deptrac/pkg/contract" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" diff --git a/pkg/src/core/input_collector/input_collector_interface.go b/pkg/core/input_collector/input_collector_interface.go similarity index 100% rename from pkg/src/core/input_collector/input_collector_interface.go rename to pkg/core/input_collector/input_collector_interface.go diff --git a/pkg/src/core/input_collector/input_exception.go b/pkg/core/input_collector/input_exception.go similarity index 100% rename from pkg/src/core/input_collector/input_exception.go rename to pkg/core/input_collector/input_exception.go diff --git a/pkg/src/core/layer/collector/abstract_type_collector.go b/pkg/core/layer/collector/abstract_type_collector.go similarity index 88% rename from pkg/src/core/layer/collector/abstract_type_collector.go rename to pkg/core/layer/collector/abstract_type_collector.go index 58795de..b1cb685 100644 --- a/pkg/src/core/layer/collector/abstract_type_collector.go +++ b/pkg/core/layer/collector/abstract_type_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type AbstractTypeCollector struct { diff --git a/pkg/src/core/layer/collector/bool_collector.go b/pkg/core/layer/collector/bool_collector.go similarity index 91% rename from pkg/src/core/layer/collector/bool_collector.go rename to pkg/core/layer/collector/bool_collector.go index 368104e..4123719 100644 --- a/pkg/src/core/layer/collector/bool_collector.go +++ b/pkg/core/layer/collector/bool_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" ) type BoolCollector struct { diff --git a/pkg/src/core/layer/collector/class_collector.go b/pkg/core/layer/collector/class_collector.go similarity index 83% rename from pkg/src/core/layer/collector/class_collector.go rename to pkg/core/layer/collector/class_collector.go index f89943f..52b3285 100644 --- a/pkg/src/core/layer/collector/class_collector.go +++ b/pkg/core/layer/collector/class_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type ClassCollector struct { diff --git a/pkg/src/core/layer/collector/class_like_collector.go b/pkg/core/layer/collector/class_like_collector.go similarity index 84% rename from pkg/src/core/layer/collector/class_like_collector.go rename to pkg/core/layer/collector/class_like_collector.go index f123872..9ee1ee3 100644 --- a/pkg/src/core/layer/collector/class_like_collector.go +++ b/pkg/core/layer/collector/class_like_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type ClassLikeCollector struct { diff --git a/pkg/src/core/layer/collector/class_name_regex_collector.go b/pkg/core/layer/collector/class_name_regex_collector.go similarity index 86% rename from pkg/src/core/layer/collector/class_name_regex_collector.go rename to pkg/core/layer/collector/class_name_regex_collector.go index 9c52882..62c9d6e 100644 --- a/pkg/src/core/layer/collector/class_name_regex_collector.go +++ b/pkg/core/layer/collector/class_name_regex_collector.go @@ -1,9 +1,9 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/collectable.go b/pkg/core/layer/collector/collectable.go similarity index 84% rename from pkg/src/core/layer/collector/collectable.go rename to pkg/core/layer/collector/collectable.go index 8d4a0a1..174721c 100644 --- a/pkg/src/core/layer/collector/collectable.go +++ b/pkg/core/layer/collector/collectable.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" ) type Collectable struct { diff --git a/pkg/src/core/layer/collector/collector_provider.go b/pkg/core/layer/collector/collector_provider.go similarity index 86% rename from pkg/src/core/layer/collector/collector_provider.go rename to pkg/core/layer/collector/collector_provider.go index f8d540c..80bc59b 100644 --- a/pkg/src/core/layer/collector/collector_provider.go +++ b/pkg/core/layer/collector/collector_provider.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "golang.org/x/exp/maps" ) diff --git a/pkg/src/core/layer/collector/collector_resolver.go b/pkg/core/layer/collector/collector_resolver.go similarity index 87% rename from pkg/src/core/layer/collector/collector_resolver.go rename to pkg/core/layer/collector/collector_resolver.go index cd084c3..15fc2c5 100644 --- a/pkg/src/core/layer/collector/collector_resolver.go +++ b/pkg/core/layer/collector/collector_resolver.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" ) type CollectorResolver struct { diff --git a/pkg/src/core/layer/collector/collector_resolver_interface.go b/pkg/core/layer/collector/collector_resolver_interface.go similarity index 100% rename from pkg/src/core/layer/collector/collector_resolver_interface.go rename to pkg/core/layer/collector/collector_resolver_interface.go diff --git a/pkg/src/core/layer/collector/composer_collector.go b/pkg/core/layer/collector/composer_collector.go similarity index 95% rename from pkg/src/core/layer/collector/composer_collector.go rename to pkg/core/layer/collector/composer_collector.go index 645c0e6..eb6c1b8 100644 --- a/pkg/src/core/layer/collector/composer_collector.go +++ b/pkg/core/layer/collector/composer_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/directory_collector.go b/pkg/core/layer/collector/directory_collector.go similarity index 91% rename from pkg/src/core/layer/collector/directory_collector.go rename to pkg/core/layer/collector/directory_collector.go index 087bc82..f7a3e9b 100644 --- a/pkg/src/core/layer/collector/directory_collector.go +++ b/pkg/core/layer/collector/directory_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" "regexp" ) diff --git a/pkg/src/core/layer/collector/directory_collector_test.go b/pkg/core/layer/collector/directory_collector_test.go similarity index 74% rename from pkg/src/core/layer/collector/directory_collector_test.go rename to pkg/core/layer/collector/directory_collector_test.go index c882c13..cf97de2 100644 --- a/pkg/src/core/layer/collector/directory_collector_test.go +++ b/pkg/core/layer/collector/directory_collector_test.go @@ -6,9 +6,9 @@ import ( ) func TestDirectoryCollectorRegex(t *testing.T) { - normalizedPath := "/home/username/Documents/dev/KoNekoD/go-deptrac/pkg/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go" + normalizedPath := "/home/username/Documents/dev/KoNekoD/go-deptrac/pkg/Core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go" - validatedPattern := "pkg/src/Core/Ast/.*" + validatedPattern := "pkg/Core/Ast/.*" r, err := regexp.Compile(validatedPattern) if err != nil { diff --git a/pkg/src/core/layer/collector/function_name_collector.go b/pkg/core/layer/collector/function_name_collector.go similarity index 85% rename from pkg/src/core/layer/collector/function_name_collector.go rename to pkg/core/layer/collector/function_name_collector.go index a9dac22..529b174 100644 --- a/pkg/src/core/layer/collector/function_name_collector.go +++ b/pkg/core/layer/collector/function_name_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/glob_collector.go b/pkg/core/layer/collector/glob_collector.go similarity index 92% rename from pkg/src/core/layer/collector/glob_collector.go rename to pkg/core/layer/collector/glob_collector.go index 95126f8..24bfb98 100644 --- a/pkg/src/core/layer/collector/glob_collector.go +++ b/pkg/core/layer/collector/glob_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "github.com/KoNekoD/go-deptrac/pkg/util" filepath2 "path/filepath" "regexp" diff --git a/pkg/src/core/layer/collector/inheritance_level_collector.go b/pkg/core/layer/collector/inheritance_level_collector.go similarity index 83% rename from pkg/src/core/layer/collector/inheritance_level_collector.go rename to pkg/core/layer/collector/inheritance_level_collector.go index 23f4e59..cda2924 100644 --- a/pkg/src/core/layer/collector/inheritance_level_collector.go +++ b/pkg/core/layer/collector/inheritance_level_collector.go @@ -1,10 +1,10 @@ package collector import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/inherits_collector.go b/pkg/core/layer/collector/inherits_collector.go similarity index 85% rename from pkg/src/core/layer/collector/inherits_collector.go rename to pkg/core/layer/collector/inherits_collector.go index cbdedba..e6523d5 100644 --- a/pkg/src/core/layer/collector/inherits_collector.go +++ b/pkg/core/layer/collector/inherits_collector.go @@ -1,10 +1,10 @@ package collector import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/interface_collector.go b/pkg/core/layer/collector/interface_collector.go similarity index 84% rename from pkg/src/core/layer/collector/interface_collector.go rename to pkg/core/layer/collector/interface_collector.go index ca729d9..895f96d 100644 --- a/pkg/src/core/layer/collector/interface_collector.go +++ b/pkg/core/layer/collector/interface_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type InterfaceCollector struct { diff --git a/pkg/src/core/layer/collector/layer_collector.go b/pkg/core/layer/collector/layer_collector.go similarity index 90% rename from pkg/src/core/layer/collector/layer_collector.go rename to pkg/core/layer/collector/layer_collector.go index 4bc4c05..8dfa55b 100644 --- a/pkg/src/core/layer/collector/layer_collector.go +++ b/pkg/core/layer/collector/layer_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/method_collector.go b/pkg/core/layer/collector/method_collector.go similarity index 85% rename from pkg/src/core/layer/collector/method_collector.go rename to pkg/core/layer/collector/method_collector.go index 76f1d60..3807b83 100644 --- a/pkg/src/core/layer/collector/method_collector.go +++ b/pkg/core/layer/collector/method_collector.go @@ -2,10 +2,10 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/regex_collector.go b/pkg/core/layer/collector/regex_collector.go similarity index 91% rename from pkg/src/core/layer/collector/regex_collector.go rename to pkg/core/layer/collector/regex_collector.go index 354bf2e..dbfc81b 100644 --- a/pkg/src/core/layer/collector/regex_collector.go +++ b/pkg/core/layer/collector/regex_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" "regexp" ) diff --git a/pkg/src/core/layer/collector/superglobal_collector.go b/pkg/core/layer/collector/superglobal_collector.go similarity index 85% rename from pkg/src/core/layer/collector/superglobal_collector.go rename to pkg/core/layer/collector/superglobal_collector.go index 1105c6c..d75b7de 100644 --- a/pkg/src/core/layer/collector/superglobal_collector.go +++ b/pkg/core/layer/collector/superglobal_collector.go @@ -1,9 +1,9 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/collector/trait_collector.go b/pkg/core/layer/collector/trait_collector.go similarity index 83% rename from pkg/src/core/layer/collector/trait_collector.go rename to pkg/core/layer/collector/trait_collector.go index 5332f3e..7249ac9 100644 --- a/pkg/src/core/layer/collector/trait_collector.go +++ b/pkg/core/layer/collector/trait_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" ) type TraitCollector struct { diff --git a/pkg/src/core/layer/collector/uses_collector.go b/pkg/core/layer/collector/uses_collector.go similarity index 85% rename from pkg/src/core/layer/collector/uses_collector.go rename to pkg/core/layer/collector/uses_collector.go index eacbb74..6091ebc 100644 --- a/pkg/src/core/layer/collector/uses_collector.go +++ b/pkg/core/layer/collector/uses_collector.go @@ -1,10 +1,10 @@ package collector import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/ast_map" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/util" ) diff --git a/pkg/src/core/layer/layer_resolver.go b/pkg/core/layer/layer_resolver.go similarity index 94% rename from pkg/src/core/layer/layer_resolver.go rename to pkg/core/layer/layer_resolver.go index 5b728ee..1d709bb 100644 --- a/pkg/src/core/layer/layer_resolver.go +++ b/pkg/core/layer/layer_resolver.go @@ -2,10 +2,10 @@ package layer import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" "reflect" "sync" ) diff --git a/pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go b/pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go similarity index 88% rename from pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go rename to pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go index 6fd02a2..cbd1350 100644 --- a/pkg/src/core/layer/layer_resolver_interface/layer_resolver_interface.go +++ b/pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go @@ -1,7 +1,7 @@ package layer_resolver_interface import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" ) type LayerResolverInterface interface { diff --git a/pkg/src/supportive/console/application/application.go b/pkg/supportive/console/application/application.go similarity index 95% rename from pkg/src/supportive/console/application/application.go rename to pkg/supportive/console/application/application.go index 7e73281..fc7e12a 100644 --- a/pkg/src/supportive/console/application/application.go +++ b/pkg/supportive/console/application/application.go @@ -2,8 +2,8 @@ package application import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection" "github.com/gookit/color" "os" "slices" diff --git a/pkg/src/supportive/console/application/application_test.go b/pkg/supportive/console/application/application_test.go similarity index 100% rename from pkg/src/supportive/console/application/application_test.go rename to pkg/supportive/console/application/application_test.go diff --git a/pkg/src/supportive/console/application/application_version/application_version.go b/pkg/supportive/console/application/application_version/application_version.go similarity index 100% rename from pkg/src/supportive/console/application/application_version/application_version.go rename to pkg/supportive/console/application/application_version/application_version.go diff --git a/pkg/src/supportive/console/cannot_get_current_working_directory_exception.go b/pkg/supportive/console/cannot_get_current_working_directory_exception.go similarity index 100% rename from pkg/src/supportive/console/cannot_get_current_working_directory_exception.go rename to pkg/supportive/console/cannot_get_current_working_directory_exception.go diff --git a/pkg/src/supportive/console/command/ChangedFilesCommand.php b/pkg/supportive/console/command/ChangedFilesCommand.php similarity index 100% rename from pkg/src/supportive/console/command/ChangedFilesCommand.php rename to pkg/supportive/console/command/ChangedFilesCommand.php diff --git a/pkg/src/supportive/console/command/ChangedFilesRunner.php b/pkg/supportive/console/command/ChangedFilesRunner.php similarity index 100% rename from pkg/src/supportive/console/command/ChangedFilesRunner.php rename to pkg/supportive/console/command/ChangedFilesRunner.php diff --git a/pkg/src/supportive/console/command/DebugDependenciesCommand.php b/pkg/supportive/console/command/DebugDependenciesCommand.php similarity index 100% rename from pkg/src/supportive/console/command/DebugDependenciesCommand.php rename to pkg/supportive/console/command/DebugDependenciesCommand.php diff --git a/pkg/src/supportive/console/command/DebugDependenciesRunner.php b/pkg/supportive/console/command/DebugDependenciesRunner.php similarity index 100% rename from pkg/src/supportive/console/command/DebugDependenciesRunner.php rename to pkg/supportive/console/command/DebugDependenciesRunner.php diff --git a/pkg/src/supportive/console/command/DebugLayerCommand.php b/pkg/supportive/console/command/DebugLayerCommand.php similarity index 100% rename from pkg/src/supportive/console/command/DebugLayerCommand.php rename to pkg/supportive/console/command/DebugLayerCommand.php diff --git a/pkg/src/supportive/console/command/DebugLayerRunner.php b/pkg/supportive/console/command/DebugLayerRunner.php similarity index 100% rename from pkg/src/supportive/console/command/DebugLayerRunner.php rename to pkg/supportive/console/command/DebugLayerRunner.php diff --git a/pkg/src/supportive/console/command/DebugTokenCommand.php b/pkg/supportive/console/command/DebugTokenCommand.php similarity index 100% rename from pkg/src/supportive/console/command/DebugTokenCommand.php rename to pkg/supportive/console/command/DebugTokenCommand.php diff --git a/pkg/src/supportive/console/command/DebugTokenRunner.php b/pkg/supportive/console/command/DebugTokenRunner.php similarity index 100% rename from pkg/src/supportive/console/command/DebugTokenRunner.php rename to pkg/supportive/console/command/DebugTokenRunner.php diff --git a/pkg/src/supportive/console/command/DebugUnassignedCommand.php b/pkg/supportive/console/command/DebugUnassignedCommand.php similarity index 100% rename from pkg/src/supportive/console/command/DebugUnassignedCommand.php rename to pkg/supportive/console/command/DebugUnassignedCommand.php diff --git a/pkg/src/supportive/console/command/DebugUnassignedRunner.php b/pkg/supportive/console/command/DebugUnassignedRunner.php similarity index 100% rename from pkg/src/supportive/console/command/DebugUnassignedRunner.php rename to pkg/supportive/console/command/DebugUnassignedRunner.php diff --git a/pkg/src/supportive/console/command/DebugUnusedCommand.php b/pkg/supportive/console/command/DebugUnusedCommand.php similarity index 100% rename from pkg/src/supportive/console/command/DebugUnusedCommand.php rename to pkg/supportive/console/command/DebugUnusedCommand.php diff --git a/pkg/src/supportive/console/command/DebugUnusedRunner.php b/pkg/supportive/console/command/DebugUnusedRunner.php similarity index 100% rename from pkg/src/supportive/console/command/DebugUnusedRunner.php rename to pkg/supportive/console/command/DebugUnusedRunner.php diff --git a/pkg/src/supportive/console/command/InitCommand.php b/pkg/supportive/console/command/InitCommand.php similarity index 100% rename from pkg/src/supportive/console/command/InitCommand.php rename to pkg/supportive/console/command/InitCommand.php diff --git a/pkg/src/supportive/console/command/analyse_command.go b/pkg/supportive/console/command/analyse_command.go similarity index 83% rename from pkg/src/supportive/console/command/analyse_command.go rename to pkg/supportive/console/command/analyse_command.go index a8a21a0..7e1aa92 100644 --- a/pkg/src/supportive/console/command/analyse_command.go +++ b/pkg/supportive/console/command/analyse_command.go @@ -3,13 +3,13 @@ package command import ( "flag" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" "strings" ) diff --git a/pkg/src/supportive/console/command/analyse_options.go b/pkg/supportive/console/command/analyse_options.go similarity index 100% rename from pkg/src/supportive/console/command/analyse_options.go rename to pkg/supportive/console/command/analyse_options.go diff --git a/pkg/src/supportive/console/command/analyse_runner.go b/pkg/supportive/console/command/analyse_runner.go similarity index 93% rename from pkg/src/supportive/console/command/analyse_runner.go rename to pkg/supportive/console/command/analyse_runner.go index 7c61739..942dc13 100644 --- a/pkg/src/supportive/console/command/analyse_runner.go +++ b/pkg/supportive/console/command/analyse_runner.go @@ -3,10 +3,10 @@ package command import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" "github.com/hashicorp/go-multierror" "strings" ) diff --git a/pkg/src/supportive/console/command/command_run_exception.go b/pkg/supportive/console/command/command_run_exception.go similarity index 100% rename from pkg/src/supportive/console/command/command_run_exception.go rename to pkg/supportive/console/command/command_run_exception.go diff --git a/pkg/src/supportive/console/env.go b/pkg/supportive/console/env.go similarity index 100% rename from pkg/src/supportive/console/env.go rename to pkg/supportive/console/env.go diff --git a/pkg/src/supportive/console/subscriber/console_subscriber.go b/pkg/supportive/console/subscriber/console_subscriber.go similarity index 92% rename from pkg/src/supportive/console/subscriber/console_subscriber.go rename to pkg/supportive/console/subscriber/console_subscriber.go index 9ec889b..9b673ee 100644 --- a/pkg/src/supportive/console/subscriber/console_subscriber.go +++ b/pkg/supportive/console/subscriber/console_subscriber.go @@ -2,10 +2,10 @@ package subscriber import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" ) type ConsoleSubscriber struct { diff --git a/pkg/src/supportive/console/subscriber/progress_subscriber.go b/pkg/supportive/console/subscriber/progress_subscriber.go similarity index 86% rename from pkg/src/supportive/console/subscriber/progress_subscriber.go rename to pkg/supportive/console/subscriber/progress_subscriber.go index 78cfa3b..e811263 100644 --- a/pkg/src/supportive/console/subscriber/progress_subscriber.go +++ b/pkg/supportive/console/subscriber/progress_subscriber.go @@ -1,8 +1,8 @@ package subscriber import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" ) type ProgressSubscriber struct { diff --git a/pkg/src/supportive/console/symfony/style.go b/pkg/supportive/console/symfony/style.go similarity index 98% rename from pkg/src/supportive/console/symfony/style.go rename to pkg/supportive/console/symfony/style.go index e36e260..2681c2f 100644 --- a/pkg/src/supportive/console/symfony/style.go +++ b/pkg/supportive/console/symfony/style.go @@ -2,7 +2,7 @@ package symfony import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" diff --git a/pkg/src/supportive/console/symfony/symfony_output.go b/pkg/supportive/console/symfony/symfony_output.go similarity index 91% rename from pkg/src/supportive/console/symfony/symfony_output.go rename to pkg/supportive/console/symfony/symfony_output.go index 5434dca..1e5a8ff 100644 --- a/pkg/src/supportive/console/symfony/symfony_output.go +++ b/pkg/supportive/console/symfony/symfony_output.go @@ -2,7 +2,7 @@ package symfony import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" ) type SymfonyOutput struct { diff --git a/pkg/src/supportive/dependency_injection/Configuration.php b/pkg/supportive/dependency_injection/Configuration.php similarity index 100% rename from pkg/src/supportive/dependency_injection/Configuration.php rename to pkg/supportive/dependency_injection/Configuration.php diff --git a/pkg/src/supportive/dependency_injection/DeptracExtension.php b/pkg/supportive/dependency_injection/DeptracExtension.php similarity index 100% rename from pkg/src/supportive/dependency_injection/DeptracExtension.php rename to pkg/supportive/dependency_injection/DeptracExtension.php diff --git a/pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go b/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go similarity index 100% rename from pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go rename to pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go diff --git a/pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php b/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php similarity index 100% rename from pkg/src/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php rename to pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php diff --git a/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go b/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go similarity index 100% rename from pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go rename to pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go diff --git a/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php b/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php similarity index 100% rename from pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php rename to pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php diff --git a/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go b/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go similarity index 92% rename from pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go rename to pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go index ad5bfc5..3e05505 100644 --- a/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go +++ b/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go @@ -2,7 +2,7 @@ package InvalidServiceInLocatorException import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" "strings" ) diff --git a/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php b/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php similarity index 100% rename from pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php rename to pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php diff --git a/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go b/pkg/supportive/dependency_injection/ServiceContainerBuilder.go similarity index 90% rename from pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go rename to pkg/supportive/dependency_injection/ServiceContainerBuilder.go index a3988d4..20ffc91 100644 --- a/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.go +++ b/pkg/supportive/dependency_injection/ServiceContainerBuilder.go @@ -2,10 +2,10 @@ package dependency_injection import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/deptrac_config" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/Exception/CannotLoadConfiguration" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/config/deptrac_config" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" diff --git a/pkg/src/supportive/dependency_injection/ServiceContainerBuilder.php b/pkg/supportive/dependency_injection/ServiceContainerBuilder.php similarity index 100% rename from pkg/src/supportive/dependency_injection/ServiceContainerBuilder.php rename to pkg/supportive/dependency_injection/ServiceContainerBuilder.php diff --git a/pkg/src/supportive/dependency_injection/cache.go b/pkg/supportive/dependency_injection/cache.go similarity index 66% rename from pkg/src/supportive/dependency_injection/cache.go rename to pkg/supportive/dependency_injection/cache.go index e6d5668..d96c26d 100644 --- a/pkg/src/supportive/dependency_injection/cache.go +++ b/pkg/supportive/dependency_injection/cache.go @@ -1,9 +1,9 @@ package dependency_injection import ( - Cache2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application/application_version" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" + Cache2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application/application_version" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" ) func Cache(builder *container_builder.ContainerBuilder) { diff --git a/pkg/src/supportive/dependency_injection/cache.php b/pkg/supportive/dependency_injection/cache.php similarity index 100% rename from pkg/src/supportive/dependency_injection/cache.php rename to pkg/supportive/dependency_injection/cache.php diff --git a/pkg/src/supportive/dependency_injection/container_builder/container_builder.go b/pkg/supportive/dependency_injection/container_builder/container_builder.go similarity index 68% rename from pkg/src/supportive/dependency_injection/container_builder/container_builder.go rename to pkg/supportive/dependency_injection/container_builder/container_builder.go index 1353296..2594377 100644 --- a/pkg/src/supportive/dependency_injection/container_builder/container_builder.go +++ b/pkg/supportive/dependency_injection/container_builder/container_builder.go @@ -1,30 +1,30 @@ package container_builder import ( - analyser2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/deptrac_config" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter/configuration" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" + analyser2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/contract/config/deptrac_config" + "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/process_event" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" ) type ContainerBuilder struct { diff --git a/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go b/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go similarity index 84% rename from pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go rename to pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go index 440375a..905168d 100644 --- a/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go +++ b/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go @@ -2,8 +2,8 @@ package event_dispatcher import ( "fmt" - util "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" + util "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" "reflect" "slices" ) diff --git a/pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go b/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go similarity index 100% rename from pkg/src/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go rename to pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go diff --git a/pkg/src/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go b/pkg/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go similarity index 100% rename from pkg/src/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go rename to pkg/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go diff --git a/pkg/src/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go b/pkg/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go similarity index 100% rename from pkg/src/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go rename to pkg/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go diff --git a/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go b/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go similarity index 68% rename from pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go rename to pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go index a4c24b6..b7773cb 100644 --- a/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go +++ b/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go @@ -1,7 +1,7 @@ package event_subscriber_interface_map import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" "github.com/elliotchance/orderedmap/v2" ) diff --git a/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go b/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go similarity index 80% rename from pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go rename to pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go index 616abe5..5a2403a 100644 --- a/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go +++ b/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go @@ -1,14 +1,14 @@ package event_subscriber_interface_map_reg import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_default_priority" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_default_priority" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" "github.com/elliotchance/orderedmap/v2" "reflect" ) diff --git a/pkg/src/supportive/dependency_injection/services.go b/pkg/supportive/dependency_injection/services.go similarity index 83% rename from pkg/src/supportive/dependency_injection/services.go rename to pkg/supportive/dependency_injection/services.go index e69a71d..5e59f82 100644 --- a/pkg/src/supportive/dependency_injection/services.go +++ b/pkg/supportive/dependency_injection/services.go @@ -2,40 +2,40 @@ package dependency_injection import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/event_helper" - post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/post_process_event" - process_event2 "github.com/KoNekoD/go-deptrac/pkg/src/contract/analyser/process_event" - astContract "github.com/KoNekoD/go-deptrac/pkg/src/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config" - contractLayer "github.com/KoNekoD/go-deptrac/pkg/src/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/core/analyser/event_handler/process_event" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser" - Cache2 "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/src/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/src/core/dependency/emitter" - "github.com/KoNekoD/go-deptrac/pkg/src/core/input_collector" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer" - "github.com/KoNekoD/go-deptrac/pkg/src/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/command" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_dispatcher" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_default_priority" - EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/output_formatter/configuration" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/time_stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" + post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" + process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/config" + contractLayer "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/process_event" + "github.com/KoNekoD/go-deptrac/pkg/core/ast" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + Cache2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/core/dependency/emitter" + "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/core/layer" + "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_default_priority" + EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" "github.com/elliotchance/orderedmap/v2" ) diff --git a/pkg/src/supportive/dependency_injection/services.php b/pkg/supportive/dependency_injection/services.php similarity index 100% rename from pkg/src/supportive/dependency_injection/services.php rename to pkg/supportive/dependency_injection/services.php diff --git a/pkg/src/supportive/file/dumper.go b/pkg/supportive/file/dumper.go similarity index 100% rename from pkg/src/supportive/file/dumper.go rename to pkg/supportive/file/dumper.go diff --git a/pkg/src/supportive/file/exception/could_not_read_file_exception.go b/pkg/supportive/file/exception/could_not_read_file_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/could_not_read_file_exception.go rename to pkg/supportive/file/exception/could_not_read_file_exception.go diff --git a/pkg/src/supportive/file/exception/file_already_exists_exception.go b/pkg/supportive/file/exception/file_already_exists_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/file_already_exists_exception.go rename to pkg/supportive/file/exception/file_already_exists_exception.go diff --git a/pkg/src/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go b/pkg/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go rename to pkg/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go diff --git a/pkg/src/supportive/file/exception/file_not_exists_exception.go b/pkg/supportive/file/exception/file_not_exists_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/file_not_exists_exception.go rename to pkg/supportive/file/exception/file_not_exists_exception.go diff --git a/pkg/src/supportive/file/exception/file_not_writable_exception.go b/pkg/supportive/file/exception/file_not_writable_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/file_not_writable_exception.go rename to pkg/supportive/file/exception/file_not_writable_exception.go diff --git a/pkg/src/supportive/file/exception/i_o_exception.go b/pkg/supportive/file/exception/i_o_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/i_o_exception.go rename to pkg/supportive/file/exception/i_o_exception.go diff --git a/pkg/src/supportive/file/exception/invalid_path_exception.go b/pkg/supportive/file/exception/invalid_path_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/invalid_path_exception.go rename to pkg/supportive/file/exception/invalid_path_exception.go diff --git a/pkg/src/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go b/pkg/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go similarity index 100% rename from pkg/src/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go rename to pkg/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go diff --git a/pkg/src/supportive/file/file_reader.go b/pkg/supportive/file/file_reader.go similarity index 79% rename from pkg/src/supportive/file/file_reader.go rename to pkg/supportive/file/file_reader.go index 0f7bb69..d86d0a8 100644 --- a/pkg/src/supportive/file/file_reader.go +++ b/pkg/supportive/file/file_reader.go @@ -1,7 +1,7 @@ package file import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" "os" ) diff --git a/pkg/src/supportive/file/yml_file_loader.go b/pkg/supportive/file/yml_file_loader.go similarity index 93% rename from pkg/src/supportive/file/yml_file_loader.go rename to pkg/supportive/file/yml_file_loader.go index 3a00694..eec2a86 100644 --- a/pkg/src/supportive/file/yml_file_loader.go +++ b/pkg/supportive/file/yml_file_loader.go @@ -1,7 +1,7 @@ package file import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/file/exception" + "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" "gopkg.in/yaml.v3" ) diff --git a/pkg/src/supportive/output_formatter/BaselineOutputFormatter.php b/pkg/supportive/output_formatter/BaselineOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/BaselineOutputFormatter.php rename to pkg/supportive/output_formatter/BaselineOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/CodeclimateOutputFormatter.php b/pkg/supportive/output_formatter/CodeclimateOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/CodeclimateOutputFormatter.php rename to pkg/supportive/output_formatter/CodeclimateOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/ConsoleOutputFormatter.php b/pkg/supportive/output_formatter/ConsoleOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/ConsoleOutputFormatter.php rename to pkg/supportive/output_formatter/ConsoleOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/GraphVizOutputDisplayFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/GraphVizOutputDisplayFormatter.php rename to pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php diff --git a/pkg/src/supportive/output_formatter/GraphVizOutputDotFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/GraphVizOutputDotFormatter.php rename to pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php diff --git a/pkg/src/supportive/output_formatter/GraphVizOutputFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/GraphVizOutputFormatter.php rename to pkg/supportive/output_formatter/GraphVizOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/GraphVizOutputHtmlFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/GraphVizOutputHtmlFormatter.php rename to pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php diff --git a/pkg/src/supportive/output_formatter/GraphVizOutputImageFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/GraphVizOutputImageFormatter.php rename to pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php diff --git a/pkg/src/supportive/output_formatter/JUnitOutputFormatter.php b/pkg/supportive/output_formatter/JUnitOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/JUnitOutputFormatter.php rename to pkg/supportive/output_formatter/JUnitOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/JsonOutputFormatter.php b/pkg/supportive/output_formatter/JsonOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/JsonOutputFormatter.php rename to pkg/supportive/output_formatter/JsonOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/MermaidJSOutputFormatter.php b/pkg/supportive/output_formatter/MermaidJSOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/MermaidJSOutputFormatter.php rename to pkg/supportive/output_formatter/MermaidJSOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/XMLOutputFormatter.php b/pkg/supportive/output_formatter/XMLOutputFormatter.php similarity index 100% rename from pkg/src/supportive/output_formatter/XMLOutputFormatter.php rename to pkg/supportive/output_formatter/XMLOutputFormatter.php diff --git a/pkg/src/supportive/output_formatter/configuration/configuration_codeclimate.go b/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go similarity index 100% rename from pkg/src/supportive/output_formatter/configuration/configuration_codeclimate.go rename to pkg/supportive/output_formatter/configuration/configuration_codeclimate.go diff --git a/pkg/src/supportive/output_formatter/configuration/configuration_graph_viz.go b/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go similarity index 100% rename from pkg/src/supportive/output_formatter/configuration/configuration_graph_viz.go rename to pkg/supportive/output_formatter/configuration/configuration_graph_viz.go diff --git a/pkg/src/supportive/output_formatter/configuration/formatter_configuration.go b/pkg/supportive/output_formatter/configuration/formatter_configuration.go similarity index 87% rename from pkg/src/supportive/output_formatter/configuration/formatter_configuration.go rename to pkg/supportive/output_formatter/configuration/formatter_configuration.go index 0adb211..f2eba2e 100644 --- a/pkg/src/supportive/output_formatter/configuration/formatter_configuration.go +++ b/pkg/supportive/output_formatter/configuration/formatter_configuration.go @@ -1,7 +1,7 @@ package configuration import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/config/formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" ) type FormatterConfiguration struct { diff --git a/pkg/src/supportive/output_formatter/formatter_provider.go b/pkg/supportive/output_formatter/formatter_provider.go similarity index 85% rename from pkg/src/supportive/output_formatter/formatter_provider.go rename to pkg/supportive/output_formatter/formatter_provider.go index fe9cf15..a65adea 100644 --- a/pkg/src/supportive/output_formatter/formatter_provider.go +++ b/pkg/supportive/output_formatter/formatter_provider.go @@ -1,8 +1,8 @@ package output_formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/dependency_injection/Exception/InvalidServiceInLocatorException" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException" "golang.org/x/exp/maps" "reflect" ) diff --git a/pkg/src/supportive/output_formatter/github_actions_output_formatter.go b/pkg/supportive/output_formatter/github_actions_output_formatter.go similarity index 93% rename from pkg/src/supportive/output_formatter/github_actions_output_formatter.go rename to pkg/supportive/output_formatter/github_actions_output_formatter.go index fff7b4e..059aa11 100644 --- a/pkg/src/supportive/output_formatter/github_actions_output_formatter.go +++ b/pkg/supportive/output_formatter/github_actions_output_formatter.go @@ -2,10 +2,10 @@ package output_formatter import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" "strings" ) diff --git a/pkg/src/supportive/output_formatter/table_output_formatter.go b/pkg/supportive/output_formatter/table_output_formatter.go similarity index 96% rename from pkg/src/supportive/output_formatter/table_output_formatter.go rename to pkg/supportive/output_formatter/table_output_formatter.go index 1b3147b..d2e551b 100644 --- a/pkg/src/supportive/output_formatter/table_output_formatter.go +++ b/pkg/supportive/output_formatter/table_output_formatter.go @@ -2,10 +2,10 @@ package output_formatter import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/src/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" diff --git a/pkg/src/supportive/output_formatter/table_output_formatter_test.go b/pkg/supportive/output_formatter/table_output_formatter_test.go similarity index 100% rename from pkg/src/supportive/output_formatter/table_output_formatter_test.go rename to pkg/supportive/output_formatter/table_output_formatter_test.go diff --git a/pkg/src/supportive/time_stopwatch/period.go b/pkg/supportive/time_stopwatch/period.go similarity index 100% rename from pkg/src/supportive/time_stopwatch/period.go rename to pkg/supportive/time_stopwatch/period.go diff --git a/pkg/src/supportive/time_stopwatch/started_period.go b/pkg/supportive/time_stopwatch/started_period.go similarity index 100% rename from pkg/src/supportive/time_stopwatch/started_period.go rename to pkg/supportive/time_stopwatch/started_period.go diff --git a/pkg/src/supportive/time_stopwatch/stopwatch.go b/pkg/supportive/time_stopwatch/stopwatch.go similarity index 100% rename from pkg/src/supportive/time_stopwatch/stopwatch.go rename to pkg/supportive/time_stopwatch/stopwatch.go diff --git a/pkg/src/supportive/time_stopwatch/stopwatch_exception.go b/pkg/supportive/time_stopwatch/stopwatch_exception.go similarity index 100% rename from pkg/src/supportive/time_stopwatch/stopwatch_exception.go rename to pkg/supportive/time_stopwatch/stopwatch_exception.go diff --git a/pkg/test_projects/examples/simple-cleanarch/run_test.go b/pkg/test_projects/examples/simple-cleanarch/run_test.go index 6869b35..cdef796 100644 --- a/pkg/test_projects/examples/simple-cleanarch/run_test.go +++ b/pkg/test_projects/examples/simple-cleanarch/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" diff --git a/pkg/test_projects/examples/simple-invalid-mvc/run_test.go b/pkg/test_projects/examples/simple-invalid-mvc/run_test.go index 218678a..6635c89 100644 --- a/pkg/test_projects/examples/simple-invalid-mvc/run_test.go +++ b/pkg/test_projects/examples/simple-invalid-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" diff --git a/pkg/test_projects/examples/simple-mvc/run_test.go b/pkg/test_projects/examples/simple-mvc/run_test.go index ee426e1..9c8ad22 100644 --- a/pkg/test_projects/examples/simple-mvc/run_test.go +++ b/pkg/test_projects/examples/simple-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" From 6961f71b3169236f11f9354b5bce94e93b293fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Sat, 24 Aug 2024 18:26:51 +0300 Subject: [PATCH 05/40] chore: working state checkpoint --- cmd/go-deptrac/main.go | 2 +- deptrac.yaml | 3 + go.mod | 1 + go.sum | 2 + .../analyser/dependency_layers_analyser.go | 4 +- pkg/core/ast/ast_loader.go | 4 +- pkg/core/ast/ast_map/ast_map.go | 31 +++- pkg/core/ast/ast_map_extractor_test.go | 5 +- .../file_reference_visitor.go | 62 +++++--- .../file_reference_visitor_test.go | 14 +- .../nikic_php_parser/nikic_php_parser.go | 7 +- .../nikic_php_parser/node_namer/node_namer.go | 136 ++++++++++++++++++ .../node_namer_test/node_namer_test.go | 19 +++ pkg/core/ast/parser/type_resolver.go | 62 +++++++- pkg/core/ast/parser/type_scope.go | 5 +- .../dependency_resolver.go | 4 +- .../console/command/analyse_command.go | 4 +- .../container_builder/container_builder.go | 4 +- .../event_dispatcher_interface.go | 2 +- .../dependency_injection/services.go | 8 +- .../test_container_provider.go | 29 ++++ .../table_output_formatter.go | 2 +- .../{simple-cleanarch => }/run_test.go | 4 +- .../examples/simple-cleanarch/app/app.go | 2 +- .../examples/simple-cleanarch/go.mod | 3 + .../infrastructure/kv-store.go | 2 +- pkg/util/GetPathWithOnlytFiename.go | 22 +++ pkg/util/GetPathWithoutFiename.go | 19 +++ 28 files changed, 415 insertions(+), 47 deletions(-) create mode 100644 pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go create mode 100644 pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go create mode 100644 pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go rename pkg/test_projects/examples/{simple-cleanarch => }/run_test.go (88%) create mode 100644 pkg/test_projects/examples/simple-cleanarch/go.mod create mode 100644 pkg/util/GetPathWithOnlytFiename.go create mode 100644 pkg/util/GetPathWithoutFiename.go diff --git a/cmd/go-deptrac/main.go b/cmd/go-deptrac/main.go index 8aab0e3..df9cf25 100644 --- a/cmd/go-deptrac/main.go +++ b/cmd/go-deptrac/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/KoNekoD/go-deptrac/pkg/src/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" ) func main() { diff --git a/deptrac.yaml b/deptrac.yaml index 70da739..949bdcf 100644 --- a/deptrac.yaml +++ b/deptrac.yaml @@ -136,12 +136,14 @@ deptrac: Dependency: - Ast - Contract + - DependencyInjection Analyser: - Layer - Dependency - Ast - Symfony - Contract + - DependencyInjection OutputFormatter: - DependencyInjection - Symfony @@ -151,6 +153,7 @@ deptrac: - InputCollector - Symfony - Contract + - DependencyInjection InputCollector: - File - Symfony diff --git a/go.mod b/go.mod index 72918a8..3dd82d6 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/schollz/progressbar/v3 v3.14.6 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 + golang.org/x/mod v0.19.0 golang.org/x/sys v0.23.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 738965b..f4ff21b 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,8 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHg github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= diff --git a/pkg/core/analyser/dependency_layers_analyser.go b/pkg/core/analyser/dependency_layers_analyser.go index 300cd00..144d5b5 100644 --- a/pkg/core/analyser/dependency_layers_analyser.go +++ b/pkg/core/analyser/dependency_layers_analyser.go @@ -19,7 +19,7 @@ type DependencyLayersAnalyser struct { dependencyResolver *dependency_resolver.DependencyResolver tokenResolver *dependency.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface - eventDispatcher util.EventDispatcherInterface + eventDispatcher event_dispatcher_interface.EventDispatcherInterface } func NewDependencyLayersAnalyser( @@ -27,7 +27,7 @@ func NewDependencyLayersAnalyser( dependencyResolver *dependency_resolver.DependencyResolver, tokenResolver *dependency.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, - eventDispatcher util.EventDispatcherInterface) *DependencyLayersAnalyser { + eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ astMapExtractor: astMapExtractor, dependencyResolver: dependencyResolver, diff --git a/pkg/core/ast/ast_loader.go b/pkg/core/ast/ast_loader.go index 35d252e..30bcedb 100644 --- a/pkg/core/ast/ast_loader.go +++ b/pkg/core/ast/ast_loader.go @@ -9,10 +9,10 @@ import ( type AstLoader struct { parser parser.ParserInterface - eventDispatcher util.EventDispatcherInterface + eventDispatcher event_dispatcher_interface.EventDispatcherInterface } -func NewAstLoader(parser parser.ParserInterface, eventDispatcher util.EventDispatcherInterface) *AstLoader { +func NewAstLoader(parser parser.ParserInterface, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *AstLoader { return &AstLoader{ parser: parser, eventDispatcher: eventDispatcher, diff --git a/pkg/core/ast/ast_map/ast_map.go b/pkg/core/ast/ast_map/ast_map.go index 09276d8..8f17415 100644 --- a/pkg/core/ast/ast_map/ast_map.go +++ b/pkg/core/ast/ast_map/ast_map.go @@ -1,6 +1,9 @@ package ast_map -import "strings" +import ( + "fmt" + "strings" +) type AstMap struct { ClassReferences map[string]*ClassLikeReference @@ -53,10 +56,23 @@ func (a *AstMap) GetFunctionReferences() []*FunctionReference { func (a *AstMap) GetClassReferenceForToken(structName *ClassLikeToken) *ClassLikeReference { // TODO: Rework to full package path name := structName.ToString() - name = name[strings.LastIndex(name, "/")+1:] v, ok := a.ClassReferences[name] if !ok { + + // TODO: debug + for refName, reference := range a.ClassReferences { + refNameFile := strings.Split(refName, " ")[0] + nameFile := strings.Split(name, " ")[0] + + if refNameFile == nameFile { + fmt.Println(reference) + //panic("1") + //fmt.Println(reference) + // todo почему то есть файлы которых он не находит... и они пападают в этот кейс + } + } + // TODO: Possible external package return nil } @@ -147,6 +163,17 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, a func (a *AstMap) addClassLike(astStructReference ClassLikeReference) { token := astStructReference.GetToken() + + // If token.ToString() contains :: then panic + if strings.Contains(token.ToString(), "::") { + panic(token.ToString()) + } + + // github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map/emitter.go AstMap + if strings.Contains(token.ToString(), "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map/emitter.go AstMap") { + panic(token.ToString()) + } + a.ClassReferences[token.ToString()] = &astStructReference } diff --git a/pkg/core/ast/ast_map_extractor_test.go b/pkg/core/ast/ast_map_extractor_test.go index 4b2c20e..46cc40c 100644 --- a/pkg/core/ast/ast_map_extractor_test.go +++ b/pkg/core/ast/ast_map_extractor_test.go @@ -40,7 +40,10 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { astLoader := NewAstLoader( nikic_php_parser.NewNikicPhpParser( cache.NewAstFileReferenceInMemoryCache(), - parser.NewTypeResolver(), + parser.NewTypeResolver( + nil, + ), + nil, []extractors.ReferenceExtractorInterface{}, ), nil, diff --git a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go index 4b13122..240c6a0 100644 --- a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go +++ b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go @@ -1,10 +1,10 @@ package nikic_php_parser import ( - "fmt" "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" "github.com/KoNekoD/go-deptrac/pkg/util" "go/ast" "go/token" @@ -16,14 +16,18 @@ type FileReferenceVisitor struct { currentReference ast_map.ReferenceBuilderInterface fileReferenceBuilder *ast_map.FileReferenceBuilder typeResolver *parser.TypeResolver + nodeNamer *node_namer.NodeNamer + errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *ast_map.FileReferenceBuilder, resolver *parser.TypeResolver, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *ast_map.FileReferenceBuilder, resolver *parser.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, typeResolver: resolver, + nodeNamer: nodeNamer, + errors: make([]error, 0), dependencyResolvers: extractors, currentTypeScope: parser.NewTypeScope(""), } @@ -62,7 +66,10 @@ func (f *FileReferenceVisitor) Visit(node ast.Node) (w ast.Visitor) { func (f *FileReferenceVisitor) enterNode(node ast.Node) { switch typedNode := node.(type) { case *ast.File: - f.currentTypeScope = parser.NewTypeScope(typedNode.Name.Name).SetFileNode(typedNode) + packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) // TODO: Possible bug when file dir != package declared in file + f.addErrIfNeeded(err) + + f.currentTypeScope = parser.NewTypeScope(packageFileName).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: @@ -89,12 +96,15 @@ func (f *FileReferenceVisitor) leaveNode(node ast.Node) { } func (f *FileReferenceVisitor) enterFunction(node *ast.FuncDecl) { - var fullName *string - if node.Recv != nil { + var ( + fullName string + err error + ) + + if node.Recv != nil { // Function is a method if len(node.Recv.List) > 1 { panic("No way") } - methodFile := f.fileReferenceBuilder.Filepath methodOwner := "" switch t := node.Recv.List[0].Type.(type) { case *ast.Ident: @@ -104,17 +114,18 @@ func (f *FileReferenceVisitor) enterFunction(node *ast.FuncDecl) { default: panic("No way") } - name := node.Name.String() + methodName := node.Name.String() - fn := fmt.Sprintf("%s %s::%s", methodFile, methodOwner, name) - fullName = &fn - } else { + fullName, err = f.nodeNamer.GetPackageStructFunctionName(f.fileReferenceBuilder.Filepath, methodOwner, methodName) + f.addErrIfNeeded(err) + } else { // Function is a function methodFile := f.fileReferenceBuilder.Filepath name := node.Name.String() - fn := fmt.Sprintf("%s %s", methodFile, name) - fullName = &fn + fullName, err = f.nodeNamer.GetPackageFunctionName(methodFile, name) + f.addErrIfNeeded(err) } - f.currentReference = f.fileReferenceBuilder.NewFunction(*fullName, make([]string, 0), make(map[string][]string)) + + f.currentReference = f.fileReferenceBuilder.NewFunction(fullName, make([]string, 0), make(map[string][]string)) for _, param := range node.Type.Params.List { if param.Type != nil { @@ -135,9 +146,17 @@ func (f *FileReferenceVisitor) enterFunction(node *ast.FuncDecl) { } } +func (f *FileReferenceVisitor) addErrIfNeeded(errToAdd error) { + if errToAdd != nil { + f.errors = append(f.errors, errToAdd) + } +} + func (f *FileReferenceVisitor) getClassReferenceName(node *ast.GenDecl) *string { if node.Tok == token.TYPE { - name := node.Specs[0].(*ast.TypeSpec).Name.Name + structName := node.Specs[0].(*ast.TypeSpec).Name.Name + name, err := f.nodeNamer.GetPackageStructName(f.fileReferenceBuilder.Filepath, structName) + f.addErrIfNeeded(err) return &name } panic("1") @@ -153,11 +172,20 @@ func (f *FileReferenceVisitor) enterGenDecl(node *ast.GenDecl) { switch typeSpec.Type.(type) { case *ast.StructType: - f.enterClass(typeSpec.Name.Name, make(map[string][]string)) // type T struct {} + structName := typeSpec.Name.Name + packaeStructName, err := f.nodeNamer.GetPackageStructName(f.fileReferenceBuilder.Filepath, structName) + f.addErrIfNeeded(err) + f.enterClass(packaeStructName, make(map[string][]string)) // type T struct {} case *ast.Ident: - f.enterClass(typeSpec.Name.Name, make(map[string][]string)) // type T string + structName := typeSpec.Name.Name + packaeStructName, err := f.nodeNamer.GetPackageStructName(f.fileReferenceBuilder.Filepath, structName) + f.addErrIfNeeded(err) + f.enterClass(packaeStructName, make(map[string][]string)) // type T string case *ast.InterfaceType: - f.enterInterface(typeSpec.Name.Name, make(map[string][]string)) + structName := typeSpec.Name.Name + packaeStructName, err := f.nodeNamer.GetPackageStructName(f.fileReferenceBuilder.Filepath, structName) + f.addErrIfNeeded(err) + f.enterInterface(packaeStructName, make(map[string][]string)) default: panic("2") } diff --git a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go index 32338cd..527d8bd 100644 --- a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go +++ b/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go @@ -1,7 +1,10 @@ package nikic_php_parser import ( + "fmt" "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + parser2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" @@ -10,7 +13,7 @@ import ( ) func TestFileReferenceVisitorOk(t *testing.T) { - file := "pkg/ast/parser.go" + file := "pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go" nodes, err := parser.ParseFile(token.NewFileSet(), file, nil, 0) @@ -18,11 +21,18 @@ func TestFileReferenceVisitorOk(t *testing.T) { t.Error(err) } + referenceExtractorInterfaces := make([]extractors.ReferenceExtractorInterface, 0) + fileReferenceVisitor := NewFileReferenceVisitor( ast_map.CreateFileReferenceBuilder(file), + parser2.NewTypeResolver( + nil, + ), nil, - nil, + referenceExtractorInterfaces..., ) ast.Walk(fileReferenceVisitor, nodes) + + fmt.Println() } diff --git a/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go index e6f09de..06eee99 100644 --- a/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go +++ b/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go @@ -5,6 +5,7 @@ import ( astParser "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" "go/ast" "go/parser" "go/token" @@ -48,14 +49,16 @@ type NikicPhpParser struct { classAstMap map[string]*ast.Ident cache cache.AstFileReferenceCacheInterface typeResolver *astParser.TypeResolver + nodeNamer *node_namer.NodeNamer extractors []extractors.ReferenceExtractorInterface } -func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver *astParser.TypeResolver, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver *astParser.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, typeResolver: typeResolver, + nodeNamer: nodeNamer, extractors: extractors, } } @@ -70,7 +73,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*ast_map.FileReference, error) } fileReferenceBuilder := ast_map.CreateFileReferenceBuilder(file) - visitor := NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.extractors...) + visitor := NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) rootNode := p.loadNodesFromFile(file) ast.Walk(visitor, rootNode) diff --git a/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go b/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go new file mode 100644 index 0000000..f80b02c --- /dev/null +++ b/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go @@ -0,0 +1,136 @@ +package node_namer + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/util" + _ "github.com/KoNekoD/go-deptrac/resources" + "go/parser" + "go/token" + "golang.org/x/mod/modfile" + "os" + "path/filepath" + "strings" +) + +type NodeNamer struct { + projectDirectory string +} + +func NewNodeNamer(projectDirectory string) *NodeNamer { + return &NodeNamer{ + projectDirectory: projectDirectory, + } +} + +func (n *NodeNamer) GetRootPackageName(path string) (string, error) { + fullPath := filepath.Join(n.projectDirectory, path) + + path, err := util.GetPathWithoutFilename(fullPath) + if err != nil { + return "", err + } + + // Recursively: for example path pkg/my/a/b/c we walk like this: + // ( "pkg/my/a/b/c", "pkg/my/a/b", "pkg/my/a", "pkg/my", "pkg", "." ) + // And if it has go.mod we return the package name(module name) + for { + goModPath := filepath.Join(fullPath, "go.mod") + if _, err := os.Stat(goModPath); err == nil { + fileBytes, err := os.ReadFile(goModPath) + if err != nil { + return "", err + } + + parsedModfile, err := modfile.Parse(goModPath, fileBytes, nil) + if err != nil { + return "", err + } + return parsedModfile.Module.Mod.Path, nil + } + if filepath.Base(fullPath) == "." { + return "", nil + } + fullPath = filepath.Dir(fullPath) + } +} + +func (n *NodeNamer) GetPackageName(path string) (string, error) { + rootPackageName, err := n.GetRootPackageName(path) + + if err != nil { + return "", err + } + + innerPackageName, err := util.GetPathWithoutFilename(filepath.Join(n.projectDirectory, path)) + if err != nil { + return "", err + } + innerPackageName, err = filepath.Rel(n.projectDirectory, innerPackageName) + + if err != nil { + return "", err + } + + return filepath.Join(rootPackageName, innerPackageName), nil +} + +func (n *NodeNamer) GetPackageFilename(path string) (string, error) { + path, err := filepath.Rel(n.projectDirectory, path) + + if err != nil { + return "", err + } + + packageName, err := n.GetPackageName(path) + + if err != nil { + return "", err + } + + fileName, err := util.GetPathWithOnlyFilename(filepath.Join(n.projectDirectory, path)) + if err != nil { + return "", err + } + + return filepath.Join(packageName, fileName), nil +} + +func (n *NodeNamer) GetPackageStructName(path string, structName string) (string, error) { + // Validate if structName has in path + pathValidate := strings.Replace(path, "github.com/KoNekoD/go-deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/", 1) + nodes, err := parser.ParseFile(token.NewFileSet(), pathValidate, nil, 0) + if err != nil { + panic(err) + } + if nodes.Scope.Lookup(structName) == nil { + panic("1") + } + + packageFilename, err := n.GetPackageFilename(path) + + if err != nil { + return "", err + } + + return fmt.Sprintf("%s %s", packageFilename, structName), err +} + +func (n *NodeNamer) GetPackageFunctionName(path string, functionName string) (string, error) { + packageFilename, err := n.GetPackageFilename(path) + + if err != nil { + return "", err + } + + return fmt.Sprintf("%s %s", packageFilename, functionName), err +} + +func (n *NodeNamer) GetPackageStructFunctionName(path string, structName string, functionName string) (string, error) { + packageStructName, err := n.GetPackageStructName(path, structName) + + if err != nil { + return "", err + } + + return fmt.Sprintf("%s::%s", packageStructName, functionName), err +} diff --git a/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go b/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go new file mode 100644 index 0000000..34418ff --- /dev/null +++ b/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go @@ -0,0 +1,19 @@ +package node_namer_test + +import ( + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/test_container_provider" + "testing" +) + +func TestOk(t *testing.T) { + namer := test_container_provider.ProvideTestContainerService("NodeNamer").(*node_namer.NodeNamer) + + name, err := namer.GetRootPackageName("pkg/supportive/console/application") + + if err != nil { + t.Error(err) + } + + t.Log(name) +} diff --git a/pkg/core/ast/parser/type_resolver.go b/pkg/core/ast/parser/type_resolver.go index 1dddf22..cb27361 100644 --- a/pkg/core/ast/parser/type_resolver.go +++ b/pkg/core/ast/parser/type_resolver.go @@ -1,14 +1,22 @@ package parser import ( + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" "go/ast" + "go/parser" + "go/token" + "golang.org/x/exp/maps" + "strings" ) type TypeResolver struct { + nodeNamer *node_namer.NodeNamer } -func NewTypeResolver() *TypeResolver { - return &TypeResolver{} +func NewTypeResolver(nodeNamer *node_namer.NodeNamer) *TypeResolver { + return &TypeResolver{ + nodeNamer: nodeNamer, + } } func (r *TypeResolver) ResolvePHPParserTypes(typeScope *TypeScope, nodes ...ast.Expr) []string { @@ -59,7 +67,8 @@ func (r *TypeResolver) resolveIdent(scope *TypeScope, v *ast.Ident) []string { resolved := scope.GetUse(v.Name) if resolved == nil { - return make([]string, 0) + // TODO: Добавить проверку, что такой модуль есть в go.mod или давать ошибку + return make([]string, 0) // Костыль } return []string{*resolved} @@ -67,7 +76,52 @@ func (r *TypeResolver) resolveIdent(scope *TypeScope, v *ast.Ident) []string { func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope, v *ast.SelectorExpr) []string { if ident, ok := v.X.(*ast.Ident); ok { - return r.resolveIdent(scope, ident) + xResolved := r.resolveIdent(scope, ident) + + if len(xResolved) == 0 { + // TODO: Добавить проверку на наличие в go.mod + return make([]string, 0) // TODO: ВАЖНО! Сейчас ПОЛНОСТЬЮ исключены ВСЕ внешние пакеты, нужно это исправить + } + + if len(xResolved) != 1 { + panic("impossible") // TODO: Possible when by import declared another package name + } + + selResolved := v.Sel.Name + + xResolvedZero := xResolved[0] + + pathValidate := strings.Replace(xResolvedZero, "github.com/KoNekoD/go-deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/", 1) + parseDir, err := parser.ParseDir(token.NewFileSet(), pathValidate, nil, 0) + if len(maps.Keys(parseDir)) != 1 { + // TODO: Add checking in go.mod, если там нет такого модуля - ошибка + return make([]string, 0) // Костыль + } + if err != nil { + panic(err) + } + foundFileName := "" + firstKey := maps.Keys(parseDir)[0] + for filename, file := range parseDir[firstKey].Files { + if file.Scope.Lookup(selResolved) != nil { + foundFileName = filename + break + } + } + + if foundFileName == "" { + r.resolveIdent(scope, ident) + panic("2") + } + + // Validate + pkgstrctnme, err := r.nodeNamer.GetPackageStructName(foundFileName, selResolved) + + if err != nil { + panic(err) + } + + return []string{pkgstrctnme} // TODO: Rework to Namer } return r.resolvePHPParserType(scope, v.X) diff --git a/pkg/core/ast/parser/type_scope.go b/pkg/core/ast/parser/type_scope.go index 8673113..8a037d0 100644 --- a/pkg/core/ast/parser/type_scope.go +++ b/pkg/core/ast/parser/type_scope.go @@ -48,7 +48,10 @@ func (s *TypeScope) GetUse(classNameOrAlias string) *string { } for key, value := range s.Uses { - if strings.HasSuffix(key, classNameOrAlias) { + // split by / and check last element + splittedKeys := strings.Split(key, "/") + lastSplittedKey := splittedKeys[len(splittedKeys)-1] + if lastSplittedKey == classNameOrAlias { return &value } } diff --git a/pkg/core/dependency/dependency_resolver/dependency_resolver.go b/pkg/core/dependency/dependency_resolver/dependency_resolver.go index 3512264..7c693fa 100644 --- a/pkg/core/dependency/dependency_resolver/dependency_resolver.go +++ b/pkg/core/dependency/dependency_resolver/dependency_resolver.go @@ -14,10 +14,10 @@ type DependencyResolver struct { config *config.AnalyserConfig inheritanceFlattener *dependency.InheritanceFlattener emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface - eventDispatcher util.EventDispatcherInterface + eventDispatcher event_dispatcher_interface.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *config.AnalyserConfig, emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher util.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *config.AnalyserConfig, emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/supportive/console/command/analyse_command.go b/pkg/supportive/console/command/analyse_command.go index 7e1aa92..3098f53 100644 --- a/pkg/supportive/console/command/analyse_command.go +++ b/pkg/supportive/console/command/analyse_command.go @@ -16,7 +16,7 @@ import ( // AnalyseCommand - Analyses your project using the provided depfile type AnalyseCommand struct { runner *AnalyseRunner - dispatcher util.EventDispatcherInterface + dispatcher event_dispatcher_interface.EventDispatcherInterface formatterProvider *output_formatter2.FormatterProvider verboseBoolFlag bool debugBoolFlag bool @@ -24,7 +24,7 @@ type AnalyseCommand struct { progressSubscriber *subscriber.ProgressSubscriber } -func NewAnalyseCommand(runner *AnalyseRunner, dispatcher util.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber) *AnalyseCommand { +func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, diff --git a/pkg/supportive/dependency_injection/container_builder/container_builder.go b/pkg/supportive/dependency_injection/container_builder/container_builder.go index 2594377..e01519b 100644 --- a/pkg/supportive/dependency_injection/container_builder/container_builder.go +++ b/pkg/supportive/dependency_injection/container_builder/container_builder.go @@ -12,6 +12,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" "github.com/KoNekoD/go-deptrac/pkg/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" @@ -31,7 +32,7 @@ type ContainerBuilder struct { ProjectDirectory string CacheFile *string Configuration *deptrac_config.DeptracConfig - EventDispatcher util.EventDispatcherInterface + EventDispatcher event_dispatcher_interface.EventDispatcherInterface FileInputCollector input_collector.InputCollectorInterface YmlFileLoader *file.YmlFileLoader Dumper *file.Dumper @@ -78,6 +79,7 @@ type ContainerBuilder struct { FormatterConfiguration *configuration.FormatterConfiguration AnalyseRunner *command.AnalyseRunner AnalyseCommand *command.AnalyseCommand + NodeNamer *node_namer.NodeNamer } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go b/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go index 4be9291..9e2c23d 100644 --- a/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go +++ b/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go @@ -1,4 +1,4 @@ -package util +package event_dispatcher_interface type EventDispatcherInterface interface { DispatchEvent(event interface{}) error diff --git a/pkg/supportive/dependency_injection/services.go b/pkg/supportive/dependency_injection/services.go index 5e59f82..bf92c8d 100644 --- a/pkg/supportive/dependency_injection/services.go +++ b/pkg/supportive/dependency_injection/services.go @@ -17,6 +17,7 @@ import ( Cache2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" "github.com/KoNekoD/go-deptrac/pkg/core/dependency" "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" "github.com/KoNekoD/go-deptrac/pkg/core/dependency/emitter" @@ -53,6 +54,8 @@ func Services(builder *container_builder.ContainerBuilder) error { timeStopwatch := time_stopwatch.NewStopwatch() + nodeNamer := node_namer.NewNodeNamer(projectDirectory) + /* * Utilities */ @@ -77,7 +80,7 @@ func Services(builder *container_builder.ContainerBuilder) error { if builder.AstFileReferenceCacheInterface == nil { builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache } - typeResolver := parser.NewTypeResolver() + typeResolver := parser.NewTypeResolver(nodeNamer) referenceExtractors := []extractors.ReferenceExtractorInterface{ /** @@ -94,7 +97,7 @@ func Services(builder *container_builder.ContainerBuilder) error { */ } - nikicPhpParser := nikic_php_parser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, referenceExtractors) + nikicPhpParser := nikic_php_parser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser astLoader := ast.NewAstLoader(parserInterface, eventDispatcher) @@ -295,6 +298,7 @@ func Services(builder *container_builder.ContainerBuilder) error { builder.FormatterConfiguration = formatterConfiguration builder.AnalyseRunner = analyseRunner builder.AnalyseCommand = analyseCommand + builder.NodeNamer = nodeNamer return nil } diff --git a/pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go b/pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go new file mode 100644 index 0000000..cd2b569 --- /dev/null +++ b/pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go @@ -0,0 +1,29 @@ +package test_container_provider + +import ( + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection" + "os" + "reflect" +) + +func ProvideTestContainer() *dependency_injection.ServiceContainerBuilder { + currentWorkingDirectory, _ := os.Getwd() + config := currentWorkingDirectory + application.DirectorySeparator + "deptrac.yaml" + cache := "" + + factory := dependency_injection.NewServiceContainerBuilder(currentWorkingDirectory) + factory, _ = factory.WithConfig(config) + + _, _ = factory.Build(&cache, false) + + return factory +} + +func ProvideTestContainerService(containerProperty string) interface{} { + container := ProvideTestContainer().GetContainer() + + refProps := reflect.ValueOf(container).Elem().FieldByName(containerProperty) + + return refProps.Interface() +} diff --git a/pkg/supportive/output_formatter/table_output_formatter.go b/pkg/supportive/output_formatter/table_output_formatter.go index d2e551b..8c3f404 100644 --- a/pkg/supportive/output_formatter/table_output_formatter.go +++ b/pkg/supportive/output_formatter/table_output_formatter.go @@ -94,7 +94,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *result.SkippedViolation func (t *TableOutputFormatter) violationRow(rule *result.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) - message += fmt.Sprintf("\n%s (%s -> %s)", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) + message += fmt.Sprintf("\n%s (To fix %s(You need to add to the array by this key) -> %s(That value needs to be added to that array))", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { message += "\n" + t.formatMultilinePath(gotDependency) } diff --git a/pkg/test_projects/examples/simple-cleanarch/run_test.go b/pkg/test_projects/examples/run_test.go similarity index 88% rename from pkg/test_projects/examples/simple-cleanarch/run_test.go rename to pkg/test_projects/examples/run_test.go index cdef796..9590867 100644 --- a/pkg/test_projects/examples/simple-cleanarch/run_test.go +++ b/pkg/test_projects/examples/run_test.go @@ -1,4 +1,4 @@ -package simple_cleanarch +package examples import ( "flag" @@ -8,7 +8,7 @@ import ( "testing" ) -func TestRun(t *testing.T) { +func TestRunSimpleCleanarch(t *testing.T) { os.Args = []string{ "", "--config-file=pkg/test_projects/examples/simple-cleanarch/depfile.yaml", diff --git a/pkg/test_projects/examples/simple-cleanarch/app/app.go b/pkg/test_projects/examples/simple-cleanarch/app/app.go index bb6ad2c..5f2d48a 100644 --- a/pkg/test_projects/examples/simple-cleanarch/app/app.go +++ b/pkg/test_projects/examples/simple-cleanarch/app/app.go @@ -1,7 +1,7 @@ package app import ( - "github.com/KoNekoD/go-deptrac/pkg/test_projects/examples/simple-cleanarch/domain" + "simple-cleanarch/domain" ) type App interface { diff --git a/pkg/test_projects/examples/simple-cleanarch/go.mod b/pkg/test_projects/examples/simple-cleanarch/go.mod new file mode 100644 index 0000000..afb5361 --- /dev/null +++ b/pkg/test_projects/examples/simple-cleanarch/go.mod @@ -0,0 +1,3 @@ +module simple-cleanarch + +go 1.22 diff --git a/pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go b/pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go index 41da554..abac271 100644 --- a/pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go +++ b/pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go @@ -1,7 +1,7 @@ package infrastructure import ( - "github.com/KoNekoD/go-deptrac/pkg/test_projects/examples/simple-cleanarch/domain" + "simple-cleanarch/domain" ) type kvStore struct { diff --git a/pkg/util/GetPathWithOnlytFiename.go b/pkg/util/GetPathWithOnlytFiename.go new file mode 100644 index 0000000..f43bc99 --- /dev/null +++ b/pkg/util/GetPathWithOnlytFiename.go @@ -0,0 +1,22 @@ +package util + +import ( + "errors" + "os" + "path/filepath" +) + +func GetPathWithOnlyFilename(path string) (string, error) { + pathStat, err := os.Stat(path) + if err != nil { + return "", err + } + + if pathStat.IsDir() { + return "", errors.New("required path is a file") + } + + path = filepath.Base(path) + + return path, nil +} diff --git a/pkg/util/GetPathWithoutFiename.go b/pkg/util/GetPathWithoutFiename.go new file mode 100644 index 0000000..6daaa94 --- /dev/null +++ b/pkg/util/GetPathWithoutFiename.go @@ -0,0 +1,19 @@ +package util + +import ( + "os" + "path/filepath" +) + +func GetPathWithoutFilename(path string) (string, error) { + pathStat, err := os.Stat(path) + if err != nil { + return "", err + } + + if !pathStat.IsDir() { + path = filepath.Dir(path) + } + + return path, nil +} From 0dc7bb4f8ceaae13e809073b1b683b5479c88768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Sat, 24 Aug 2024 19:08:38 +0300 Subject: [PATCH 06/40] fix: todos --- .../analyser/dependency_layers_analyser.go | 15 --- .../analyser/layer_dependencies_analyser.go | 15 --- pkg/core/analyser/layer_for_token_analyser.go | 13 --- .../console/command/analyse_command.go | 53 ++--------- .../console/symfony/symfony_output.go | 8 +- .../container_builder/container_builder.go | 1 + .../dependency_injection/services.go | 92 ++++++++++++++----- 7 files changed, 79 insertions(+), 118 deletions(-) diff --git a/pkg/core/analyser/dependency_layers_analyser.go b/pkg/core/analyser/dependency_layers_analyser.go index 144d5b5..9bf5497 100644 --- a/pkg/core/analyser/dependency_layers_analyser.go +++ b/pkg/core/analyser/dependency_layers_analyser.go @@ -103,20 +103,5 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e return nil, errDispatch } - //TODO: Implement - //} catch (InvalidEmitterConfigurationException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidEmitterConfiguration($e); - //} catch (UnrecognizedTokenException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::unrecognizedToken($e); - //} catch (InvalidLayerDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidLayerDefinition($e); - //} catch (InvalidCollectorDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidCollectorDefinition($e); - //} catch (AstException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::failedAstParsing($e); - //} catch (CouldNotParseFileException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::couldNotParseFile($e); - //} - return event.GetResult(), nil } diff --git a/pkg/core/analyser/layer_dependencies_analyser.go b/pkg/core/analyser/layer_dependencies_analyser.go index 5efa92f..23d1040 100644 --- a/pkg/core/analyser/layer_dependencies_analyser.go +++ b/pkg/core/analyser/layer_dependencies_analyser.go @@ -61,20 +61,5 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s } } - // TODO: Add - //} catch (InvalidEmitterConfigurationException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidEmitterConfiguration($e); - //} catch (UnrecognizedTokenException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::unrecognizedToken($e); - //} catch (InvalidLayerDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidLayerDefinition($e); - //} catch (InvalidCollectorDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidCollectorDefinition($e); - //} catch (AstException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::failedAstParsing($e); - //} catch (CouldNotParseFileException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::couldNotParseFile($e); - //} - return uncoveredResult, nil } diff --git a/pkg/core/analyser/layer_for_token_analyser.go b/pkg/core/analyser/layer_for_token_analyser.go index af7508f..e265d3f 100644 --- a/pkg/core/analyser/layer_for_token_analyser.go +++ b/pkg/core/analyser/layer_for_token_analyser.go @@ -35,19 +35,6 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType To return nil, err } - // TODO: Add - // } catch (UnrecognizedTokenException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::unrecognizedToken($e); - // } catch (InvalidLayerDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidLayerDefinition($e); - // } catch (InvalidCollectorDefinitionException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::invalidCollectorDefinition($e); - // } catch (AstException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::failedAstParsing($e); - // } catch (CouldNotParseFileException $e) { - // throw \Qossmic\Deptrac\Core\SetAnalyser\AnalyserException::couldNotParseFile($e); - // } - switch tokenType { case TokenTypeClassLike: return a.findLayersForReferences(astMap.GetClassLikeReferences(), tokenName, astMap) diff --git a/pkg/supportive/console/command/analyse_command.go b/pkg/supportive/console/command/analyse_command.go index 3098f53..4a6d2be 100644 --- a/pkg/supportive/console/command/analyse_command.go +++ b/pkg/supportive/console/command/analyse_command.go @@ -1,16 +1,10 @@ package command import ( - "flag" - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console" "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" - "strings" ) // AnalyseCommand - Analyses your project using the provided depfile @@ -22,9 +16,10 @@ type AnalyseCommand struct { debugBoolFlag bool consoleSubscriber *subscriber.ConsoleSubscriber progressSubscriber *subscriber.ProgressSubscriber + analyseOptions *AnalyseOptions } -func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber) *AnalyseCommand { +func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber, analyseOptions *AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, @@ -33,56 +28,20 @@ func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interf debugBoolFlag: debugBoolFlag, consoleSubscriber: consoleSubscriber, progressSubscriber: progressSubscriber, + analyseOptions: analyseOptions, } } func (c *AnalyseCommand) Run() error { - knownFormattersStr := make([]string, 0) - for _, formatterType := range c.formatterProvider.GetKnownFormatters() { - knownFormattersStr = append(knownFormattersStr, fmt.Sprintf("\"%s\"", formatterType)) - } - - var ( - formatterUsagePossible = strings.Join(knownFormattersStr, ", ") - formatterUsage = fmt.Sprintf("Format in which to print the result of the analysis. Possible: [\"%s\"]", formatterUsagePossible) - formatter = flag.String("formatter", string(output_formatter.Table), formatterUsage) - - output = flag.String("output", "", "Output file path for formatter (if applicable)") - noProgress = flag.Bool("no-progress", false, "Do not show progress bar") - reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") - reportUncovered = flag.Bool("report-uncovered", false, "Report uncovered dependencies") - failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency is found") - ) - symfonyOutput := symfony.NewSymfonyOutput(symfony.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) - if formatter == nil { - formatterTmp := string(getDefaultFormatter()) - formatter = &formatterTmp - } - - options := NewAnalyseOptions( - nil != noProgress && *noProgress == true, - *formatter, - output, - nil != reportSkipped && *reportSkipped == true, - nil != reportUncovered && *reportUncovered == true, - nil != failOnUncovered && *failOnUncovered == true, - ) - - event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) + // Moved to services + //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) - err := c.runner.Run(options, symfonyOutput) + err := c.runner.Run(c.analyseOptions, symfonyOutput) if err != nil { return err } return nil } - -func getDefaultFormatter() output_formatter.OutputFormatterType { - if console.NewEnv().GetEnv("GITHUB_ACTIONS") != "" { - return output_formatter2.NewGithubActionsOutputFormatter().GetName() - } - return output_formatter2.NewTableOutputFormatter().GetName() -} diff --git a/pkg/supportive/console/symfony/symfony_output.go b/pkg/supportive/console/symfony/symfony_output.go index 1e5a8ff..49e73f5 100644 --- a/pkg/supportive/console/symfony/symfony_output.go +++ b/pkg/supportive/console/symfony/symfony_output.go @@ -1,8 +1,8 @@ package symfony import ( - "fmt" "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/gookit/color" ) type SymfonyOutput struct { @@ -16,15 +16,15 @@ func NewSymfonyOutput(style output_formatter.OutputStyleInterface) *SymfonyOutpu } func (o *SymfonyOutput) WriteFormatted(message string) { - fmt.Print(message) + color.Print(message) } func (o *SymfonyOutput) WriteLineFormatted(message output_formatter.StringOrArrayOfStrings) { - fmt.Println(message.ToString()) + color.Println(message.ToString()) } func (o *SymfonyOutput) WriteRaw(message string) { - fmt.Println(message) + color.Println(message) } func (o *SymfonyOutput) GetStyle() output_formatter.OutputStyleInterface { diff --git a/pkg/supportive/dependency_injection/container_builder/container_builder.go b/pkg/supportive/dependency_injection/container_builder/container_builder.go index e01519b..f1e648d 100644 --- a/pkg/supportive/dependency_injection/container_builder/container_builder.go +++ b/pkg/supportive/dependency_injection/container_builder/container_builder.go @@ -80,6 +80,7 @@ type ContainerBuilder struct { AnalyseRunner *command.AnalyseRunner AnalyseCommand *command.AnalyseCommand NodeNamer *node_namer.NodeNamer + AnalyseOptions *command.AnalyseOptions } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/supportive/dependency_injection/services.go b/pkg/supportive/dependency_injection/services.go index bf92c8d..14fde52 100644 --- a/pkg/supportive/dependency_injection/services.go +++ b/pkg/supportive/dependency_injection/services.go @@ -2,6 +2,7 @@ package dependency_injection import ( "flag" + "fmt" "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" @@ -24,6 +25,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" "github.com/KoNekoD/go-deptrac/pkg/core/layer" "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" + "github.com/KoNekoD/go-deptrac/pkg/supportive/console" "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" @@ -38,13 +40,22 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" "github.com/elliotchance/orderedmap/v2" + "strings" ) +func getDefaultFormatter() output_formatter.OutputFormatterType { + if console.NewEnv().GetEnv("GITHUB_ACTIONS") != "" { + return output_formatter2.NewGithubActionsOutputFormatter().GetName() + } + return output_formatter2.NewTableOutputFormatter().GetName() +} + func Services(builder *container_builder.ContainerBuilder) error { + cacheableFileSubscriber := builder.CacheableFileSubscriber builderConfiguration := builder.Configuration projectDirectory := builder.ProjectDirectory - verboseBoolFlag := flag.Bool("verbose", false, "Verbose mode") + verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") debugBoolFlag := flag.Bool("debug", false, "Debug mode") style := symfony.NewStyle( verboseBoolFlag != nil && *verboseBoolFlag == true, @@ -159,6 +170,60 @@ func Services(builder *container_builder.ContainerBuilder) error { event_subscriber_interface_map_reg.Reg(postCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) } + /* + * OutputFormatter + */ + outputFormatter := map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface{ + output_formatter.Table: output_formatter2.NewTableOutputFormatter(), + output_formatter.GithubActions: output_formatter2.NewGithubActionsOutputFormatter(), + // TODO: + // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter'); + // $services->set(JUnitOutputFormatter::class)->tag('output_formatter'); + // $services->set(XMLOutputFormatter::class)->tag('output_formatter'); + // $services->set(BaselineOutputFormatter::class)->tag('output_formatter'); + // $services->set(JsonOutputFormatter::class)->tag('output_formatter'); + // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter'); + // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter'); + // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter'); + // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter'); + // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter'); + // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter'); + } + formatterProvider := output_formatter2.NewFormatterProvider(outputFormatter) + formatterConfiguration := configuration.NewFormatterConfiguration(builderConfiguration.Formatters) + + // + knownFormattersStr := make([]string, 0) + for _, formatterType := range formatterProvider.GetKnownFormatters() { + knownFormattersStr = append(knownFormattersStr, fmt.Sprintf("\"%s\"", formatterType)) + } + var ( + formatterUsagePossible = strings.Join(knownFormattersStr, ", ") + formatterUsage = fmt.Sprintf("Format in which to print the result of the analysis. Possible: [\"%s\"]", formatterUsagePossible) + formatter = flag.String("formatter", string(output_formatter.Table), formatterUsage) + output = flag.String("output", "", "Output file path for formatter (if applicable)") + noProgress = flag.Bool("no-progress", false, "Do not show progress bar") + reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") + reportUncovered = flag.Bool("report-uncovered", false, "Report uncovered dependencies") + failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency is found") + ) + + if formatter == nil { + formatterTmp := string(getDefaultFormatter()) + formatter = &formatterTmp + } + + analyseOptions := command.NewAnalyseOptions( + nil != noProgress && *noProgress == true, + *formatter, + output, + nil != reportSkipped && *reportSkipped == true, + nil != reportUncovered && *reportUncovered == true, + nil != failOnUncovered && *failOnUncovered == true, + ) + event_subscriber_interface_map_reg.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + // + /* * Layer */ @@ -212,33 +277,11 @@ func Services(builder *container_builder.ContainerBuilder) error { layerDependenciesAnalyser := analyser.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) rulesetUsageAnalyser := analyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) - /* - * OutputFormatter - */ - outputFormatter := map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface{ - output_formatter.Table: output_formatter2.NewTableOutputFormatter(), - output_formatter.GithubActions: output_formatter2.NewGithubActionsOutputFormatter(), - // TODO: - // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter'); - // $services->set(JUnitOutputFormatter::class)->tag('output_formatter'); - // $services->set(XMLOutputFormatter::class)->tag('output_formatter'); - // $services->set(BaselineOutputFormatter::class)->tag('output_formatter'); - // $services->set(JsonOutputFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter'); - // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter'); - // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter'); - } - formatterProvider := output_formatter2.NewFormatterProvider(outputFormatter) - formatterConfiguration := configuration.NewFormatterConfiguration(builderConfiguration.Formatters) - /* * Console */ analyseRunner := command.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) - analyseCommand := command.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber) + analyseCommand := command.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) // TODO: other commands // $services->set(InitCommand::class)->autowire()->tag('console.command'); @@ -299,6 +342,7 @@ func Services(builder *container_builder.ContainerBuilder) error { builder.AnalyseRunner = analyseRunner builder.AnalyseCommand = analyseCommand builder.NodeNamer = nodeNamer + builder.AnalyseOptions = analyseOptions return nil } From cb7e9882a5a83d5a8d884257762191276955382b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Sat, 24 Aug 2024 19:12:54 +0300 Subject: [PATCH 07/40] chore: prepare to flat --- .../services/deptrac_template.yaml => deptrac_template.yaml | 0 {pkg/test_projects/examples => examples}/run_test.go | 0 .../examples => examples}/simple-cleanarch/app/app.go | 0 .../examples => examples}/simple-cleanarch/depfile.yaml | 0 .../examples => examples}/simple-cleanarch/domain/user.go | 0 {pkg/test_projects/examples => examples}/simple-cleanarch/go.mod | 0 .../simple-cleanarch/infrastructure/kv-store.go | 0 .../simple-invalid-mvc/controller/controller.go | 0 .../examples => examples}/simple-invalid-mvc/depfile.yaml | 0 .../simple-invalid-mvc/repository/repository.go | 0 .../examples => examples}/simple-invalid-mvc/run_test.go | 0 .../examples => examples}/simple-mvc/controller/controller.go | 0 {pkg/test_projects/examples => examples}/simple-mvc/depfile.yaml | 0 .../examples => examples}/simple-mvc/repository/repository.go | 0 {pkg/test_projects/examples => examples}/simple-mvc/run_test.go | 0 .../examples => examples}/simple-mvc/service/service.go | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename pkg/config/services/deptrac_template.yaml => deptrac_template.yaml (100%) rename {pkg/test_projects/examples => examples}/run_test.go (100%) rename {pkg/test_projects/examples => examples}/simple-cleanarch/app/app.go (100%) rename {pkg/test_projects/examples => examples}/simple-cleanarch/depfile.yaml (100%) rename {pkg/test_projects/examples => examples}/simple-cleanarch/domain/user.go (100%) rename {pkg/test_projects/examples => examples}/simple-cleanarch/go.mod (100%) rename {pkg/test_projects/examples => examples}/simple-cleanarch/infrastructure/kv-store.go (100%) rename {pkg/test_projects/examples => examples}/simple-invalid-mvc/controller/controller.go (100%) rename {pkg/test_projects/examples => examples}/simple-invalid-mvc/depfile.yaml (100%) rename {pkg/test_projects/examples => examples}/simple-invalid-mvc/repository/repository.go (100%) rename {pkg/test_projects/examples => examples}/simple-invalid-mvc/run_test.go (100%) rename {pkg/test_projects/examples => examples}/simple-mvc/controller/controller.go (100%) rename {pkg/test_projects/examples => examples}/simple-mvc/depfile.yaml (100%) rename {pkg/test_projects/examples => examples}/simple-mvc/repository/repository.go (100%) rename {pkg/test_projects/examples => examples}/simple-mvc/run_test.go (100%) rename {pkg/test_projects/examples => examples}/simple-mvc/service/service.go (100%) diff --git a/pkg/config/services/deptrac_template.yaml b/deptrac_template.yaml similarity index 100% rename from pkg/config/services/deptrac_template.yaml rename to deptrac_template.yaml diff --git a/pkg/test_projects/examples/run_test.go b/examples/run_test.go similarity index 100% rename from pkg/test_projects/examples/run_test.go rename to examples/run_test.go diff --git a/pkg/test_projects/examples/simple-cleanarch/app/app.go b/examples/simple-cleanarch/app/app.go similarity index 100% rename from pkg/test_projects/examples/simple-cleanarch/app/app.go rename to examples/simple-cleanarch/app/app.go diff --git a/pkg/test_projects/examples/simple-cleanarch/depfile.yaml b/examples/simple-cleanarch/depfile.yaml similarity index 100% rename from pkg/test_projects/examples/simple-cleanarch/depfile.yaml rename to examples/simple-cleanarch/depfile.yaml diff --git a/pkg/test_projects/examples/simple-cleanarch/domain/user.go b/examples/simple-cleanarch/domain/user.go similarity index 100% rename from pkg/test_projects/examples/simple-cleanarch/domain/user.go rename to examples/simple-cleanarch/domain/user.go diff --git a/pkg/test_projects/examples/simple-cleanarch/go.mod b/examples/simple-cleanarch/go.mod similarity index 100% rename from pkg/test_projects/examples/simple-cleanarch/go.mod rename to examples/simple-cleanarch/go.mod diff --git a/pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go b/examples/simple-cleanarch/infrastructure/kv-store.go similarity index 100% rename from pkg/test_projects/examples/simple-cleanarch/infrastructure/kv-store.go rename to examples/simple-cleanarch/infrastructure/kv-store.go diff --git a/pkg/test_projects/examples/simple-invalid-mvc/controller/controller.go b/examples/simple-invalid-mvc/controller/controller.go similarity index 100% rename from pkg/test_projects/examples/simple-invalid-mvc/controller/controller.go rename to examples/simple-invalid-mvc/controller/controller.go diff --git a/pkg/test_projects/examples/simple-invalid-mvc/depfile.yaml b/examples/simple-invalid-mvc/depfile.yaml similarity index 100% rename from pkg/test_projects/examples/simple-invalid-mvc/depfile.yaml rename to examples/simple-invalid-mvc/depfile.yaml diff --git a/pkg/test_projects/examples/simple-invalid-mvc/repository/repository.go b/examples/simple-invalid-mvc/repository/repository.go similarity index 100% rename from pkg/test_projects/examples/simple-invalid-mvc/repository/repository.go rename to examples/simple-invalid-mvc/repository/repository.go diff --git a/pkg/test_projects/examples/simple-invalid-mvc/run_test.go b/examples/simple-invalid-mvc/run_test.go similarity index 100% rename from pkg/test_projects/examples/simple-invalid-mvc/run_test.go rename to examples/simple-invalid-mvc/run_test.go diff --git a/pkg/test_projects/examples/simple-mvc/controller/controller.go b/examples/simple-mvc/controller/controller.go similarity index 100% rename from pkg/test_projects/examples/simple-mvc/controller/controller.go rename to examples/simple-mvc/controller/controller.go diff --git a/pkg/test_projects/examples/simple-mvc/depfile.yaml b/examples/simple-mvc/depfile.yaml similarity index 100% rename from pkg/test_projects/examples/simple-mvc/depfile.yaml rename to examples/simple-mvc/depfile.yaml diff --git a/pkg/test_projects/examples/simple-mvc/repository/repository.go b/examples/simple-mvc/repository/repository.go similarity index 100% rename from pkg/test_projects/examples/simple-mvc/repository/repository.go rename to examples/simple-mvc/repository/repository.go diff --git a/pkg/test_projects/examples/simple-mvc/run_test.go b/examples/simple-mvc/run_test.go similarity index 100% rename from pkg/test_projects/examples/simple-mvc/run_test.go rename to examples/simple-mvc/run_test.go diff --git a/pkg/test_projects/examples/simple-mvc/service/service.go b/examples/simple-mvc/service/service.go similarity index 100% rename from pkg/test_projects/examples/simple-mvc/service/service.go rename to examples/simple-mvc/service/service.go From 61b1eb92dffa793ec29825b2506b0e5529d8677e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Mon, 16 Sep 2024 20:28:38 +0300 Subject: [PATCH 08/40] chore: prepare to flat --- go.mod | 7 + go.sum | 16 ++ pkg/contract/ast/file_occurrence.go | 4 +- .../config/deptrac_config/deptrac_config.go | 10 +- .../config/formatter/graphviz_config.go | 50 ++-- .../config/formatter/mermaid_js_config.go | 22 +- .../output_formatter/output_formatter_type.go | 1 + .../input_collector/file_input_collector.go | 1 + .../console/command/ChangedFilesCommand.php | 41 --- .../console/command/ChangedFilesRunner.php | 87 ------ .../console/command/changed_files_command.go | 51 ++++ .../console/command/changed_files_runner.go | 82 ++++++ .../dependency_injection/Configuration.php | 85 ------ .../dependency_injection/DeptracExtension.php | 64 ----- .../CacheFileException/CacheFileException.php | 15 -- .../CannotLoadConfiguration.php | 22 -- .../InvalidServiceInLocatorException.php | 18 -- .../ServiceContainerBuilder.php | 141 ---------- pkg/supportive/dependency_injection/cache.php | 20 -- .../dependency_injection/services.php | 252 ------------------ .../BaselineOutputFormatter.php | 59 ---- .../CodeclimateOutputFormatter.php | 133 --------- .../ConsoleOutputFormatter.php | 110 -------- .../GraphVizOutputDisplayFormatter.php | 42 --- .../GraphVizOutputDotFormatter.php | 28 -- .../GraphVizOutputFormatter.php | 194 -------------- .../GraphVizOutputHtmlFormatter.php | 44 --- .../GraphVizOutputImageFormatter.php | 44 --- .../output_formatter/JUnitOutputFormatter.php | 192 ------------- .../output_formatter/JsonOutputFormatter.php | 117 -------- .../MermaidJSOutputFormatter.php | 95 ------- .../output_formatter/XMLOutputFormatter.php | 81 ------ .../baseline_output_formatter.go | 78 ++++++ .../codeclimate_output_formatter.go | 119 +++++++++ .../configuration_codeclimate.go | 20 +- .../configuration/configuration_graph_viz.go | 8 +- .../console_output_formatter.go | 160 +++++++++++ .../github_actions_output_formatter.go | 4 +- .../graph_viz_output_display_formatter.go | 58 ++++ .../graph_viz_output_dot_formatter.go | 48 ++++ .../graph_viz_output_formatter.go | 191 +++++++++++++ .../graph_viz_output_html_formatter.go | 68 +++++ .../graph_viz_output_image_formatter.go | 65 +++++ .../output_formatter/json_output_formatter.go | 147 ++++++++++ .../junit_output_formatter.go | 173 ++++++++++++ .../mermaid_js_output_formatter.go | 110 ++++++++ .../table_output_formatter.go | 6 +- .../output_formatter/xml_output_formatter.go | 119 +++++++++ pkg/util/AsPtr.go | 5 + 49 files changed, 1566 insertions(+), 1941 deletions(-) delete mode 100644 pkg/supportive/console/command/ChangedFilesCommand.php delete mode 100644 pkg/supportive/console/command/ChangedFilesRunner.php create mode 100644 pkg/supportive/console/command/changed_files_command.go create mode 100644 pkg/supportive/console/command/changed_files_runner.go delete mode 100644 pkg/supportive/dependency_injection/Configuration.php delete mode 100644 pkg/supportive/dependency_injection/DeptracExtension.php delete mode 100644 pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php delete mode 100644 pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php delete mode 100644 pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.php delete mode 100644 pkg/supportive/dependency_injection/ServiceContainerBuilder.php delete mode 100644 pkg/supportive/dependency_injection/cache.php delete mode 100644 pkg/supportive/dependency_injection/services.php delete mode 100644 pkg/supportive/output_formatter/BaselineOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/CodeclimateOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/ConsoleOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php delete mode 100644 pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php delete mode 100644 pkg/supportive/output_formatter/GraphVizOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php delete mode 100644 pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php delete mode 100644 pkg/supportive/output_formatter/JUnitOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/JsonOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/MermaidJSOutputFormatter.php delete mode 100644 pkg/supportive/output_formatter/XMLOutputFormatter.php create mode 100644 pkg/supportive/output_formatter/baseline_output_formatter.go create mode 100644 pkg/supportive/output_formatter/codeclimate_output_formatter.go create mode 100644 pkg/supportive/output_formatter/console_output_formatter.go create mode 100644 pkg/supportive/output_formatter/graph_viz_output_display_formatter.go create mode 100644 pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go create mode 100644 pkg/supportive/output_formatter/graph_viz_output_formatter.go create mode 100644 pkg/supportive/output_formatter/graph_viz_output_html_formatter.go create mode 100644 pkg/supportive/output_formatter/graph_viz_output_image_formatter.go create mode 100644 pkg/supportive/output_formatter/json_output_formatter.go create mode 100644 pkg/supportive/output_formatter/junit_output_formatter.go create mode 100644 pkg/supportive/output_formatter/mermaid_js_output_formatter.go create mode 100644 pkg/supportive/output_formatter/xml_output_formatter.go create mode 100644 pkg/util/AsPtr.go diff --git a/go.mod b/go.mod index 3dd82d6..98e8c53 100644 --- a/go.mod +++ b/go.mod @@ -20,8 +20,12 @@ require ( require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/charmbracelet/lipgloss v0.10.0 // indirect + github.com/fogleman/gg v1.3.0 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/goccy/go-graphviz v0.1.3 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect @@ -29,6 +33,9 @@ require ( github.com/muesli/reflow v0.3.0 // indirect github.com/muesli/termenv v0.15.2 // indirect github.com/rivo/uniseg v0.4.7 // indirect + github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + golang.org/x/image v0.14.0 // indirect golang.org/x/term v0.22.0 // indirect ) diff --git a/go.sum b/go.sum index f4ff21b..5fc3717 100644 --- a/go.sum +++ b/go.sum @@ -4,19 +4,28 @@ github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMt github.com/charmbracelet/lipgloss v0.10.0/go.mod h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE= github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM= github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/elliotchance/orderedmap/v2 v2.2.0 h1:7/2iwO98kYT4XkOjA9mBEIwvi4KpGB4cyHeOFOnj4Vk= github.com/elliotchance/orderedmap/v2 v2.2.0/go.mod h1:85lZyVbpGaGvHvnKa7Qhx7zncAdBIBq6u56Hb1PRU5Q= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/goccy/go-graphviz v0.1.3 h1:Pkt8y4FBnBNI9tfSobpoN5qy1qMNqRXPQYvLhaSUasY= +github.com/goccy/go-graphviz v0.1.3/go.mod h1:pMYpbAqJT10V8dzV1JN/g/wUlG/0imKPzn3ZsrchGCI= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jedib0t/go-pretty/v6 v6.5.9 h1:ACteMBRrrmm1gMsXe9PSTOClQ63IXDUt03H5U+UV8OU= github.com/jedib0t/go-pretty/v6 v6.5.9/go.mod h1:zbn98qrYlh95FIhwwsbIip0LYpwSG8SUOScs+v9/t0E= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= @@ -43,8 +52,13 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/schollz/progressbar/v3 v3.14.6 h1:GyjwcWBAf+GFDMLziwerKvpuS7ZF+mNTAXIB2aspiZs= github.com/schollz/progressbar/v3 v3.14.6/go.mod h1:Nrzpuw3Nl0srLY0VlTvC4V6RL50pcEymjy6qyJAaLa0= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= @@ -53,6 +67,8 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHg github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/pkg/contract/ast/file_occurrence.go b/pkg/contract/ast/file_occurrence.go index 48c154e..94efa32 100644 --- a/pkg/contract/ast/file_occurrence.go +++ b/pkg/contract/ast/file_occurrence.go @@ -2,10 +2,10 @@ package ast // FileOccurrence - Where in the file has the dependency occurred. type FileOccurrence struct { - Filepath string + FilePath string Line int } func NewFileOccurrence(filepath string, line int) *FileOccurrence { - return &FileOccurrence{Filepath: filepath, Line: line} + return &FileOccurrence{FilePath: filepath, Line: line} } diff --git a/pkg/contract/config/deptrac_config/deptrac_config.go b/pkg/contract/config/deptrac_config/deptrac_config.go index 87794c5..4680980 100644 --- a/pkg/contract/config/deptrac_config/deptrac_config.go +++ b/pkg/contract/config/deptrac_config/deptrac_config.go @@ -103,8 +103,8 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } formatterGraphvizConfig := formatter.CreateGraphvizConfig(). - PointsToGroup(formatterRaw["pointsToGroup"].(*bool)). - HiddenLayers(hiddenLayers...) + SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). + SetHiddenLayers(hiddenLayers...) formatters[formatter.FormatterTypeGraphvizConfig] = formatterGraphvizConfig @@ -120,11 +120,11 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - formatterGraphvizConfig.Groups(groupLayerName, groupLayer...) + formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) } case string(formatter.FormatterTypeMermaidJsConfig): formatterMermaidJsConfig := formatter.CreateMermaidJsConfig(). - Direction(formatterRaw["direction"].(string)) + SetDirection(formatterRaw["direction"].(string)) formatters[formatter.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig @@ -140,7 +140,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - formatterMermaidJsConfig.Groups(groupLayerName, groupLayer...) + formatterMermaidJsConfig.SetGroups(groupLayerName, groupLayer...) } } } diff --git a/pkg/contract/config/formatter/graphviz_config.go b/pkg/contract/config/formatter/graphviz_config.go index 85434dd..18fc93d 100644 --- a/pkg/contract/config/formatter/graphviz_config.go +++ b/pkg/contract/config/formatter/graphviz_config.go @@ -6,17 +6,27 @@ import ( type GraphvizConfig struct { name string - pointsToGroup bool - hiddenLayers []*config.Layer - groups map[string][]*config.Layer + PointToGroups bool + HiddenLayers []*config.Layer + Groups map[string][]*config.Layer +} + +func (g *GraphvizConfig) HiddenLayersNames() []string { + names := make([]string, 0) + + for _, layer := range g.HiddenLayers { + names = append(names, layer.Name) + } + + return names } func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", - pointsToGroup: false, - hiddenLayers: make([]*config.Layer, 0), - groups: make(map[string][]*config.Layer), + PointToGroups: false, + HiddenLayers: make([]*config.Layer, 0), + Groups: make(map[string][]*config.Layer), } } @@ -24,39 +34,39 @@ func CreateGraphvizConfig() *GraphvizConfig { return newGraphvizConfig() } -func (g *GraphvizConfig) PointsToGroup(pointsToGroup *bool) *GraphvizConfig { - if pointsToGroup == nil { +func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { + if pointToGroups == nil { pointsToGroupTmp := true - pointsToGroup = &pointsToGroupTmp + pointToGroups = &pointsToGroupTmp } - g.pointsToGroup = *pointsToGroup + g.PointToGroups = *pointToGroups return g } -func (g *GraphvizConfig) HiddenLayers(layerConfigs ...*config.Layer) *GraphvizConfig { - g.hiddenLayers = append(g.hiddenLayers, layerConfigs...) +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*config.Layer) *GraphvizConfig { + g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) Groups(name string, layerConfigs ...*config.Layer) *GraphvizConfig { - g.groups[name] = append(g.groups[name], layerConfigs...) +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*config.Layer) *GraphvizConfig { + g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } func (g *GraphvizConfig) ToArray() map[string]interface{} { output := make(map[string]interface{}) - if len(g.hiddenLayers) > 0 { - hiddenLayers := make([]string, len(g.hiddenLayers)) + if len(g.HiddenLayers) > 0 { + hiddenLayers := make([]string, len(g.HiddenLayers)) i := 0 - for _, config := range g.hiddenLayers { + for _, config := range g.HiddenLayers { hiddenLayers[i] = config.Name i++ } output["hidden_layers"] = hiddenLayers } - if len(g.groups) > 0 { + if len(g.Groups) > 0 { groups := make(map[string][]string) - for key, configs := range g.groups { + for key, configs := range g.Groups { layerNames := make([]string, len(configs)) i := 0 for _, layer := range configs { @@ -67,7 +77,7 @@ func (g *GraphvizConfig) ToArray() map[string]interface{} { } output["groups"] = groups } - output["point_to_groups"] = g.pointsToGroup + output["point_to_groups"] = g.PointToGroups return output } diff --git a/pkg/contract/config/formatter/mermaid_js_config.go b/pkg/contract/config/formatter/mermaid_js_config.go index 1180dea..64430cf 100644 --- a/pkg/contract/config/formatter/mermaid_js_config.go +++ b/pkg/contract/config/formatter/mermaid_js_config.go @@ -6,15 +6,15 @@ import ( type MermaidJsConfig struct { name string - direction string - groups map[string][]*config.Layer + Direction string + Groups map[string][]*config.Layer } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", - direction: "TD", - groups: make(map[string][]*config.Layer), + Direction: "TD", + Groups: make(map[string][]*config.Layer), } } @@ -22,23 +22,23 @@ func (m *MermaidJsConfig) GetName() FormatterType { return FormatterTypeMermaidJsConfig } -func (m *MermaidJsConfig) Direction(direction string) *MermaidJsConfig { - m.direction = direction +func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { + m.Direction = direction return m } -func (m *MermaidJsConfig) Groups(name string, layerConfigs ...*config.Layer) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*config.Layer) *MermaidJsConfig { for _, config := range layerConfigs { - m.groups[name] = append(m.groups[name], config) + m.Groups[name] = append(m.Groups[name], config) } return m } func (m *MermaidJsConfig) ToArray() map[string]interface{} { output := make(map[string]interface{}) - if len(m.groups) > 0 { + if len(m.Groups) > 0 { groups := make(map[string][]string) - for key, configs := range m.groups { + for key, configs := range m.Groups { layerNames := make([]string, len(configs)) i := 0 for _, layer := range configs { @@ -49,6 +49,6 @@ func (m *MermaidJsConfig) ToArray() map[string]interface{} { } output["groups"] = groups } - output["direction"] = m.direction + output["direction"] = m.Direction return output } diff --git a/pkg/contract/output_formatter/output_formatter_type.go b/pkg/contract/output_formatter/output_formatter_type.go index ddc2c79..7dd7f98 100644 --- a/pkg/contract/output_formatter/output_formatter_type.go +++ b/pkg/contract/output_formatter/output_formatter_type.go @@ -7,6 +7,7 @@ type OutputFormatterType string const ( GithubActions OutputFormatterType = "github-actions" Table OutputFormatterType = "table" + Baseline OutputFormatterType = "baseline" ) var availableOutputFormatters = []OutputFormatterType{ diff --git a/pkg/core/input_collector/file_input_collector.go b/pkg/core/input_collector/file_input_collector.go index 02c839e..8924511 100644 --- a/pkg/core/input_collector/file_input_collector.go +++ b/pkg/core/input_collector/file_input_collector.go @@ -12,6 +12,7 @@ import ( type FileInputCollector struct { paths []string excludedFilePatterns []string + // todo: типы не берутся из типов полей структур } func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string, basePath string) (InputCollectorInterface, error) { diff --git a/pkg/supportive/console/command/ChangedFilesCommand.php b/pkg/supportive/console/command/ChangedFilesCommand.php deleted file mode 100644 index 31aca8f..0000000 --- a/pkg/supportive/console/command/ChangedFilesCommand.php +++ /dev/null @@ -1,41 +0,0 @@ -addOption('with-dependencies', null, InputOption::VALUE_NONE, 'show dependent layers'); - $this->addArgument('files', InputArgument::REQUIRED | InputArgument::IS_ARRAY, 'List of changed files'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - \ini_set('memory_limit', '-1'); - $symfonyOutput = new SymfonyOutput($output, new Style(new SymfonyStyle($input, $output))); - try { - /** @var list $files */ - $files = $input->getArgument('files'); - $this->runner->run($files, (bool) $input->getOption('with-dependencies'), $symfonyOutput); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException) { - return self::FAILURE; - } - return self::SUCCESS; - } -} diff --git a/pkg/supportive/console/command/ChangedFilesRunner.php b/pkg/supportive/console/command/ChangedFilesRunner.php deleted file mode 100644 index 7376ea9..0000000 --- a/pkg/supportive/console/command/ChangedFilesRunner.php +++ /dev/null @@ -1,87 +0,0 @@ - $files - * - * @throws CommandRunException - */ - public function run(array $files, bool $withDependencies, OutputInterface $output) : void - { - try { - $layers = []; - foreach ($files as $file) { - $matches = $this->layerForTokenAnalyser->findLayerForToken($file, TokenType::FILE); - foreach ($matches as $match) { - foreach ($match as $layer) { - $layers[$layer] = $layer; - } - } - } - $output->writeLineFormatted(\implode(';', $layers)); - } catch (AnalyserException $exception) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($exception); - } - if ($withDependencies) { - try { - $result = OutputResult::fromAnalysisResult($this->dependencyLayersAnalyser->analyse()); - $layersDependOnLayers = $this->calculateLayerDependencies($result->allRules()); - $layerDependencies = []; - foreach ($layers as $layer) { - $layerDependencies += $layersDependOnLayers[$layer] ?? []; - } - do { - $size = \count($layerDependencies); - $layerDependenciesCopy = $layerDependencies; - foreach ($layerDependenciesCopy as $layerDependency) { - $layerDependencies += $layersDependOnLayers[$layerDependency] ?? []; - } - } while ($size !== \count($layerDependencies)); - $output->writeLineFormatted(\implode(';', $layerDependencies)); - } catch (AnalyserException $exception) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($exception); - } - } - } - /** - * @param RuleInterface[] $rules - * - * @return array> - */ - private function calculateLayerDependencies(array $rules) : array - { - $layersDependOnLayers = []; - foreach ($rules as $rule) { - if (!$rule instanceof CoveredRuleInterface) { - continue; - } - $layerA = $rule->getDependerLayer(); - $layerB = $rule->getDependentLayer(); - if (!isset($layersDependOnLayers[$layerB])) { - $layersDependOnLayers[$layerB] = []; - } - if (!\array_key_exists($layerA, $layersDependOnLayers[$layerB])) { - $layersDependOnLayers[$layerB][$layerA] = $layerA; - } - } - return $layersDependOnLayers; - } -} diff --git a/pkg/supportive/console/command/changed_files_command.go b/pkg/supportive/console/command/changed_files_command.go new file mode 100644 index 0000000..ee1811d --- /dev/null +++ b/pkg/supportive/console/command/changed_files_command.go @@ -0,0 +1,51 @@ +package command + +import ( + "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" + "github.com/pkg/errors" + "github.com/spf13/cobra" +) + +type ChangedFilesCommand struct { + runner *ChangedFilesRunner +} + +const ( + argWithDependencies = "with-dependencies" + argFiles = "files" +) + +func NewChangedFilesCommand(runner *ChangedFilesRunner) *cobra.Command { + cmd := &ChangedFilesCommand{runner: runner} + + cobraCmd := &cobra.Command{ + Use: "debug:changed-files", + Short: "Lists layers corresponding to the changed files", + RunE: cmd.run, + } + + cobraCmd.Flags().BoolP("verbose", "v", false, "verbose output") + cobraCmd.Flags().BoolP("debug", "d", false, "debug output") + + cobraCmd.Flags().Bool(argWithDependencies, false, "show dependent layers") + cobraCmd.Flags().StringArray(argFiles, []string{}, "List of changed files") + _ = cobraCmd.MarkFlagRequired(argFiles) + + return cobraCmd +} + +func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { + symfonyOutput := symfony.NewSymfonyOutput(symfony.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) + + files, err := cobraCmd.Flags().GetStringArray(argFiles) + if err != nil { + return errors.WithStack(err) + } + + err = cmd.runner.Run(files, cobraCmd.Flags().Changed(argWithDependencies), symfonyOutput) + if err != nil { + return errors.WithStack(err) + } + + return nil +} diff --git a/pkg/supportive/console/command/changed_files_runner.go b/pkg/supportive/console/command/changed_files_runner.go new file mode 100644 index 0000000..da29ab9 --- /dev/null +++ b/pkg/supportive/console/command/changed_files_runner.go @@ -0,0 +1,82 @@ +package command + +import ( + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/core/analyser" + "golang.org/x/exp/maps" + "strings" +) + +// ChangedFilesRunner - Should only be used by ChangedFilesCommand +type ChangedFilesRunner struct { + layerForTokenAnalyser *analyser.LayerForTokenAnalyser + dependencyLayersAnalyser *analyser.DependencyLayersAnalyser +} + +func NewChangedFilesRunner(layerForTokenAnalyser *analyser.LayerForTokenAnalyser, dependencyLayersAnalyser *analyser.DependencyLayersAnalyser) *ChangedFilesRunner { + return &ChangedFilesRunner{ + layerForTokenAnalyser: layerForTokenAnalyser, + dependencyLayersAnalyser: dependencyLayersAnalyser, + } +} + +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output output_formatter.OutputInterface) error { + layers := make(map[string]string) + for _, file := range files { + matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, analyser.TokenTypeFile) + if err != nil { + return NewCommandRunExceptionAnalyserException(err) + } + for _, match := range matches { + for _, layer := range match { + layers[layer] = layer + } + } + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + if withDependencies { + analyseResult, err := r.dependencyLayersAnalyser.Analyse() + if err != nil { + return NewCommandRunExceptionAnalyserException(err) + } + analysisResult := output_result.NewOutputResultFromAnalysisResult(analyseResult) + layersDependOnLayers := r.calculateLayerDependencies(analysisResult.AllRules()) + layerDependencies := make(map[string]string) + for _, layer := range layers { + for key, value := range layersDependOnLayers[layer] { + layerDependencies[key] = value + } + } + size := 0 + for size != len(layerDependencies) { + size = len(layerDependencies) + layerDependenciesCopy := layerDependencies + for _, layerDependency := range layerDependenciesCopy { + layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] + } + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + } + return nil +} + +func (r *ChangedFilesRunner) calculateLayerDependencies(rules []result.RuleInterface) map[string]map[string]string { + layersDependOnLayers := make(map[string]map[string]string) + for _, rule := range rules { + if _, ok := rule.(result.CoveredRuleInterface); !ok { + continue + } + rule := rule.(result.CoveredRuleInterface) + layerA := rule.GetDependerLayer() + layerB := rule.GetDependentLayer() + if _, ok := layersDependOnLayers[layerB]; !ok { + layersDependOnLayers[layerB] = make(map[string]string) + } + if _, ok := layersDependOnLayers[layerB][layerA]; !ok { + layersDependOnLayers[layerB][layerA] = layerA + } + } + return layersDependOnLayers +} diff --git a/pkg/supportive/dependency_injection/Configuration.php b/pkg/supportive/dependency_injection/Configuration.php deleted file mode 100644 index 264758c..0000000 --- a/pkg/supportive/dependency_injection/Configuration.php +++ /dev/null @@ -1,85 +0,0 @@ -getRootNode(); - $this->appendAnalysedPaths($rootNode); - $this->appendExcludePatterns($rootNode); - $this->appendLayers($rootNode); - $this->appendRuleset($rootNode); - $this->appendSkippedViolations($rootNode); - $this->appendFormatters($rootNode); - $this->appendEmitterTypes($rootNode); - $this->appendIgnoreUncoveredInternalClasses($rootNode); - $this->appendCacheFile($rootNode); - return $builder; - } - private function appendAnalysedPaths(ArrayNodeDefinition $node) : void - { - $node->fixXmlConfig('path')->children()->arrayNode('paths')->info('List of paths to search for PHP files to be analysed.')->addDefaultChildrenIfNoneSet()->requiresAtLeastOneElement()->scalarPrototype()->cannotBeEmpty()->defaultValue('src/')->end()->end()->end(); - } - private function appendExcludePatterns(ArrayNodeDefinition $node) : void - { - $node->fixXmlConfig('exclude_file')->children()->arrayNode('exclude_files')->info('List of regular expressions for excluding files or directories from being analysed')->example('#.*Test\\.php$#')->scalarPrototype()->cannotBeEmpty()->end()->end()->end(); - } - private function appendLayers(ArrayNodeDefinition $node) : void - { - $node->children()->arrayNode('layers')->useAttributeAsKey('name', \false)->arrayPrototype()->children()->scalarNode('name')->isRequired()->cannotBeEmpty()->end()->arrayNode('collectors')->isRequired()->requiresAtLeastOneElement()->arrayPrototype()->ignoreExtraKeys(\false)->children()->scalarNode('type')->isRequired()->end()->variableNode('value')->end()->booleanNode('private')->defaultFalse()->end()->arrayNode('attributes')->variablePrototype()->end()->end()->end()->end()->end()->arrayNode('attributes')->variablePrototype()->end()->end()->end()->end()->end()->end(); - } - private function appendRuleset(ArrayNodeDefinition $node) : void - { - $node->children()->arrayNode('ruleset')->useAttributeAsKey('name')->arrayPrototype()->scalarPrototype()->end()->end()->end()->end(); - } - private function appendSkippedViolations(ArrayNodeDefinition $node) : void - { - $node->fixXmlConfig('skip_violation')->children()->arrayNode('skip_violations')->info('Skip violations matching a regular expressions')->useAttributeAsKey('name')->arrayPrototype()->scalarPrototype()->end()->end()->end()->end(); - } - /** - * @throws RuntimeException - */ - private function appendFormatters(ArrayNodeDefinition $node) : void - { - $node->fixXmlConfig('formatter')->children()->arrayNode('formatters')->addDefaultsIfNotSet()->children()->arrayNode('graphviz')->info('Configure Graphviz output formatters')->addDefaultsIfNotSet()->children()->arrayNode('hidden_layers')->info('Specify any layer name, that you wish to exclude from the output')->scalarPrototype()->end()->end()->arrayNode('groups')->info('Combine multiple layers to a group')->useAttributeAsKey('name')->arrayPrototype()->scalarPrototype()->end()->end()->end()->booleanNode('point_to_groups')->info('When a layer is part of a group, should edges point towards the group or the layer?')->defaultFalse()->end()->end()->beforeNormalization()->ifTrue(static fn($v) => is_array($v) && array_key_exists('pointToGroups', $v))->then(static function ($v) { - $v['point_to_groups'] = $v['pointToGroups']; - unset($v['pointToGroups']); - return $v; - })->end()->end()->arrayNode('mermaidjs')->info('Configure MermaidJS output formatter')->addDefaultsIfNotSet()->children()->scalarNode('direction')->defaultValue('TD')->end()->arrayNode('groups')->info('Combine multiple layers to a group')->useAttributeAsKey('name')->arrayPrototype()->scalarPrototype()->end()->end()->end()->end()->end()->arrayNode('codeclimate')->addDefaultsIfNotSet()->info('Configure Codeclimate output formatters')->children()->arrayNode('severity')->info('Map how failures, skipped and uncovered dependencies map to severity in CodeClimate')->addDefaultsIfNotSet()->children()->enumNode('failure')->values(['info', 'minor', 'major', 'critical', 'blocker'])->defaultValue('major')->end()->enumNode('skipped')->values(['info', 'minor', 'major', 'critical', 'blocker'])->defaultValue('minor')->end()->enumNode('uncovered')->values(['info', 'minor', 'major', 'critical', 'blocker'])->defaultValue('info')->end()->end()->end()->end()->end()->end()->end()->end(); - } - /** - * @throws InvalidArgumentException - * @throws RuntimeException - */ - private function appendEmitterTypes(ArrayNodeDefinition $node) : void - { - $node->children()->arrayNode('analyser')->addDefaultsIfNotSet()->children()->scalarNode('internal_tag')->defaultNull()->end()->arrayNode('types')->defaultValue([EmitterType::CLASS_TOKEN->value, EmitterType::FUNCTION_TOKEN->value])->scalarPrototype()->beforeNormalization()->ifNotInArray(EmitterType::values())->thenInvalid('Invalid type %s')->end()->end()->end()->end()->end()->end(); - } - private function appendIgnoreUncoveredInternalClasses(ArrayNodeDefinition $node) : void - { - $node->children()->booleanNode('ignore_uncovered_internal_classes')->defaultTrue()->end()->end(); - } - private function appendCacheFile(ArrayNodeDefinition $node) : void - { - $node->children()->scalarNode('cache_file')->defaultValue('.deptrac.cache')->end()->end(); - } -} diff --git a/pkg/supportive/dependency_injection/DeptracExtension.php b/pkg/supportive/dependency_injection/DeptracExtension.php deleted file mode 100644 index 9267881..0000000 --- a/pkg/supportive/dependency_injection/DeptracExtension.php +++ /dev/null @@ -1,64 +0,0 @@ -processConfiguration($configuration, $configs); - $container->setParameter('paths', $configs['paths']); - $container->setParameter('exclude_files', $configs['exclude_files']); - $container->setParameter('layers', $configs['layers']); - $container->setParameter('ruleset', $configs['ruleset']); - $container->setParameter('skip_violations', $configs['skip_violations']); - $container->setParameter('formatters', $configs['formatters'] ?? []); - $container->setParameter('analyser', $configs['analyser']); - $container->setParameter('ignore_uncovered_internal_classes', $configs['ignore_uncovered_internal_classes']); - $container->setParameter('cache_file', $configs['cache_file']); - } - public function prepend(ContainerBuilder $container) : void - { - if (!$container->hasParameter('projectDirectory')) { - $container->setParameter('projectDirectory', getcwd()); - } - if (!$container->hasParameter('paths')) { - $container->setParameter('paths', []); - } - if (!$container->hasParameter('exclude_files')) { - $container->setParameter('exclude_files', []); - } - if (!$container->hasParameter('layers')) { - $container->setParameter('layers', []); - } - if (!$container->hasParameter('ruleset')) { - $container->setParameter('ruleset', []); - } - if (!$container->hasParameter('skip_violations')) { - $container->setParameter('skip_violations', []); - } - if (!$container->hasParameter('formatters')) { - $container->setParameter('formatters', []); - } - if (!$container->hasParameter('analyser')) { - $container->setParameter('analyser', ['types' => [EmitterType::CLASS_TOKEN->value, EmitterType::FUNCTION_TOKEN->value]]); - } - if (!$container->hasParameter('ignore_uncovered_internal_classes')) { - $container->setParameter('ignore_uncovered_internal_classes', \true); - } - if (!$container->hasParameter('cache_file')) { - $container->setParameter('cache_file', '.deptrac.cache'); - } - } -} diff --git a/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php b/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php deleted file mode 100644 index 192ddcb..0000000 --- a/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.php +++ /dev/null @@ -1,15 +0,0 @@ -getPathname())); - } -} diff --git a/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php b/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php deleted file mode 100644 index 877e280..0000000 --- a/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.php +++ /dev/null @@ -1,22 +0,0 @@ -workingDirectory); - } - $builder->configFile = new SplFileInfo($configFile); - return $builder; - } - private function withCache(string $cacheFile) : void - { - if (Path::isRelative($cacheFile)) { - /** @throws void */ - $cacheFile = Path::makeAbsolute($cacheFile, $this->workingDirectory); - } - $this->cacheFile = new SplFileInfo($cacheFile); - } - private function clearCache(string $cacheFile) : void - { - if (Path::isRelative($cacheFile)) { - /** @throws void */ - $cacheFile = Path::makeAbsolute($cacheFile, $this->workingDirectory); - } - \unlink($cacheFile); - } - /** - * @throws CacheFileException - * @throws CannotLoadConfiguration - */ - public function build(string|false|null $cacheOverride, bool $clearCache) : ContainerBuilder - { - $container = new ContainerBuilder(); - $container->setParameter('currentWorkingDirectory', $this->workingDirectory); - self::registerCompilerPasses($container); - $container->registerExtension(new \Qossmic\Deptrac\Supportive\DependencyInjection\DeptracExtension()); - $container->setParameter('projectDirectory', $this->workingDirectory); - if (null !== $this->configFile) { - self::loadConfiguration($container, $this->configFile); - } - /** @var ?string $cacheFileFromConfig */ - $cacheFileFromConfig = $container->getExtensionConfig('deptrac')[0]['cache_file'] ?? null; - // if there is any - $cache = $cacheOverride ?? $cacheFileFromConfig; - // override if there is a no-cache or path to file - $cache = $cache ?? '.deptrac.cache'; - // override if there is no file specified and needs one - if (\false !== $cache) { - if ($clearCache) { - $this->clearCache($cache); - } - $this->withCache($cache); - } - self::loadServices($container, $this->cacheFile); - $container->compile(\true); - return $container; - } - private static function registerCompilerPasses(ContainerBuilder $container) : void - { - $container->addCompilerPass(new AddConsoleCommandPass()); - $container->addCompilerPass(new RegisterListenersPass()); - } - /** - * @throws CacheFileException - * @throws CannotLoadConfiguration - */ - private static function loadServices(ContainerBuilder $container, ?SplFileInfo $cacheFile) : void - { - $loader = new PhpFileLoader($container, new FileLocator([__DIR__ . '/../../../config'])); - try { - $loader->load('services.php'); - } catch (Exception $exception) { - throw CannotLoadConfiguration::fromServices('services.php', $exception->getMessage()); - } - if (!$cacheFile instanceof SplFileInfo) { - return; - } - if (!\file_exists($cacheFile->getPathname())) { - $dirname = $cacheFile->getPath() ?: '.'; - if (!\is_dir($dirname) && \mkdir($dirname . '/', 0777, \true) && !\is_dir($dirname)) { - throw CacheFileException::notWritable($cacheFile); - } - if (!\touch($cacheFile->getPathname()) && !\is_writable($cacheFile->getPathname())) { - throw CacheFileException::notWritable($cacheFile); - } - } - $container->setParameter('cache_file', $cacheFile->getPathname()); - try { - $loader->load('cache.php'); - } catch (Exception $exception) { - throw CannotLoadConfiguration::fromCache('cache.php', $exception->getMessage()); - } - } - /** - * @throws CannotLoadConfiguration - */ - private static function loadConfiguration(ContainerBuilder $container, SplFileInfo $configFile) : void - { - $configPathInfo = $configFile->getPathInfo(); - /** @phpstan-ignore-next-line false positive */ - if (null === $configPathInfo) { - throw CannotLoadConfiguration::fromConfig($configFile->getFilename(), 'Unable to load config: Invalid or missing path.'); - } - $container->setParameter('projectDirectory', $configPathInfo->getPathname()); - $loader = new DelegatingLoader(new LoaderResolver([new YamlFileLoader($container, new FileLocator([$configPathInfo->getPathname()])), new PhpFileLoader($container, new FileLocator([$configPathInfo->getPathname()]), generator: new ConfigBuilderGenerator('.'))])); - try { - $loader->load($configFile->getFilename()); - } catch (Exception $exception) { - throw CannotLoadConfiguration::fromConfig($configFile->getFilename(), $exception->getMessage()); - } - } -} diff --git a/pkg/supportive/dependency_injection/cache.php b/pkg/supportive/dependency_injection/cache.php deleted file mode 100644 index b5648bb..0000000 --- a/pkg/supportive/dependency_injection/cache.php +++ /dev/null @@ -1,20 +0,0 @@ -services(); - $services->defaults()->public(); - $services->set(AstFileReferenceFileCache::class)->args(['%cache_file%', Application::VERSION]); - $services->alias(AstFileReferenceDeferredCacheInterface::class, AstFileReferenceFileCache::class); - $services->alias(AstFileReferenceCacheInterface::class, AstFileReferenceDeferredCacheInterface::class); - $services->set(CacheableFileSubscriber::class)->args([service(AstFileReferenceFileCache::class)])->tag('kernel.event_subscriber'); -}; diff --git a/pkg/supportive/dependency_injection/services.php b/pkg/supportive/dependency_injection/services.php deleted file mode 100644 index 287ffca..0000000 --- a/pkg/supportive/dependency_injection/services.php +++ /dev/null @@ -1,252 +0,0 @@ -services(); - $services->defaults()->autowire(); - /* - * Utilities - */ - $services->set(EventDispatcher::class); - $services->alias(EventDispatcherInterface::class, EventDispatcher::class); - $services->alias(Symfony\Component\EventDispatcher\EventDispatcherInterface::class, EventDispatcher::class); - $services->alias('event_dispatcher', EventDispatcher::class); - $services->set(FileInputCollector::class)->args(['$paths' => param('paths'), '$excludedFilePatterns' => param('exclude_files'), '$basePath' => param('projectDirectory')]); - $services->alias(InputCollectorInterface::class, FileInputCollector::class); - $services->set(YmlFileLoader::class); - $services->set(Dumper::class)->args(['$templateFile' => __DIR__ . '/deptrac_template.yaml']); - /* - * AST - */ - $services->set(AstLoader::class); - $services->set(ParserFactory::class); - $services->set(Lexer::class); - $services->set(Parser::class)->factory([service(ParserFactory::class), 'create'])->args(['$kind' => ParserFactory::PREFER_PHP7]); - $services->set(AstFileReferenceInMemoryCache::class); - $services->alias(AstFileReferenceCacheInterface::class, AstFileReferenceInMemoryCache::class); - $services->set(NikicPhpParser::class)->args(['$extractors' => tagged_iterator('reference_extractors')]); - $services->alias(ParserInterface::class, NikicPhpParser::class); - $services->set(TypeResolver::class); - $services->set(AnnotationReferenceExtractor::class)->tag('reference_extractors'); - $services->set(AnonymousClassExtractor::class)->tag('reference_extractors'); - $services->set(ClassConstantExtractor::class)->tag('reference_extractors'); - $services->set(FunctionLikeExtractor::class)->tag('reference_extractors'); - $services->set(PropertyExtractor::class)->tag('reference_extractors'); - $services->set(KeywordExtractor::class)->tag('reference_extractors'); - $services->set(StaticExtractor::class)->tag('reference_extractors'); - $services->set(FunctionLikeExtractor::class)->tag('reference_extractors'); - $services->set(VariableExtractor::class)->tag('reference_extractors'); - $services->set(FunctionCallResolver::class)->tag('reference_extractors'); - /* - * Dependency - */ - $services->set(DependencyResolver::class)->args(['$config' => param('analyser'), '$emitterLocator' => tagged_locator('dependency_emitter', 'key')]); - $services->set(TokenResolver::class); - $services->set(InheritanceFlattener::class); - $services->set(ClassDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::CLASS_TOKEN->value]); - $services->set(ClassSuperglobalDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::CLASS_SUPERGLOBAL_TOKEN->value]); - $services->set(FileDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::FILE_TOKEN->value]); - $services->set(FunctionDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::FUNCTION_TOKEN->value]); - $services->set(FunctionCallDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::FUNCTION_CALL->value]); - $services->set(FunctionSuperglobalDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::FUNCTION_SUPERGLOBAL_TOKEN->value]); - $services->set(UsesDependencyEmitter::class)->tag('dependency_emitter', ['key' => EmitterType::USE_TOKEN->value]); - /* - * Layer - */ - $services->set(LayerResolver::class)->args(['$layersConfig' => param('layers')]); - $services->alias(LayerResolverInterface::class, LayerResolver::class); - $services->set(CollectorProvider::class)->args(['$collectorLocator' => tagged_locator('collector', 'type')]); - $services->set(CollectorResolver::class); - $services->alias(CollectorResolverInterface::class, CollectorResolver::class); - $services->set(AttributeCollector::class)->tag('collector', ['type' => CollectorType::TYPE_ATTRIBUTE->value]); - $services->set(BoolCollector::class)->tag('collector', ['type' => CollectorType::TYPE_BOOL->value]); - $services->set(ClassCollector::class)->tag('collector', ['type' => CollectorType::TYPE_CLASS->value]); - $services->set(ClassLikeCollector::class)->tag('collector', ['type' => CollectorType::TYPE_CLASSLIKE->value]); - $services->set(ClassNameRegexCollector::class)->tag('collector', ['type' => CollectorType::TYPE_CLASS_NAME_REGEX->value]); - $services->set(TagValueRegexCollector::class)->tag('collector', ['type' => CollectorType::TYPE_TAG_VALUE_REGEX->value]); - $services->set(DirectoryCollector::class)->tag('collector', ['type' => CollectorType::TYPE_DIRECTORY->value]); - $services->set(ExtendsCollector::class)->tag('collector', ['type' => CollectorType::TYPE_EXTENDS->value]); - $services->set(FunctionNameCollector::class)->tag('collector', ['type' => CollectorType::TYPE_FUNCTION_NAME->value]); - $services->set(GlobCollector::class)->args(['$basePath' => param('projectDirectory')])->tag('collector', ['type' => CollectorType::TYPE_GLOB->value]); - $services->set(ImplementsCollector::class)->tag('collector', ['type' => CollectorType::TYPE_IMPLEMENTS->value]); - $services->set(InheritanceLevelCollector::class)->tag('collector', ['type' => CollectorType::TYPE_INHERITANCE->value]); - $services->set(InterfaceCollector::class)->tag('collector', ['type' => CollectorType::TYPE_INTERFACE->value]); - $services->set(InheritsCollector::class)->tag('collector', ['type' => CollectorType::TYPE_INHERITS->value]); - $services->set(LayerCollector::class)->tag('collector', ['type' => CollectorType::TYPE_LAYER->value]); - $services->set(MethodCollector::class)->tag('collector', ['type' => CollectorType::TYPE_METHOD->value]); - $services->set(SuperglobalCollector::class)->tag('collector', ['type' => CollectorType::TYPE_SUPERGLOBAL->value]); - $services->set(TraitCollector::class)->tag('collector', ['type' => CollectorType::TYPE_TRAIT->value]); - $services->set(UsesCollector::class)->tag('collector', ['type' => CollectorType::TYPE_USES->value]); - $services->set(PhpInternalCollector::class)->tag('collector', ['type' => CollectorType::TYPE_PHP_INTERNAL->value]); - $services->set(ComposerCollector::class)->tag('collector', ['type' => CollectorType::TYPE_COMPOSER->value]); - /* - * Analyser - */ - $services->set(AstMapExtractor::class); - $services->set(UncoveredDependentHandler::class)->args(['$ignoreUncoveredInternalClasses' => param('ignore_uncovered_internal_classes')])->tag('kernel.event_subscriber'); - $services->set(MatchingLayersHandler::class)->tag('kernel.event_subscriber'); - $services->set(LayerProvider::class)->args(['$allowedLayers' => param('ruleset')]); - $services->set(AllowDependencyHandler::class)->tag('kernel.event_subscriber'); - $services->set(DependsOnDisallowedLayer::class)->tag('kernel.event_subscriber'); - $services->set(DependsOnPrivateLayer::class)->tag('kernel.event_subscriber'); - $services->set(DependsOnInternalToken::class)->tag('kernel.event_subscriber')->args(['$config' => param('analyser')]); - $services->set(UnmatchedSkippedViolations::class)->tag('kernel.event_subscriber'); - $services->set(EventHelper::class)->args(['$skippedViolations' => param('skip_violations')]); - $services->set(DependencyLayersAnalyser::class); - $services->set(TokenInLayerAnalyser::class)->args(['$config' => param('analyser')]); - $services->set(LayerForTokenAnalyser::class); - $services->set(UnassignedTokenAnalyser::class)->args(['$config' => param('analyser')]); - $services->set(LayerDependenciesAnalyser::class); - $services->set(RulesetUsageAnalyser::class)->args(['$layers' => param('layers')]); - /* - * OutputFormatter - */ - $services->set(FormatterConfiguration::class)->args(['$config' => param('formatters')]); - $services->set(FormatterProvider::class)->args(['$formatterLocator' => tagged_locator('output_formatter', null, 'getName')]); - $services->set(ConsoleOutputFormatter::class)->tag('output_formatter'); - $services->set(GithubActionsOutputFormatter::class)->tag('output_formatter'); - $services->set(JUnitOutputFormatter::class)->tag('output_formatter'); - $services->set(TableOutputFormatter::class)->tag('output_formatter'); - $services->set(XMLOutputFormatter::class)->tag('output_formatter'); - $services->set(BaselineOutputFormatter::class)->tag('output_formatter'); - $services->set(JsonOutputFormatter::class)->tag('output_formatter'); - $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter'); - $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter'); - $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter'); - $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter'); - $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter'); - $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter'); - /* - * Console - */ - $services->set(InitCommand::class)->autowire()->tag('console.command'); - $services->set(AnalyseRunner::class)->autowire(); - $services->set(AnalyseCommand::class)->autowire()->tag('console.command'); - $services->set(ChangedFilesRunner::class)->autowire(); - $services->set(ChangedFilesCommand::class)->autowire()->tag('console.command'); - $services->set(DebugLayerRunner::class)->autowire()->args(['$layers' => param('layers')]); - $services->set(DebugLayerCommand::class)->autowire()->tag('console.command'); - $services->set(DebugTokenRunner::class)->autowire(); - $services->set(DebugTokenCommand::class)->autowire()->tag('console.command'); - $services->set(DebugUnassignedRunner::class)->autowire(); - $services->set(DebugUnassignedCommand::class)->autowire()->tag('console.command'); - $services->set(DebugDependenciesRunner::class)->autowire(); - $services->set(DebugDependenciesCommand::class)->autowire()->tag('console.command'); - $services->set(DebugUnusedRunner::class)->autowire(); - $services->set(DebugUnusedCommand::class)->autowire()->tag('console.command'); -}; diff --git a/pkg/supportive/output_formatter/BaselineOutputFormatter.php b/pkg/supportive/output_formatter/BaselineOutputFormatter.php deleted file mode 100644 index d1194b6..0000000 --- a/pkg/supportive/output_formatter/BaselineOutputFormatter.php +++ /dev/null @@ -1,59 +0,0 @@ -collectViolations($result); - foreach ($groupedViolations as &$violations) { - sort($violations); - } - ksort($groupedViolations); - $baselineFile = $outputFormatterInput->outputPath ?? self::DEFAULT_PATH; - $dirname = \dirname($baselineFile); - if (!\is_dir($dirname) && \mkdir($dirname . '/', 0777, \true) && !\is_dir($dirname)) { - $output->writeLineFormatted('Unable to create ' . \realpath($baselineFile) . ''); - return; - } - \file_put_contents($baselineFile, Yaml::dump(['deptrac' => ['skip_violations' => $groupedViolations]], 4, 2)); - $output->writeLineFormatted('Baseline dumped to ' . \realpath($baselineFile) . ''); - } - /** - * @return array> - */ - private function collectViolations(OutputResult $result) : array - { - $violations = []; - foreach ([...$result->allOf(Violation::class), ...$result->allOf(SkippedViolation::class)] as $rule) { - $dependency = $rule->getDependency(); - $dependerClass = $dependency->getDepender()->toString(); - $dependentClass = $dependency->getDependent()->toString(); - if (!\array_key_exists($dependerClass, $violations)) { - $violations[$dependerClass] = []; - } - $violations[$dependerClass][$dependentClass] = $dependentClass; - } - return \array_map(static fn(array $dependencies): array => array_values($dependencies), $violations); - } -} diff --git a/pkg/supportive/output_formatter/CodeclimateOutputFormatter.php b/pkg/supportive/output_formatter/CodeclimateOutputFormatter.php deleted file mode 100644 index 7da4001..0000000 --- a/pkg/supportive/output_formatter/CodeclimateOutputFormatter.php +++ /dev/null @@ -1,133 +0,0 @@ -getConfigFor('codeclimate'); - $this->config = $extractedConfig; - } - public static function getName() : string - { - return 'codeclimate'; - } - /** - * {@inheritdoc} - * - * @throws Exception - */ - public function finish(OutputResult $result, OutputInterface $output, OutputFormatterInput $outputFormatterInput) : void - { - $formatterConfig = ConfigurationCodeclimate::fromArray($this->config); - $violations = []; - if ($outputFormatterInput->reportSkipped) { - foreach ($result->allOf(SkippedViolation::class) as $rule) { - $this->addSkipped($violations, $rule, $formatterConfig); - } - } - if ($outputFormatterInput->reportUncovered) { - foreach ($result->allOf(Uncovered::class) as $rule) { - $this->addUncovered($violations, $rule, $formatterConfig); - } - } - foreach ($result->allOf(Violation::class) as $rule) { - $this->addFailure($violations, $rule, $formatterConfig); - } - $json = json_encode($violations, JSON_PRETTY_PRINT); - if (\false === $json) { - throw new Exception(sprintf('Unable to render codeclimate output. %s', $this->jsonLastError())); - } - $dumpJsonPath = $outputFormatterInput->outputPath; - if (null !== $dumpJsonPath) { - \file_put_contents($dumpJsonPath, $json); - $output->writeLineFormatted('Codeclimate Report dumped to ' . \realpath($dumpJsonPath) . ''); - return; - } - $output->writeRaw($json); - } - /** - * @param array, severity: string, location: array{path: string, lines: array{begin: int}}}> $violationsArray - */ - private function addFailure(array &$violationsArray, Violation $violation, ConfigurationCodeclimate $config) : void - { - $violationsArray[] = $this->buildRuleArray($violation, $this->getFailureMessage($violation), $config->getSeverity('failure') ?? 'major'); - } - private function getFailureMessage(Violation $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s must not depend on %s (%s on %s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->getDependerLayer(), $violation->getDependentLayer()); - } - /** - * @param array, severity: string, location: array{path: string, lines: array{begin: int}}}> $violationsArray - */ - private function addSkipped(array &$violationsArray, SkippedViolation $violation, ConfigurationCodeclimate $config) : void - { - $violationsArray[] = $this->buildRuleArray($violation, $this->getWarningMessage($violation), $config->getSeverity('skipped') ?? 'minor'); - } - private function getWarningMessage(SkippedViolation $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s should not depend on %s (%s on %s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->getDependerLayer(), $violation->getDependentLayer()); - } - /** - * @param array, severity: string, location: array{path: string, lines: array{begin: int}}}> $violationsArray - */ - private function addUncovered(array &$violationsArray, Uncovered $violation, ConfigurationCodeclimate $config) : void - { - $violationsArray[] = $this->buildRuleArray($violation, $this->getUncoveredMessage($violation), $config->getSeverity('uncovered') ?? 'info'); - } - private function getUncoveredMessage(Uncovered $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s has uncovered dependency on %s (%s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->layer); - } - private function jsonLastError() : string - { - return match (json_last_error()) { - \JSON_ERROR_NONE => 'No errors', - \JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', - \JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', - \JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', - \JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON', - \JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded', - default => 'Unknown error', - }; - } - /** - * @return array{type: string, check_name: string, fingerprint: string, description: string, categories: array, severity: string, location: array{path: string, lines: array{begin: int}}} - */ - private function buildRuleArray(RuleInterface $rule, string $message, string $severity) : array - { - return ['type' => 'issue', 'check_name' => 'Dependency violation', 'fingerprint' => $this->buildFingerprint($rule), 'description' => $message, 'categories' => ['Style', 'Complexity'], 'severity' => $severity, 'location' => ['path' => $rule->getDependency()->getContext()->fileOccurrence->filepath, 'lines' => ['begin' => $rule->getDependency()->getContext()->fileOccurrence->line]]]; - } - private function buildFingerprint(RuleInterface $rule) : string - { - return \sha1(\implode(',', [$rule::class, $rule->getDependency()->getDepender()->toString(), $rule->getDependency()->getDependent()->toString(), $rule->getDependency()->getContext()->fileOccurrence->filepath, $rule->getDependency()->getContext()->fileOccurrence->line])); - } -} diff --git a/pkg/supportive/output_formatter/ConsoleOutputFormatter.php b/pkg/supportive/output_formatter/ConsoleOutputFormatter.php deleted file mode 100644 index d1f9a56..0000000 --- a/pkg/supportive/output_formatter/ConsoleOutputFormatter.php +++ /dev/null @@ -1,110 +0,0 @@ -allOf(Violation::class) as $rule) { - $this->printViolation($rule, $output); - } - if ($outputFormatterInput->reportSkipped) { - foreach ($result->allOf(SkippedViolation::class) as $rule) { - $this->printViolation($rule, $output); - } - } - if ($outputFormatterInput->reportUncovered) { - $this->printUncovered($result, $output); - } - if ($result->hasErrors()) { - $this->printErrors($result, $output); - } - if ($result->hasWarnings()) { - $this->printWarnings($result, $output); - } - $this->printSummary($result, $output); - } - private function printViolation(Violation|SkippedViolation $rule, OutputInterface $output) : void - { - $dependency = $rule->getDependency(); - $output->writeLineFormatted(\sprintf('%s%s must not depend on %s (%s on %s)', $rule instanceof SkippedViolation ? '[SKIPPED] ' : '', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $rule->getDependerLayer(), $rule->getDependentLayer())); - $this->printFileOccurrence($output, $dependency->getContext()->fileOccurrence); - if (count($dependency->serialize()) > 1) { - $this->printMultilinePath($output, $dependency); - } - } - private function printMultilinePath(OutputInterface $output, DependencyInterface $dep) : void - { - $buffer = \implode(" -> \n", \array_map(static fn(array $dependency): string => \sprintf("\t%s:%d", $dependency['name'], $dependency['line']), $dep->serialize())); - $output->writeLineFormatted($buffer); - } - private function printSummary(OutputResult $result, OutputInterface $output) : void - { - $violationCount = count($result->violations()); - $skippedViolationCount = count($result->skippedViolations()); - $uncoveredCount = count($result->uncovered()); - $allowedCount = count($result->allowed()); - $warningsCount = count($result->warnings); - $errorsCount = count($result->errors); - $output->writeLineFormatted(''); - $output->writeLineFormatted('Report:'); - $output->writeLineFormatted(\sprintf('Violations: %d', $violationCount > 0 ? 'red' : 'default', $violationCount)); - $output->writeLineFormatted(\sprintf('Skipped violations: %d', $skippedViolationCount > 0 ? 'yellow' : 'default', $skippedViolationCount)); - $output->writeLineFormatted(\sprintf('Uncovered: %d', $uncoveredCount > 0 ? 'yellow' : 'default', $uncoveredCount)); - $output->writeLineFormatted(\sprintf('Allowed: %d', $allowedCount)); - $output->writeLineFormatted(\sprintf('Warnings: %d', $warningsCount > 0 ? 'yellow' : 'default', $warningsCount)); - $output->writeLineFormatted(\sprintf('Errors: %d', $errorsCount > 0 ? 'red' : 'default', $errorsCount)); - } - private function printUncovered(OutputResult $result, OutputInterface $output) : void - { - $uncovered = $result->uncovered(); - if ([] === $uncovered) { - return; - } - $output->writeLineFormatted('Uncovered dependencies:'); - foreach ($uncovered as $u) { - $dependency = $u->getDependency(); - $output->writeLineFormatted(\sprintf('%s has uncovered dependency on %s (%s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $u->layer)); - $this->printFileOccurrence($output, $dependency->getContext()->fileOccurrence); - if (count($dependency->serialize()) > 1) { - $this->printMultilinePath($output, $dependency); - } - } - } - private function printFileOccurrence(OutputInterface $output, FileOccurrence $fileOccurrence) : void - { - $output->writeLineFormatted($fileOccurrence->filepath . ':' . $fileOccurrence->line); - } - private function printErrors(OutputResult $result, OutputInterface $output) : void - { - $output->writeLineFormatted(''); - foreach ($result->errors as $error) { - $output->writeLineFormatted(\sprintf('[ERROR] %s', (string) $error)); - } - } - private function printWarnings(OutputResult $result, OutputInterface $output) : void - { - $output->writeLineFormatted(''); - foreach ($result->warnings as $warning) { - $output->writeLineFormatted(\sprintf('[WARNING] %s', (string) $warning)); - } - } -} diff --git a/pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php deleted file mode 100644 index a66cd3b..0000000 --- a/pkg/supportive/output_formatter/GraphVizOutputDisplayFormatter.php +++ /dev/null @@ -1,42 +0,0 @@ -getTempImage($graph); - static $next = 0; - if ($next > \microtime(\true)) { - \sleep(self::DELAY_OPEN); - } - if ('WIN' === \strtoupper(\substr(\PHP_OS, 0, 3))) { - \exec('start "" ' . \escapeshellarg($filename) . ' >NUL'); - } elseif ('DARWIN' === \strtoupper(\PHP_OS)) { - \exec('open ' . \escapeshellarg($filename) . ' > /dev/null 2>&1 &'); - } else { - \exec('xdg-open ' . \escapeshellarg($filename) . ' > /dev/null 2>&1 &'); - } - $next = \microtime(\true) + (float) self::DELAY_OPEN; - } catch (Exception $exception) { - throw OutputException::withMessage('Unable to display output: ' . $exception->getMessage()); - } - } -} diff --git a/pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php deleted file mode 100644 index f6fdb42..0000000 --- a/pkg/supportive/output_formatter/GraphVizOutputDotFormatter.php +++ /dev/null @@ -1,28 +0,0 @@ -outputPath; - if (null === $dumpDotPath) { - throw OutputException::withMessage("No '--output' defined for GraphViz formatter"); - } - \file_put_contents($dumpDotPath, (string) $graph); - $output->writeLineFormatted('Script dumped to ' . \realpath($dumpDotPath) . ''); - } -} diff --git a/pkg/supportive/output_formatter/GraphVizOutputFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputFormatter.php deleted file mode 100644 index ce61a81..0000000 --- a/pkg/supportive/output_formatter/GraphVizOutputFormatter.php +++ /dev/null @@ -1,194 +0,0 @@ -, point_to_groups?: bool} - */ - private readonly array $config; - public function __construct(FormatterConfiguration $config) - { - /** @var array{hidden_layers?: string[], groups?: array, point_to_groups?: bool} $extractedConfig */ - $extractedConfig = $config->getConfigFor('graphviz'); - $this->config = $extractedConfig; - } - public function finish(OutputResult $result, OutputInterface $output, OutputFormatterInput $outputFormatterInput) : void - { - $layerViolations = $this->calculateViolations($result->violations()); - $layersDependOnLayers = $this->calculateLayerDependencies($result->allRules()); - $outputConfig = ConfigurationGraphViz::fromArray($this->config); - $graph = Graph::create(''); - if ($outputConfig->pointToGroups) { - $graph->setAttribute('compound', 'true'); - } - $nodes = $this->createNodes($outputConfig, $layersDependOnLayers); - $this->addNodesToGraph($graph, $nodes, $outputConfig); - $this->connectEdges($graph, $nodes, $outputConfig, $layersDependOnLayers, $layerViolations); - $this->output($graph, $output, $outputFormatterInput); - } - /** - * @param Violation[] $violations - * - * @return array> - */ - private function calculateViolations(array $violations) : array - { - $layerViolations = []; - foreach ($violations as $violation) { - if (!isset($layerViolations[$violation->getDependerLayer()])) { - $layerViolations[$violation->getDependerLayer()] = []; - } - if (!isset($layerViolations[$violation->getDependerLayer()][$violation->getDependentLayer()])) { - $layerViolations[$violation->getDependerLayer()][$violation->getDependentLayer()] = 1; - } else { - ++$layerViolations[$violation->getDependerLayer()][$violation->getDependentLayer()]; - } - } - return $layerViolations; - } - /** - * @param RuleInterface[] $rules - * - * @return array> - */ - private function calculateLayerDependencies(array $rules) : array - { - $layersDependOnLayers = []; - foreach ($rules as $rule) { - if ($rule instanceof CoveredRuleInterface) { - $layerA = $rule->getDependerLayer(); - $layerB = $rule->getDependentLayer(); - if (!isset($layersDependOnLayers[$layerA])) { - $layersDependOnLayers[$layerA] = []; - } - if (!isset($layersDependOnLayers[$layerA][$layerB])) { - $layersDependOnLayers[$layerA][$layerB] = 1; - continue; - } - ++$layersDependOnLayers[$layerA][$layerB]; - } elseif ($rule instanceof Uncovered) { - if (!isset($layersDependOnLayers[$rule->layer])) { - $layersDependOnLayers[$rule->layer] = []; - } - } - } - return $layersDependOnLayers; - } - /** - * @param array> $layersDependOnLayers - * - * @return Node[] - */ - private function createNodes(ConfigurationGraphViz $outputConfig, array $layersDependOnLayers) : array - { - $nodes = []; - foreach ($layersDependOnLayers as $layer => $layersDependOn) { - if (\in_array($layer, $outputConfig->hiddenLayers, \true)) { - continue; - } - if (!isset($nodes[$layer])) { - $nodes[$layer] = new Node($layer); - } - foreach ($layersDependOn as $layerDependOn => $_) { - if (\in_array($layerDependOn, $outputConfig->hiddenLayers, \true)) { - continue; - } - if (!isset($nodes[$layerDependOn])) { - $nodes[$layerDependOn] = new Node($layerDependOn); - } - } - } - return $nodes; - } - /** - * @param Node[] $nodes - * @param array> $layersDependOnLayers - * @param array> $layerViolations - */ - private function connectEdges(Graph $graph, array $nodes, ConfigurationGraphViz $outputConfig, array $layersDependOnLayers, array $layerViolations) : void - { - foreach ($layersDependOnLayers as $layer => $layersDependOn) { - if (\in_array($layer, $outputConfig->hiddenLayers, \true)) { - continue; - } - foreach ($layersDependOn as $layerDependOn => $layerDependOnCount) { - if (\in_array($layerDependOn, $outputConfig->hiddenLayers, \true)) { - continue; - } - $edge = new Edge($nodes[$layer], $nodes[$layerDependOn]); - if ($outputConfig->pointToGroups && $graph->hasGraph($this->getSubgraphName($layerDependOn))) { - $edge->setAttribute('lhead', $this->getSubgraphName($layerDependOn)); - } - $graph->link($edge); - if (isset($layerViolations[$layer][$layerDependOn])) { - $edge->setAttribute('label', (string) $layerViolations[$layer][$layerDependOn]); - $edge->setAttribute('color', 'red'); - } else { - $edge->setAttribute('label', (string) $layerDependOnCount); - } - } - } - } - /** - * @param Node[] $nodes - */ - private function addNodesToGraph(Graph $graph, array $nodes, ConfigurationGraphViz $outputConfig) : void - { - foreach ($outputConfig->groupsLayerMap as $groupName => $groupLayerNames) { - $subgraph = Graph::create($this->getSubgraphName($groupName))->setAttribute('label', $groupName); - $graph->addGraph($subgraph); - foreach ($groupLayerNames as $groupLayerName) { - if (\array_key_exists($groupLayerName, $nodes)) { - $subgraph->setNode($nodes[$groupLayerName]); - $nodes[$groupLayerName]->setAttribute('group', $groupName); - unset($nodes[$groupLayerName]); - } - } - } - foreach ($nodes as $node) { - $graph->setNode($node); - } - } - /** - * @throws Exception - * @throws OutputException - */ - protected function getTempImage(Graph $graph) : string - { - $filename = tempnam(sys_get_temp_dir(), 'deptrac'); - if (\false === $filename) { - throw OutputException::withMessage('Unable to create temp file for output.'); - } - $filename .= '.png'; - $graph->export('png', $filename); - return $filename; - } - private function getSubgraphName(string $groupName) : string - { - return 'cluster_' . $groupName; - } - /** - * @throws OutputException - */ - protected abstract function output(Graph $graph, OutputInterface $output, OutputFormatterInput $outputFormatterInput) : void; -} diff --git a/pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php deleted file mode 100644 index f3aff33..0000000 --- a/pkg/supportive/output_formatter/GraphVizOutputHtmlFormatter.php +++ /dev/null @@ -1,44 +0,0 @@ -outputPath; - if (null === $dumpHtmlPath) { - throw OutputException::withMessage("No '--output' defined for GraphViz formatter"); - } - try { - $filename = $this->getTempImage($graph); - $imageData = file_get_contents($filename); - if (\false === $imageData) { - throw OutputException::withMessage('Unable to create temp file for output.'); - } - \file_put_contents($dumpHtmlPath, ''); - $output->writeLineFormatted('HTML dumped to ' . \realpath($dumpHtmlPath) . ''); - } catch (Exception $exception) { - throw OutputException::withMessage('Unable to generate HTML file: ' . $exception->getMessage()); - } finally { - if (isset($filename)) { - \unlink($filename); - } - } - } -} diff --git a/pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php b/pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php deleted file mode 100644 index 1f03fd3..0000000 --- a/pkg/supportive/output_formatter/GraphVizOutputImageFormatter.php +++ /dev/null @@ -1,44 +0,0 @@ -outputPath; - if (null === $dumpImagePath) { - throw OutputException::withMessage("No '--output' defined for GraphViz formatter"); - } - $imageFile = new SplFileInfo($dumpImagePath); - $imagePathInfo = $imageFile->getPathInfo(); - /** @phpstan-ignore-next-line false positive */ - if (null === $imagePathInfo) { - throw OutputException::withMessage('Unable to dump image: Invalid or missing path.'); - } - if (!$imagePathInfo->isWritable()) { - throw OutputException::withMessage(\sprintf('Unable to dump image: Path "%s" does not exist or is not writable.', Path::canonicalize($imagePathInfo->getPathname()))); - } - try { - $graph->export($imageFile->getExtension() ?: 'png', $imageFile->getPathname()); - $output->writeLineFormatted('Image dumped to ' . $imageFile->getPathname() . ''); - } catch (Exception $exception) { - throw OutputException::withMessage('Unable to display output: ' . $exception->getMessage()); - } - } -} diff --git a/pkg/supportive/output_formatter/JUnitOutputFormatter.php b/pkg/supportive/output_formatter/JUnitOutputFormatter.php deleted file mode 100644 index 3596b5b..0000000 --- a/pkg/supportive/output_formatter/JUnitOutputFormatter.php +++ /dev/null @@ -1,192 +0,0 @@ -createXml($result); - $dumpXmlPath = $outputFormatterInput->outputPath ?? self::DEFAULT_PATH; - \file_put_contents($dumpXmlPath, $xml); - $output->writeLineFormatted('JUnit Report dumped to ' . \realpath($dumpXmlPath) . ''); - } - /** - * @throws Exception - */ - private function createXml(OutputResult $result) : string - { - if (!\class_exists(DOMDocument::class)) { - throw new Exception('Unable to create xml file (php-xml needs to be installed)'); - } - $xmlDoc = new DOMDocument('1.0', 'UTF-8'); - $xmlDoc->formatOutput = \true; - $this->addTestSuites($result, $xmlDoc); - return (string) $xmlDoc->saveXML(); - } - private function addTestSuites(OutputResult $result, DOMDocument $xmlDoc) : void - { - /** @throws void */ - $testSuites = $xmlDoc->createElement('testsuites'); - $xmlDoc->appendChild($testSuites); - if ($result->hasErrors()) { - /** @throws void */ - $testSuite = $xmlDoc->createElement('testsuite'); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('id', '0')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('package', '')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('name', 'Unmatched skipped violations')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('hostname', 'localhost')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('tests', '0')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('failures', '0')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('skipped', '0')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('errors', (string) \count($result->errors))); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('time', '0')); - foreach ($result->errors as $message) { - /** @throws void */ - $error = $xmlDoc->createElement('error'); - /** @throws void */ - $error->appendChild(new DOMAttr('message', (string) $message)); - /** @throws void */ - $error->appendChild(new DOMAttr('type', 'WARNING')); - $testSuite->appendChild($error); - } - $testSuites->appendChild($testSuite); - } - $this->addTestSuite($result, $xmlDoc, $testSuites); - } - private function addTestSuite(OutputResult $result, DOMDocument $xmlDoc, DOMElement $testSuites) : void - { - /** @var array> $layers */ - $layers = []; - foreach ($result->allRules() as $rule) { - if ($rule instanceof CoveredRuleInterface) { - $layers[$rule->getDependerLayer()][] = $rule; - } elseif ($rule instanceof Uncovered) { - $layers[$rule->layer][] = $rule; - } - } - $layerIndex = 0; - foreach ($layers as $layer => $rules) { - $violationsByLayer = \array_filter($rules, static fn(RuleInterface $rule) => $rule instanceof Violation); - $skippedViolationsByLayer = \array_filter($rules, static fn(RuleInterface $rule) => $rule instanceof SkippedViolation); - $rulesByClassName = []; - foreach ($rules as $rule) { - $rulesByClassName[$rule->getDependency()->getDepender()->toString()][] = $rule; - } - /** @throws void */ - $testSuite = $xmlDoc->createElement('testsuite'); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('id', (string) ++$layerIndex)); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('package', '')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('name', $layer)); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('hostname', 'localhost')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('tests', (string) \count($rulesByClassName))); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('failures', (string) \count($violationsByLayer))); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('skipped', (string) \count($skippedViolationsByLayer))); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('errors', '0')); - /** @throws void */ - $testSuite->appendChild(new DOMAttr('time', '0')); - $testSuites->appendChild($testSuite); - $this->addTestCase($layer, $rulesByClassName, $xmlDoc, $testSuite); - } - } - /** - * @param array $rulesByClassName - */ - private function addTestCase(string $layer, array $rulesByClassName, DOMDocument $xmlDoc, DOMElement $testSuite) : void - { - foreach ($rulesByClassName as $className => $rules) { - /** @throws void */ - $testCase = $xmlDoc->createElement('testcase'); - /** @throws void */ - $testCase->appendChild(new DOMAttr('name', $layer . ' - ' . $className)); - /** @throws void */ - $testCase->appendChild(new DOMAttr('classname', $className)); - /** @throws void */ - $testCase->appendChild(new DOMAttr('time', '0')); - foreach ($rules as $rule) { - if ($rule instanceof SkippedViolation) { - $this->addSkipped($xmlDoc, $testCase); - } elseif ($rule instanceof Violation) { - $this->addFailure($rule, $xmlDoc, $testCase); - } elseif ($rule instanceof Uncovered) { - $this->addWarning($rule, $xmlDoc, $testCase); - } - } - $testSuite->appendChild($testCase); - } - } - private function addFailure(Violation $violation, DOMDocument $xmlDoc, DOMElement $testCase) : void - { - $dependency = $violation->getDependency(); - $message = \sprintf('%s:%d must not depend on %s (%s on %s)', $dependency->getDepender()->toString(), $dependency->getContext()->fileOccurrence->line, $dependency->getDependent()->toString(), $violation->getDependerLayer(), $violation->getDependentLayer()); - /** @throws void */ - $error = $xmlDoc->createElement('failure'); - /** @throws void */ - $error->appendChild(new DOMAttr('message', $message)); - /** @throws void */ - $error->appendChild(new DOMAttr('type', 'WARNING')); - $testCase->appendChild($error); - } - private function addSkipped(DOMDocument $xmlDoc, DOMElement $testCase) : void - { - /** @throws void */ - $skipped = $xmlDoc->createElement('skipped'); - $testCase->appendChild($skipped); - } - private function addWarning(Uncovered $rule, DOMDocument $xmlDoc, DOMElement $testCase) : void - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s:%d has uncovered dependency on %s (%s)', $dependency->getDepender()->toString(), $dependency->getContext()->fileOccurrence->line, $dependency->getDependent()->toString(), $rule->layer); - /** @throws void */ - $error = $xmlDoc->createElement('warning'); - /** @throws void */ - $error->appendChild(new DOMAttr('message', $message)); - /** @throws void */ - $error->appendChild(new DOMAttr('type', 'WARNING')); - $testCase->appendChild($error); - } -} diff --git a/pkg/supportive/output_formatter/JsonOutputFormatter.php b/pkg/supportive/output_formatter/JsonOutputFormatter.php deleted file mode 100644 index 8f5ed89..0000000 --- a/pkg/supportive/output_formatter/JsonOutputFormatter.php +++ /dev/null @@ -1,117 +0,0 @@ -reportSkipped) { - foreach ($result->allOf(SkippedViolation::class) as $rule) { - $this->addSkipped($violations, $rule); - } - } - if ($outputFormatterInput->reportUncovered) { - foreach ($result->allOf(Uncovered::class) as $rule) { - $this->addUncovered($violations, $rule); - } - } - foreach ($result->allOf(Violation::class) as $rule) { - $this->addFailure($violations, $rule); - } - $jsonArray['Report'] = ['Violations' => \count($result->violations()), 'Skipped violations' => \count($result->skippedViolations()), 'Uncovered' => \count($result->uncovered()), 'Allowed' => \count($result->allowed()), 'Warnings' => \count($result->warnings), 'Errors' => \count($result->errors)]; - foreach ($violations as &$value) { - $value['violations'] = \count($value['messages']); - } - $jsonArray['files'] = $violations; - $json = json_encode($jsonArray, JSON_PRETTY_PRINT); - if (\false === $json) { - throw new Exception(sprintf('Unable to render json output. %s', $this->jsonLastError())); - } - $dumpJsonPath = $outputFormatterInput->outputPath; - if (null !== $dumpJsonPath) { - \file_put_contents($dumpJsonPath, $json); - $output->writeLineFormatted('JSON Report dumped to ' . \realpath($dumpJsonPath) . ''); - return; - } - $output->writeRaw($json); - } - /** - * @param array}> $violationsArray - */ - private function addFailure(array &$violationsArray, Violation $violation) : void - { - $className = $violation->getDependency()->getContext()->fileOccurrence->filepath; - $violationsArray[$className]['messages'][] = ['message' => $this->getFailureMessage($violation), 'line' => $violation->getDependency()->getContext()->fileOccurrence->line, 'type' => 'error']; - } - private function getFailureMessage(Violation $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s must not depend on %s (%s on %s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->getDependerLayer(), $violation->getDependentLayer()); - } - /** - * @param array}> $violationsArray - */ - private function addSkipped(array &$violationsArray, SkippedViolation $violation) : void - { - $className = $violation->getDependency()->getContext()->fileOccurrence->filepath; - $violationsArray[$className]['messages'][] = ['message' => $this->getWarningMessage($violation), 'line' => $violation->getDependency()->getContext()->fileOccurrence->line, 'type' => 'warning']; - } - private function getWarningMessage(SkippedViolation $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s should not depend on %s (%s on %s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->getDependerLayer(), $violation->getDependentLayer()); - } - /** - * @param array}> $violationsArray - */ - private function addUncovered(array &$violationsArray, Uncovered $violation) : void - { - $className = $violation->getDependency()->getContext()->fileOccurrence->filepath; - $violationsArray[$className]['messages'][] = ['message' => $this->getUncoveredMessage($violation), 'line' => $violation->getDependency()->getContext()->fileOccurrence->line, 'type' => 'warning']; - } - private function getUncoveredMessage(Uncovered $violation) : string - { - $dependency = $violation->getDependency(); - return sprintf('%s has uncovered dependency on %s (%s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $violation->layer); - } - private function jsonLastError() : string - { - return match (json_last_error()) { - \JSON_ERROR_NONE => 'No errors', - \JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', - \JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', - \JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', - \JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON', - \JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded', - default => 'Unknown error', - }; - } -} diff --git a/pkg/supportive/output_formatter/MermaidJSOutputFormatter.php b/pkg/supportive/output_formatter/MermaidJSOutputFormatter.php deleted file mode 100644 index c6675e9..0000000 --- a/pkg/supportive/output_formatter/MermaidJSOutputFormatter.php +++ /dev/null @@ -1,95 +0,0 @@ -} */ - private array $config; - private const GRAPH_TYPE = 'flowchart %s;'; - private const GRAPH_END = ' end;'; - private const SUBGRAPH = ' subgraph %sGroup;'; - private const LAYER = ' %s;'; - private const GRAPH_NODE_FORMAT = ' %s -->|%d| %s;'; - private const VIOLATION_STYLE_FORMAT = ' linkStyle %d stroke:red,stroke-width:4px;'; - public function __construct(FormatterConfiguration $config) - { - /** @var array{direction: string, groups: array} $extractedConfig */ - $extractedConfig = $config->getConfigFor('mermaidjs'); - $this->config = $extractedConfig; - } - public static function getName() : string - { - return 'mermaidjs'; - } - public function finish(OutputResult $result, OutputInterface $output, OutputFormatterInput $outputFormatterInput) : void - { - $graph = $this->parseResults($result); - $violations = $result->violations(); - $buffer = ''; - $buffer .= \sprintf(self::GRAPH_TYPE . \PHP_EOL, $this->config['direction']); - foreach ($this->config['groups'] as $subGraphName => $layers) { - $buffer .= \sprintf(self::SUBGRAPH . \PHP_EOL, $subGraphName); - foreach ($layers as $layer) { - $buffer .= \sprintf(self::LAYER . \PHP_EOL, $layer); - } - $buffer .= self::GRAPH_END . \PHP_EOL; - } - $linkCount = 0; - $violationsLinks = []; - $violationGraphLinks = []; - foreach ($violations as $violation) { - if (!isset($violationsLinks[$violation->getDependerLayer()][$violation->getDependentLayer()])) { - $violationsLinks[$violation->getDependerLayer()][$violation->getDependentLayer()] = 1; - } else { - ++$violationsLinks[$violation->getDependerLayer()][$violation->getDependentLayer()]; - } - } - foreach ($violationsLinks as $dependerLayer => $layers) { - foreach ($layers as $dependentLayer => $count) { - $buffer .= \sprintf(self::GRAPH_NODE_FORMAT . \PHP_EOL, $dependerLayer, $count, $dependentLayer); - $violationGraphLinks[] = $linkCount; - ++$linkCount; - } - } - foreach ($graph as $dependerLayer => $layers) { - foreach ($layers as $dependentLayer => $count) { - if (!isset($violationsLinks[$dependerLayer][$dependentLayer])) { - $buffer .= \sprintf(self::GRAPH_NODE_FORMAT . \PHP_EOL, $dependerLayer, $count, $dependentLayer); - } - } - } - foreach ($violationGraphLinks as $linkNumber) { - $buffer .= \sprintf(self::VIOLATION_STYLE_FORMAT . \PHP_EOL, $linkNumber); - } - if (null !== $outputFormatterInput->outputPath) { - \file_put_contents($outputFormatterInput->outputPath, $buffer); - } else { - $output->writeRaw($buffer); - } - } - /** - * @return array>> - */ - protected function parseResults(OutputResult $result) : array - { - $graph = []; - foreach ($result->allowed() as $rule) { - if (!isset($graph[$rule->getDependerLayer()][$rule->getDependentLayer()])) { - $graph[$rule->getDependerLayer()][$rule->getDependentLayer()] = 1; - } else { - ++$graph[$rule->getDependerLayer()][$rule->getDependentLayer()]; - } - } - return $graph; - } -} diff --git a/pkg/supportive/output_formatter/XMLOutputFormatter.php b/pkg/supportive/output_formatter/XMLOutputFormatter.php deleted file mode 100644 index 21adfe6..0000000 --- a/pkg/supportive/output_formatter/XMLOutputFormatter.php +++ /dev/null @@ -1,81 +0,0 @@ -createXml($result); - $dumpXmlPath = $outputFormatterInput->outputPath ?? self::DEFAULT_PATH; - \file_put_contents($dumpXmlPath, $xml); - $output->writeLineFormatted('XML Report dumped to ' . \realpath($dumpXmlPath) . ''); - } - /** - * @throws Exception - */ - private function createXml(OutputResult $dependencyContext) : string - { - if (!\class_exists(DOMDocument::class)) { - throw new Exception('Unable to create xml file (php-xml needs to be installed)'); - } - $xmlDoc = new DOMDocument('1.0', 'UTF-8'); - $xmlDoc->formatOutput = \true; - $rootEntry = $xmlDoc->createElement('entries'); - foreach ($dependencyContext->violations() as $rule) { - $this->addRule('violation', $rootEntry, $xmlDoc, $rule); - } - foreach ($dependencyContext->skippedViolations() as $rule) { - $this->addRule('skipped_violation', $rootEntry, $xmlDoc, $rule); - } - $xmlDoc->appendChild($rootEntry); - return (string) $xmlDoc->saveXML(); - } - private function addRule(string $type, DOMElement $rootEntry, DOMDocument $xmlDoc, Violation|SkippedViolation $rule) : void - { - /** @throws void */ - $entry = $xmlDoc->createElement('entry'); - /** @throws void */ - $entry->appendChild(new DOMAttr('type', $type)); - /** @throws void */ - $entry->appendChild($xmlDoc->createElement('LayerA', $rule->getDependerLayer())); - /** @throws void */ - $entry->appendChild($xmlDoc->createElement('LayerB', $rule->getDependentLayer())); - $dependency = $rule->getDependency(); - /** @throws void */ - $entry->appendChild($xmlDoc->createElement('ClassA', $dependency->getDepender()->toString())); - /** @throws void */ - $entry->appendChild($xmlDoc->createElement('ClassB', $dependency->getDependent()->toString())); - $fileOccurrence = $dependency->getContext()->fileOccurrence; - /** @throws void */ - $occurrence = $xmlDoc->createElement('occurrence'); - $occurrence->setAttribute('file', $fileOccurrence->filepath); - $occurrence->setAttribute('line', (string) $fileOccurrence->line); - $entry->appendChild($occurrence); - $rootEntry->appendChild($entry); - } -} diff --git a/pkg/supportive/output_formatter/baseline_output_formatter.go b/pkg/supportive/output_formatter/baseline_output_formatter.go new file mode 100644 index 0000000..5f8c024 --- /dev/null +++ b/pkg/supportive/output_formatter/baseline_output_formatter.go @@ -0,0 +1,78 @@ +package output_formatter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/gookit/color" + "golang.org/x/exp/maps" + "gopkg.in/yaml.v3" + "os" + "path/filepath" + "slices" +) + +const BaselineOutputFormatterDefaultPath = "./deptrac.baseline.yaml" + +type BaselineOutputFormatter struct{} + +func NewBaselineOutputFormatter() *BaselineOutputFormatter { + return &BaselineOutputFormatter{} +} + +func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { + groupedViolations := b.collectViolations(outputResult) + + for _, violations := range groupedViolations { + slices.Sort(violations) + } + + baselineFile := BaselineOutputFormatterDefaultPath + if outputFormatterInput.OutputPath != nil { + baselineFile = *outputFormatterInput.OutputPath + } + + dirname := filepath.Dir(baselineFile) + if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { + if err := os.MkdirAll(dirname, 0777); err != nil { + if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + return err + } + } + } + + marshalled, err := yaml.Marshal(map[string]interface{}{"deptrac": map[string]interface{}{"skip_violations": groupedViolations}}) + if err != nil { + return err + } + + err = os.WriteFile(baselineFile, marshalled, 0666) + if err != nil { + return err + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + + return nil +} + +func (b *BaselineOutputFormatter) collectViolations(outputResult *output_result.OutputResult) map[string][]string { + violations := make(map[string]map[string]string) + for _, rule := range append(outputResult.AllOf(result.TypeViolation), outputResult.AllOf(result.TypeSkippedViolation)...) { + dependency := rule.GetDependency() + dependerClass := dependency.GetDepender().ToString() + dependentClass := dependency.GetDependent().ToString() + if _, ok := violations[dependerClass]; !ok { + violations[dependerClass] = make(map[string]string) + } + violations[dependerClass][dependentClass] = dependentClass + } + + mapped := make(map[string][]string) + for dependerClass, dependentClasses := range violations { + mapped[dependerClass] = maps.Values(dependentClasses) + } + + return mapped +} diff --git a/pkg/supportive/output_formatter/codeclimate_output_formatter.go b/pkg/supportive/output_formatter/codeclimate_output_formatter.go new file mode 100644 index 0000000..28748cd --- /dev/null +++ b/pkg/supportive/output_formatter/codeclimate_output_formatter.go @@ -0,0 +1,119 @@ +package output_formatter + +import ( + "crypto/sha1" + "encoding/json" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/util" + "os" +) + +type CodeclimateOutputFormatter struct { + config map[configuration.SeverityType]interface{} +} + +func NewCodeclimateOutputFormatter(config configuration.FormatterConfiguration) *CodeclimateOutputFormatter { + extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configuration.SeverityType]interface{}) + return &CodeclimateOutputFormatter{config: extractedConfig} +} + +func (f *CodeclimateOutputFormatter) GetName() string { + return "codeclimate" +} + +func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + formatterConfig := configuration.NewConfigurationCodeclimateFromArray(f.config) + var violations []map[string]interface{} + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { + f.addSkipped(&violations, rule.(*result.SkippedViolation), formatterConfig) + } + } + + if input.ReportUncovered { + for _, rule := range outputResult.AllOf(result.TypeUncovered) { + f.addUncovered(&violations, rule.(*result.Uncovered), formatterConfig) + } + } + + for _, rule := range outputResult.AllOf(result.TypeViolation) { + f.addFailure(&violations, rule.(*result.Violation), formatterConfig) + } + + jsonData, err := json.MarshalIndent(violations, "", " ") + if err != nil { + return fmt.Errorf("unable to render codeclimate output: %v", err) + } + + if input.OutputPath != nil && *input.OutputPath != "" { + err := os.WriteFile(*input.OutputPath, jsonData, 0644) + if err != nil { + return err + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + return nil + } + + output.WriteRaw(string(jsonData)) + return nil +} + +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *result.Violation, config *configuration.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) +} + +func (f *CodeclimateOutputFormatter) getFailureMessage(violation *result.Violation) *string { + dependency := violation.GetDependency() + return util.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) +} + +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *result.SkippedViolation, config *configuration.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) +} + +func (f *CodeclimateOutputFormatter) getWarningMessage(violation *result.SkippedViolation) *string { + dependency := violation.GetDependency() + return util.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) +} + +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *result.Uncovered, config *configuration.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) +} + +func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *result.Uncovered) *string { + dependency := violation.GetDependency() + return util.AsPtr(fmt.Sprintf("%s has uncovered dependency on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) +} + +func (f *CodeclimateOutputFormatter) buildRuleArray(rule result.RuleInterface, message, severity *string) map[string]interface{} { + return map[string]interface{}{ + "type": "issue", + "check_name": "Dependency violation", + "fingerprint": f.buildFingerprint(rule), + "description": message, + "categories": []string{"Style", "Complexity"}, + "severity": severity, + "location": map[string]interface{}{ + "path": rule.GetDependency().GetContext().FileOccurrence.FilePath, + "lines": map[string]interface{}{ + "begin": rule.GetDependency().GetContext().FileOccurrence.Line, + }, + }, + } +} + +func (f *CodeclimateOutputFormatter) buildFingerprint(rule result.RuleInterface) string { + data := fmt.Sprintf("%s,%s,%s,%s,%d", + rule, + rule.GetDependency().GetDepender(), + rule.GetDependency().GetDependent(), + rule.GetDependency().GetContext().FileOccurrence.FilePath, + rule.GetDependency().GetContext().FileOccurrence.Line) + + return fmt.Sprintf("%x", sha1.Sum([]byte(data))) +} diff --git a/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go b/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go index 50d3f76..24e238f 100644 --- a/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go +++ b/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go @@ -1,34 +1,34 @@ package configuration -type severityType string +type SeverityType string const ( - Failure severityType = "failure" - Skipped severityType = "skipped" - Uncovered severityType = "uncovered" + Failure SeverityType = "failure" + Skipped SeverityType = "skipped" + Uncovered SeverityType = "uncovered" ) type ConfigurationCodeclimate struct { - severityMap map[severityType]string + severityMap map[SeverityType]string } -func NewConfigurationCodeclimateFromArray(array map[severityType]interface{}) *ConfigurationCodeclimate { +func NewConfigurationCodeclimateFromArray(array map[SeverityType]interface{}) *ConfigurationCodeclimate { severityUntyped, ok := array["severityType"] - severity := make(map[severityType]string) + severity := make(map[SeverityType]string) if !ok { return newConfigurationCodeclimate(severity) } - return newConfigurationCodeclimate(severityUntyped.(map[severityType]string)) + return newConfigurationCodeclimate(severityUntyped.(map[SeverityType]string)) } -func newConfigurationCodeclimate(severityMap map[severityType]string) *ConfigurationCodeclimate { +func newConfigurationCodeclimate(severityMap map[SeverityType]string) *ConfigurationCodeclimate { return &ConfigurationCodeclimate{severityMap: severityMap} } -func (c *ConfigurationCodeclimate) getSeverity(key severityType) *string { +func (c *ConfigurationCodeclimate) GetSeverity(key SeverityType) *string { v, ok := c.severityMap[key] if !ok { return nil diff --git a/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go b/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go index e1a3393..310ee66 100644 --- a/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go +++ b/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go @@ -1,9 +1,9 @@ package configuration type ConfigurationGraphViz struct { - hiddenLayers []string - groupsLayerMap map[string][]string - pointToGroups bool + HiddenLayers []string + GroupsLayerMap map[string][]string + PointToGroups bool } func NewConfigurationGraphVizFromArray(array map[string]interface{}) *ConfigurationGraphViz { @@ -15,5 +15,5 @@ func NewConfigurationGraphVizFromArray(array map[string]interface{}) *Configurat } func newConfigurationGraphViz(hiddenLayers []string, groupsLayerMap map[string][]string, pointToGroups bool) *ConfigurationGraphViz { - return &ConfigurationGraphViz{hiddenLayers: hiddenLayers, groupsLayerMap: groupsLayerMap, pointToGroups: pointToGroups} + return &ConfigurationGraphViz{HiddenLayers: hiddenLayers, GroupsLayerMap: groupsLayerMap, PointToGroups: pointToGroups} } diff --git a/pkg/supportive/output_formatter/console_output_formatter.go b/pkg/supportive/output_formatter/console_output_formatter.go new file mode 100644 index 0000000..c026cc7 --- /dev/null +++ b/pkg/supportive/output_formatter/console_output_formatter.go @@ -0,0 +1,160 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "strings" +) + +type ConsoleOutputFormatter struct{} + +func NewConsoleOutputFormatter() *ConsoleOutputFormatter { + return &ConsoleOutputFormatter{} +} + +func (f *ConsoleOutputFormatter) GetName() string { + return "console" +} + +func (f *ConsoleOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) { + for _, rule := range outputResult.AllOf(result.TypeViolation) { + f.printViolation(rule.(*result.Violation), output) + } + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { + f.printViolation(rule.(*result.SkippedViolation), output) + } + } + + if input.ReportUncovered { + f.printUncovered(outputResult, output) + } + + if outputResult.HasErrors() { + f.printErrors(outputResult, output) + } + + if outputResult.HasWarnings() { + f.printWarnings(outputResult, output) + } + + f.printSummary(outputResult, output) +} + +func (f *ConsoleOutputFormatter) printViolation(rule result.RuleInterface, output output_formatter.OutputInterface) { + dep := rule.GetDependency() + skippedText := "" + + dependerLayer := "" + dependentLayer := "" + + if ruleAsserted, ok := rule.(*result.SkippedViolation); ok { + skippedText = "[SKIPPED] " + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else if ruleAsserted, ok := rule.(*result.Violation); ok { + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else { + panic(fmt.Errorf("unknown rule type: %T", rule)) + } + + output.WriteLineFormatted( + output_formatter.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", + skippedText, + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + dependerLayer, + dependentLayer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } +} + +func (f *ConsoleOutputFormatter) printMultilinePath(output output_formatter.OutputInterface, dep dependency.DependencyInterface) { + var buffer strings.Builder + for _, depSerialized := range dep.Serialize() { + buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: buffer.String()}) +} + +func (f *ConsoleOutputFormatter) printSummary(result output_result.OutputResult, output output_formatter.OutputInterface) { + violationCount := len(result.Violations()) + skippedViolationCount := len(result.SkippedViolations()) + uncoveredCount := len(result.Uncovered()) + allowedCount := len(result.Allowed()) + warningsCount := len(result.Warnings) + errorsCount := len(result.Errors) + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) +} + +func (f *ConsoleOutputFormatter) printUncovered(result output_result.OutputResult, output output_formatter.OutputInterface) { + uncovered := result.Uncovered() + if len(uncovered) == 0 { + return + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + for _, u := range uncovered { + dep := u.GetDependency() + output.WriteLineFormatted( + output_formatter.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s has uncovered dependency on %s (%s)", + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + u.Layer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } + } +} + +func (f *ConsoleOutputFormatter) printFileOccurrence(output output_formatter.OutputInterface, fileOccurrence *ast.FileOccurrence) { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +} + +func (f *ConsoleOutputFormatter) printErrors(result output_result.OutputResult, output output_formatter.OutputInterface) { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + for _, err := range result.Errors { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + } +} + +func (f *ConsoleOutputFormatter) printWarnings(result output_result.OutputResult, output output_formatter.OutputInterface) { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + for _, warning := range result.Warnings { + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + } +} + +func (f *ConsoleOutputFormatter) getColor(condition bool, trueColor, falseColor string) string { + if condition { + return trueColor + } + return falseColor +} diff --git a/pkg/supportive/output_formatter/github_actions_output_formatter.go b/pkg/supportive/output_formatter/github_actions_output_formatter.go index 059aa11..d28316f 100644 --- a/pkg/supportive/output_formatter/github_actions_output_formatter.go +++ b/pkg/supportive/output_formatter/github_actions_output_formatter.go @@ -66,7 +66,7 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.Outp String: fmt.Sprintf( "::%s file=%s,line=%d::%s has uncovered dependency on %s (%s)", reportAs, - dependency.GetContext().FileOccurrence.Filepath, + dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), @@ -116,5 +116,5 @@ func (g *GithubActionsOutputFormatter) printViolation(rule result.RuleInterface, message += "%0A" + g.multilinePathMessage(dependency) } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.Filepath, dependency.GetContext().FileOccurrence.Line, message)}) + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) } diff --git a/pkg/supportive/output_formatter/graph_viz_output_display_formatter.go b/pkg/supportive/output_formatter/graph_viz_output_display_formatter.go new file mode 100644 index 0000000..859dae6 --- /dev/null +++ b/pkg/supportive/output_formatter/graph_viz_output_display_formatter.go @@ -0,0 +1,58 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "os/exec" + "runtime" + "time" + + "github.com/goccy/go-graphviz" + "github.com/goccy/go-graphviz/cgraph" +) + +type GraphVizOutputDisplayFormatter struct { + GraphVizOutputFormatter +} + +const DelayOpen = 2 * time.Second + +func NewGraphVizOutputDisplayFormatter(config configuration.FormatterConfiguration) *GraphVizOutputDisplayFormatter { + return &GraphVizOutputDisplayFormatter{ + GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), + } +} + +func (f *GraphVizOutputDisplayFormatter) GetName() string { + return "graphviz-display" +} + +func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + filename, err := f.getTempImage(g, graph) + if err != nil { + return fmt.Errorf("unable to create temp file for output: %v", err) + } + + staticNext := time.Now() + if time.Now().Before(staticNext) { + time.Sleep(DelayOpen) + } + + var openCmd *exec.Cmd + switch runtime.GOOS { + case "windows": + openCmd = exec.Command("cmd", "/C", "start", "", filename) + case "darwin": + openCmd = exec.Command("open", filename) + default: // Assuming Linux or other Unix-like OS + openCmd = exec.Command("xdg-open", filename) + } + + if err := openCmd.Start(); err != nil { + return fmt.Errorf("unable to display output: %v", err) + } + + staticNext = time.Now().Add(DelayOpen) + return nil +} diff --git a/pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go b/pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go new file mode 100644 index 0000000..547a355 --- /dev/null +++ b/pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go @@ -0,0 +1,48 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "os" + "path/filepath" + + "github.com/goccy/go-graphviz" + "github.com/goccy/go-graphviz/cgraph" +) + +type GraphVizOutputDotFormatter struct { + GraphVizOutputFormatter +} + +func NewGraphVizOutputDotFormatter(config configuration.FormatterConfiguration) *GraphVizOutputDotFormatter { + return &GraphVizOutputDotFormatter{ + GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), + } +} + +func (f *GraphVizOutputDotFormatter) GetName() string { + return "graphviz-dot" +} + +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + dumpDotPath := input.OutputPath + if dumpDotPath == nil || *dumpDotPath == "" { + return fmt.Errorf("no '--output' defined for GraphViz formatter") + } + + // Render the graph to DOT format + wr, _ := os.Create(filepath.Clean(*dumpDotPath)) + err := g.Render(graph, graphviz.XDOT, wr) + if err != nil { + return fmt.Errorf("unable to render graph to DOT format: %v", err) + } + + // Write the DOT data to the specified file + //if err := os.WriteFile(dumpDotPath, dotData, 0644); err != nil { + // return fmt.Errorf("unable to write DOT data to file: %v", err) + //} + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + return nil +} diff --git a/pkg/supportive/output_formatter/graph_viz_output_formatter.go b/pkg/supportive/output_formatter/graph_viz_output_formatter.go new file mode 100644 index 0000000..dc5fe07 --- /dev/null +++ b/pkg/supportive/output_formatter/graph_viz_output_formatter.go @@ -0,0 +1,191 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "github.com/goccy/go-graphviz" + "github.com/goccy/go-graphviz/cgraph" + "os" + "path/filepath" + "slices" +) + +type GraphVizOutputFormatter struct { + config configuration.ConfigurationGraphViz +} + +func NewGraphVizOutputFormatter(config configuration.FormatterConfiguration) *GraphVizOutputFormatter { + extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configuration.ConfigurationGraphViz) + return &GraphVizOutputFormatter{config: extractedConfig} +} + +func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + layerViolations := f.calculateViolations(result.Violations()) + layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) + + outputConfig := f.config + g := graphviz.New() + graph, err := g.Graph() + if err != nil { + return err + } + defer func(graph *cgraph.Graph) { + err := graph.Close() + if err != nil { + fmt.Println("failed to close graph", err) + } + }(graph) + + nodes := f.createNodes(outputConfig, layersDependOnLayers, graph) + f.addNodesToGraph(graph, nodes, outputConfig) + f.connectEdges(graph, nodes, outputConfig, layersDependOnLayers, layerViolations) + + if err := f.output(g, graph, output, input); err != nil { + return err + } + return nil +} + +func (f *GraphVizOutputFormatter) calculateViolations(violations []*result.Violation) map[string]map[string]int { + layerViolations := make(map[string]map[string]int) + for _, violation := range violations { + dependerLayer := violation.GetDependerLayer() + dependentLayer := violation.GetDependentLayer() + + if layerViolations[dependerLayer] == nil { + layerViolations[dependerLayer] = make(map[string]int) + } + + layerViolations[dependerLayer][dependentLayer]++ + } + return layerViolations +} + +func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result.RuleInterface) map[string]map[string]int { + layersDependOnLayers := make(map[string]map[string]int) + for _, rule := range rules { + switch r := rule.(type) { + case result.CoveredRuleInterface: + layerA := r.GetDependerLayer() + layerB := r.GetDependentLayer() + + if layersDependOnLayers[layerA] == nil { + layersDependOnLayers[layerA] = make(map[string]int) + } + + layersDependOnLayers[layerA][layerB]++ + case *result.Uncovered: + if layersDependOnLayers[r.Layer] == nil { + layersDependOnLayers[r.Layer] = make(map[string]int) + } + } + } + return layersDependOnLayers +} + +func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { + nodes := make(map[string]*cgraph.Node) + for layer, layersDependOn := range layersDependOnLayers { + if slices.Contains(outputConfig.HiddenLayers, layer) { + continue + } + if nodes[layer] == nil { + nodes[layer], _ = graph.CreateNode(layer) + } + for layerDependOn := range layersDependOn { + if slices.Contains(outputConfig.HiddenLayers, layerDependOn) { + continue + } + if nodes[layerDependOn] == nil { + nodes[layerDependOn], _ = graph.CreateNode(layerDependOn) + } + } + } + return nodes +} + +func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { + for layer, layersDependOn := range layersDependOnLayers { + if slices.Contains(outputConfig.HiddenLayers, layer) { + continue + } + for layerDependOn, layerDependOnCount := range layersDependOn { + if slices.Contains(outputConfig.HiddenLayers, layerDependOn) { + continue + } + edge, _ := graph.CreateEdge(fmt.Sprintf("%s->%s", layer, layerDependOn), nodes[layer], nodes[layerDependOn]) + if outputConfig.PointToGroups && graph.SubGraph(f.getSubgraphName(layerDependOn), 0) != nil { + edge.Set("lhead", f.getSubgraphName(layerDependOn)) + } + if count, ok := layerViolations[layer][layerDependOn]; ok { + edge.SetLabel(fmt.Sprintf("%d", count)) + edge.Set("color", "red") + } else { + edge.SetLabel(fmt.Sprintf("%d", layerDependOnCount)) + } + } + } +} + +func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration.ConfigurationGraphViz) { + for groupName, groupLayerNames := range outputConfig.GroupsLayerMap { + subgraph := graph.SubGraph(f.getSubgraphName(groupName), 1) + subgraph.SetLabel(groupName) + for _, groupLayerName := range groupLayerNames { + if node, exists := nodes[groupLayerName]; exists { + subgraph.NextNode(node) + node.Set("group", groupName) + delete(nodes, groupLayerName) + } + } + } + + for _, node := range nodes { + graph.NextNode(node) + } +} + +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + filename, err := f.getTempImage(g, graph) + if err != nil { + return fmt.Errorf("unable to create temp file for output: %v", err) + } + + if input.OutputPath != nil && *input.OutputPath != "" { + if err := os.Rename(filename, *input.OutputPath); err != nil { + return fmt.Errorf("unable to move temp file to output path: %v", err) + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + return nil + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + return nil +} + +func (f *GraphVizOutputFormatter) getTempImage(g *graphviz.Graphviz, graph *cgraph.Graph) (string, error) { + tempFile, err := os.CreateTemp("", "deptrac-*.png") + if err != nil { + return "", fmt.Errorf("unable to create temp file: %v", err) + } + defer func(tempFile *os.File) { + err := tempFile.Close() + if err != nil { + fmt.Printf("unable to close temp file: %v", err) + } + }(tempFile) + + filename := tempFile.Name() + if err := g.RenderFilename(graph, graphviz.PNG, filename); err != nil { + return "", fmt.Errorf("unable to export graph to image: %v", err) + } + + return filename, nil +} + +func (f *GraphVizOutputFormatter) getSubgraphName(groupName string) string { + return "cluster_" + groupName +} diff --git a/pkg/supportive/output_formatter/graph_viz_output_html_formatter.go b/pkg/supportive/output_formatter/graph_viz_output_html_formatter.go new file mode 100644 index 0000000..7bd7f63 --- /dev/null +++ b/pkg/supportive/output_formatter/graph_viz_output_html_formatter.go @@ -0,0 +1,68 @@ +package output_formatter + +import ( + "encoding/base64" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "os" + "path/filepath" + + "github.com/goccy/go-graphviz" + "github.com/goccy/go-graphviz/cgraph" +) + +type GraphVizOutputHtmlFormatter struct { + GraphVizOutputFormatter +} + +func NewGraphVizOutputHtmlFormatter(config configuration.FormatterConfiguration) *GraphVizOutputHtmlFormatter { + return &GraphVizOutputHtmlFormatter{ + GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), + } +} + +func (f *GraphVizOutputHtmlFormatter) GetName() string { + return "graphviz-html" +} + +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + dumpHtmlPath := input.OutputPath + if dumpHtmlPath == nil || *dumpHtmlPath == "" { + return fmt.Errorf("no '--output' defined for GraphViz formatter") + } + + // Generate a temporary image file + filename, err := f.getTempImage(g, graph) + if err != nil { + return fmt.Errorf("unable to create temp file for output: %v", err) + } + + // Ensure the temporary file is removed after processing + defer func(name string) { + err := os.Remove(name) + if err != nil { + fmt.Printf("unable to remove temp file: %v", err) + } + }(filename) + + // Read the image data + imageData, err := os.ReadFile(filename) + if err != nil { + return fmt.Errorf("unable to read temp image file: %v", err) + } + + // Encode the image data to base64 + base64Image := base64.StdEncoding.EncodeToString(imageData) + + // Create the HTML content with the embedded base64 image + htmlContent := fmt.Sprintf(``, base64Image) + + // Write the HTML content to the specified file + if err := os.WriteFile(*dumpHtmlPath, []byte(htmlContent), 0644); err != nil { + return fmt.Errorf("unable to write HTML file: %v", err) + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + return nil +} diff --git a/pkg/supportive/output_formatter/graph_viz_output_image_formatter.go b/pkg/supportive/output_formatter/graph_viz_output_image_formatter.go new file mode 100644 index 0000000..4ea5202 --- /dev/null +++ b/pkg/supportive/output_formatter/graph_viz_output_image_formatter.go @@ -0,0 +1,65 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "os" + "path/filepath" + + "github.com/goccy/go-graphviz" + "github.com/goccy/go-graphviz/cgraph" +) + +type GraphVizOutputImageFormatter struct { + GraphVizOutputFormatter +} + +func NewGraphVizOutputImageFormatter(config configuration.FormatterConfiguration) *GraphVizOutputImageFormatter { + return &GraphVizOutputImageFormatter{ + GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), + } +} + +func (f *GraphVizOutputImageFormatter) GetName() string { + return "graphviz-image" +} + +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + dumpImagePath := input.OutputPath + if dumpImagePath == nil || *dumpImagePath == "" { + return fmt.Errorf("no '--output' defined for GraphViz formatter") + } + + imagePathInfo := filepath.Dir(*dumpImagePath) + if _, err := os.Stat(imagePathInfo); os.IsNotExist(err) { + return fmt.Errorf("unable to dump image: Path \"%s\" does not exist or is not writable", imagePathInfo) + } + + if err := g.RenderFilename(graph, f.getImageFormat(*dumpImagePath), *dumpImagePath); err != nil { + return fmt.Errorf("unable to display output: %v", err) + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", dumpImagePath)}) + return nil +} + +func (f *GraphVizOutputImageFormatter) getImageFormat(filePath string) graphviz.Format { + extension := filepath.Ext(filePath) + if extension == "" { + return graphviz.PNG + } + // Removing the dot from extension (e.g., ".png" -> "png") + extension = extension[1:] + + switch extension { + case "png": + return graphviz.PNG + case "jpg", "jpeg": + return graphviz.JPG + case "svg": + return graphviz.SVG + default: + return graphviz.PNG + } +} diff --git a/pkg/supportive/output_formatter/json_output_formatter.go b/pkg/supportive/output_formatter/json_output_formatter.go new file mode 100644 index 0000000..21569dc --- /dev/null +++ b/pkg/supportive/output_formatter/json_output_formatter.go @@ -0,0 +1,147 @@ +package output_formatter + +import ( + "encoding/json" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "os" + "path/filepath" +) + +type JsonOutputFormatter struct{} + +func NewJsonOutputFormatter() *JsonOutputFormatter { + return &JsonOutputFormatter{} +} + +func (f *JsonOutputFormatter) GetName() string { + return "json" +} + +func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + jsonArray := make(map[string]interface{}) + violations := make(map[string]FileViolations) + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { + f.addSkipped(violations, rule.(*result.SkippedViolation)) + } + } + if input.ReportUncovered { + for _, rule := range outputResult.AllOf(result.TypeUncovered) { + f.addUncovered(violations, rule.(*result.Uncovered)) + } + } + for _, rule := range outputResult.AllOf(result.TypeViolation) { + f.addFailure(violations, rule.(*result.Violation)) + } + + // Add report summary to jsonArray + jsonArray["Report"] = map[string]interface{}{ + "Violations": len(outputResult.Violations()), + "Skipped violations": len(outputResult.SkippedViolations()), + "Uncovered": len(outputResult.Uncovered()), + "Allowed": len(outputResult.Allowed()), + "Warnings": len(outputResult.Warnings), + "Errors": len(outputResult.Errors), + } + + // Add violation count to each file + for fileName, fileViolation := range violations { + fileViolation.Violations = len(fileViolation.Messages) + violations[fileName] = fileViolation + } + + jsonArray["files"] = violations + + jsonData, err := json.MarshalIndent(jsonArray, "", " ") + if err != nil { + return fmt.Errorf("unable to render JSON output: %v", err) + } + + if input.OutputPath != nil && *input.OutputPath != "" { + if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { + return err + } + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + return nil + } + + output.WriteRaw(string(jsonData)) + return nil +} + +func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *result.Violation) { + className := violation.GetDependency().GetContext().FileOccurrence.FilePath + violations[className] = appendViolation(violations[className], Message{ + Message: f.getFailureMessage(violation), + Line: violation.GetDependency().GetContext().FileOccurrence.Line, + Type: "error", + }) +} + +func (f *JsonOutputFormatter) getFailureMessage(violation *result.Violation) string { + dependency := violation.GetDependency() + return fmt.Sprintf("%s must not depend on %s (%s on %s)", + dependency.GetDepender().ToString(), + dependency.GetDependent().ToString(), + violation.GetDependerLayer(), + violation.GetDependentLayer(), + ) +} + +func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *result.SkippedViolation) { + className := violation.GetDependency().GetContext().FileOccurrence.FilePath + violations[className] = appendViolation(violations[className], Message{ + Message: f.getWarningMessage(violation), + Line: violation.GetDependency().GetContext().FileOccurrence.Line, + Type: "warning", + }) +} + +func (f *JsonOutputFormatter) getWarningMessage(violation *result.SkippedViolation) string { + dependency := violation.GetDependency() + return fmt.Sprintf("%s should not depend on %s (%s on %s)", + dependency.GetDepender().ToString(), + dependency.GetDependent().ToString(), + violation.GetDependerLayer(), + violation.GetDependentLayer(), + ) +} + +func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *result.Uncovered) { + className := violation.GetDependency().GetContext().FileOccurrence.FilePath + violations[className] = appendViolation(violations[className], Message{ + Message: f.getUncoveredMessage(violation), + Line: violation.GetDependency().GetContext().FileOccurrence.Line, + Type: "warning", + }) +} + +func (f *JsonOutputFormatter) getUncoveredMessage(violation *result.Uncovered) string { + dependency := violation.GetDependency() + return fmt.Sprintf("%s has uncovered dependency on %s (%s)", + dependency.GetDepender().ToString(), + dependency.GetDependent().ToString(), + violation.Layer, + ) +} + +// Helper functions to manage violations +func appendViolation(violation FileViolations, message Message) FileViolations { + violation.Messages = append(violation.Messages, message) + return violation +} + +type FileViolations struct { + Messages []Message `json:"messages"` + Violations int `json:"violations"` +} + +type Message struct { + Message string `json:"message"` + Line int `json:"line"` + Type string `json:"type"` +} diff --git a/pkg/supportive/output_formatter/junit_output_formatter.go b/pkg/supportive/output_formatter/junit_output_formatter.go new file mode 100644 index 0000000..dc331da --- /dev/null +++ b/pkg/supportive/output_formatter/junit_output_formatter.go @@ -0,0 +1,173 @@ +package output_formatter + +import ( + "encoding/xml" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + result2 "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/util" + "os" + "path/filepath" +) + +type JUnitOutputFormatter struct{} + +const DefaultJUnitPath = "./junit-report.xml" + +func NewJUnitOutputFormatter() *JUnitOutputFormatter { + return &JUnitOutputFormatter{} +} + +func (f *JUnitOutputFormatter) GetName() string { + return "junit" +} + +func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + xmlData, err := f.createXML(result) + if err != nil { + return err + } + + dumpXmlPath := input.OutputPath + if dumpXmlPath == nil || *dumpXmlPath == "" { + dumpXmlPath = util.AsPtr(DefaultJUnitPath) + } + + if err := os.WriteFile(*dumpXmlPath, []byte(xmlData), 0644); err != nil { + return err + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + return nil +} + +func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult) (string, error) { + testSuites := TestSuites{} + if outputResult.HasErrors() { + errorSuite := TestSuite{ + ID: "0", + Name: "Unmatched skipped violations", + Hostname: "localhost", + Errors: len(outputResult.Errors), + } + for _, message := range outputResult.Errors { + errorSuite.ErrorsList = append(errorSuite.ErrorsList, Error{ + Message: message.ToString(), + Type: "WARNING", + }) + } + testSuites.TestSuites = append(testSuites.TestSuites, errorSuite) + } + + layers := f.groupRulesByLayer(outputResult) + layerIndex := 0 + for layer, rules := range layers { + layerIndex++ + testSuite := TestSuite{ + ID: fmt.Sprintf("%d", layerIndex), + Name: layer, + Hostname: "localhost", + } + testSuite.Tests = len(rules) + for _, rule := range rules { + testCase := TestCase{ + Name: fmt.Sprintf("%s - %s", layer, rule.GetDependency().GetDepender().ToString()), + Classname: rule.GetDependency().GetDepender().ToString(), + } + switch r := rule.(type) { + case *result2.Violation: + testSuite.Failures++ + testCase.Failures = append(testCase.Failures, Failure{ + Message: fmt.Sprintf("%s:%d must not depend on %s (%s on %s)", + r.GetDependency().GetDepender().ToString(), + r.GetDependency().GetContext().FileOccurrence.Line, + r.GetDependency().GetDependent().ToString(), + r.GetDependerLayer(), + r.GetDependentLayer(), + ), + Type: "WARNING", + }) + case *result2.SkippedViolation: + testSuite.Skipped++ + testCase.Skipped = append(testCase.Skipped, Skipped{}) + case *result2.Uncovered: + testCase.Warnings = append(testCase.Warnings, Warning{ + Message: fmt.Sprintf("%s:%d has uncovered dependency on %s (%s)", + r.GetDependency().GetDepender().ToString(), + r.GetDependency().GetContext().FileOccurrence.Line, + r.GetDependency().GetDependent().ToString(), + r.Layer, + ), + Type: "WARNING", + }) + } + testSuite.TestCases = append(testSuite.TestCases, testCase) + } + testSuites.TestSuites = append(testSuites.TestSuites, testSuite) + } + + xmlData, err := xml.MarshalIndent(testSuites, "", " ") + if err != nil { + return "", fmt.Errorf("unable to create XML: %v", err) + } + + return xml.Header + string(xmlData), nil +} + +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult output_result.OutputResult) map[string][]result2.RuleInterface { + layers := make(map[string][]result2.RuleInterface) + for _, rule := range outputResult.AllRules() { + switch r := rule.(type) { + case result2.CoveredRuleInterface: + layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) + case *result2.Uncovered: + layers[r.Layer] = append(layers[r.Layer], rule) + } + } + return layers +} + +type TestSuites struct { + XMLName xml.Name `xml:"testsuites"` + TestSuites []TestSuite `xml:"testsuite"` +} + +type TestSuite struct { + ID string `xml:"id,attr"` + Name string `xml:"name,attr"` + Hostname string `xml:"hostname,attr"` + Tests int `xml:"tests,attr"` + Failures int `xml:"failures,attr"` + Skipped int `xml:"skipped,attr"` + Errors int `xml:"errors,attr"` + TestCases []TestCase `xml:"testcase"` + ErrorsList []Error `xml:"error"` +} + +type TestCase struct { + Name string `xml:"name,attr"` + Classname string `xml:"classname,attr"` + Failures []Failure `xml:"failure"` + Skipped []Skipped `xml:"skipped"` + Warnings []Warning `xml:"warning"` +} + +type Failure struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` +} + +type Skipped struct { + XMLName xml.Name `xml:"skipped"` +} + +type Warning struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` +} + +type Error struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` +} diff --git a/pkg/supportive/output_formatter/mermaid_js_output_formatter.go b/pkg/supportive/output_formatter/mermaid_js_output_formatter.go new file mode 100644 index 0000000..9acdc13 --- /dev/null +++ b/pkg/supportive/output_formatter/mermaid_js_output_formatter.go @@ -0,0 +1,110 @@ +package output_formatter + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "os" + "strings" +) + +type MermaidJSOutputFormatter struct { + config *formatter.MermaidJsConfig +} + +const ( + GraphTypeFormat = "flowchart %s;\n" + GraphEnd = " end;\n" + SubgraphFormat = " subgraph %sGroup;\n" + LayerFormat = " %s;\n" + GraphNodeFormat = " %s -->|%d| %s;\n" + ViolationStyleFormat = " linkStyle %d stroke:red,stroke-width:4px;\n" + DefaultOutputPath = "./mermaid-graph.md" +) + +func NewMermaidJSOutputFormatter(config configuration.FormatterConfiguration) *MermaidJSOutputFormatter { + extractedConfig := config.GetConfigFor("mermaidjs").(interface{}).(*formatter.MermaidJsConfig) + return &MermaidJSOutputFormatter{config: extractedConfig} +} + +func (f *MermaidJSOutputFormatter) GetName() string { + return "mermaidjs" +} + +func (f *MermaidJSOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + graph := f.parseResults(result) + violations := result.Violations() + var buffer strings.Builder + + buffer.WriteString(fmt.Sprintf(GraphTypeFormat, f.config.Direction)) + + for subGraphName, layers := range f.config.Groups { + buffer.WriteString(fmt.Sprintf(SubgraphFormat, subGraphName)) + for _, layer := range layers { + buffer.WriteString(fmt.Sprintf(LayerFormat, layer.Name)) + } + buffer.WriteString(GraphEnd) + } + + linkCount := 0 + violationsLinks := make(map[string]map[string]int) + violationGraphLinks := make([]int, 0) + + for _, violation := range violations { + dependerLayer := violation.GetDependerLayer() + dependentLayer := violation.GetDependentLayer() + + if violationsLinks[dependerLayer] == nil { + violationsLinks[dependerLayer] = make(map[string]int) + } + + violationsLinks[dependerLayer][dependentLayer]++ + } + + for dependerLayer, layers := range violationsLinks { + for dependentLayer, count := range layers { + buffer.WriteString(fmt.Sprintf(GraphNodeFormat, dependerLayer, count, dependentLayer)) + violationGraphLinks = append(violationGraphLinks, linkCount) + linkCount++ + } + } + + for dependerLayer, layers := range graph { + for dependentLayer, count := range layers { + if _, exists := violationsLinks[dependerLayer][dependentLayer]; !exists { + buffer.WriteString(fmt.Sprintf(GraphNodeFormat, dependerLayer, count, dependentLayer)) + } + } + } + + for _, linkNumber := range violationGraphLinks { + buffer.WriteString(fmt.Sprintf(ViolationStyleFormat, linkNumber)) + } + + if input.OutputPath != nil && *input.OutputPath != "" { + if err := os.WriteFile(*input.OutputPath, []byte(buffer.String()), 0644); err != nil { + return err + } + } else { + output.WriteRaw(buffer.String()) + } + + return nil +} + +func (f *MermaidJSOutputFormatter) parseResults(result output_result.OutputResult) map[string]map[string]int { + graph := make(map[string]map[string]int) + for _, rule := range result.Allowed() { + dependerLayer := rule.GetDependerLayer() + dependentLayer := rule.GetDependentLayer() + + if graph[dependerLayer] == nil { + graph[dependerLayer] = make(map[string]int) + } + + graph[dependerLayer][dependentLayer]++ + } + return graph +} diff --git a/pkg/supportive/output_formatter/table_output_formatter.go b/pkg/supportive/output_formatter/table_output_formatter.go index 8c3f404..340c32e 100644 --- a/pkg/supportive/output_formatter/table_output_formatter.go +++ b/pkg/supportive/output_formatter/table_output_formatter.go @@ -86,7 +86,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *result.SkippedViolation message += "\n" + t.formatMultilinePath(gotDependency) } fileOccurrence := rule.GetDependency().GetContext().FileOccurrence - message += fmt.Sprintf("\n%s:%d", fileOccurrence.Filepath, fileOccurrence.Line) + message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) return []string{color.Sprint("Skipped"), message} } @@ -99,7 +99,7 @@ func (t *TableOutputFormatter) violationRow(rule *result.Violation) []string { message += "\n" + t.formatMultilinePath(gotDependency) } fileOccurrence := rule.GetDependency().GetContext().FileOccurrence - message += fmt.Sprintf("\n%s:%d", fileOccurrence.Filepath, fileOccurrence.Line) + message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) return []string{color.Sprint("Violation"), message} } func (t *TableOutputFormatter) formatMultilinePath(dep dependency.DependencyInterface) string { @@ -171,7 +171,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *result.Uncovered, reportAsErro message += "\n" + t.formatMultilinePath(gotDependency) } fileOccurrence := rule.GetDependency().GetContext().FileOccurrence - message += fmt.Sprintf("\n%s:%d", fileOccurrence.Filepath, fileOccurrence.Line) + message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) uncoveredFg := "yellow" if reportAsError { uncoveredFg = "red" diff --git a/pkg/supportive/output_formatter/xml_output_formatter.go b/pkg/supportive/output_formatter/xml_output_formatter.go new file mode 100644 index 0000000..965170b --- /dev/null +++ b/pkg/supportive/output_formatter/xml_output_formatter.go @@ -0,0 +1,119 @@ +package output_formatter + +import ( + "encoding/xml" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/util" + "os" + "path/filepath" +) + +type XMLOutputFormatter struct{} + +const DefaultPath = "./deptrac-report.xml" + +func NewXMLOutputFormatter() *XMLOutputFormatter { + return &XMLOutputFormatter{} +} + +func (f *XMLOutputFormatter) GetName() string { + return "xml" +} + +func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { + xmlData, err := f.createXML(result) + if err != nil { + return err + } + + dumpXmlPath := input.OutputPath + if dumpXmlPath == nil || *dumpXmlPath == "" { + dumpXmlPath = util.AsPtr(DefaultPath) + } + + if err := os.WriteFile(*dumpXmlPath, []byte(xmlData), 0644); err != nil { + return err + } + + output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + return nil +} + +func (f *XMLOutputFormatter) createXML(dependencyContext output_result.OutputResult) (string, error) { + entries := Entries{} + + for _, rule := range dependencyContext.Violations() { + f.addRule("violation", &entries, rule) + } + + for _, rule := range dependencyContext.SkippedViolations() { + f.addRule("skipped_violation", &entries, rule) + } + + xmlData, err := xml.MarshalIndent(entries, "", " ") + if err != nil { + return "", fmt.Errorf("unable to create XML: %v", err) + } + + return xml.Header + string(xmlData), nil +} + +func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule interface{}) { + var layerA, layerB, classA, classB, file string + var line int + + switch r := rule.(type) { + case result.Violation: + layerA = r.GetDependerLayer() + layerB = r.GetDependentLayer() + dependency := r.GetDependency() + classA = dependency.GetDepender().ToString() + classB = dependency.GetDependent().ToString() + fileOccurrence := dependency.GetContext().FileOccurrence + file = fileOccurrence.FilePath + line = fileOccurrence.Line + + case result.SkippedViolation: + layerA = r.GetDependerLayer() + layerB = r.GetDependentLayer() + dependency := r.GetDependency() + classA = dependency.GetDepender().ToString() + classB = dependency.GetDependent().ToString() + fileOccurrence := dependency.GetContext().FileOccurrence + file = fileOccurrence.FilePath + line = fileOccurrence.Line + } + + entry := Entry{ + Type: ruleType, + LayerA: layerA, + LayerB: layerB, + ClassA: classA, + ClassB: classB, + Occurrence: struct { + File string `xml:"file,attr"` + Line int `xml:"line,attr"` + }{File: file, Line: line}, + } + entries.Entry = append(entries.Entry, entry) +} + +type Entries struct { + XMLName xml.Name `xml:"entries"` + Entry []Entry `xml:"entry"` +} + +type Entry struct { + Type string `xml:"type,attr"` + LayerA string `xml:"LayerA"` + LayerB string `xml:"LayerB"` + ClassA string `xml:"ClassA"` + ClassB string `xml:"ClassB"` + Occurrence struct { + File string `xml:"file,attr"` + Line int `xml:"line,attr"` + } `xml:"occurrence"` +} diff --git a/pkg/util/AsPtr.go b/pkg/util/AsPtr.go new file mode 100644 index 0000000..cb6cbb2 --- /dev/null +++ b/pkg/util/AsPtr.go @@ -0,0 +1,5 @@ +package util + +func AsPtr[T any](value T) *T { + return &value +} From 43ad316ab493235b4b9405017b565a7666d12d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Mon, 16 Sep 2024 20:34:16 +0300 Subject: [PATCH 09/40] chore: prepare to flat --- cmd/go-deptrac/main.go | 2 +- deptrac.yaml | 26 +- examples/run_test.go | 7 +- examples/simple-invalid-mvc/run_test.go | 7 +- examples/simple-mvc/run_test.go | 7 +- .../analysis_result/analysis_result.go | 61 +++++ .../event_helper/event_helper.go | 18 +- .../post_process_event/post_process_event.go | 6 +- .../process_event/process_event.go | 16 +- .../violation_creating_interface.go | 0 pkg/analyser_core/analyser_exception.go | 50 ++++ .../dependency_layers_analyser.go | 38 +-- .../unmatched_skipped_violations.go | 8 +- .../process_event/allow_dependency_handler.go | 6 +- .../depends_on_disallowed_layer.go | 10 +- .../depends_on_internal_token.go | 12 +- .../process_event/depends_on_private_layer.go | 6 +- .../process_event/matching_layers_handler.go | 2 +- .../uncovered_dependent_handler.go | 8 +- .../layer_dependencies_analyser.go | 28 +- .../layer_for_token_analyser.go | 20 +- .../ruleset_usage_analyser.go | 30 +- .../token_in_layer_analyser.go | 22 +- .../analyser => analyser_core}/token_type.go | 10 +- .../unassigned_token_analyser.go | 22 +- .../ast_file_analysed_event.go | 4 +- .../ast_file_syntax_error_event.go | 4 +- .../could_not_parse_file_exception.go | 4 +- .../dependency_context.go | 4 +- .../ast => ast_contract}/dependency_type.go | 4 +- .../ast => ast_contract}/file_occurrence.go | 4 +- .../post_create_ast_map_event.go | 2 +- .../pre_create_ast_map_event.go | 2 +- .../tagged_token_reference_interface.go | 2 +- .../ast => ast_contract}/token_interface.go | 4 +- .../token_reference_interface.go | 2 +- ...n_reference_with_dependencies_interface.go | 6 +- pkg/{core/ast => ast_core}/ast_exception.go | 6 +- pkg/{core/ast => ast_core}/ast_loader.go | 24 +- .../ast => ast_core}/ast_map/ast_inherit.go | 6 +- .../ast_map/ast_inherit_type.go | 0 pkg/{core/ast => ast_core}/ast_map/ast_map.go | 4 +- .../ast_map/class_like_reference.go | 4 +- .../ast_map/class_like_reference_builder.go | 8 +- .../ast_map/class_like_token.go | 0 .../ast_map/class_like_type.go | 0 pkg/ast_core/ast_map/dependency_token.go | 14 + .../ast_map/file_reference.go | 4 +- .../ast_map/file_reference_builder.go | 4 +- .../ast => ast_core}/ast_map/file_token.go | 0 .../ast_map/function_reference.go | 4 +- .../ast_map/function_reference_builder.go | 0 .../ast_map/function_token.go | 0 .../ast_map/reference_builder.go | 40 +-- .../ast_map/super_global_token.go | 0 .../ast_map/tagged_token_reference.go | 0 .../ast_map/variable_reference.go | 4 +- .../ast => ast_core}/ast_map_extractor.go | 10 +- .../ast_map_extractor_test.go | 26 +- .../ast_file_reference_cache_interface.go | 2 +- ...file_reference_deferred_cache_interface.go | 0 .../cache/ast_file_reference_file_cache.go | 6 +- .../ast_file_reference_in_memory_cache.go | 2 +- .../parser/cache/cacheable_file_subscriber.go | 6 +- .../AnnotationReferenceExtractor.php | 0 .../extractors/AnonymousClassExtractor.php | 0 .../extractors/ClassConstantExtractor.php | 0 .../extractors/FunctionCallResolver.php | 0 .../extractors/FunctionLikeExtractor.php | 0 .../parser/extractors/KeywordExtractor.php | 0 .../parser/extractors/PropertyExtractor.php | 0 .../parser/extractors/StaticExtractor.php | 0 .../parser/extractors/VariableExtractor.php | 0 .../reference_extractor_interface.go | 4 +- .../file_reference_visitor.go | 24 +- .../file_reference_visitor_test.go | 8 +- .../nikic_php_parser/nikic_php_parser.go | 20 +- .../nikic_php_parser/nikic_php_parser_test.go | 0 .../nikic_php_parser/node_namer/node_namer.go | 0 .../node_namer_test/node_namer_test.go | 6 +- .../parser/parser_interface.go | 2 +- .../ast => ast_core}/parser/type_resolver.go | 2 +- .../ast => ast_core}/parser/type_scope.go | 0 pkg/config/analyse_options_hook.go | 8 +- pkg/config/config_file_hook.go | 4 +- .../analyser_config.go | 2 +- .../codeclimate_level_enum.go | 2 +- .../collector/attribute_config.go | 6 +- pkg/config_contract/collector/bool_config.go | 31 +++ .../collector/class_config.go | 6 +- .../collector/class_like_config.go | 6 +- .../collector/class_name_regex_config.go | 6 +- .../collector/composer_config.go | 10 +- .../collector/directory_config.go | 6 +- .../collector/extends_config.go | 6 +- .../collector/function_name_config.go | 6 +- .../collector/glob_config.go | 6 +- .../collector/implements_config.go | 6 +- .../collector/inherits_config.go | 6 +- .../collector/interface_config.go | 6 +- .../collector/layer_config.go | 6 +- .../collector/method_config.go | 6 +- .../collector/php_interal_config.go | 6 +- .../collector/super_global_config.go | 6 +- .../collector/tag_value_regex_config.go | 10 +- .../collector/trait_config.go | 6 +- .../collector/uses_config.go | 6 +- .../collector_config.go | 2 +- .../collector_type.go | 4 +- .../configurable_collector_config.go | 2 +- .../deptrac_config/deptrac_config.go | 78 +++--- .../emitter_type.go | 4 +- .../config => config_contract}/example.yaml | 0 .../formatter/codeclimate_config.go | 68 +++++ .../formatter/formatter_config_interface.go | 0 .../formatter/formatter_type.go | 0 .../formatter/graphviz_config.go | 14 +- .../formatter/mermaid_js_config.go | 8 +- .../config => config_contract}/layer.go | 2 +- .../config => config_contract}/ruleset.go | 2 +- .../application/application.go | 18 +- .../application/application_test.go | 0 .../application_version.go | 0 ...get_current_working_directory_exception.go | 2 +- .../command/DebugDependenciesCommand.php | 0 .../command/DebugDependenciesRunner.php | 0 .../command/DebugLayerCommand.php | 0 .../command/DebugLayerRunner.php | 0 .../command/DebugTokenCommand.php | 0 .../command/DebugTokenRunner.php | 0 .../command/DebugUnassignedCommand.php | 0 .../command/DebugUnassignedRunner.php | 0 .../command/DebugUnusedCommand.php | 0 .../command/DebugUnusedRunner.php | 0 .../command/InitCommand.php | 0 .../command/analyse_command.go | 16 +- .../command/analyse_options.go | 0 .../command/analyse_runner.go | 46 ++-- .../command/changed_files_command.go | 4 +- .../command/changed_files_runner.go | 28 +- .../command/command_run_exception.go | 0 .../console => console_supportive}/env.go | 2 +- .../subscriber/console_subscriber.go | 90 ++++++ .../subscriber/progress_subscriber.go | 35 +++ .../symfony/style.go | 14 +- .../symfony/symfony_output.go | 10 +- .../analysis_result/analysis_result.go | 61 ----- pkg/contract/config/collector/bool_config.go | 31 --- .../config/formatter/codeclimate_config.go | 68 ----- .../dependency/dependency_interface.go | 16 -- pkg/contract/layer/collector_interface.go | 10 - pkg/contract/result/allowed.go | 32 --- pkg/contract/result/covered_rule_interface.go | 7 - .../result/output_result/output_result.go | 111 -------- pkg/contract/result/rule_interface.go | 10 - pkg/contract/result/uncovered.go | 22 -- pkg/core/analyser/analyser_exception.go | 50 ---- pkg/core/ast/ast_map/dependency_token.go | 14 - pkg/core/dependency/dependency.go | 40 --- .../dependency_resolver.go | 69 ----- .../emitter/class_dependency_emitter.go | 39 --- .../emitter/file_dependency_emitter.go | 33 --- pkg/core/dependency/token_resolver.go | 27 -- pkg/core/layer/collector/collectable.go | 14 - .../layer/collector/collector_provider.go | 33 --- pkg/core/layer/collector/uses_collector.go | 52 ---- .../layer_resolver_interface.go | 14 - .../dependency_interface.go | 16 ++ .../post_emit_event.go | 2 +- .../post_flatten_event.go | 2 +- .../pre_emit_event.go | 2 +- .../pre_flatten_event.go | 2 +- pkg/dependency_core/dependency.go | 40 +++ .../dependency_list.go | 4 +- .../dependency_resolver.go | 69 +++++ .../emitter/class_dependency_emitter.go | 39 +++ .../class_superglobal_dependency_emitter.go | 12 +- .../emitter/dependency_emitter_interface.go | 6 +- .../emitter/f_q_d_n_index_node.go | 0 .../emitter/file_dependency_emitter.go | 33 +++ .../function_call_dependency_emitter.go | 20 +- .../emitter/function_dependency_emitter.go | 14 +- ...function_superglobal_dependency_emitter.go | 12 +- .../emitter/uses_dependency_emitter.go | 16 +- .../inherit_dependency.go | 22 +- .../inheritance_flattener.go | 8 +- ...invalid_emitter_configuration_exception.go | 8 +- pkg/dependency_core/token_resolver.go | 27 ++ .../unrecognized_token_exception.go | 6 +- .../CacheFileException/CacheFileException.go | 2 +- .../CannotLoadConfiguration.go | 0 .../InvalidServiceInLocatorException.go | 4 +- .../ServiceContainerBuilder.go | 10 +- pkg/dependency_injection_supportive/cache.go | 14 + .../container_builder/container_builder.go | 88 ++++++ .../event_dispatcher_interface.go | 4 +- .../event_dispatcher_interface.go | 0 .../event_subscriber_default_priority.go | 0 .../event_subscriber_interface.go | 0 .../event_subscriber_interface_map.go | 2 +- .../event_subscriber_interface_map_reg.go | 36 +-- .../services.go | 256 +++++++++--------- .../test_container_provider.go | 8 +- .../exception_interface.go | 2 +- .../file => file_supportive}/dumper.go | 4 +- .../could_not_read_file_exception.go | 0 .../file_already_exists_exception.go | 2 +- ...file_cannot_be_parsed_as_yaml_exception.go | 0 .../exception/file_not_exists_exception.go | 0 .../exception/file_not_writable_exception.go | 2 +- .../exception/i_o_exception.go | 0 .../exception/invalid_path_exception.go | 0 .../parsed_yaml_is_not_an_array_exception.go | 2 +- .../file => file_supportive}/file_reader.go | 4 +- .../yml_file_loader.go | 8 +- .../file_input_collector.go | 8 +- .../input_collector_interface.go | 2 +- .../input_exception.go | 2 +- .../circular_reference_exception.go | 10 +- pkg/layer_contract/collector_interface.go | 10 + .../invalid_collector_definition_exception.go | 6 +- .../invalid_layer_definition_exception.go | 14 +- .../layer_provider.go | 8 +- .../collector/abstract_type_collector.go | 18 +- .../collector/bool_collector.go | 14 +- .../collector/class_collector.go | 2 +- .../collector/class_like_collector.go | 2 +- .../collector/class_name_regex_collector.go | 14 +- pkg/layer_core/collector/collectable.go | 14 + .../collector/collector_provider.go | 33 +++ .../collector/collector_resolver.go | 8 +- .../collector/collector_resolver_interface.go | 0 .../collector/composer_collector.go | 12 +- .../collector/directory_collector.go | 8 +- .../collector/directory_collector_test.go | 0 .../collector/function_name_collector.go | 14 +- .../collector/glob_collector.go | 8 +- .../collector/inheritance_level_collector.go | 20 +- .../collector/inherits_collector.go | 24 +- .../collector/interface_collector.go | 2 +- .../collector/layer_collector.go | 14 +- .../collector/method_collector.go | 12 +- .../collector/regex_collector.go | 4 +- .../collector/superglobal_collector.go | 10 +- .../collector/trait_collector.go | 2 +- pkg/layer_core/collector/uses_collector.go | 52 ++++ .../layer => layer_core}/layer_resolver.go | 42 +-- .../layer_resolver_interface.go | 14 + .../output_exception.go | 2 +- .../output_formatter_input.go | 2 +- .../output_formatter_interface.go | 6 +- .../output_formatter_type.go | 2 +- .../output_interface.go | 2 +- .../output_style_interface.go | 2 +- .../baseline_output_formatter.go | 16 +- .../codeclimate_output_formatter.go | 52 ++-- .../configuration_codeclimate.go | 0 .../configuration/configuration_graph_viz.go | 0 .../configuration/formatter_configuration.go | 17 ++ .../console_output_formatter.go | 160 +++++++++++ .../formatter_provider.go | 37 +++ .../github_actions_output_formatter.go | 50 ++-- .../graph_viz_output_display_formatter.go | 10 +- .../graph_viz_output_dot_formatter.go | 14 +- .../graph_viz_output_formatter.go | 46 ++-- .../graph_viz_output_html_formatter.go | 24 +- .../graph_viz_output_image_formatter.go | 10 +- .../json_output_formatter.go | 40 +-- .../junit_output_formatter.go | 28 +- .../mermaid_js_output_formatter.go | 12 +- .../table_output_formatter.go | 44 +-- .../table_output_formatter_test.go | 2 +- .../xml_output_formatter.go | 20 +- pkg/result_contract/allowed.go | 32 +++ pkg/result_contract/covered_rule_interface.go | 7 + .../result => result_contract}/error.go | 2 +- .../output_result/output_result.go | 111 ++++++++ pkg/result_contract/rule_interface.go | 10 + .../rule_type_enum.go | 2 +- .../skipped_violation.go | 12 +- pkg/result_contract/uncovered.go | 22 ++ .../result => result_contract}/violation.go | 14 +- .../result => result_contract}/warning.go | 4 +- .../console/subscriber/console_subscriber.go | 90 ------ .../console/subscriber/progress_subscriber.go | 35 --- pkg/supportive/dependency_injection/cache.go | 14 - .../container_builder/container_builder.go | 88 ------ .../configuration/formatter_configuration.go | 17 -- .../console_output_formatter.go | 160 ----------- .../output_formatter/formatter_provider.go | 37 --- .../period.go | 2 +- .../started_period.go | 2 +- .../stopwatch.go | 2 +- .../stopwatch_exception.go | 2 +- pkg/util/GetLineByPosition.go | 8 +- pkg/util/GetPathWithOnlytFiename.go | 2 +- pkg/util/parse_yaml_file.go | 4 +- pkg/util/parse_yaml_file_test.go | 2 +- 298 files changed, 2282 insertions(+), 2283 deletions(-) create mode 100644 pkg/analyser_contract/analysis_result/analysis_result.go rename pkg/{contract/analyser => analyser_contract}/event_helper/event_helper.go (72%) rename pkg/{contract/analyser => analyser_contract}/post_process_event/post_process_event.go (69%) rename pkg/{contract/analyser => analyser_contract}/process_event/process_event.go (66%) rename pkg/{contract/analyser => analyser_contract}/violation_creating_interface/violation_creating_interface.go (100%) create mode 100644 pkg/analyser_core/analyser_exception.go rename pkg/{core/analyser => analyser_core}/dependency_layers_analyser.go (68%) rename pkg/{core/analyser => analyser_core}/event_handler/post_process_event/unmatched_skipped_violations.go (68%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/allow_dependency_handler.go (67%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/depends_on_disallowed_layer.go (74%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/depends_on_internal_token.go (76%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/depends_on_private_layer.go (75%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/matching_layers_handler.go (89%) rename pkg/{core/analyser => analyser_core}/event_handler/process_event/uncovered_dependent_handler.go (82%) rename pkg/{core/analyser => analyser_core}/layer_dependencies_analyser.go (67%) rename pkg/{core/analyser => analyser_core}/layer_for_token_analyser.go (78%) rename pkg/{core/analyser => analyser_core}/ruleset_usage_analyser.go (76%) rename pkg/{core/analyser => analyser_core}/token_in_layer_analyser.go (82%) rename pkg/{core/analyser => analyser_core}/token_type.go (65%) rename pkg/{core/analyser => analyser_core}/unassigned_token_analyser.go (82%) rename pkg/{contract/ast => ast_contract}/ast_file_analysed_event.go (78%) rename pkg/{contract/ast => ast_contract}/ast_file_syntax_error_event.go (80%) rename pkg/{contract/ast => ast_contract}/could_not_parse_file_exception.go (86%) rename pkg/{contract/ast => ast_contract}/dependency_context.go (67%) rename pkg/{contract/ast => ast_contract}/dependency_type.go (87%) rename pkg/{contract/ast => ast_contract}/file_occurrence.go (63%) rename pkg/{contract/ast => ast_contract}/post_create_ast_map_event.go (91%) rename pkg/{contract/ast => ast_contract}/pre_create_ast_map_event.go (93%) rename pkg/{contract/ast => ast_contract}/tagged_token_reference_interface.go (91%) rename pkg/{contract/ast => ast_contract}/token_interface.go (66%) rename pkg/{contract/ast => ast_contract}/token_reference_interface.go (89%) rename pkg/{contract/ast => ast_contract}/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go (54%) rename pkg/{core/ast => ast_core}/ast_exception.go (65%) rename pkg/{core/ast => ast_core}/ast_loader.go (51%) rename pkg/{core/ast => ast_core}/ast_map/ast_inherit.go (86%) rename pkg/{core/ast => ast_core}/ast_map/ast_inherit_type.go (100%) rename pkg/{core/ast => ast_core}/ast_map/ast_map.go (97%) rename pkg/{core/ast => ast_core}/ast_map/class_like_reference.go (91%) rename pkg/{core/ast => ast_core}/ast_map/class_like_reference_builder.go (85%) rename pkg/{core/ast => ast_core}/ast_map/class_like_token.go (100%) rename pkg/{core/ast => ast_core}/ast_map/class_like_type.go (100%) create mode 100644 pkg/ast_core/ast_map/dependency_token.go rename pkg/{core/ast => ast_core}/ast_map/file_reference.go (91%) rename pkg/{core/ast => ast_core}/ast_map/file_reference_builder.go (96%) rename pkg/{core/ast => ast_core}/ast_map/file_token.go (100%) rename pkg/{core/ast => ast_core}/ast_map/function_reference.go (89%) rename pkg/{core/ast => ast_core}/ast_map/function_reference_builder.go (100%) rename pkg/{core/ast => ast_core}/ast_map/function_token.go (100%) rename pkg/{core/ast => ast_core}/ast_map/reference_builder.go (85%) rename pkg/{core/ast => ast_core}/ast_map/super_global_token.go (100%) rename pkg/{core/ast => ast_core}/ast_map/tagged_token_reference.go (100%) rename pkg/{core/ast => ast_core}/ast_map/variable_reference.go (72%) rename pkg/{core/ast => ast_core}/ast_map_extractor.go (65%) rename pkg/{core/ast => ast_core}/ast_map_extractor_test.go (56%) rename pkg/{core/ast => ast_core}/parser/cache/ast_file_reference_cache_interface.go (76%) rename pkg/{core/ast => ast_core}/parser/cache/ast_file_reference_deferred_cache_interface.go (100%) rename pkg/{core/ast => ast_core}/parser/cache/ast_file_reference_file_cache.go (95%) rename pkg/{core/ast => ast_core}/parser/cache/ast_file_reference_in_memory_cache.go (93%) rename pkg/{core/ast => ast_core}/parser/cache/cacheable_file_subscriber.go (79%) rename pkg/{core/ast => ast_core}/parser/extractors/AnnotationReferenceExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/AnonymousClassExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/ClassConstantExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/FunctionCallResolver.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/FunctionLikeExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/KeywordExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/PropertyExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/StaticExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/VariableExtractor.php (100%) rename pkg/{core/ast => ast_core}/parser/extractors/reference_extractor_interface.go (64%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/file_reference_visitor.go (86%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/file_reference_visitor_test.go (70%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/nikic_php_parser.go (79%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/nikic_php_parser_test.go (100%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/node_namer/node_namer.go (100%) rename pkg/{core/ast => ast_core}/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go (50%) rename pkg/{core/ast => ast_core}/parser/parser_interface.go (68%) rename pkg/{core/ast => ast_core}/parser/type_resolver.go (98%) rename pkg/{core/ast => ast_core}/parser/type_scope.go (100%) rename pkg/{contract/config => config_contract}/analyser_config.go (97%) rename pkg/{contract/config => config_contract}/codeclimate_level_enum.go (93%) rename pkg/{contract/config => config_contract}/collector/attribute_config.go (63%) create mode 100644 pkg/config_contract/collector/bool_config.go rename pkg/{contract/config => config_contract}/collector/class_config.go (62%) rename pkg/{contract/config => config_contract}/collector/class_like_config.go (63%) rename pkg/{contract/config => config_contract}/collector/class_name_regex_config.go (65%) rename pkg/{contract/config => config_contract}/collector/composer_config.go (76%) rename pkg/{contract/config => config_contract}/collector/directory_config.go (63%) rename pkg/{contract/config => config_contract}/collector/extends_config.go (62%) rename pkg/{contract/config => config_contract}/collector/function_name_config.go (64%) rename pkg/{contract/config => config_contract}/collector/glob_config.go (61%) rename pkg/{contract/config => config_contract}/collector/implements_config.go (64%) rename pkg/{contract/config => config_contract}/collector/inherits_config.go (63%) rename pkg/{contract/config => config_contract}/collector/interface_config.go (63%) rename pkg/{contract/config => config_contract}/collector/layer_config.go (62%) rename pkg/{contract/config => config_contract}/collector/method_config.go (62%) rename pkg/{contract/config => config_contract}/collector/php_interal_config.go (64%) rename pkg/{contract/config => config_contract}/collector/super_global_config.go (79%) rename pkg/{contract/config => config_contract}/collector/tag_value_regex_config.go (73%) rename pkg/{contract/config => config_contract}/collector/trait_config.go (62%) rename pkg/{contract/config => config_contract}/collector/uses_config.go (61%) rename pkg/{contract/config => config_contract}/collector_config.go (96%) rename pkg/{contract/config => config_contract}/collector_type.go (95%) rename pkg/{contract/config => config_contract}/configurable_collector_config.go (98%) rename pkg/{contract/config => config_contract}/deptrac_config/deptrac_config.go (69%) rename pkg/{contract/config => config_contract}/emitter_type.go (90%) rename pkg/{contract/config => config_contract}/example.yaml (100%) create mode 100644 pkg/config_contract/formatter/codeclimate_config.go rename pkg/{contract/config => config_contract}/formatter/formatter_config_interface.go (100%) rename pkg/{contract/config => config_contract}/formatter/formatter_type.go (100%) rename pkg/{contract/config => config_contract}/formatter/graphviz_config.go (84%) rename pkg/{contract/config => config_contract}/formatter/mermaid_js_config.go (84%) rename pkg/{contract/config => config_contract}/layer.go (97%) rename pkg/{contract/config => config_contract}/ruleset.go (97%) rename pkg/{supportive/console => console_supportive}/application/application.go (82%) rename pkg/{supportive/console => console_supportive}/application/application_test.go (100%) rename pkg/{supportive/console => console_supportive}/application/application_version/application_version.go (100%) rename pkg/{supportive/console => console_supportive}/cannot_get_current_working_directory_exception.go (95%) rename pkg/{supportive/console => console_supportive}/command/DebugDependenciesCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugDependenciesRunner.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugLayerCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugLayerRunner.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugTokenCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugTokenRunner.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugUnassignedCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugUnassignedRunner.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugUnusedCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/DebugUnusedRunner.php (100%) rename pkg/{supportive/console => console_supportive}/command/InitCommand.php (100%) rename pkg/{supportive/console => console_supportive}/command/analyse_command.go (62%) rename pkg/{supportive/console => console_supportive}/command/analyse_options.go (100%) rename pkg/{supportive/console => console_supportive}/command/analyse_runner.go (52%) rename pkg/{supportive/console => console_supportive}/command/changed_files_command.go (85%) rename pkg/{supportive/console => console_supportive}/command/changed_files_runner.go (63%) rename pkg/{supportive/console => console_supportive}/command/command_run_exception.go (100%) rename pkg/{supportive/console => console_supportive}/env.go (83%) create mode 100644 pkg/console_supportive/subscriber/console_subscriber.go create mode 100644 pkg/console_supportive/subscriber/progress_subscriber.go rename pkg/{supportive/console => console_supportive}/symfony/style.go (85%) rename pkg/{supportive/console => console_supportive}/symfony/symfony_output.go (62%) delete mode 100644 pkg/contract/analyser/analysis_result/analysis_result.go delete mode 100644 pkg/contract/config/collector/bool_config.go delete mode 100644 pkg/contract/config/formatter/codeclimate_config.go delete mode 100644 pkg/contract/dependency/dependency_interface.go delete mode 100644 pkg/contract/layer/collector_interface.go delete mode 100644 pkg/contract/result/allowed.go delete mode 100644 pkg/contract/result/covered_rule_interface.go delete mode 100644 pkg/contract/result/output_result/output_result.go delete mode 100644 pkg/contract/result/rule_interface.go delete mode 100644 pkg/contract/result/uncovered.go delete mode 100644 pkg/core/analyser/analyser_exception.go delete mode 100644 pkg/core/ast/ast_map/dependency_token.go delete mode 100644 pkg/core/dependency/dependency.go delete mode 100644 pkg/core/dependency/dependency_resolver/dependency_resolver.go delete mode 100644 pkg/core/dependency/emitter/class_dependency_emitter.go delete mode 100644 pkg/core/dependency/emitter/file_dependency_emitter.go delete mode 100644 pkg/core/dependency/token_resolver.go delete mode 100644 pkg/core/layer/collector/collectable.go delete mode 100644 pkg/core/layer/collector/collector_provider.go delete mode 100644 pkg/core/layer/collector/uses_collector.go delete mode 100644 pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go create mode 100644 pkg/dependency_contract/dependency_interface.go rename pkg/{contract/dependency => dependency_contract}/post_emit_event.go (86%) rename pkg/{contract/dependency => dependency_contract}/post_flatten_event.go (90%) rename pkg/{contract/dependency => dependency_contract}/pre_emit_event.go (89%) rename pkg/{contract/dependency => dependency_contract}/pre_flatten_event.go (90%) create mode 100644 pkg/dependency_core/dependency.go rename pkg/{core/dependency => dependency_core}/dependency_list.go (93%) create mode 100644 pkg/dependency_core/dependency_resolver/dependency_resolver.go create mode 100644 pkg/dependency_core/emitter/class_dependency_emitter.go rename pkg/{core/dependency => dependency_core}/emitter/class_superglobal_dependency_emitter.go (52%) rename pkg/{core/dependency => dependency_core}/emitter/dependency_emitter_interface.go (54%) rename pkg/{core/dependency => dependency_core}/emitter/f_q_d_n_index_node.go (100%) create mode 100644 pkg/dependency_core/emitter/file_dependency_emitter.go rename pkg/{core/dependency => dependency_core}/emitter/function_call_dependency_emitter.go (68%) rename pkg/{core/dependency => dependency_core}/emitter/function_dependency_emitter.go (50%) rename pkg/{core/dependency => dependency_core}/emitter/function_superglobal_dependency_emitter.go (56%) rename pkg/{core/dependency => dependency_core}/emitter/uses_dependency_emitter.go (64%) rename pkg/{core/dependency => dependency_core}/inherit_dependency.go (55%) rename pkg/{core/dependency => dependency_core}/inheritance_flattener.go (66%) rename pkg/{core/dependency => dependency_core}/invalid_emitter_configuration_exception.go (76%) create mode 100644 pkg/dependency_core/token_resolver.go rename pkg/{core/dependency => dependency_core}/unrecognized_token_exception.go (77%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/Exception/CacheFileException/CacheFileException.go (76%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go (100%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go (78%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/ServiceContainerBuilder.go (90%) create mode 100644 pkg/dependency_injection_supportive/cache.go create mode 100644 pkg/dependency_injection_supportive/container_builder/container_builder.go rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_dispatcher/event_dispatcher_interface.go (84%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go (100%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_subscriber_default_priority/event_subscriber_default_priority.go (100%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_subscriber_interface/event_subscriber_interface.go (100%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_subscriber_interface_map/event_subscriber_interface_map.go (69%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go (60%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/services.go (51%) rename pkg/{supportive/dependency_injection => dependency_injection_supportive}/test_container_provider/test_container_provider.go (63%) rename pkg/{contract => domain_error_contract}/exception_interface.go (93%) rename pkg/{supportive/file => file_supportive}/dumper.go (85%) rename pkg/{supportive/file => file_supportive}/exception/could_not_read_file_exception.go (100%) rename pkg/{supportive/file => file_supportive}/exception/file_already_exists_exception.go (76%) rename pkg/{supportive/file => file_supportive}/exception/file_cannot_be_parsed_as_yaml_exception.go (100%) rename pkg/{supportive/file => file_supportive}/exception/file_not_exists_exception.go (100%) rename pkg/{supportive/file => file_supportive}/exception/file_not_writable_exception.go (88%) rename pkg/{supportive/file => file_supportive}/exception/i_o_exception.go (100%) rename pkg/{supportive/file => file_supportive}/exception/invalid_path_exception.go (100%) rename pkg/{supportive/file => file_supportive}/exception/parsed_yaml_is_not_an_array_exception.go (86%) rename pkg/{supportive/file => file_supportive}/file_reader.go (73%) rename pkg/{supportive/file => file_supportive}/yml_file_loader.go (75%) rename pkg/{core/input_collector => input_collector_core}/file_input_collector.go (87%) rename pkg/{core/input_collector => input_collector_core}/input_collector_interface.go (71%) rename pkg/{core/input_collector => input_collector_core}/input_exception.go (93%) rename pkg/{contract/layer => layer_contract}/circular_reference_exception.go (73%) create mode 100644 pkg/layer_contract/collector_interface.go rename pkg/{contract/layer => layer_contract}/invalid_collector_definition_exception.go (88%) rename pkg/{contract/layer => layer_contract}/invalid_layer_definition_exception.go (62%) rename pkg/{contract/layer => layer_contract}/layer_provider.go (83%) rename pkg/{core/layer => layer_core}/collector/abstract_type_collector.go (51%) rename pkg/{core/layer => layer_core}/collector/bool_collector.go (74%) rename pkg/{core/layer => layer_core}/collector/class_collector.go (84%) rename pkg/{core/layer => layer_core}/collector/class_like_collector.go (85%) rename pkg/{core/layer => layer_core}/collector/class_name_regex_collector.go (56%) create mode 100644 pkg/layer_core/collector/collectable.go create mode 100644 pkg/layer_core/collector/collector_provider.go rename pkg/{core/layer => layer_core}/collector/collector_resolver.go (61%) rename pkg/{core/layer => layer_core}/collector/collector_resolver_interface.go (100%) rename pkg/{core/layer => layer_core}/collector/composer_collector.go (70%) rename pkg/{core/layer => layer_core}/collector/directory_collector.go (76%) rename pkg/{core/layer => layer_core}/collector/directory_collector_test.go (100%) rename pkg/{core/layer => layer_core}/collector/function_name_collector.go (56%) rename pkg/{core/layer => layer_core}/collector/glob_collector.go (78%) rename pkg/{core/layer => layer_core}/collector/inheritance_level_collector.go (54%) rename pkg/{core/layer => layer_core}/collector/inherits_collector.go (51%) rename pkg/{core/layer => layer_core}/collector/interface_collector.go (85%) rename pkg/{core/layer => layer_core}/collector/layer_collector.go (63%) rename pkg/{core/layer => layer_core}/collector/method_collector.go (75%) rename pkg/{core/layer => layer_core}/collector/regex_collector.go (71%) rename pkg/{core/layer => layer_core}/collector/superglobal_collector.go (67%) rename pkg/{core/layer => layer_core}/collector/trait_collector.go (84%) create mode 100644 pkg/layer_core/collector/uses_collector.go rename pkg/{core/layer => layer_core}/layer_resolver.go (67%) create mode 100644 pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go rename pkg/{contract/output_formatter => output_formatter_contract}/output_exception.go (88%) rename pkg/{contract/output_formatter => output_formatter_contract}/output_formatter_input.go (92%) rename pkg/{contract/output_formatter => output_formatter_contract}/output_formatter_interface.go (71%) rename pkg/{contract/output_formatter => output_formatter_contract}/output_formatter_type.go (94%) rename pkg/{contract/output_formatter => output_formatter_contract}/output_interface.go (88%) rename pkg/{contract/output_formatter => output_formatter_contract}/output_style_interface.go (97%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/baseline_output_formatter.go (69%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/codeclimate_output_formatter.go (57%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/configuration/configuration_codeclimate.go (100%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/configuration/configuration_graph_viz.go (100%) create mode 100644 pkg/output_formatter_supportive/configuration/formatter_configuration.go create mode 100644 pkg/output_formatter_supportive/console_output_formatter.go create mode 100644 pkg/output_formatter_supportive/formatter_provider.go rename pkg/{supportive/output_formatter => output_formatter_supportive}/github_actions_output_formatter.go (56%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/graph_viz_output_display_formatter.go (74%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/graph_viz_output_dot_formatter.go (62%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/graph_viz_output_formatter.go (71%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/graph_viz_output_html_formatter.go (58%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/graph_viz_output_image_formatter.go (76%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/json_output_formatter.go (73%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/junit_output_formatter.go (81%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/mermaid_js_output_formatter.go (87%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/table_output_formatter.go (78%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/table_output_formatter_test.go (80%) rename pkg/{supportive/output_formatter => output_formatter_supportive}/xml_output_formatter.go (78%) create mode 100644 pkg/result_contract/allowed.go create mode 100644 pkg/result_contract/covered_rule_interface.go rename pkg/{contract/result => result_contract}/error.go (88%) create mode 100644 pkg/result_contract/output_result/output_result.go create mode 100644 pkg/result_contract/rule_interface.go rename pkg/{contract/result => result_contract}/rule_type_enum.go (96%) rename pkg/{contract/result => result_contract}/skipped_violation.go (54%) create mode 100644 pkg/result_contract/uncovered.go rename pkg/{contract/result => result_contract}/violation.go (59%) rename pkg/{contract/result => result_contract}/warning.go (69%) delete mode 100644 pkg/supportive/console/subscriber/console_subscriber.go delete mode 100644 pkg/supportive/console/subscriber/progress_subscriber.go delete mode 100644 pkg/supportive/dependency_injection/cache.go delete mode 100644 pkg/supportive/dependency_injection/container_builder/container_builder.go delete mode 100644 pkg/supportive/output_formatter/configuration/formatter_configuration.go delete mode 100644 pkg/supportive/output_formatter/console_output_formatter.go delete mode 100644 pkg/supportive/output_formatter/formatter_provider.go rename pkg/{supportive/time_stopwatch => time_stopwatch_supportive}/period.go (93%) rename pkg/{supportive/time_stopwatch => time_stopwatch_supportive}/started_period.go (95%) rename pkg/{supportive/time_stopwatch => time_stopwatch_supportive}/stopwatch.go (96%) rename pkg/{supportive/time_stopwatch => time_stopwatch_supportive}/stopwatch_exception.go (94%) diff --git a/cmd/go-deptrac/main.go b/cmd/go-deptrac/main.go index df9cf25..2bb81b1 100644 --- a/cmd/go-deptrac/main.go +++ b/cmd/go-deptrac/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" ) func main() { diff --git a/deptrac.yaml b/deptrac.yaml index 949bdcf..2c533d1 100644 --- a/deptrac.yaml +++ b/deptrac.yaml @@ -12,7 +12,7 @@ deptrac: types: - class - class_superglobal - - file + - file_supportive - function - function_superglobal - function_call @@ -42,11 +42,11 @@ deptrac: - name: Analyser collectors: - type: directory - value: pkg/core/analyser/.* + value: pkg/core/analyser_contract/.* - name: Ast collectors: - type: directory - value: pkg/core/ast/.* + value: pkg/core/ast_contract/.* - type: composer private: true composerPath: composer.json @@ -58,15 +58,15 @@ deptrac: - name: Console collectors: - type: directory - value: pkg/supportive/console/.* + value: pkg/supportive/console_supportive/.* - name: Dependency collectors: - type: directory - value: pkg/core/dependency/.* + value: pkg/core/dependency_contract/.* - name: DependencyInjection collectors: - type: directory - value: pkg/supportive/dependency_injection/.* + value: pkg/supportive/dependency_injection_supportive/.* - name: Contract collectors: - type: directory @@ -74,15 +74,15 @@ deptrac: - name: InputCollector collectors: - type: directory - value: pkg/core/input_collector/.* + value: pkg/core/input_collector_core/.* - name: Layer collectors: - type: directory - value: pkg/core/layer/.* + value: pkg/core/layer_contract/.* - name: OutputFormatter collectors: - type: directory - value: pkg/supportive/output_formatter/.* + value: pkg/supportive/output_formatter_contract/.* - type: composer private: true composerPath: composer.json @@ -92,7 +92,7 @@ deptrac: - name: File collectors: - type: directory - value: pkg/supportive/file/.* + value: pkg/supportive/file_supportive/.* - name: Time collectors: - type: directory @@ -112,9 +112,9 @@ deptrac: composerPath: composer.json composerLockPath: composer.lock packages: - - symfony/config - - symfony/console - - symfony/dependency-injection + - symfony/config_contract + - symfony/console_supportive + - symfony/dependency_contract-injection - symfony/event-dispatcher - symfony/filesystem - symfony/finder diff --git a/examples/run_test.go b/examples/run_test.go index 9590867..2a3c72a 100644 --- a/examples/run_test.go +++ b/examples/run_test.go @@ -2,7 +2,7 @@ package examples import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -11,7 +11,7 @@ import ( func TestRunSimpleCleanarch(t *testing.T) { os.Args = []string{ "", - "--config-file=pkg/test_projects/examples/simple-cleanarch/depfile.yaml", + "--config_contract-file_supportive=pkg/test_projects/examples/simple-cleanarch/depfile.yaml", "analyse", } @@ -21,7 +21,6 @@ func TestRunSimpleCleanarch(t *testing.T) { // t.Fatal(err) //} - application. - NewApplication(). + application.NewApplication(). Run() } diff --git a/examples/simple-invalid-mvc/run_test.go b/examples/simple-invalid-mvc/run_test.go index 6635c89..e3f5409 100644 --- a/examples/simple-invalid-mvc/run_test.go +++ b/examples/simple-invalid-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -11,7 +11,7 @@ import ( func TestRun(t *testing.T) { os.Args = []string{ "", - "--config-file=pkg/test_projects/examples/simple-invalid-mvc/depfile.yaml", + "--config_contract-file_supportive=pkg/test_projects/examples/simple-invalid-mvc/depfile.yaml", "analyse", } @@ -21,7 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - application. - NewApplication(). + application.NewApplication(). Run() } diff --git a/examples/simple-mvc/run_test.go b/examples/simple-mvc/run_test.go index 9c8ad22..63223ba 100644 --- a/examples/simple-mvc/run_test.go +++ b/examples/simple-mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -11,7 +11,7 @@ import ( func TestRun(t *testing.T) { os.Args = []string{ "", - "--config-file=pkg/test_projects/examples/simple-mvc/depfile.yaml", + "--config_contract-file_supportive=pkg/test_projects/examples/simple-mvc/depfile.yaml", "analyse", } @@ -21,7 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - application. - NewApplication(). + application.NewApplication(). Run() } diff --git a/pkg/analyser_contract/analysis_result/analysis_result.go b/pkg/analyser_contract/analysis_result/analysis_result.go new file mode 100644 index 0000000..1d5a2e0 --- /dev/null +++ b/pkg/analyser_contract/analysis_result/analysis_result.go @@ -0,0 +1,61 @@ +package analysis_result + +import ( + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/util" +) + +// AnalysisResult - Describes the result_contract of a source code analysis. +type AnalysisResult struct { + rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface + + warnings []*result_contract2.Warning + + errors []*result_contract2.Error +} + +func NewAnalysisResult() *AnalysisResult { + return &AnalysisResult{ + rules: make(map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface), + warnings: make([]*result_contract2.Warning, 0), + errors: make([]*result_contract2.Error, 0), + } +} + +func (r *AnalysisResult) AddRule(rule result_contract2.RuleInterface) { + ruleType := result_contract2.NewRuleTypeEnumByRule(rule) + id := util.SplObjectID(rule) + + if _, ok := r.rules[ruleType]; !ok { + r.rules[ruleType] = make(map[string]result_contract2.RuleInterface) + } + + r.rules[ruleType][id] = rule +} + +func (r *AnalysisResult) RemoveRule(rule result_contract2.RuleInterface) { + ruleType := result_contract2.NewRuleTypeEnumByRule(rule) + id := util.SplObjectID(rule) + + delete(r.rules[ruleType], id) +} + +func (r *AnalysisResult) Rules() map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface { + return r.rules +} + +func (r *AnalysisResult) AddWarning(warning *result_contract2.Warning) { + r.warnings = append(r.warnings, warning) +} + +func (r *AnalysisResult) Warnings() []*result_contract2.Warning { + return r.warnings +} + +func (r *AnalysisResult) AddError(error *result_contract2.Error) { + r.errors = append(r.errors, error) +} + +func (r *AnalysisResult) Errors() []*result_contract2.Error { + return r.errors +} diff --git a/pkg/contract/analyser/event_helper/event_helper.go b/pkg/analyser_contract/event_helper/event_helper.go similarity index 72% rename from pkg/contract/analyser/event_helper/event_helper.go rename to pkg/analyser_contract/event_helper/event_helper.go index f9ca22f..b3c0dc2 100644 --- a/pkg/contract/analyser/event_helper/event_helper.go +++ b/pkg/analyser_contract/event_helper/event_helper.go @@ -1,11 +1,11 @@ package event_helper import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -13,10 +13,10 @@ import ( type EventHelper struct { UnmatchedSkippedViolation map[string][]string SkippedViolations map[string][]string - LayerProvider *layer.LayerProvider + LayerProvider *layer_contract.LayerProvider } -func NewEventHelper(skippedViolations map[string][]string, layerProvider *layer.LayerProvider) *EventHelper { +func NewEventHelper(skippedViolations map[string][]string, layerProvider *layer_contract.LayerProvider) *EventHelper { return &EventHelper{ UnmatchedSkippedViolation: skippedViolations, SkippedViolations: skippedViolations, @@ -57,8 +57,8 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { func (e *EventHelper) AddSkippableViolation(event *process_event.ProcessEvent, analysisResult *analysis_result.AnalysisResult, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(result.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(result_contract2.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(result.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(result_contract2.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/contract/analyser/post_process_event/post_process_event.go b/pkg/analyser_contract/post_process_event/post_process_event.go similarity index 69% rename from pkg/contract/analyser/post_process_event/post_process_event.go rename to pkg/analyser_contract/post_process_event/post_process_event.go index e15999e..c0f7e75 100644 --- a/pkg/contract/analyser/post_process_event/post_process_event.go +++ b/pkg/analyser_contract/post_process_event/post_process_event.go @@ -1,8 +1,10 @@ package post_process_event -import "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" +import ( + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" +) -// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result of the analysis after it has completed and before it is returned for output processing. +// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result_contract of the analysis after it has completed and before it is returned for output processing. type PostProcessEvent struct { result *analysis_result.AnalysisResult } diff --git a/pkg/contract/analyser/process_event/process_event.go b/pkg/analyser_contract/process_event/process_event.go similarity index 66% rename from pkg/contract/analyser/process_event/process_event.go rename to pkg/analyser_contract/process_event/process_event.go index 2a2cb94..03a0e8d 100644 --- a/pkg/contract/analyser/process_event/process_event.go +++ b/pkg/analyser_contract/process_event/process_event.go @@ -1,26 +1,26 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" ) -// ProcessEvent - Event that is triggered on every found dependency. Used to apply rules on the found dependencies. +// ProcessEvent - Event that is triggered on every found dependency_contract. Used to apply rules on the found dependencies. type ProcessEvent struct { Dependency Dependency2.DependencyInterface - DependerReference ast.TokenReferenceInterface + DependerReference ast_contract.TokenReferenceInterface DependerLayer string - DependentReference ast.TokenReferenceInterface + DependentReference ast_contract.TokenReferenceInterface DependentLayers map[string]bool result *analysis_result.AnalysisResult } func NewProcessEvent( dependency Dependency2.DependencyInterface, - dependerReference ast.TokenReferenceInterface, + dependerReference ast_contract.TokenReferenceInterface, dependerLayer string, - dependentReference ast.TokenReferenceInterface, + dependentReference ast_contract.TokenReferenceInterface, dependentLayers map[string]bool, result *analysis_result.AnalysisResult, ) *ProcessEvent { diff --git a/pkg/contract/analyser/violation_creating_interface/violation_creating_interface.go b/pkg/analyser_contract/violation_creating_interface/violation_creating_interface.go similarity index 100% rename from pkg/contract/analyser/violation_creating_interface/violation_creating_interface.go rename to pkg/analyser_contract/violation_creating_interface/violation_creating_interface.go diff --git a/pkg/analyser_core/analyser_exception.go b/pkg/analyser_core/analyser_exception.go new file mode 100644 index 0000000..1663970 --- /dev/null +++ b/pkg/analyser_core/analyser_exception.go @@ -0,0 +1,50 @@ +package analyser_core + +import ( + "fmt" + astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + layer_contract2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" +) + +type AnalyserException struct { + Message string + Previous error +} + +func (a *AnalyserException) Error() string { + if a.Previous != nil { + return fmt.Sprintf("%s\n%s", a.Message, a.Previous.Error()) + } else { + return a.Message + } +} + +func NewInvalidEmitterConfiguration(e *dependency_core2.InvalidEmitterConfigurationException) *AnalyserException { + return &AnalyserException{Message: "Invalid emitter configuration.", Previous: e} +} + +func NewUnrecognizedToken(e *dependency_core2.UnrecognizedTokenException) *AnalyserException { + return &AnalyserException{Message: "Unrecognized token.", Previous: e} +} + +func NewInvalidLayerDefinition(e *layer_contract2.InvalidLayerDefinitionException) *AnalyserException { + return &AnalyserException{Message: "Invalid layer_contract definition.", Previous: e} +} + +func NewInvalidCollectorDefinition(e *layer_contract2.InvalidCollectorDefinitionException) *AnalyserException { + return &AnalyserException{Message: "Invalid collector definition.", Previous: e} +} + +func NewFailedAstParsing(e *ast_core.AstException) *AnalyserException { + return &AnalyserException{Message: "Failed Ast parsing.", Previous: e} +} + +func NewCouldNotParseFile(e *astContract.CouldNotParseFileException) *AnalyserException { + return &AnalyserException{Message: "Could not parse file_supportive.", Previous: e} +} + +func NewCircularReference(e *layer_contract2.CircularReferenceException) *AnalyserException { + return &AnalyserException{Message: "Circular layer_contract dependency_contract.", Previous: e} +} diff --git a/pkg/core/analyser/dependency_layers_analyser.go b/pkg/analyser_core/dependency_layers_analyser.go similarity index 68% rename from pkg/core/analyser/dependency_layers_analyser.go rename to pkg/analyser_core/dependency_layers_analyser.go index 9bf5497..759c109 100644 --- a/pkg/core/analyser/dependency_layers_analyser.go +++ b/pkg/analyser_core/dependency_layers_analyser.go @@ -1,31 +1,31 @@ -package analyser +package analyser_core import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" ) type DependencyLayersAnalyser struct { - astMapExtractor *ast.AstMapExtractor + astMapExtractor *ast_core.AstMapExtractor dependencyResolver *dependency_resolver.DependencyResolver - tokenResolver *dependency.TokenResolver + tokenResolver *dependency_core.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface eventDispatcher event_dispatcher_interface.EventDispatcherInterface } func NewDependencyLayersAnalyser( - astMapExtractor *ast.AstMapExtractor, + astMapExtractor *ast_core.AstMapExtractor, dependencyResolver *dependency_resolver.DependencyResolver, - tokenResolver *dependency.TokenResolver, + tokenResolver *dependency_core.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ @@ -47,14 +47,14 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e return nil, err } analysisResult := analysis_result.NewAnalysisResult() - warnings := make(map[string]*result.Warning) + warnings := make(map[string]*result_contract.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) - if v, ok55 := dependerRef.(*ast_map.FunctionReference); ok55 { + if v, ok55 := dependerRef.(*ast_map2.FunctionReference); ok55 { t := v.GetToken() - if tt, ok66 := t.(*ast_map.FunctionToken); ok66 { + if tt, ok66 := t.(*ast_map2.FunctionToken); ok66 { if tt.FunctionName == "ParseFile" { fmt.Println() } @@ -72,7 +72,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, e _, ok := warnings[depender.ToString()] if !ok && len(dependerLayers) > 1 { - warnings[depender.ToString()] = result.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) + warnings[depender.ToString()] = result_contract.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) } dependent := dependency.GetDependent() diff --git a/pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go b/pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go similarity index 68% rename from pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go rename to pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go index 34b6af2..d08434a 100644 --- a/pkg/core/analyser/event_handler/post_process_event/unmatched_skipped_violations.go +++ b/pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go @@ -2,9 +2,9 @@ package post_process_event import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" ) type UnmatchedSkippedViolations struct { @@ -21,7 +21,7 @@ func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, ruleset := event.GetResult() for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { for _, tokenB := range tokensB { - ruleset.AddError(result.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) + ruleset.AddError(result_contract.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) } } stopPropagation() diff --git a/pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go b/pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go similarity index 67% rename from pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go rename to pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go index c5a1fbf..3ccb3e2 100644 --- a/pkg/core/analyser/event_handler/process_event/allow_dependency_handler.go +++ b/pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" ) type AllowDependencyHandler struct{} @@ -16,7 +16,7 @@ func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPr ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { - ruleset.AddRule(result.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) + ruleset.AddRule(result_contract.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) stopPropagation() } diff --git a/pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go b/pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go similarity index 74% rename from pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go rename to pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go index 13858e5..d255503 100644 --- a/pkg/core/analyser/event_handler/process_event/depends_on_disallowed_layer.go +++ b/pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -21,7 +21,7 @@ func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, s ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) if err != nil { - ruleset.AddError(result.NewError(err.Error())) + ruleset.AddError(result_contract.NewError(err.Error())) stopPropagation() return nil } @@ -40,5 +40,5 @@ func (d *DependsOnDisallowedLayer) RuleName() string { } func (d *DependsOnDisallowedLayer) RuleDescription() string { - return "You are depending on token that is a part of a layer that you are not allowed to depend on." + return "You are depending on token that is a part of a layer_contract that you are not allowed to depend on." } diff --git a/pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go b/pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go similarity index 76% rename from pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go rename to pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go index d320cf3..fbfe2f0 100644 --- a/pkg/core/analyser/event_handler/process_event/depends_on_internal_token.go +++ b/pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go @@ -1,10 +1,10 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type DependsOnInternalToken struct { @@ -12,7 +12,7 @@ type DependsOnInternalToken struct { internalTag *string } -func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *config.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *config_contract.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } @@ -43,5 +43,5 @@ func (d *DependsOnInternalToken) RuleName() string { } func (d *DependsOnInternalToken) RuleDescription() string { - return "You are depending on a token that is internal to the layer and you are not part of that layer." + return "You are depending on a token that is internal to the layer_contract and you are not part of that layer_contract." } diff --git a/pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go b/pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go similarity index 75% rename from pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go rename to pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go index 46746fb..2ee2bd4 100644 --- a/pkg/core/analyser/event_handler/process_event/depends_on_private_layer.go +++ b/pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go @@ -1,8 +1,8 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" ) type DependsOnPrivateLayer struct { @@ -30,5 +30,5 @@ func (d *DependsOnPrivateLayer) RuleName() string { } func (d *DependsOnPrivateLayer) RuleDescription() string { - return "You are depending on a part of a layer that was defined as private to that layer and you are not part of that layer." + return "You are depending on a part of a layer_contract that was defined as private to that layer_contract and you are not part of that layer_contract." } diff --git a/pkg/core/analyser/event_handler/process_event/matching_layers_handler.go b/pkg/analyser_core/event_handler/process_event/matching_layers_handler.go similarity index 89% rename from pkg/core/analyser/event_handler/process_event/matching_layers_handler.go rename to pkg/analyser_core/event_handler/process_event/matching_layers_handler.go index ef96dcc..5b54e5c 100644 --- a/pkg/core/analyser/event_handler/process_event/matching_layers_handler.go +++ b/pkg/analyser_core/event_handler/process_event/matching_layers_handler.go @@ -1,7 +1,7 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" ) type MatchingLayersHandler struct{} diff --git a/pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go b/pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go similarity index 82% rename from pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go rename to pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go index 286ad0c..158c936 100644 --- a/pkg/core/analyser/event_handler/process_event/uncovered_dependent_handler.go +++ b/pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ package process_event import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" ) type UncoveredDependentHandler struct { @@ -27,7 +27,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, if dependentClassLike, ok := dependent.(*ast_map.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { - ruleset.AddRule(result.NewUncovered(event.Dependency, event.DependerLayer)) + ruleset.AddRule(result_contract.NewUncovered(event.Dependency, event.DependerLayer)) } } diff --git a/pkg/core/analyser/layer_dependencies_analyser.go b/pkg/analyser_core/layer_dependencies_analyser.go similarity index 67% rename from pkg/core/analyser/layer_dependencies_analyser.go rename to pkg/analyser_core/layer_dependencies_analyser.go index 23d1040..09a9633 100644 --- a/pkg/core/analyser/layer_dependencies_analyser.go +++ b/pkg/analyser_core/layer_dependencies_analyser.go @@ -1,23 +1,23 @@ -package analyser +package analyser_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" ) type LayerDependenciesAnalyser struct { - astMapExtractor *ast.AstMapExtractor - tokenResolver *dependency.TokenResolver + astMapExtractor *ast_core.AstMapExtractor + tokenResolver *dependency_core.TokenResolver dependencyResolver *dependency_resolver.DependencyResolver layerResolver layer_resolver_interface.LayerResolverInterface } func NewLayerDependenciesAnalyser( - astMapExtractor *ast.AstMapExtractor, - tokenResolver *dependency.TokenResolver, + astMapExtractor *ast_core.AstMapExtractor, + tokenResolver *dependency_core.TokenResolver, dependencyResolver *dependency_resolver.DependencyResolver, layerResolver layer_resolver_interface.LayerResolverInterface, ) *LayerDependenciesAnalyser { @@ -29,8 +29,8 @@ func NewLayerDependenciesAnalyser( } } -func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*result.Uncovered, error) { - uncoveredResult := make(map[string][]*result.Uncovered) +func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*result_contract.Uncovered, error) { + uncoveredResult := make(map[string][]*result_contract.Uncovered) astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -54,9 +54,9 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s continue } if _, ok := uncoveredResult[dependentLayerName]; !ok { - uncoveredResult[dependentLayerName] = make([]*result.Uncovered, 0) + uncoveredResult[dependentLayerName] = make([]*result_contract.Uncovered, 0) } - uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], result.NewUncovered(dependency, dependentLayerName)) + uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], result_contract.NewUncovered(dependency, dependentLayerName)) } } } diff --git a/pkg/core/analyser/layer_for_token_analyser.go b/pkg/analyser_core/layer_for_token_analyser.go similarity index 78% rename from pkg/core/analyser/layer_for_token_analyser.go rename to pkg/analyser_core/layer_for_token_analyser.go index e265d3f..15a3a21 100644 --- a/pkg/core/analyser/layer_for_token_analyser.go +++ b/pkg/analyser_core/layer_for_token_analyser.go @@ -1,25 +1,25 @@ -package analyser +package analyser_core import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" "github.com/pkg/errors" "golang.org/x/exp/maps" "strings" ) type LayerForTokenAnalyser struct { - astMapExtractor *ast.AstMapExtractor - tokenResolver *dependency.TokenResolver + astMapExtractor *ast_core.AstMapExtractor + tokenResolver *dependency_core.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface } func NewLayerForTokenAnalyser( - astMapExtractor *ast.AstMapExtractor, - tokenResolver *dependency.TokenResolver, + astMapExtractor *ast_core.AstMapExtractor, + tokenResolver *dependency_core.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, ) *LayerForTokenAnalyser { return &LayerForTokenAnalyser{ diff --git a/pkg/core/analyser/ruleset_usage_analyser.go b/pkg/analyser_core/ruleset_usage_analyser.go similarity index 76% rename from pkg/core/analyser/ruleset_usage_analyser.go rename to pkg/analyser_core/ruleset_usage_analyser.go index a797782..912062d 100644 --- a/pkg/core/analyser/ruleset_usage_analyser.go +++ b/pkg/analyser_core/ruleset_usage_analyser.go @@ -1,30 +1,30 @@ -package analyser +package analyser_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + Layer2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" ) type RulesetUsageAnalyser struct { - layerProvider *layer.LayerProvider + layerProvider *layer_contract.LayerProvider layerResolver Layer2.LayerResolverInterface - astMapExtractor *ast.AstMapExtractor + astMapExtractor *ast_core.AstMapExtractor dependencyResolver *dependency_resolver.DependencyResolver - tokenResolver *dependency.TokenResolver - layers []*config.Layer + tokenResolver *dependency_core.TokenResolver + layers []*config_contract.Layer } func NewRulesetUsageAnalyser( - layerProvider *layer.LayerProvider, + layerProvider *layer_contract.LayerProvider, layerResolver Layer2.LayerResolverInterface, - astMapExtractor *ast.AstMapExtractor, + astMapExtractor *ast_core.AstMapExtractor, dependencyResolver *dependency_resolver.DependencyResolver, - tokenResolver *dependency.TokenResolver, - layers []*config.Layer, + tokenResolver *dependency_core.TokenResolver, + layers []*config_contract.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, diff --git a/pkg/core/analyser/token_in_layer_analyser.go b/pkg/analyser_core/token_in_layer_analyser.go similarity index 82% rename from pkg/core/analyser/token_in_layer_analyser.go rename to pkg/analyser_core/token_in_layer_analyser.go index c7d89e2..5b61368 100644 --- a/pkg/core/analyser/token_in_layer_analyser.go +++ b/pkg/analyser_core/token_in_layer_analyser.go @@ -1,26 +1,26 @@ -package analyser +package analyser_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" "slices" ) type TokenInLayerAnalyser struct { tokenTypes []TokenType - config *config.AnalyserConfig - astMapExtractor *ast.AstMapExtractor - tokenResolver *dependency.TokenResolver + config *config_contract.AnalyserConfig + astMapExtractor *ast_core.AstMapExtractor + tokenResolver *dependency_core.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface } func NewTokenInLayerAnalyser( - astMapExtractor *ast.AstMapExtractor, - tokenResolver *dependency.TokenResolver, + astMapExtractor *ast_core.AstMapExtractor, + tokenResolver *dependency_core.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, - config *config.AnalyserConfig, + config *config_contract.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/core/analyser/token_type.go b/pkg/analyser_core/token_type.go similarity index 65% rename from pkg/core/analyser/token_type.go rename to pkg/analyser_core/token_type.go index 304accc..7a4a115 100644 --- a/pkg/core/analyser/token_type.go +++ b/pkg/analyser_core/token_type.go @@ -1,7 +1,7 @@ -package analyser +package analyser_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type TokenType string @@ -9,11 +9,11 @@ type TokenType string const ( TokenTypeClassLike TokenType = "class-like" TokenTypeFunction TokenType = "function" - TokenTypeFile TokenType = "file" + TokenTypeFile TokenType = "file_supportive" ) -func NewTokenTypeTryFromEmitterType(emitterType config.EmitterType) *TokenType { - if emitterType == config.ClassToken { +func NewTokenTypeTryFromEmitterType(emitterType config_contract.EmitterType) *TokenType { + if emitterType == config_contract.ClassToken { classLikeTokenType := TokenTypeClassLike return &classLikeTokenType } else { diff --git a/pkg/core/analyser/unassigned_token_analyser.go b/pkg/analyser_core/unassigned_token_analyser.go similarity index 82% rename from pkg/core/analyser/unassigned_token_analyser.go rename to pkg/analyser_core/unassigned_token_analyser.go index a4da424..ec53060 100644 --- a/pkg/core/analyser/unassigned_token_analyser.go +++ b/pkg/analyser_core/unassigned_token_analyser.go @@ -1,26 +1,26 @@ -package analyser +package analyser_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" "slices" ) type UnassignedTokenAnalyser struct { tokenTypes []TokenType - config *config.AnalyserConfig - astMapExtractor *ast.AstMapExtractor - tokenResolver *dependency.TokenResolver + config *config_contract.AnalyserConfig + astMapExtractor *ast_core.AstMapExtractor + tokenResolver *dependency_core.TokenResolver layerResolver layer_resolver_interface.LayerResolverInterface } func NewUnassignedTokenAnalyser( - astMapExtractor *ast.AstMapExtractor, - tokenResolver *dependency.TokenResolver, + astMapExtractor *ast_core.AstMapExtractor, + tokenResolver *dependency_core.TokenResolver, layerResolver layer_resolver_interface.LayerResolverInterface, - config *config.AnalyserConfig, + config *config_contract.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/contract/ast/ast_file_analysed_event.go b/pkg/ast_contract/ast_file_analysed_event.go similarity index 78% rename from pkg/contract/ast/ast_file_analysed_event.go rename to pkg/ast_contract/ast_file_analysed_event.go index e06aaa5..63a48c7 100644 --- a/pkg/contract/ast/ast_file_analysed_event.go +++ b/pkg/ast_contract/ast_file_analysed_event.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// AstFileAnalysedEvent - Event triggered after parsing the AST of a file has been completed. +// AstFileAnalysedEvent - Event triggered after parsing the AST of a file_supportive has been completed. type AstFileAnalysedEvent struct { File string } diff --git a/pkg/contract/ast/ast_file_syntax_error_event.go b/pkg/ast_contract/ast_file_syntax_error_event.go similarity index 80% rename from pkg/contract/ast/ast_file_syntax_error_event.go rename to pkg/ast_contract/ast_file_syntax_error_event.go index 726cbaf..bb46789 100644 --- a/pkg/contract/ast/ast_file_syntax_error_event.go +++ b/pkg/ast_contract/ast_file_syntax_error_event.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// AstFileSyntaxErrorEvent - Event triggered when parsing the AST failed on syntax error in the PHP file. +// AstFileSyntaxErrorEvent - Event triggered when parsing the AST failed on syntax error in the PHP file_supportive. type AstFileSyntaxErrorEvent struct { File string SyntaxError string diff --git a/pkg/contract/ast/could_not_parse_file_exception.go b/pkg/ast_contract/could_not_parse_file_exception.go similarity index 86% rename from pkg/contract/ast/could_not_parse_file_exception.go rename to pkg/ast_contract/could_not_parse_file_exception.go index 3f59351..c06d00b 100644 --- a/pkg/contract/ast/could_not_parse_file_exception.go +++ b/pkg/ast_contract/could_not_parse_file_exception.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// CouldNotParseFileException - Exception thrown in a collector when it cannot parse a file. +// CouldNotParseFileException - Exception thrown in a collector when it cannot parse a file_supportive. type CouldNotParseFileException struct { Reason string Previous error diff --git a/pkg/contract/ast/dependency_context.go b/pkg/ast_contract/dependency_context.go similarity index 67% rename from pkg/contract/ast/dependency_context.go rename to pkg/ast_contract/dependency_context.go index 08f92e7..62185c1 100644 --- a/pkg/contract/ast/dependency_context.go +++ b/pkg/ast_contract/dependency_context.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// DependencyContext - Context of the dependency. Any additional info about where the dependency occurred. +// DependencyContext - Context of the dependency_contract. Any additional info about where the dependency_contract occurred. type DependencyContext struct { FileOccurrence *FileOccurrence DependencyType DependencyType diff --git a/pkg/contract/ast/dependency_type.go b/pkg/ast_contract/dependency_type.go similarity index 87% rename from pkg/contract/ast/dependency_type.go rename to pkg/ast_contract/dependency_type.go index 93f786c..8c6e4d3 100644 --- a/pkg/contract/ast/dependency_type.go +++ b/pkg/ast_contract/dependency_type.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// DependencyType - Specifies the type of AST dependency. You can use this information to enrich the displayed output to the user in your output formatter. +// DependencyType - Specifies the type of AST dependency_contract. You can use this information to enrich the displayed output to the user in your output formatter. type DependencyType string const ( diff --git a/pkg/contract/ast/file_occurrence.go b/pkg/ast_contract/file_occurrence.go similarity index 63% rename from pkg/contract/ast/file_occurrence.go rename to pkg/ast_contract/file_occurrence.go index 94efa32..3524aa5 100644 --- a/pkg/contract/ast/file_occurrence.go +++ b/pkg/ast_contract/file_occurrence.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// FileOccurrence - Where in the file has the dependency occurred. +// FileOccurrence - Where in the file_supportive has the dependency_contract occurred. type FileOccurrence struct { FilePath string Line int diff --git a/pkg/contract/ast/post_create_ast_map_event.go b/pkg/ast_contract/post_create_ast_map_event.go similarity index 91% rename from pkg/contract/ast/post_create_ast_map_event.go rename to pkg/ast_contract/post_create_ast_map_event.go index f538e7b..0a60dd6 100644 --- a/pkg/contract/ast/post_create_ast_map_event.go +++ b/pkg/ast_contract/post_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast +package ast_contract // PostCreateAstMapEvent - Event triggered after the AST map of all files has been created. type PostCreateAstMapEvent struct{} diff --git a/pkg/contract/ast/pre_create_ast_map_event.go b/pkg/ast_contract/pre_create_ast_map_event.go similarity index 93% rename from pkg/contract/ast/pre_create_ast_map_event.go rename to pkg/ast_contract/pre_create_ast_map_event.go index 049d7fb..d806d9c 100644 --- a/pkg/contract/ast/pre_create_ast_map_event.go +++ b/pkg/ast_contract/pre_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast +package ast_contract // PreCreateAstMapEvent - Event triggered before the AST map and parsing of all files has started. type PreCreateAstMapEvent struct { diff --git a/pkg/contract/ast/tagged_token_reference_interface.go b/pkg/ast_contract/tagged_token_reference_interface.go similarity index 91% rename from pkg/contract/ast/tagged_token_reference_interface.go rename to pkg/ast_contract/tagged_token_reference_interface.go index ea09410..f52937f 100644 --- a/pkg/contract/ast/tagged_token_reference_interface.go +++ b/pkg/ast_contract/tagged_token_reference_interface.go @@ -1,4 +1,4 @@ -package ast +package ast_contract // TaggedTokenReferenceInterface - Represents the AST-TokenInterface, its location, and associated tags. type TaggedTokenReferenceInterface interface { diff --git a/pkg/contract/ast/token_interface.go b/pkg/ast_contract/token_interface.go similarity index 66% rename from pkg/contract/ast/token_interface.go rename to pkg/ast_contract/token_interface.go index a0af04d..8cd555c 100644 --- a/pkg/contract/ast/token_interface.go +++ b/pkg/ast_contract/token_interface.go @@ -1,6 +1,6 @@ -package ast +package ast_contract -// TokenInterface - Represents an AST-TokenInterface, which can be referenced as dependency. +// TokenInterface - Represents an AST-TokenInterface, which can be referenced as dependency_contract. type TokenInterface interface { ToString() string } diff --git a/pkg/contract/ast/token_reference_interface.go b/pkg/ast_contract/token_reference_interface.go similarity index 89% rename from pkg/contract/ast/token_reference_interface.go rename to pkg/ast_contract/token_reference_interface.go index 9b07632..ce4b664 100644 --- a/pkg/contract/ast/token_reference_interface.go +++ b/pkg/ast_contract/token_reference_interface.go @@ -1,4 +1,4 @@ -package ast +package ast_contract // TokenReferenceInterface - Represents the AST-TokenInterface and its location. type TokenReferenceInterface interface { diff --git a/pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go b/pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go similarity index 54% rename from pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go rename to pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go index ebf1e82..a6e32dc 100644 --- a/pkg/contract/ast/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go +++ b/pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go @@ -1,11 +1,11 @@ package token_reference_with_dependencies_interface import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type TokenReferenceWithDependenciesInterface interface { - ast.TokenReferenceInterface + ast_contract.TokenReferenceInterface GetDependencies() []*ast_map.DependencyToken } diff --git a/pkg/core/ast/ast_exception.go b/pkg/ast_core/ast_exception.go similarity index 65% rename from pkg/core/ast/ast_exception.go rename to pkg/ast_core/ast_exception.go index eca1738..fd4bd7f 100644 --- a/pkg/core/ast/ast_exception.go +++ b/pkg/ast_core/ast_exception.go @@ -1,8 +1,8 @@ -package ast +package ast_core import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" ) type AstException struct { @@ -18,6 +18,6 @@ func (a *AstException) Error() string { } } -func NewCouldNotCollectFiles(exception *input_collector.InputException) *AstException { +func NewCouldNotCollectFiles(exception *input_collector_core.InputException) *AstException { return &AstException{Message: "Could not create AstMap.", Previous: exception} } diff --git a/pkg/core/ast/ast_loader.go b/pkg/ast_core/ast_loader.go similarity index 51% rename from pkg/core/ast/ast_loader.go rename to pkg/ast_core/ast_loader.go index 30bcedb..3c25326 100644 --- a/pkg/core/ast/ast_loader.go +++ b/pkg/ast_core/ast_loader.go @@ -1,10 +1,10 @@ -package ast +package ast_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" ) type AstLoader struct { @@ -19,10 +19,10 @@ func NewAstLoader(parser parser.ParserInterface, eventDispatcher event_dispatche } } -func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { - references := make([]*ast_map.FileReference, 0) +func (l *AstLoader) CreateAstMap(files []string) (*ast_map2.AstMap, error) { + references := make([]*ast_map2.FileReference, 0) - err := l.eventDispatcher.DispatchEvent(ast.NewPreCreateAstMapEvent(len(files))) + err := l.eventDispatcher.DispatchEvent(ast_contract2.NewPreCreateAstMapEvent(len(files))) if err != nil { return nil, err } @@ -31,7 +31,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { reference, err := l.parser.ParseFile(file) if err != nil { - err := l.eventDispatcher.DispatchEvent(ast.NewAstFileSyntaxErrorEvent(file, err.Error())) + err := l.eventDispatcher.DispatchEvent(ast_contract2.NewAstFileSyntaxErrorEvent(file, err.Error())) if err != nil { return nil, err } @@ -41,15 +41,15 @@ func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { references = append(references, reference) - errDispatchAnalysed := l.eventDispatcher.DispatchEvent(ast.NewAstFileAnalysedEvent(file)) + errDispatchAnalysed := l.eventDispatcher.DispatchEvent(ast_contract2.NewAstFileAnalysedEvent(file)) if errDispatchAnalysed != nil { return nil, errDispatchAnalysed } } - astMap := ast_map.NewAstMap(references) + astMap := ast_map2.NewAstMap(references) - errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(ast.NewPostCreateAstMapEvent()) + errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(ast_contract2.NewPostCreateAstMapEvent()) if errDispatchPostCreateMap != nil { return nil, errDispatchPostCreateMap } diff --git a/pkg/core/ast/ast_map/ast_inherit.go b/pkg/ast_core/ast_map/ast_inherit.go similarity index 86% rename from pkg/core/ast/ast_map/ast_inherit.go rename to pkg/ast_core/ast_map/ast_inherit.go index 4551275..c9d0f0e 100644 --- a/pkg/core/ast/ast_map/ast_inherit.go +++ b/pkg/ast_core/ast_map/ast_inherit.go @@ -2,18 +2,18 @@ package ast_map import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" "strings" ) type AstInherit struct { ClassLikeName *ClassLikeToken - FileOccurrence *ast.FileOccurrence + FileOccurrence *ast_contract.FileOccurrence Type AstInheritType path []*AstInherit } -func NewAstInherit(classLikeName *ClassLikeToken, fileOccurrence *ast.FileOccurrence, astInheritType AstInheritType, path []*AstInherit) *AstInherit { +func NewAstInherit(classLikeName *ClassLikeToken, fileOccurrence *ast_contract.FileOccurrence, astInheritType AstInheritType, path []*AstInherit) *AstInherit { return &AstInherit{ ClassLikeName: classLikeName, FileOccurrence: fileOccurrence, diff --git a/pkg/core/ast/ast_map/ast_inherit_type.go b/pkg/ast_core/ast_map/ast_inherit_type.go similarity index 100% rename from pkg/core/ast/ast_map/ast_inherit_type.go rename to pkg/ast_core/ast_map/ast_inherit_type.go diff --git a/pkg/core/ast/ast_map/ast_map.go b/pkg/ast_core/ast_map/ast_map.go similarity index 97% rename from pkg/core/ast/ast_map/ast_map.go rename to pkg/ast_core/ast_map/ast_map.go index 8f17415..029bda2 100644 --- a/pkg/core/ast/ast_map/ast_map.go +++ b/pkg/ast_core/ast_map/ast_map.go @@ -169,8 +169,8 @@ func (a *AstMap) addClassLike(astStructReference ClassLikeReference) { panic(token.ToString()) } - // github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map/emitter.go AstMap - if strings.Contains(token.ToString(), "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map/emitter.go AstMap") { + // github.com/KoNekoD/go-deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap + if strings.Contains(token.ToString(), "github.com/KoNekoD/go-deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap") { panic(token.ToString()) } diff --git a/pkg/core/ast/ast_map/class_like_reference.go b/pkg/ast_core/ast_map/class_like_reference.go similarity index 91% rename from pkg/core/ast/ast_map/class_like_reference.go rename to pkg/ast_core/ast_map/class_like_reference.go index 07d09bc..7984413 100644 --- a/pkg/core/ast/ast_map/class_like_reference.go +++ b/pkg/ast_core/ast_map/class_like_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type ClassLikeReference struct { @@ -38,7 +38,7 @@ func (c *ClassLikeReference) GetFilepath() *string { return c.fileReference.Filepath } -func (c *ClassLikeReference) GetToken() ast.TokenInterface { +func (c *ClassLikeReference) GetToken() ast_contract.TokenInterface { return c.classLikeName } diff --git a/pkg/core/ast/ast_map/class_like_reference_builder.go b/pkg/ast_core/ast_map/class_like_reference_builder.go similarity index 85% rename from pkg/core/ast/ast_map/class_like_reference_builder.go rename to pkg/ast_core/ast_map/class_like_reference_builder.go index fab8202..99893b0 100644 --- a/pkg/core/ast/ast_map/class_like_reference_builder.go +++ b/pkg/ast_core/ast_map/class_like_reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type ClassLikeReferenceBuilder struct { @@ -50,16 +50,16 @@ func (b *ClassLikeReferenceBuilder) Build() *ClassLikeReference { } func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeExtends, make([]*AstInherit, 0))) + b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeExtends, make([]*AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeImplements, make([]*AstInherit, 0))) + b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeImplements, make([]*AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeUses, make([]*AstInherit, 0))) + b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeUses, make([]*AstInherit, 0))) return b } diff --git a/pkg/core/ast/ast_map/class_like_token.go b/pkg/ast_core/ast_map/class_like_token.go similarity index 100% rename from pkg/core/ast/ast_map/class_like_token.go rename to pkg/ast_core/ast_map/class_like_token.go diff --git a/pkg/core/ast/ast_map/class_like_type.go b/pkg/ast_core/ast_map/class_like_type.go similarity index 100% rename from pkg/core/ast/ast_map/class_like_type.go rename to pkg/ast_core/ast_map/class_like_type.go diff --git a/pkg/ast_core/ast_map/dependency_token.go b/pkg/ast_core/ast_map/dependency_token.go new file mode 100644 index 0000000..602e6cd --- /dev/null +++ b/pkg/ast_core/ast_map/dependency_token.go @@ -0,0 +1,14 @@ +package ast_map + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" +) + +type DependencyToken struct { + Token ast_contract2.TokenInterface + Context *ast_contract2.DependencyContext +} + +func NewDependencyToken(token ast_contract2.TokenInterface, context *ast_contract2.DependencyContext) *DependencyToken { + return &DependencyToken{Token: token, Context: context} +} diff --git a/pkg/core/ast/ast_map/file_reference.go b/pkg/ast_core/ast_map/file_reference.go similarity index 91% rename from pkg/core/ast/ast_map/file_reference.go rename to pkg/ast_core/ast_map/file_reference.go index 7120b35..f06e04b 100644 --- a/pkg/core/ast/ast_map/file_reference.go +++ b/pkg/ast_core/ast_map/file_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type FileReference struct { @@ -37,7 +37,7 @@ func (r *FileReference) GetFilepath() *string { return r.Filepath } -func (r *FileReference) GetToken() ast.TokenInterface { +func (r *FileReference) GetToken() ast_contract.TokenInterface { return NewFileToken(r.Filepath) } diff --git a/pkg/core/ast/ast_map/file_reference_builder.go b/pkg/ast_core/ast_map/file_reference_builder.go similarity index 96% rename from pkg/core/ast/ast_map/file_reference_builder.go rename to pkg/ast_core/ast_map/file_reference_builder.go index 77662b2..8819d94 100644 --- a/pkg/core/ast/ast_map/file_reference_builder.go +++ b/pkg/ast_core/ast_map/file_reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type FileReferenceBuilder struct { @@ -15,7 +15,7 @@ func CreateFileReferenceBuilder(filepath string) *FileReferenceBuilder { } func (b *FileReferenceBuilder) UseStatement(classLikeName string, occursAtLine int) *FileReferenceBuilder { - b.Dependencies = append(b.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, ast.DependencyTypeUse))) + b.Dependencies = append(b.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, ast_contract.DependencyTypeUse))) return b } diff --git a/pkg/core/ast/ast_map/file_token.go b/pkg/ast_core/ast_map/file_token.go similarity index 100% rename from pkg/core/ast/ast_map/file_token.go rename to pkg/ast_core/ast_map/file_token.go diff --git a/pkg/core/ast/ast_map/function_reference.go b/pkg/ast_core/ast_map/function_reference.go similarity index 89% rename from pkg/core/ast/ast_map/function_reference.go rename to pkg/ast_core/ast_map/function_reference.go index 94319ce..a86b034 100644 --- a/pkg/core/ast/ast_map/function_reference.go +++ b/pkg/ast_core/ast_map/function_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type FunctionReference struct { @@ -34,7 +34,7 @@ func (r *FunctionReference) GetFilepath() *string { return r.fileReference.Filepath } -func (r *FunctionReference) GetToken() ast.TokenInterface { +func (r *FunctionReference) GetToken() ast_contract.TokenInterface { return r.functionName } diff --git a/pkg/core/ast/ast_map/function_reference_builder.go b/pkg/ast_core/ast_map/function_reference_builder.go similarity index 100% rename from pkg/core/ast/ast_map/function_reference_builder.go rename to pkg/ast_core/ast_map/function_reference_builder.go diff --git a/pkg/core/ast/ast_map/function_token.go b/pkg/ast_core/ast_map/function_token.go similarity index 100% rename from pkg/core/ast/ast_map/function_token.go rename to pkg/ast_core/ast_map/function_token.go diff --git a/pkg/core/ast/ast_map/reference_builder.go b/pkg/ast_core/ast_map/reference_builder.go similarity index 85% rename from pkg/core/ast/ast_map/reference_builder.go rename to pkg/ast_core/ast_map/reference_builder.go index 99d4c05..72c05e8 100644 --- a/pkg/core/ast/ast_map/reference_builder.go +++ b/pkg/ast_core/ast_map/reference_builder.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type ReferenceBuilder struct { @@ -13,7 +13,7 @@ type ReferenceBuilder struct { type ReferenceBuilderInterface interface { GetTokenTemplates() []string - CreateContext(occursAtLine int, dependencyType ast.DependencyType) *ast.DependencyContext + CreateContext(occursAtLine int, dependencyType ast_contract2.DependencyType) *ast_contract2.DependencyContext UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder Variable(classLikeName string, occursAtLine int) *ReferenceBuilder Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder @@ -46,88 +46,88 @@ func (r *ReferenceBuilder) GetTokenTemplates() []string { return r.tokenTemplates } -func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType ast.DependencyType) *ast.DependencyContext { - return ast.NewDependencyContext(ast.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) +func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType ast_contract2.DependencyType) *ast_contract2.DependencyContext { + return ast_contract2.NewDependencyContext(ast_contract2.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) } // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. func (r *ReferenceBuilder) UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, ast.DependencyTypeUnresolvedFunctionCall))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeUnresolvedFunctionCall))) return r } func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeVariable))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeVariable))) return r } func (r *ReferenceBuilder) Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, ast.DependencyTypeSuperGlobalVariable))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeSuperGlobalVariable))) return r } func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeReturnType))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeReturnType))) return r } func (r *ReferenceBuilder) ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeThrow))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeThrow))) return r } func (r *ReferenceBuilder) AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeAnonymousClassExtends))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassExtends))) return r } func (r *ReferenceBuilder) AnonymousClassTrait(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeAnonymousClassTrait))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassTrait))) return r } func (r *ReferenceBuilder) ConstFetch(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeConst))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeConst))) return r } func (r *ReferenceBuilder) AnonymousClassImplements(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeAnonymousClassImplements))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassImplements))) return r } func (r *ReferenceBuilder) Parameter(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeParameter))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeParameter))) return r } func (r *ReferenceBuilder) Attribute(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeAttribute))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAttribute))) return r } func (r *ReferenceBuilder) Instanceof(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeInstanceof))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeInstanceof))) return r } func (r *ReferenceBuilder) NewStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeNew))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeNew))) return r } func (r *ReferenceBuilder) StaticProperty(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeStaticProperty))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeStaticProperty))) return r } func (r *ReferenceBuilder) StaticMethod(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeStaticMethod))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeStaticMethod))) return r } func (r *ReferenceBuilder) CatchStmt(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast.DependencyTypeCatch))) + r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeCatch))) return r } diff --git a/pkg/core/ast/ast_map/super_global_token.go b/pkg/ast_core/ast_map/super_global_token.go similarity index 100% rename from pkg/core/ast/ast_map/super_global_token.go rename to pkg/ast_core/ast_map/super_global_token.go diff --git a/pkg/core/ast/ast_map/tagged_token_reference.go b/pkg/ast_core/ast_map/tagged_token_reference.go similarity index 100% rename from pkg/core/ast/ast_map/tagged_token_reference.go rename to pkg/ast_core/ast_map/tagged_token_reference.go diff --git a/pkg/core/ast/ast_map/variable_reference.go b/pkg/ast_core/ast_map/variable_reference.go similarity index 72% rename from pkg/core/ast/ast_map/variable_reference.go rename to pkg/ast_core/ast_map/variable_reference.go index 0c2bc4e..2915f05 100644 --- a/pkg/core/ast/ast_map/variable_reference.go +++ b/pkg/ast_core/ast_map/variable_reference.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type VariableReference struct { @@ -16,6 +16,6 @@ func (v *VariableReference) GetFilepath() *string { return nil } -func (v *VariableReference) GetToken() ast.TokenInterface { +func (v *VariableReference) GetToken() ast_contract.TokenInterface { return v.tokenName } diff --git a/pkg/core/ast/ast_map_extractor.go b/pkg/ast_core/ast_map_extractor.go similarity index 65% rename from pkg/core/ast/ast_map_extractor.go rename to pkg/ast_core/ast_map_extractor.go index d5734d7..cf90697 100644 --- a/pkg/core/ast/ast_map_extractor.go +++ b/pkg/ast_core/ast_map_extractor.go @@ -1,17 +1,17 @@ -package ast +package ast_core import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" ) type AstMapExtractor struct { - inputCollector input_collector.InputCollectorInterface + inputCollector input_collector_core.InputCollectorInterface astLoader *AstLoader astMapCache *ast_map.AstMap } -func NewAstMapExtractor(inputCollector input_collector.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { +func NewAstMapExtractor(inputCollector input_collector_core.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { return &AstMapExtractor{ inputCollector: inputCollector, astLoader: astLoader, diff --git a/pkg/core/ast/ast_map_extractor_test.go b/pkg/ast_core/ast_map_extractor_test.go similarity index 56% rename from pkg/core/ast/ast_map_extractor_test.go rename to pkg/ast_core/ast_map_extractor_test.go index 46cc40c..023707f 100644 --- a/pkg/core/ast/ast_map_extractor_test.go +++ b/pkg/ast_core/ast_map_extractor_test.go @@ -1,24 +1,24 @@ -package ast +package ast_core import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" "os" "testing" ) func TestAstMapExtractorExtractWorkedFine(t *testing.T) { paths := []string{ - "analyser", - "ast", - "config", + "analyser_contract", + "ast_contract", + "config_contract", "dumper", - "layer", - "output_formatter", - "result", + "layer_contract", + "output_formatter_contract", + "result_contract", "util", } var excluded = make([]string, 0) @@ -31,7 +31,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { basePath := wd + "/pkg/" - fileInputCollector, err := input_collector.NewFileInputCollector(paths, excluded, basePath) + fileInputCollector, err := input_collector_core.NewFileInputCollector(paths, excluded, basePath) if err != nil { t.Error(err) diff --git a/pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go b/pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go similarity index 76% rename from pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go rename to pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go index 2ded631..3a2a980 100644 --- a/pkg/core/ast/parser/cache/ast_file_reference_cache_interface.go +++ b/pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type AstFileReferenceCacheInterface interface { diff --git a/pkg/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go b/pkg/ast_core/parser/cache/ast_file_reference_deferred_cache_interface.go similarity index 100% rename from pkg/core/ast/parser/cache/ast_file_reference_deferred_cache_interface.go rename to pkg/ast_core/parser/cache/ast_file_reference_deferred_cache_interface.go diff --git a/pkg/core/ast/parser/cache/ast_file_reference_file_cache.go b/pkg/ast_core/parser/cache/ast_file_reference_file_cache.go similarity index 95% rename from pkg/core/ast/parser/cache/ast_file_reference_file_cache.go rename to pkg/ast_core/parser/cache/ast_file_reference_file_cache.go index 0c592d4..c748fbd 100644 --- a/pkg/core/ast/parser/cache/ast_file_reference_file_cache.go +++ b/pkg/ast_core/parser/cache/ast_file_reference_file_cache.go @@ -2,8 +2,8 @@ package cache import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/supportive/file" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/file_supportive" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -82,7 +82,7 @@ func (c *AstFileReferenceFileCache) Load() error { if !util.FileExists(c.cacheFile) || !util.IsReadable(c.cacheFile) { return nil } - contents, err := file.FileReaderRead(c.cacheFile) + contents, err := file_supportive.FileReaderRead(c.cacheFile) if err != nil { return err } diff --git a/pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go b/pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go similarity index 93% rename from pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go rename to pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go index d330c0d..06891d2 100644 --- a/pkg/core/ast/parser/cache/ast_file_reference_in_memory_cache.go +++ b/pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" "path/filepath" ) diff --git a/pkg/core/ast/parser/cache/cacheable_file_subscriber.go b/pkg/ast_core/parser/cache/cacheable_file_subscriber.go similarity index 79% rename from pkg/core/ast/parser/cache/cacheable_file_subscriber.go rename to pkg/ast_core/parser/cache/cacheable_file_subscriber.go index cc3cdf8..bfd98c6 100644 --- a/pkg/core/ast/parser/cache/cacheable_file_subscriber.go +++ b/pkg/ast_core/parser/cache/cacheable_file_subscriber.go @@ -1,7 +1,7 @@ package cache import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type CacheableFileSubscriber struct { @@ -16,12 +16,12 @@ func NewCacheableFileSubscriber(deferredCache AstFileReferenceDeferredCacheInter func (s *CacheableFileSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { switch rawEvent.(type) { - case *ast.PreCreateAstMapEvent: + case *ast_contract2.PreCreateAstMapEvent: err := s.deferredCache.Load() if err != nil { return err } - case *ast.PostCreateAstMapEvent: + case *ast_contract2.PostCreateAstMapEvent: err := s.deferredCache.Write() if err != nil { return err diff --git a/pkg/core/ast/parser/extractors/AnnotationReferenceExtractor.php b/pkg/ast_core/parser/extractors/AnnotationReferenceExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/AnnotationReferenceExtractor.php rename to pkg/ast_core/parser/extractors/AnnotationReferenceExtractor.php diff --git a/pkg/core/ast/parser/extractors/AnonymousClassExtractor.php b/pkg/ast_core/parser/extractors/AnonymousClassExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/AnonymousClassExtractor.php rename to pkg/ast_core/parser/extractors/AnonymousClassExtractor.php diff --git a/pkg/core/ast/parser/extractors/ClassConstantExtractor.php b/pkg/ast_core/parser/extractors/ClassConstantExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/ClassConstantExtractor.php rename to pkg/ast_core/parser/extractors/ClassConstantExtractor.php diff --git a/pkg/core/ast/parser/extractors/FunctionCallResolver.php b/pkg/ast_core/parser/extractors/FunctionCallResolver.php similarity index 100% rename from pkg/core/ast/parser/extractors/FunctionCallResolver.php rename to pkg/ast_core/parser/extractors/FunctionCallResolver.php diff --git a/pkg/core/ast/parser/extractors/FunctionLikeExtractor.php b/pkg/ast_core/parser/extractors/FunctionLikeExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/FunctionLikeExtractor.php rename to pkg/ast_core/parser/extractors/FunctionLikeExtractor.php diff --git a/pkg/core/ast/parser/extractors/KeywordExtractor.php b/pkg/ast_core/parser/extractors/KeywordExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/KeywordExtractor.php rename to pkg/ast_core/parser/extractors/KeywordExtractor.php diff --git a/pkg/core/ast/parser/extractors/PropertyExtractor.php b/pkg/ast_core/parser/extractors/PropertyExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/PropertyExtractor.php rename to pkg/ast_core/parser/extractors/PropertyExtractor.php diff --git a/pkg/core/ast/parser/extractors/StaticExtractor.php b/pkg/ast_core/parser/extractors/StaticExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/StaticExtractor.php rename to pkg/ast_core/parser/extractors/StaticExtractor.php diff --git a/pkg/core/ast/parser/extractors/VariableExtractor.php b/pkg/ast_core/parser/extractors/VariableExtractor.php similarity index 100% rename from pkg/core/ast/parser/extractors/VariableExtractor.php rename to pkg/ast_core/parser/extractors/VariableExtractor.php diff --git a/pkg/core/ast/parser/extractors/reference_extractor_interface.go b/pkg/ast_core/parser/extractors/reference_extractor_interface.go similarity index 64% rename from pkg/core/ast/parser/extractors/reference_extractor_interface.go rename to pkg/ast_core/parser/extractors/reference_extractor_interface.go index 0c23220..4ade803 100644 --- a/pkg/core/ast/parser/extractors/reference_extractor_interface.go +++ b/pkg/ast_core/parser/extractors/reference_extractor_interface.go @@ -1,8 +1,8 @@ package extractors import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" "go/ast" ) diff --git a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go b/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go similarity index 86% rename from pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go rename to pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go index 240c6a0..2a6a6ca 100644 --- a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor.go +++ b/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go @@ -1,10 +1,10 @@ package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" "github.com/KoNekoD/go-deptrac/pkg/util" "go/ast" "go/token" @@ -12,16 +12,16 @@ import ( type FileReferenceVisitor struct { dependencyResolvers []extractors.ReferenceExtractorInterface - currentTypeScope *parser.TypeScope - currentReference ast_map.ReferenceBuilderInterface - fileReferenceBuilder *ast_map.FileReferenceBuilder - typeResolver *parser.TypeResolver + currentTypeScope *parser2.TypeScope + currentReference ast_map2.ReferenceBuilderInterface + fileReferenceBuilder *ast_map2.FileReferenceBuilder + typeResolver *parser2.TypeResolver nodeNamer *node_namer.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *ast_map.FileReferenceBuilder, resolver *parser.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *ast_map2.FileReferenceBuilder, resolver *parser2.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, @@ -29,7 +29,7 @@ func NewFileReferenceVisitor(fileReferenceBuilder *ast_map.FileReferenceBuilder, nodeNamer: nodeNamer, errors: make([]error, 0), dependencyResolvers: extractors, - currentTypeScope: parser.NewTypeScope(""), + currentTypeScope: parser2.NewTypeScope(""), } } @@ -66,10 +66,10 @@ func (f *FileReferenceVisitor) Visit(node ast.Node) (w ast.Visitor) { func (f *FileReferenceVisitor) enterNode(node ast.Node) { switch typedNode := node.(type) { case *ast.File: - packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) // TODO: Possible bug when file dir != package declared in file + packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) // TODO: Possible bug when file_supportive dir != package declared in file_supportive f.addErrIfNeeded(err) - f.currentTypeScope = parser.NewTypeScope(packageFileName).SetFileNode(typedNode) + f.currentTypeScope = parser2.NewTypeScope(packageFileName).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: diff --git a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go b/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go similarity index 70% rename from pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go rename to pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go index 527d8bd..89d40b2 100644 --- a/pkg/core/ast/parser/nikic_php_parser/file_reference_visitor_test.go +++ b/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go @@ -2,9 +2,9 @@ package nikic_php_parser import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - parser2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" @@ -13,7 +13,7 @@ import ( ) func TestFileReferenceVisitorOk(t *testing.T) { - file := "pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go" + file := "pkg/core/ast_contract/parser/nikic_php_parser/nikic_php_parser.go" nodes, err := parser.ParseFile(token.NewFileSet(), file, nil, 0) diff --git a/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go b/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go similarity index 79% rename from pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go rename to pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go index 06eee99..3996acc 100644 --- a/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser.go +++ b/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go @@ -1,11 +1,11 @@ package nikic_php_parser import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - astParser "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + astParser "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" "go/ast" "go/parser" "go/token" @@ -19,7 +19,7 @@ type parsedFilesBag struct { parsedFiles map[string]*parsedFile } -func (p *parsedFilesBag) Add(fileReference *ast_map.FileReference, rootNode *ast.File) { +func (p *parsedFilesBag) Add(fileReference *ast_map2.FileReference, rootNode *ast.File) { filepath := fileReference.GetFilepath() file := &parsedFile{fileReference: fileReference, rootNode: rootNode} p.parsedFiles[*filepath] = file @@ -30,7 +30,7 @@ func (p *parsedFilesBag) Get(filepath string) *parsedFile { } type parsedFile struct { - fileReference *ast_map.FileReference + fileReference *ast_map2.FileReference rootNode *ast.File debt []interface{} } @@ -63,7 +63,7 @@ func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver } } -func (p *NikicPhpParser) ParseFile(file string) (*ast_map.FileReference, error) { +func (p *NikicPhpParser) ParseFile(file string) (*ast_map2.FileReference, error) { v, err := p.cache.Get(file) if err != nil { return nil, err @@ -72,7 +72,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*ast_map.FileReference, error) return v, nil } - fileReferenceBuilder := ast_map.CreateFileReferenceBuilder(file) + fileReferenceBuilder := ast_map2.CreateFileReferenceBuilder(file) visitor := NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) rootNode := p.loadNodesFromFile(file) @@ -89,7 +89,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*ast_map.FileReference, error) return fileReference, nil } -func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *ast_map.ClassLikeReference) *ast.Ident { +func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *ast_map2.ClassLikeReference) *ast.Ident { classLikeName := classReference.GetToken().ToString() if v, ok := classAstMap[classLikeName]; ok { return v diff --git a/pkg/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go b/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser_test.go similarity index 100% rename from pkg/core/ast/parser/nikic_php_parser/nikic_php_parser_test.go rename to pkg/ast_core/parser/nikic_php_parser/nikic_php_parser_test.go diff --git a/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go b/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer.go similarity index 100% rename from pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer.go rename to pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer.go diff --git a/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go b/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go similarity index 50% rename from pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go rename to pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go index 34418ff..d17f3de 100644 --- a/pkg/core/ast/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go +++ b/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go @@ -1,15 +1,15 @@ package node_namer_test import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/test_container_provider" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/test_container_provider" "testing" ) func TestOk(t *testing.T) { namer := test_container_provider.ProvideTestContainerService("NodeNamer").(*node_namer.NodeNamer) - name, err := namer.GetRootPackageName("pkg/supportive/console/application") + name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") if err != nil { t.Error(err) diff --git a/pkg/core/ast/parser/parser_interface.go b/pkg/ast_core/parser/parser_interface.go similarity index 68% rename from pkg/core/ast/parser/parser_interface.go rename to pkg/ast_core/parser/parser_interface.go index 327b63f..bbeddfe 100644 --- a/pkg/core/ast/parser/parser_interface.go +++ b/pkg/ast_core/parser/parser_interface.go @@ -1,7 +1,7 @@ package parser import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type ParserInterface interface { diff --git a/pkg/core/ast/parser/type_resolver.go b/pkg/ast_core/parser/type_resolver.go similarity index 98% rename from pkg/core/ast/parser/type_resolver.go rename to pkg/ast_core/parser/type_resolver.go index cb27361..07ac686 100644 --- a/pkg/core/ast/parser/type_resolver.go +++ b/pkg/ast_core/parser/type_resolver.go @@ -1,7 +1,7 @@ package parser import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" "go/ast" "go/parser" "go/token" diff --git a/pkg/core/ast/parser/type_scope.go b/pkg/ast_core/parser/type_scope.go similarity index 100% rename from pkg/core/ast/parser/type_scope.go rename to pkg/ast_core/parser/type_scope.go diff --git a/pkg/config/analyse_options_hook.go b/pkg/config/analyse_options_hook.go index 71e3866..dd91c59 100644 --- a/pkg/config/analyse_options_hook.go +++ b/pkg/config/analyse_options_hook.go @@ -2,7 +2,7 @@ package config import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" ) type analyseOptionsHook struct{} @@ -19,13 +19,13 @@ const ( OptionReportUncovered = "report-uncovered" OptionReportUncoveredUsage = "Report uncovered dependencies" OptionFailOnUncovered = "fail-on-uncovered" - OptionFailOnUncoveredUsage = "Fails if any uncovered dependency is found" + OptionFailOnUncoveredUsage = "Fails if any uncovered dependency_contract is found" OptionReportSkipped = "report-skipped" OptionReportSkippedUsage = "Report skipped violations" OptionFormatter = "formatter" - OptionFormatterUsage = "Format in which to print the result of the analysis" + OptionFormatterUsage = "Format in which to print the result_contract of the analysis" OptionOutput = "output" - OptionOutputUsage = "Output file path for formatter (if applicable)" + OptionOutputUsage = "Output file_supportive path for formatter (if applicable)" OptionNoProgress = "no-progress" OptionNoProgressUsage = "Do not show progress bar" ) diff --git a/pkg/config/config_file_hook.go b/pkg/config/config_file_hook.go index 879fa02..d4f13a6 100644 --- a/pkg/config/config_file_hook.go +++ b/pkg/config/config_file_hook.go @@ -11,9 +11,9 @@ func NewConfigFileHook() ConfigFileHook { return &configFileHook{} } -const ArgNameConfigFileHook = "config-file" +const ArgNameConfigFileHook = "config_contract-file_supportive" const DefaultConfigFileHook = "deptrac.yaml" -const UsageConfigFileHook = "config file path" +const UsageConfigFileHook = "config_contract file_supportive path" func (h *configFileHook) GetConfigFile() string { configFile := flag.String(ArgNameConfigFileHook, DefaultConfigFileHook, UsageConfigFileHook) diff --git a/pkg/contract/config/analyser_config.go b/pkg/config_contract/analyser_config.go similarity index 97% rename from pkg/contract/config/analyser_config.go rename to pkg/config_contract/analyser_config.go index 55a783b..2fcd898 100644 --- a/pkg/contract/config/analyser_config.go +++ b/pkg/config_contract/analyser_config.go @@ -1,4 +1,4 @@ -package config +package config_contract type AnalyserConfig struct { Types map[string]EmitterType diff --git a/pkg/contract/config/codeclimate_level_enum.go b/pkg/config_contract/codeclimate_level_enum.go similarity index 93% rename from pkg/contract/config/codeclimate_level_enum.go rename to pkg/config_contract/codeclimate_level_enum.go index 2ab5c07..f8df679 100644 --- a/pkg/contract/config/codeclimate_level_enum.go +++ b/pkg/config_contract/codeclimate_level_enum.go @@ -1,4 +1,4 @@ -package config +package config_contract type CodeclimateLevelEnum string diff --git a/pkg/contract/config/collector/attribute_config.go b/pkg/config_contract/collector/attribute_config.go similarity index 63% rename from pkg/contract/config/collector/attribute_config.go rename to pkg/config_contract/collector/attribute_config.go index 0d6854c..24fabe9 100644 --- a/pkg/contract/config/collector/attribute_config.go +++ b/pkg/config_contract/collector/attribute_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type AttributeConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewAttributeConfig(config string) *AttributeConfig { diff --git a/pkg/config_contract/collector/bool_config.go b/pkg/config_contract/collector/bool_config.go new file mode 100644 index 0000000..db2c81f --- /dev/null +++ b/pkg/config_contract/collector/bool_config.go @@ -0,0 +1,31 @@ +package collector + +import ( + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" +) + +type BoolConfig struct { + *config_contract2.CollectorConfig + collectorType config_contract2.CollectorType + mustNot []config_contract2.CollectorConfig + must []config_contract2.CollectorConfig +} + +func NewBoolConfig() *BoolConfig { + return &BoolConfig{ + CollectorConfig: &config_contract2.CollectorConfig{}, + collectorType: config_contract2.TypeBool, + mustNot: make([]config_contract2.CollectorConfig, 0), + must: make([]config_contract2.CollectorConfig, 0), + } +} + +func (c *BoolConfig) ToArray() map[string]interface{} { + parent := c.CollectorConfig.ToArray() + + parent["type"] = string(c.collectorType) + parent["mustNot"] = c.mustNot + parent["must"] = c.must + + return parent +} diff --git a/pkg/contract/config/collector/class_config.go b/pkg/config_contract/collector/class_config.go similarity index 62% rename from pkg/contract/config/collector/class_config.go rename to pkg/config_contract/collector/class_config.go index a638533..7e7c3c1 100644 --- a/pkg/contract/config/collector/class_config.go +++ b/pkg/config_contract/collector/class_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ClassConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewClassConfig(config string) *ClassConfig { diff --git a/pkg/contract/config/collector/class_like_config.go b/pkg/config_contract/collector/class_like_config.go similarity index 63% rename from pkg/contract/config/collector/class_like_config.go rename to pkg/config_contract/collector/class_like_config.go index e924c84..a6db426 100644 --- a/pkg/contract/config/collector/class_like_config.go +++ b/pkg/config_contract/collector/class_like_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ClassLikeConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewClassLikeConfig(config string) *ClassLikeConfig { diff --git a/pkg/contract/config/collector/class_name_regex_config.go b/pkg/config_contract/collector/class_name_regex_config.go similarity index 65% rename from pkg/contract/config/collector/class_name_regex_config.go rename to pkg/config_contract/collector/class_name_regex_config.go index abcbedf..f2edddd 100644 --- a/pkg/contract/config/collector/class_name_regex_config.go +++ b/pkg/config_contract/collector/class_name_regex_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ClassNameRegexConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewClassNameRegexConfig(config string) *ClassNameRegexConfig { diff --git a/pkg/contract/config/collector/composer_config.go b/pkg/config_contract/collector/composer_config.go similarity index 76% rename from pkg/contract/config/collector/composer_config.go rename to pkg/config_contract/collector/composer_config.go index 388e75e..70bdb32 100644 --- a/pkg/contract/config/collector/composer_config.go +++ b/pkg/config_contract/collector/composer_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ComposerConfig struct { - *config.CollectorConfig - collectorType config.CollectorType + *config_contract2.CollectorConfig + collectorType config_contract2.CollectorType packages []string composerPath string composerLockPath string @@ -25,8 +25,8 @@ func NewComposerConfig(packages []string, composerPath *string, composerLockPath } return &ComposerConfig{ - CollectorConfig: &config.CollectorConfig{}, - collectorType: config.TypeComposer, + CollectorConfig: &config_contract2.CollectorConfig{}, + collectorType: config_contract2.TypeComposer, packages: packages, composerPath: *composerPath, composerLockPath: *composerLockPath, diff --git a/pkg/contract/config/collector/directory_config.go b/pkg/config_contract/collector/directory_config.go similarity index 63% rename from pkg/contract/config/collector/directory_config.go rename to pkg/config_contract/collector/directory_config.go index e8a1a5f..b94c5e0 100644 --- a/pkg/contract/config/collector/directory_config.go +++ b/pkg/config_contract/collector/directory_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type DirectoryConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewDirectoryConfig(config string) *DirectoryConfig { diff --git a/pkg/contract/config/collector/extends_config.go b/pkg/config_contract/collector/extends_config.go similarity index 62% rename from pkg/contract/config/collector/extends_config.go rename to pkg/config_contract/collector/extends_config.go index 9ec0863..d75f53c 100644 --- a/pkg/contract/config/collector/extends_config.go +++ b/pkg/config_contract/collector/extends_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ExtendsConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewExtendsConfig(config string) *ExtendsConfig { diff --git a/pkg/contract/config/collector/function_name_config.go b/pkg/config_contract/collector/function_name_config.go similarity index 64% rename from pkg/contract/config/collector/function_name_config.go rename to pkg/config_contract/collector/function_name_config.go index 22957ec..bc08211 100644 --- a/pkg/contract/config/collector/function_name_config.go +++ b/pkg/config_contract/collector/function_name_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type FunctionNameConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewFunctionNameConfig(config string) *FunctionNameConfig { diff --git a/pkg/contract/config/collector/glob_config.go b/pkg/config_contract/collector/glob_config.go similarity index 61% rename from pkg/contract/config/collector/glob_config.go rename to pkg/config_contract/collector/glob_config.go index ff6a853..a110f63 100644 --- a/pkg/contract/config/collector/glob_config.go +++ b/pkg/config_contract/collector/glob_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type GlobConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewGlobConfig(config string) *GlobConfig { diff --git a/pkg/contract/config/collector/implements_config.go b/pkg/config_contract/collector/implements_config.go similarity index 64% rename from pkg/contract/config/collector/implements_config.go rename to pkg/config_contract/collector/implements_config.go index 1f9b1ab..fcfce2b 100644 --- a/pkg/contract/config/collector/implements_config.go +++ b/pkg/config_contract/collector/implements_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type ImplementsConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewImplementsConfig(config string) *ImplementsConfig { diff --git a/pkg/contract/config/collector/inherits_config.go b/pkg/config_contract/collector/inherits_config.go similarity index 63% rename from pkg/contract/config/collector/inherits_config.go rename to pkg/config_contract/collector/inherits_config.go index 387715a..b731061 100644 --- a/pkg/contract/config/collector/inherits_config.go +++ b/pkg/config_contract/collector/inherits_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type InheritsConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewInheritsConfig(config string) *InheritsConfig { diff --git a/pkg/contract/config/collector/interface_config.go b/pkg/config_contract/collector/interface_config.go similarity index 63% rename from pkg/contract/config/collector/interface_config.go rename to pkg/config_contract/collector/interface_config.go index 2560d8d..da91479 100644 --- a/pkg/contract/config/collector/interface_config.go +++ b/pkg/config_contract/collector/interface_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type InterfaceConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewInterfaceConfig(config string) *InterfaceConfig { diff --git a/pkg/contract/config/collector/layer_config.go b/pkg/config_contract/collector/layer_config.go similarity index 62% rename from pkg/contract/config/collector/layer_config.go rename to pkg/config_contract/collector/layer_config.go index d44b448..1ee4d51 100644 --- a/pkg/contract/config/collector/layer_config.go +++ b/pkg/config_contract/collector/layer_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type LayerConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewLayerConfig(config string) *LayerConfig { diff --git a/pkg/contract/config/collector/method_config.go b/pkg/config_contract/collector/method_config.go similarity index 62% rename from pkg/contract/config/collector/method_config.go rename to pkg/config_contract/collector/method_config.go index 071e236..66afdbb 100644 --- a/pkg/contract/config/collector/method_config.go +++ b/pkg/config_contract/collector/method_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type MethodConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewMethodConfig(config string) *MethodConfig { diff --git a/pkg/contract/config/collector/php_interal_config.go b/pkg/config_contract/collector/php_interal_config.go similarity index 64% rename from pkg/contract/config/collector/php_interal_config.go rename to pkg/config_contract/collector/php_interal_config.go index 43ffca4..29a9c1f 100644 --- a/pkg/contract/config/collector/php_interal_config.go +++ b/pkg/config_contract/collector/php_interal_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type PhpInteralConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewPhpInteralConfig(config string) *PhpInteralConfig { diff --git a/pkg/contract/config/collector/super_global_config.go b/pkg/config_contract/collector/super_global_config.go similarity index 79% rename from pkg/contract/config/collector/super_global_config.go rename to pkg/config_contract/collector/super_global_config.go index 544cc8c..147668d 100644 --- a/pkg/contract/config/collector/super_global_config.go +++ b/pkg/config_contract/collector/super_global_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type SuperGlobalConfig struct { - *config.CollectorConfig - collectorType config.CollectorType + *config_contract2.CollectorConfig + collectorType config_contract2.CollectorType config []string } diff --git a/pkg/contract/config/collector/tag_value_regex_config.go b/pkg/config_contract/collector/tag_value_regex_config.go similarity index 73% rename from pkg/contract/config/collector/tag_value_regex_config.go rename to pkg/config_contract/collector/tag_value_regex_config.go index 17fa33f..7be4ca0 100644 --- a/pkg/contract/config/collector/tag_value_regex_config.go +++ b/pkg/config_contract/collector/tag_value_regex_config.go @@ -1,20 +1,20 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type TagValueRegexConfig struct { - *config.CollectorConfig - collectorType config.CollectorType + *config_contract2.CollectorConfig + collectorType config_contract2.CollectorType tag string value *string } func newTagValueRegexConfig(tag string, value *string) *TagValueRegexConfig { return &TagValueRegexConfig{ - CollectorConfig: &config.CollectorConfig{}, - collectorType: config.TypeTagValueRegex, + CollectorConfig: &config_contract2.CollectorConfig{}, + collectorType: config_contract2.TypeTagValueRegex, tag: tag, value: value, } diff --git a/pkg/contract/config/collector/trait_config.go b/pkg/config_contract/collector/trait_config.go similarity index 62% rename from pkg/contract/config/collector/trait_config.go rename to pkg/config_contract/collector/trait_config.go index 9f54ca0..fa8e99b 100644 --- a/pkg/contract/config/collector/trait_config.go +++ b/pkg/config_contract/collector/trait_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type TraitConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewTraitConfig(config string) *TraitConfig { diff --git a/pkg/contract/config/collector/uses_config.go b/pkg/config_contract/collector/uses_config.go similarity index 61% rename from pkg/contract/config/collector/uses_config.go rename to pkg/config_contract/collector/uses_config.go index 1816c83..2703113 100644 --- a/pkg/contract/config/collector/uses_config.go +++ b/pkg/config_contract/collector/uses_config.go @@ -1,12 +1,12 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type UsesConfig struct { - *config.ConfigurableCollectorConfig - collectorType config.CollectorType + *config_contract2.ConfigurableCollectorConfig + collectorType config_contract2.CollectorType } func NewUsesConfig(config string) *UsesConfig { diff --git a/pkg/contract/config/collector_config.go b/pkg/config_contract/collector_config.go similarity index 96% rename from pkg/contract/config/collector_config.go rename to pkg/config_contract/collector_config.go index 32705e6..611cf6f 100644 --- a/pkg/contract/config/collector_config.go +++ b/pkg/config_contract/collector_config.go @@ -1,4 +1,4 @@ -package config +package config_contract // CollectorConfig - Abstract type CollectorConfig struct { diff --git a/pkg/contract/config/collector_type.go b/pkg/config_contract/collector_type.go similarity index 95% rename from pkg/contract/config/collector_type.go rename to pkg/config_contract/collector_type.go index a5e8353..8b8aad2 100644 --- a/pkg/contract/config/collector_type.go +++ b/pkg/config_contract/collector_type.go @@ -1,4 +1,4 @@ -package config +package config_contract import "errors" @@ -19,7 +19,7 @@ const ( TypeInheritance CollectorType = "inheritanceLevel" TypeInherits CollectorType = "inherits" TypeInterface CollectorType = "interface" - TypeLayer CollectorType = "layer" + TypeLayer CollectorType = "layer_contract" TypeMethod CollectorType = "method" TypeSuperGlobal CollectorType = "superGlobal" TypeGlobal CollectorType = "global" diff --git a/pkg/contract/config/configurable_collector_config.go b/pkg/config_contract/configurable_collector_config.go similarity index 98% rename from pkg/contract/config/configurable_collector_config.go rename to pkg/config_contract/configurable_collector_config.go index ad2ada3..b86808e 100644 --- a/pkg/contract/config/configurable_collector_config.go +++ b/pkg/config_contract/configurable_collector_config.go @@ -1,4 +1,4 @@ -package config +package config_contract import ( "strings" diff --git a/pkg/contract/config/deptrac_config/deptrac_config.go b/pkg/config_contract/deptrac_config/deptrac_config.go similarity index 69% rename from pkg/contract/config/deptrac_config/deptrac_config.go rename to pkg/config_contract/deptrac_config/deptrac_config.go index 4680980..a9a7b37 100644 --- a/pkg/contract/config/deptrac_config/deptrac_config.go +++ b/pkg/config_contract/deptrac_config/deptrac_config.go @@ -2,18 +2,18 @@ package deptrac_config import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" + formatter2 "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" + Layer2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) type DeptracConfig struct { Paths []string - Analyser *config.AnalyserConfig - Formatters map[formatter.FormatterType]formatter.FormatterConfigInterface - Layers []*config.Layer - Rulesets map[string]*config.Ruleset + Analyser *config_contract2.AnalyserConfig + Formatters map[formatter2.FormatterType]formatter2.FormatterConfigInterface + Layers []*config_contract2.Layer + Rulesets map[string]*config_contract2.Ruleset IgnoreUncoveredInternalStructs bool SkipViolations map[string][]string ExcludeFiles []string @@ -23,12 +23,12 @@ type DeptracConfig struct { func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { parsedDeptrac := parsed["deptrac"].(map[string]interface{}) - formatters := make(map[formatter.FormatterType]formatter.FormatterConfigInterface) - layers := make([]*config.Layer, 0) + formatters := make(map[formatter2.FormatterType]formatter2.FormatterConfigInterface) + layers := make([]*config_contract2.Layer, 0) for _, layerRawRaw := range parsedDeptrac["layers"].([]interface{}) { layerRaw := layerRawRaw.(map[string]interface{}) - collectorConfigs := make([]*config.CollectorConfig, 0) + collectorConfigs := make([]*config_contract2.CollectorConfig, 0) for _, collectorRawRaw := range layerRaw["collectors"].([]interface{}) { collectorRaw := collectorRawRaw.(map[string]interface{}) @@ -37,7 +37,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { return nil, Layer2.NewInvalidCollectorDefinitionExceptionMissingType() } - collectorType, err := config.NewCollectorTypeFromString(collectorRaw["type"].(string)) + collectorType, err := config_contract2.NewCollectorTypeFromString(collectorRaw["type"].(string)) if err != nil { return nil, err @@ -54,7 +54,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { delete(payload, "private") delete(payload, "type") - collectorConfig := config.NewCollectorConfig( + collectorConfig := config_contract2.NewCollectorConfig( collectorType, payload, private, @@ -65,14 +65,14 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { layerName, ok := layerRaw["name"] if !ok { - return nil, errors.New("invalid layer definition: missing name") + return nil, errors.New("invalid layer_contract definition: missing name") } layerNameStr, ok := layerName.(string) if !ok { - return nil, errors.New("invalid layer definition: name must be a string") + return nil, errors.New("invalid layer_contract definition: name must be a string") } - layer := config.NewLayer( + layer := config_contract2.NewLayer( layerNameStr, collectorConfigs, ) @@ -84,14 +84,14 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { formatterRaw := formatterRawRaw.(map[string]interface{}) switch formatterKey { - case string(formatter.FormatterTypeCodeclimateConfig): - formatters[formatter.FormatterTypeCodeclimateConfig] = formatter.CreateCodeclimateConfig( - formatterRaw["failure"].(*config.CodeclimateLevelEnum), - formatterRaw["skipped"].(*config.CodeclimateLevelEnum), - formatterRaw["uncovered"].(*config.CodeclimateLevelEnum), + case string(formatter2.FormatterTypeCodeclimateConfig): + formatters[formatter2.FormatterTypeCodeclimateConfig] = formatter2.CreateCodeclimateConfig( + formatterRaw["failure"].(*config_contract2.CodeclimateLevelEnum), + formatterRaw["skipped"].(*config_contract2.CodeclimateLevelEnum), + formatterRaw["uncovered"].(*config_contract2.CodeclimateLevelEnum), ) - case string(formatter.FormatterTypeGraphvizConfig): - hiddenLayers := make([]*config.Layer, 0) + case string(formatter2.FormatterTypeGraphvizConfig): + hiddenLayers := make([]*config_contract2.Layer, 0) for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { for _, layer := range layers { @@ -102,14 +102,14 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - formatterGraphvizConfig := formatter.CreateGraphvizConfig(). + formatterGraphvizConfig := formatter2.CreateGraphvizConfig(). SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). SetHiddenLayers(hiddenLayers...) - formatters[formatter.FormatterTypeGraphvizConfig] = formatterGraphvizConfig + formatters[formatter2.FormatterTypeGraphvizConfig] = formatterGraphvizConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*config.Layer, 0) + groupLayer := make([]*config_contract2.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layers { @@ -122,14 +122,14 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) } - case string(formatter.FormatterTypeMermaidJsConfig): - formatterMermaidJsConfig := formatter.CreateMermaidJsConfig(). + case string(formatter2.FormatterTypeMermaidJsConfig): + formatterMermaidJsConfig := formatter2.CreateMermaidJsConfig(). SetDirection(formatterRaw["direction"].(string)) - formatters[formatter.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig + formatters[formatter2.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*config.Layer, 0) + groupLayer := make([]*config_contract2.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layers { @@ -146,10 +146,10 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - rulesets := make(map[string]*config.Ruleset) + rulesets := make(map[string]*config_contract2.Ruleset) for rulesetLayerName, rulesetLayersNames := range parsedDeptrac["ruleset"].(map[string]interface{}) { - var rulesetOwningLayer *config.Layer + var rulesetOwningLayer *config_contract2.Layer for _, layer := range layers { if layer.Name == rulesetLayerName { @@ -158,7 +158,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - rulesetLayers := make([]*config.Layer, 0) + rulesetLayers := make([]*config_contract2.Layer, 0) if rulesetLayersNames != nil { // If not ~ for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { @@ -172,18 +172,18 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { } } - ruleset := config.NewRuleset(rulesetOwningLayer, rulesetLayers) + ruleset := config_contract2.NewRuleset(rulesetOwningLayer, rulesetLayers) rulesets[rulesetLayerName] = ruleset } - analyzerTypesDefault := []config.EmitterType{config.ClassToken, config.FunctionToken} - analyzerTypes := make([]config.EmitterType, 0) + analyzerTypesDefault := []config_contract2.EmitterType{config_contract2.ClassToken, config_contract2.FunctionToken} + analyzerTypes := make([]config_contract2.EmitterType, 0) internalTag := "@internal" if parsedDeptracAnalyzer, ok := parsedDeptrac["analyzer"]; ok { analyzerRaw := parsedDeptracAnalyzer.(map[string]interface{}) for _, typeRaw := range analyzerRaw["types"].([]interface{}) { - analyzerType, err := config.NewEmitterTypeFromString(typeRaw.(string)) + analyzerType, err := config_contract2.NewEmitterTypeFromString(typeRaw.(string)) if err != nil { return nil, err @@ -196,7 +196,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { analyzerTypes = analyzerTypesDefault } - analyser := config.Create(analyzerTypes, &internalTag) + analyser := config_contract2.Create(analyzerTypes, &internalTag) paths := make([]string, 0) for _, path := range parsedDeptrac["paths"].([]interface{}) { @@ -237,7 +237,7 @@ func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { }, nil } -func (c *DeptracConfig) SetRulesets(rulesets ...*config.Ruleset) *DeptracConfig { +func (c *DeptracConfig) SetRulesets(rulesets ...*config_contract2.Ruleset) *DeptracConfig { for _, ruleset := range rulesets { c.Rulesets[ruleset.LayerConfig.Name] = ruleset } @@ -251,7 +251,7 @@ func (c *DeptracConfig) ToArray() map[string]interface{} { config["paths"] = c.Paths } if c.Analyser != nil { - config["analyser"] = c.Analyser.ToArray() + config["analyser_contract"] = c.Analyser.ToArray() } if len(c.Formatters) > 0 { formatters := make([]map[string]interface{}, len(c.Formatters)) diff --git a/pkg/contract/config/emitter_type.go b/pkg/config_contract/emitter_type.go similarity index 90% rename from pkg/contract/config/emitter_type.go rename to pkg/config_contract/emitter_type.go index 751aaf0..27539a8 100644 --- a/pkg/contract/config/emitter_type.go +++ b/pkg/config_contract/emitter_type.go @@ -1,4 +1,4 @@ -package config +package config_contract import "errors" @@ -7,7 +7,7 @@ type EmitterType string const ( ClassToken EmitterType = "class" ClassSuperGlobalToken EmitterType = "class_superglobal" - FileToken EmitterType = "file" + FileToken EmitterType = "file_supportive" FunctionToken EmitterType = "function" FunctionCall EmitterType = "function_call" FunctionSuperGlobalToken EmitterType = "function_superglobal" diff --git a/pkg/contract/config/example.yaml b/pkg/config_contract/example.yaml similarity index 100% rename from pkg/contract/config/example.yaml rename to pkg/config_contract/example.yaml diff --git a/pkg/config_contract/formatter/codeclimate_config.go b/pkg/config_contract/formatter/codeclimate_config.go new file mode 100644 index 0000000..a4a51d3 --- /dev/null +++ b/pkg/config_contract/formatter/codeclimate_config.go @@ -0,0 +1,68 @@ +package formatter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/config_contract" +) + +type CodeclimateConfig struct { + Failure config_contract.CodeclimateLevelEnum + Skipped config_contract.CodeclimateLevelEnum + Uncovered config_contract.CodeclimateLevelEnum +} + +func newCodeclimateConfig(failure config_contract.CodeclimateLevelEnum, skipped config_contract.CodeclimateLevelEnum, uncovered config_contract.CodeclimateLevelEnum) *CodeclimateConfig { + return &CodeclimateConfig{ + Failure: failure, + Skipped: skipped, + Uncovered: uncovered, + } +} + +func CreateCodeclimateConfig(failure *config_contract.CodeclimateLevelEnum, skipped *config_contract.CodeclimateLevelEnum, uncovered *config_contract.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := config_contract.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := config_contract.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := config_contract.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + return newCodeclimateConfig(*failure, *skipped, *uncovered) +} + +func (c *CodeclimateConfig) severity(failure *config_contract.CodeclimateLevelEnum, skipped *config_contract.CodeclimateLevelEnum, uncovered *config_contract.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := config_contract.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := config_contract.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := config_contract.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + c.Failure = *failure + c.Skipped = *skipped + c.Uncovered = *uncovered + return c +} + +func (c *CodeclimateConfig) ToArray() map[string]interface{} { + return map[string]interface{}{ + "severity": map[string]interface{}{ + "failure": string(c.Failure), + "skipped": string(c.Skipped), + "uncovered": string(c.Uncovered), + }, + } +} + +func (c *CodeclimateConfig) GetName() FormatterType { + return FormatterTypeCodeclimateConfig +} diff --git a/pkg/contract/config/formatter/formatter_config_interface.go b/pkg/config_contract/formatter/formatter_config_interface.go similarity index 100% rename from pkg/contract/config/formatter/formatter_config_interface.go rename to pkg/config_contract/formatter/formatter_config_interface.go diff --git a/pkg/contract/config/formatter/formatter_type.go b/pkg/config_contract/formatter/formatter_type.go similarity index 100% rename from pkg/contract/config/formatter/formatter_type.go rename to pkg/config_contract/formatter/formatter_type.go diff --git a/pkg/contract/config/formatter/graphviz_config.go b/pkg/config_contract/formatter/graphviz_config.go similarity index 84% rename from pkg/contract/config/formatter/graphviz_config.go rename to pkg/config_contract/formatter/graphviz_config.go index 18fc93d..7240de4 100644 --- a/pkg/contract/config/formatter/graphviz_config.go +++ b/pkg/config_contract/formatter/graphviz_config.go @@ -1,14 +1,14 @@ package formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type GraphvizConfig struct { name string PointToGroups bool - HiddenLayers []*config.Layer - Groups map[string][]*config.Layer + HiddenLayers []*config_contract.Layer + Groups map[string][]*config_contract.Layer } func (g *GraphvizConfig) HiddenLayersNames() []string { @@ -25,8 +25,8 @@ func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", PointToGroups: false, - HiddenLayers: make([]*config.Layer, 0), - Groups: make(map[string][]*config.Layer), + HiddenLayers: make([]*config_contract.Layer, 0), + Groups: make(map[string][]*config_contract.Layer), } } @@ -43,12 +43,12 @@ func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { return g } -func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*config.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*config_contract.Layer) *GraphvizConfig { g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*config.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*config_contract.Layer) *GraphvizConfig { g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } diff --git a/pkg/contract/config/formatter/mermaid_js_config.go b/pkg/config_contract/formatter/mermaid_js_config.go similarity index 84% rename from pkg/contract/config/formatter/mermaid_js_config.go rename to pkg/config_contract/formatter/mermaid_js_config.go index 64430cf..d5569c3 100644 --- a/pkg/contract/config/formatter/mermaid_js_config.go +++ b/pkg/config_contract/formatter/mermaid_js_config.go @@ -1,20 +1,20 @@ package formatter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type MermaidJsConfig struct { name string Direction string - Groups map[string][]*config.Layer + Groups map[string][]*config_contract.Layer } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", Direction: "TD", - Groups: make(map[string][]*config.Layer), + Groups: make(map[string][]*config_contract.Layer), } } @@ -27,7 +27,7 @@ func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { return m } -func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*config.Layer) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*config_contract.Layer) *MermaidJsConfig { for _, config := range layerConfigs { m.Groups[name] = append(m.Groups[name], config) } diff --git a/pkg/contract/config/layer.go b/pkg/config_contract/layer.go similarity index 97% rename from pkg/contract/config/layer.go rename to pkg/config_contract/layer.go index d5b2380..9f6ce0b 100644 --- a/pkg/contract/config/layer.go +++ b/pkg/config_contract/layer.go @@ -1,4 +1,4 @@ -package config +package config_contract type Layer struct { Collectors []*CollectorConfig diff --git a/pkg/contract/config/ruleset.go b/pkg/config_contract/ruleset.go similarity index 97% rename from pkg/contract/config/ruleset.go rename to pkg/config_contract/ruleset.go index 851fe94..9974819 100644 --- a/pkg/contract/config/ruleset.go +++ b/pkg/config_contract/ruleset.go @@ -1,4 +1,4 @@ -package config +package config_contract type Ruleset struct { LayerConfig *Layer diff --git a/pkg/supportive/console/application/application.go b/pkg/console_supportive/application/application.go similarity index 82% rename from pkg/supportive/console/application/application.go rename to pkg/console_supportive/application/application.go index fc7e12a..6290d53 100644 --- a/pkg/supportive/console/application/application.go +++ b/pkg/console_supportive/application/application.go @@ -2,8 +2,8 @@ package application import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive" "github.com/gookit/color" "os" "slices" @@ -35,7 +35,7 @@ const DirectorySeparator = "/" func (a *Application) doRun() (int, error) { currentWorkingDirectory, err := os.Getwd() if err != nil { - return 0, console.NewCannotGetCurrentWorkingDirectoryExceptionCannotGetCWD() + return 0, console_supportive.NewCannotGetCurrentWorkingDirectoryExceptionCannotGetCWD() } // try { @@ -60,26 +60,26 @@ func (a *Application) doRun() (int, error) { &noCacheArgument, "no-cache", false, - "Disable caching mechanisms (wins over --cache-file)", + "Disable caching mechanisms (wins over --cache-file_supportive)", ) var clearCache bool flag.BoolVar( &clearCache, "clear-cache", false, - "Clears cache file before run", + "Clears cache file_supportive before run", ) var cacheFile string flag.StringVar( &cacheFile, - "cache-file", + "cache-file_supportive", "", - "Location where cache file will be stored", + "Location where cache file_supportive will be stored", ) var configFile string flag.StringVar( &configFile, - "config-file", + "config_contract-file_supportive", currentWorkingDirectory+DirectorySeparator+"deptrac.yaml", "Location of Depfile containing the configuration", ) @@ -97,7 +97,7 @@ func (a *Application) doRun() (int, error) { cache := cacheFile - factory := dependency_injection.NewServiceContainerBuilder(currentWorkingDirectory) + factory := dependency_injection_supportive.NewServiceContainerBuilder(currentWorkingDirectory) if !slices.Contains([]string{"init", "list", "help", "completion"}, commandArgument) { factory, err = factory.WithConfig(config) diff --git a/pkg/supportive/console/application/application_test.go b/pkg/console_supportive/application/application_test.go similarity index 100% rename from pkg/supportive/console/application/application_test.go rename to pkg/console_supportive/application/application_test.go diff --git a/pkg/supportive/console/application/application_version/application_version.go b/pkg/console_supportive/application/application_version/application_version.go similarity index 100% rename from pkg/supportive/console/application/application_version/application_version.go rename to pkg/console_supportive/application/application_version/application_version.go diff --git a/pkg/supportive/console/cannot_get_current_working_directory_exception.go b/pkg/console_supportive/cannot_get_current_working_directory_exception.go similarity index 95% rename from pkg/supportive/console/cannot_get_current_working_directory_exception.go rename to pkg/console_supportive/cannot_get_current_working_directory_exception.go index 4337ac9..ae0c6a1 100644 --- a/pkg/supportive/console/cannot_get_current_working_directory_exception.go +++ b/pkg/console_supportive/cannot_get_current_working_directory_exception.go @@ -1,4 +1,4 @@ -package console +package console_supportive type CannotGetCurrentWorkingDirectoryException struct { Message string diff --git a/pkg/supportive/console/command/DebugDependenciesCommand.php b/pkg/console_supportive/command/DebugDependenciesCommand.php similarity index 100% rename from pkg/supportive/console/command/DebugDependenciesCommand.php rename to pkg/console_supportive/command/DebugDependenciesCommand.php diff --git a/pkg/supportive/console/command/DebugDependenciesRunner.php b/pkg/console_supportive/command/DebugDependenciesRunner.php similarity index 100% rename from pkg/supportive/console/command/DebugDependenciesRunner.php rename to pkg/console_supportive/command/DebugDependenciesRunner.php diff --git a/pkg/supportive/console/command/DebugLayerCommand.php b/pkg/console_supportive/command/DebugLayerCommand.php similarity index 100% rename from pkg/supportive/console/command/DebugLayerCommand.php rename to pkg/console_supportive/command/DebugLayerCommand.php diff --git a/pkg/supportive/console/command/DebugLayerRunner.php b/pkg/console_supportive/command/DebugLayerRunner.php similarity index 100% rename from pkg/supportive/console/command/DebugLayerRunner.php rename to pkg/console_supportive/command/DebugLayerRunner.php diff --git a/pkg/supportive/console/command/DebugTokenCommand.php b/pkg/console_supportive/command/DebugTokenCommand.php similarity index 100% rename from pkg/supportive/console/command/DebugTokenCommand.php rename to pkg/console_supportive/command/DebugTokenCommand.php diff --git a/pkg/supportive/console/command/DebugTokenRunner.php b/pkg/console_supportive/command/DebugTokenRunner.php similarity index 100% rename from pkg/supportive/console/command/DebugTokenRunner.php rename to pkg/console_supportive/command/DebugTokenRunner.php diff --git a/pkg/supportive/console/command/DebugUnassignedCommand.php b/pkg/console_supportive/command/DebugUnassignedCommand.php similarity index 100% rename from pkg/supportive/console/command/DebugUnassignedCommand.php rename to pkg/console_supportive/command/DebugUnassignedCommand.php diff --git a/pkg/supportive/console/command/DebugUnassignedRunner.php b/pkg/console_supportive/command/DebugUnassignedRunner.php similarity index 100% rename from pkg/supportive/console/command/DebugUnassignedRunner.php rename to pkg/console_supportive/command/DebugUnassignedRunner.php diff --git a/pkg/supportive/console/command/DebugUnusedCommand.php b/pkg/console_supportive/command/DebugUnusedCommand.php similarity index 100% rename from pkg/supportive/console/command/DebugUnusedCommand.php rename to pkg/console_supportive/command/DebugUnusedCommand.php diff --git a/pkg/supportive/console/command/DebugUnusedRunner.php b/pkg/console_supportive/command/DebugUnusedRunner.php similarity index 100% rename from pkg/supportive/console/command/DebugUnusedRunner.php rename to pkg/console_supportive/command/DebugUnusedRunner.php diff --git a/pkg/supportive/console/command/InitCommand.php b/pkg/console_supportive/command/InitCommand.php similarity index 100% rename from pkg/supportive/console/command/InitCommand.php rename to pkg/console_supportive/command/InitCommand.php diff --git a/pkg/supportive/console/command/analyse_command.go b/pkg/console_supportive/command/analyse_command.go similarity index 62% rename from pkg/supportive/console/command/analyse_command.go rename to pkg/console_supportive/command/analyse_command.go index 4a6d2be..a017122 100644 --- a/pkg/supportive/console/command/analyse_command.go +++ b/pkg/console_supportive/command/analyse_command.go @@ -1,10 +1,10 @@ package command import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" + subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" + symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" ) // AnalyseCommand - Analyses your project using the provided depfile @@ -14,12 +14,12 @@ type AnalyseCommand struct { formatterProvider *output_formatter2.FormatterProvider verboseBoolFlag bool debugBoolFlag bool - consoleSubscriber *subscriber.ConsoleSubscriber - progressSubscriber *subscriber.ProgressSubscriber + consoleSubscriber *subscriber2.ConsoleSubscriber + progressSubscriber *subscriber2.ProgressSubscriber analyseOptions *AnalyseOptions } -func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber, analyseOptions *AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber2.ConsoleSubscriber, progressSubscriber *subscriber2.ProgressSubscriber, analyseOptions *AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, @@ -33,7 +33,7 @@ func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interf } func (c *AnalyseCommand) Run() error { - symfonyOutput := symfony.NewSymfonyOutput(symfony.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) + symfonyOutput := symfony2.NewSymfonyOutput(symfony2.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) // Moved to services //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) diff --git a/pkg/supportive/console/command/analyse_options.go b/pkg/console_supportive/command/analyse_options.go similarity index 100% rename from pkg/supportive/console/command/analyse_options.go rename to pkg/console_supportive/command/analyse_options.go diff --git a/pkg/supportive/console/command/analyse_runner.go b/pkg/console_supportive/command/analyse_runner.go similarity index 52% rename from pkg/supportive/console/command/analyse_runner.go rename to pkg/console_supportive/command/analyse_runner.go index 942dc13..d96cbb4 100644 --- a/pkg/supportive/console/command/analyse_runner.go +++ b/pkg/console_supportive/command/analyse_runner.go @@ -3,29 +3,29 @@ package command import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/analyser_core" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/hashicorp/go-multierror" "strings" ) // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { - analyzer *analyser.DependencyLayersAnalyser + analyzer *analyser_core.DependencyLayersAnalyser formatterProvider *output_formatter2.FormatterProvider } -func NewAnalyseRunner(analyzer *analyser.DependencyLayersAnalyser, formatterProvider *output_formatter2.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *analyser_core.DependencyLayersAnalyser, formatterProvider *output_formatter2.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, } } -func (r *AnalyseRunner) Run(options *AnalyseOptions, output output_formatter.OutputInterface) error { - outputFormatterType, err := output_formatter.NewOutputFormatterTypeFromString(options.Formatter) +func (r *AnalyseRunner) Run(options *AnalyseOptions, output output_formatter_contract2.OutputInterface) error { + outputFormatterType, err := output_formatter_contract2.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err } @@ -34,7 +34,7 @@ func (r *AnalyseRunner) Run(options *AnalyseOptions, output output_formatter.Out r.printFormatterNotFoundException(output, options.Formatter) return NewCommandRunExceptionInvalidFormatter() } - formatterInput := output_formatter.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) + formatterInput := output_formatter_contract2.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) r.printCollectViolations(output) analysisResult, errAnalyse := r.analyzer.Analyse() @@ -61,22 +61,22 @@ func (r *AnalyseRunner) Run(options *AnalyseOptions, output output_formatter.Out return nil } -func (r *AnalyseRunner) printCollectViolations(output output_formatter.OutputInterface) { +func (r *AnalyseRunner) printCollectViolations(output output_formatter_contract2.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "collecting violations."}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "collecting violations."}) } } -func (r *AnalyseRunner) printFormattingStart(output output_formatter.OutputInterface) { +func (r *AnalyseRunner) printFormattingStart(output output_formatter_contract2.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "formatting dependencies."}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "formatting dependencies."}) } } -func (r *AnalyseRunner) printFormatterError(output output_formatter.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterError(output output_formatter_contract2.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) } var JsonMultiErrFormatFunc = func(es []error) string { @@ -94,19 +94,19 @@ var JsonMultiErrFormatFunc = func(es []error) string { return string(marshalled) } -func (r *AnalyseRunner) printAnalysisException(output output_formatter.OutputInterface, exception *multierror.Error) { +func (r *AnalyseRunner) printAnalysisException(output output_formatter_contract2.OutputInterface, exception *multierror.Error) { message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: message}) + output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: message}) } -func (r *AnalyseRunner) printFormatterNotFoundException(output output_formatter.OutputInterface, formatterName string) { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterNotFoundException(output output_formatter_contract2.OutputInterface, formatterName string) { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) knownFormatters := make([]string, 0) for _, formatterType := range r.formatterProvider.GetKnownFormatters() { knownFormatters = append(knownFormatters, string(formatterType)) } - output.GetStyle().Error(output_formatter.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) } diff --git a/pkg/supportive/console/command/changed_files_command.go b/pkg/console_supportive/command/changed_files_command.go similarity index 85% rename from pkg/supportive/console/command/changed_files_command.go rename to pkg/console_supportive/command/changed_files_command.go index ee1811d..e498561 100644 --- a/pkg/supportive/console/command/changed_files_command.go +++ b/pkg/console_supportive/command/changed_files_command.go @@ -1,7 +1,7 @@ package command import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" + symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -35,7 +35,7 @@ func NewChangedFilesCommand(runner *ChangedFilesRunner) *cobra.Command { } func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { - symfonyOutput := symfony.NewSymfonyOutput(symfony.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) + symfonyOutput := symfony2.NewSymfonyOutput(symfony2.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) files, err := cobraCmd.Flags().GetStringArray(argFiles) if err != nil { diff --git a/pkg/supportive/console/command/changed_files_runner.go b/pkg/console_supportive/command/changed_files_runner.go similarity index 63% rename from pkg/supportive/console/command/changed_files_runner.go rename to pkg/console_supportive/command/changed_files_runner.go index da29ab9..9033f4e 100644 --- a/pkg/supportive/console/command/changed_files_runner.go +++ b/pkg/console_supportive/command/changed_files_runner.go @@ -1,31 +1,31 @@ package command import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser" + analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "golang.org/x/exp/maps" "strings" ) // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { - layerForTokenAnalyser *analyser.LayerForTokenAnalyser - dependencyLayersAnalyser *analyser.DependencyLayersAnalyser + layerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser + dependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *analyser.LayerForTokenAnalyser, dependencyLayersAnalyser *analyser.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser, dependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, } } -func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output output_formatter.OutputInterface) error { +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output output_formatter_contract2.OutputInterface) error { layers := make(map[string]string) for _, file := range files { - matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, analyser.TokenTypeFile) + matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, analyser_core2.TokenTypeFile) if err != nil { return NewCommandRunExceptionAnalyserException(err) } @@ -35,7 +35,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output o } } } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) if withDependencies { analyseResult, err := r.dependencyLayersAnalyser.Analyse() if err != nil { @@ -57,18 +57,18 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output o layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] } } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) } return nil } -func (r *ChangedFilesRunner) calculateLayerDependencies(rules []result.RuleInterface) map[string]map[string]string { +func (r *ChangedFilesRunner) calculateLayerDependencies(rules []result_contract2.RuleInterface) map[string]map[string]string { layersDependOnLayers := make(map[string]map[string]string) for _, rule := range rules { - if _, ok := rule.(result.CoveredRuleInterface); !ok { + if _, ok := rule.(result_contract2.CoveredRuleInterface); !ok { continue } - rule := rule.(result.CoveredRuleInterface) + rule := rule.(result_contract2.CoveredRuleInterface) layerA := rule.GetDependerLayer() layerB := rule.GetDependentLayer() if _, ok := layersDependOnLayers[layerB]; !ok { diff --git a/pkg/supportive/console/command/command_run_exception.go b/pkg/console_supportive/command/command_run_exception.go similarity index 100% rename from pkg/supportive/console/command/command_run_exception.go rename to pkg/console_supportive/command/command_run_exception.go diff --git a/pkg/supportive/console/env.go b/pkg/console_supportive/env.go similarity index 83% rename from pkg/supportive/console/env.go rename to pkg/console_supportive/env.go index 5c14afe..bf8dd7a 100644 --- a/pkg/supportive/console/env.go +++ b/pkg/console_supportive/env.go @@ -1,4 +1,4 @@ -package console +package console_supportive import "os" diff --git a/pkg/console_supportive/subscriber/console_subscriber.go b/pkg/console_supportive/subscriber/console_subscriber.go new file mode 100644 index 0000000..23d87fb --- /dev/null +++ b/pkg/console_supportive/subscriber/console_subscriber.go @@ -0,0 +1,90 @@ +package subscriber + +import ( + "fmt" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + dependency_contract2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" +) + +type ConsoleSubscriber struct { + output output_formatter_contract2.OutputInterface + stopwatch *time_stopwatch_supportive.Stopwatch +} + +func NewConsoleSubscriber(output output_formatter_contract2.OutputInterface, stopwatch *time_stopwatch_supportive.Stopwatch) *ConsoleSubscriber { + return &ConsoleSubscriber{ + output: output, + stopwatch: stopwatch, + } +} + +func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + switch event := rawEvent.(type) { + case *ast_contract2.PreCreateAstMapEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("ast_contract") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + } + case *ast_contract2.PostCreateAstMapEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") + } + case *ast_contract2.AstFileAnalysedEvent: + if s.output.IsVerbose() { + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + } + case *ast_contract2.AstFileSyntaxErrorEvent: + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + case *dependency_contract2.PreEmitEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("deps") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + } + case *dependency_contract2.PostEmitEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") + } + case *dependency_contract2.PreFlattenEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("flatten") + if err != nil { + return err + } + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "start flatten dependencies"}) + } + case *dependency_contract2.PostFlattenEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") + } + } + + return nil +} + +func (s *ConsoleSubscriber) stopwatchStart(event string) error { + err := s.stopwatch.Start(event) + if err != nil { + return err + } + + return nil +} + +func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { + period, err := s.stopwatch.Stop(event) + + if err != nil { + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: messageWithoutTime}) + return + } + + s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) +} diff --git a/pkg/console_supportive/subscriber/progress_subscriber.go b/pkg/console_supportive/subscriber/progress_subscriber.go new file mode 100644 index 0000000..f0257a9 --- /dev/null +++ b/pkg/console_supportive/subscriber/progress_subscriber.go @@ -0,0 +1,35 @@ +package subscriber + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" +) + +type ProgressSubscriber struct { + output output_formatter_contract2.OutputInterface +} + +func NewProgressSubscriber(output output_formatter_contract2.OutputInterface) *ProgressSubscriber { + return &ProgressSubscriber{ + output: output, + } +} + +func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + switch event := rawEvent.(type) { + case *ast_contract2.PreCreateAstMapEvent: + s.output.GetStyle().ProgressStart(event.ExpectedFileCount) + case *ast_contract2.PostCreateAstMapEvent: + err := s.output.GetStyle().ProgressFinish() + if err != nil { + return err + } + case *ast_contract2.AstFileAnalysedEvent: + err := s.output.GetStyle().ProgressAdvance(output_formatter_contract2.ProgressAdvanceDefault) + if err != nil { + return err + } + } + + return nil +} diff --git a/pkg/supportive/console/symfony/style.go b/pkg/console_supportive/symfony/style.go similarity index 85% rename from pkg/supportive/console/symfony/style.go rename to pkg/console_supportive/symfony/style.go index 2681c2f..ea4963b 100644 --- a/pkg/supportive/console/symfony/style.go +++ b/pkg/console_supportive/symfony/style.go @@ -2,7 +2,7 @@ package symfony import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" @@ -33,27 +33,27 @@ func (s *Style) Section(message string) { color.Printf("%s\n", strings.Repeat("-", len(message))) } -func (s *Style) Success(message output_formatter.StringOrArrayOfStrings) { +func (s *Style) Success(message output_formatter_contract.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Error(message output_formatter.StringOrArrayOfStrings) { +func (s *Style) Error(message output_formatter_contract.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Warning(message output_formatter.StringOrArrayOfStrings) { +func (s *Style) Warning(message output_formatter_contract.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Note(message output_formatter.StringOrArrayOfStrings) { +func (s *Style) Note(message output_formatter_contract.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Caution(message output_formatter.StringOrArrayOfStrings) { +func (s *Style) Caution(message output_formatter_contract.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) DefinitionList(list []output_formatter.StringOrArrayOfStringsOrTableSeparator) { +func (s *Style) DefinitionList(list []output_formatter_contract.StringOrArrayOfStringsOrTableSeparator) { headers := make([]string, 0) row := make([]string, 0) for _, value := range list { diff --git a/pkg/supportive/console/symfony/symfony_output.go b/pkg/console_supportive/symfony/symfony_output.go similarity index 62% rename from pkg/supportive/console/symfony/symfony_output.go rename to pkg/console_supportive/symfony/symfony_output.go index 49e73f5..877ccfa 100644 --- a/pkg/supportive/console/symfony/symfony_output.go +++ b/pkg/console_supportive/symfony/symfony_output.go @@ -1,15 +1,15 @@ package symfony import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" "github.com/gookit/color" ) type SymfonyOutput struct { - style output_formatter.OutputStyleInterface + style output_formatter_contract.OutputStyleInterface } -func NewSymfonyOutput(style output_formatter.OutputStyleInterface) *SymfonyOutput { +func NewSymfonyOutput(style output_formatter_contract.OutputStyleInterface) *SymfonyOutput { return &SymfonyOutput{ style: style, } @@ -19,7 +19,7 @@ func (o *SymfonyOutput) WriteFormatted(message string) { color.Print(message) } -func (o *SymfonyOutput) WriteLineFormatted(message output_formatter.StringOrArrayOfStrings) { +func (o *SymfonyOutput) WriteLineFormatted(message output_formatter_contract.StringOrArrayOfStrings) { color.Println(message.ToString()) } @@ -27,7 +27,7 @@ func (o *SymfonyOutput) WriteRaw(message string) { color.Println(message) } -func (o *SymfonyOutput) GetStyle() output_formatter.OutputStyleInterface { +func (o *SymfonyOutput) GetStyle() output_formatter_contract.OutputStyleInterface { return o.style } diff --git a/pkg/contract/analyser/analysis_result/analysis_result.go b/pkg/contract/analyser/analysis_result/analysis_result.go deleted file mode 100644 index bed43da..0000000 --- a/pkg/contract/analyser/analysis_result/analysis_result.go +++ /dev/null @@ -1,61 +0,0 @@ -package analysis_result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -// AnalysisResult - Describes the result of a source code analysis. -type AnalysisResult struct { - rules map[result.RuleTypeEnum]map[string]result.RuleInterface - - warnings []*result.Warning - - errors []*result.Error -} - -func NewAnalysisResult() *AnalysisResult { - return &AnalysisResult{ - rules: make(map[result.RuleTypeEnum]map[string]result.RuleInterface), - warnings: make([]*result.Warning, 0), - errors: make([]*result.Error, 0), - } -} - -func (r *AnalysisResult) AddRule(rule result.RuleInterface) { - ruleType := result.NewRuleTypeEnumByRule(rule) - id := util.SplObjectID(rule) - - if _, ok := r.rules[ruleType]; !ok { - r.rules[ruleType] = make(map[string]result.RuleInterface) - } - - r.rules[ruleType][id] = rule -} - -func (r *AnalysisResult) RemoveRule(rule result.RuleInterface) { - ruleType := result.NewRuleTypeEnumByRule(rule) - id := util.SplObjectID(rule) - - delete(r.rules[ruleType], id) -} - -func (r *AnalysisResult) Rules() map[result.RuleTypeEnum]map[string]result.RuleInterface { - return r.rules -} - -func (r *AnalysisResult) AddWarning(warning *result.Warning) { - r.warnings = append(r.warnings, warning) -} - -func (r *AnalysisResult) Warnings() []*result.Warning { - return r.warnings -} - -func (r *AnalysisResult) AddError(error *result.Error) { - r.errors = append(r.errors, error) -} - -func (r *AnalysisResult) Errors() []*result.Error { - return r.errors -} diff --git a/pkg/contract/config/collector/bool_config.go b/pkg/contract/config/collector/bool_config.go deleted file mode 100644 index 6f70b3a..0000000 --- a/pkg/contract/config/collector/bool_config.go +++ /dev/null @@ -1,31 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" -) - -type BoolConfig struct { - *config.CollectorConfig - collectorType config.CollectorType - mustNot []config.CollectorConfig - must []config.CollectorConfig -} - -func NewBoolConfig() *BoolConfig { - return &BoolConfig{ - CollectorConfig: &config.CollectorConfig{}, - collectorType: config.TypeBool, - mustNot: make([]config.CollectorConfig, 0), - must: make([]config.CollectorConfig, 0), - } -} - -func (c *BoolConfig) ToArray() map[string]interface{} { - parent := c.CollectorConfig.ToArray() - - parent["type"] = string(c.collectorType) - parent["mustNot"] = c.mustNot - parent["must"] = c.must - - return parent -} diff --git a/pkg/contract/config/formatter/codeclimate_config.go b/pkg/contract/config/formatter/codeclimate_config.go deleted file mode 100644 index d61ca16..0000000 --- a/pkg/contract/config/formatter/codeclimate_config.go +++ /dev/null @@ -1,68 +0,0 @@ -package formatter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" -) - -type CodeclimateConfig struct { - Failure config.CodeclimateLevelEnum - Skipped config.CodeclimateLevelEnum - Uncovered config.CodeclimateLevelEnum -} - -func newCodeclimateConfig(failure config.CodeclimateLevelEnum, skipped config.CodeclimateLevelEnum, uncovered config.CodeclimateLevelEnum) *CodeclimateConfig { - return &CodeclimateConfig{ - Failure: failure, - Skipped: skipped, - Uncovered: uncovered, - } -} - -func CreateCodeclimateConfig(failure *config.CodeclimateLevelEnum, skipped *config.CodeclimateLevelEnum, uncovered *config.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := config.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := config.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := config.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - return newCodeclimateConfig(*failure, *skipped, *uncovered) -} - -func (c *CodeclimateConfig) severity(failure *config.CodeclimateLevelEnum, skipped *config.CodeclimateLevelEnum, uncovered *config.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := config.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := config.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := config.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - c.Failure = *failure - c.Skipped = *skipped - c.Uncovered = *uncovered - return c -} - -func (c *CodeclimateConfig) ToArray() map[string]interface{} { - return map[string]interface{}{ - "severity": map[string]interface{}{ - "failure": string(c.Failure), - "skipped": string(c.Skipped), - "uncovered": string(c.Uncovered), - }, - } -} - -func (c *CodeclimateConfig) GetName() FormatterType { - return FormatterTypeCodeclimateConfig -} diff --git a/pkg/contract/dependency/dependency_interface.go b/pkg/contract/dependency/dependency_interface.go deleted file mode 100644 index 77ea907..0000000 --- a/pkg/contract/dependency/dependency_interface.go +++ /dev/null @@ -1,16 +0,0 @@ -package dependency - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" -) - -// DependencyInterface - Represents a dependency between 2 tokens (depender and dependent). -type DependencyInterface interface { - GetDepender() ast.TokenInterface - - GetDependent() ast.TokenInterface - - GetContext() *ast.DependencyContext - - Serialize() []map[string]interface{} -} diff --git a/pkg/contract/layer/collector_interface.go b/pkg/contract/layer/collector_interface.go deleted file mode 100644 index 1ac8739..0000000 --- a/pkg/contract/layer/collector_interface.go +++ /dev/null @@ -1,10 +0,0 @@ -package layer - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" -) - -// CollectorInterface - A collector is responsible to tell whether an AST node (e.g. a specific class) is part of a layer. -type CollectorInterface interface { - Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) -} diff --git a/pkg/contract/result/allowed.go b/pkg/contract/result/allowed.go deleted file mode 100644 index fc7d38c..0000000 --- a/pkg/contract/result/allowed.go +++ /dev/null @@ -1,32 +0,0 @@ -package result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" -) - -// Allowed - Represents a dependency that is allowed to exist given the defined rules -type Allowed struct { - Dependency dependency.DependencyInterface - DependerLayer string - DependentLayer string -} - -func NewAllowed(dependency dependency.DependencyInterface, dependerLayer string, dependentLayer string) *Allowed { - return &Allowed{ - Dependency: dependency, - DependerLayer: dependerLayer, - DependentLayer: dependentLayer, - } -} - -func (a *Allowed) GetDependency() dependency.DependencyInterface { - return a.Dependency -} - -func (a *Allowed) GetDependerLayer() string { - return a.DependerLayer -} - -func (a *Allowed) GetDependentLayer() string { - return a.DependentLayer -} diff --git a/pkg/contract/result/covered_rule_interface.go b/pkg/contract/result/covered_rule_interface.go deleted file mode 100644 index e30cf8e..0000000 --- a/pkg/contract/result/covered_rule_interface.go +++ /dev/null @@ -1,7 +0,0 @@ -package result - -// CoveredRuleInterface - Represents a dependency that is covered by the defined rules. This does not mean that it is allowed to exist, just that it is covered. In that sense it exists as a complement to `Uncovered` struct -type CoveredRuleInterface interface { - GetDependerLayer() string - GetDependentLayer() string -} diff --git a/pkg/contract/result/output_result/output_result.go b/pkg/contract/result/output_result/output_result.go deleted file mode 100644 index 5746c80..0000000 --- a/pkg/contract/result/output_result/output_result.go +++ /dev/null @@ -1,111 +0,0 @@ -package output_result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" -) - -// OutputResult - Represents a result ready for output formatting -type OutputResult struct { - rules map[result.RuleTypeEnum]map[string]result.RuleInterface - Errors []*result.Error - Warnings []*result.Warning -} - -func newOutputResult(rules map[result.RuleTypeEnum]map[string]result.RuleInterface, errors []*result.Error, warnings []*result.Warning) *OutputResult { - return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} -} - -func NewOutputResultFromAnalysisResult(analysisResult *analysis_result.AnalysisResult) *OutputResult { - return newOutputResult( - analysisResult.Rules(), - analysisResult.Errors(), - analysisResult.Warnings(), - ) -} - -func (r *OutputResult) AllOf(ruleType result.RuleTypeEnum) []result.RuleInterface { - rulesByIds, ok := r.rules[ruleType] - if ok { - rules := make([]result.RuleInterface, 0, len(rulesByIds)) - - for _, rule := range rulesByIds { - rules = append(rules, rule) - } - - return rules - } - return nil -} -func (r *OutputResult) AllRules() []result.RuleInterface { - var rules []result.RuleInterface - for _, ruleArray := range r.rules { - for _, ruleItem := range ruleArray { - rules = append(rules, ruleItem) - } - } - return rules -} -func (r *OutputResult) Violations() []*result.Violation { - untyped := r.AllOf(result.TypeViolation) - - items := make([]*result.Violation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result.Violation)) - } - - return items -} - -func (r *OutputResult) HasViolations() bool { - return len(r.Violations()) > 0 -} - -func (r *OutputResult) SkippedViolations() []*result.SkippedViolation { - untyped := r.AllOf(result.TypeSkippedViolation) - - items := make([]*result.SkippedViolation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result.SkippedViolation)) - } - - return items -} - -func (r *OutputResult) Uncovered() []*result.Uncovered { - untyped := r.AllOf(result.TypeUncovered) - - items := make([]*result.Uncovered, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result.Uncovered)) - } - - return items -} - -func (r *OutputResult) HasUncovered() bool { - return len(r.Uncovered()) > 0 -} - -func (r *OutputResult) HasAllowed() bool { - return len(r.Allowed()) > 0 -} - -func (r *OutputResult) Allowed() []*result.Allowed { - untyped := r.AllOf(result.TypeAllowed) - - items := make([]*result.Allowed, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result.Allowed)) - } - - return items -} - -func (r *OutputResult) HasErrors() bool { - return len(r.Errors) > 0 -} - -func (r *OutputResult) HasWarnings() bool { - return len(r.Warnings) > 0 -} diff --git a/pkg/contract/result/rule_interface.go b/pkg/contract/result/rule_interface.go deleted file mode 100644 index 336e74e..0000000 --- a/pkg/contract/result/rule_interface.go +++ /dev/null @@ -1,10 +0,0 @@ -package result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" -) - -// RuleInterface - Represents a dependency -type RuleInterface interface { - GetDependency() dependency.DependencyInterface -} diff --git a/pkg/contract/result/uncovered.go b/pkg/contract/result/uncovered.go deleted file mode 100644 index 3c95a9d..0000000 --- a/pkg/contract/result/uncovered.go +++ /dev/null @@ -1,22 +0,0 @@ -package result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" -) - -// Uncovered - Represents a dependency that is NOT covered by the current configuration. -type Uncovered struct { - Dependency dependency.DependencyInterface - Layer string -} - -func NewUncovered(dependency dependency.DependencyInterface, layer string) *Uncovered { - return &Uncovered{ - Dependency: dependency, - Layer: layer, - } -} - -func (u *Uncovered) GetDependency() dependency.DependencyInterface { - return u.Dependency -} diff --git a/pkg/core/analyser/analyser_exception.go b/pkg/core/analyser/analyser_exception.go deleted file mode 100644 index 4e02b92..0000000 --- a/pkg/core/analyser/analyser_exception.go +++ /dev/null @@ -1,50 +0,0 @@ -package analyser - -import ( - "fmt" - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" -) - -type AnalyserException struct { - Message string - Previous error -} - -func (a *AnalyserException) Error() string { - if a.Previous != nil { - return fmt.Sprintf("%s\n%s", a.Message, a.Previous.Error()) - } else { - return a.Message - } -} - -func NewInvalidEmitterConfiguration(e *dependency.InvalidEmitterConfigurationException) *AnalyserException { - return &AnalyserException{Message: "Invalid emitter configuration.", Previous: e} -} - -func NewUnrecognizedToken(e *dependency.UnrecognizedTokenException) *AnalyserException { - return &AnalyserException{Message: "Unrecognized token.", Previous: e} -} - -func NewInvalidLayerDefinition(e *layer.InvalidLayerDefinitionException) *AnalyserException { - return &AnalyserException{Message: "Invalid layer definition.", Previous: e} -} - -func NewInvalidCollectorDefinition(e *layer.InvalidCollectorDefinitionException) *AnalyserException { - return &AnalyserException{Message: "Invalid collector definition.", Previous: e} -} - -func NewFailedAstParsing(e *ast.AstException) *AnalyserException { - return &AnalyserException{Message: "Failed Ast parsing.", Previous: e} -} - -func NewCouldNotParseFile(e *astContract.CouldNotParseFileException) *AnalyserException { - return &AnalyserException{Message: "Could not parse file.", Previous: e} -} - -func NewCircularReference(e *layer.CircularReferenceException) *AnalyserException { - return &AnalyserException{Message: "Circular layer dependency.", Previous: e} -} diff --git a/pkg/core/ast/ast_map/dependency_token.go b/pkg/core/ast/ast_map/dependency_token.go deleted file mode 100644 index 90c27e6..0000000 --- a/pkg/core/ast/ast_map/dependency_token.go +++ /dev/null @@ -1,14 +0,0 @@ -package ast_map - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" -) - -type DependencyToken struct { - Token ast.TokenInterface - Context *ast.DependencyContext -} - -func NewDependencyToken(token ast.TokenInterface, context *ast.DependencyContext) *DependencyToken { - return &DependencyToken{Token: token, Context: context} -} diff --git a/pkg/core/dependency/dependency.go b/pkg/core/dependency/dependency.go deleted file mode 100644 index e903088..0000000 --- a/pkg/core/dependency/dependency.go +++ /dev/null @@ -1,40 +0,0 @@ -package dependency - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" -) - -type Dependency struct { - depender ast.TokenInterface - dependent ast.TokenInterface - context *ast.DependencyContext -} - -func NewDependency(depender ast.TokenInterface, dependent ast.TokenInterface, context *ast.DependencyContext) *Dependency { - if dependent.ToString() == "" { - panic("1") - } - - return &Dependency{depender: depender, dependent: dependent, context: context} -} - -func (d *Dependency) Serialize() []map[string]interface{} { - return []map[string]interface{}{ - { - "name": d.dependent.ToString(), - "line": d.context.FileOccurrence.Line, - }, - } -} - -func (d *Dependency) GetDepender() ast.TokenInterface { - return d.depender -} - -func (d *Dependency) GetDependent() ast.TokenInterface { - return d.dependent -} - -func (d *Dependency) GetContext() *ast.DependencyContext { - return d.context -} diff --git a/pkg/core/dependency/dependency_resolver/dependency_resolver.go b/pkg/core/dependency/dependency_resolver/dependency_resolver.go deleted file mode 100644 index 7c693fa..0000000 --- a/pkg/core/dependency/dependency_resolver/dependency_resolver.go +++ /dev/null @@ -1,69 +0,0 @@ -package dependency_resolver - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - contractDependency "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/emitter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "reflect" -) - -type DependencyResolver struct { - config *config.AnalyserConfig - inheritanceFlattener *dependency.InheritanceFlattener - emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface - eventDispatcher event_dispatcher_interface.EventDispatcherInterface -} - -func NewDependencyResolver(typesConfig *config.AnalyserConfig, emitterLocator map[config.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency.InheritanceFlattener, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyResolver { - return &DependencyResolver{ - config: typesConfig, - emitterLocator: emitterLocator, - inheritanceFlattener: inheritanceFlattener, - eventDispatcher: eventDispatcher, - } -} - -func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependency.DependencyList, error) { - result := dependency.NewDependencyList() - - for _, typeConfig := range r.config.Types { - - dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] - if !ok { - return nil, dependency.NewInvalidEmitterConfigurationExceptionCouldNotLocate(typeConfig) - } - - if reflect.TypeOf(dependencyEmitterInterface).Kind() != reflect.Ptr { - return nil, dependency.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, dependencyEmitterInterface) - } - - err := r.eventDispatcher.DispatchEvent(contractDependency.NewPreEmitEvent(dependencyEmitterInterface.GetName())) - if err != nil { - return nil, err - } - - dependencyEmitterInterface.ApplyDependencies(*astMap, result) - - errDispatchPostEmit := r.eventDispatcher.DispatchEvent(contractDependency.NewPostEmitEvent()) - if errDispatchPostEmit != nil { - return nil, errDispatchPostEmit - } - } - - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(contractDependency.NewPreFlattenEvent()) - if errDispatchPreFlatten != nil { - return nil, errDispatchPreFlatten - } - - r.inheritanceFlattener.FlattenDependencies(*astMap, result) - - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(contractDependency.NewPostFlattenEvent()) - if errDispatchPostFlatten != nil { - return nil, errDispatchPostFlatten - } - - return result, nil -} diff --git a/pkg/core/dependency/emitter/class_dependency_emitter.go b/pkg/core/dependency/emitter/class_dependency_emitter.go deleted file mode 100644 index 27e2243..0000000 --- a/pkg/core/dependency/emitter/class_dependency_emitter.go +++ /dev/null @@ -1,39 +0,0 @@ -package emitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" -) - -type ClassDependencyEmitter struct{} - -func NewClassDependencyEmitter() *ClassDependencyEmitter { - return &ClassDependencyEmitter{} -} - -func (c *ClassDependencyEmitter) GetName() string { - return "ClassDependencyEmitter" -} - -func (c *ClassDependencyEmitter) ApplyDependencies(astMap AstMap2.AstMap, dependencyList *dependency.DependencyList) { - for _, classReference := range astMap.GetClassLikeReferences() { - classLikeName := classReference.GetToken().(*AstMap2.ClassLikeToken) - - for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType == ast.DependencyTypeSuperGlobalVariable { - continue - } - - if dependencyToken.Context.DependencyType == ast.DependencyTypeUnresolvedFunctionCall { - continue - } - - dependencyList.AddDependency(dependency.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) - } - - for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependency.NewDependency(classLikeName, inherit.ClassLikeName, ast.NewDependencyContext(inherit.FileOccurrence, ast.DependencyTypeInherit))) - } - } -} diff --git a/pkg/core/dependency/emitter/file_dependency_emitter.go b/pkg/core/dependency/emitter/file_dependency_emitter.go deleted file mode 100644 index 0e29d5f..0000000 --- a/pkg/core/dependency/emitter/file_dependency_emitter.go +++ /dev/null @@ -1,33 +0,0 @@ -package emitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" -) - -type FileDependencyEmitter struct{} - -func NewFileDependencyEmitter() *FileDependencyEmitter { - return &FileDependencyEmitter{} -} - -func (f FileDependencyEmitter) GetName() string { - return "FileDependencyEmitter" -} - -func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { - for _, fileReference := range astMap.GetFileReferences() { - for _, dependencyToken := range fileReference.Dependencies { - if dependencyToken.Context.DependencyType == ast.DependencyTypeUse { - continue - } - - if dependencyToken.Context.DependencyType == ast.DependencyTypeUnresolvedFunctionCall { - continue - } - - dependencyList.AddDependency(dependency.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) - } - } -} diff --git a/pkg/core/dependency/token_resolver.go b/pkg/core/dependency/token_resolver.go deleted file mode 100644 index 08caa3e..0000000 --- a/pkg/core/dependency/token_resolver.go +++ /dev/null @@ -1,27 +0,0 @@ -package dependency - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" -) - -type TokenResolver struct{} - -func NewTokenResolver() *TokenResolver { - return &TokenResolver{} -} - -func (r *TokenResolver) Resolve(token ast.TokenInterface, astMap *AstMap2.AstMap) ast.TokenReferenceInterface { - switch v := token.(type) { - case *AstMap2.ClassLikeToken: - return astMap.GetClassReferenceForToken(v) - case *AstMap2.FunctionToken: - return astMap.GetFunctionReferenceForToken(v) - case *AstMap2.SuperGlobalToken: - return AstMap2.NewVariableReference(v) - case *AstMap2.FileToken: - return astMap.GetFileReferenceForToken(v) - default: - panic("Unrecognized TokenInterface") - } -} diff --git a/pkg/core/layer/collector/collectable.go b/pkg/core/layer/collector/collectable.go deleted file mode 100644 index 174721c..0000000 --- a/pkg/core/layer/collector/collectable.go +++ /dev/null @@ -1,14 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" -) - -type Collectable struct { - Collector layer.CollectorInterface - Attributes map[string]interface{} -} - -func NewCollectable(collector layer.CollectorInterface, attributes map[string]interface{}) *Collectable { - return &Collectable{Collector: collector, Attributes: attributes} -} diff --git a/pkg/core/layer/collector/collector_provider.go b/pkg/core/layer/collector/collector_provider.go deleted file mode 100644 index 80bc59b..0000000 --- a/pkg/core/layer/collector/collector_provider.go +++ /dev/null @@ -1,33 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "golang.org/x/exp/maps" -) - -type CollectorProvider struct { - collectors map[config.CollectorType]layer.CollectorInterface -} - -func NewCollectorProvider() *CollectorProvider { - return &CollectorProvider{} -} - -func (p *CollectorProvider) Set(collectors map[config.CollectorType]layer.CollectorInterface) *CollectorProvider { - p.collectors = collectors - return p -} - -func (p *CollectorProvider) Get(id config.CollectorType) layer.CollectorInterface { - return p.collectors[id] -} - -func (p *CollectorProvider) Has(id config.CollectorType) bool { - _, ok := p.collectors[id] - return ok -} - -func (p *CollectorProvider) GetKnownCollectors() []config.CollectorType { - return maps.Keys(p.collectors) -} diff --git a/pkg/core/layer/collector/uses_collector.go b/pkg/core/layer/collector/uses_collector.go deleted file mode 100644 index 6091ebc..0000000 --- a/pkg/core/layer/collector/uses_collector.go +++ /dev/null @@ -1,52 +0,0 @@ -package collector - -import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type UsesCollector struct { - astMapExtractor *ast.AstMapExtractor - astMap *ast_map.AstMap -} - -func NewUsesCollector(astMapExtractor *ast.AstMapExtractor) (*UsesCollector, error) { - astMap, err := astMapExtractor.Extract() - if err != nil { - return nil, err - } - return &UsesCollector{ - astMapExtractor: astMapExtractor, - astMap: astMap, - }, nil -} - -func (u *UsesCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.ClassLikeReference); !ok { - return false, nil - } - - traitName, err := u.getTraitName(config) - if err != nil { - return false, err - } - - for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) { - if ast_map.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { - return true, nil - } - } - - return false, nil -} - -func (u *UsesCollector) getTraitName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") - } - - return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil -} diff --git a/pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go b/pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go deleted file mode 100644 index cbd1350..0000000 --- a/pkg/core/layer/layer_resolver_interface/layer_resolver_interface.go +++ /dev/null @@ -1,14 +0,0 @@ -package layer_resolver_interface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" -) - -type LayerResolverInterface interface { - // GetLayersForReference - Returns a layer name and whether the dependency is public(true) or private(false) - GetLayersForReference(reference ast.TokenReferenceInterface) (map[string]bool, error) - - IsReferenceInLayer(layer string, reference ast.TokenReferenceInterface) (bool, error) - - Has(layer string) (bool, error) -} diff --git a/pkg/dependency_contract/dependency_interface.go b/pkg/dependency_contract/dependency_interface.go new file mode 100644 index 0000000..26b0a58 --- /dev/null +++ b/pkg/dependency_contract/dependency_interface.go @@ -0,0 +1,16 @@ +package dependency_contract + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" +) + +// DependencyInterface - Represents a dependency_contract between 2 tokens (depender and dependent). +type DependencyInterface interface { + GetDepender() ast_contract2.TokenInterface + + GetDependent() ast_contract2.TokenInterface + + GetContext() *ast_contract2.DependencyContext + + Serialize() []map[string]interface{} +} diff --git a/pkg/contract/dependency/post_emit_event.go b/pkg/dependency_contract/post_emit_event.go similarity index 86% rename from pkg/contract/dependency/post_emit_event.go rename to pkg/dependency_contract/post_emit_event.go index 3c0b9ee..ea9a811 100644 --- a/pkg/contract/dependency/post_emit_event.go +++ b/pkg/dependency_contract/post_emit_event.go @@ -1,4 +1,4 @@ -package dependency +package dependency_contract // PostEmitEvent - Event triggered after all the dependencies have been resolved. type PostEmitEvent struct{} diff --git a/pkg/contract/dependency/post_flatten_event.go b/pkg/dependency_contract/post_flatten_event.go similarity index 90% rename from pkg/contract/dependency/post_flatten_event.go rename to pkg/dependency_contract/post_flatten_event.go index e51b194..7711127 100644 --- a/pkg/contract/dependency/post_flatten_event.go +++ b/pkg/dependency_contract/post_flatten_event.go @@ -1,4 +1,4 @@ -package dependency +package dependency_contract // PostFlattenEvent - Event triggered after all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PostFlattenEvent struct{} diff --git a/pkg/contract/dependency/pre_emit_event.go b/pkg/dependency_contract/pre_emit_event.go similarity index 89% rename from pkg/contract/dependency/pre_emit_event.go rename to pkg/dependency_contract/pre_emit_event.go index 4801a15..7bbb745 100644 --- a/pkg/contract/dependency/pre_emit_event.go +++ b/pkg/dependency_contract/pre_emit_event.go @@ -1,4 +1,4 @@ -package dependency +package dependency_contract // PreEmitEvent - Event triggered before all the dependencies have been resolved. type PreEmitEvent struct { diff --git a/pkg/contract/dependency/pre_flatten_event.go b/pkg/dependency_contract/pre_flatten_event.go similarity index 90% rename from pkg/contract/dependency/pre_flatten_event.go rename to pkg/dependency_contract/pre_flatten_event.go index 246cbcc..abaca26 100644 --- a/pkg/contract/dependency/pre_flatten_event.go +++ b/pkg/dependency_contract/pre_flatten_event.go @@ -1,4 +1,4 @@ -package dependency +package dependency_contract // PreFlattenEvent - Event triggered before all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PreFlattenEvent struct{} diff --git a/pkg/dependency_core/dependency.go b/pkg/dependency_core/dependency.go new file mode 100644 index 0000000..15ff916 --- /dev/null +++ b/pkg/dependency_core/dependency.go @@ -0,0 +1,40 @@ +package dependency_core + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" +) + +type Dependency struct { + depender ast_contract2.TokenInterface + dependent ast_contract2.TokenInterface + context *ast_contract2.DependencyContext +} + +func NewDependency(depender ast_contract2.TokenInterface, dependent ast_contract2.TokenInterface, context *ast_contract2.DependencyContext) *Dependency { + if dependent.ToString() == "" { + panic("1") + } + + return &Dependency{depender: depender, dependent: dependent, context: context} +} + +func (d *Dependency) Serialize() []map[string]interface{} { + return []map[string]interface{}{ + { + "name": d.dependent.ToString(), + "line": d.context.FileOccurrence.Line, + }, + } +} + +func (d *Dependency) GetDepender() ast_contract2.TokenInterface { + return d.depender +} + +func (d *Dependency) GetDependent() ast_contract2.TokenInterface { + return d.dependent +} + +func (d *Dependency) GetContext() *ast_contract2.DependencyContext { + return d.context +} diff --git a/pkg/core/dependency/dependency_list.go b/pkg/dependency_core/dependency_list.go similarity index 93% rename from pkg/core/dependency/dependency_list.go rename to pkg/dependency_core/dependency_list.go index 011f343..7e19145 100644 --- a/pkg/core/dependency/dependency_list.go +++ b/pkg/dependency_core/dependency_list.go @@ -1,7 +1,7 @@ -package dependency +package dependency_core import ( - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" ) type DependencyList struct { diff --git a/pkg/dependency_core/dependency_resolver/dependency_resolver.go b/pkg/dependency_core/dependency_resolver/dependency_resolver.go new file mode 100644 index 0000000..706b06a --- /dev/null +++ b/pkg/dependency_core/dependency_resolver/dependency_resolver.go @@ -0,0 +1,69 @@ +package dependency_resolver + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/emitter" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" + "reflect" +) + +type DependencyResolver struct { + config *config_contract2.AnalyserConfig + inheritanceFlattener *dependency_core2.InheritanceFlattener + emitterLocator map[config_contract2.EmitterType]emitter.DependencyEmitterInterface + eventDispatcher event_dispatcher_interface.EventDispatcherInterface +} + +func NewDependencyResolver(typesConfig *config_contract2.AnalyserConfig, emitterLocator map[config_contract2.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency_core2.InheritanceFlattener, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyResolver { + return &DependencyResolver{ + config: typesConfig, + emitterLocator: emitterLocator, + inheritanceFlattener: inheritanceFlattener, + eventDispatcher: eventDispatcher, + } +} + +func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependency_core2.DependencyList, error) { + result := dependency_core2.NewDependencyList() + + for _, typeConfig := range r.config.Types { + + dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] + if !ok { + return nil, dependency_core2.NewInvalidEmitterConfigurationExceptionCouldNotLocate(typeConfig) + } + + if reflect.TypeOf(dependencyEmitterInterface).Kind() != reflect.Ptr { + return nil, dependency_core2.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, dependencyEmitterInterface) + } + + err := r.eventDispatcher.DispatchEvent(dependency_contract.NewPreEmitEvent(dependencyEmitterInterface.GetName())) + if err != nil { + return nil, err + } + + dependencyEmitterInterface.ApplyDependencies(*astMap, result) + + errDispatchPostEmit := r.eventDispatcher.DispatchEvent(dependency_contract.NewPostEmitEvent()) + if errDispatchPostEmit != nil { + return nil, errDispatchPostEmit + } + } + + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(dependency_contract.NewPreFlattenEvent()) + if errDispatchPreFlatten != nil { + return nil, errDispatchPreFlatten + } + + r.inheritanceFlattener.FlattenDependencies(*astMap, result) + + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(dependency_contract.NewPostFlattenEvent()) + if errDispatchPostFlatten != nil { + return nil, errDispatchPostFlatten + } + + return result, nil +} diff --git a/pkg/dependency_core/emitter/class_dependency_emitter.go b/pkg/dependency_core/emitter/class_dependency_emitter.go new file mode 100644 index 0000000..2955fe0 --- /dev/null +++ b/pkg/dependency_core/emitter/class_dependency_emitter.go @@ -0,0 +1,39 @@ +package emitter + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" +) + +type ClassDependencyEmitter struct{} + +func NewClassDependencyEmitter() *ClassDependencyEmitter { + return &ClassDependencyEmitter{} +} + +func (c *ClassDependencyEmitter) GetName() string { + return "ClassDependencyEmitter" +} + +func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { + for _, classReference := range astMap.GetClassLikeReferences() { + classLikeName := classReference.GetToken().(*ast_map.ClassLikeToken) + + for _, dependencyToken := range classReference.Dependencies { + if dependencyToken.Context.DependencyType == ast_contract2.DependencyTypeSuperGlobalVariable { + continue + } + + if dependencyToken.Context.DependencyType == ast_contract2.DependencyTypeUnresolvedFunctionCall { + continue + } + + dependencyList.AddDependency(dependency_core2.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) + } + + for _, inherit := range astMap.GetClassInherits(classLikeName) { + dependencyList.AddDependency(dependency_core2.NewDependency(classLikeName, inherit.ClassLikeName, ast_contract2.NewDependencyContext(inherit.FileOccurrence, ast_contract2.DependencyTypeInherit))) + } + } +} diff --git a/pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go b/pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go similarity index 52% rename from pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go rename to pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go index 40231b0..fd6aaee 100644 --- a/pkg/core/dependency/emitter/class_superglobal_dependency_emitter.go +++ b/pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" ) type ClassSuperglobalDependencyEmitter struct{} @@ -16,13 +16,13 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { return "ClassSuperglobalDependencyEmitter" } -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType != ast.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependency.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependency_core2.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/core/dependency/emitter/dependency_emitter_interface.go b/pkg/dependency_core/emitter/dependency_emitter_interface.go similarity index 54% rename from pkg/core/dependency/emitter/dependency_emitter_interface.go rename to pkg/dependency_core/emitter/dependency_emitter_interface.go index 83c41d0..4c0fc90 100644 --- a/pkg/core/dependency/emitter/dependency_emitter_interface.go +++ b/pkg/dependency_core/emitter/dependency_emitter_interface.go @@ -1,11 +1,11 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core" ) type DependencyEmitterInterface interface { GetName() string - ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) + ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core.DependencyList) } diff --git a/pkg/core/dependency/emitter/f_q_d_n_index_node.go b/pkg/dependency_core/emitter/f_q_d_n_index_node.go similarity index 100% rename from pkg/core/dependency/emitter/f_q_d_n_index_node.go rename to pkg/dependency_core/emitter/f_q_d_n_index_node.go diff --git a/pkg/dependency_core/emitter/file_dependency_emitter.go b/pkg/dependency_core/emitter/file_dependency_emitter.go new file mode 100644 index 0000000..914dad7 --- /dev/null +++ b/pkg/dependency_core/emitter/file_dependency_emitter.go @@ -0,0 +1,33 @@ +package emitter + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" +) + +type FileDependencyEmitter struct{} + +func NewFileDependencyEmitter() *FileDependencyEmitter { + return &FileDependencyEmitter{} +} + +func (f FileDependencyEmitter) GetName() string { + return "FileDependencyEmitter" +} + +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { + for _, fileReference := range astMap.GetFileReferences() { + for _, dependencyToken := range fileReference.Dependencies { + if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUse { + continue + } + + if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUnresolvedFunctionCall { + continue + } + + dependencyList.AddDependency(dependency_core2.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + } + } +} diff --git a/pkg/core/dependency/emitter/function_call_dependency_emitter.go b/pkg/dependency_core/emitter/function_call_dependency_emitter.go similarity index 68% rename from pkg/core/dependency/emitter/function_call_dependency_emitter.go rename to pkg/dependency_core/emitter/function_call_dependency_emitter.go index 8a7bddc..c231fd0 100644 --- a/pkg/core/dependency/emitter/function_call_dependency_emitter.go +++ b/pkg/dependency_core/emitter/function_call_dependency_emitter.go @@ -1,10 +1,10 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast/token_reference_with_dependencies_interface" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract/token_reference_with_dependencies_interface" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" ) type FunctionCallDependencyEmitter struct{} @@ -16,7 +16,7 @@ func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { func (f *FunctionCallDependencyEmitter) GetName() string { return "FunctionCallDependencyEmitter" } -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { references := make([]token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetClassLikeReferences() { references = append(references, reference) @@ -36,18 +36,18 @@ func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, f.createDependenciesForReferences(references, astMap, dependencyList) } -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { for _, referenceInterface := range references { reference := referenceInterface.(token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface) for _, dependencyToken := range reference.GetDependencies() { - if dependencyToken.Context.DependencyType != ast.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeUnresolvedFunctionCall { continue } token := dependencyToken.Token - dependencyList.AddDependency(dependency.NewDependency(reference.GetToken(), token, dependencyToken.Context)) - functionToken := token.(*ast_map.FunctionToken) + dependencyList.AddDependency(dependency_core2.NewDependency(reference.GetToken(), token, dependencyToken.Context)) + functionToken := token.(*ast_map2.FunctionToken) if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { - dependencyList.AddDependency(dependency.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependency_core2.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/core/dependency/emitter/function_dependency_emitter.go b/pkg/dependency_core/emitter/function_dependency_emitter.go similarity index 50% rename from pkg/core/dependency/emitter/function_dependency_emitter.go rename to pkg/dependency_core/emitter/function_dependency_emitter.go index 2ee192c..5d772a2 100644 --- a/pkg/core/dependency/emitter/function_dependency_emitter.go +++ b/pkg/dependency_core/emitter/function_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" ) type FunctionDependencyEmitter struct{} @@ -16,19 +16,19 @@ func (f FunctionDependencyEmitter) GetName() string { return "FunctionDependencyEmitter" } -func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType == ast.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeSuperGlobalVariable { continue } - if dependencyToken.Context.DependencyType == ast.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUnresolvedFunctionCall { continue } - dependencyList.AddDependency(dependency.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependency_core2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go b/pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go similarity index 56% rename from pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go rename to pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go index 0004268..25fa7cc 100644 --- a/pkg/core/dependency/emitter/function_superglobal_dependency_emitter.go +++ b/pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" ) type FunctionSuperglobalDependencyEmitter struct{} @@ -16,15 +16,15 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType != ast.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependency.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependency_core2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/core/dependency/emitter/uses_dependency_emitter.go b/pkg/dependency_core/emitter/uses_dependency_emitter.go similarity index 64% rename from pkg/core/dependency/emitter/uses_dependency_emitter.go rename to pkg/dependency_core/emitter/uses_dependency_emitter.go index 5ee5ce5..62fdd9b 100644 --- a/pkg/core/dependency/emitter/uses_dependency_emitter.go +++ b/pkg/dependency_core/emitter/uses_dependency_emitter.go @@ -1,9 +1,9 @@ package emitter import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" "strings" ) @@ -17,8 +17,8 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency.DependencyList) { - references := make([]ast.TaggedTokenReferenceInterface, 0) +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { + references := make([]ast_contract2.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) } @@ -41,15 +41,15 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende for _, fileReference := range astMap.GetFileReferences() { for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { - if emittedDependency.Context.DependencyType == ast.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { - dependencyList.AddDependency(dependency.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) + if emittedDependency.Context.DependencyType == ast_contract2.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { + dependencyList.AddDependency(dependency_core2.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } } } } -func (u *UsesDependencyEmitter) IsFQDN(dependency *ast_map.DependencyToken, FQDNIndex FQDNIndexNode) bool { +func (u *UsesDependencyEmitter) IsFQDN(dependency *ast_map2.DependencyToken, FQDNIndex FQDNIndexNode) bool { dependencyFQDN := dependency.Token.ToString() pathSplit := strings.Split(dependencyFQDN, "\\") value := FQDNIndex.GetNestedNode(pathSplit) diff --git a/pkg/core/dependency/inherit_dependency.go b/pkg/dependency_core/inherit_dependency.go similarity index 55% rename from pkg/core/dependency/inherit_dependency.go rename to pkg/dependency_core/inherit_dependency.go index 08e416f..1d69539 100644 --- a/pkg/core/dependency/inherit_dependency.go +++ b/pkg/dependency_core/inherit_dependency.go @@ -1,19 +1,19 @@ -package dependency +package dependency_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" ) type InheritDependency struct { - depender *ast_map.ClassLikeToken - dependent ast.TokenInterface + depender *ast_map2.ClassLikeToken + dependent ast_contract2.TokenInterface originalDependency Dependency2.DependencyInterface - inheritPath *ast_map.AstInherit + inheritPath *ast_map2.AstInherit } -func NewInheritDependency(depender *ast_map.ClassLikeToken, dependent ast.TokenInterface, originalDependency Dependency2.DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { +func NewInheritDependency(depender *ast_map2.ClassLikeToken, dependent ast_contract2.TokenInterface, originalDependency Dependency2.DependencyInterface, inheritPath *ast_map2.AstInherit) *InheritDependency { return &InheritDependency{depender: depender, dependent: dependent, originalDependency: originalDependency, inheritPath: inheritPath} } @@ -33,14 +33,14 @@ func (i *InheritDependency) Serialize() []map[string]interface{} { return buffer } -func (i *InheritDependency) GetDepender() ast.TokenInterface { +func (i *InheritDependency) GetDepender() ast_contract2.TokenInterface { return i.depender } -func (i *InheritDependency) GetDependent() ast.TokenInterface { +func (i *InheritDependency) GetDependent() ast_contract2.TokenInterface { return i.dependent } -func (i *InheritDependency) GetContext() *ast.DependencyContext { +func (i *InheritDependency) GetContext() *ast_contract2.DependencyContext { return i.originalDependency.GetContext() } diff --git a/pkg/core/dependency/inheritance_flattener.go b/pkg/dependency_core/inheritance_flattener.go similarity index 66% rename from pkg/core/dependency/inheritance_flattener.go rename to pkg/dependency_core/inheritance_flattener.go index 958c37f..baaa237 100644 --- a/pkg/core/dependency/inheritance_flattener.go +++ b/pkg/dependency_core/inheritance_flattener.go @@ -1,7 +1,7 @@ -package dependency +package dependency_core import ( - AstMap2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type InheritanceFlattener struct{} @@ -10,9 +10,9 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap AstMap2.AstMap, dependencyList *DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { - classLikeName := classLikeReference.GetToken().(*AstMap2.ClassLikeToken) + classLikeName := classLikeReference.GetToken().(*ast_map.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { for _, dep := range dependencyList.GetDependenciesByClass(inherit.ClassLikeName.ToString()) { dependencyList.AddInheritDependency(NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) diff --git a/pkg/core/dependency/invalid_emitter_configuration_exception.go b/pkg/dependency_core/invalid_emitter_configuration_exception.go similarity index 76% rename from pkg/core/dependency/invalid_emitter_configuration_exception.go rename to pkg/dependency_core/invalid_emitter_configuration_exception.go index 20822ca..6cf24a5 100644 --- a/pkg/core/dependency/invalid_emitter_configuration_exception.go +++ b/pkg/dependency_core/invalid_emitter_configuration_exception.go @@ -1,8 +1,8 @@ -package dependency +package dependency_core import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type InvalidEmitterConfigurationException struct { @@ -17,10 +17,10 @@ func NewInvalidEmitterConfigurationException(message string) *InvalidEmitterConf return &InvalidEmitterConfigurationException{Message: message} } -func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType config.EmitterType) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType config_contract.EmitterType) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Could not locate emitter type '%s' in the DI container.", emitterType)) } -func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType config.EmitterType, emitter interface{}) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType config_contract.EmitterType, emitter interface{}) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Type \"%s\" is not valid emitter (expected \"%s\", but is \"%T\").", emitterType, "DependencyEmitterInterface", emitter)) } diff --git a/pkg/dependency_core/token_resolver.go b/pkg/dependency_core/token_resolver.go new file mode 100644 index 0000000..2322beb --- /dev/null +++ b/pkg/dependency_core/token_resolver.go @@ -0,0 +1,27 @@ +package dependency_core + +import ( + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" +) + +type TokenResolver struct{} + +func NewTokenResolver() *TokenResolver { + return &TokenResolver{} +} + +func (r *TokenResolver) Resolve(token ast_contract2.TokenInterface, astMap *ast_map.AstMap) ast_contract2.TokenReferenceInterface { + switch v := token.(type) { + case *ast_map.ClassLikeToken: + return astMap.GetClassReferenceForToken(v) + case *ast_map.FunctionToken: + return astMap.GetFunctionReferenceForToken(v) + case *ast_map.SuperGlobalToken: + return ast_map.NewVariableReference(v) + case *ast_map.FileToken: + return astMap.GetFileReferenceForToken(v) + default: + panic("Unrecognized TokenInterface") + } +} diff --git a/pkg/core/dependency/unrecognized_token_exception.go b/pkg/dependency_core/unrecognized_token_exception.go similarity index 77% rename from pkg/core/dependency/unrecognized_token_exception.go rename to pkg/dependency_core/unrecognized_token_exception.go index 8ce52cb..2b9be15 100644 --- a/pkg/core/dependency/unrecognized_token_exception.go +++ b/pkg/dependency_core/unrecognized_token_exception.go @@ -1,8 +1,8 @@ -package dependency +package dependency_core import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type UnrecognizedTokenException struct { @@ -17,6 +17,6 @@ func (e UnrecognizedTokenException) Error() string { return e.Message } -func (e UnrecognizedTokenException) NewCannotCreateReference(token ast.TokenInterface) *UnrecognizedTokenException { +func (e UnrecognizedTokenException) NewCannotCreateReference(token ast_contract.TokenInterface) *UnrecognizedTokenException { return &UnrecognizedTokenException{Message: fmt.Sprintf("Cannot create TokenReference for token '%T'", token)} } diff --git a/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go b/pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go similarity index 76% rename from pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go rename to pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go index b1626d7..368ef46 100644 --- a/pkg/supportive/dependency_injection/Exception/CacheFileException/CacheFileException.go +++ b/pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go @@ -18,5 +18,5 @@ func newCacheFileException(message string) *CacheFileException { } func NewCacheFileExceptionNotWritable(cacheFile *os.File) *CacheFileException { - return newCacheFileException(fmt.Sprintf("Cache file \"%s\" is not writable.", cacheFile.Name())) + return newCacheFileException(fmt.Sprintf("Cache file_supportive \"%s\" is not writable.", cacheFile.Name())) } diff --git a/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go b/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go similarity index 100% rename from pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go rename to pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go diff --git a/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go b/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go similarity index 78% rename from pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go rename to pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go index 3e05505..4222150 100644 --- a/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go +++ b/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go @@ -2,7 +2,7 @@ package InvalidServiceInLocatorException import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" "strings" ) @@ -18,7 +18,7 @@ func newInvalidServiceInLocatorException(message string) *InvalidServiceInLocato return &InvalidServiceInLocatorException{Message: message} } -func NewInvalidServiceInLocatorExceptionInvalidType(id output_formatter.OutputFormatterType, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { +func NewInvalidServiceInLocatorExceptionInvalidType(id output_formatter_contract.OutputFormatterType, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { message := fmt.Sprintf("Trying to get unsupported service \"%s\" from locator (expected \"%s\", but is \"%s\").", id, actualType, strings.Join(expectedTypes, "\", \"")) return newInvalidServiceInLocatorException(message) } diff --git a/pkg/supportive/dependency_injection/ServiceContainerBuilder.go b/pkg/dependency_injection_supportive/ServiceContainerBuilder.go similarity index 90% rename from pkg/supportive/dependency_injection/ServiceContainerBuilder.go rename to pkg/dependency_injection_supportive/ServiceContainerBuilder.go index 20ffc91..7a928dc 100644 --- a/pkg/supportive/dependency_injection/ServiceContainerBuilder.go +++ b/pkg/dependency_injection_supportive/ServiceContainerBuilder.go @@ -1,11 +1,11 @@ -package dependency_injection +package dependency_injection_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/config/deptrac_config" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/Exception/CannotLoadConfiguration" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/config_contract/deptrac_config" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" diff --git a/pkg/dependency_injection_supportive/cache.go b/pkg/dependency_injection_supportive/cache.go new file mode 100644 index 0000000..2d7d3d6 --- /dev/null +++ b/pkg/dependency_injection_supportive/cache.go @@ -0,0 +1,14 @@ +package dependency_injection_supportive + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application/application_version" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" +) + +func Cache(builder *container_builder.ContainerBuilder) { + builder.AstFileReferenceFileCache = cache.NewAstFileReferenceFileCache(*builder.CacheFile, application_version.Version) + builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache + builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache + builder.CacheableFileSubscriber = cache.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) +} diff --git a/pkg/dependency_injection_supportive/container_builder/container_builder.go b/pkg/dependency_injection_supportive/container_builder/container_builder.go new file mode 100644 index 0000000..eda8a7b --- /dev/null +++ b/pkg/dependency_injection_supportive/container_builder/container_builder.go @@ -0,0 +1,88 @@ +package container_builder + +import ( + analyser2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" + "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/post_process_event" + process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/process_event" + ast_core2 "github.com/KoNekoD/go-deptrac/pkg/ast_core" + parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + cache2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/config_contract/deptrac_config" + command2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" + subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" + symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" + file_supportive2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive" + "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" +) + +type ContainerBuilder struct { + ProjectDirectory string + CacheFile *string + Configuration *deptrac_config.DeptracConfig + EventDispatcher event_dispatcher_interface.EventDispatcherInterface + FileInputCollector input_collector_core.InputCollectorInterface + YmlFileLoader *file_supportive2.YmlFileLoader + Dumper *file_supportive2.Dumper + AstLoader *ast_core2.AstLoader + AstFileReferenceFileCache *cache2.AstFileReferenceFileCache + AstFileReferenceDeferredCacheInterface cache2.AstFileReferenceDeferredCacheInterface + AstFileReferenceCacheInterface cache2.AstFileReferenceCacheInterface + CacheableFileSubscriber *cache2.CacheableFileSubscriber + AstFileReferenceInMemoryCache *cache2.AstFileReferenceInMemoryCache + TypeResolver *parser2.TypeResolver + ReferenceExtractors []extractors.ReferenceExtractorInterface + ParserInterface parser2.ParserInterface + LayerProvider *layer_contract.LayerProvider + EventHelper *analyser2.EventHelper + AllowDependencyHandler *process_event2.AllowDependencyHandler + DependsOnPrivateLayer *process_event2.DependsOnPrivateLayer + DependsOnInternalToken *process_event2.DependsOnInternalToken + DependsOnDisallowedLayer *process_event2.DependsOnDisallowedLayer + MatchingLayersHandler *process_event2.MatchingLayersHandler + UncoveredDependentHandler *process_event2.UncoveredDependentHandler + UnmatchedSkippedViolations *post_process_event.UnmatchedSkippedViolations + ConsoleSubscriber *subscriber2.ConsoleSubscriber + ProgressSubscriber *subscriber2.ProgressSubscriber + VerboseBoolFlag *bool + DebugBoolFlag *bool + Style *symfony2.Style + SymfonyOutput *symfony2.SymfonyOutput + TimeStopwatch *time_stopwatch_supportive.Stopwatch + AstMapExtractor *ast_core2.AstMapExtractor + InheritanceFlattener *dependency_core2.InheritanceFlattener + DependencyResolver *dependency_resolver.DependencyResolver + TokenResolver *dependency_core2.TokenResolver + CollectorResolver *collector2.CollectorResolver + LayerResolver layer_resolver_interface.LayerResolverInterface + NikicPhpParser *nikic_php_parser.NikicPhpParser + CollectorProvider *collector2.CollectorProvider + DependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser + TokenInLayerAnalyser *analyser_core2.TokenInLayerAnalyser + LayerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser + UnassignedTokenAnalyser *analyser_core2.UnassignedTokenAnalyser + LayerDependenciesAnalyser *analyser_core2.LayerDependenciesAnalyser + RulesetUsageAnalyser *analyser_core2.RulesetUsageAnalyser + FormatterProvider *output_formatter_supportive.FormatterProvider + FormatterConfiguration *configuration.FormatterConfiguration + AnalyseRunner *command2.AnalyseRunner + AnalyseCommand *command2.AnalyseCommand + NodeNamer *node_namer.NodeNamer + AnalyseOptions *command2.AnalyseOptions +} + +func NewContainerBuilder(workingDirectory string) *ContainerBuilder { + return &ContainerBuilder{} +} diff --git a/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go b/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go similarity index 84% rename from pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go rename to pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go index 905168d..feacba7 100644 --- a/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface.go +++ b/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go @@ -2,8 +2,8 @@ package event_dispatcher import ( "fmt" - util "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" + util "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" "reflect" "slices" ) diff --git a/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go b/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go similarity index 100% rename from pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go rename to pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go diff --git a/pkg/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go b/pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go similarity index 100% rename from pkg/supportive/dependency_injection/event_subscriber_default_priority/event_subscriber_default_priority.go rename to pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go diff --git a/pkg/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go b/pkg/dependency_injection_supportive/event_subscriber_interface/event_subscriber_interface.go similarity index 100% rename from pkg/supportive/dependency_injection/event_subscriber_interface/event_subscriber_interface.go rename to pkg/dependency_injection_supportive/event_subscriber_interface/event_subscriber_interface.go diff --git a/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go similarity index 69% rename from pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go rename to pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go index b7773cb..5b24377 100644 --- a/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map.go +++ b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go @@ -1,7 +1,7 @@ package event_subscriber_interface_map import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" "github.com/elliotchance/orderedmap/v2" ) diff --git a/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go similarity index 60% rename from pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go rename to pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go index 5a2403a..99db26b 100644 --- a/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go +++ b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go @@ -1,31 +1,31 @@ package event_subscriber_interface_map_reg import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_default_priority" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" + dependency_contract2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_default_priority" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" "github.com/elliotchance/orderedmap/v2" "reflect" ) -func RegForAnalyseCommand(consoleSubscriber *subscriber.ConsoleSubscriber, progressSubscriber *subscriber.ProgressSubscriber, withProgress bool) { +func RegForAnalyseCommand(consoleSubscriber *subscriber2.ConsoleSubscriber, progressSubscriber *subscriber2.ProgressSubscriber, withProgress bool) { processEvent := &process_event.ProcessEvent{} postProcessEvent := &post_process_event.PostProcessEvent{} - preCreateAstMapEvent := &ast.PreCreateAstMapEvent{} - postCreateAstMapEvent := &ast.PostCreateAstMapEvent{} - astFileAnalysedEvent := &ast.AstFileAnalysedEvent{} - astFileSyntaxErrorEvent := &ast.AstFileSyntaxErrorEvent{} - preEmitEvent := &dependency.PreEmitEvent{} - postEmitEvent := &dependency.PostEmitEvent{} - preFlattenEvent := &dependency.PreFlattenEvent{} - postFlattenEvent := &dependency.PostFlattenEvent{} + preCreateAstMapEvent := &ast_contract2.PreCreateAstMapEvent{} + postCreateAstMapEvent := &ast_contract2.PostCreateAstMapEvent{} + astFileAnalysedEvent := &ast_contract2.AstFileAnalysedEvent{} + astFileSyntaxErrorEvent := &ast_contract2.AstFileSyntaxErrorEvent{} + preEmitEvent := &dependency_contract2.PreEmitEvent{} + postEmitEvent := &dependency_contract2.PostEmitEvent{} + preFlattenEvent := &dependency_contract2.PreFlattenEvent{} + postFlattenEvent := &dependency_contract2.PostFlattenEvent{} - Reg(preCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) + Reg(preCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.EventSubscriberInterfaceMap.DefaultPriority) Reg(postCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) Reg(processEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) Reg(postProcessEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) diff --git a/pkg/supportive/dependency_injection/services.go b/pkg/dependency_injection_supportive/services.go similarity index 51% rename from pkg/supportive/dependency_injection/services.go rename to pkg/dependency_injection_supportive/services.go index 14fde52..df70732 100644 --- a/pkg/supportive/dependency_injection/services.go +++ b/pkg/dependency_injection_supportive/services.go @@ -1,53 +1,53 @@ -package dependency_injection +package dependency_injection_supportive import ( "flag" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/post_process_event" - process_event2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/process_event" - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - contractLayer "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/process_event" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - Cache2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/emitter" - "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" - "github.com/KoNekoD/go-deptrac/pkg/core/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_default_priority" - EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_subscriber_interface_map/event_subscriber_interface_map_reg" - "github.com/KoNekoD/go-deptrac/pkg/supportive/file" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" - "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" + post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" + process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" + "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/post_process_event" + process_event3 "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/process_event" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_core2 "github.com/KoNekoD/go-deptrac/pkg/ast_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" + Cache2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" + config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive" + command2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" + subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" + symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" + dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" + emitter2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core/emitter" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher" + EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_default_priority" + EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg" + file_supportive2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive" + "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_core" + collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" "github.com/elliotchance/orderedmap/v2" "strings" ) -func getDefaultFormatter() output_formatter.OutputFormatterType { - if console.NewEnv().GetEnv("GITHUB_ACTIONS") != "" { - return output_formatter2.NewGithubActionsOutputFormatter().GetName() +func getDefaultFormatter() output_formatter_contract2.OutputFormatterType { + if console_supportive.NewEnv().GetEnv("GITHUB_ACTIONS") != "" { + return output_formatter_supportive.NewGithubActionsOutputFormatter().GetName() } - return output_formatter2.NewTableOutputFormatter().GetName() + return output_formatter_supportive.NewTableOutputFormatter().GetName() } func Services(builder *container_builder.ContainerBuilder) error { @@ -57,13 +57,13 @@ func Services(builder *container_builder.ContainerBuilder) error { projectDirectory := builder.ProjectDirectory verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") debugBoolFlag := flag.Bool("debug", false, "Debug mode") - style := symfony.NewStyle( + style := symfony2.NewStyle( verboseBoolFlag != nil && *verboseBoolFlag == true, debugBoolFlag != nil && *debugBoolFlag == true, ) - symfonyOutput := symfony.NewSymfonyOutput(style) + symfonyOutput := symfony2.NewSymfonyOutput(style) - timeStopwatch := time_stopwatch.NewStopwatch() + timeStopwatch := time_stopwatch_supportive.NewStopwatch() nodeNamer := node_namer.NewNodeNamer(projectDirectory) @@ -72,7 +72,7 @@ func Services(builder *container_builder.ContainerBuilder) error { */ eventDispatcher := event_dispatcher.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) - fileInputCollector, err := input_collector.NewFileInputCollector( + fileInputCollector, err := input_collector_core.NewFileInputCollector( builderConfiguration.Paths, builderConfiguration.ExcludeFiles, projectDirectory, @@ -81,8 +81,8 @@ func Services(builder *container_builder.ContainerBuilder) error { return err } - ymlFileLoader := file.NewYmlFileLoader() - dumper := file.NewDumper("/deptrac_template.yaml") + ymlFileLoader := file_supportive2.NewYmlFileLoader() + dumper := file_supportive2.NewDumper("/deptrac_template.yaml") /* * AST @@ -110,27 +110,27 @@ func Services(builder *container_builder.ContainerBuilder) error { } nikicPhpParser := nikic_php_parser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser - astLoader := ast.NewAstLoader(parserInterface, eventDispatcher) + astLoader := ast_core2.NewAstLoader(parserInterface, eventDispatcher) /* * Dependency */ - dependencyEmitters := map[config.EmitterType]emitter.DependencyEmitterInterface{ - config.ClassToken: emitter.NewClassDependencyEmitter(), - config.ClassSuperGlobalToken: emitter.NewClassSuperglobalDependencyEmitter(), - config.FileToken: emitter.NewFileDependencyEmitter(), - config.FunctionToken: emitter.NewFunctionDependencyEmitter(), - config.FunctionCall: emitter.NewFunctionCallDependencyEmitter(), - config.FunctionSuperGlobalToken: emitter.NewFunctionSuperglobalDependencyEmitter(), - config.UseToken: emitter.NewUsesDependencyEmitter(), + dependencyEmitters := map[config_contract2.EmitterType]emitter2.DependencyEmitterInterface{ + config_contract2.ClassToken: emitter2.NewClassDependencyEmitter(), + config_contract2.ClassSuperGlobalToken: emitter2.NewClassSuperglobalDependencyEmitter(), + config_contract2.FileToken: emitter2.NewFileDependencyEmitter(), + config_contract2.FunctionToken: emitter2.NewFunctionDependencyEmitter(), + config_contract2.FunctionCall: emitter2.NewFunctionCallDependencyEmitter(), + config_contract2.FunctionSuperGlobalToken: emitter2.NewFunctionSuperglobalDependencyEmitter(), + config_contract2.UseToken: emitter2.NewUsesDependencyEmitter(), } - inheritanceFlattener := dependency.NewInheritanceFlattener() + inheritanceFlattener := dependency_core2.NewInheritanceFlattener() dependencyResolver := dependency_resolver.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) - tokenResolver := dependency.NewTokenResolver() + tokenResolver := dependency_core2.NewTokenResolver() - astMapExtractor := ast.NewAstMapExtractor(fileInputCollector, astLoader) + astMapExtractor := ast_core2.NewAstMapExtractor(fileInputCollector, astLoader) - layerProvider := contractLayer.NewLayerProvider(builderConfiguration.Rulesets) + layerProvider := layer_contract.NewLayerProvider(builderConfiguration.Rulesets) eventHelper := event_helper.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* @@ -142,20 +142,20 @@ func Services(builder *container_builder.ContainerBuilder) error { event_subscriber_interface_map.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface2.EventSubscriberInterface]]() // Events - uncoveredDependentHandler := process_event.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) - matchingLayersHandler := process_event.NewMatchingLayersHandler() - allowDependencyHandler := process_event.NewAllowDependencyHandler() - consoleSubscriber := subscriber.NewConsoleSubscriber(symfonyOutput, timeStopwatch) - progressSubscriber := subscriber.NewProgressSubscriber(symfonyOutput) - dependsOnDisallowedLayer := process_event.NewDependsOnDisallowedLayer(eventHelper) - dependsOnPrivateLayer := process_event.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := process_event.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) + uncoveredDependentHandler := process_event3.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) + matchingLayersHandler := process_event3.NewMatchingLayersHandler() + allowDependencyHandler := process_event3.NewAllowDependencyHandler() + consoleSubscriber := subscriber2.NewConsoleSubscriber(symfonyOutput, timeStopwatch) + progressSubscriber := subscriber2.NewProgressSubscriber(symfonyOutput) + dependsOnDisallowedLayer := process_event3.NewDependsOnDisallowedLayer(eventHelper) + dependsOnPrivateLayer := process_event3.NewDependsOnPrivateLayer(eventHelper) + dependsOnInternalToken := process_event3.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) unmatchedSkippedViolations := post_process_event.NewUnmatchedSkippedViolations(eventHelper) processEvent := &process_event2.ProcessEvent{} postProcessEvent := &post_process_event2.PostProcessEvent{} - preCreateAstMapEvent := &astContract.PreCreateAstMapEvent{} - postCreateAstMapEvent := &astContract.PostCreateAstMapEvent{} + preCreateAstMapEvent := &ast_contract.PreCreateAstMapEvent{} + postCreateAstMapEvent := &ast_contract.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" event_subscriber_interface_map_reg.Reg(processEvent, allowDependencyHandler, -100) @@ -173,23 +173,23 @@ func Services(builder *container_builder.ContainerBuilder) error { /* * OutputFormatter */ - outputFormatter := map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface{ - output_formatter.Table: output_formatter2.NewTableOutputFormatter(), - output_formatter.GithubActions: output_formatter2.NewGithubActionsOutputFormatter(), + outputFormatter := map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface{ + output_formatter_contract2.Table: output_formatter_supportive.NewTableOutputFormatter(), + output_formatter_contract2.GithubActions: output_formatter_supportive.NewGithubActionsOutputFormatter(), // TODO: - // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter'); - // $services->set(JUnitOutputFormatter::class)->tag('output_formatter'); - // $services->set(XMLOutputFormatter::class)->tag('output_formatter'); - // $services->set(BaselineOutputFormatter::class)->tag('output_formatter'); - // $services->set(JsonOutputFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter'); - // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter'); - // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter'); - // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter'); + // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(XMLOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(BaselineOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(JsonOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter_contract'); + // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter_contract'); } - formatterProvider := output_formatter2.NewFormatterProvider(outputFormatter) + formatterProvider := output_formatter_supportive.NewFormatterProvider(outputFormatter) formatterConfiguration := configuration.NewFormatterConfiguration(builderConfiguration.Formatters) // @@ -199,13 +199,13 @@ func Services(builder *container_builder.ContainerBuilder) error { } var ( formatterUsagePossible = strings.Join(knownFormattersStr, ", ") - formatterUsage = fmt.Sprintf("Format in which to print the result of the analysis. Possible: [\"%s\"]", formatterUsagePossible) - formatter = flag.String("formatter", string(output_formatter.Table), formatterUsage) - output = flag.String("output", "", "Output file path for formatter (if applicable)") + formatterUsage = fmt.Sprintf("Format in which to print the result_contract of the analysis. Possible: [\"%s\"]", formatterUsagePossible) + formatter = flag.String("formatter", string(output_formatter_contract2.Table), formatterUsage) + output = flag.String("output", "", "Output file_supportive path for formatter (if applicable)") noProgress = flag.Bool("no-progress", false, "Do not show progress bar") reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") reportUncovered = flag.Bool("report-uncovered", false, "Report uncovered dependencies") - failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency is found") + failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency_contract is found") ) if formatter == nil { @@ -213,7 +213,7 @@ func Services(builder *container_builder.ContainerBuilder) error { formatter = &formatterTmp } - analyseOptions := command.NewAnalyseOptions( + analyseOptions := command2.NewAnalyseOptions( nil != noProgress && *noProgress == true, *formatter, output, @@ -227,76 +227,76 @@ func Services(builder *container_builder.ContainerBuilder) error { /* * Layer */ - inheritanceLevelCollector, err := collector.NewInheritanceLevelCollector(astMapExtractor) + inheritanceLevelCollector, err := collector2.NewInheritanceLevelCollector(astMapExtractor) if err != nil { return err } - inheritsCollector, err := collector.NewInheritsCollector(astMapExtractor) + inheritsCollector, err := collector2.NewInheritsCollector(astMapExtractor) if err != nil { return err } - usesCollector, err := collector.NewUsesCollector(astMapExtractor) + usesCollector, err := collector2.NewUsesCollector(astMapExtractor) if err != nil { return err } - collectorProvider := collector.NewCollectorProvider() - collectorResolver := collector.NewCollectorResolver(collectorProvider) - layerResolver := layer.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[config.CollectorType]contractLayer.CollectorInterface{ + collectorProvider := collector2.NewCollectorProvider() + collectorResolver := collector2.NewCollectorResolver(collectorProvider) + layerResolver := layer_core.NewLayerResolver(collectorResolver, builderConfiguration.Layers) + collectors := map[config_contract2.CollectorType]layer_contract.CollectorInterface{ //AttributeCollector - config.TypeBool: collector.NewBoolCollector(collectorResolver), - config.TypeClass: collector.NewClassCollector(), - config.TypeClasslike: collector.NewClassLikeCollector(), - config.TypeClassNameRegex: collector.NewClassNameRegexCollector(), + config_contract2.TypeBool: collector2.NewBoolCollector(collectorResolver), + config_contract2.TypeClass: collector2.NewClassCollector(), + config_contract2.TypeClasslike: collector2.NewClassLikeCollector(), + config_contract2.TypeClassNameRegex: collector2.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - config.TypeDirectory: collector.NewDirectoryCollector(), + config_contract2.TypeDirectory: collector2.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - config.TypeFunctionName: collector.NewFunctionNameCollector(), - config.TypeGlob: collector.NewGlobCollector(projectDirectory), + config_contract2.TypeFunctionName: collector2.NewFunctionNameCollector(), + config_contract2.TypeGlob: collector2.NewGlobCollector(projectDirectory), //ImplementsCollector - config.TypeInheritance: inheritanceLevelCollector, - config.TypeInterface: collector.NewInterfaceCollector(), - config.TypeInherits: inheritsCollector, - config.TypeLayer: collector.NewLayerCollector(layerResolver), - config.TypeMethod: collector.NewMethodCollector(nikicPhpParser), - config.TypeSuperGlobal: collector.NewSuperglobalCollector(), - config.TypeTrait: collector.NewTraitCollector(), - config.TypeUses: usesCollector, + config_contract2.TypeInheritance: inheritanceLevelCollector, + config_contract2.TypeInterface: collector2.NewInterfaceCollector(), + config_contract2.TypeInherits: inheritsCollector, + config_contract2.TypeLayer: collector2.NewLayerCollector(layerResolver), + config_contract2.TypeMethod: collector2.NewMethodCollector(nikicPhpParser), + config_contract2.TypeSuperGlobal: collector2.NewSuperglobalCollector(), + config_contract2.TypeTrait: collector2.NewTraitCollector(), + config_contract2.TypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - config.TypeComposer: collector.NewComposerCollector(), + config_contract2.TypeComposer: collector2.NewComposerCollector(), } collectorProvider.Set(collectors) /* * SetAnalyser */ - dependencyLayersAnalyser := analyser.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := analyser.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerForTokenAnalyser := analyser.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := analyser.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := analyser.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := analyser.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) + dependencyLayersAnalyser := analyser_core2.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + tokenInLayerAnalyser := analyser_core2.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerForTokenAnalyser := analyser_core2.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := analyser_core2.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerDependenciesAnalyser := analyser_core2.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + rulesetUsageAnalyser := analyser_core2.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* * Console */ - analyseRunner := command.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) - analyseCommand := command.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) + analyseRunner := command2.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + analyseCommand := command2.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) // TODO: other commands - // $services->set(InitCommand::class)->autowire()->tag('console.command'); + // $services->set(InitCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(ChangedFilesRunner::class)->autowire(); - // $services->set(ChangedFilesCommand::class)->autowire()->tag('console.command'); + // $services->set(ChangedFilesCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(DebugLayerRunner::class)->autowire()->args(['$layers' => param('layers')]); - // $services->set(DebugLayerCommand::class)->autowire()->tag('console.command'); + // $services->set(DebugLayerCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(DebugTokenRunner::class)->autowire(); - // $services->set(DebugTokenCommand::class)->autowire()->tag('console.command'); + // $services->set(DebugTokenCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(DebugUnassignedRunner::class)->autowire(); - // $services->set(DebugUnassignedCommand::class)->autowire()->tag('console.command'); + // $services->set(DebugUnassignedCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(DebugDependenciesRunner::class)->autowire(); - // $services->set(DebugDependenciesCommand::class)->autowire()->tag('console.command'); + // $services->set(DebugDependenciesCommand::class)->autowire()->tag('console_supportive.command'); // $services->set(DebugUnusedRunner::class)->autowire(); - // $services->set(DebugUnusedCommand::class)->autowire()->tag('console.command'); + // $services->set(DebugUnusedCommand::class)->autowire()->tag('console_supportive.command'); builder.VerboseBoolFlag = verboseBoolFlag builder.DebugBoolFlag = debugBoolFlag diff --git a/pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go b/pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go similarity index 63% rename from pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go rename to pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go index cd2b569..93c29eb 100644 --- a/pkg/supportive/dependency_injection/test_container_provider/test_container_provider.go +++ b/pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go @@ -1,18 +1,18 @@ package test_container_provider import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection" + "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive" "os" "reflect" ) -func ProvideTestContainer() *dependency_injection.ServiceContainerBuilder { +func ProvideTestContainer() *dependency_injection_supportive.ServiceContainerBuilder { currentWorkingDirectory, _ := os.Getwd() config := currentWorkingDirectory + application.DirectorySeparator + "deptrac.yaml" cache := "" - factory := dependency_injection.NewServiceContainerBuilder(currentWorkingDirectory) + factory := dependency_injection_supportive.NewServiceContainerBuilder(currentWorkingDirectory) factory, _ = factory.WithConfig(config) _, _ = factory.Build(&cache, false) diff --git a/pkg/contract/exception_interface.go b/pkg/domain_error_contract/exception_interface.go similarity index 93% rename from pkg/contract/exception_interface.go rename to pkg/domain_error_contract/exception_interface.go index 163659b..054e82a 100644 --- a/pkg/contract/exception_interface.go +++ b/pkg/domain_error_contract/exception_interface.go @@ -1,4 +1,4 @@ -package contract +package domain_error_contract // ExceptionInterface - Shared interface for all Exceptions that Deptrac can possibly throw. You can use this to ensure that no exceptions go unhandled when integrating with Deptrac codebase. type ExceptionInterface interface{} diff --git a/pkg/supportive/file/dumper.go b/pkg/file_supportive/dumper.go similarity index 85% rename from pkg/supportive/file/dumper.go rename to pkg/file_supportive/dumper.go index 129ff9d..3809997 100644 --- a/pkg/supportive/file/dumper.go +++ b/pkg/file_supportive/dumper.go @@ -1,4 +1,4 @@ -package file +package file_supportive import ( "errors" @@ -17,7 +17,7 @@ func NewDumper(templateFile string) *Dumper { func (d *Dumper) Dump(file string) error { if _, err := os.Stat(file); !errors.Is(err, os.ErrNotExist) { - return errors.New("file already exists") + return errors.New("file_supportive already exists") } templateFileContent, err := os.ReadFile(d.templateFile) diff --git a/pkg/supportive/file/exception/could_not_read_file_exception.go b/pkg/file_supportive/exception/could_not_read_file_exception.go similarity index 100% rename from pkg/supportive/file/exception/could_not_read_file_exception.go rename to pkg/file_supportive/exception/could_not_read_file_exception.go diff --git a/pkg/supportive/file/exception/file_already_exists_exception.go b/pkg/file_supportive/exception/file_already_exists_exception.go similarity index 76% rename from pkg/supportive/file/exception/file_already_exists_exception.go rename to pkg/file_supportive/exception/file_already_exists_exception.go index 907241a..dd77953 100644 --- a/pkg/supportive/file/exception/file_already_exists_exception.go +++ b/pkg/file_supportive/exception/file_already_exists_exception.go @@ -19,5 +19,5 @@ func newFileAlreadyExistsException(message string) *FileAlreadyExistsException { } func NewFileAlreadyExistsExceptionAlreadyExists(file *os.File) *FileAlreadyExistsException { - return newFileAlreadyExistsException(fmt.Sprintf("A file named \"%s\" already exists. ", util.PathCanonicalize(file.Name()))) + return newFileAlreadyExistsException(fmt.Sprintf("A file_supportive named \"%s\" already exists. ", util.PathCanonicalize(file.Name()))) } diff --git a/pkg/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go b/pkg/file_supportive/exception/file_cannot_be_parsed_as_yaml_exception.go similarity index 100% rename from pkg/supportive/file/exception/file_cannot_be_parsed_as_yaml_exception.go rename to pkg/file_supportive/exception/file_cannot_be_parsed_as_yaml_exception.go diff --git a/pkg/supportive/file/exception/file_not_exists_exception.go b/pkg/file_supportive/exception/file_not_exists_exception.go similarity index 100% rename from pkg/supportive/file/exception/file_not_exists_exception.go rename to pkg/file_supportive/exception/file_not_exists_exception.go diff --git a/pkg/supportive/file/exception/file_not_writable_exception.go b/pkg/file_supportive/exception/file_not_writable_exception.go similarity index 88% rename from pkg/supportive/file/exception/file_not_writable_exception.go rename to pkg/file_supportive/exception/file_not_writable_exception.go index 0405ec4..1e49ea5 100644 --- a/pkg/supportive/file/exception/file_not_writable_exception.go +++ b/pkg/file_supportive/exception/file_not_writable_exception.go @@ -19,5 +19,5 @@ func newFileNotWritableException(message string) *FileNotWritableException { } func NewFileNotWritableExceptionFromFilePath(file *os.File) *FileNotWritableException { - return newFileNotWritableException(fmt.Sprintf("Could not write file \"%s\".", util.PathCanonicalize(file.Name()))) + return newFileNotWritableException(fmt.Sprintf("Could not write file_supportive \"%s\".", util.PathCanonicalize(file.Name()))) } diff --git a/pkg/supportive/file/exception/i_o_exception.go b/pkg/file_supportive/exception/i_o_exception.go similarity index 100% rename from pkg/supportive/file/exception/i_o_exception.go rename to pkg/file_supportive/exception/i_o_exception.go diff --git a/pkg/supportive/file/exception/invalid_path_exception.go b/pkg/file_supportive/exception/invalid_path_exception.go similarity index 100% rename from pkg/supportive/file/exception/invalid_path_exception.go rename to pkg/file_supportive/exception/invalid_path_exception.go diff --git a/pkg/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go b/pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go similarity index 86% rename from pkg/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go rename to pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go index 90f9072..c69bfd4 100644 --- a/pkg/supportive/file/exception/parsed_yaml_is_not_an_array_exception.go +++ b/pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go @@ -15,5 +15,5 @@ func newParsedYamlIsNotAnArrayException(message string) *ParsedYamlIsNotAnArrayE } func NewParsedYamlIsNotAnArrayExceptionFromFilename(filename string) *ParsedYamlIsNotAnArrayException { - return newParsedYamlIsNotAnArrayException(fmt.Sprintf("File \"%s\" can be parsed as YAML, but the result is not an array.", filename)) + return newParsedYamlIsNotAnArrayException(fmt.Sprintf("File \"%s\" can be parsed as YAML, but the result_contract is not an array.", filename)) } diff --git a/pkg/supportive/file/file_reader.go b/pkg/file_supportive/file_reader.go similarity index 73% rename from pkg/supportive/file/file_reader.go rename to pkg/file_supportive/file_reader.go index d86d0a8..20424f4 100644 --- a/pkg/supportive/file/file_reader.go +++ b/pkg/file_supportive/file_reader.go @@ -1,7 +1,7 @@ -package file +package file_supportive import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" + "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" "os" ) diff --git a/pkg/supportive/file/yml_file_loader.go b/pkg/file_supportive/yml_file_loader.go similarity index 75% rename from pkg/supportive/file/yml_file_loader.go rename to pkg/file_supportive/yml_file_loader.go index eec2a86..b836025 100644 --- a/pkg/supportive/file/yml_file_loader.go +++ b/pkg/file_supportive/yml_file_loader.go @@ -1,7 +1,7 @@ -package file +package file_supportive import ( - "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" + exception2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" "gopkg.in/yaml.v3" ) @@ -22,7 +22,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { err := yaml.Unmarshal([]byte(file), &yamlMap) if err != nil { - return nil, exception.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) + return nil, exception2.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) } _, ok1 := yamlMap["parameters"] @@ -30,7 +30,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { _, ok3 := yamlMap["imports"] if !ok1 || !ok2 || !ok3 { - return nil, exception.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) + return nil, exception2.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) } result := &ParseFileResult{ diff --git a/pkg/core/input_collector/file_input_collector.go b/pkg/input_collector_core/file_input_collector.go similarity index 87% rename from pkg/core/input_collector/file_input_collector.go rename to pkg/input_collector_core/file_input_collector.go index 8924511..5f1ccf2 100644 --- a/pkg/core/input_collector/file_input_collector.go +++ b/pkg/input_collector_core/file_input_collector.go @@ -1,8 +1,8 @@ -package input_collector +package input_collector_core import ( - "github.com/KoNekoD/go-deptrac/pkg/contract" - "github.com/KoNekoD/go-deptrac/pkg/supportive/file/exception" + "github.com/KoNekoD/go-deptrac/pkg/domain_error_contract" + "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -47,7 +47,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string func (c *FileInputCollector) Collect() ([]string, error) { if len(c.paths) == 0 { - return nil, contract.NewException("No 'paths' defined in the depfile.") + return nil, domain_error_contract.NewException("No 'paths' defined in the depfile.") } regex, err := regexp.Compile(".*\\.go") diff --git a/pkg/core/input_collector/input_collector_interface.go b/pkg/input_collector_core/input_collector_interface.go similarity index 71% rename from pkg/core/input_collector/input_collector_interface.go rename to pkg/input_collector_core/input_collector_interface.go index 5c8c68e..2500a7b 100644 --- a/pkg/core/input_collector/input_collector_interface.go +++ b/pkg/input_collector_core/input_collector_interface.go @@ -1,4 +1,4 @@ -package input_collector +package input_collector_core type InputCollectorInterface interface { Collect() ([]string, error) diff --git a/pkg/core/input_collector/input_exception.go b/pkg/input_collector_core/input_exception.go similarity index 93% rename from pkg/core/input_collector/input_exception.go rename to pkg/input_collector_core/input_exception.go index 96b0ba2..59b36fe 100644 --- a/pkg/core/input_collector/input_exception.go +++ b/pkg/input_collector_core/input_exception.go @@ -1,4 +1,4 @@ -package input_collector +package input_collector_core import "fmt" diff --git a/pkg/contract/layer/circular_reference_exception.go b/pkg/layer_contract/circular_reference_exception.go similarity index 73% rename from pkg/contract/layer/circular_reference_exception.go rename to pkg/layer_contract/circular_reference_exception.go index 3b64942..cb9c80e 100644 --- a/pkg/contract/layer/circular_reference_exception.go +++ b/pkg/layer_contract/circular_reference_exception.go @@ -1,4 +1,4 @@ -package layer +package layer_contract import ( "fmt" @@ -17,7 +17,7 @@ import ( // /** // * Exception when there are circular dependencies between layers. // * -// * Thrown when you use the `layer` collector and depend on a layer that +// * Thrown when you use the `layer_contract` collector and depend on a layer_contract that // * in turn depends back on you. To be able to resolve layers, the dependencies // * between them have to be a DAG(Direct Acyclic Graph), otherwise // * the resolution is not possible. @@ -28,9 +28,9 @@ import ( // /** // * @param list $others // */ -// public static function circularLayerDependency(string $layer, array $others) : self +// public static function circularLayerDependency(string $layer_contract, array $others) : self // { -// return new self(sprintf('Circular ruleset dependency for layer %s depending on: %s', $layer, implode('->', $others))); +// return new self(sprintf('Circular ruleset dependency_contract for layer_contract %s depending on: %s', $layer_contract, implode('->', $others))); // } // } type CircularReferenceException struct { @@ -42,5 +42,5 @@ func (c CircularReferenceException) Error() string { } func NewCircularReferenceExceptionFromCircularLayerDependency(layer string, others []string) CircularReferenceException { - return CircularReferenceException{Message: fmt.Sprintf("Circular ruleset dependency for layer %s depending on: %s", layer, strings.Join(others, "->"))} + return CircularReferenceException{Message: fmt.Sprintf("Circular ruleset dependency_contract for layer_contract %s depending on: %s", layer, strings.Join(others, "->"))} } diff --git a/pkg/layer_contract/collector_interface.go b/pkg/layer_contract/collector_interface.go new file mode 100644 index 0000000..cb96df1 --- /dev/null +++ b/pkg/layer_contract/collector_interface.go @@ -0,0 +1,10 @@ +package layer_contract + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" +) + +// CollectorInterface - A collector is responsible to tell whether an AST node (e.g. a specific class) is part of a layer_contract. +type CollectorInterface interface { + Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) +} diff --git a/pkg/contract/layer/invalid_collector_definition_exception.go b/pkg/layer_contract/invalid_collector_definition_exception.go similarity index 88% rename from pkg/contract/layer/invalid_collector_definition_exception.go rename to pkg/layer_contract/invalid_collector_definition_exception.go index 988e4b6..359d212 100644 --- a/pkg/contract/layer/invalid_collector_definition_exception.go +++ b/pkg/layer_contract/invalid_collector_definition_exception.go @@ -1,8 +1,8 @@ -package layer +package layer_contract import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" "reflect" "strings" ) @@ -27,7 +27,7 @@ func NewInvalidCollectorDefinitionExceptionMissingType() *InvalidCollectorDefini } } -func NewInvalidCollectorDefinitionExceptionUnsupportedType(collectorType config.CollectorType, supportedTypes []config.CollectorType, previous error) *InvalidCollectorDefinitionException { +func NewInvalidCollectorDefinitionExceptionUnsupportedType(collectorType config_contract.CollectorType, supportedTypes []config_contract.CollectorType, previous error) *InvalidCollectorDefinitionException { supportedTypesStrings := make([]string, len(supportedTypes)) for i, supportedType := range supportedTypes { diff --git a/pkg/contract/layer/invalid_layer_definition_exception.go b/pkg/layer_contract/invalid_layer_definition_exception.go similarity index 62% rename from pkg/contract/layer/invalid_layer_definition_exception.go rename to pkg/layer_contract/invalid_layer_definition_exception.go index 069a412..e392285 100644 --- a/pkg/contract/layer/invalid_layer_definition_exception.go +++ b/pkg/layer_contract/invalid_layer_definition_exception.go @@ -1,8 +1,8 @@ -package layer +package layer_contract import "fmt" -// InvalidLayerDefinitionException - Thrown when the configuration of a particular layer is not valid. Use this exception when writing custom collectors. +// InvalidLayerDefinitionException - Thrown when the configuration of a particular layer_contract is not valid. Use this exception when writing custom collectors. type InvalidLayerDefinitionException struct { Message string } @@ -13,30 +13,30 @@ func (e InvalidLayerDefinitionException) Error() string { func NewInvalidLayerDefinitionExceptionMissingName() *InvalidLayerDefinitionException { return &InvalidLayerDefinitionException{ - Message: "Could not resolve layer definition. The field \"name\" is required for all layers.", + Message: "Could not resolve layer_contract definition. The field \"name\" is required for all layers.", } } func NewInvalidLayerDefinitionExceptionDuplicateName(layerName string) *InvalidLayerDefinitionException { return &InvalidLayerDefinitionException{ - Message: fmt.Sprintf("The layer name \"%s\" is already in use. Names must be unique.", layerName), + Message: fmt.Sprintf("The layer_contract name \"%s\" is already in use. Names must be unique.", layerName), } } func NewInvalidLayerDefinitionExceptionCollectorRequired(layerName string) *InvalidLayerDefinitionException { return &InvalidLayerDefinitionException{ - Message: fmt.Sprintf("The layer \"%s\" is empty. You must assign at least 1 collector to a layer.", layerName), + Message: fmt.Sprintf("The layer_contract \"%s\" is empty. You must assign at least 1 collector to a layer_contract.", layerName), } } func NewInvalidLayerDefinitionExceptionLayerRequired() *InvalidLayerDefinitionException { return &InvalidLayerDefinitionException{ - Message: "Layer configuration is empty. You need to define at least 1 layer.", + Message: "Layer configuration is empty. You need to define at least 1 layer_contract.", } } func NewInvalidLayerDefinitionExceptionCircularTokenReference(tokenName string) *InvalidLayerDefinitionException { return &InvalidLayerDefinitionException{ - Message: fmt.Sprintf("Circular dependency between layers detected. Token \"%s\" could not be resolved.", tokenName), + Message: fmt.Sprintf("Circular dependency_contract between layers detected. Token \"%s\" could not be resolved.", tokenName), } } diff --git a/pkg/contract/layer/layer_provider.go b/pkg/layer_contract/layer_provider.go similarity index 83% rename from pkg/contract/layer/layer_provider.go rename to pkg/layer_contract/layer_provider.go index c651421..260ae87 100644 --- a/pkg/contract/layer/layer_provider.go +++ b/pkg/layer_contract/layer_provider.go @@ -1,16 +1,16 @@ -package layer +package layer_contract import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" "github.com/KoNekoD/go-deptrac/pkg/util" "strings" ) type LayerProvider struct { - AllowedLayers map[string]*config.Ruleset + AllowedLayers map[string]*config_contract.Ruleset } -func NewLayerProvider(allowedLayers map[string]*config.Ruleset) *LayerProvider { +func NewLayerProvider(allowedLayers map[string]*config_contract.Ruleset) *LayerProvider { return &LayerProvider{AllowedLayers: allowedLayers} } diff --git a/pkg/core/layer/collector/abstract_type_collector.go b/pkg/layer_core/collector/abstract_type_collector.go similarity index 51% rename from pkg/core/layer/collector/abstract_type_collector.go rename to pkg/layer_core/collector/abstract_type_collector.go index b1cb685..b224e7d 100644 --- a/pkg/core/layer/collector/abstract_type_collector.go +++ b/pkg/layer_core/collector/abstract_type_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" ) type AbstractTypeCollector struct { @@ -17,12 +17,12 @@ func NewAbstractTypeCollector() *AbstractTypeCollector { } } -func (c *AbstractTypeCollector) GetType() ast_map.ClassLikeType { +func (c *AbstractTypeCollector) GetType() ast_map2.ClassLikeType { panic("Not implemented") } -func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { - v, ok := reference.(*ast_map.ClassLikeReference) +func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { + v, ok := reference.(*ast_map2.ClassLikeReference) if !ok { return false, nil } @@ -32,16 +32,16 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference return false, err } - isClassLike := ast_map.TypeClasslike == c.GetType() + isClassLike := ast_map2.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() - return (isClassLike || isSameType) && v.GetToken().(*ast_map.ClassLikeToken).Match(pattern), nil + return (isClassLike || isSameType) && v.GetToken().(*ast_map2.ClassLikeToken).Match(pattern), nil } func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) } } return fmt.Sprintf("/%s/i", config["value"].(string)), nil diff --git a/pkg/core/layer/collector/bool_collector.go b/pkg/layer_core/collector/bool_collector.go similarity index 74% rename from pkg/core/layer/collector/bool_collector.go rename to pkg/layer_core/collector/bool_collector.go index 4123719..f8c34bf 100644 --- a/pkg/core/layer/collector/bool_collector.go +++ b/pkg/layer_core/collector/bool_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" ) type BoolCollector struct { @@ -17,7 +17,7 @@ func NewBoolCollector(collectorResolver CollectorResolverInterface) *BoolCollect } } -func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { configuration, err := b.normalizeConfiguration(config) if err != nil { return false, err @@ -55,15 +55,15 @@ func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast.Tok func (b *BoolCollector) normalizeConfiguration(configuration map[string]interface{}) (map[string]interface{}, error) { if _, ok := configuration["must"]; !ok { - configuration["must"] = make([]*config.CollectorConfig, 0) + configuration["must"] = make([]*config_contract.CollectorConfig, 0) } if _, ok := configuration["must_not"]; !ok { - configuration["must_not"] = make([]*config.CollectorConfig, 0) + configuration["must_not"] = make([]*config_contract.CollectorConfig, 0) } if len(configuration["must"].([]interface{})) == 0 && len(configuration["must_not"].([]interface{})) == 0 { - return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) + return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) } return configuration, nil diff --git a/pkg/core/layer/collector/class_collector.go b/pkg/layer_core/collector/class_collector.go similarity index 84% rename from pkg/core/layer/collector/class_collector.go rename to pkg/layer_core/collector/class_collector.go index 52b3285..6399ae6 100644 --- a/pkg/core/layer/collector/class_collector.go +++ b/pkg/layer_core/collector/class_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type ClassCollector struct { diff --git a/pkg/core/layer/collector/class_like_collector.go b/pkg/layer_core/collector/class_like_collector.go similarity index 85% rename from pkg/core/layer/collector/class_like_collector.go rename to pkg/layer_core/collector/class_like_collector.go index 9ee1ee3..32c6e1c 100644 --- a/pkg/core/layer/collector/class_like_collector.go +++ b/pkg/layer_core/collector/class_like_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type ClassLikeCollector struct { diff --git a/pkg/core/layer/collector/class_name_regex_collector.go b/pkg/layer_core/collector/class_name_regex_collector.go similarity index 56% rename from pkg/core/layer/collector/class_name_regex_collector.go rename to pkg/layer_core/collector/class_name_regex_collector.go index 62c9d6e..11b03c3 100644 --- a/pkg/core/layer/collector/class_name_regex_collector.go +++ b/pkg/layer_core/collector/class_name_regex_collector.go @@ -1,9 +1,9 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -17,8 +17,8 @@ func NewClassNameRegexCollector() *ClassNameRegexCollector { } } -func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.ClassLikeReference); !ok { +func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { return false, nil } @@ -27,12 +27,12 @@ func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, referenc return false, err } - return reference.GetToken().(*ast_map.ClassLikeToken).Match(validatedPattern), nil + return reference.GetToken().(*ast_map2.ClassLikeToken).Match(validatedPattern), nil } func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") } return config["value"].(string), nil diff --git a/pkg/layer_core/collector/collectable.go b/pkg/layer_core/collector/collectable.go new file mode 100644 index 0000000..f4f5013 --- /dev/null +++ b/pkg/layer_core/collector/collectable.go @@ -0,0 +1,14 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" +) + +type Collectable struct { + Collector layer_contract.CollectorInterface + Attributes map[string]interface{} +} + +func NewCollectable(collector layer_contract.CollectorInterface, attributes map[string]interface{}) *Collectable { + return &Collectable{Collector: collector, Attributes: attributes} +} diff --git a/pkg/layer_core/collector/collector_provider.go b/pkg/layer_core/collector/collector_provider.go new file mode 100644 index 0000000..7dc2751 --- /dev/null +++ b/pkg/layer_core/collector/collector_provider.go @@ -0,0 +1,33 @@ +package collector + +import ( + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "golang.org/x/exp/maps" +) + +type CollectorProvider struct { + collectors map[config_contract.CollectorType]layer_contract.CollectorInterface +} + +func NewCollectorProvider() *CollectorProvider { + return &CollectorProvider{} +} + +func (p *CollectorProvider) Set(collectors map[config_contract.CollectorType]layer_contract.CollectorInterface) *CollectorProvider { + p.collectors = collectors + return p +} + +func (p *CollectorProvider) Get(id config_contract.CollectorType) layer_contract.CollectorInterface { + return p.collectors[id] +} + +func (p *CollectorProvider) Has(id config_contract.CollectorType) bool { + _, ok := p.collectors[id] + return ok +} + +func (p *CollectorProvider) GetKnownCollectors() []config_contract.CollectorType { + return maps.Keys(p.collectors) +} diff --git a/pkg/core/layer/collector/collector_resolver.go b/pkg/layer_core/collector/collector_resolver.go similarity index 61% rename from pkg/core/layer/collector/collector_resolver.go rename to pkg/layer_core/collector/collector_resolver.go index 15fc2c5..1625d55 100644 --- a/pkg/core/layer/collector/collector_resolver.go +++ b/pkg/layer_core/collector/collector_resolver.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" ) type CollectorResolver struct { @@ -14,13 +14,13 @@ func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolv } func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*Collectable, error) { - classLikeType, err := config.NewCollectorTypeFromString(configMap["type"].(string)) + classLikeType, err := config_contract.NewCollectorTypeFromString(configMap["type"].(string)) if err != nil { return nil, err } if !c.collectorProvider.Has(classLikeType) { - return nil, layer.NewInvalidCollectorDefinitionExceptionUnsupportedType(classLikeType, c.collectorProvider.GetKnownCollectors(), nil) + return nil, layer_contract.NewInvalidCollectorDefinitionExceptionUnsupportedType(classLikeType, c.collectorProvider.GetKnownCollectors(), nil) } collector := c.collectorProvider.Get(classLikeType) diff --git a/pkg/core/layer/collector/collector_resolver_interface.go b/pkg/layer_core/collector/collector_resolver_interface.go similarity index 100% rename from pkg/core/layer/collector/collector_resolver_interface.go rename to pkg/layer_core/collector/collector_resolver_interface.go diff --git a/pkg/core/layer/collector/composer_collector.go b/pkg/layer_core/collector/composer_collector.go similarity index 70% rename from pkg/core/layer/collector/composer_collector.go rename to pkg/layer_core/collector/composer_collector.go index eb6c1b8..c477f1b 100644 --- a/pkg/core/layer/collector/composer_collector.go +++ b/pkg/layer_core/collector/composer_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -12,15 +12,15 @@ func NewComposerCollector() *ComposerCollector { return &ComposerCollector{} } -func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { if !util.MapKeyExists(config, "composerPath") || !util.MapKeyIsString(config, "composerPath") { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file as string.") + return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file_supportive as string.") } if !util.MapKeyExists(config, "composerLockPath") || !util.MapKeyIsString(config, "composerLockPath") { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file as string.") + return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file_supportive as string.") } if !util.MapKeyExists(config, "packages") || !util.MapKeyIsArrayOfStrings(config, "packages") { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") + return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") } // TODO: implement go.mod parsing diff --git a/pkg/core/layer/collector/directory_collector.go b/pkg/layer_core/collector/directory_collector.go similarity index 76% rename from pkg/core/layer/collector/directory_collector.go rename to pkg/layer_core/collector/directory_collector.go index f7a3e9b..24cdbdc 100644 --- a/pkg/core/layer/collector/directory_collector.go +++ b/pkg/layer_core/collector/directory_collector.go @@ -2,8 +2,8 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" "regexp" ) @@ -18,7 +18,7 @@ func NewDirectoryCollector() *DirectoryCollector { } } -func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { return false, nil @@ -42,7 +42,7 @@ func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference as func (c *DirectoryCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") } } diff --git a/pkg/core/layer/collector/directory_collector_test.go b/pkg/layer_core/collector/directory_collector_test.go similarity index 100% rename from pkg/core/layer/collector/directory_collector_test.go rename to pkg/layer_core/collector/directory_collector_test.go diff --git a/pkg/core/layer/collector/function_name_collector.go b/pkg/layer_core/collector/function_name_collector.go similarity index 56% rename from pkg/core/layer/collector/function_name_collector.go rename to pkg/layer_core/collector/function_name_collector.go index 529b174..bdf2c74 100644 --- a/pkg/core/layer/collector/function_name_collector.go +++ b/pkg/layer_core/collector/function_name_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -14,8 +14,8 @@ func NewFunctionNameCollector() *FunctionNameCollector { return &FunctionNameCollector{} } -func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.FunctionReference); !ok { +func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*ast_map2.FunctionReference); !ok { return false, nil } @@ -24,14 +24,14 @@ func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference return false, err } - tokenName := reference.GetToken().(*ast_map.FunctionToken) + tokenName := reference.GetToken().(*ast_map2.FunctionToken) return tokenName.Match(pattern), nil } func (c FunctionNameCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") } return fmt.Sprintf("/%s/i", config["value"].(string)), nil diff --git a/pkg/core/layer/collector/glob_collector.go b/pkg/layer_core/collector/glob_collector.go similarity index 78% rename from pkg/core/layer/collector/glob_collector.go rename to pkg/layer_core/collector/glob_collector.go index 24bfb98..8eccbc1 100644 --- a/pkg/core/layer/collector/glob_collector.go +++ b/pkg/layer_core/collector/glob_collector.go @@ -1,8 +1,8 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" filepath2 "path/filepath" "regexp" @@ -20,7 +20,7 @@ func NewGlobCollector(basePath string) *GlobCollector { } } -func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { @@ -49,7 +49,7 @@ func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast.Tok func (c *GlobCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") } return util.GlogToRegex(config["value"].(string)), nil diff --git a/pkg/core/layer/collector/inheritance_level_collector.go b/pkg/layer_core/collector/inheritance_level_collector.go similarity index 54% rename from pkg/core/layer/collector/inheritance_level_collector.go rename to pkg/layer_core/collector/inheritance_level_collector.go index cda2924..2ca2e4f 100644 --- a/pkg/core/layer/collector/inheritance_level_collector.go +++ b/pkg/layer_core/collector/inheritance_level_collector.go @@ -1,19 +1,19 @@ package collector import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) type InheritanceLevelCollector struct { - astMapExtractor *ast.AstMapExtractor - astMap *ast_map.AstMap + astMapExtractor *ast_core.AstMapExtractor + astMap *ast_map2.AstMap } -func NewInheritanceLevelCollector(astMapExtractor *ast.AstMapExtractor) (*InheritanceLevelCollector, error) { +func NewInheritanceLevelCollector(astMapExtractor *ast_core.AstMapExtractor) (*InheritanceLevelCollector, error) { astMap, err := astMapExtractor.Extract() if err != nil { return nil, err @@ -25,14 +25,14 @@ func NewInheritanceLevelCollector(astMapExtractor *ast.AstMapExtractor) (*Inheri } func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { return false, nil } - classInherits := c.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) + classInherits := c.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) if !util.MapKeyExists(config, "value") || util.MapKeyIsInt(config, "value") { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") + return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") } depth := config["value"].(int) diff --git a/pkg/core/layer/collector/inherits_collector.go b/pkg/layer_core/collector/inherits_collector.go similarity index 51% rename from pkg/core/layer/collector/inherits_collector.go rename to pkg/layer_core/collector/inherits_collector.go index e6523d5..1c6516e 100644 --- a/pkg/core/layer/collector/inherits_collector.go +++ b/pkg/layer_core/collector/inherits_collector.go @@ -1,19 +1,19 @@ package collector import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) type InheritsCollector struct { - astMapExtractor *ast.AstMapExtractor - astMap *ast_map.AstMap + astMapExtractor *ast_core.AstMapExtractor + astMap *ast_map2.AstMap } -func NewInheritsCollector(astMapExtractor *ast.AstMapExtractor) (*InheritsCollector, error) { +func NewInheritsCollector(astMapExtractor *ast_core.AstMapExtractor) (*InheritsCollector, error) { astMap, err := astMapExtractor.Extract() if err != nil { return nil, err @@ -25,7 +25,7 @@ func NewInheritsCollector(astMapExtractor *ast.AstMapExtractor) (*InheritsCollec } func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.ClassLikeReference); !ok { + if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { return false, nil } @@ -34,7 +34,7 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference ast return false, err } - for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*ast_map.ClassLikeToken)) { + for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) { if inherit.ClassLikeName.Equals(classLikeName) { return true, nil } @@ -43,10 +43,10 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference ast return false, nil } -func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*ast_map.ClassLikeToken, error) { +func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*ast_map2.ClassLikeToken, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") + return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") } - return ast_map.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return ast_map2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/core/layer/collector/interface_collector.go b/pkg/layer_core/collector/interface_collector.go similarity index 85% rename from pkg/core/layer/collector/interface_collector.go rename to pkg/layer_core/collector/interface_collector.go index 895f96d..2fd819d 100644 --- a/pkg/core/layer/collector/interface_collector.go +++ b/pkg/layer_core/collector/interface_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type InterfaceCollector struct { diff --git a/pkg/core/layer/collector/layer_collector.go b/pkg/layer_core/collector/layer_collector.go similarity index 63% rename from pkg/core/layer/collector/layer_collector.go rename to pkg/layer_core/collector/layer_collector.go index 8dfa55b..7075470 100644 --- a/pkg/core/layer/collector/layer_collector.go +++ b/pkg/layer_core/collector/layer_collector.go @@ -2,9 +2,9 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + layer_contract2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -19,10 +19,10 @@ func NewLayerCollector(resolver layer_resolver_interface.LayerResolverInterface) } } -func (c *LayerCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c *LayerCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("LayerCollector needs the layer configuration, expected 'value' config is missing or invalid.") + return false, layer_contract2.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") } } @@ -33,14 +33,14 @@ func (c *LayerCollector) Satisfy(config map[string]interface{}, reference ast.To return false, err } if !hasInResolver { - return false, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer \"%s\" specified in collector.", configValueLayer)) + return false, layer_contract2.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer_contract \"%s\" specified in collector.", configValueLayer)) } token := reference.GetToken().ToString() if util.MapKeyExists(c.resolved, token) && util.MapKeyExists(c.resolved[token], configValueLayer) { if c.resolved[token][configValueLayer] == nil { - return false, layer.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) + return false, layer_contract2.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) } return *c.resolved[token][configValueLayer], nil diff --git a/pkg/core/layer/collector/method_collector.go b/pkg/layer_core/collector/method_collector.go similarity index 75% rename from pkg/core/layer/collector/method_collector.go rename to pkg/layer_core/collector/method_collector.go index 3807b83..b7130be 100644 --- a/pkg/core/layer/collector/method_collector.go +++ b/pkg/layer_core/collector/method_collector.go @@ -2,10 +2,10 @@ package collector import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -21,7 +21,7 @@ func NewMethodCollector(astParser *nikic_php_parser.NikicPhpParser) *MethodColle } } -func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { if _, ok := reference.(*ast_map.ClassLikeReference); !ok { return false, nil } @@ -48,7 +48,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast.T func (c *MethodCollector) GetPattern(config map[string]interface{}) (string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") } return fmt.Sprintf("/%s/i", config["value"].(string)), nil } diff --git a/pkg/core/layer/collector/regex_collector.go b/pkg/layer_core/collector/regex_collector.go similarity index 71% rename from pkg/core/layer/collector/regex_collector.go rename to pkg/layer_core/collector/regex_collector.go index dbfc81b..dbf1949 100644 --- a/pkg/core/layer/collector/regex_collector.go +++ b/pkg/layer_core/collector/regex_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "regexp" ) @@ -18,7 +18,7 @@ func (c *RegexCollector) GetValidatedPattern(config map[string]interface{}, getP } if _, err = regexp.Compile(pattern); err != nil { - return "", layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) + return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) } return pattern, nil diff --git a/pkg/core/layer/collector/superglobal_collector.go b/pkg/layer_core/collector/superglobal_collector.go similarity index 67% rename from pkg/core/layer/collector/superglobal_collector.go rename to pkg/layer_core/collector/superglobal_collector.go index d75b7de..c03bdb8 100644 --- a/pkg/core/layer/collector/superglobal_collector.go +++ b/pkg/layer_core/collector/superglobal_collector.go @@ -1,9 +1,9 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" "github.com/KoNekoD/go-deptrac/pkg/util" ) @@ -13,7 +13,7 @@ func NewSuperglobalCollector() *SuperglobalCollector { return &SuperglobalCollector{} } -func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference ast.TokenReferenceInterface) (bool, error) { +func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { if _, ok := reference.(*ast_map.VariableReference); !ok { return false, nil } @@ -34,7 +34,7 @@ func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference a func (c SuperglobalCollector) getNames(config map[string]interface{}) ([]string, error) { if !util.MapKeyExists(config, "value") || !util.MapKeyIsArrayOfStrings(config, "value") { - return nil, layer.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") + return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") } return config["value"].([]string), nil diff --git a/pkg/core/layer/collector/trait_collector.go b/pkg/layer_core/collector/trait_collector.go similarity index 84% rename from pkg/core/layer/collector/trait_collector.go rename to pkg/layer_core/collector/trait_collector.go index 7249ac9..de77fbb 100644 --- a/pkg/core/layer/collector/trait_collector.go +++ b/pkg/layer_core/collector/trait_collector.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/KoNekoD/go-deptrac/pkg/core/ast/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" ) type TraitCollector struct { diff --git a/pkg/layer_core/collector/uses_collector.go b/pkg/layer_core/collector/uses_collector.go new file mode 100644 index 0000000..fad679c --- /dev/null +++ b/pkg/layer_core/collector/uses_collector.go @@ -0,0 +1,52 @@ +package collector + +import ( + astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_core" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/util" +) + +type UsesCollector struct { + astMapExtractor *ast_core.AstMapExtractor + astMap *ast_map2.AstMap +} + +func NewUsesCollector(astMapExtractor *ast_core.AstMapExtractor) (*UsesCollector, error) { + astMap, err := astMapExtractor.Extract() + if err != nil { + return nil, err + } + return &UsesCollector{ + astMapExtractor: astMapExtractor, + astMap: astMap, + }, nil +} + +func (u *UsesCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { + return false, nil + } + + traitName, err := u.getTraitName(config) + if err != nil { + return false, err + } + + for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) { + if ast_map2.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { + return true, nil + } + } + + return false, nil +} + +func (u *UsesCollector) getTraitName(config map[string]interface{}) (*ast_map2.ClassLikeToken, error) { + if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { + return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") + } + + return ast_map2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil +} diff --git a/pkg/core/layer/layer_resolver.go b/pkg/layer_core/layer_resolver.go similarity index 67% rename from pkg/core/layer/layer_resolver.go rename to pkg/layer_core/layer_resolver.go index 1d709bb..ffb2c31 100644 --- a/pkg/core/layer/layer_resolver.go +++ b/pkg/layer_core/layer_resolver.go @@ -1,37 +1,37 @@ -package layer +package layer_core import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/config" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/config_contract" + collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" + "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" "reflect" "sync" ) -// LayerResolver - LayerResolverInterface defines the structure for a layer resolver +// LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { - collectorResolver collector.CollectorResolverInterface - layersConfig []*config.Layer - layers map[string][]*collector.Collectable + collectorResolver collector2.CollectorResolverInterface + layersConfig []*config_contract.Layer + layers map[string][]*collector2.Collectable initialized bool resolved map[string]map[string]bool mu sync.Mutex } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collector.CollectorResolverInterface, layersConfig []*config.Layer) layer_resolver_interface.LayerResolverInterface { +func NewLayerResolver(collectorResolver collector2.CollectorResolverInterface, layersConfig []*config_contract.Layer) layer_resolver_interface.LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, - layers: make(map[string][]*collector.Collectable), + layers: make(map[string][]*collector2.Collectable), resolved: make(map[string]map[string]bool), } } // GetLayersForReference retrieves layers for a given reference -func (r *LayerResolver) GetLayersForReference(reference ast.TokenReferenceInterface) (map[string]bool, error) { +func (r *LayerResolver) GetLayersForReference(reference ast_contract.TokenReferenceInterface) (map[string]bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -42,7 +42,7 @@ func (r *LayerResolver) GetLayersForReference(reference ast.TokenReferenceInterf } } - // TODO: We need to correctly handle cases ( go/ast external packages and other ) + // TODO: We need to correctly handle cases ( go/ast_contract external packages and other ) if reference == nil || reflect.ValueOf(reference).IsNil() { return make(map[string]bool), nil } @@ -75,8 +75,8 @@ func (r *LayerResolver) GetLayersForReference(reference ast.TokenReferenceInterf return r.resolved[tokenName], nil } -// IsReferenceInLayer checks if a reference is in a given layer -func (r *LayerResolver) IsReferenceInLayer(layer string, reference ast.TokenReferenceInterface) (bool, error) { +// IsReferenceInLayer checks if a reference is in a given layer_contract +func (r *LayerResolver) IsReferenceInLayer(layer string, reference ast_contract.TokenReferenceInterface) (bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -111,7 +111,7 @@ func (r *LayerResolver) IsReferenceInLayer(layer string, reference ast.TokenRefe return false, nil } -// Has checks if a layer exists +// Has checks if a layer_contract exists func (r *LayerResolver) Has(layer string) (bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -128,14 +128,14 @@ func (r *LayerResolver) Has(layer string) (bool, error) { // initializeLayers initializes the layers from the configuration func (r *LayerResolver) initializeLayers() error { - r.layers = make(map[string][]*collector.Collectable) + r.layers = make(map[string][]*collector2.Collectable) for _, layer := range r.layersConfig { layerName := layer.Name if _, exists := r.layers[layerName]; exists { - return errors.New("invalid layer definition: duplicate name " + layerName) + return errors.New("invalid layer_contract definition: duplicate name " + layerName) } - r.layers[layerName] = []*collector.Collectable{} + r.layers[layerName] = []*collector2.Collectable{} for _, config := range layer.Collectors { resolvedCollector, err := r.collectorResolver.Resolve(config.ToArray()) @@ -147,12 +147,12 @@ func (r *LayerResolver) initializeLayers() error { } if len(r.layers[layerName]) == 0 { - return errors.New("invalid layer definition: collector required for " + layerName) + return errors.New("invalid layer_contract definition: collector required for " + layerName) } } if len(r.layers) == 0 { - return errors.New("invalid layer definition: at least one layer is required") + return errors.New("invalid layer_contract definition: at least one layer_contract is required") } r.initialized = true diff --git a/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go b/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go new file mode 100644 index 0000000..31badc4 --- /dev/null +++ b/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go @@ -0,0 +1,14 @@ +package layer_resolver_interface + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" +) + +type LayerResolverInterface interface { + // GetLayersForReference - Returns a layer_contract name and whether the dependency_contract is public(true) or private(false) + GetLayersForReference(reference ast_contract.TokenReferenceInterface) (map[string]bool, error) + + IsReferenceInLayer(layer string, reference ast_contract.TokenReferenceInterface) (bool, error) + + Has(layer string) (bool, error) +} diff --git a/pkg/contract/output_formatter/output_exception.go b/pkg/output_formatter_contract/output_exception.go similarity index 88% rename from pkg/contract/output_formatter/output_exception.go rename to pkg/output_formatter_contract/output_exception.go index 386ad4d..1b73015 100644 --- a/pkg/contract/output_formatter/output_exception.go +++ b/pkg/output_formatter_contract/output_exception.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_contract // OutputException - Thrown when you are unable to provide output with your custom OutputFormatter. type OutputException struct { diff --git a/pkg/contract/output_formatter/output_formatter_input.go b/pkg/output_formatter_contract/output_formatter_input.go similarity index 92% rename from pkg/contract/output_formatter/output_formatter_input.go rename to pkg/output_formatter_contract/output_formatter_input.go index edf0824..2908eb5 100644 --- a/pkg/contract/output_formatter/output_formatter_input.go +++ b/pkg/output_formatter_contract/output_formatter_input.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_contract type OutputFormatterInput struct { OutputPath *string diff --git a/pkg/contract/output_formatter/output_formatter_interface.go b/pkg/output_formatter_contract/output_formatter_interface.go similarity index 71% rename from pkg/contract/output_formatter/output_formatter_interface.go rename to pkg/output_formatter_contract/output_formatter_interface.go index efa37be..6f65fce 100644 --- a/pkg/contract/output_formatter/output_formatter_interface.go +++ b/pkg/output_formatter_contract/output_formatter_interface.go @@ -1,13 +1,13 @@ -package output_formatter +package output_formatter_contract import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" ) type OutputFormatterInterface interface { // GetName - used as an identifier to access to the formatter or to display something more user-friendly to the user when referring to the formatter GetName() OutputFormatterType - // Finish - Renders the final result. + // Finish - Renders the final result_contract. Finish(result *output_result.OutputResult, output OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/contract/output_formatter/output_formatter_type.go b/pkg/output_formatter_contract/output_formatter_type.go similarity index 94% rename from pkg/contract/output_formatter/output_formatter_type.go rename to pkg/output_formatter_contract/output_formatter_type.go index 7dd7f98..2397f51 100644 --- a/pkg/contract/output_formatter/output_formatter_type.go +++ b/pkg/output_formatter_contract/output_formatter_type.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_contract import "errors" diff --git a/pkg/contract/output_formatter/output_interface.go b/pkg/output_formatter_contract/output_interface.go similarity index 88% rename from pkg/contract/output_formatter/output_interface.go rename to pkg/output_formatter_contract/output_interface.go index 0936973..96841ec 100644 --- a/pkg/contract/output_formatter/output_interface.go +++ b/pkg/output_formatter_contract/output_interface.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_contract // OutputInterface - Wrapper around Symfony OutputInterface. type OutputInterface interface { diff --git a/pkg/contract/output_formatter/output_style_interface.go b/pkg/output_formatter_contract/output_style_interface.go similarity index 97% rename from pkg/contract/output_formatter/output_style_interface.go rename to pkg/output_formatter_contract/output_style_interface.go index ea489a4..d2263f4 100644 --- a/pkg/contract/output_formatter/output_style_interface.go +++ b/pkg/output_formatter_contract/output_style_interface.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_contract import "strings" diff --git a/pkg/supportive/output_formatter/baseline_output_formatter.go b/pkg/output_formatter_supportive/baseline_output_formatter.go similarity index 69% rename from pkg/supportive/output_formatter/baseline_output_formatter.go rename to pkg/output_formatter_supportive/baseline_output_formatter.go index 5f8c024..1fb0ca3 100644 --- a/pkg/supportive/output_formatter/baseline_output_formatter.go +++ b/pkg/output_formatter_supportive/baseline_output_formatter.go @@ -1,9 +1,9 @@ -package output_formatter +package output_formatter_supportive import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/gookit/color" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" @@ -20,7 +20,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -36,7 +36,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResul if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { if err := os.MkdirAll(dirname, 0777); err != nil { if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) return err } } @@ -52,14 +52,14 @@ func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResul return err } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) return nil } func (b *BaselineOutputFormatter) collectViolations(outputResult *output_result.OutputResult) map[string][]string { violations := make(map[string]map[string]string) - for _, rule := range append(outputResult.AllOf(result.TypeViolation), outputResult.AllOf(result.TypeSkippedViolation)...) { + for _, rule := range append(outputResult.AllOf(result_contract.TypeViolation), outputResult.AllOf(result_contract.TypeSkippedViolation)...) { dependency := rule.GetDependency() dependerClass := dependency.GetDepender().ToString() dependentClass := dependency.GetDependent().ToString() diff --git a/pkg/supportive/output_formatter/codeclimate_output_formatter.go b/pkg/output_formatter_supportive/codeclimate_output_formatter.go similarity index 57% rename from pkg/supportive/output_formatter/codeclimate_output_formatter.go rename to pkg/output_formatter_supportive/codeclimate_output_formatter.go index 28748cd..49ba107 100644 --- a/pkg/supportive/output_formatter/codeclimate_output_formatter.go +++ b/pkg/output_formatter_supportive/codeclimate_output_formatter.go @@ -1,23 +1,23 @@ -package output_formatter +package output_formatter_supportive import ( "crypto/sha1" "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + configuration2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/KoNekoD/go-deptrac/pkg/util" "os" ) type CodeclimateOutputFormatter struct { - config map[configuration.SeverityType]interface{} + config map[configuration2.SeverityType]interface{} } -func NewCodeclimateOutputFormatter(config configuration.FormatterConfiguration) *CodeclimateOutputFormatter { - extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configuration.SeverityType]interface{}) +func NewCodeclimateOutputFormatter(config configuration2.FormatterConfiguration) *CodeclimateOutputFormatter { + extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configuration2.SeverityType]interface{}) return &CodeclimateOutputFormatter{config: extractedConfig} } @@ -25,24 +25,24 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { - formatterConfig := configuration.NewConfigurationCodeclimateFromArray(f.config) +func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { + formatterConfig := configuration2.NewConfigurationCodeclimateFromArray(f.config) var violations []map[string]interface{} if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { - f.addSkipped(&violations, rule.(*result.SkippedViolation), formatterConfig) + for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { + f.addSkipped(&violations, rule.(*result_contract2.SkippedViolation), formatterConfig) } } if input.ReportUncovered { - for _, rule := range outputResult.AllOf(result.TypeUncovered) { - f.addUncovered(&violations, rule.(*result.Uncovered), formatterConfig) + for _, rule := range outputResult.AllOf(result_contract2.TypeUncovered) { + f.addUncovered(&violations, rule.(*result_contract2.Uncovered), formatterConfig) } } - for _, rule := range outputResult.AllOf(result.TypeViolation) { - f.addFailure(&violations, rule.(*result.Violation), formatterConfig) + for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { + f.addFailure(&violations, rule.(*result_contract2.Violation), formatterConfig) } jsonData, err := json.MarshalIndent(violations, "", " ") @@ -55,7 +55,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputRes if err != nil { return err } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) return nil } @@ -63,34 +63,34 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputRes return nil } -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *result.Violation, config *configuration.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *result_contract2.Violation, config *configuration2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) } -func (f *CodeclimateOutputFormatter) getFailureMessage(violation *result.Violation) *string { +func (f *CodeclimateOutputFormatter) getFailureMessage(violation *result_contract2.Violation) *string { dependency := violation.GetDependency() return util.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *result.SkippedViolation, config *configuration.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *result_contract2.SkippedViolation, config *configuration2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) } -func (f *CodeclimateOutputFormatter) getWarningMessage(violation *result.SkippedViolation) *string { +func (f *CodeclimateOutputFormatter) getWarningMessage(violation *result_contract2.SkippedViolation) *string { dependency := violation.GetDependency() return util.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *result.Uncovered, config *configuration.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *result_contract2.Uncovered, config *configuration2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) } -func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *result.Uncovered) *string { +func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *result_contract2.Uncovered) *string { dependency := violation.GetDependency() - return util.AsPtr(fmt.Sprintf("%s has uncovered dependency on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) + return util.AsPtr(fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) } -func (f *CodeclimateOutputFormatter) buildRuleArray(rule result.RuleInterface, message, severity *string) map[string]interface{} { +func (f *CodeclimateOutputFormatter) buildRuleArray(rule result_contract2.RuleInterface, message, severity *string) map[string]interface{} { return map[string]interface{}{ "type": "issue", "check_name": "Dependency violation", @@ -107,7 +107,7 @@ func (f *CodeclimateOutputFormatter) buildRuleArray(rule result.RuleInterface, m } } -func (f *CodeclimateOutputFormatter) buildFingerprint(rule result.RuleInterface) string { +func (f *CodeclimateOutputFormatter) buildFingerprint(rule result_contract2.RuleInterface) string { data := fmt.Sprintf("%s,%s,%s,%s,%d", rule, rule.GetDependency().GetDepender(), diff --git a/pkg/supportive/output_formatter/configuration/configuration_codeclimate.go b/pkg/output_formatter_supportive/configuration/configuration_codeclimate.go similarity index 100% rename from pkg/supportive/output_formatter/configuration/configuration_codeclimate.go rename to pkg/output_formatter_supportive/configuration/configuration_codeclimate.go diff --git a/pkg/supportive/output_formatter/configuration/configuration_graph_viz.go b/pkg/output_formatter_supportive/configuration/configuration_graph_viz.go similarity index 100% rename from pkg/supportive/output_formatter/configuration/configuration_graph_viz.go rename to pkg/output_formatter_supportive/configuration/configuration_graph_viz.go diff --git a/pkg/output_formatter_supportive/configuration/formatter_configuration.go b/pkg/output_formatter_supportive/configuration/formatter_configuration.go new file mode 100644 index 0000000..8d4b11b --- /dev/null +++ b/pkg/output_formatter_supportive/configuration/formatter_configuration.go @@ -0,0 +1,17 @@ +package configuration + +import ( + formatter2 "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" +) + +type FormatterConfiguration struct { + config map[formatter2.FormatterType]formatter2.FormatterConfigInterface +} + +func NewFormatterConfiguration(config map[formatter2.FormatterType]formatter2.FormatterConfigInterface) *FormatterConfiguration { + return &FormatterConfiguration{config: config} +} + +func (f *FormatterConfiguration) GetConfigFor(area formatter2.FormatterType) formatter2.FormatterConfigInterface { + return f.config[area] +} diff --git a/pkg/output_formatter_supportive/console_output_formatter.go b/pkg/output_formatter_supportive/console_output_formatter.go new file mode 100644 index 0000000..cd60a04 --- /dev/null +++ b/pkg/output_formatter_supportive/console_output_formatter.go @@ -0,0 +1,160 @@ +package output_formatter_supportive + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "strings" +) + +type ConsoleOutputFormatter struct{} + +func NewConsoleOutputFormatter() *ConsoleOutputFormatter { + return &ConsoleOutputFormatter{} +} + +func (f *ConsoleOutputFormatter) GetName() string { + return "console_supportive" +} + +func (f *ConsoleOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) { + for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { + f.printViolation(rule.(*result_contract2.Violation), output) + } + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { + f.printViolation(rule.(*result_contract2.SkippedViolation), output) + } + } + + if input.ReportUncovered { + f.printUncovered(outputResult, output) + } + + if outputResult.HasErrors() { + f.printErrors(outputResult, output) + } + + if outputResult.HasWarnings() { + f.printWarnings(outputResult, output) + } + + f.printSummary(outputResult, output) +} + +func (f *ConsoleOutputFormatter) printViolation(rule result_contract2.RuleInterface, output output_formatter_contract2.OutputInterface) { + dep := rule.GetDependency() + skippedText := "" + + dependerLayer := "" + dependentLayer := "" + + if ruleAsserted, ok := rule.(*result_contract2.SkippedViolation); ok { + skippedText = "[SKIPPED] " + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else if ruleAsserted, ok := rule.(*result_contract2.Violation); ok { + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else { + panic(fmt.Errorf("unknown rule type: %T", rule)) + } + + output.WriteLineFormatted( + output_formatter_contract2.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", + skippedText, + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + dependerLayer, + dependentLayer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } +} + +func (f *ConsoleOutputFormatter) printMultilinePath(output output_formatter_contract2.OutputInterface, dep dependency_contract.DependencyInterface) { + var buffer strings.Builder + for _, depSerialized := range dep.Serialize() { + buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) + } + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: buffer.String()}) +} + +func (f *ConsoleOutputFormatter) printSummary(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { + violationCount := len(result.Violations()) + skippedViolationCount := len(result.SkippedViolations()) + uncoveredCount := len(result.Uncovered()) + allowedCount := len(result.Allowed()) + warningsCount := len(result.Warnings) + errorsCount := len(result.Errors) + + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) +} + +func (f *ConsoleOutputFormatter) printUncovered(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { + uncovered := result.Uncovered() + if len(uncovered) == 0 { + return + } + + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + for _, u := range uncovered { + dep := u.GetDependency() + output.WriteLineFormatted( + output_formatter_contract2.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + u.Layer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } + } +} + +func (f *ConsoleOutputFormatter) printFileOccurrence(output output_formatter_contract2.OutputInterface, fileOccurrence *ast_contract.FileOccurrence) { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +} + +func (f *ConsoleOutputFormatter) printErrors(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) + for _, err := range result.Errors { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + } +} + +func (f *ConsoleOutputFormatter) printWarnings(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) + for _, warning := range result.Warnings { + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + } +} + +func (f *ConsoleOutputFormatter) getColor(condition bool, trueColor, falseColor string) string { + if condition { + return trueColor + } + return falseColor +} diff --git a/pkg/output_formatter_supportive/formatter_provider.go b/pkg/output_formatter_supportive/formatter_provider.go new file mode 100644 index 0000000..c1852d5 --- /dev/null +++ b/pkg/output_formatter_supportive/formatter_provider.go @@ -0,0 +1,37 @@ +package output_formatter_supportive + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "golang.org/x/exp/maps" + "reflect" +) + +type FormatterProvider struct { + formatterLocator map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface +} + +func NewFormatterProvider(formatterLocator map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface) *FormatterProvider { + return &FormatterProvider{ + formatterLocator: formatterLocator, + } +} + +func (f *FormatterProvider) Get(id output_formatter_contract2.OutputFormatterType) (output_formatter_contract2.OutputFormatterInterface, error) { + service, ok := f.formatterLocator[id] + + if !ok { + return nil, InvalidServiceInLocatorException.NewInvalidServiceInLocatorExceptionInvalidType(id, reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") + } + + return service, nil +} + +func (f *FormatterProvider) Has(id output_formatter_contract2.OutputFormatterType) bool { + _, ok := f.formatterLocator[id] + return ok +} + +func (f *FormatterProvider) GetKnownFormatters() []output_formatter_contract2.OutputFormatterType { + return maps.Keys(f.formatterLocator) +} diff --git a/pkg/supportive/output_formatter/github_actions_output_formatter.go b/pkg/output_formatter_supportive/github_actions_output_formatter.go similarity index 56% rename from pkg/supportive/output_formatter/github_actions_output_formatter.go rename to pkg/output_formatter_supportive/github_actions_output_formatter.go index d28316f..50ca2c8 100644 --- a/pkg/supportive/output_formatter/github_actions_output_formatter.go +++ b/pkg/output_formatter_supportive/github_actions_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "strings" ) @@ -15,16 +15,16 @@ func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { return &GithubActionsOutputFormatter{} } -func (g *GithubActionsOutputFormatter) GetName() output_formatter.OutputFormatterType { - return output_formatter.GithubActions +func (g *GithubActionsOutputFormatter) GetName() output_formatter_contract2.OutputFormatterType { + return output_formatter_contract2.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { - for _, rule := range outputResult.AllOf(result.TypeViolation) { +func (g *GithubActionsOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { + for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { g.printViolation(rule, output) } if outputFormatterInput.ReportSkipped { - for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { + for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { g.printViolation(rule, output) } } @@ -41,18 +41,18 @@ func (g *GithubActionsOutputFormatter) Finish(outputResult *output_result.Output return nil } -func (g *GithubActionsOutputFormatter) determineLogLevel(rule result.RuleInterface) string { +func (g *GithubActionsOutputFormatter) determineLogLevel(rule result_contract2.RuleInterface) string { switch rule.(type) { - case *result.Violation: + case *result_contract2.Violation: return "error" - case *result.SkippedViolation: + case *result_contract2.SkippedViolation: return "warning" default: return "debug" } } -func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.OutputResult, output output_formatter.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -62,9 +62,9 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.Outp } output.WriteLineFormatted( - output_formatter.StringOrArrayOfStrings{ + output_formatter_contract2.StringOrArrayOfStrings{ String: fmt.Sprintf( - "::%s file=%s,line=%d::%s has uncovered dependency on %s (%s)", + "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", reportAs, dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, @@ -77,7 +77,7 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.Outp } } -func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependency.DependencyInterface) string { +func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependency_contract.DependencyInterface) string { lines := make([]string, 0) for _, serializedDependency := range dep.Serialize() { lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) @@ -85,29 +85,29 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependency.Depen return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { for _, e := range result.Errors { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { for _, warning := range result.Warnings { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } } -func (g *GithubActionsOutputFormatter) printViolation(rule result.RuleInterface, output output_formatter.OutputInterface) { +func (g *GithubActionsOutputFormatter) printViolation(rule result_contract2.RuleInterface, output output_formatter_contract2.OutputInterface) { dependency := rule.GetDependency() prefix := "" dependerLayer := "" dependentLayer := "" switch v := rule.(type) { - case *result.SkippedViolation: + case *result_contract2.SkippedViolation: prefix = "[SKIPPED] " dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() - case *result.Violation: + case *result_contract2.Violation: dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() } @@ -116,5 +116,5 @@ func (g *GithubActionsOutputFormatter) printViolation(rule result.RuleInterface, message += "%0A" + g.multilinePathMessage(dependency) } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) } diff --git a/pkg/supportive/output_formatter/graph_viz_output_display_formatter.go b/pkg/output_formatter_supportive/graph_viz_output_display_formatter.go similarity index 74% rename from pkg/supportive/output_formatter/graph_viz_output_display_formatter.go rename to pkg/output_formatter_supportive/graph_viz_output_display_formatter.go index 859dae6..f8267b7 100644 --- a/pkg/supportive/output_formatter/graph_viz_output_display_formatter.go +++ b/pkg/output_formatter_supportive/graph_viz_output_display_formatter.go @@ -1,9 +1,9 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" "os/exec" "runtime" "time" @@ -28,10 +28,10 @@ func (f *GraphVizOutputDisplayFormatter) GetName() string { return "graphviz-display" } -func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { - return fmt.Errorf("unable to create temp file for output: %v", err) + return fmt.Errorf("unable to create temp file_supportive for output: %v", err) } staticNext := time.Now() diff --git a/pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go b/pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go similarity index 62% rename from pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go rename to pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go index 547a355..a59380d 100644 --- a/pkg/supportive/output_formatter/graph_viz_output_dot_formatter.go +++ b/pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go @@ -1,9 +1,9 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" "os" "path/filepath" @@ -25,7 +25,7 @@ func (f *GraphVizOutputDotFormatter) GetName() string { return "graphviz-dot" } -func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { dumpDotPath := input.OutputPath if dumpDotPath == nil || *dumpDotPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -38,11 +38,11 @@ func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph. return fmt.Errorf("unable to render graph to DOT format: %v", err) } - // Write the DOT data to the specified file + // Write the DOT data to the specified file_supportive //if err := os.WriteFile(dumpDotPath, dotData, 0644); err != nil { - // return fmt.Errorf("unable to write DOT data to file: %v", err) + // return fmt.Errorf("unable to write DOT data to file_supportive: %v", err) //} - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) return nil } diff --git a/pkg/supportive/output_formatter/graph_viz_output_formatter.go b/pkg/output_formatter_supportive/graph_viz_output_formatter.go similarity index 71% rename from pkg/supportive/output_formatter/graph_viz_output_formatter.go rename to pkg/output_formatter_supportive/graph_viz_output_formatter.go index dc5fe07..9946c9c 100644 --- a/pkg/supportive/output_formatter/graph_viz_output_formatter.go +++ b/pkg/output_formatter_supportive/graph_viz_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + configuration2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -14,15 +14,15 @@ import ( ) type GraphVizOutputFormatter struct { - config configuration.ConfigurationGraphViz + config configuration2.ConfigurationGraphViz } -func NewGraphVizOutputFormatter(config configuration.FormatterConfiguration) *GraphVizOutputFormatter { - extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configuration.ConfigurationGraphViz) +func NewGraphVizOutputFormatter(config configuration2.FormatterConfiguration) *GraphVizOutputFormatter { + extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configuration2.ConfigurationGraphViz) return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) @@ -49,7 +49,7 @@ func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, outp return nil } -func (f *GraphVizOutputFormatter) calculateViolations(violations []*result.Violation) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateViolations(violations []*result_contract2.Violation) map[string]map[string]int { layerViolations := make(map[string]map[string]int) for _, violation := range violations { dependerLayer := violation.GetDependerLayer() @@ -64,11 +64,11 @@ func (f *GraphVizOutputFormatter) calculateViolations(violations []*result.Viola return layerViolations } -func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result.RuleInterface) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result_contract2.RuleInterface) map[string]map[string]int { layersDependOnLayers := make(map[string]map[string]int) for _, rule := range rules { switch r := rule.(type) { - case result.CoveredRuleInterface: + case result_contract2.CoveredRuleInterface: layerA := r.GetDependerLayer() layerB := r.GetDependentLayer() @@ -77,7 +77,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result.Rule } layersDependOnLayers[layerA][layerB]++ - case *result.Uncovered: + case *result_contract2.Uncovered: if layersDependOnLayers[r.Layer] == nil { layersDependOnLayers[r.Layer] = make(map[string]int) } @@ -86,7 +86,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result.Rule return layersDependOnLayers } -func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { +func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration2.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { nodes := make(map[string]*cgraph.Node) for layer, layersDependOn := range layersDependOnLayers { if slices.Contains(outputConfig.HiddenLayers, layer) { @@ -107,7 +107,7 @@ func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration.Configu return nodes } -func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { +func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration2.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { for layer, layersDependOn := range layersDependOnLayers { if slices.Contains(outputConfig.HiddenLayers, layer) { continue @@ -130,7 +130,7 @@ func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[st } } -func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration.ConfigurationGraphViz) { +func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration2.ConfigurationGraphViz) { for groupName, groupLayerNames := range outputConfig.GroupsLayerMap { subgraph := graph.SubGraph(f.getSubgraphName(groupName), 1) subgraph.SetLabel(groupName) @@ -148,33 +148,33 @@ func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map } } -func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { - return fmt.Errorf("unable to create temp file for output: %v", err) + return fmt.Errorf("unable to create temp file_supportive for output: %v", err) } if input.OutputPath != nil && *input.OutputPath != "" { if err := os.Rename(filename, *input.OutputPath); err != nil { - return fmt.Errorf("unable to move temp file to output path: %v", err) + return fmt.Errorf("unable to move temp file_supportive to output path: %v", err) } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) return nil } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) return nil } func (f *GraphVizOutputFormatter) getTempImage(g *graphviz.Graphviz, graph *cgraph.Graph) (string, error) { tempFile, err := os.CreateTemp("", "deptrac-*.png") if err != nil { - return "", fmt.Errorf("unable to create temp file: %v", err) + return "", fmt.Errorf("unable to create temp file_supportive: %v", err) } defer func(tempFile *os.File) { err := tempFile.Close() if err != nil { - fmt.Printf("unable to close temp file: %v", err) + fmt.Printf("unable to close temp file_supportive: %v", err) } }(tempFile) diff --git a/pkg/supportive/output_formatter/graph_viz_output_html_formatter.go b/pkg/output_formatter_supportive/graph_viz_output_html_formatter.go similarity index 58% rename from pkg/supportive/output_formatter/graph_viz_output_html_formatter.go rename to pkg/output_formatter_supportive/graph_viz_output_html_formatter.go index 7bd7f63..7211a60 100644 --- a/pkg/supportive/output_formatter/graph_viz_output_html_formatter.go +++ b/pkg/output_formatter_supportive/graph_viz_output_html_formatter.go @@ -1,10 +1,10 @@ -package output_formatter +package output_formatter_supportive import ( "encoding/base64" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" "os" "path/filepath" @@ -26,30 +26,30 @@ func (f *GraphVizOutputHtmlFormatter) GetName() string { return "graphviz-html" } -func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { dumpHtmlPath := input.OutputPath if dumpHtmlPath == nil || *dumpHtmlPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") } - // Generate a temporary image file + // Generate a temporary image file_supportive filename, err := f.getTempImage(g, graph) if err != nil { - return fmt.Errorf("unable to create temp file for output: %v", err) + return fmt.Errorf("unable to create temp file_supportive for output: %v", err) } - // Ensure the temporary file is removed after processing + // Ensure the temporary file_supportive is removed after processing defer func(name string) { err := os.Remove(name) if err != nil { - fmt.Printf("unable to remove temp file: %v", err) + fmt.Printf("unable to remove temp file_supportive: %v", err) } }(filename) // Read the image data imageData, err := os.ReadFile(filename) if err != nil { - return fmt.Errorf("unable to read temp image file: %v", err) + return fmt.Errorf("unable to read temp image file_supportive: %v", err) } // Encode the image data to base64 @@ -58,11 +58,11 @@ func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph // Create the HTML content with the embedded base64 image htmlContent := fmt.Sprintf(``, base64Image) - // Write the HTML content to the specified file + // Write the HTML content to the specified file_supportive if err := os.WriteFile(*dumpHtmlPath, []byte(htmlContent), 0644); err != nil { - return fmt.Errorf("unable to write HTML file: %v", err) + return fmt.Errorf("unable to write HTML file_supportive: %v", err) } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) return nil } diff --git a/pkg/supportive/output_formatter/graph_viz_output_image_formatter.go b/pkg/output_formatter_supportive/graph_viz_output_image_formatter.go similarity index 76% rename from pkg/supportive/output_formatter/graph_viz_output_image_formatter.go rename to pkg/output_formatter_supportive/graph_viz_output_image_formatter.go index 4ea5202..d91c299 100644 --- a/pkg/supportive/output_formatter/graph_viz_output_image_formatter.go +++ b/pkg/output_formatter_supportive/graph_viz_output_image_formatter.go @@ -1,9 +1,9 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" "os" "path/filepath" @@ -25,7 +25,7 @@ func (f *GraphVizOutputImageFormatter) GetName() string { return "graphviz-image" } -func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { dumpImagePath := input.OutputPath if dumpImagePath == nil || *dumpImagePath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -40,7 +40,7 @@ func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgrap return fmt.Errorf("unable to display output: %v", err) } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", dumpImagePath)}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", dumpImagePath)}) return nil } diff --git a/pkg/supportive/output_formatter/json_output_formatter.go b/pkg/output_formatter_supportive/json_output_formatter.go similarity index 73% rename from pkg/supportive/output_formatter/json_output_formatter.go rename to pkg/output_formatter_supportive/json_output_formatter.go index 21569dc..0ebf40b 100644 --- a/pkg/supportive/output_formatter/json_output_formatter.go +++ b/pkg/output_formatter_supportive/json_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "os" "path/filepath" ) @@ -20,22 +20,22 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { - f.addSkipped(violations, rule.(*result.SkippedViolation)) + for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { + f.addSkipped(violations, rule.(*result_contract2.SkippedViolation)) } } if input.ReportUncovered { - for _, rule := range outputResult.AllOf(result.TypeUncovered) { - f.addUncovered(violations, rule.(*result.Uncovered)) + for _, rule := range outputResult.AllOf(result_contract2.TypeUncovered) { + f.addUncovered(violations, rule.(*result_contract2.Uncovered)) } } - for _, rule := range outputResult.AllOf(result.TypeViolation) { - f.addFailure(violations, rule.(*result.Violation)) + for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { + f.addFailure(violations, rule.(*result_contract2.Violation)) } // Add report summary to jsonArray @@ -48,7 +48,7 @@ func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, ou "Errors": len(outputResult.Errors), } - // Add violation count to each file + // Add violation count to each file_supportive for fileName, fileViolation := range violations { fileViolation.Violations = len(fileViolation.Messages) violations[fileName] = fileViolation @@ -65,7 +65,7 @@ func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, ou if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { return err } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) return nil } @@ -73,7 +73,7 @@ func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, ou return nil } -func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *result.Violation) { +func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *result_contract2.Violation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getFailureMessage(violation), @@ -82,7 +82,7 @@ func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getFailureMessage(violation *result.Violation) string { +func (f *JsonOutputFormatter) getFailureMessage(violation *result_contract2.Violation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -92,7 +92,7 @@ func (f *JsonOutputFormatter) getFailureMessage(violation *result.Violation) str ) } -func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *result.SkippedViolation) { +func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *result_contract2.SkippedViolation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getWarningMessage(violation), @@ -101,7 +101,7 @@ func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getWarningMessage(violation *result.SkippedViolation) string { +func (f *JsonOutputFormatter) getWarningMessage(violation *result_contract2.SkippedViolation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -111,7 +111,7 @@ func (f *JsonOutputFormatter) getWarningMessage(violation *result.SkippedViolati ) } -func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *result.Uncovered) { +func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *result_contract2.Uncovered) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getUncoveredMessage(violation), @@ -120,9 +120,9 @@ func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, }) } -func (f *JsonOutputFormatter) getUncoveredMessage(violation *result.Uncovered) string { +func (f *JsonOutputFormatter) getUncoveredMessage(violation *result_contract2.Uncovered) string { dependency := violation.GetDependency() - return fmt.Sprintf("%s has uncovered dependency on %s (%s)", + return fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), violation.Layer, diff --git a/pkg/supportive/output_formatter/junit_output_formatter.go b/pkg/output_formatter_supportive/junit_output_formatter.go similarity index 81% rename from pkg/supportive/output_formatter/junit_output_formatter.go rename to pkg/output_formatter_supportive/junit_output_formatter.go index dc331da..0de191f 100644 --- a/pkg/supportive/output_formatter/junit_output_formatter.go +++ b/pkg/output_formatter_supportive/junit_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - result2 "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -23,7 +23,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output return err } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } @@ -76,7 +76,7 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult Classname: rule.GetDependency().GetDepender().ToString(), } switch r := rule.(type) { - case *result2.Violation: + case *result_contract.Violation: testSuite.Failures++ testCase.Failures = append(testCase.Failures, Failure{ Message: fmt.Sprintf("%s:%d must not depend on %s (%s on %s)", @@ -88,12 +88,12 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult ), Type: "WARNING", }) - case *result2.SkippedViolation: + case *result_contract.SkippedViolation: testSuite.Skipped++ testCase.Skipped = append(testCase.Skipped, Skipped{}) - case *result2.Uncovered: + case *result_contract.Uncovered: testCase.Warnings = append(testCase.Warnings, Warning{ - Message: fmt.Sprintf("%s:%d has uncovered dependency on %s (%s)", + Message: fmt.Sprintf("%s:%d has uncovered dependency_contract on %s (%s)", r.GetDependency().GetDepender().ToString(), r.GetDependency().GetContext().FileOccurrence.Line, r.GetDependency().GetDependent().ToString(), @@ -115,13 +115,13 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult return xml.Header + string(xmlData), nil } -func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult output_result.OutputResult) map[string][]result2.RuleInterface { - layers := make(map[string][]result2.RuleInterface) +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult output_result.OutputResult) map[string][]result_contract.RuleInterface { + layers := make(map[string][]result_contract.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { - case result2.CoveredRuleInterface: + case result_contract.CoveredRuleInterface: layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) - case *result2.Uncovered: + case *result_contract.Uncovered: layers[r.Layer] = append(layers[r.Layer], rule) } } diff --git a/pkg/supportive/output_formatter/mermaid_js_output_formatter.go b/pkg/output_formatter_supportive/mermaid_js_output_formatter.go similarity index 87% rename from pkg/supportive/output_formatter/mermaid_js_output_formatter.go rename to pkg/output_formatter_supportive/mermaid_js_output_formatter.go index 9acdc13..55d248a 100644 --- a/pkg/supportive/output_formatter/mermaid_js_output_formatter.go +++ b/pkg/output_formatter_supportive/mermaid_js_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" + "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "os" "strings" ) @@ -33,7 +33,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder diff --git a/pkg/supportive/output_formatter/table_output_formatter.go b/pkg/output_formatter_supportive/table_output_formatter.go similarity index 78% rename from pkg/supportive/output_formatter/table_output_formatter.go rename to pkg/output_formatter_supportive/table_output_formatter.go index 340c32e..7a65196 100644 --- a/pkg/supportive/output_formatter/table_output_formatter.go +++ b/pkg/output_formatter_supportive/table_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -18,12 +18,12 @@ func NewTableOutputFormatter() *TableOutputFormatter { return &TableOutputFormatter{} } -func (t *TableOutputFormatter) GetName() output_formatter.OutputFormatterType { - return output_formatter.Table +func (t *TableOutputFormatter) GetName() output_formatter_contract2.OutputFormatterType { + return output_formatter_contract2.Table } -func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter.OutputInterface, outputFormatterInput *output_formatter.OutputFormatterInput) error { - groupedRules := make(map[string][]result.RuleInterface) +func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { + groupedRules := make(map[string][]result_contract2.RuleInterface) for _, ruleItem := range outputResult.Violations() { groupedRules[ruleItem.GetDependerLayer()] = append(groupedRules[ruleItem.GetDependerLayer()], ruleItem) @@ -48,7 +48,7 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, for _, layer := range groupedRulesLayers { rules := groupedRules[layer] - slices.SortFunc(rules, func(a, b result.RuleInterface) int { + slices.SortFunc(rules, func(a, b result_contract2.RuleInterface) int { if a.GetDependency().GetDepender().ToString() < b.GetDependency().GetDepender().ToString() { return -1 } @@ -58,11 +58,11 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, rows := make([][]string, 0) for _, ruleItem := range rules { switch item := ruleItem.(type) { - case *result.Uncovered: + case *result_contract2.Uncovered: rows = append(rows, t.uncoveredRow(item, outputFormatterInput.FailOnUncovered)) - case *result.Violation: + case *result_contract2.Violation: rows = append(rows, t.violationRow(item)) - case *result.SkippedViolation: + case *result_contract2.SkippedViolation: rows = append(rows, t.skippedViolationRow(item)) } } @@ -79,7 +79,7 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, return nil } -func (t *TableOutputFormatter) skippedViolationRow(rule *result.SkippedViolation) []string { +func (t *TableOutputFormatter) skippedViolationRow(rule *result_contract2.SkippedViolation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s (%s)", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { @@ -91,7 +91,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *result.SkippedViolation } -func (t *TableOutputFormatter) violationRow(rule *result.Violation) []string { +func (t *TableOutputFormatter) violationRow(rule *result_contract2.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) message += fmt.Sprintf("\n%s (To fix %s(You need to add to the array by this key) -> %s(That value needs to be added to that array))", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) @@ -102,7 +102,7 @@ func (t *TableOutputFormatter) violationRow(rule *result.Violation) []string { message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) return []string{color.Sprint("Violation"), message} } -func (t *TableOutputFormatter) formatMultilinePath(dep dependency.DependencyInterface) string { +func (t *TableOutputFormatter) formatMultilinePath(dep dependency_contract.DependencyInterface) string { lines := make([]string, 0) for _, serializedDependency := range dep.Serialize() { lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) @@ -110,7 +110,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependency.DependencyInte return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, output output_formatter.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -151,7 +151,7 @@ func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []output_formatter.StringOrArrayOfStringsOrTableSeparator{ + []output_formatter_contract2.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -164,9 +164,9 @@ func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, ) } -func (t *TableOutputFormatter) uncoveredRow(rule *result.Uncovered, reportAsError bool) []string { +func (t *TableOutputFormatter) uncoveredRow(rule *result_contract2.Uncovered, reportAsError bool) []string { gotDependency := rule.GetDependency() - message := color.Sprintf("%s has uncovered dependency on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) + message := color.Sprintf("%s has uncovered dependency_contract on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) if len(gotDependency.Serialize()) > 1 { message += "\n" + t.formatMultilinePath(gotDependency) } @@ -179,7 +179,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *result.Uncovered, reportAsErro return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -189,7 +189,7 @@ func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, o output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/supportive/output_formatter/table_output_formatter_test.go b/pkg/output_formatter_supportive/table_output_formatter_test.go similarity index 80% rename from pkg/supportive/output_formatter/table_output_formatter_test.go rename to pkg/output_formatter_supportive/table_output_formatter_test.go index f161e39..ddf4d9b 100644 --- a/pkg/supportive/output_formatter/table_output_formatter_test.go +++ b/pkg/output_formatter_supportive/table_output_formatter_test.go @@ -1,4 +1,4 @@ -package output_formatter +package output_formatter_supportive import ( "fmt" diff --git a/pkg/supportive/output_formatter/xml_output_formatter.go b/pkg/output_formatter_supportive/xml_output_formatter.go similarity index 78% rename from pkg/supportive/output_formatter/xml_output_formatter.go rename to pkg/output_formatter_supportive/xml_output_formatter.go index 965170b..2408496 100644 --- a/pkg/supportive/output_formatter/xml_output_formatter.go +++ b/pkg/output_formatter_supportive/xml_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter +package output_formatter_supportive import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" + output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" "github.com/KoNekoD/go-deptrac/pkg/util" "os" "path/filepath" @@ -23,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output ou return err } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } @@ -66,7 +66,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int var line int switch r := rule.(type) { - case result.Violation: + case result_contract2.Violation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() @@ -76,7 +76,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int file = fileOccurrence.FilePath line = fileOccurrence.Line - case result.SkippedViolation: + case result_contract2.SkippedViolation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() @@ -94,7 +94,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int ClassA: classA, ClassB: classB, Occurrence: struct { - File string `xml:"file,attr"` + File string `xml:"file_supportive,attr"` Line int `xml:"line,attr"` }{File: file, Line: line}, } @@ -113,7 +113,7 @@ type Entry struct { ClassA string `xml:"ClassA"` ClassB string `xml:"ClassB"` Occurrence struct { - File string `xml:"file,attr"` + File string `xml:"file_supportive,attr"` Line int `xml:"line,attr"` } `xml:"occurrence"` } diff --git a/pkg/result_contract/allowed.go b/pkg/result_contract/allowed.go new file mode 100644 index 0000000..4142c6c --- /dev/null +++ b/pkg/result_contract/allowed.go @@ -0,0 +1,32 @@ +package result_contract + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" +) + +// Allowed - Represents a dependency_contract that is allowed to exist given the defined rules +type Allowed struct { + Dependency dependency_contract.DependencyInterface + DependerLayer string + DependentLayer string +} + +func NewAllowed(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string) *Allowed { + return &Allowed{ + Dependency: dependency, + DependerLayer: dependerLayer, + DependentLayer: dependentLayer, + } +} + +func (a *Allowed) GetDependency() dependency_contract.DependencyInterface { + return a.Dependency +} + +func (a *Allowed) GetDependerLayer() string { + return a.DependerLayer +} + +func (a *Allowed) GetDependentLayer() string { + return a.DependentLayer +} diff --git a/pkg/result_contract/covered_rule_interface.go b/pkg/result_contract/covered_rule_interface.go new file mode 100644 index 0000000..dde3512 --- /dev/null +++ b/pkg/result_contract/covered_rule_interface.go @@ -0,0 +1,7 @@ +package result_contract + +// CoveredRuleInterface - Represents a dependency_contract that is covered by the defined rules. This does not mean that it is allowed to exist, just that it is covered. In that sense it exists as a complement to `Uncovered` struct +type CoveredRuleInterface interface { + GetDependerLayer() string + GetDependentLayer() string +} diff --git a/pkg/contract/result/error.go b/pkg/result_contract/error.go similarity index 88% rename from pkg/contract/result/error.go rename to pkg/result_contract/error.go index 22578a5..a807b85 100644 --- a/pkg/contract/result/error.go +++ b/pkg/result_contract/error.go @@ -1,4 +1,4 @@ -package result +package result_contract type Error struct { Message string diff --git a/pkg/result_contract/output_result/output_result.go b/pkg/result_contract/output_result/output_result.go new file mode 100644 index 0000000..f42e35a --- /dev/null +++ b/pkg/result_contract/output_result/output_result.go @@ -0,0 +1,111 @@ +package output_result + +import ( + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" + result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" +) + +// OutputResult - Represents a result_contract ready for output formatting +type OutputResult struct { + rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface + Errors []*result_contract2.Error + Warnings []*result_contract2.Warning +} + +func newOutputResult(rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface, errors []*result_contract2.Error, warnings []*result_contract2.Warning) *OutputResult { + return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} +} + +func NewOutputResultFromAnalysisResult(analysisResult *analysis_result.AnalysisResult) *OutputResult { + return newOutputResult( + analysisResult.Rules(), + analysisResult.Errors(), + analysisResult.Warnings(), + ) +} + +func (r *OutputResult) AllOf(ruleType result_contract2.RuleTypeEnum) []result_contract2.RuleInterface { + rulesByIds, ok := r.rules[ruleType] + if ok { + rules := make([]result_contract2.RuleInterface, 0, len(rulesByIds)) + + for _, rule := range rulesByIds { + rules = append(rules, rule) + } + + return rules + } + return nil +} +func (r *OutputResult) AllRules() []result_contract2.RuleInterface { + var rules []result_contract2.RuleInterface + for _, ruleArray := range r.rules { + for _, ruleItem := range ruleArray { + rules = append(rules, ruleItem) + } + } + return rules +} +func (r *OutputResult) Violations() []*result_contract2.Violation { + untyped := r.AllOf(result_contract2.TypeViolation) + + items := make([]*result_contract2.Violation, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result_contract2.Violation)) + } + + return items +} + +func (r *OutputResult) HasViolations() bool { + return len(r.Violations()) > 0 +} + +func (r *OutputResult) SkippedViolations() []*result_contract2.SkippedViolation { + untyped := r.AllOf(result_contract2.TypeSkippedViolation) + + items := make([]*result_contract2.SkippedViolation, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result_contract2.SkippedViolation)) + } + + return items +} + +func (r *OutputResult) Uncovered() []*result_contract2.Uncovered { + untyped := r.AllOf(result_contract2.TypeUncovered) + + items := make([]*result_contract2.Uncovered, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result_contract2.Uncovered)) + } + + return items +} + +func (r *OutputResult) HasUncovered() bool { + return len(r.Uncovered()) > 0 +} + +func (r *OutputResult) HasAllowed() bool { + return len(r.Allowed()) > 0 +} + +func (r *OutputResult) Allowed() []*result_contract2.Allowed { + untyped := r.AllOf(result_contract2.TypeAllowed) + + items := make([]*result_contract2.Allowed, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*result_contract2.Allowed)) + } + + return items +} + +func (r *OutputResult) HasErrors() bool { + return len(r.Errors) > 0 +} + +func (r *OutputResult) HasWarnings() bool { + return len(r.Warnings) > 0 +} diff --git a/pkg/result_contract/rule_interface.go b/pkg/result_contract/rule_interface.go new file mode 100644 index 0000000..e62ea6d --- /dev/null +++ b/pkg/result_contract/rule_interface.go @@ -0,0 +1,10 @@ +package result_contract + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" +) + +// RuleInterface - Represents a dependency_contract +type RuleInterface interface { + GetDependency() dependency_contract.DependencyInterface +} diff --git a/pkg/contract/result/rule_type_enum.go b/pkg/result_contract/rule_type_enum.go similarity index 96% rename from pkg/contract/result/rule_type_enum.go rename to pkg/result_contract/rule_type_enum.go index d3ff6ee..3ef4597 100644 --- a/pkg/contract/result/rule_type_enum.go +++ b/pkg/result_contract/rule_type_enum.go @@ -1,4 +1,4 @@ -package result +package result_contract import ( "fmt" diff --git a/pkg/contract/result/skipped_violation.go b/pkg/result_contract/skipped_violation.go similarity index 54% rename from pkg/contract/result/skipped_violation.go rename to pkg/result_contract/skipped_violation.go index 4603777..0a6b6e7 100644 --- a/pkg/contract/result/skipped_violation.go +++ b/pkg/result_contract/skipped_violation.go @@ -1,17 +1,17 @@ -package result +package result_contract import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" ) -// SkippedViolation - Represents a Violation that is being skipped by the baseline file +// SkippedViolation - Represents a Violation that is being skipped by the baseline file_supportive type SkippedViolation struct { - Dependency dependency.DependencyInterface + Dependency dependency_contract.DependencyInterface DependerLayer string DependentLayer string } -func NewSkippedViolation(dependency dependency.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { +func NewSkippedViolation(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { return &SkippedViolation{ Dependency: dependency, DependerLayer: dependerLayer, @@ -19,7 +19,7 @@ func NewSkippedViolation(dependency dependency.DependencyInterface, dependerLaye } } -func (v *SkippedViolation) GetDependency() dependency.DependencyInterface { +func (v *SkippedViolation) GetDependency() dependency_contract.DependencyInterface { return v.Dependency } func (v *SkippedViolation) GetDependerLayer() string { diff --git a/pkg/result_contract/uncovered.go b/pkg/result_contract/uncovered.go new file mode 100644 index 0000000..7da2830 --- /dev/null +++ b/pkg/result_contract/uncovered.go @@ -0,0 +1,22 @@ +package result_contract + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" +) + +// Uncovered - Represents a dependency_contract that is NOT covered by the current configuration. +type Uncovered struct { + Dependency dependency_contract.DependencyInterface + Layer string +} + +func NewUncovered(dependency dependency_contract.DependencyInterface, layer string) *Uncovered { + return &Uncovered{ + Dependency: dependency, + Layer: layer, + } +} + +func (u *Uncovered) GetDependency() dependency_contract.DependencyInterface { + return u.Dependency +} diff --git a/pkg/contract/result/violation.go b/pkg/result_contract/violation.go similarity index 59% rename from pkg/contract/result/violation.go rename to pkg/result_contract/violation.go index ed32e32..99dda91 100644 --- a/pkg/contract/result/violation.go +++ b/pkg/result_contract/violation.go @@ -1,20 +1,20 @@ -package result +package result_contract import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" + "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/violation_creating_interface" + "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" ) -// Violation - Represents a dependency that is NOT allowed to exist given the defined rules +// Violation - Represents a dependency_contract that is NOT allowed to exist given the defined rules type Violation struct { - Dependency dependency.DependencyInterface + Dependency dependency_contract.DependencyInterface DependerLayer string DependentLayer string ViolationCreatingRule violation_creating_interface.ViolationCreatingInterface } -func NewViolation(dependency dependency.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { +func NewViolation(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { if dependentLayer == dependerLayer { panic("1") @@ -32,7 +32,7 @@ func NewViolation(dependency dependency.DependencyInterface, dependerLayer strin } } -func (v *Violation) GetDependency() dependency.DependencyInterface { +func (v *Violation) GetDependency() dependency_contract.DependencyInterface { return v.Dependency } func (v *Violation) GetDependerLayer() string { diff --git a/pkg/contract/result/warning.go b/pkg/result_contract/warning.go similarity index 69% rename from pkg/contract/result/warning.go rename to pkg/result_contract/warning.go index 63515cb..a82fa7b 100644 --- a/pkg/contract/result/warning.go +++ b/pkg/result_contract/warning.go @@ -1,4 +1,4 @@ -package result +package result_contract import ( "fmt" @@ -16,7 +16,7 @@ func NewWarning(message string) *Warning { func NewWarningTokenIsInMoreThanOneLayer(tokenName string, layerNames []string) *Warning { return &Warning{ - Message: fmt.Sprintf("%s is in more than one layer [%s]. It is recommended that one token should only be in one layer.", tokenName, strings.Join(layerNames, ", ")), + Message: fmt.Sprintf("%s is in more than one layer_contract [%s]. It is recommended that one token should only be in one layer_contract.", tokenName, strings.Join(layerNames, ", ")), } } diff --git a/pkg/supportive/console/subscriber/console_subscriber.go b/pkg/supportive/console/subscriber/console_subscriber.go deleted file mode 100644 index 9b673ee..0000000 --- a/pkg/supportive/console/subscriber/console_subscriber.go +++ /dev/null @@ -1,90 +0,0 @@ -package subscriber - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" -) - -type ConsoleSubscriber struct { - output output_formatter.OutputInterface - stopwatch *time_stopwatch.Stopwatch -} - -func NewConsoleSubscriber(output output_formatter.OutputInterface, stopwatch *time_stopwatch.Stopwatch) *ConsoleSubscriber { - return &ConsoleSubscriber{ - output: output, - stopwatch: stopwatch, - } -} - -func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - switch event := rawEvent.(type) { - case *ast.PreCreateAstMapEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("ast") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) - } - case *ast.PostCreateAstMapEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("ast", "AstMap created in %01.2f sec.", "AstMap created.") - } - case *ast.AstFileAnalysedEvent: - if s.output.IsVerbose() { - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) - } - case *ast.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) - case *dependency.PreEmitEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("deps") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) - } - case *dependency.PostEmitEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") - } - case *dependency.PreFlattenEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("flatten") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "start flatten dependencies"}) - } - case *dependency.PostFlattenEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") - } - } - - return nil -} - -func (s *ConsoleSubscriber) stopwatchStart(event string) error { - err := s.stopwatch.Start(event) - if err != nil { - return err - } - - return nil -} - -func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { - period, err := s.stopwatch.Stop(event) - - if err != nil { - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: messageWithoutTime}) - return - } - - s.output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) -} diff --git a/pkg/supportive/console/subscriber/progress_subscriber.go b/pkg/supportive/console/subscriber/progress_subscriber.go deleted file mode 100644 index e811263..0000000 --- a/pkg/supportive/console/subscriber/progress_subscriber.go +++ /dev/null @@ -1,35 +0,0 @@ -package subscriber - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" -) - -type ProgressSubscriber struct { - output output_formatter.OutputInterface -} - -func NewProgressSubscriber(output output_formatter.OutputInterface) *ProgressSubscriber { - return &ProgressSubscriber{ - output: output, - } -} - -func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - switch event := rawEvent.(type) { - case *ast.PreCreateAstMapEvent: - s.output.GetStyle().ProgressStart(event.ExpectedFileCount) - case *ast.PostCreateAstMapEvent: - err := s.output.GetStyle().ProgressFinish() - if err != nil { - return err - } - case *ast.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(output_formatter.ProgressAdvanceDefault) - if err != nil { - return err - } - } - - return nil -} diff --git a/pkg/supportive/dependency_injection/cache.go b/pkg/supportive/dependency_injection/cache.go deleted file mode 100644 index d96c26d..0000000 --- a/pkg/supportive/dependency_injection/cache.go +++ /dev/null @@ -1,14 +0,0 @@ -package dependency_injection - -import ( - Cache2 "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/application/application_version" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/container_builder" -) - -func Cache(builder *container_builder.ContainerBuilder) { - builder.AstFileReferenceFileCache = Cache2.NewAstFileReferenceFileCache(*builder.CacheFile, application_version.Version) - builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache - builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache - builder.CacheableFileSubscriber = Cache2.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) -} diff --git a/pkg/supportive/dependency_injection/container_builder/container_builder.go b/pkg/supportive/dependency_injection/container_builder/container_builder.go deleted file mode 100644 index f1e648d..0000000 --- a/pkg/supportive/dependency_injection/container_builder/container_builder.go +++ /dev/null @@ -1,88 +0,0 @@ -package container_builder - -import ( - analyser2 "github.com/KoNekoD/go-deptrac/pkg/contract/analyser/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/contract/config/deptrac_config" - "github.com/KoNekoD/go-deptrac/pkg/contract/layer" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/core/analyser/event_handler/process_event" - "github.com/KoNekoD/go-deptrac/pkg/core/ast" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/core/ast/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency" - "github.com/KoNekoD/go-deptrac/pkg/core/dependency/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/core/input_collector" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/collector" - "github.com/KoNekoD/go-deptrac/pkg/core/layer/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/command" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/subscriber" - "github.com/KoNekoD/go-deptrac/pkg/supportive/console/symfony" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/supportive/file" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/output_formatter/configuration" - "github.com/KoNekoD/go-deptrac/pkg/supportive/time_stopwatch" -) - -type ContainerBuilder struct { - ProjectDirectory string - CacheFile *string - Configuration *deptrac_config.DeptracConfig - EventDispatcher event_dispatcher_interface.EventDispatcherInterface - FileInputCollector input_collector.InputCollectorInterface - YmlFileLoader *file.YmlFileLoader - Dumper *file.Dumper - AstLoader *ast.AstLoader - AstFileReferenceFileCache *cache.AstFileReferenceFileCache - AstFileReferenceDeferredCacheInterface cache.AstFileReferenceDeferredCacheInterface - AstFileReferenceCacheInterface cache.AstFileReferenceCacheInterface - CacheableFileSubscriber *cache.CacheableFileSubscriber - AstFileReferenceInMemoryCache *cache.AstFileReferenceInMemoryCache - TypeResolver *parser.TypeResolver - ReferenceExtractors []extractors.ReferenceExtractorInterface - ParserInterface parser.ParserInterface - LayerProvider *layer.LayerProvider - EventHelper *analyser2.EventHelper - AllowDependencyHandler *process_event.AllowDependencyHandler - DependsOnPrivateLayer *process_event.DependsOnPrivateLayer - DependsOnInternalToken *process_event.DependsOnInternalToken - DependsOnDisallowedLayer *process_event.DependsOnDisallowedLayer - MatchingLayersHandler *process_event.MatchingLayersHandler - UncoveredDependentHandler *process_event.UncoveredDependentHandler - UnmatchedSkippedViolations *post_process_event.UnmatchedSkippedViolations - ConsoleSubscriber *subscriber.ConsoleSubscriber - ProgressSubscriber *subscriber.ProgressSubscriber - VerboseBoolFlag *bool - DebugBoolFlag *bool - Style *symfony.Style - SymfonyOutput *symfony.SymfonyOutput - TimeStopwatch *time_stopwatch.Stopwatch - AstMapExtractor *ast.AstMapExtractor - InheritanceFlattener *dependency.InheritanceFlattener - DependencyResolver *dependency_resolver.DependencyResolver - TokenResolver *dependency.TokenResolver - CollectorResolver *collector.CollectorResolver - LayerResolver layer_resolver_interface.LayerResolverInterface - NikicPhpParser *nikic_php_parser.NikicPhpParser - CollectorProvider *collector.CollectorProvider - DependencyLayersAnalyser *analyser.DependencyLayersAnalyser - TokenInLayerAnalyser *analyser.TokenInLayerAnalyser - LayerForTokenAnalyser *analyser.LayerForTokenAnalyser - UnassignedTokenAnalyser *analyser.UnassignedTokenAnalyser - LayerDependenciesAnalyser *analyser.LayerDependenciesAnalyser - RulesetUsageAnalyser *analyser.RulesetUsageAnalyser - FormatterProvider *output_formatter.FormatterProvider - FormatterConfiguration *configuration.FormatterConfiguration - AnalyseRunner *command.AnalyseRunner - AnalyseCommand *command.AnalyseCommand - NodeNamer *node_namer.NodeNamer - AnalyseOptions *command.AnalyseOptions -} - -func NewContainerBuilder(workingDirectory string) *ContainerBuilder { - return &ContainerBuilder{} -} diff --git a/pkg/supportive/output_formatter/configuration/formatter_configuration.go b/pkg/supportive/output_formatter/configuration/formatter_configuration.go deleted file mode 100644 index f2eba2e..0000000 --- a/pkg/supportive/output_formatter/configuration/formatter_configuration.go +++ /dev/null @@ -1,17 +0,0 @@ -package configuration - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/config/formatter" -) - -type FormatterConfiguration struct { - config map[formatter.FormatterType]formatter.FormatterConfigInterface -} - -func NewFormatterConfiguration(config map[formatter.FormatterType]formatter.FormatterConfigInterface) *FormatterConfiguration { - return &FormatterConfiguration{config: config} -} - -func (f *FormatterConfiguration) GetConfigFor(area formatter.FormatterType) formatter.FormatterConfigInterface { - return f.config[area] -} diff --git a/pkg/supportive/output_formatter/console_output_formatter.go b/pkg/supportive/output_formatter/console_output_formatter.go deleted file mode 100644 index c026cc7..0000000 --- a/pkg/supportive/output_formatter/console_output_formatter.go +++ /dev/null @@ -1,160 +0,0 @@ -package output_formatter - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/contract/ast" - "github.com/KoNekoD/go-deptrac/pkg/contract/dependency" - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/contract/result" - "github.com/KoNekoD/go-deptrac/pkg/contract/result/output_result" - "strings" -) - -type ConsoleOutputFormatter struct{} - -func NewConsoleOutputFormatter() *ConsoleOutputFormatter { - return &ConsoleOutputFormatter{} -} - -func (f *ConsoleOutputFormatter) GetName() string { - return "console" -} - -func (f *ConsoleOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter.OutputInterface, input output_formatter.OutputFormatterInput) { - for _, rule := range outputResult.AllOf(result.TypeViolation) { - f.printViolation(rule.(*result.Violation), output) - } - - if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result.TypeSkippedViolation) { - f.printViolation(rule.(*result.SkippedViolation), output) - } - } - - if input.ReportUncovered { - f.printUncovered(outputResult, output) - } - - if outputResult.HasErrors() { - f.printErrors(outputResult, output) - } - - if outputResult.HasWarnings() { - f.printWarnings(outputResult, output) - } - - f.printSummary(outputResult, output) -} - -func (f *ConsoleOutputFormatter) printViolation(rule result.RuleInterface, output output_formatter.OutputInterface) { - dep := rule.GetDependency() - skippedText := "" - - dependerLayer := "" - dependentLayer := "" - - if ruleAsserted, ok := rule.(*result.SkippedViolation); ok { - skippedText = "[SKIPPED] " - dependerLayer = ruleAsserted.GetDependerLayer() - dependentLayer = ruleAsserted.GetDependentLayer() - } else if ruleAsserted, ok := rule.(*result.Violation); ok { - dependerLayer = ruleAsserted.GetDependerLayer() - dependentLayer = ruleAsserted.GetDependentLayer() - } else { - panic(fmt.Errorf("unknown rule type: %T", rule)) - } - - output.WriteLineFormatted( - output_formatter.StringOrArrayOfStrings{ - String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", - skippedText, - dep.GetDepender().ToString(), - dep.GetDependent().ToString(), - dependerLayer, - dependentLayer, - ), - }, - ) - f.printFileOccurrence(output, dep.GetContext().FileOccurrence) - - if len(dep.Serialize()) > 1 { - f.printMultilinePath(output, dep) - } -} - -func (f *ConsoleOutputFormatter) printMultilinePath(output output_formatter.OutputInterface, dep dependency.DependencyInterface) { - var buffer strings.Builder - for _, depSerialized := range dep.Serialize() { - buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) - } - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: buffer.String()}) -} - -func (f *ConsoleOutputFormatter) printSummary(result output_result.OutputResult, output output_formatter.OutputInterface) { - violationCount := len(result.Violations()) - skippedViolationCount := len(result.SkippedViolations()) - uncoveredCount := len(result.Uncovered()) - allowedCount := len(result.Allowed()) - warningsCount := len(result.Warnings) - errorsCount := len(result.Errors) - - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "Report:"}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) -} - -func (f *ConsoleOutputFormatter) printUncovered(result output_result.OutputResult, output output_formatter.OutputInterface) { - uncovered := result.Uncovered() - if len(uncovered) == 0 { - return - } - - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) - for _, u := range uncovered { - dep := u.GetDependency() - output.WriteLineFormatted( - output_formatter.StringOrArrayOfStrings{ - String: fmt.Sprintf("%s has uncovered dependency on %s (%s)", - dep.GetDepender().ToString(), - dep.GetDependent().ToString(), - u.Layer, - ), - }, - ) - f.printFileOccurrence(output, dep.GetContext().FileOccurrence) - - if len(dep.Serialize()) > 1 { - f.printMultilinePath(output, dep) - } - } -} - -func (f *ConsoleOutputFormatter) printFileOccurrence(output output_formatter.OutputInterface, fileOccurrence *ast.FileOccurrence) { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) -} - -func (f *ConsoleOutputFormatter) printErrors(result output_result.OutputResult, output output_formatter.OutputInterface) { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) - for _, err := range result.Errors { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) - } -} - -func (f *ConsoleOutputFormatter) printWarnings(result output_result.OutputResult, output output_formatter.OutputInterface) { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: ""}) - for _, warning := range result.Warnings { - output.WriteLineFormatted(output_formatter.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) - } -} - -func (f *ConsoleOutputFormatter) getColor(condition bool, trueColor, falseColor string) string { - if condition { - return trueColor - } - return falseColor -} diff --git a/pkg/supportive/output_formatter/formatter_provider.go b/pkg/supportive/output_formatter/formatter_provider.go deleted file mode 100644 index a65adea..0000000 --- a/pkg/supportive/output_formatter/formatter_provider.go +++ /dev/null @@ -1,37 +0,0 @@ -package output_formatter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/contract/output_formatter" - "github.com/KoNekoD/go-deptrac/pkg/supportive/dependency_injection/Exception/InvalidServiceInLocatorException" - "golang.org/x/exp/maps" - "reflect" -) - -type FormatterProvider struct { - formatterLocator map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface -} - -func NewFormatterProvider(formatterLocator map[output_formatter.OutputFormatterType]output_formatter.OutputFormatterInterface) *FormatterProvider { - return &FormatterProvider{ - formatterLocator: formatterLocator, - } -} - -func (f *FormatterProvider) Get(id output_formatter.OutputFormatterType) (output_formatter.OutputFormatterInterface, error) { - service, ok := f.formatterLocator[id] - - if !ok { - return nil, InvalidServiceInLocatorException.NewInvalidServiceInLocatorExceptionInvalidType(id, reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") - } - - return service, nil -} - -func (f *FormatterProvider) Has(id output_formatter.OutputFormatterType) bool { - _, ok := f.formatterLocator[id] - return ok -} - -func (f *FormatterProvider) GetKnownFormatters() []output_formatter.OutputFormatterType { - return maps.Keys(f.formatterLocator) -} diff --git a/pkg/supportive/time_stopwatch/period.go b/pkg/time_stopwatch_supportive/period.go similarity index 93% rename from pkg/supportive/time_stopwatch/period.go rename to pkg/time_stopwatch_supportive/period.go index 0a2c6a2..e7cac86 100644 --- a/pkg/supportive/time_stopwatch/period.go +++ b/pkg/time_stopwatch_supportive/period.go @@ -1,4 +1,4 @@ -package time_stopwatch +package time_stopwatch_supportive import ( "github.com/loov/hrtime" diff --git a/pkg/supportive/time_stopwatch/started_period.go b/pkg/time_stopwatch_supportive/started_period.go similarity index 95% rename from pkg/supportive/time_stopwatch/started_period.go rename to pkg/time_stopwatch_supportive/started_period.go index d567a55..38593ea 100644 --- a/pkg/supportive/time_stopwatch/started_period.go +++ b/pkg/time_stopwatch_supportive/started_period.go @@ -1,4 +1,4 @@ -package time_stopwatch +package time_stopwatch_supportive import ( "github.com/loov/hrtime" diff --git a/pkg/supportive/time_stopwatch/stopwatch.go b/pkg/time_stopwatch_supportive/stopwatch.go similarity index 96% rename from pkg/supportive/time_stopwatch/stopwatch.go rename to pkg/time_stopwatch_supportive/stopwatch.go index f6c6697..a9afb6e 100644 --- a/pkg/supportive/time_stopwatch/stopwatch.go +++ b/pkg/time_stopwatch_supportive/stopwatch.go @@ -1,4 +1,4 @@ -package time_stopwatch +package time_stopwatch_supportive type Stopwatch struct { periods map[string]*StartedPeriod diff --git a/pkg/supportive/time_stopwatch/stopwatch_exception.go b/pkg/time_stopwatch_supportive/stopwatch_exception.go similarity index 94% rename from pkg/supportive/time_stopwatch/stopwatch_exception.go rename to pkg/time_stopwatch_supportive/stopwatch_exception.go index 81fe2d5..b321b2b 100644 --- a/pkg/supportive/time_stopwatch/stopwatch_exception.go +++ b/pkg/time_stopwatch_supportive/stopwatch_exception.go @@ -1,4 +1,4 @@ -package time_stopwatch +package time_stopwatch_supportive import "fmt" diff --git a/pkg/util/GetLineByPosition.go b/pkg/util/GetLineByPosition.go index 3ec3d04..0b150d6 100644 --- a/pkg/util/GetLineByPosition.go +++ b/pkg/util/GetLineByPosition.go @@ -6,16 +6,16 @@ import ( "os" ) -// getLineByPositionInner returns the line that contains the specified character position (zero-based index) from the file +// getLineByPositionInner returns the line that contains the specified character position (zero-based index) from the file_supportive func getLineByPositionInner(filePath string, position int) (int, error) { file, err := os.Open(filePath) if err != nil { - return 0, fmt.Errorf("could not open file: %v", err) + return 0, fmt.Errorf("could not open file_supportive: %v", err) } defer func(file *os.File) { err := file.Close() if err != nil { - fmt.Println("could not close file err:" + err.Error()) + fmt.Println("could not close file_supportive err:" + err.Error()) } }(file) @@ -33,7 +33,7 @@ func getLineByPositionInner(filePath string, position int) (int, error) { } if err := scanner.Err(); err != nil { - return 0, fmt.Errorf("error reading file: %v", err) + return 0, fmt.Errorf("error reading file_supportive: %v", err) } return 0, fmt.Errorf("position %d out of range", position) diff --git a/pkg/util/GetPathWithOnlytFiename.go b/pkg/util/GetPathWithOnlytFiename.go index f43bc99..194186d 100644 --- a/pkg/util/GetPathWithOnlytFiename.go +++ b/pkg/util/GetPathWithOnlytFiename.go @@ -13,7 +13,7 @@ func GetPathWithOnlyFilename(path string) (string, error) { } if pathStat.IsDir() { - return "", errors.New("required path is a file") + return "", errors.New("required path is a file_supportive") } path = filepath.Base(path) diff --git a/pkg/util/parse_yaml_file.go b/pkg/util/parse_yaml_file.go index 0a498cb..52c14cd 100644 --- a/pkg/util/parse_yaml_file.go +++ b/pkg/util/parse_yaml_file.go @@ -12,11 +12,11 @@ func ParseYamlFile(file string) (map[string]interface{}, error) { yamlFile, err := os.ReadFile(file) if err != nil { - return nil, errors.Wrap(err, "could not read yaml file") + return nil, errors.Wrap(err, "could not read yaml file_supportive") } err = yaml.Unmarshal(yamlFile, &output) if err != nil { - return nil, errors.Wrap(err, "could not unmarshal yaml file") + return nil, errors.Wrap(err, "could not unmarshal yaml file_supportive") } return output, nil diff --git a/pkg/util/parse_yaml_file_test.go b/pkg/util/parse_yaml_file_test.go index 6db940e..d6481be 100644 --- a/pkg/util/parse_yaml_file_test.go +++ b/pkg/util/parse_yaml_file_test.go @@ -14,6 +14,6 @@ func TestParseYamlFile(t *testing.T) { _, ok := data["test"] if !ok { - panic("Key 'test' not found in the yaml file") + panic("Key 'test' not found in the yaml file_supportive") } } From 41ad27672bc56b8c4ee29bf88b61dbd24b2ad83c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Thu, 10 Oct 2024 19:37:50 +0300 Subject: [PATCH 10/40] refactor: structure --- README.md | 4 +- cmd/go-deptrac/main.go | 9 - cmd/go_deptrac/main.go | 9 + examples/run_test.go | 34 +- .../app/app.go | 0 .../deptrac.yaml} | 0 .../domain/user.go | 0 .../go.mod | 0 .../infrastructure/kv-store.go | 0 .../controller/controller.go | 4 +- .../deptrac.yaml} | 0 .../repository/repository.go | 0 .../run_test.go | 6 +- .../controller/controller.go | 4 +- .../depfile.yaml => simple_mvc/deptrac.yaml} | 0 .../repository/repository.go | 0 .../run_test.go | 6 +- .../service/service.go | 4 +- .../analysis_result/analysis_result.go | 61 --- .../post_process_event/post_process_event.go | 24 -- .../process_event/process_event.go | 43 --- pkg/analyser_core/analyser_exception.go | 50 --- .../dependency_layers_analyser.go | 107 ------ .../unmatched_skipped_violations.go | 29 -- .../application => app}/application.go | 13 +- .../application => app}/application_test.go | 2 +- pkg/app/container_builder.go | 85 +++++ .../service_container_builder.go} | 40 +- pkg/app/services.go | 335 +++++++++++++++++ pkg/app/test_container_provider.go | 32 ++ ...n_reference_with_dependencies_interface.go | 11 - pkg/ast_core/ast_loader.go | 58 --- pkg/ast_core/ast_map/class_like_reference.go | 47 --- .../ast_map/class_like_reference_builder.go | 65 ---- pkg/ast_core/ast_map/dependency_token.go | 14 - pkg/ast_core/ast_map/variable_reference.go | 21 -- .../ast_file_reference_cache_interface.go | 10 - .../reference_extractor_interface.go | 11 - .../node_namer_test/node_namer_test.go | 19 - pkg/ast_core/parser/parser_interface.go | 9 - .../ast_file_analysed_event.go | 2 +- .../ast_file_reference_cache_interface.go | 10 + ...file_reference_deferred_cache_interface.go | 2 +- .../ast_file_reference_file_cache.go | 35 +- .../ast_file_reference_in_memory_cache.go | 12 +- .../ast_file_syntax_error_event.go | 2 +- pkg/{ast_core => }/ast_map/ast_inherit.go | 9 +- .../ast_map/ast_inherit_type.go | 0 pkg/ast_map/ast_loader.go | 56 +++ pkg/ast_map/ast_loader_test.go | 42 +++ pkg/{ast_core => }/ast_map/ast_map.go | 46 +-- .../ast_map_extractor.go | 13 +- .../ast_map_extractor_test.go | 21 +- .../post_create_ast_map_event.go | 2 +- .../pre_create_ast_map_event.go | 2 +- .../abstract_type_collector.go | 21 +- .../bool_collector.go | 15 +- .../class_collector.go | 8 +- .../class_like_collector.go | 8 +- pkg/collectors/class_name_regex_collector.go | 39 ++ .../collector_config.go | 2 +- .../collector_interface.go | 6 +- pkg/collectors/collector_provider.go | 31 ++ pkg/collectors/collector_resolver.go | 35 ++ .../collector_resolver_interface.go | 9 + pkg/collectors/collector_type.go | 65 ++++ .../composer_collector.go | 22 +- .../configurable_collector_config.go | 2 +- .../directory_collector.go | 14 +- .../directory_collector_test.go | 4 +- .../file_input_collector.go | 21 +- pkg/collectors/function_name_collector.go | 38 ++ .../glob_collector.go | 20 +- pkg/collectors/inheritance_level_collector.go | 47 +++ pkg/collectors/inherits_collector.go | 52 +++ .../input_collector_interface.go | 2 +- .../interface_collector.go | 8 +- pkg/collectors/layer_collector.go | 60 +++ .../method_collector.go | 26 +- .../regex_collector.go | 6 +- pkg/collectors/superglobal_collector.go | 41 +++ .../trait_collector.go | 8 +- pkg/collectors/uses_collector.go | 52 +++ .../DebugDependenciesCommand.php | 0 .../DebugLayerCommand.php | 0 .../DebugTokenCommand.php | 0 .../DebugUnassignedCommand.php | 0 .../DebugUnusedCommand.php | 0 .../command => commands}/InitCommand.php | 0 pkg/commands/analyse_command.go | 49 +++ .../changed_files_command.go | 12 +- .../collector/attribute_config.go | 17 - pkg/config_contract/collector/bool_config.go | 31 -- pkg/config_contract/collector/class_config.go | 17 - .../collector/class_like_config.go | 17 - .../collector/class_name_regex_config.go | 17 - .../collector/directory_config.go | 17 - .../collector/extends_config.go | 17 - .../collector/function_name_config.go | 17 - pkg/config_contract/collector/glob_config.go | 17 - .../collector/implements_config.go | 17 - .../collector/inherits_config.go | 17 - .../collector/interface_config.go | 17 - pkg/config_contract/collector/layer_config.go | 17 - .../collector/method_config.go | 17 - .../collector/php_interal_config.go | 17 - pkg/config_contract/collector/trait_config.go | 17 - pkg/config_contract/collector/uses_config.go | 17 - pkg/config_contract/collector_type.go | 65 ---- .../deptrac_config/deptrac_config.go | 292 --------------- pkg/config_contract/emitter_type.go | 37 -- .../formatter/codeclimate_config.go | 68 ---- .../analyser_config.go | 18 +- pkg/configs/attribute_config.go | 15 + pkg/configs/bool_config.go | 29 ++ pkg/configs/class_config.go | 15 + pkg/configs/class_like_config.go | 15 + pkg/configs/class_name_regex_config.go | 15 + pkg/configs/codeclimate_config.go | 69 ++++ .../collector => configs}/composer_config.go | 14 +- pkg/{config => configs}/config.go | 10 +- pkg/{config => configs}/config_file_hook.go | 4 +- .../configuration_codeclimate.go | 8 +- .../configuration_graph_viz.go | 2 +- pkg/configs/deptrac_config.go | 324 ++++++++++++++++ pkg/configs/directory_config.go | 15 + pkg/configs/extends_config.go | 15 + pkg/configs/function_name_config.go | 15 + pkg/configs/glob_config.go | 15 + .../formatter => configs}/graphviz_config.go | 21 +- pkg/configs/implements_config.go | 15 + pkg/configs/inherits_config.go | 15 + pkg/configs/interface_config.go | 15 + pkg/configs/layer_config.go | 15 + .../mermaid_js_config.go | 15 +- pkg/configs/method_config.go | 15 + pkg/configs/php_interal_config.go | 15 + .../super_global_config.go | 14 +- .../tag_value_regex_config.go | 14 +- pkg/configs/trait_config.go | 15 + pkg/configs/uses_config.go | 15 + .../application_version.go | 3 - .../command/analyse_command.go | 47 --- .../command/analyse_runner.go | 112 ------ pkg/console_supportive/env.go | 13 - .../subscriber/console_subscriber.go | 90 ----- .../subscriber/progress_subscriber.go | 35 -- .../allow_dependency_handler.go | 10 +- pkg/dependencies/dependency.go | 38 ++ .../dependency_context.go | 10 +- pkg/dependencies/dependency_interface.go | 14 + .../dependency_layers_analyser.go | 103 ++++++ .../dependency_list.go | 20 +- pkg/dependencies/dependency_resolver.go | 68 ++++ .../dependency_type.go | 2 +- .../inherit_dependency.go | 23 +- .../layer_dependencies_analyser.go | 35 +- .../uncovered_dependent_handler.go | 16 +- .../dependency_interface.go | 16 - pkg/dependency_core/dependency.go | 40 -- .../dependency_resolver.go | 69 ---- .../emitter/class_dependency_emitter.go | 39 -- .../emitter/dependency_emitter_interface.go | 11 - .../function_call_dependency_emitter.go | 54 --- pkg/dependency_core/token_resolver.go | 27 -- .../CannotLoadConfiguration.go | 27 -- pkg/dependency_injection_supportive/cache.go | 14 - .../container_builder/container_builder.go | 88 ----- .../event_subscriber_default_priority.go | 3 - .../event_subscriber_interface_map.go | 8 - .../event_subscriber_interface_map_reg.go | 66 ---- .../services.go | 348 ------------------ .../test_container_provider.go | 29 -- pkg/domain/apperrors/analyser_exception.go | 46 +++ .../apperrors}/ast_exception.go | 5 +- .../apperrors/cache_file_exception.go} | 2 +- ...get_current_working_directory_exception.go | 2 +- .../apperrors/cannot_load_configuration.go | 15 + .../circular_reference_exception.go | 2 +- .../apperrors}/command_run_exception.go | 2 +- .../could_not_parse_file_exception.go | 2 +- .../could_not_read_file_exception.go | 2 +- .../apperrors}/error.go | 3 +- .../apperrors}/exception_interface.go | 2 +- .../file_already_exists_exception.go | 9 +- ...file_cannot_be_parsed_as_yaml_exception.go | 2 +- .../apperrors}/file_not_exists_exception.go | 2 +- .../apperrors}/file_not_writable_exception.go | 9 +- .../apperrors}/input_exception.go | 2 +- .../invalid_collector_definition_exception.go | 39 ++ ...invalid_emitter_configuration_exception.go | 7 +- .../invalid_layer_definition_exception.go | 2 +- .../apperrors}/invalid_path_exception.go | 2 +- .../invalid_service_in_locator_exception.go} | 5 +- .../apperrors/io_exception.go} | 2 +- .../apperrors}/output_exception.go | 2 +- .../parsed_yaml_is_not_an_array_exception.go | 2 +- .../apperrors}/stopwatch_exception.go | 2 +- .../unrecognized_token_exception.go | 8 +- .../stopwatch}/period.go | 2 +- .../stopwatch}/started_period.go | 2 +- .../stopwatch}/stopwatch.go | 16 +- pkg/{util/AsPtr.go => domain/utils/as_ptr.go} | 2 +- .../utils}/dumper.go | 2 +- .../utils/file_exists.go} | 2 +- .../utils}/file_reader.go | 6 +- .../utils/get_line_by_position.go} | 2 +- .../utils/get_path_with_only_filename.go} | 2 +- .../utils/get_path_without_filename.go} | 2 +- .../utils/glob_to_regex.go} | 2 +- pkg/{util => domain/utils}/in_array.go | 2 +- .../utils/is_primitive_type.go} | 2 +- .../utils/is_readable.go} | 2 +- .../IsStruct.go => domain/utils/is_struct.go} | 2 +- .../utils/is_writeable.go} | 2 +- .../utils/map_key_exists.go} | 2 +- .../utils/map_key_is_array_of_strings.go} | 2 +- .../utils/map_key_is_int.go} | 2 +- .../utils/map_key_is_string.go} | 2 +- pkg/{util => domain/utils}/parse_yaml_file.go | 2 +- .../utils}/parse_yaml_file_test.go | 2 +- .../utils/path_canonicalize.go} | 2 +- pkg/{util => domain/utils}/path_normalize.go | 2 +- .../Sha1File.go => domain/utils/sha1file.go} | 2 +- pkg/{util => domain/utils}/spl_object_id.go | 2 +- pkg/emitters/class_dependency_emitter.go | 39 ++ .../class_superglobal_dependency_emitter.go | 13 +- pkg/emitters/dependency_emitter_interface.go | 11 + pkg/emitters/emitter_type.go | 37 ++ .../file_dependency_emitter.go | 15 +- .../function_call_dependency_emitter.go | 53 +++ .../function_dependency_emitter.go | 15 +- ...function_superglobal_dependency_emitter.go | 13 +- .../post_emit_event.go | 2 +- .../pre_emit_event.go | 2 +- .../uses_dependency_emitter.go | 21 +- .../codeclimate_level_enum.go | 2 +- .../rule_type_enum.go | 13 +- .../event_dispatcher_interface.go | 2 +- .../event_dispatcher_interface2.go} | 9 +- .../event_helper => events}/event_helper.go | 26 +- pkg/events/post_process_event.go | 24 ++ pkg/events/process_event.go | 43 +++ .../extractors/AnonymousClassExtractor.php | 0 .../extractors/ClassConstantExtractor.php | 0 .../extractors/FunctionCallResolver.php | 0 .../extractors/FunctionLikeExtractor.php | 0 .../extractors/KeywordExtractor.php | 0 .../extractors/PropertyExtractor.php | 0 .../extractors/StaticExtractor.php | 0 .../extractors/VariableExtractor.php | 0 .../inheritance_flattener.go | 12 +- .../post_flatten_event.go | 2 +- .../pre_flatten_event.go | 2 +- .../baseline_output_formatter.go | 17 +- .../codeclimate_output_formatter.go | 119 ++++++ pkg/formatters/console_output_formatter.go | 160 ++++++++ .../formatter_config_interface.go | 2 +- pkg/formatters/formatter_configuration.go | 13 + pkg/formatters/formatter_provider.go | 36 ++ .../formatter_type.go | 2 +- .../github_actions_output_formatter.go | 120 ++++++ .../graph_viz_output_display_formatter.go | 9 +- .../graph_viz_output_dot_formatter.go | 11 +- .../graph_viz_output_formatter.go | 39 +- .../graph_viz_output_html_formatter.go | 11 +- .../graph_viz_output_image_formatter.go | 11 +- .../json_output_formatter.go | 36 +- .../junit_output_formatter.go | 98 ++--- .../mermaid_js_output_formatter.go | 18 +- .../output_formatter_input.go | 2 +- .../output_formatter_interface.go | 6 +- .../output_formatter_type.go | 2 +- .../symfony => formatters}/style.go | 18 +- .../table_output_formatter.go | 45 ++- .../table_output_formatter_test.go | 2 +- .../xml_output_formatter.go | 21 +- pkg/{config => hooks}/template_file_hook.go | 2 +- .../yml_file_loader.go | 8 +- .../invalid_collector_definition_exception.go | 54 --- .../collector/class_name_regex_collector.go | 39 -- pkg/layer_core/collector/collectable.go | 14 - .../collector/collector_provider.go | 33 -- .../collector/collector_resolver.go | 29 -- .../collector/collector_resolver_interface.go | 5 - .../collector/function_name_collector.go | 38 -- .../collector/inheritance_level_collector.go | 47 --- .../collector/inherits_collector.go | 52 --- pkg/layer_core/collector/layer_collector.go | 60 --- .../collector/superglobal_collector.go | 41 --- pkg/layer_core/collector/uses_collector.go | 52 --- .../layer_resolver_interface.go | 14 - pkg/{config_contract => layers}/layer.go | 10 +- .../layer_provider.go | 15 +- pkg/{layer_core => layers}/layer_resolver.go | 27 +- pkg/layers/layer_resolver_interface.go | 12 + .../matching_layers_handler.go | 6 +- .../fqdn_index_node.go} | 2 +- .../node_namer => nodes}/node_namer.go | 13 +- pkg/nodes/node_namer_test.go | 19 + .../codeclimate_output_formatter.go | 119 ------ .../configuration/formatter_configuration.go | 17 - .../console_output_formatter.go | 160 -------- .../formatter_provider.go | 37 -- .../github_actions_output_formatter.go | 120 ------ .../nikic_php_parser.go | 38 +- .../nikic_php_parser_test.go | 4 +- pkg/parsers/parser_interface.go | 7 + .../AnnotationReferenceExtractor.php | 0 pkg/references/class_like_reference.go | 49 +++ .../class_like_reference_builder.go | 68 ++++ .../ast_map => references}/file_reference.go | 16 +- .../file_reference_builder.go | 7 +- .../file_reference_visitor.go | 106 +++++- .../file_reference_visitor_test.go | 22 +- .../function_reference.go | 20 +- .../function_reference_builder.go | 6 +- .../reference_builder.go | 48 +-- .../reference_extractor_interface.go | 12 + pkg/references/variable_reference.go | 19 + .../output_result/output_result.go | 111 ------ pkg/result_contract/rule_interface.go | 10 - pkg/result_contract/uncovered.go | 22 -- .../output_interface.go | 2 +- pkg/results/output_result.go | 113 ++++++ .../output_style_interface.go | 2 +- .../symfony => results}/symfony_output.go | 11 +- pkg/{result_contract => rules}/allowed.go | 12 +- .../command => rules}/analyse_options.go | 2 +- pkg/{config => rules}/analyse_options_hook.go | 9 +- pkg/rules/analysis_result.go | 63 ++++ .../covered_rule_interface.go | 2 +- pkg/rules/rule_interface.go | 8 + pkg/{config_contract => rules}/ruleset.go | 16 +- .../ruleset_usage_analyser.go | 36 +- .../skipped_violation.go | 12 +- pkg/rules/uncovered.go | 20 + pkg/{result_contract => rules}/violation.go | 14 +- .../DebugDependenciesRunner.php | 0 .../command => runners}/DebugLayerRunner.php | 0 .../command => runners}/DebugTokenRunner.php | 0 .../DebugUnassignedRunner.php | 0 .../command => runners}/DebugUnusedRunner.php | 0 pkg/runners/analyse_runner.go | 113 ++++++ .../changed_files_runner.go | 39 +- .../cacheable_file_subscriber.go | 14 +- pkg/subscribers/console_subscriber.go | 91 +++++ .../depends_on_disallowed_layer.go | 19 +- .../depends_on_internal_token.go | 17 +- .../depends_on_private_layer.go | 11 +- .../event_subscriber_default_priority.go | 3 + .../event_subscriber_interface.go | 2 +- .../event_subscriber_interface_map.go | 7 + .../event_subscriber_interface_map_reg.go | 62 ++++ pkg/subscribers/progress_subscriber.go | 35 ++ .../ast_map => tokens}/class_like_token.go | 2 +- pkg/tokens/dependency_token.go | 14 + .../ast_map => tokens}/file_token.go | 8 +- .../ast_map => tokens}/function_token.go | 2 +- .../layer_for_token_analyser.go | 23 +- .../ast_map => tokens}/super_global_token.go | 2 +- .../tagged_token_reference.go | 2 +- .../tagged_token_reference_interface.go | 2 +- .../token_interface.go => tokens/token.go} | 2 +- .../token_in_layer_analyser.go | 25 +- .../token_reference_interface.go | 2 +- ...n_reference_with_dependencies_interface.go | 6 + pkg/tokens/token_resolver.go | 27 ++ pkg/{analyser_core => tokens}/token_type.go | 8 +- .../unassigned_token_analyser.go | 25 +- pkg/{result_contract => tokens}/warning.go | 2 +- .../ast_map => types}/class_like_type.go | 2 +- .../parser => types}/type_resolver.go | 10 +- pkg/{ast_core/parser => types}/type_scope.go | 2 +- pkg/util/NewLogger.go | 18 - pkg/violations/cache.go | 14 + pkg/violations/collectable.go | 12 + .../file_occurrence.go | 2 +- .../unmatched_skipped_violations.go | 28 ++ .../violation_creating_interface.go | 2 +- resources/deptrac-empty.yaml | 5 + resources/test/create_ast_map/main.go | 10 + resources/test/decls_in_root/main.go | 23 ++ .../test}/example.yaml | 0 .../test}/parse_yaml_file_test_1.yaml | 0 385 files changed, 4620 insertions(+), 4575 deletions(-) delete mode 100644 cmd/go-deptrac/main.go create mode 100644 cmd/go_deptrac/main.go rename examples/{simple-cleanarch => simple_clean_arch}/app/app.go (100%) rename examples/{simple-cleanarch/depfile.yaml => simple_clean_arch/deptrac.yaml} (100%) rename examples/{simple-cleanarch => simple_clean_arch}/domain/user.go (100%) rename examples/{simple-cleanarch => simple_clean_arch}/go.mod (100%) rename examples/{simple-cleanarch => simple_clean_arch}/infrastructure/kv-store.go (100%) rename examples/{simple-invalid-mvc => simple_invalid_mvc}/controller/controller.go (65%) rename examples/{simple-invalid-mvc/depfile.yaml => simple_invalid_mvc/deptrac.yaml} (100%) rename examples/{simple-invalid-mvc => simple_invalid_mvc}/repository/repository.go (100%) rename examples/{simple-mvc => simple_invalid_mvc}/run_test.go (64%) rename examples/{simple-mvc => simple_mvc}/controller/controller.go (68%) rename examples/{simple-mvc/depfile.yaml => simple_mvc/deptrac.yaml} (100%) rename examples/{simple-mvc => simple_mvc}/repository/repository.go (100%) rename examples/{simple-invalid-mvc => simple_mvc}/run_test.go (63%) rename examples/{simple-mvc => simple_mvc}/service/service.go (68%) delete mode 100644 pkg/analyser_contract/analysis_result/analysis_result.go delete mode 100644 pkg/analyser_contract/post_process_event/post_process_event.go delete mode 100644 pkg/analyser_contract/process_event/process_event.go delete mode 100644 pkg/analyser_core/analyser_exception.go delete mode 100644 pkg/analyser_core/dependency_layers_analyser.go delete mode 100644 pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go rename pkg/{console_supportive/application => app}/application.go (87%) rename pkg/{console_supportive/application => app}/application_test.go (92%) create mode 100644 pkg/app/container_builder.go rename pkg/{dependency_injection_supportive/ServiceContainerBuilder.go => app/service_container_builder.go} (60%) create mode 100644 pkg/app/services.go create mode 100644 pkg/app/test_container_provider.go delete mode 100644 pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go delete mode 100644 pkg/ast_core/ast_loader.go delete mode 100644 pkg/ast_core/ast_map/class_like_reference.go delete mode 100644 pkg/ast_core/ast_map/class_like_reference_builder.go delete mode 100644 pkg/ast_core/ast_map/dependency_token.go delete mode 100644 pkg/ast_core/ast_map/variable_reference.go delete mode 100644 pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go delete mode 100644 pkg/ast_core/parser/extractors/reference_extractor_interface.go delete mode 100644 pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go delete mode 100644 pkg/ast_core/parser/parser_interface.go rename pkg/{ast_contract => ast_map}/ast_file_analysed_event.go (92%) create mode 100644 pkg/ast_map/ast_file_reference_cache_interface.go rename pkg/{ast_core/parser/cache => ast_map}/ast_file_reference_deferred_cache_interface.go (88%) rename pkg/{ast_core/parser/cache => ast_map}/ast_file_reference_file_cache.go (76%) rename pkg/{ast_core/parser/cache => ast_map}/ast_file_reference_in_memory_cache.go (65%) rename pkg/{ast_contract => ast_map}/ast_file_syntax_error_event.go (94%) rename pkg/{ast_core => }/ast_map/ast_inherit.go (76%) rename pkg/{ast_core => }/ast_map/ast_inherit_type.go (100%) create mode 100644 pkg/ast_map/ast_loader.go create mode 100644 pkg/ast_map/ast_loader_test.go rename pkg/{ast_core => }/ast_map/ast_map.go (68%) rename pkg/{ast_core => ast_map}/ast_map_extractor.go (55%) rename pkg/{ast_core => ast_map}/ast_map_extractor_test.go (53%) rename pkg/{ast_contract => ast_map}/post_create_ast_map_event.go (91%) rename pkg/{ast_contract => ast_map}/pre_create_ast_map_event.go (93%) rename pkg/{layer_core/collector => collectors}/abstract_type_collector.go (50%) rename pkg/{layer_core/collector => collectors}/bool_collector.go (73%) rename pkg/{layer_core/collector => collectors}/class_collector.go (55%) rename pkg/{layer_core/collector => collectors}/class_like_collector.go (56%) create mode 100644 pkg/collectors/class_name_regex_collector.go rename pkg/{config_contract => collectors}/collector_config.go (96%) rename pkg/{layer_contract => collectors}/collector_interface.go (51%) create mode 100644 pkg/collectors/collector_provider.go create mode 100644 pkg/collectors/collector_resolver.go create mode 100644 pkg/collectors/collector_resolver_interface.go create mode 100644 pkg/collectors/collector_type.go rename pkg/{layer_core/collector => collectors}/composer_collector.go (54%) rename pkg/{config_contract => collectors}/configurable_collector_config.go (98%) rename pkg/{layer_core/collector => collectors}/directory_collector.go (68%) rename pkg/{layer_core/collector => collectors}/directory_collector_test.go (82%) rename pkg/{input_collector_core => collectors}/file_input_collector.go (67%) create mode 100644 pkg/collectors/function_name_collector.go rename pkg/{layer_core/collector => collectors}/glob_collector.go (57%) create mode 100644 pkg/collectors/inheritance_level_collector.go create mode 100644 pkg/collectors/inherits_collector.go rename pkg/{input_collector_core => collectors}/input_collector_interface.go (71%) rename pkg/{layer_core/collector => collectors}/interface_collector.go (56%) create mode 100644 pkg/collectors/layer_collector.go rename pkg/{layer_core/collector => collectors}/method_collector.go (53%) rename pkg/{layer_core/collector => collectors}/regex_collector.go (68%) create mode 100644 pkg/collectors/superglobal_collector.go rename pkg/{layer_core/collector => collectors}/trait_collector.go (55%) create mode 100644 pkg/collectors/uses_collector.go rename pkg/{console_supportive/command => commands}/DebugDependenciesCommand.php (100%) rename pkg/{console_supportive/command => commands}/DebugLayerCommand.php (100%) rename pkg/{console_supportive/command => commands}/DebugTokenCommand.php (100%) rename pkg/{console_supportive/command => commands}/DebugUnassignedCommand.php (100%) rename pkg/{console_supportive/command => commands}/DebugUnusedCommand.php (100%) rename pkg/{console_supportive/command => commands}/InitCommand.php (100%) create mode 100644 pkg/commands/analyse_command.go rename pkg/{console_supportive/command => commands}/changed_files_command.go (72%) delete mode 100644 pkg/config_contract/collector/attribute_config.go delete mode 100644 pkg/config_contract/collector/bool_config.go delete mode 100644 pkg/config_contract/collector/class_config.go delete mode 100644 pkg/config_contract/collector/class_like_config.go delete mode 100644 pkg/config_contract/collector/class_name_regex_config.go delete mode 100644 pkg/config_contract/collector/directory_config.go delete mode 100644 pkg/config_contract/collector/extends_config.go delete mode 100644 pkg/config_contract/collector/function_name_config.go delete mode 100644 pkg/config_contract/collector/glob_config.go delete mode 100644 pkg/config_contract/collector/implements_config.go delete mode 100644 pkg/config_contract/collector/inherits_config.go delete mode 100644 pkg/config_contract/collector/interface_config.go delete mode 100644 pkg/config_contract/collector/layer_config.go delete mode 100644 pkg/config_contract/collector/method_config.go delete mode 100644 pkg/config_contract/collector/php_interal_config.go delete mode 100644 pkg/config_contract/collector/trait_config.go delete mode 100644 pkg/config_contract/collector/uses_config.go delete mode 100644 pkg/config_contract/collector_type.go delete mode 100644 pkg/config_contract/deptrac_config/deptrac_config.go delete mode 100644 pkg/config_contract/emitter_type.go delete mode 100644 pkg/config_contract/formatter/codeclimate_config.go rename pkg/{config_contract => configs}/analyser_config.go (59%) create mode 100644 pkg/configs/attribute_config.go create mode 100644 pkg/configs/bool_config.go create mode 100644 pkg/configs/class_config.go create mode 100644 pkg/configs/class_like_config.go create mode 100644 pkg/configs/class_name_regex_config.go create mode 100644 pkg/configs/codeclimate_config.go rename pkg/{config_contract/collector => configs}/composer_config.go (73%) rename pkg/{config => configs}/config.go (50%) rename pkg/{config => configs}/config_file_hook.go (85%) rename pkg/{output_formatter_supportive/configuration => configs}/configuration_codeclimate.go (82%) rename pkg/{output_formatter_supportive/configuration => configs}/configuration_graph_viz.go (96%) create mode 100644 pkg/configs/deptrac_config.go create mode 100644 pkg/configs/directory_config.go create mode 100644 pkg/configs/extends_config.go create mode 100644 pkg/configs/function_name_config.go create mode 100644 pkg/configs/glob_config.go rename pkg/{config_contract/formatter => configs}/graphviz_config.go (75%) create mode 100644 pkg/configs/implements_config.go create mode 100644 pkg/configs/inherits_config.go create mode 100644 pkg/configs/interface_config.go create mode 100644 pkg/configs/layer_config.go rename pkg/{config_contract/formatter => configs}/mermaid_js_config.go (73%) create mode 100644 pkg/configs/method_config.go create mode 100644 pkg/configs/php_interal_config.go rename pkg/{config_contract/collector => configs}/super_global_config.go (64%) rename pkg/{config_contract/collector => configs}/tag_value_regex_config.go (70%) create mode 100644 pkg/configs/trait_config.go create mode 100644 pkg/configs/uses_config.go delete mode 100644 pkg/console_supportive/application/application_version/application_version.go delete mode 100644 pkg/console_supportive/command/analyse_command.go delete mode 100644 pkg/console_supportive/command/analyse_runner.go delete mode 100644 pkg/console_supportive/env.go delete mode 100644 pkg/console_supportive/subscriber/console_subscriber.go delete mode 100644 pkg/console_supportive/subscriber/progress_subscriber.go rename pkg/{analyser_core/event_handler/process_event => dependencies}/allow_dependency_handler.go (56%) create mode 100644 pkg/dependencies/dependency.go rename pkg/{ast_contract => dependencies}/dependency_context.go (53%) create mode 100644 pkg/dependencies/dependency_interface.go create mode 100644 pkg/dependencies/dependency_layers_analyser.go rename pkg/{dependency_core => dependencies}/dependency_list.go (65%) create mode 100644 pkg/dependencies/dependency_resolver.go rename pkg/{ast_contract => dependencies}/dependency_type.go (98%) rename pkg/{dependency_core => dependencies}/inherit_dependency.go (52%) rename pkg/{analyser_core => dependencies}/layer_dependencies_analyser.go (56%) rename pkg/{analyser_core/event_handler/process_event => dependencies}/uncovered_dependent_handler.go (68%) delete mode 100644 pkg/dependency_contract/dependency_interface.go delete mode 100644 pkg/dependency_core/dependency.go delete mode 100644 pkg/dependency_core/dependency_resolver/dependency_resolver.go delete mode 100644 pkg/dependency_core/emitter/class_dependency_emitter.go delete mode 100644 pkg/dependency_core/emitter/dependency_emitter_interface.go delete mode 100644 pkg/dependency_core/emitter/function_call_dependency_emitter.go delete mode 100644 pkg/dependency_core/token_resolver.go delete mode 100644 pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go delete mode 100644 pkg/dependency_injection_supportive/cache.go delete mode 100644 pkg/dependency_injection_supportive/container_builder/container_builder.go delete mode 100644 pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go delete mode 100644 pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go delete mode 100644 pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go delete mode 100644 pkg/dependency_injection_supportive/services.go delete mode 100644 pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go create mode 100644 pkg/domain/apperrors/analyser_exception.go rename pkg/{ast_core => domain/apperrors}/ast_exception.go (65%) rename pkg/{dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go => domain/apperrors/cache_file_exception.go} (94%) rename pkg/{console_supportive => domain/apperrors}/cannot_get_current_working_directory_exception.go (95%) create mode 100644 pkg/domain/apperrors/cannot_load_configuration.go rename pkg/{layer_contract => domain/apperrors}/circular_reference_exception.go (98%) rename pkg/{console_supportive/command => domain/apperrors}/command_run_exception.go (98%) rename pkg/{ast_contract => domain/apperrors}/could_not_parse_file_exception.go (95%) rename pkg/{file_supportive/exception => domain/apperrors}/could_not_read_file_exception.go (97%) rename pkg/{result_contract => domain/apperrors}/error.go (88%) rename pkg/{domain_error_contract => domain/apperrors}/exception_interface.go (93%) rename pkg/{file_supportive/exception => domain/apperrors}/file_already_exists_exception.go (59%) rename pkg/{file_supportive/exception => domain/apperrors}/file_cannot_be_parsed_as_yaml_exception.go (97%) rename pkg/{file_supportive/exception => domain/apperrors}/file_not_exists_exception.go (96%) rename pkg/{file_supportive/exception => domain/apperrors}/file_not_writable_exception.go (61%) rename pkg/{input_collector_core => domain/apperrors}/input_exception.go (93%) create mode 100644 pkg/domain/apperrors/invalid_collector_definition_exception.go rename pkg/{dependency_core => domain/apperrors}/invalid_emitter_configuration_exception.go (76%) rename pkg/{layer_contract => domain/apperrors}/invalid_layer_definition_exception.go (98%) rename pkg/{file_supportive/exception => domain/apperrors}/invalid_path_exception.go (96%) rename pkg/{dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go => domain/apperrors/invalid_service_in_locator_exception.go} (66%) rename pkg/{file_supportive/exception/i_o_exception.go => domain/apperrors/io_exception.go} (94%) rename pkg/{output_formatter_contract => domain/apperrors}/output_exception.go (88%) rename pkg/{file_supportive/exception => domain/apperrors}/parsed_yaml_is_not_an_array_exception.go (96%) rename pkg/{time_stopwatch_supportive => domain/apperrors}/stopwatch_exception.go (94%) rename pkg/{dependency_core => domain/apperrors}/unrecognized_token_exception.go (69%) rename pkg/{time_stopwatch_supportive => domain/stopwatch}/period.go (93%) rename pkg/{time_stopwatch_supportive => domain/stopwatch}/started_period.go (95%) rename pkg/{time_stopwatch_supportive => domain/stopwatch}/stopwatch.go (57%) rename pkg/{util/AsPtr.go => domain/utils/as_ptr.go} (78%) rename pkg/{file_supportive => domain/utils}/dumper.go (95%) rename pkg/{util/FileExists.go => domain/utils/file_exists.go} (91%) rename pkg/{file_supportive => domain/utils}/file_reader.go (54%) rename pkg/{util/GetLineByPosition.go => domain/utils/get_line_by_position.go} (98%) rename pkg/{util/GetPathWithOnlytFiename.go => domain/utils/get_path_with_only_filename.go} (95%) rename pkg/{util/GetPathWithoutFiename.go => domain/utils/get_path_without_filename.go} (94%) rename pkg/{util/GlobToRegex.go => domain/utils/glob_to_regex.go} (99%) rename pkg/{util => domain/utils}/in_array.go (91%) rename pkg/{util/IsPrimitiveType.go => domain/utils/is_primitive_type.go} (95%) rename pkg/{util/IsReadable.go => domain/utils/is_readable.go} (93%) rename pkg/{util/IsStruct.go => domain/utils/is_struct.go} (95%) rename pkg/{util/IsWriteable.go => domain/utils/is_writeable.go} (89%) rename pkg/{util/MapKeyExists.go => domain/utils/map_key_exists.go} (88%) rename pkg/{util/MapKeyIsArrayOfStrings.go => domain/utils/map_key_is_array_of_strings.go} (95%) rename pkg/{util/MapKeyIsInt.go => domain/utils/map_key_is_int.go} (90%) rename pkg/{util/MapKeyIsString.go => domain/utils/map_key_is_string.go} (90%) rename pkg/{util => domain/utils}/parse_yaml_file.go (97%) rename pkg/{util => domain/utils}/parse_yaml_file_test.go (95%) rename pkg/{util/PathCanonicalize.go => domain/utils/path_canonicalize.go} (92%) rename pkg/{util => domain/utils}/path_normalize.go (88%) rename pkg/{util/Sha1File.go => domain/utils/sha1file.go} (94%) rename pkg/{util => domain/utils}/spl_object_id.go (86%) create mode 100644 pkg/emitters/class_dependency_emitter.go rename pkg/{dependency_core/emitter => emitters}/class_superglobal_dependency_emitter.go (54%) create mode 100644 pkg/emitters/dependency_emitter_interface.go create mode 100644 pkg/emitters/emitter_type.go rename pkg/{dependency_core/emitter => emitters}/file_dependency_emitter.go (50%) create mode 100644 pkg/emitters/function_call_dependency_emitter.go rename pkg/{dependency_core/emitter => emitters}/function_dependency_emitter.go (55%) rename pkg/{dependency_core/emitter => emitters}/function_superglobal_dependency_emitter.go (58%) rename pkg/{dependency_contract => emitters}/post_emit_event.go (86%) rename pkg/{dependency_contract => emitters}/pre_emit_event.go (89%) rename pkg/{dependency_core/emitter => emitters}/uses_dependency_emitter.go (62%) rename pkg/{config_contract => enums}/codeclimate_level_enum.go (93%) rename pkg/{result_contract => enums}/rule_type_enum.go (66%) rename pkg/{dependency_injection_supportive/event_dispatcher/event_dispatcher_interface => events}/event_dispatcher_interface.go (70%) rename pkg/{dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go => events/event_dispatcher_interface2.go} (73%) rename pkg/{analyser_contract/event_helper => events}/event_helper.go (53%) create mode 100644 pkg/events/post_process_event.go create mode 100644 pkg/events/process_event.go rename pkg/{ast_core/parser => }/extractors/AnonymousClassExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/ClassConstantExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/FunctionCallResolver.php (100%) rename pkg/{ast_core/parser => }/extractors/FunctionLikeExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/KeywordExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/PropertyExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/StaticExtractor.php (100%) rename pkg/{ast_core/parser => }/extractors/VariableExtractor.php (100%) rename pkg/{dependency_core => flatteners}/inheritance_flattener.go (52%) rename pkg/{dependency_contract => flatteners}/post_flatten_event.go (90%) rename pkg/{dependency_contract => flatteners}/pre_flatten_event.go (90%) rename pkg/{output_formatter_supportive => formatters}/baseline_output_formatter.go (64%) create mode 100644 pkg/formatters/codeclimate_output_formatter.go create mode 100644 pkg/formatters/console_output_formatter.go rename pkg/{config_contract/formatter => formatters}/formatter_config_interface.go (84%) create mode 100644 pkg/formatters/formatter_configuration.go create mode 100644 pkg/formatters/formatter_provider.go rename pkg/{config_contract/formatter => formatters}/formatter_type.go (92%) create mode 100644 pkg/formatters/github_actions_output_formatter.go rename pkg/{output_formatter_supportive => formatters}/graph_viz_output_display_formatter.go (71%) rename pkg/{output_formatter_supportive => formatters}/graph_viz_output_dot_formatter.go (62%) rename pkg/{output_formatter_supportive => formatters}/graph_viz_output_formatter.go (73%) rename pkg/{output_formatter_supportive => formatters}/graph_viz_output_html_formatter.go (72%) rename pkg/{output_formatter_supportive => formatters}/graph_viz_output_image_formatter.go (70%) rename pkg/{output_formatter_supportive => formatters}/json_output_formatter.go (70%) rename pkg/{output_formatter_supportive => formatters}/junit_output_formatter.go (59%) rename pkg/{output_formatter_supportive => formatters}/mermaid_js_output_formatter.go (76%) rename pkg/{output_formatter_contract => formatters}/output_formatter_input.go (92%) rename pkg/{output_formatter_contract => formatters}/output_formatter_interface.go (56%) rename pkg/{output_formatter_contract => formatters}/output_formatter_type.go (94%) rename pkg/{console_supportive/symfony => formatters}/style.go (84%) rename pkg/{output_formatter_supportive => formatters}/table_output_formatter.go (75%) rename pkg/{output_formatter_supportive => formatters}/table_output_formatter_test.go (80%) rename pkg/{output_formatter_supportive => formatters}/xml_output_formatter.go (73%) rename pkg/{config => hooks}/template_file_hook.go (95%) rename pkg/{file_supportive => hooks}/yml_file_loader.go (80%) delete mode 100644 pkg/layer_contract/invalid_collector_definition_exception.go delete mode 100644 pkg/layer_core/collector/class_name_regex_collector.go delete mode 100644 pkg/layer_core/collector/collectable.go delete mode 100644 pkg/layer_core/collector/collector_provider.go delete mode 100644 pkg/layer_core/collector/collector_resolver.go delete mode 100644 pkg/layer_core/collector/collector_resolver_interface.go delete mode 100644 pkg/layer_core/collector/function_name_collector.go delete mode 100644 pkg/layer_core/collector/inheritance_level_collector.go delete mode 100644 pkg/layer_core/collector/inherits_collector.go delete mode 100644 pkg/layer_core/collector/layer_collector.go delete mode 100644 pkg/layer_core/collector/superglobal_collector.go delete mode 100644 pkg/layer_core/collector/uses_collector.go delete mode 100644 pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go rename pkg/{config_contract => layers}/layer.go (67%) rename pkg/{layer_contract => layers}/layer_provider.go (66%) rename pkg/{layer_core => layers}/layer_resolver.go (79%) create mode 100644 pkg/layers/layer_resolver_interface.go rename pkg/{analyser_core/event_handler/process_event => layers}/matching_layers_handler.go (76%) rename pkg/{dependency_core/emitter/f_q_d_n_index_node.go => nodes/fqdn_index_node.go} (97%) rename pkg/{ast_core/parser/nikic_php_parser/node_namer => nodes}/node_namer.go (86%) create mode 100644 pkg/nodes/node_namer_test.go delete mode 100644 pkg/output_formatter_supportive/codeclimate_output_formatter.go delete mode 100644 pkg/output_formatter_supportive/configuration/formatter_configuration.go delete mode 100644 pkg/output_formatter_supportive/console_output_formatter.go delete mode 100644 pkg/output_formatter_supportive/formatter_provider.go delete mode 100644 pkg/output_formatter_supportive/github_actions_output_formatter.go rename pkg/{ast_core/parser/nikic_php_parser => parsers}/nikic_php_parser.go (62%) rename pkg/{ast_core/parser/nikic_php_parser => parsers}/nikic_php_parser_test.go (72%) create mode 100644 pkg/parsers/parser_interface.go rename pkg/{ast_core/parser/extractors => references}/AnnotationReferenceExtractor.php (100%) create mode 100644 pkg/references/class_like_reference.go create mode 100644 pkg/references/class_like_reference_builder.go rename pkg/{ast_core/ast_map => references}/file_reference.go (75%) rename pkg/{ast_core/ast_map => references}/file_reference_builder.go (90%) rename pkg/{ast_core/parser/nikic_php_parser => references}/file_reference_visitor.go (66%) rename pkg/{ast_core/parser/nikic_php_parser => references}/file_reference_visitor_test.go (53%) rename pkg/{ast_core/ast_map => references}/function_reference.go (53%) rename pkg/{ast_core/ast_map => references}/function_reference_builder.go (81%) rename pkg/{ast_core/ast_map => references}/reference_builder.go (55%) create mode 100644 pkg/references/reference_extractor_interface.go create mode 100644 pkg/references/variable_reference.go delete mode 100644 pkg/result_contract/output_result/output_result.go delete mode 100644 pkg/result_contract/rule_interface.go delete mode 100644 pkg/result_contract/uncovered.go rename pkg/{output_formatter_contract => results}/output_interface.go (88%) create mode 100644 pkg/results/output_result.go rename pkg/{output_formatter_contract => results}/output_style_interface.go (97%) rename pkg/{console_supportive/symfony => results}/symfony_output.go (53%) rename pkg/{result_contract => rules}/allowed.go (56%) rename pkg/{console_supportive/command => rules}/analyse_options.go (97%) rename pkg/{config => rules}/analyse_options_hook.go (88%) create mode 100644 pkg/rules/analysis_result.go rename pkg/{result_contract => rules}/covered_rule_interface.go (93%) create mode 100644 pkg/rules/rule_interface.go rename pkg/{config_contract => rules}/ruleset.go (61%) rename pkg/{analyser_core => rules}/ruleset_usage_analyser.go (69%) rename pkg/{result_contract => rules}/skipped_violation.go (57%) create mode 100644 pkg/rules/uncovered.go rename pkg/{result_contract => rules}/violation.go (60%) rename pkg/{console_supportive/command => runners}/DebugDependenciesRunner.php (100%) rename pkg/{console_supportive/command => runners}/DebugLayerRunner.php (100%) rename pkg/{console_supportive/command => runners}/DebugTokenRunner.php (100%) rename pkg/{console_supportive/command => runners}/DebugUnassignedRunner.php (100%) rename pkg/{console_supportive/command => runners}/DebugUnusedRunner.php (100%) create mode 100644 pkg/runners/analyse_runner.go rename pkg/{console_supportive/command => runners}/changed_files_runner.go (54%) rename pkg/{ast_core/parser/cache => subscribers}/cacheable_file_subscriber.go (54%) create mode 100644 pkg/subscribers/console_subscriber.go rename pkg/{analyser_core/event_handler/process_event => subscribers}/depends_on_disallowed_layer.go (60%) rename pkg/{analyser_core/event_handler/process_event => subscribers}/depends_on_internal_token.go (63%) rename pkg/{analyser_core/event_handler/process_event => subscribers}/depends_on_private_layer.go (69%) create mode 100644 pkg/subscribers/event_subscriber_default_priority.go rename pkg/{dependency_injection_supportive/event_subscriber_interface => subscribers}/event_subscriber_interface.go (77%) create mode 100644 pkg/subscribers/event_subscriber_interface_map.go create mode 100644 pkg/subscribers/event_subscriber_interface_map_reg.go create mode 100644 pkg/subscribers/progress_subscriber.go rename pkg/{ast_core/ast_map => tokens}/class_like_token.go (97%) create mode 100644 pkg/tokens/dependency_token.go rename pkg/{ast_core/ast_map => tokens}/file_token.go (68%) rename pkg/{ast_core/ast_map => tokens}/function_token.go (98%) rename pkg/{analyser_core => tokens}/layer_for_token_analyser.go (69%) rename pkg/{ast_core/ast_map => tokens}/super_global_token.go (98%) rename pkg/{ast_core/ast_map => tokens}/tagged_token_reference.go (97%) rename pkg/{ast_contract => tokens}/tagged_token_reference_interface.go (91%) rename pkg/{ast_contract/token_interface.go => tokens/token.go} (88%) rename pkg/{analyser_core => tokens}/token_in_layer_analyser.go (77%) rename pkg/{ast_contract => tokens}/token_reference_interface.go (89%) create mode 100644 pkg/tokens/token_reference_with_dependencies_interface.go create mode 100644 pkg/tokens/token_resolver.go rename pkg/{analyser_core => tokens}/token_type.go (71%) rename pkg/{analyser_core => tokens}/unassigned_token_analyser.go (77%) rename pkg/{result_contract => tokens}/warning.go (96%) rename pkg/{ast_core/ast_map => types}/class_like_type.go (94%) rename pkg/{ast_core/parser => types}/type_resolver.go (94%) rename pkg/{ast_core/parser => types}/type_scope.go (98%) delete mode 100644 pkg/util/NewLogger.go create mode 100644 pkg/violations/cache.go create mode 100644 pkg/violations/collectable.go rename pkg/{ast_contract => violations}/file_occurrence.go (92%) create mode 100644 pkg/violations/unmatched_skipped_violations.go rename pkg/{analyser_contract/violation_creating_interface => violations}/violation_creating_interface.go (87%) create mode 100644 resources/deptrac-empty.yaml create mode 100644 resources/test/create_ast_map/main.go create mode 100644 resources/test/decls_in_root/main.go rename {pkg/config_contract => resources/test}/example.yaml (100%) rename {pkg/util => resources/test}/parse_yaml_file_test_1.yaml (100%) diff --git a/README.md b/README.md index 504a713..3af85cb 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The depfile is the config file for this tool, in this file you define (mainly) t Here is an example depfile: ```yaml -# depfile.yaml +# deptrac.yaml deptrac: paths: - ./src @@ -79,7 +79,7 @@ go-deptrac was only tested on Linux and should also work on OS X. Probably it do To run the tool, simply pass the path of the depfile: ```shell script -go-deptrac ./examples/simple-mvc/depfile.yaml +go_deptrac ./examples/simple_mvc/deptrac.yaml ``` ## Contributing diff --git a/cmd/go-deptrac/main.go b/cmd/go-deptrac/main.go deleted file mode 100644 index 2bb81b1..0000000 --- a/cmd/go-deptrac/main.go +++ /dev/null @@ -1,9 +0,0 @@ -package main - -import ( - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" -) - -func main() { - application.NewApplication().Run() -} diff --git a/cmd/go_deptrac/main.go b/cmd/go_deptrac/main.go new file mode 100644 index 0000000..68bba6c --- /dev/null +++ b/cmd/go_deptrac/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "github.com/KoNekoD/go-deptrac/pkg/app" +) + +func main() { + app.NewApplication().Run() +} diff --git a/examples/run_test.go b/examples/run_test.go index 2a3c72a..6fa28fb 100644 --- a/examples/run_test.go +++ b/examples/run_test.go @@ -2,25 +2,33 @@ package examples import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" + "github.com/KoNekoD/go-deptrac/pkg/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" ) func TestRunSimpleCleanarch(t *testing.T) { - os.Args = []string{ - "", - "--config_contract-file_supportive=pkg/test_projects/examples/simple-cleanarch/depfile.yaml", - "analyse", - } + t.Parallel() - flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - //err := flag.CommandLine.Parse(os.Args) - //if err != nil { - // t.Fatal(err) - //} + t.Run("simple_clean_arch", func(t *testing.T) { + configArg := "--config=examples/simple_clean_arch/deptrac.yaml" + os.Args = []string{"", configArg, "analyse"} + flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) + app.NewApplication().Run() + }) - application.NewApplication(). - Run() + t.Run("simple_invalid_mvc", func(t *testing.T) { + configArg := "--config=examples/simple_invalid_mvc/deptrac.yaml" + os.Args = []string{"", configArg, "analyse"} + flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) + app.NewApplication().Run() + }) + + t.Run("simple_mvc", func(t *testing.T) { + configArg := "--config=examples/simple_mvc/deptrac.yaml" + os.Args = []string{"", configArg, "analyse"} + flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) + app.NewApplication().Run() + }) } diff --git a/examples/simple-cleanarch/app/app.go b/examples/simple_clean_arch/app/app.go similarity index 100% rename from examples/simple-cleanarch/app/app.go rename to examples/simple_clean_arch/app/app.go diff --git a/examples/simple-cleanarch/depfile.yaml b/examples/simple_clean_arch/deptrac.yaml similarity index 100% rename from examples/simple-cleanarch/depfile.yaml rename to examples/simple_clean_arch/deptrac.yaml diff --git a/examples/simple-cleanarch/domain/user.go b/examples/simple_clean_arch/domain/user.go similarity index 100% rename from examples/simple-cleanarch/domain/user.go rename to examples/simple_clean_arch/domain/user.go diff --git a/examples/simple-cleanarch/go.mod b/examples/simple_clean_arch/go.mod similarity index 100% rename from examples/simple-cleanarch/go.mod rename to examples/simple_clean_arch/go.mod diff --git a/examples/simple-cleanarch/infrastructure/kv-store.go b/examples/simple_clean_arch/infrastructure/kv-store.go similarity index 100% rename from examples/simple-cleanarch/infrastructure/kv-store.go rename to examples/simple_clean_arch/infrastructure/kv-store.go diff --git a/examples/simple-invalid-mvc/controller/controller.go b/examples/simple_invalid_mvc/controller/controller.go similarity index 65% rename from examples/simple-invalid-mvc/controller/controller.go rename to examples/simple_invalid_mvc/controller/controller.go index 8b63e4a..8c11029 100644 --- a/examples/simple-invalid-mvc/controller/controller.go +++ b/examples/simple_invalid_mvc/controller/controller.go @@ -1,8 +1,6 @@ package controller -import ( - "github.com/KoNekoD/go-deptrac/pkg/test_projects/examples/simple-invalid-mvc/repository" -) +import "github.com/KoNekoD/go-deptrac/examples/simple_invalid_mvc/repository" type Controller interface{} diff --git a/examples/simple-invalid-mvc/depfile.yaml b/examples/simple_invalid_mvc/deptrac.yaml similarity index 100% rename from examples/simple-invalid-mvc/depfile.yaml rename to examples/simple_invalid_mvc/deptrac.yaml diff --git a/examples/simple-invalid-mvc/repository/repository.go b/examples/simple_invalid_mvc/repository/repository.go similarity index 100% rename from examples/simple-invalid-mvc/repository/repository.go rename to examples/simple_invalid_mvc/repository/repository.go diff --git a/examples/simple-mvc/run_test.go b/examples/simple_invalid_mvc/run_test.go similarity index 64% rename from examples/simple-mvc/run_test.go rename to examples/simple_invalid_mvc/run_test.go index 63223ba..d1e7d5f 100644 --- a/examples/simple-mvc/run_test.go +++ b/examples/simple_invalid_mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" + "github.com/KoNekoD/go-deptrac/pkg/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -11,7 +11,7 @@ import ( func TestRun(t *testing.T) { os.Args = []string{ "", - "--config_contract-file_supportive=pkg/test_projects/examples/simple-mvc/depfile.yaml", + "--config=pkg/test_projects/examples/simple_invalid_mvc/deptrac.yaml", "analyse", } @@ -21,6 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - application.NewApplication(). + app.NewApplication(). Run() } diff --git a/examples/simple-mvc/controller/controller.go b/examples/simple_mvc/controller/controller.go similarity index 68% rename from examples/simple-mvc/controller/controller.go rename to examples/simple_mvc/controller/controller.go index 6ee9550..03c9f03 100644 --- a/examples/simple-mvc/controller/controller.go +++ b/examples/simple_mvc/controller/controller.go @@ -1,8 +1,6 @@ package controller -import ( - "github.com/KoNekoD/go-deptrac/pkg/test_projects/examples/simple-mvc/service" -) +import "github.com/KoNekoD/go-deptrac/examples/simple_mvc/service" type Controller interface{} diff --git a/examples/simple-mvc/depfile.yaml b/examples/simple_mvc/deptrac.yaml similarity index 100% rename from examples/simple-mvc/depfile.yaml rename to examples/simple_mvc/deptrac.yaml diff --git a/examples/simple-mvc/repository/repository.go b/examples/simple_mvc/repository/repository.go similarity index 100% rename from examples/simple-mvc/repository/repository.go rename to examples/simple_mvc/repository/repository.go diff --git a/examples/simple-invalid-mvc/run_test.go b/examples/simple_mvc/run_test.go similarity index 63% rename from examples/simple-invalid-mvc/run_test.go rename to examples/simple_mvc/run_test.go index e3f5409..e0a697e 100644 --- a/examples/simple-invalid-mvc/run_test.go +++ b/examples/simple_mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" + "github.com/KoNekoD/go-deptrac/pkg/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" @@ -11,7 +11,7 @@ import ( func TestRun(t *testing.T) { os.Args = []string{ "", - "--config_contract-file_supportive=pkg/test_projects/examples/simple-invalid-mvc/depfile.yaml", + "--config=pkg/test_projects/examples/simple_mvc/deptrac.yaml", "analyse", } @@ -21,6 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - application.NewApplication(). + app.NewApplication(). Run() } diff --git a/examples/simple-mvc/service/service.go b/examples/simple_mvc/service/service.go similarity index 68% rename from examples/simple-mvc/service/service.go rename to examples/simple_mvc/service/service.go index 2737ed4..e794547 100644 --- a/examples/simple-mvc/service/service.go +++ b/examples/simple_mvc/service/service.go @@ -1,8 +1,6 @@ package service -import ( - "github.com/KoNekoD/go-deptrac/pkg/test_projects/examples/simple-mvc/repository" -) +import "github.com/KoNekoD/go-deptrac/examples/simple_mvc/repository" type Service interface{} diff --git a/pkg/analyser_contract/analysis_result/analysis_result.go b/pkg/analyser_contract/analysis_result/analysis_result.go deleted file mode 100644 index 1d5a2e0..0000000 --- a/pkg/analyser_contract/analysis_result/analysis_result.go +++ /dev/null @@ -1,61 +0,0 @@ -package analysis_result - -import ( - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -// AnalysisResult - Describes the result_contract of a source code analysis. -type AnalysisResult struct { - rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface - - warnings []*result_contract2.Warning - - errors []*result_contract2.Error -} - -func NewAnalysisResult() *AnalysisResult { - return &AnalysisResult{ - rules: make(map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface), - warnings: make([]*result_contract2.Warning, 0), - errors: make([]*result_contract2.Error, 0), - } -} - -func (r *AnalysisResult) AddRule(rule result_contract2.RuleInterface) { - ruleType := result_contract2.NewRuleTypeEnumByRule(rule) - id := util.SplObjectID(rule) - - if _, ok := r.rules[ruleType]; !ok { - r.rules[ruleType] = make(map[string]result_contract2.RuleInterface) - } - - r.rules[ruleType][id] = rule -} - -func (r *AnalysisResult) RemoveRule(rule result_contract2.RuleInterface) { - ruleType := result_contract2.NewRuleTypeEnumByRule(rule) - id := util.SplObjectID(rule) - - delete(r.rules[ruleType], id) -} - -func (r *AnalysisResult) Rules() map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface { - return r.rules -} - -func (r *AnalysisResult) AddWarning(warning *result_contract2.Warning) { - r.warnings = append(r.warnings, warning) -} - -func (r *AnalysisResult) Warnings() []*result_contract2.Warning { - return r.warnings -} - -func (r *AnalysisResult) AddError(error *result_contract2.Error) { - r.errors = append(r.errors, error) -} - -func (r *AnalysisResult) Errors() []*result_contract2.Error { - return r.errors -} diff --git a/pkg/analyser_contract/post_process_event/post_process_event.go b/pkg/analyser_contract/post_process_event/post_process_event.go deleted file mode 100644 index c0f7e75..0000000 --- a/pkg/analyser_contract/post_process_event/post_process_event.go +++ /dev/null @@ -1,24 +0,0 @@ -package post_process_event - -import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" -) - -// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result_contract of the analysis after it has completed and before it is returned for output processing. -type PostProcessEvent struct { - result *analysis_result.AnalysisResult -} - -func NewPostProcessEvent(result *analysis_result.AnalysisResult) *PostProcessEvent { - return &PostProcessEvent{ - result: result, - } -} - -func (e *PostProcessEvent) GetResult() *analysis_result.AnalysisResult { - return e.result -} - -func (e *PostProcessEvent) ReplaceResult(result *analysis_result.AnalysisResult) { - e.result = result -} diff --git a/pkg/analyser_contract/process_event/process_event.go b/pkg/analyser_contract/process_event/process_event.go deleted file mode 100644 index 03a0e8d..0000000 --- a/pkg/analyser_contract/process_event/process_event.go +++ /dev/null @@ -1,43 +0,0 @@ -package process_event - -import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) - -// ProcessEvent - Event that is triggered on every found dependency_contract. Used to apply rules on the found dependencies. -type ProcessEvent struct { - Dependency Dependency2.DependencyInterface - DependerReference ast_contract.TokenReferenceInterface - DependerLayer string - DependentReference ast_contract.TokenReferenceInterface - DependentLayers map[string]bool - result *analysis_result.AnalysisResult -} - -func NewProcessEvent( - dependency Dependency2.DependencyInterface, - dependerReference ast_contract.TokenReferenceInterface, - dependerLayer string, - dependentReference ast_contract.TokenReferenceInterface, - dependentLayers map[string]bool, - result *analysis_result.AnalysisResult, -) *ProcessEvent { - return &ProcessEvent{ - Dependency: dependency, - DependerReference: dependerReference, - DependerLayer: dependerLayer, - DependentReference: dependentReference, - DependentLayers: dependentLayers, - result: result, - } -} - -func (e *ProcessEvent) GetResult() *analysis_result.AnalysisResult { - return e.result -} - -func (e *ProcessEvent) ReplaceResult(result *analysis_result.AnalysisResult) { - e.result = result -} diff --git a/pkg/analyser_core/analyser_exception.go b/pkg/analyser_core/analyser_exception.go deleted file mode 100644 index 1663970..0000000 --- a/pkg/analyser_core/analyser_exception.go +++ /dev/null @@ -1,50 +0,0 @@ -package analyser_core - -import ( - "fmt" - astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - layer_contract2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" -) - -type AnalyserException struct { - Message string - Previous error -} - -func (a *AnalyserException) Error() string { - if a.Previous != nil { - return fmt.Sprintf("%s\n%s", a.Message, a.Previous.Error()) - } else { - return a.Message - } -} - -func NewInvalidEmitterConfiguration(e *dependency_core2.InvalidEmitterConfigurationException) *AnalyserException { - return &AnalyserException{Message: "Invalid emitter configuration.", Previous: e} -} - -func NewUnrecognizedToken(e *dependency_core2.UnrecognizedTokenException) *AnalyserException { - return &AnalyserException{Message: "Unrecognized token.", Previous: e} -} - -func NewInvalidLayerDefinition(e *layer_contract2.InvalidLayerDefinitionException) *AnalyserException { - return &AnalyserException{Message: "Invalid layer_contract definition.", Previous: e} -} - -func NewInvalidCollectorDefinition(e *layer_contract2.InvalidCollectorDefinitionException) *AnalyserException { - return &AnalyserException{Message: "Invalid collector definition.", Previous: e} -} - -func NewFailedAstParsing(e *ast_core.AstException) *AnalyserException { - return &AnalyserException{Message: "Failed Ast parsing.", Previous: e} -} - -func NewCouldNotParseFile(e *astContract.CouldNotParseFileException) *AnalyserException { - return &AnalyserException{Message: "Could not parse file_supportive.", Previous: e} -} - -func NewCircularReference(e *layer_contract2.CircularReferenceException) *AnalyserException { - return &AnalyserException{Message: "Circular layer_contract dependency_contract.", Previous: e} -} diff --git a/pkg/analyser_core/dependency_layers_analyser.go b/pkg/analyser_core/dependency_layers_analyser.go deleted file mode 100644 index 759c109..0000000 --- a/pkg/analyser_core/dependency_layers_analyser.go +++ /dev/null @@ -1,107 +0,0 @@ -package analyser_core - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" -) - -type DependencyLayersAnalyser struct { - astMapExtractor *ast_core.AstMapExtractor - dependencyResolver *dependency_resolver.DependencyResolver - tokenResolver *dependency_core.TokenResolver - layerResolver layer_resolver_interface.LayerResolverInterface - eventDispatcher event_dispatcher_interface.EventDispatcherInterface -} - -func NewDependencyLayersAnalyser( - astMapExtractor *ast_core.AstMapExtractor, - dependencyResolver *dependency_resolver.DependencyResolver, - tokenResolver *dependency_core.TokenResolver, - layerResolver layer_resolver_interface.LayerResolverInterface, - eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyLayersAnalyser { - return &DependencyLayersAnalyser{ - astMapExtractor: astMapExtractor, - dependencyResolver: dependencyResolver, - tokenResolver: tokenResolver, - layerResolver: layerResolver, - eventDispatcher: eventDispatcher, - } -} - -func (a *DependencyLayersAnalyser) Analyse() (*analysis_result.AnalysisResult, error) { - astMap, err := a.astMapExtractor.Extract() - if err != nil { - return nil, err - } - dependencies, err := a.dependencyResolver.Resolve(astMap) - if err != nil { - return nil, err - } - analysisResult := analysis_result.NewAnalysisResult() - warnings := make(map[string]*result_contract.Warning) - for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { - depender := dependency.GetDepender() - dependerRef := a.tokenResolver.Resolve(depender, astMap) - - if v, ok55 := dependerRef.(*ast_map2.FunctionReference); ok55 { - t := v.GetToken() - if tt, ok66 := t.(*ast_map2.FunctionToken); ok66 { - if tt.FunctionName == "ParseFile" { - fmt.Println() - } - } - } - - dependerLayersMap, err := a.layerResolver.GetLayersForReference(dependerRef) - if err != nil { - return nil, err - } - dependerLayers := make([]string, 0) - for s := range dependerLayersMap { - dependerLayers = append(dependerLayers, s) - } - - _, ok := warnings[depender.ToString()] - if !ok && len(dependerLayers) > 1 { - warnings[depender.ToString()] = result_contract.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) - } - - dependent := dependency.GetDependent() - dependentRef := a.tokenResolver.Resolve(dependent, astMap) - - dependentLayers, err := a.layerResolver.GetLayersForReference(dependentRef) - if err != nil { - return nil, err - } - - for _, dependerLayer := range dependerLayers { - event := process_event.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) - err := a.eventDispatcher.DispatchEvent(event) - if err != nil { - return nil, err - } - analysisResult = event.GetResult() - } - } - - for _, warning := range warnings { - analysisResult.AddWarning(warning) - } - - event := post_process_event.NewPostProcessEvent(analysisResult) - errDispatch := a.eventDispatcher.DispatchEvent(event) - if errDispatch != nil { - return nil, errDispatch - } - - return event.GetResult(), nil -} diff --git a/pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go b/pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go deleted file mode 100644 index d08434a..0000000 --- a/pkg/analyser_core/event_handler/post_process_event/unmatched_skipped_violations.go +++ /dev/null @@ -1,29 +0,0 @@ -package post_process_event - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" -) - -type UnmatchedSkippedViolations struct { - eventHelper *event_helper.EventHelper -} - -func NewUnmatchedSkippedViolations(eventHelper *event_helper.EventHelper) *UnmatchedSkippedViolations { - return &UnmatchedSkippedViolations{eventHelper: eventHelper} -} - -func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*post_process_event.PostProcessEvent) - - ruleset := event.GetResult() - for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { - for _, tokenB := range tokensB { - ruleset.AddError(result_contract.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) - } - } - stopPropagation() - return nil -} diff --git a/pkg/console_supportive/application/application.go b/pkg/app/application.go similarity index 87% rename from pkg/console_supportive/application/application.go rename to pkg/app/application.go index 6290d53..e74da5b 100644 --- a/pkg/console_supportive/application/application.go +++ b/pkg/app/application.go @@ -1,14 +1,15 @@ -package application +package app import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/gookit/color" "os" "slices" ) +const Version = "@git-version@" + type Application struct { defaultCommand string } @@ -35,7 +36,7 @@ const DirectorySeparator = "/" func (a *Application) doRun() (int, error) { currentWorkingDirectory, err := os.Getwd() if err != nil { - return 0, console_supportive.NewCannotGetCurrentWorkingDirectoryExceptionCannotGetCWD() + return 0, apperrors.NewCannotGetCurrentWorkingDirectoryExceptionCannotGetCWD() } // try { @@ -79,7 +80,7 @@ func (a *Application) doRun() (int, error) { var configFile string flag.StringVar( &configFile, - "config_contract-file_supportive", + "config", currentWorkingDirectory+DirectorySeparator+"deptrac.yaml", "Location of Depfile containing the configuration", ) @@ -97,7 +98,7 @@ func (a *Application) doRun() (int, error) { cache := cacheFile - factory := dependency_injection_supportive.NewServiceContainerBuilder(currentWorkingDirectory) + factory := NewServiceContainerBuilder(currentWorkingDirectory) if !slices.Contains([]string{"init", "list", "help", "completion"}, commandArgument) { factory, err = factory.WithConfig(config) diff --git a/pkg/console_supportive/application/application_test.go b/pkg/app/application_test.go similarity index 92% rename from pkg/console_supportive/application/application_test.go rename to pkg/app/application_test.go index 4003328..0446529 100644 --- a/pkg/console_supportive/application/application_test.go +++ b/pkg/app/application_test.go @@ -1,4 +1,4 @@ -package application +package app import ( "flag" diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go new file mode 100644 index 0000000..4d44226 --- /dev/null +++ b/pkg/app/container_builder.go @@ -0,0 +1,85 @@ +package app + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/commands" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/hooks" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/parsers" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/runners" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/violations" +) + +type ContainerBuilder struct { + ProjectDirectory string + CacheFile *string + Configuration *configs.DeptracConfig + EventDispatcher events.EventDispatcherInterface + FileInputCollector collectors.InputCollectorInterface + YmlFileLoader *hooks.YmlFileLoader + Dumper *utils.Dumper + AstLoader *ast_map.AstLoader + AstFileReferenceFileCache *ast_map.AstFileReferenceFileCache + AstFileReferenceDeferredCacheInterface ast_map.AstFileReferenceDeferredCacheInterface + AstFileReferenceCacheInterface ast_map.AstFileReferenceCacheInterface + CacheableFileSubscriber *subscribers.CacheableFileSubscriber + AstFileReferenceInMemoryCache *ast_map.AstFileReferenceInMemoryCache + TypeResolver *types.TypeResolver + ReferenceExtractors []references.ReferenceExtractorInterface + ParserInterface parsers.ParserInterface + LayerProvider *layers.LayerProvider + EventHelper *events.EventHelper + AllowDependencyHandler *dependencies.AllowDependencyHandler + DependsOnPrivateLayer *subscribers.DependsOnPrivateLayer + DependsOnInternalToken *subscribers.DependsOnInternalToken + DependsOnDisallowedLayer *subscribers.DependsOnDisallowedLayer + MatchingLayersHandler *layers.MatchingLayersHandler + UncoveredDependentHandler *dependencies.UncoveredDependentHandler + UnmatchedSkippedViolations *violations.UnmatchedSkippedViolations + ConsoleSubscriber *subscribers.ConsoleSubscriber + ProgressSubscriber *subscribers.ProgressSubscriber + VerboseBoolFlag *bool + DebugBoolFlag *bool + Style *formatters.Style + SymfonyOutput *results.SymfonyOutput + TimeStopwatch *stopwatch.Stopwatch + AstMapExtractor *ast_map.AstMapExtractor + InheritanceFlattener *flatteners.InheritanceFlattener + DependencyResolver *dependencies.DependencyResolver + TokenResolver *tokens.TokenResolver + CollectorResolver *collectors.CollectorResolver + LayerResolver layers.LayerResolverInterface + NikicPhpParser *parsers.NikicPhpParser + CollectorProvider *collectors.CollectorProvider + DependencyLayersAnalyser *dependencies.DependencyLayersAnalyser + TokenInLayerAnalyser *tokens.TokenInLayerAnalyser + LayerForTokenAnalyser *tokens.LayerForTokenAnalyser + UnassignedTokenAnalyser *tokens.UnassignedTokenAnalyser + LayerDependenciesAnalyser *dependencies.LayerDependenciesAnalyser + RulesetUsageAnalyser *rules.RulesetUsageAnalyser + FormatterProvider *formatters.FormatterProvider + FormatterConfiguration *formatters.FormatterConfiguration + AnalyseRunner *runners.AnalyseRunner + AnalyseCommand *commands.AnalyseCommand + NodeNamer *nodes.NodeNamer + AnalyseOptions *rules.AnalyseOptions +} + +func NewContainerBuilder(workingDirectory string) *ContainerBuilder { + return &ContainerBuilder{} +} diff --git a/pkg/dependency_injection_supportive/ServiceContainerBuilder.go b/pkg/app/service_container_builder.go similarity index 60% rename from pkg/dependency_injection_supportive/ServiceContainerBuilder.go rename to pkg/app/service_container_builder.go index 7a928dc..4b343b8 100644 --- a/pkg/dependency_injection_supportive/ServiceContainerBuilder.go +++ b/pkg/app/service_container_builder.go @@ -1,12 +1,12 @@ -package dependency_injection_supportive +package app import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/config_contract/deptrac_config" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" + "github.com/KoNekoD/go-deptrac/pkg/violations" "os" "path/filepath" "reflect" @@ -14,7 +14,7 @@ import ( type ServiceContainerBuilder struct { workingDirectory string - containerBuilder *container_builder.ContainerBuilder + containerBuilder *ContainerBuilder configFile *string cacheFile *string } @@ -66,8 +66,8 @@ func (b *ServiceContainerBuilder) clearCache(cacheFile string) error { return os.Remove(cacheFile) } -func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) (*container_builder.ContainerBuilder, error) { - container := container_builder.NewContainerBuilder(b.workingDirectory) +func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) (*ContainerBuilder, error) { + container := NewContainerBuilder(b.workingDirectory) b.containerBuilder = container if b.configFile != nil { @@ -83,8 +83,8 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) // Debug event subscriber if b.containerBuilder.DebugBoolFlag != nil && *b.containerBuilder.DebugBoolFlag == true { - for _, key := range event_subscriber_interface_map.Map.Keys() { - mapByPriorities, _ := event_subscriber_interface_map.Map.Get(key) + for _, key := range subscribers.Map.Keys() { + mapByPriorities, _ := subscribers.Map.Get(key) for _, priority := range mapByPriorities.Keys() { subscribers, _ := mapByPriorities.Get(priority) @@ -101,14 +101,14 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) return container, nil } -func (b *ServiceContainerBuilder) GetContainer() *container_builder.ContainerBuilder { +func (b *ServiceContainerBuilder) GetContainer() *ContainerBuilder { return b.containerBuilder } -func loadServices(container *container_builder.ContainerBuilder, cacheFile *string) error { +func loadServices(container *ContainerBuilder, cacheFile *string) error { if cacheFile != nil { container.CacheFile = cacheFile - Cache(container) + violations.Cache(container) } err := Services(container) @@ -119,24 +119,24 @@ func loadServices(container *container_builder.ContainerBuilder, cacheFile *stri return nil } -func (b *ServiceContainerBuilder) loadConfiguration(container *container_builder.ContainerBuilder, configFile string) *CannotLoadConfiguration.CannotLoadConfiguration { +func (b *ServiceContainerBuilder) loadConfiguration(container *ContainerBuilder, configFile string) *apperrors.CannotLoadConfiguration { projectDirectory := filepath.Dir(configFile) if projectDirectory == "" { - return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, "Unable to load configuration: Invalid or missing path.") + return apperrors.NewCannotLoadConfiguration(configFile, "Unable to load configuration: Invalid or missing path.") } container.ProjectDirectory = projectDirectory - parsed, err := util.ParseYamlFile(configFile) + parsed, err := utils.ParseYamlFile(configFile) if err != nil { - return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, err.Error()) + return apperrors.NewCannotLoadConfiguration(configFile, err.Error()) } - deptracConfig, err := deptrac_config.NewDeptracConfig(parsed) + deptracConfig, err := configs.NewDeptracConfig(parsed) if err != nil { - return CannotLoadConfiguration.NewCannotLoadConfigurationFromConfig(configFile, err.Error()) + return apperrors.NewCannotLoadConfiguration(configFile, err.Error()) } b.containerBuilder.Configuration = deptracConfig diff --git a/pkg/app/services.go b/pkg/app/services.go new file mode 100644 index 0000000..b8e0e4d --- /dev/null +++ b/pkg/app/services.go @@ -0,0 +1,335 @@ +package app + +import ( + "flag" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/commands" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/hooks" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/parsers" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/runners" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/violations" + "github.com/elliotchance/orderedmap/v2" + "os" + "strings" +) + +func getDefaultFormatter() formatters.OutputFormatterType { + if os.Getenv("GITHUB_ACTIONS") != "" { + return formatters.NewGithubActionsOutputFormatter().GetName() + } + return formatters.NewTableOutputFormatter().GetName() +} + +func Services(builder *ContainerBuilder) error { + + cacheableFileSubscriber := builder.CacheableFileSubscriber + builderConfiguration := builder.Configuration + projectDirectory := builder.ProjectDirectory + verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") + debugBoolFlag := flag.Bool("debug", false, "Debug mode") + style := formatters.NewStyle( + verboseBoolFlag != nil && *verboseBoolFlag == true, + debugBoolFlag != nil && *debugBoolFlag == true, + ) + symfonyOutput := results.NewSymfonyOutput(style) + + timeStopwatch := stopwatch.NewStopwatch() + + nodeNamer := nodes.NewNodeNamer(projectDirectory) + + /* + * Utilities + */ + eventDispatcher := events.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + + fileInputCollector, err := collectors.NewFileInputCollector( + builderConfiguration.Paths, + builderConfiguration.ExcludeFiles, + projectDirectory, + ) + if err != nil { + return err + } + + ymlFileLoader := hooks.NewYmlFileLoader() + dumper := utils.NewDumper("/deptrac_template.yaml") + + /* + * AST + */ + astFileReferenceInMemoryCache := ast_map.NewAstFileReferenceInMemoryCache() + if builder.AstFileReferenceCacheInterface == nil { + builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache + } + typeResolver := types.NewTypeResolver(nodeNamer) + referenceExtractors := []references.ReferenceExtractorInterface{ + /** + + TODO: Implement all reference extractors + + AnnotationReferenceExtractor.NewAnnotationReferenceExtractor(), + AnonymousClassExtractor.NewAnonymousClassExtractor(), + ClassConstantExtractor.NewClassConstantExtractor(), + FunctionLikeExtractor.NewFunctionLikeExtractor(), + PropertyExtractor.NewPropertyExtractor(), + KeywordExtractor.NewKeywordExtractor(), + StaticExtractor.NewStaticExtractor(), + FunctionCallResolver.NewFunctionCallResolver(), + + */ + } + nikicPhpParser := parsers.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) + parserInterface := nikicPhpParser + astLoader := ast_map.NewAstLoader(parserInterface, eventDispatcher) + + /* + * Dependency + */ + dependencyEmitters := map[emitters.EmitterType]emitters.DependencyEmitterInterface{ + emitters.EmitterTypeClassToken: emitters.NewClassDependencyEmitter(), + emitters.EmitterTypeClassSuperGlobalToken: emitters.NewClassSuperglobalDependencyEmitter(), + emitters.EmitterTypeFileToken: emitters.NewFileDependencyEmitter(), + emitters.EmitterTypeFunctionToken: emitters.NewFunctionDependencyEmitter(), + emitters.EmitterTypeFunctionCall: emitters.NewFunctionCallDependencyEmitter(), + emitters.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), + emitters.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), + } + inheritanceFlattener := flatteners.NewInheritanceFlattener() + dependencyResolver := dependencies.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + tokenResolver := tokens.NewTokenResolver() + + astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) + + layerProvider := layers.NewLayerProvider(builderConfiguration.Rulesets) + eventHelper := events.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) + + /* + * Events (before first possible event) + */ + /* + * Events + */ + subscribers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []subscribers.EventSubscriberInterface]]() + + // Events + uncoveredDependentHandler := dependencies.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) + matchingLayersHandler := layers.NewMatchingLayersHandler() + allowDependencyHandler := dependencies.NewAllowDependencyHandler() + consoleSubscriber := subscribers.NewConsoleSubscriber(symfonyOutput, timeStopwatch) + progressSubscriber := subscribers.NewProgressSubscriber(symfonyOutput) + dependsOnDisallowedLayer := subscribers.NewDependsOnDisallowedLayer(eventHelper) + dependsOnPrivateLayer := subscribers.NewDependsOnPrivateLayer(eventHelper) + dependsOnInternalToken := subscribers.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) + unmatchedSkippedViolations := violations.NewUnmatchedSkippedViolations(eventHelper) + + processEvent := &events.ProcessEvent{} + postProcessEvent := &events.PostProcessEvent{} + preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} + postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} + // Events Handlers + // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" + subscribers.Reg(processEvent, allowDependencyHandler, -100) + subscribers.Reg(processEvent, dependsOnPrivateLayer, -3) + subscribers.Reg(processEvent, dependsOnInternalToken, -2) + subscribers.Reg(processEvent, dependsOnDisallowedLayer, -1) + subscribers.Reg(processEvent, matchingLayersHandler, 1) + subscribers.Reg(processEvent, uncoveredDependentHandler, 2) + subscribers.Reg(postProcessEvent, unmatchedSkippedViolations, subscribers.DefaultPriority) + if cacheableFileSubscriber != nil { + subscribers.Reg(preCreateAstMapEvent, cacheableFileSubscriber, subscribers.DefaultPriority) + subscribers.Reg(postCreateAstMapEvent, cacheableFileSubscriber, subscribers.DefaultPriority) + } + + /* + * OutputFormatter + */ + outputFormatter := map[formatters.OutputFormatterType]formatters.OutputFormatterInterface{ + formatters.Table: formatters.NewTableOutputFormatter(), + formatters.GithubActions: formatters.NewGithubActionsOutputFormatter(), + // TODO: + // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(XMLOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(BaselineOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(JsonOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter_contract'); + // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter_contract'); + // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter_contract'); + // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter_contract'); + } + formatterProvider := formatters.NewFormatterProvider(outputFormatter) + formatterConfiguration := formatters.NewFormatterConfiguration(builderConfiguration.Formatters) + + // + knownFormattersStr := make([]string, 0) + for _, formatterType := range formatterProvider.GetKnownFormatters() { + knownFormattersStr = append(knownFormattersStr, fmt.Sprintf("\"%s\"", formatterType)) + } + var ( + formatterUsagePossible = strings.Join(knownFormattersStr, ", ") + formatterUsage = fmt.Sprintf("Format in which to print the result_contract of the analysis. Possible: [\"%s\"]", formatterUsagePossible) + formatter = flag.String("formatter", string(formatters.Table), formatterUsage) + output = flag.String("output", "", "Output file_supportive path for formatter (if applicable)") + noProgress = flag.Bool("no-progress", false, "Do not show progress bar") + reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") + reportUncovered = flag.Bool("report-uncovered", false, "Report uncovered dependencies") + failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency_contract is found") + ) + + if formatter == nil { + formatterTmp := string(getDefaultFormatter()) + formatter = &formatterTmp + } + + analyseOptions := rules.NewAnalyseOptions( + nil != noProgress && *noProgress == true, + *formatter, + output, + nil != reportSkipped && *reportSkipped == true, + nil != reportUncovered && *reportUncovered == true, + nil != failOnUncovered && *failOnUncovered == true, + ) + subscribers.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + // + + /* + * Layer + */ + inheritanceLevelCollector, err := collectors.NewInheritanceLevelCollector(astMapExtractor) + if err != nil { + return err + } + inheritsCollector, err := collectors.NewInheritsCollector(astMapExtractor) + if err != nil { + return err + } + usesCollector, err := collectors.NewUsesCollector(astMapExtractor) + if err != nil { + return err + } + collectorProvider := collectors.NewCollectorProvider() + collectorResolver := collectors.NewCollectorResolver(collectorProvider) + layerResolver := layers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) + collectors := map[collectors.CollectorType]collectors.CollectorInterface{ + //AttributeCollector + collectors.CollectorTypeTypeBool: collectors.NewBoolCollector(collectorResolver), + collectors.CollectorTypeTypeClass: collectors.NewClassCollector(), + collectors.CollectorTypeTypeClasslike: collectors.NewClassLikeCollector(), + collectors.CollectorTypeTypeClassNameRegex: collectors.NewClassNameRegexCollector(), + //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), + collectors.CollectorTypeTypeDirectory: collectors.NewDirectoryCollector(), + //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), + collectors.CollectorTypeTypeFunctionName: collectors.NewFunctionNameCollector(), + collectors.CollectorTypeTypeGlob: collectors.NewGlobCollector(projectDirectory), + //ImplementsCollector + collectors.CollectorTypeTypeInheritance: inheritanceLevelCollector, + collectors.CollectorTypeTypeInterface: collectors.NewInterfaceCollector(), + collectors.CollectorTypeTypeInherits: inheritsCollector, + collectors.CollectorTypeTypeLayer: collectors.NewLayerCollector(layerResolver), + collectors.CollectorTypeTypeMethod: collectors.NewMethodCollector(nikicPhpParser), + collectors.CollectorTypeTypeSuperGlobal: collectors.NewSuperglobalCollector(), + collectors.CollectorTypeTypeTrait: collectors.NewTraitCollector(), + collectors.CollectorTypeTypeUses: usesCollector, + //CollectorType.TypePhpInternal: PhpInternalCollector + collectors.CollectorTypeTypeComposer: collectors.NewComposerCollector(), + } + collectorProvider.Set(collectors) + + /* + * SetAnalyser + */ + dependencyLayersAnalyser := dependencies.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + tokenInLayerAnalyser := tokens.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerForTokenAnalyser := tokens.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := tokens.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerDependenciesAnalyser := dependencies.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + rulesetUsageAnalyser := rules.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) + + /* + * Console + */ + analyseRunner := runners.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + analyseCommand := commands.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) + + // TODO: other commands + // $services->set(InitCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(ChangedFilesRunner::class)->autowire(); + // $services->set(ChangedFilesCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(DebugLayerRunner::class)->autowire()->args(['$layers' => param('layers')]); + // $services->set(DebugLayerCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(DebugTokenRunner::class)->autowire(); + // $services->set(DebugTokenCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(DebugUnassignedRunner::class)->autowire(); + // $services->set(DebugUnassignedCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(DebugDependenciesRunner::class)->autowire(); + // $services->set(DebugDependenciesCommand::class)->autowire()->tag('console_supportive.command'); + // $services->set(DebugUnusedRunner::class)->autowire(); + // $services->set(DebugUnusedCommand::class)->autowire()->tag('console_supportive.command'); + + builder.VerboseBoolFlag = verboseBoolFlag + builder.DebugBoolFlag = debugBoolFlag + builder.Style = style + builder.SymfonyOutput = symfonyOutput + builder.TimeStopwatch = timeStopwatch + builder.EventDispatcher = eventDispatcher + builder.FileInputCollector = fileInputCollector + builder.YmlFileLoader = ymlFileLoader + builder.Dumper = dumper + builder.AstFileReferenceInMemoryCache = astFileReferenceInMemoryCache + builder.TypeResolver = typeResolver + builder.ReferenceExtractors = referenceExtractors + builder.NikicPhpParser = nikicPhpParser + builder.ParserInterface = parserInterface + builder.AstLoader = astLoader + builder.InheritanceFlattener = inheritanceFlattener + builder.DependencyResolver = dependencyResolver + builder.TokenResolver = tokenResolver + builder.AstMapExtractor = astMapExtractor + builder.CollectorResolver = collectorResolver + builder.LayerResolver = layerResolver + builder.CollectorProvider = collectorProvider + builder.UncoveredDependentHandler = uncoveredDependentHandler + builder.MatchingLayersHandler = matchingLayersHandler + builder.LayerProvider = layerProvider + builder.AllowDependencyHandler = allowDependencyHandler + builder.DependsOnDisallowedLayer = dependsOnDisallowedLayer + builder.EventHelper = eventHelper + builder.DependsOnPrivateLayer = dependsOnPrivateLayer + builder.DependsOnInternalToken = dependsOnInternalToken + builder.UnmatchedSkippedViolations = unmatchedSkippedViolations + builder.DependencyLayersAnalyser = dependencyLayersAnalyser + builder.TokenInLayerAnalyser = tokenInLayerAnalyser + builder.LayerForTokenAnalyser = layerForTokenAnalyser + builder.UnassignedTokenAnalyser = unassignedTokenAnalyser + builder.LayerDependenciesAnalyser = layerDependenciesAnalyser + builder.RulesetUsageAnalyser = rulesetUsageAnalyser + builder.ConsoleSubscriber = consoleSubscriber + builder.ProgressSubscriber = progressSubscriber + builder.FormatterProvider = formatterProvider + builder.FormatterConfiguration = formatterConfiguration + builder.AnalyseRunner = analyseRunner + builder.AnalyseCommand = analyseCommand + builder.NodeNamer = nodeNamer + builder.AnalyseOptions = analyseOptions + + return nil +} diff --git a/pkg/app/test_container_provider.go b/pkg/app/test_container_provider.go new file mode 100644 index 0000000..244a054 --- /dev/null +++ b/pkg/app/test_container_provider.go @@ -0,0 +1,32 @@ +package app + +import ( + "os" + "reflect" +) + +var currentWorkingDirectory, _ = os.Getwd() + +var TestConfigFile = currentWorkingDirectory + DirectorySeparator + "deptrac.yaml" + +func UseVoidConfig() { + TestConfigFile = "resources/deptrac-empty.yaml" +} + +func ProvideTestContainer() *ServiceContainerBuilder { + cache := "" + factory := NewServiceContainerBuilder(currentWorkingDirectory) + factory, _ = factory.WithConfig(TestConfigFile) + + _, _ = factory.Build(&cache, false) + + return factory +} + +func ProvideTestContainerService(containerProperty string) interface{} { + container := ProvideTestContainer().GetContainer() + + refProps := reflect.ValueOf(container).Elem().FieldByName(containerProperty) + + return refProps.Interface() +} diff --git a/pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go b/pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go deleted file mode 100644 index a6e32dc..0000000 --- a/pkg/ast_contract/token_reference_with_dependencies_interface/token_reference_with_dependencies_interface.go +++ /dev/null @@ -1,11 +0,0 @@ -package token_reference_with_dependencies_interface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" -) - -type TokenReferenceWithDependenciesInterface interface { - ast_contract.TokenReferenceInterface - GetDependencies() []*ast_map.DependencyToken -} diff --git a/pkg/ast_core/ast_loader.go b/pkg/ast_core/ast_loader.go deleted file mode 100644 index 3c25326..0000000 --- a/pkg/ast_core/ast_loader.go +++ /dev/null @@ -1,58 +0,0 @@ -package ast_core - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" -) - -type AstLoader struct { - parser parser.ParserInterface - eventDispatcher event_dispatcher_interface.EventDispatcherInterface -} - -func NewAstLoader(parser parser.ParserInterface, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *AstLoader { - return &AstLoader{ - parser: parser, - eventDispatcher: eventDispatcher, - } -} - -func (l *AstLoader) CreateAstMap(files []string) (*ast_map2.AstMap, error) { - references := make([]*ast_map2.FileReference, 0) - - err := l.eventDispatcher.DispatchEvent(ast_contract2.NewPreCreateAstMapEvent(len(files))) - if err != nil { - return nil, err - } - - for _, file := range files { - reference, err := l.parser.ParseFile(file) - - if err != nil { - err := l.eventDispatcher.DispatchEvent(ast_contract2.NewAstFileSyntaxErrorEvent(file, err.Error())) - if err != nil { - return nil, err - } - - continue - } - - references = append(references, reference) - - errDispatchAnalysed := l.eventDispatcher.DispatchEvent(ast_contract2.NewAstFileAnalysedEvent(file)) - if errDispatchAnalysed != nil { - return nil, errDispatchAnalysed - } - } - - astMap := ast_map2.NewAstMap(references) - - errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(ast_contract2.NewPostCreateAstMapEvent()) - if errDispatchPostCreateMap != nil { - return nil, errDispatchPostCreateMap - } - - return astMap, nil -} diff --git a/pkg/ast_core/ast_map/class_like_reference.go b/pkg/ast_core/ast_map/class_like_reference.go deleted file mode 100644 index 7984413..0000000 --- a/pkg/ast_core/ast_map/class_like_reference.go +++ /dev/null @@ -1,47 +0,0 @@ -package ast_map - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type ClassLikeReference struct { - Type *ClassLikeType - classLikeName *ClassLikeToken - - Inherits []*AstInherit - Dependencies []*DependencyToken - fileReference *FileReference - *TaggedTokenReference -} - -func NewClassLikeReference(classLikeName *ClassLikeToken, classLikeType *ClassLikeType, inherits []*AstInherit, dependencies []*DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { - if classLikeType == nil { - classLikeTypeTmp := TypeClasslike - classLikeType = &classLikeTypeTmp - } - - return &ClassLikeReference{ - Type: classLikeType, - classLikeName: classLikeName, - Inherits: inherits, - Dependencies: dependencies, - fileReference: fileReference, - TaggedTokenReference: NewTaggedTokenReference(tags), - } -} - -func (c *ClassLikeReference) WithFileReference(astFileReference *FileReference) *ClassLikeReference { - return NewClassLikeReference(c.classLikeName, c.Type, c.Inherits, c.Dependencies, c.Tags, astFileReference) -} - -func (c *ClassLikeReference) GetFilepath() *string { - return c.fileReference.Filepath -} - -func (c *ClassLikeReference) GetToken() ast_contract.TokenInterface { - return c.classLikeName -} - -func (c *ClassLikeReference) GetDependencies() []*DependencyToken { - return c.Dependencies -} diff --git a/pkg/ast_core/ast_map/class_like_reference_builder.go b/pkg/ast_core/ast_map/class_like_reference_builder.go deleted file mode 100644 index 99893b0..0000000 --- a/pkg/ast_core/ast_map/class_like_reference_builder.go +++ /dev/null @@ -1,65 +0,0 @@ -package ast_map - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type ClassLikeReferenceBuilder struct { - *ReferenceBuilder - - inherits []*AstInherit - - classLikeToken *ClassLikeToken - classLikeType *ClassLikeType - tags map[string][]string -} - -func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *ClassLikeToken, classLikeType *ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { - return &ClassLikeReferenceBuilder{ - ReferenceBuilder: NewReferenceBuilder(tokenTemplates, filepath), - inherits: make([]*AstInherit, 0), - classLikeToken: classLikeToken, - classLikeType: classLikeType, - tags: tags, - } -} - -func CreateClassLikeReferenceBuilderClassLike(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClassLike := TypeClasslike - return NewClassLikeReferenceBuilder(classTemplates, filepath, NewClassLikeTokenFromFQCN(classLikeName), &typeClassLike, tags) -} - -func CreateClassLikeReferenceBuilderClass(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClass := TypeClass - return NewClassLikeReferenceBuilder(classTemplates, filepath, NewClassLikeTokenFromFQCN(classLikeName), &typeClass, tags) -} - -func CreateClassLikeReferenceBuilderTrait(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeTrait := TypeTrait - return NewClassLikeReferenceBuilder(classTemplates, filepath, NewClassLikeTokenFromFQCN(classLikeName), &typeTrait, tags) -} - -func CreateClassLikeReferenceBuilderInterface(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeInterface := TypeInterface - return NewClassLikeReferenceBuilder(classTemplates, filepath, NewClassLikeTokenFromFQCN(classLikeName), &typeInterface, tags) -} - -// Build - Internal -func (b *ClassLikeReferenceBuilder) Build() *ClassLikeReference { - return NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) -} - -func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeExtends, make([]*AstInherit, 0))) - return b -} - -func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeImplements, make([]*AstInherit, 0))) - return b -} - -func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, NewAstInherit(NewClassLikeTokenFromFQCN(classLikeName), ast_contract.NewFileOccurrence(b.Filepath, occursAtLine), AstInheritTypeUses, make([]*AstInherit, 0))) - return b -} diff --git a/pkg/ast_core/ast_map/dependency_token.go b/pkg/ast_core/ast_map/dependency_token.go deleted file mode 100644 index 602e6cd..0000000 --- a/pkg/ast_core/ast_map/dependency_token.go +++ /dev/null @@ -1,14 +0,0 @@ -package ast_map - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type DependencyToken struct { - Token ast_contract2.TokenInterface - Context *ast_contract2.DependencyContext -} - -func NewDependencyToken(token ast_contract2.TokenInterface, context *ast_contract2.DependencyContext) *DependencyToken { - return &DependencyToken{Token: token, Context: context} -} diff --git a/pkg/ast_core/ast_map/variable_reference.go b/pkg/ast_core/ast_map/variable_reference.go deleted file mode 100644 index 2915f05..0000000 --- a/pkg/ast_core/ast_map/variable_reference.go +++ /dev/null @@ -1,21 +0,0 @@ -package ast_map - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type VariableReference struct { - tokenName *SuperGlobalToken -} - -func NewVariableReference(tokenName *SuperGlobalToken) *VariableReference { - return &VariableReference{tokenName: tokenName} -} - -func (v *VariableReference) GetFilepath() *string { - return nil -} - -func (v *VariableReference) GetToken() ast_contract.TokenInterface { - return v.tokenName -} diff --git a/pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go b/pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go deleted file mode 100644 index 3a2a980..0000000 --- a/pkg/ast_core/parser/cache/ast_file_reference_cache_interface.go +++ /dev/null @@ -1,10 +0,0 @@ -package cache - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" -) - -type AstFileReferenceCacheInterface interface { - Get(filepath string) (*ast_map.FileReference, error) - Set(fileReference *ast_map.FileReference) error -} diff --git a/pkg/ast_core/parser/extractors/reference_extractor_interface.go b/pkg/ast_core/parser/extractors/reference_extractor_interface.go deleted file mode 100644 index 4ade803..0000000 --- a/pkg/ast_core/parser/extractors/reference_extractor_interface.go +++ /dev/null @@ -1,11 +0,0 @@ -package extractors - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "go/ast" -) - -type ReferenceExtractorInterface interface { - ProcessNode(node ast.Node, referenceBuilder ast_map.ReferenceBuilderInterface, typeScope *parser.TypeScope) -} diff --git a/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go b/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go deleted file mode 100644 index d17f3de..0000000 --- a/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer_test/node_namer_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package node_namer_test - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/test_container_provider" - "testing" -) - -func TestOk(t *testing.T) { - namer := test_container_provider.ProvideTestContainerService("NodeNamer").(*node_namer.NodeNamer) - - name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") - - if err != nil { - t.Error(err) - } - - t.Log(name) -} diff --git a/pkg/ast_core/parser/parser_interface.go b/pkg/ast_core/parser/parser_interface.go deleted file mode 100644 index bbeddfe..0000000 --- a/pkg/ast_core/parser/parser_interface.go +++ /dev/null @@ -1,9 +0,0 @@ -package parser - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" -) - -type ParserInterface interface { - ParseFile(file string) (*ast_map.FileReference, error) -} diff --git a/pkg/ast_contract/ast_file_analysed_event.go b/pkg/ast_map/ast_file_analysed_event.go similarity index 92% rename from pkg/ast_contract/ast_file_analysed_event.go rename to pkg/ast_map/ast_file_analysed_event.go index 63a48c7..9d5e6ce 100644 --- a/pkg/ast_contract/ast_file_analysed_event.go +++ b/pkg/ast_map/ast_file_analysed_event.go @@ -1,4 +1,4 @@ -package ast_contract +package ast_map // AstFileAnalysedEvent - Event triggered after parsing the AST of a file_supportive has been completed. type AstFileAnalysedEvent struct { diff --git a/pkg/ast_map/ast_file_reference_cache_interface.go b/pkg/ast_map/ast_file_reference_cache_interface.go new file mode 100644 index 0000000..addf586 --- /dev/null +++ b/pkg/ast_map/ast_file_reference_cache_interface.go @@ -0,0 +1,10 @@ +package ast_map + +import ( + "github.com/KoNekoD/go-deptrac/pkg/references" +) + +type AstFileReferenceCacheInterface interface { + Get(filepath string) (*references.FileReference, error) + Set(fileReference *references.FileReference) error +} diff --git a/pkg/ast_core/parser/cache/ast_file_reference_deferred_cache_interface.go b/pkg/ast_map/ast_file_reference_deferred_cache_interface.go similarity index 88% rename from pkg/ast_core/parser/cache/ast_file_reference_deferred_cache_interface.go rename to pkg/ast_map/ast_file_reference_deferred_cache_interface.go index 5cb6d88..43c34e9 100644 --- a/pkg/ast_core/parser/cache/ast_file_reference_deferred_cache_interface.go +++ b/pkg/ast_map/ast_file_reference_deferred_cache_interface.go @@ -1,4 +1,4 @@ -package cache +package ast_map type AstFileReferenceDeferredCacheInterface interface { AstFileReferenceCacheInterface diff --git a/pkg/ast_core/parser/cache/ast_file_reference_file_cache.go b/pkg/ast_map/ast_file_reference_file_cache.go similarity index 76% rename from pkg/ast_core/parser/cache/ast_file_reference_file_cache.go rename to pkg/ast_map/ast_file_reference_file_cache.go index c748fbd..ddf285e 100644 --- a/pkg/ast_core/parser/cache/ast_file_reference_file_cache.go +++ b/pkg/ast_map/ast_file_reference_file_cache.go @@ -1,10 +1,9 @@ -package cache +package ast_map import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/file_supportive" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" "os" "path/filepath" ) @@ -12,7 +11,7 @@ import ( type AstFileReferenceFileCache struct { cache map[string]struct { hash string - reference *ast_map.FileReference + reference *references.FileReference } loaded bool parsedFiles map[string]bool @@ -24,7 +23,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil return &AstFileReferenceFileCache{ cache: make(map[string]struct { hash string - reference *ast_map.FileReference + reference *references.FileReference }), loaded: false, parsedFiles: make(map[string]bool), @@ -33,7 +32,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil } } -func (c *AstFileReferenceFileCache) Get(filepath string) (*ast_map.FileReference, error) { +func (c *AstFileReferenceFileCache) Get(filepath string) (*references.FileReference, error) { err := c.Load() if err != nil { return nil, err @@ -54,7 +53,7 @@ func (c *AstFileReferenceFileCache) Get(filepath string) (*ast_map.FileReference return nil, nil } -func (c *AstFileReferenceFileCache) Set(fileReference *ast_map.FileReference) error { +func (c *AstFileReferenceFileCache) Set(fileReference *references.FileReference) error { err := c.Load() if err != nil { return err @@ -62,14 +61,14 @@ func (c *AstFileReferenceFileCache) Set(fileReference *ast_map.FileReference) er normalizedFilepath := c.normalizeFilepath(*fileReference.Filepath) c.parsedFiles[normalizedFilepath] = true - hash, err := util.Sha1File(normalizedFilepath) + hash, err := utils.Sha1File(normalizedFilepath) if err != nil { return err } c.cache[normalizedFilepath] = struct { hash string - reference *ast_map.FileReference + reference *references.FileReference }{hash: hash, reference: fileReference} return nil @@ -79,10 +78,10 @@ func (c *AstFileReferenceFileCache) Load() error { if c.loaded { return nil } - if !util.FileExists(c.cacheFile) || !util.IsReadable(c.cacheFile) { + if !utils.FileExists(c.cacheFile) || !utils.IsReadable(c.cacheFile) { return nil } - contents, err := file_supportive.FileReaderRead(c.cacheFile) + contents, err := utils.FileReaderRead(c.cacheFile) if err != nil { return err } @@ -90,7 +89,7 @@ func (c *AstFileReferenceFileCache) Load() error { version string payload map[string]struct { hash string - reference *ast_map.FileReference + reference *references.FileReference } }{} err = json.Unmarshal([]byte(contents), &cache) @@ -101,19 +100,19 @@ func (c *AstFileReferenceFileCache) Load() error { for filepathData, data := range cache.payload { c.cache[filepathData] = struct { hash string - reference *ast_map.FileReference + reference *references.FileReference }{hash: data.hash, reference: data.reference} } return nil } func (c *AstFileReferenceFileCache) Write() error { - if !util.IsWriteable(filepath.Dir(c.cacheFile)) { + if !utils.IsWriteable(filepath.Dir(c.cacheFile)) { return nil } cache := make(map[string]struct { hash string - reference *ast_map.FileReference + reference *references.FileReference }) for filepathData, data := range c.cache { if _, ok := c.parsedFiles[filepathData]; ok { @@ -125,7 +124,7 @@ func (c *AstFileReferenceFileCache) Write() error { version string payload map[string]struct { hash string - reference *ast_map.FileReference + reference *references.FileReference } }{ version: c.cacheVersion, @@ -152,7 +151,7 @@ func (c *AstFileReferenceFileCache) has(filepath string) (bool, error) { if _, ok := c.cache[filepath]; !ok { return false, nil } - hash, err := util.Sha1File(filepath) + hash, err := utils.Sha1File(filepath) if err != nil { return false, err } diff --git a/pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go b/pkg/ast_map/ast_file_reference_in_memory_cache.go similarity index 65% rename from pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go rename to pkg/ast_map/ast_file_reference_in_memory_cache.go index 06891d2..44f05a7 100644 --- a/pkg/ast_core/parser/cache/ast_file_reference_in_memory_cache.go +++ b/pkg/ast_map/ast_file_reference_in_memory_cache.go @@ -1,21 +1,21 @@ -package cache +package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/references" "path/filepath" ) type AstFileReferenceInMemoryCache struct { - cache map[string]*ast_map.FileReference + cache map[string]*references.FileReference } func NewAstFileReferenceInMemoryCache() *AstFileReferenceInMemoryCache { return &AstFileReferenceInMemoryCache{ - cache: make(map[string]*ast_map.FileReference), + cache: make(map[string]*references.FileReference), } } -func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*ast_map.FileReference, error) { +func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*references.FileReference, error) { path, err := filepath.Abs(pathInput) if err != nil { return nil, err @@ -29,7 +29,7 @@ func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*ast_map.FileRefe return v, nil } -func (c *AstFileReferenceInMemoryCache) Set(fileReference *ast_map.FileReference) error { +func (c *AstFileReferenceInMemoryCache) Set(fileReference *references.FileReference) error { path, err := filepath.Abs(*fileReference.Filepath) if err != nil { return err diff --git a/pkg/ast_contract/ast_file_syntax_error_event.go b/pkg/ast_map/ast_file_syntax_error_event.go similarity index 94% rename from pkg/ast_contract/ast_file_syntax_error_event.go rename to pkg/ast_map/ast_file_syntax_error_event.go index bb46789..6777027 100644 --- a/pkg/ast_contract/ast_file_syntax_error_event.go +++ b/pkg/ast_map/ast_file_syntax_error_event.go @@ -1,4 +1,4 @@ -package ast_contract +package ast_map // AstFileSyntaxErrorEvent - Event triggered when parsing the AST failed on syntax error in the PHP file_supportive. type AstFileSyntaxErrorEvent struct { diff --git a/pkg/ast_core/ast_map/ast_inherit.go b/pkg/ast_map/ast_inherit.go similarity index 76% rename from pkg/ast_core/ast_map/ast_inherit.go rename to pkg/ast_map/ast_inherit.go index c9d0f0e..72e0466 100644 --- a/pkg/ast_core/ast_map/ast_inherit.go +++ b/pkg/ast_map/ast_inherit.go @@ -2,18 +2,19 @@ package ast_map import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/violations" "strings" ) type AstInherit struct { - ClassLikeName *ClassLikeToken - FileOccurrence *ast_contract.FileOccurrence + ClassLikeName *tokens.ClassLikeToken + FileOccurrence *violations.FileOccurrence Type AstInheritType path []*AstInherit } -func NewAstInherit(classLikeName *ClassLikeToken, fileOccurrence *ast_contract.FileOccurrence, astInheritType AstInheritType, path []*AstInherit) *AstInherit { +func NewAstInherit(classLikeName *tokens.ClassLikeToken, fileOccurrence *violations.FileOccurrence, astInheritType AstInheritType, path []*AstInherit) *AstInherit { return &AstInherit{ ClassLikeName: classLikeName, FileOccurrence: fileOccurrence, diff --git a/pkg/ast_core/ast_map/ast_inherit_type.go b/pkg/ast_map/ast_inherit_type.go similarity index 100% rename from pkg/ast_core/ast_map/ast_inherit_type.go rename to pkg/ast_map/ast_inherit_type.go diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go new file mode 100644 index 0000000..8c0b426 --- /dev/null +++ b/pkg/ast_map/ast_loader.go @@ -0,0 +1,56 @@ +package ast_map + +import ( + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/parsers" + "github.com/KoNekoD/go-deptrac/pkg/references" +) + +type AstLoader struct { + parser parsers.ParserInterface + eventDispatcher events.EventDispatcherInterface +} + +func NewAstLoader(parser parsers.ParserInterface, eventDispatcher events.EventDispatcherInterface) *AstLoader { + return &AstLoader{ + parser: parser, + eventDispatcher: eventDispatcher, + } +} + +func (l *AstLoader) CreateAstMap(files []string) (*AstMap, error) { + references := make([]*references.FileReference, 0) + + err := l.eventDispatcher.DispatchEvent(NewPreCreateAstMapEvent(len(files))) + if err != nil { + return nil, err + } + + for _, file := range files { + reference, err := l.parser.ParseFile(file) + if err != nil { + err := l.eventDispatcher.DispatchEvent(NewAstFileSyntaxErrorEvent(file, err.Error())) + if err != nil { + return nil, err + } + + continue + } + + references = append(references, reference) + + errDispatchAnalysed := l.eventDispatcher.DispatchEvent(NewAstFileAnalysedEvent(file)) + if errDispatchAnalysed != nil { + return nil, errDispatchAnalysed + } + } + + astMap := NewAstMap(references) + + errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(NewPostCreateAstMapEvent()) + if errDispatchPostCreateMap != nil { + return nil, errDispatchPostCreateMap + } + + return astMap, nil +} diff --git a/pkg/ast_map/ast_loader_test.go b/pkg/ast_map/ast_loader_test.go new file mode 100644 index 0000000..6022159 --- /dev/null +++ b/pkg/ast_map/ast_loader_test.go @@ -0,0 +1,42 @@ +package ast_map + +import ( + "encoding/json" + "github.com/KoNekoD/go-deptrac/pkg/app" + "os" + "path" + "runtime" + "testing" +) + +func TestAstLoaderCreateAstMap(t *testing.T) { + app.UseVoidConfig() + loader := app.ProvideTestContainerService("AstLoader").(*AstLoader) + + _, filename, _, _ := runtime.Caller(0) + dir := path.Join(path.Dir(filename), "../resources") + err := os.Chdir(dir) + if err != nil { + panic(err) + } + + wd, _ := os.Getwd() + + files := []string{ + wd + "/test/create_ast_map/main.go", + } + + astMap, err := loader.CreateAstMap(files) + if err != nil { + t.Fatal(err) + } + + bytes, _ := json.Marshal(astMap) + content := string(bytes) + + snap := `{"ClassReferences":{"github.com/KoNekoD/go_deptrac/test/create_ast_map/main.go StructChild":{"Type":"class","Inherits":[],"Dependencies":[],"Tags":{}},"github.com/KoNekoD/go_deptrac/test/create_ast_map/main.go StructRoot":{"Type":"class","Inherits":[],"Dependencies":[],"Tags":{}}},"FileReferences":{"/home/mizuki/Documents/dev/KoNekoD/go_deptrac/resources/test/create_ast_map/main.go":{"Filepath":"/home/mizuki/Documents/dev/KoNekoD/go_deptrac/resources/test/create_ast_map/main.go","ClassLikeReferences":[{"Type":"class","Inherits":[],"Dependencies":[],"Tags":{}},{"Type":"class","Inherits":[],"Dependencies":[],"Tags":{}}],"FunctionReferences":[{"Tags":{},"Dependencies":[]}],"Dependencies":[]}},"FunctionReferences":{"github.com/KoNekoD/go_deptrac/test/create_ast_map/main.go StructRoot::rootMethod()":{"Tags":{},"Dependencies":[]}}}` + + if snap != content { + t.Fatal("Snapshots mismatch") + } +} diff --git a/pkg/ast_core/ast_map/ast_map.go b/pkg/ast_map/ast_map.go similarity index 68% rename from pkg/ast_core/ast_map/ast_map.go rename to pkg/ast_map/ast_map.go index 029bda2..b8ab8d8 100644 --- a/pkg/ast_core/ast_map/ast_map.go +++ b/pkg/ast_map/ast_map.go @@ -2,20 +2,22 @@ package ast_map import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" "strings" ) type AstMap struct { - ClassReferences map[string]*ClassLikeReference - FileReferences map[string]*FileReference - FunctionReferences map[string]*FunctionReference + ClassReferences map[string]*references.ClassLikeReference + FileReferences map[string]*references.FileReference + FunctionReferences map[string]*references.FunctionReference } -func NewAstMap(astFileReferences []*FileReference) *AstMap { +func NewAstMap(astFileReferences []*references.FileReference) *AstMap { a := &AstMap{ - ClassReferences: make(map[string]*ClassLikeReference), - FileReferences: make(map[string]*FileReference), - FunctionReferences: make(map[string]*FunctionReference), + ClassReferences: make(map[string]*references.ClassLikeReference), + FileReferences: make(map[string]*references.FileReference), + FunctionReferences: make(map[string]*references.FunctionReference), } for _, astFileReference := range astFileReferences { a.addAstFileReference(astFileReference) @@ -23,8 +25,8 @@ func NewAstMap(astFileReferences []*FileReference) *AstMap { return a } -func (a *AstMap) GetClassLikeReferences() []*ClassLikeReference { - values := make([]*ClassLikeReference, 0) +func (a *AstMap) GetClassLikeReferences() []*references.ClassLikeReference { + values := make([]*references.ClassLikeReference, 0) for _, r := range a.ClassReferences { values = append(values, r) @@ -33,8 +35,8 @@ func (a *AstMap) GetClassLikeReferences() []*ClassLikeReference { return values } -func (a *AstMap) GetFileReferences() []*FileReference { - values := make([]*FileReference, 0) +func (a *AstMap) GetFileReferences() []*references.FileReference { + values := make([]*references.FileReference, 0) for _, fileReference := range a.FileReferences { values = append(values, fileReference) @@ -43,8 +45,8 @@ func (a *AstMap) GetFileReferences() []*FileReference { return values } -func (a *AstMap) GetFunctionReferences() []*FunctionReference { - values := make([]*FunctionReference, 0) +func (a *AstMap) GetFunctionReferences() []*references.FunctionReference { + values := make([]*references.FunctionReference, 0) for _, functionReference := range a.FunctionReferences { values = append(values, functionReference) @@ -53,7 +55,7 @@ func (a *AstMap) GetFunctionReferences() []*FunctionReference { return values } -func (a *AstMap) GetClassReferenceForToken(structName *ClassLikeToken) *ClassLikeReference { +func (a *AstMap) GetClassReferenceForToken(structName *tokens.ClassLikeToken) *references.ClassLikeReference { // TODO: Rework to full package path name := structName.ToString() @@ -80,7 +82,7 @@ func (a *AstMap) GetClassReferenceForToken(structName *ClassLikeToken) *ClassLik return v } -func (a *AstMap) GetFunctionReferenceForToken(functionName *FunctionToken) *FunctionReference { +func (a *AstMap) GetFunctionReferenceForToken(functionName *tokens.FunctionToken) *references.FunctionReference { v, ok := a.FunctionReferences[functionName.ToString()] if !ok { return nil @@ -89,7 +91,7 @@ func (a *AstMap) GetFunctionReferenceForToken(functionName *FunctionToken) *Func return v } -func (a *AstMap) GetFileReferenceForToken(filePath *FileToken) *FileReference { +func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *references.FileReference { v, ok := a.FileReferences[filePath.ToString()] if !ok { return nil @@ -98,7 +100,7 @@ func (a *AstMap) GetFileReferenceForToken(filePath *FileToken) *FileReference { return v } -func (a *AstMap) GetClassInherits(structLikeName *ClassLikeToken) []*AstInherit { +func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstInherit { structReference := a.GetClassReferenceForToken(structLikeName) if structReference == nil { return nil @@ -161,7 +163,7 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, a return out } -func (a *AstMap) addClassLike(astStructReference ClassLikeReference) { +func (a *AstMap) addClassLike(astStructReference references.ClassLikeReference) { token := astStructReference.GetToken() // If token.ToString() contains :: then panic @@ -169,15 +171,15 @@ func (a *AstMap) addClassLike(astStructReference ClassLikeReference) { panic(token.ToString()) } - // github.com/KoNekoD/go-deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap - if strings.Contains(token.ToString(), "github.com/KoNekoD/go-deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap") { + // github.com/KoNekoD/go_deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap + if strings.Contains(token.ToString(), "github.com/KoNekoD/go_deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap") { panic(token.ToString()) } a.ClassReferences[token.ToString()] = &astStructReference } -func (a *AstMap) addAstFileReference(astFileReference *FileReference) { +func (a *AstMap) addAstFileReference(astFileReference *references.FileReference) { a.FileReferences[*astFileReference.Filepath] = astFileReference for _, astStructReference := range astFileReference.ClassLikeReferences { a.addClassLike(*astStructReference) @@ -188,6 +190,6 @@ func (a *AstMap) addAstFileReference(astFileReference *FileReference) { } } -func (a *AstMap) addFunction(astFunctionReference FunctionReference) { +func (a *AstMap) addFunction(astFunctionReference references.FunctionReference) { a.FunctionReferences[astFunctionReference.GetToken().ToString()] = &astFunctionReference } diff --git a/pkg/ast_core/ast_map_extractor.go b/pkg/ast_map/ast_map_extractor.go similarity index 55% rename from pkg/ast_core/ast_map_extractor.go rename to pkg/ast_map/ast_map_extractor.go index cf90697..0814150 100644 --- a/pkg/ast_core/ast_map_extractor.go +++ b/pkg/ast_map/ast_map_extractor.go @@ -1,17 +1,16 @@ -package ast_core +package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" + "github.com/KoNekoD/go-deptrac/pkg/collectors" ) type AstMapExtractor struct { - inputCollector input_collector_core.InputCollectorInterface + inputCollector collectors.InputCollectorInterface astLoader *AstLoader - astMapCache *ast_map.AstMap + astMapCache *AstMap } -func NewAstMapExtractor(inputCollector input_collector_core.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { +func NewAstMapExtractor(inputCollector collectors.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { return &AstMapExtractor{ inputCollector: inputCollector, astLoader: astLoader, @@ -19,7 +18,7 @@ func NewAstMapExtractor(inputCollector input_collector_core.InputCollectorInterf } } -func (e *AstMapExtractor) Extract() (*ast_map.AstMap, error) { +func (e *AstMapExtractor) Extract() (*AstMap, error) { if e.astMapCache == nil { collected, err := e.inputCollector.Collect() diff --git a/pkg/ast_core/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go similarity index 53% rename from pkg/ast_core/ast_map_extractor_test.go rename to pkg/ast_map/ast_map_extractor_test.go index 023707f..afb0320 100644 --- a/pkg/ast_core/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -1,11 +1,10 @@ -package ast_core +package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/parsers" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/types" "os" "testing" ) @@ -31,20 +30,20 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { basePath := wd + "/pkg/" - fileInputCollector, err := input_collector_core.NewFileInputCollector(paths, excluded, basePath) + fileInputCollector, err := collectors.NewFileInputCollector(paths, excluded, basePath) if err != nil { t.Error(err) } astLoader := NewAstLoader( - nikic_php_parser.NewNikicPhpParser( - cache.NewAstFileReferenceInMemoryCache(), - parser.NewTypeResolver( + parsers.NewNikicPhpParser( + NewAstFileReferenceInMemoryCache(), + types.NewTypeResolver( nil, ), nil, - []extractors.ReferenceExtractorInterface{}, + []references.ReferenceExtractorInterface{}, ), nil, ) diff --git a/pkg/ast_contract/post_create_ast_map_event.go b/pkg/ast_map/post_create_ast_map_event.go similarity index 91% rename from pkg/ast_contract/post_create_ast_map_event.go rename to pkg/ast_map/post_create_ast_map_event.go index 0a60dd6..2c4adde 100644 --- a/pkg/ast_contract/post_create_ast_map_event.go +++ b/pkg/ast_map/post_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast_contract +package ast_map // PostCreateAstMapEvent - Event triggered after the AST map of all files has been created. type PostCreateAstMapEvent struct{} diff --git a/pkg/ast_contract/pre_create_ast_map_event.go b/pkg/ast_map/pre_create_ast_map_event.go similarity index 93% rename from pkg/ast_contract/pre_create_ast_map_event.go rename to pkg/ast_map/pre_create_ast_map_event.go index d806d9c..236010c 100644 --- a/pkg/ast_contract/pre_create_ast_map_event.go +++ b/pkg/ast_map/pre_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast_contract +package ast_map // PreCreateAstMapEvent - Event triggered before the AST map and parsing of all files has started. type PreCreateAstMapEvent struct { diff --git a/pkg/layer_core/collector/abstract_type_collector.go b/pkg/collectors/abstract_type_collector.go similarity index 50% rename from pkg/layer_core/collector/abstract_type_collector.go rename to pkg/collectors/abstract_type_collector.go index b224e7d..eef0dcc 100644 --- a/pkg/layer_core/collector/abstract_type_collector.go +++ b/pkg/collectors/abstract_type_collector.go @@ -1,10 +1,11 @@ -package collector +package collectors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/types" ) type AbstractTypeCollector struct { @@ -17,12 +18,12 @@ func NewAbstractTypeCollector() *AbstractTypeCollector { } } -func (c *AbstractTypeCollector) GetType() ast_map2.ClassLikeType { +func (c *AbstractTypeCollector) GetType() types.ClassLikeType { panic("Not implemented") } -func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - v, ok := reference.(*ast_map2.ClassLikeReference) +func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + v, ok := reference.(*references.ClassLikeReference) if !ok { return false, nil } @@ -32,16 +33,16 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference return false, err } - isClassLike := ast_map2.TypeClasslike == c.GetType() + isClassLike := types.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() - return (isClassLike || isSameType) && v.GetToken().(*ast_map2.ClassLikeToken).Match(pattern), nil + return (isClassLike || isSameType) && v.GetToken().(*tokens.ClassLikeToken).Match(pattern), nil } func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration(fmt.Sprintf("Collector \"%s\" needs the regex configuration", c.GetType().ToString())) } } return fmt.Sprintf("/%s/i", config["value"].(string)), nil diff --git a/pkg/layer_core/collector/bool_collector.go b/pkg/collectors/bool_collector.go similarity index 73% rename from pkg/layer_core/collector/bool_collector.go rename to pkg/collectors/bool_collector.go index f8c34bf..aed8913 100644 --- a/pkg/layer_core/collector/bool_collector.go +++ b/pkg/collectors/bool_collector.go @@ -1,10 +1,9 @@ -package collector +package collectors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type BoolCollector struct { @@ -17,7 +16,7 @@ func NewBoolCollector(collectorResolver CollectorResolverInterface) *BoolCollect } } -func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { +func (b *BoolCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { configuration, err := b.normalizeConfiguration(config) if err != nil { return false, err @@ -55,15 +54,15 @@ func (b *BoolCollector) Satisfy(config map[string]interface{}, reference ast_con func (b *BoolCollector) normalizeConfiguration(configuration map[string]interface{}) (map[string]interface{}, error) { if _, ok := configuration["must"]; !ok { - configuration["must"] = make([]*config_contract.CollectorConfig, 0) + configuration["must"] = make([]*CollectorConfig, 0) } if _, ok := configuration["must_not"]; !ok { - configuration["must_not"] = make([]*config_contract.CollectorConfig, 0) + configuration["must_not"] = make([]*CollectorConfig, 0) } if len(configuration["must"].([]interface{})) == 0 && len(configuration["must_not"].([]interface{})) == 0 { - return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) + return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration(fmt.Sprintf("\"bool\" collector must have a \"must\" or a \"must_not\" attribute.")) } return configuration, nil diff --git a/pkg/layer_core/collector/class_collector.go b/pkg/collectors/class_collector.go similarity index 55% rename from pkg/layer_core/collector/class_collector.go rename to pkg/collectors/class_collector.go index 6399ae6..be2d754 100644 --- a/pkg/layer_core/collector/class_collector.go +++ b/pkg/collectors/class_collector.go @@ -1,7 +1,7 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/types" ) type ClassCollector struct { @@ -14,6 +14,6 @@ func NewClassCollector() *ClassCollector { } } -func (c *ClassCollector) GetType() ast_map.ClassLikeType { - return ast_map.TypeClass +func (c *ClassCollector) GetType() types.ClassLikeType { + return types.TypeClass } diff --git a/pkg/layer_core/collector/class_like_collector.go b/pkg/collectors/class_like_collector.go similarity index 56% rename from pkg/layer_core/collector/class_like_collector.go rename to pkg/collectors/class_like_collector.go index 32c6e1c..ff5e329 100644 --- a/pkg/layer_core/collector/class_like_collector.go +++ b/pkg/collectors/class_like_collector.go @@ -1,7 +1,7 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/types" ) type ClassLikeCollector struct { @@ -14,6 +14,6 @@ func NewClassLikeCollector() *ClassLikeCollector { } } -func (c *ClassLikeCollector) GetType() ast_map.ClassLikeType { - return ast_map.TypeClasslike +func (c *ClassLikeCollector) GetType() types.ClassLikeType { + return types.TypeClasslike } diff --git a/pkg/collectors/class_name_regex_collector.go b/pkg/collectors/class_name_regex_collector.go new file mode 100644 index 0000000..a9d2c5f --- /dev/null +++ b/pkg/collectors/class_name_regex_collector.go @@ -0,0 +1,39 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type ClassNameRegexCollector struct { + *RegexCollector +} + +func NewClassNameRegexCollector() *ClassNameRegexCollector { + return &ClassNameRegexCollector{ + RegexCollector: NewRegexCollector(), + } +} + +func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.ClassLikeReference); !ok { + return false, nil + } + + validatedPattern, err := c.GetValidatedPattern(config, c.GetPattern) + if err != nil { + return false, err + } + + return reference.GetToken().(*tokens.ClassLikeToken).Match(validatedPattern), nil +} + +func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") + } + + return config["value"].(string), nil +} diff --git a/pkg/config_contract/collector_config.go b/pkg/collectors/collector_config.go similarity index 96% rename from pkg/config_contract/collector_config.go rename to pkg/collectors/collector_config.go index 611cf6f..3cdbe57 100644 --- a/pkg/config_contract/collector_config.go +++ b/pkg/collectors/collector_config.go @@ -1,4 +1,4 @@ -package config_contract +package collectors // CollectorConfig - Abstract type CollectorConfig struct { diff --git a/pkg/layer_contract/collector_interface.go b/pkg/collectors/collector_interface.go similarity index 51% rename from pkg/layer_contract/collector_interface.go rename to pkg/collectors/collector_interface.go index cb96df1..e041770 100644 --- a/pkg/layer_contract/collector_interface.go +++ b/pkg/collectors/collector_interface.go @@ -1,10 +1,10 @@ -package layer_contract +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) // CollectorInterface - A collector is responsible to tell whether an AST node (e.g. a specific class) is part of a layer_contract. type CollectorInterface interface { - Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) + Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) } diff --git a/pkg/collectors/collector_provider.go b/pkg/collectors/collector_provider.go new file mode 100644 index 0000000..ee932b6 --- /dev/null +++ b/pkg/collectors/collector_provider.go @@ -0,0 +1,31 @@ +package collectors + +import ( + "golang.org/x/exp/maps" +) + +type CollectorProvider struct { + collectors map[CollectorType]CollectorInterface +} + +func NewCollectorProvider() *CollectorProvider { + return &CollectorProvider{} +} + +func (p *CollectorProvider) Set(collectors map[CollectorType]CollectorInterface) *CollectorProvider { + p.collectors = collectors + return p +} + +func (p *CollectorProvider) Get(id CollectorType) CollectorInterface { + return p.collectors[id] +} + +func (p *CollectorProvider) Has(id CollectorType) bool { + _, ok := p.collectors[id] + return ok +} + +func (p *CollectorProvider) GetKnownCollectors() []CollectorType { + return maps.Keys(p.collectors) +} diff --git a/pkg/collectors/collector_resolver.go b/pkg/collectors/collector_resolver.go new file mode 100644 index 0000000..d2a2ffc --- /dev/null +++ b/pkg/collectors/collector_resolver.go @@ -0,0 +1,35 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/violations" +) + +type CollectorResolver struct { + collectorProvider *CollectorProvider +} + +func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolver { + return &CollectorResolver{collectorProvider: collectorProvider} +} + +func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*violations.Collectable, error) { + classLikeType, err := NewCollectorTypeFromString(configMap["type"].(string)) + if err != nil { + return nil, err + } + + if !c.collectorProvider.Has(classLikeType) { + list := make([]string, 0) + + for _, v := range c.collectorProvider.GetKnownCollectors() { + list = append(list, string(v)) + } + + return nil, apperrors.NewInvalidCollectorDefinitionUnsupportedType(string(classLikeType), list, nil) + } + + collector := c.collectorProvider.Get(classLikeType) + + return violations.NewCollectable(collector, configMap), nil +} diff --git a/pkg/collectors/collector_resolver_interface.go b/pkg/collectors/collector_resolver_interface.go new file mode 100644 index 0000000..9ad8736 --- /dev/null +++ b/pkg/collectors/collector_resolver_interface.go @@ -0,0 +1,9 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/violations" +) + +type CollectorResolverInterface interface { + Resolve(config map[string]interface{}) (*violations.Collectable, error) +} diff --git a/pkg/collectors/collector_type.go b/pkg/collectors/collector_type.go new file mode 100644 index 0000000..9530062 --- /dev/null +++ b/pkg/collectors/collector_type.go @@ -0,0 +1,65 @@ +package collectors + +import "errors" + +type CollectorType string + +const ( + CollectorTypeTypeAttribute CollectorType = "attribute" + CollectorTypeTypeBool CollectorType = "bool" + CollectorTypeTypeClass CollectorType = "struct" + CollectorTypeTypeClasslike CollectorType = "structLike" + CollectorTypeTypeClassNameRegex CollectorType = "structNameRegex" + CollectorTypeTypeTagValueRegex CollectorType = "tagValueRegex" + CollectorTypeTypeDirectory CollectorType = "directory" + CollectorTypeTypeExtends CollectorType = "extends" + CollectorTypeTypeFunctionName CollectorType = "functionName" + CollectorTypeTypeGlob CollectorType = "glob" + CollectorTypeTypeImplements CollectorType = "implements" + CollectorTypeTypeInheritance CollectorType = "inheritanceLevel" + CollectorTypeTypeInherits CollectorType = "inherits" + CollectorTypeTypeInterface CollectorType = "interface" + CollectorTypeTypeLayer CollectorType = "layer_contract" + CollectorTypeTypeMethod CollectorType = "method" + CollectorTypeTypeSuperGlobal CollectorType = "superGlobal" + CollectorTypeTypeGlobal CollectorType = "global" + CollectorTypeTypeTrait CollectorType = "trait" + CollectorTypeTypeUses CollectorType = "uses" + CollectorTypeTypePhpInternal CollectorType = "php_internal" + CollectorTypeTypeComposer CollectorType = "composer" +) + +var availableTypes = []CollectorType{ + CollectorTypeTypeAttribute, + CollectorTypeTypeBool, + CollectorTypeTypeClass, + CollectorTypeTypeClasslike, + CollectorTypeTypeClassNameRegex, + CollectorTypeTypeTagValueRegex, + CollectorTypeTypeDirectory, + CollectorTypeTypeExtends, + CollectorTypeTypeFunctionName, + CollectorTypeTypeGlob, + CollectorTypeTypeImplements, + CollectorTypeTypeInheritance, + CollectorTypeTypeInherits, + CollectorTypeTypeInterface, + CollectorTypeTypeLayer, + CollectorTypeTypeMethod, + CollectorTypeTypeSuperGlobal, + CollectorTypeTypeGlobal, + CollectorTypeTypeTrait, + CollectorTypeTypeUses, + CollectorTypeTypePhpInternal, + CollectorTypeTypeComposer, +} + +func NewCollectorTypeFromString(collectorType string) (CollectorType, error) { + for _, availableType := range availableTypes { + if string(availableType) == collectorType { + return availableType, nil + } + } + + return "", errors.New("invalid collector type") +} diff --git a/pkg/layer_core/collector/composer_collector.go b/pkg/collectors/composer_collector.go similarity index 54% rename from pkg/layer_core/collector/composer_collector.go rename to pkg/collectors/composer_collector.go index c477f1b..8dd7c83 100644 --- a/pkg/layer_core/collector/composer_collector.go +++ b/pkg/collectors/composer_collector.go @@ -1,9 +1,9 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ComposerCollector struct{} @@ -12,15 +12,15 @@ func NewComposerCollector() *ComposerCollector { return &ComposerCollector{} } -func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if !util.MapKeyExists(config, "composerPath") || !util.MapKeyIsString(config, "composerPath") { - return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file_supportive as string.") +func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if !utils.MapKeyExists(config, "composerPath") || !utils.MapKeyIsString(config, "composerPath") { + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file_supportive as string.") } - if !util.MapKeyExists(config, "composerLockPath") || !util.MapKeyIsString(config, "composerLockPath") { - return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file_supportive as string.") + if !utils.MapKeyExists(config, "composerLockPath") || !utils.MapKeyIsString(config, "composerLockPath") { + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.lock file_supportive as string.") } - if !util.MapKeyExists(config, "packages") || !util.MapKeyIsArrayOfStrings(config, "packages") { - return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") + if !utils.MapKeyExists(config, "packages") || !utils.MapKeyIsArrayOfStrings(config, "packages") { + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("ComposerCollector needs the list of packages as strings.") } // TODO: implement go.mod parsing diff --git a/pkg/config_contract/configurable_collector_config.go b/pkg/collectors/configurable_collector_config.go similarity index 98% rename from pkg/config_contract/configurable_collector_config.go rename to pkg/collectors/configurable_collector_config.go index b86808e..facda44 100644 --- a/pkg/config_contract/configurable_collector_config.go +++ b/pkg/collectors/configurable_collector_config.go @@ -1,4 +1,4 @@ -package config_contract +package collectors import ( "strings" diff --git a/pkg/layer_core/collector/directory_collector.go b/pkg/collectors/directory_collector.go similarity index 68% rename from pkg/layer_core/collector/directory_collector.go rename to pkg/collectors/directory_collector.go index 24cdbdc..8e0df23 100644 --- a/pkg/layer_core/collector/directory_collector.go +++ b/pkg/collectors/directory_collector.go @@ -1,10 +1,10 @@ -package collector +package collectors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/tokens" "regexp" ) @@ -18,7 +18,7 @@ func NewDirectoryCollector() *DirectoryCollector { } } -func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { +func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { return false, nil @@ -27,7 +27,7 @@ func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference as if err != nil { return false, err } - normalizedPath := util.PathNormalize(*filepath) + normalizedPath := utils.PathNormalize(*filepath) r, err := regexp.Compile(validatedPattern) if err != nil { @@ -42,7 +42,7 @@ func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference as func (c *DirectoryCollector) GetPattern(config map[string]interface{}) (string, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("DirectoryCollector needs the regex configuration") } } diff --git a/pkg/layer_core/collector/directory_collector_test.go b/pkg/collectors/directory_collector_test.go similarity index 82% rename from pkg/layer_core/collector/directory_collector_test.go rename to pkg/collectors/directory_collector_test.go index cf97de2..023404a 100644 --- a/pkg/layer_core/collector/directory_collector_test.go +++ b/pkg/collectors/directory_collector_test.go @@ -1,4 +1,4 @@ -package collector +package collectors import ( "regexp" @@ -6,7 +6,7 @@ import ( ) func TestDirectoryCollectorRegex(t *testing.T) { - normalizedPath := "/home/username/Documents/dev/KoNekoD/go-deptrac/pkg/Core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go" + normalizedPath := "/home/username/Documents/dev/KoNekoD/go_deptrac/pkg/Core/Ast/Parser/NikicPhpParser/NikicPhpParser/NikicPhpParser.go" validatedPattern := "pkg/Core/Ast/.*" diff --git a/pkg/input_collector_core/file_input_collector.go b/pkg/collectors/file_input_collector.go similarity index 67% rename from pkg/input_collector_core/file_input_collector.go rename to pkg/collectors/file_input_collector.go index 5f1ccf2..678a6bd 100644 --- a/pkg/input_collector_core/file_input_collector.go +++ b/pkg/collectors/file_input_collector.go @@ -1,9 +1,8 @@ -package input_collector_core +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/domain_error_contract" - "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" - "github.com/KoNekoD/go-deptrac/pkg/util" + apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "os" "path/filepath" "regexp" @@ -20,8 +19,8 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string if err != nil { return nil, err } - if !fileInfo.IsDir() || !util.IsReadable(basePath) { - return nil, exception.NewInvalidPathExceptionUnreadablePath(fileInfo) + if !fileInfo.IsDir() || !utils.IsReadable(basePath) { + return nil, apperrors2.NewInvalidPathExceptionUnreadablePath(fileInfo) } paths := make([]string, 0) for _, originalPath := range originalPaths { @@ -32,14 +31,14 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string path = filepath.Join(basePath, originalPath) } - if !util.IsReadable(path) { + if !utils.IsReadable(path) { pathFileInfo, err := os.Stat(path) if err != nil { return nil, err } - return nil, exception.NewInvalidPathExceptionUnreadablePath(pathFileInfo) + return nil, apperrors2.NewInvalidPathExceptionUnreadablePath(pathFileInfo) } - paths = append(paths, util.PathCanonicalize(path)) + paths = append(paths, utils.PathCanonicalize(path)) } return &FileInputCollector{paths: paths, excludedFilePatterns: excludedFilePatterns}, nil @@ -47,7 +46,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string func (c *FileInputCollector) Collect() ([]string, error) { if len(c.paths) == 0 { - return nil, domain_error_contract.NewException("No 'paths' defined in the depfile.") + return nil, apperrors2.NewException("No 'paths' defined in the depfile.") } regex, err := regexp.Compile(".*\\.go") @@ -65,7 +64,7 @@ func (c *FileInputCollector) Collect() ([]string, error) { return err }) if err != nil { - return nil, NewInputExceptionCouldNotCollectFiles(err) + return nil, apperrors2.NewInputExceptionCouldNotCollectFiles(err) } } return paths, nil diff --git a/pkg/collectors/function_name_collector.go b/pkg/collectors/function_name_collector.go new file mode 100644 index 0000000..a80718a --- /dev/null +++ b/pkg/collectors/function_name_collector.go @@ -0,0 +1,38 @@ +package collectors + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type FunctionNameCollector struct{} + +func NewFunctionNameCollector() *FunctionNameCollector { + return &FunctionNameCollector{} +} + +func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.FunctionReference); !ok { + return false, nil + } + + pattern, err := c.GetPattern(config) + if err != nil { + return false, err + } + + tokenName := reference.GetToken().(*tokens.FunctionToken) + + return tokenName.Match(pattern), nil +} + +func (c FunctionNameCollector) GetPattern(config map[string]interface{}) (string, error) { + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") + } + + return fmt.Sprintf("/%s/i", config["value"].(string)), nil +} diff --git a/pkg/layer_core/collector/glob_collector.go b/pkg/collectors/glob_collector.go similarity index 57% rename from pkg/layer_core/collector/glob_collector.go rename to pkg/collectors/glob_collector.go index 8eccbc1..782df64 100644 --- a/pkg/layer_core/collector/glob_collector.go +++ b/pkg/collectors/glob_collector.go @@ -1,9 +1,9 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/tokens" filepath2 "path/filepath" "regexp" ) @@ -16,11 +16,11 @@ type GlobCollector struct { func NewGlobCollector(basePath string) *GlobCollector { return &GlobCollector{ RegexCollector: NewRegexCollector(), - basePath: util.PathNormalize(basePath), + basePath: utils.PathNormalize(basePath), } } -func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { +func (c *GlobCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { @@ -32,7 +32,7 @@ func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast_con return false, err } - normalizedPath := util.PathNormalize(*filepath) + normalizedPath := utils.PathNormalize(*filepath) relativeFilePath, err := filepath2.Rel(c.basePath, normalizedPath) if err != nil { @@ -48,9 +48,9 @@ func (c *GlobCollector) Satisfy(config map[string]interface{}, reference ast_con } func (c *GlobCollector) GetPattern(config map[string]interface{}) (string, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("GlobCollector needs the glob pattern configuration.") } - return util.GlogToRegex(config["value"].(string)), nil + return utils.GlogToRegex(config["value"].(string)), nil } diff --git a/pkg/collectors/inheritance_level_collector.go b/pkg/collectors/inheritance_level_collector.go new file mode 100644 index 0000000..a184c77 --- /dev/null +++ b/pkg/collectors/inheritance_level_collector.go @@ -0,0 +1,47 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type InheritanceLevelCollector struct { + astMapExtractor *ast_map.AstMapExtractor + astMap *ast_map.AstMap +} + +func NewInheritanceLevelCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritanceLevelCollector, error) { + astMap, err := astMapExtractor.Extract() + if err != nil { + return nil, err + } + return &InheritanceLevelCollector{ + astMapExtractor: astMapExtractor, + astMap: astMap, + }, nil +} + +func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.ClassLikeReference); !ok { + return false, nil + } + + classInherits := c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) + + if !utils.MapKeyExists(config, "value") || utils.MapKeyIsInt(config, "value") { + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") + } + + depth := config["value"].(int) + + for _, classInherit := range classInherits { + if len(classInherit.GetPath()) > depth { + return true, nil + } + } + + return false, nil +} diff --git a/pkg/collectors/inherits_collector.go b/pkg/collectors/inherits_collector.go new file mode 100644 index 0000000..2199272 --- /dev/null +++ b/pkg/collectors/inherits_collector.go @@ -0,0 +1,52 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type InheritsCollector struct { + astMapExtractor *ast_map.AstMapExtractor + astMap *ast_map.AstMap +} + +func NewInheritsCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritsCollector, error) { + astMap, err := astMapExtractor.Extract() + if err != nil { + return nil, err + } + return &InheritsCollector{ + astMapExtractor: astMapExtractor, + astMap: astMap, + }, nil +} + +func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.ClassLikeReference); !ok { + return false, nil + } + + classLikeName, err := c.getClassLikeName(config) + if err != nil { + return false, err + } + + for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { + if inherit.ClassLikeName.Equals(classLikeName) { + return true, nil + } + } + + return false, nil +} + +func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") + } + + return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil +} diff --git a/pkg/input_collector_core/input_collector_interface.go b/pkg/collectors/input_collector_interface.go similarity index 71% rename from pkg/input_collector_core/input_collector_interface.go rename to pkg/collectors/input_collector_interface.go index 2500a7b..19eba69 100644 --- a/pkg/input_collector_core/input_collector_interface.go +++ b/pkg/collectors/input_collector_interface.go @@ -1,4 +1,4 @@ -package input_collector_core +package collectors type InputCollectorInterface interface { Collect() ([]string, error) diff --git a/pkg/layer_core/collector/interface_collector.go b/pkg/collectors/interface_collector.go similarity index 56% rename from pkg/layer_core/collector/interface_collector.go rename to pkg/collectors/interface_collector.go index 2fd819d..1927829 100644 --- a/pkg/layer_core/collector/interface_collector.go +++ b/pkg/collectors/interface_collector.go @@ -1,7 +1,7 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/types" ) type InterfaceCollector struct { @@ -14,6 +14,6 @@ func NewInterfaceCollector() *InterfaceCollector { } } -func (c *InterfaceCollector) GetType() ast_map.ClassLikeType { - return ast_map.TypeInterface +func (c *InterfaceCollector) GetType() types.ClassLikeType { + return types.TypeInterface } diff --git a/pkg/collectors/layer_collector.go b/pkg/collectors/layer_collector.go new file mode 100644 index 0000000..823bb96 --- /dev/null +++ b/pkg/collectors/layer_collector.go @@ -0,0 +1,60 @@ +package collectors + +import ( + "fmt" + apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type LayerCollector struct { + resolver layers.LayerResolverInterface + resolved map[string]map[string]*bool +} + +func NewLayerCollector(resolver layers.LayerResolverInterface) *LayerCollector { + return &LayerCollector{ + resolver: resolver, + } +} + +func (c *LayerCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := config["value"]; !ok { + if _, ok2 := config["value"].(string); !ok2 { + return false, apperrors2.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") + } + } + + configValueLayer := config["value"].(string) + + hasInResolver, err := c.resolver.Has(configValueLayer) + if err != nil { + return false, err + } + if !hasInResolver { + return false, apperrors2.NewInvalidCollectorDefinitionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer_contract \"%s\" specified in collector.", configValueLayer)) + } + + token := reference.GetToken().ToString() + + if utils.MapKeyExists(c.resolved, token) && utils.MapKeyExists(c.resolved[token], configValueLayer) { + if c.resolved[token][configValueLayer] == nil { + return false, apperrors2.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) + } + + return *c.resolved[token][configValueLayer], nil + } + + // Set resolved for current token to null in case resolver comes back to it (circular reference) + c.resolved[token][configValueLayer] = nil + + resolvedValue, err := c.resolver.IsReferenceInLayer(configValueLayer, reference) + + if err != nil { + return false, err + } + + c.resolved[token][configValueLayer] = &resolvedValue + return resolvedValue, nil +} diff --git a/pkg/layer_core/collector/method_collector.go b/pkg/collectors/method_collector.go similarity index 53% rename from pkg/layer_core/collector/method_collector.go rename to pkg/collectors/method_collector.go index b7130be..34b7143 100644 --- a/pkg/layer_core/collector/method_collector.go +++ b/pkg/collectors/method_collector.go @@ -1,28 +1,28 @@ -package collector +package collectors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/parsers" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type MethodCollector struct { *RegexCollector - astParser *nikic_php_parser.NikicPhpParser + astParser *parsers.NikicPhpParser } -func NewMethodCollector(astParser *nikic_php_parser.NikicPhpParser) *MethodCollector { +func NewMethodCollector(astParser *parsers.NikicPhpParser) *MethodCollector { return &MethodCollector{ RegexCollector: NewRegexCollector(), astParser: astParser, } } -func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.ClassLikeReference); !ok { +func (c *MethodCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.ClassLikeReference); !ok { return false, nil } @@ -31,7 +31,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast_c return false, err } - classLike := c.astParser.GetNodeForClassLikeReference(reference.(*ast_map.ClassLikeReference)) + classLike := c.astParser.GetNodeForClassLikeReference(reference.(*references.ClassLikeReference)) if classLike == nil { return false, nil } @@ -47,8 +47,8 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference ast_c } func (c *MethodCollector) GetPattern(config map[string]interface{}) (string, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("MethodCollector needs the name configuration.") } return fmt.Sprintf("/%s/i", config["value"].(string)), nil } diff --git a/pkg/layer_core/collector/regex_collector.go b/pkg/collectors/regex_collector.go similarity index 68% rename from pkg/layer_core/collector/regex_collector.go rename to pkg/collectors/regex_collector.go index dbf1949..0e2805a 100644 --- a/pkg/layer_core/collector/regex_collector.go +++ b/pkg/collectors/regex_collector.go @@ -1,7 +1,7 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "regexp" ) @@ -18,7 +18,7 @@ func (c *RegexCollector) GetValidatedPattern(config map[string]interface{}, getP } if _, err = regexp.Compile(pattern); err != nil { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) + return "", apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("Invalid regex pattern " + pattern) } return pattern, nil diff --git a/pkg/collectors/superglobal_collector.go b/pkg/collectors/superglobal_collector.go new file mode 100644 index 0000000..e7a83c6 --- /dev/null +++ b/pkg/collectors/superglobal_collector.go @@ -0,0 +1,41 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type SuperglobalCollector struct{} + +func NewSuperglobalCollector() *SuperglobalCollector { + return &SuperglobalCollector{} +} + +func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.VariableReference); !ok { + return false, nil + } + + names, err := c.getNames(config) + if err != nil { + return false, err + } + + for _, name := range names { + if reference.GetToken().ToString() == name { + return true, nil + } + } + + return false, nil +} + +func (c SuperglobalCollector) getNames(config map[string]interface{}) ([]string, error) { + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsArrayOfStrings(config, "value") { + return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") + } + + return config["value"].([]string), nil +} diff --git a/pkg/layer_core/collector/trait_collector.go b/pkg/collectors/trait_collector.go similarity index 55% rename from pkg/layer_core/collector/trait_collector.go rename to pkg/collectors/trait_collector.go index de77fbb..027d910 100644 --- a/pkg/layer_core/collector/trait_collector.go +++ b/pkg/collectors/trait_collector.go @@ -1,7 +1,7 @@ -package collector +package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/types" ) type TraitCollector struct { @@ -14,6 +14,6 @@ func NewTraitCollector() *TraitCollector { } } -func (c *TraitCollector) GetType() ast_map.ClassLikeType { - return ast_map.TypeTrait +func (c *TraitCollector) GetType() types.ClassLikeType { + return types.TypeTrait } diff --git a/pkg/collectors/uses_collector.go b/pkg/collectors/uses_collector.go new file mode 100644 index 0000000..fb67016 --- /dev/null +++ b/pkg/collectors/uses_collector.go @@ -0,0 +1,52 @@ +package collectors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type UsesCollector struct { + astMapExtractor *ast_map.AstMapExtractor + astMap *ast_map.AstMap +} + +func NewUsesCollector(astMapExtractor *ast_map.AstMapExtractor) (*UsesCollector, error) { + astMap, err := astMapExtractor.Extract() + if err != nil { + return nil, err + } + return &UsesCollector{ + astMapExtractor: astMapExtractor, + astMap: astMap, + }, nil +} + +func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*references.ClassLikeReference); !ok { + return false, nil + } + + traitName, err := u.getTraitName(config) + if err != nil { + return false, err + } + + for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { + if ast_map.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { + return true, nil + } + } + + return false, nil +} + +func (u *UsesCollector) getTraitName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { + if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { + return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") + } + + return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil +} diff --git a/pkg/console_supportive/command/DebugDependenciesCommand.php b/pkg/commands/DebugDependenciesCommand.php similarity index 100% rename from pkg/console_supportive/command/DebugDependenciesCommand.php rename to pkg/commands/DebugDependenciesCommand.php diff --git a/pkg/console_supportive/command/DebugLayerCommand.php b/pkg/commands/DebugLayerCommand.php similarity index 100% rename from pkg/console_supportive/command/DebugLayerCommand.php rename to pkg/commands/DebugLayerCommand.php diff --git a/pkg/console_supportive/command/DebugTokenCommand.php b/pkg/commands/DebugTokenCommand.php similarity index 100% rename from pkg/console_supportive/command/DebugTokenCommand.php rename to pkg/commands/DebugTokenCommand.php diff --git a/pkg/console_supportive/command/DebugUnassignedCommand.php b/pkg/commands/DebugUnassignedCommand.php similarity index 100% rename from pkg/console_supportive/command/DebugUnassignedCommand.php rename to pkg/commands/DebugUnassignedCommand.php diff --git a/pkg/console_supportive/command/DebugUnusedCommand.php b/pkg/commands/DebugUnusedCommand.php similarity index 100% rename from pkg/console_supportive/command/DebugUnusedCommand.php rename to pkg/commands/DebugUnusedCommand.php diff --git a/pkg/console_supportive/command/InitCommand.php b/pkg/commands/InitCommand.php similarity index 100% rename from pkg/console_supportive/command/InitCommand.php rename to pkg/commands/InitCommand.php diff --git a/pkg/commands/analyse_command.go b/pkg/commands/analyse_command.go new file mode 100644 index 0000000..b14be8d --- /dev/null +++ b/pkg/commands/analyse_command.go @@ -0,0 +1,49 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/runners" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" +) + +// AnalyseCommand - Analyses your project using the provided depfile +type AnalyseCommand struct { + runner *runners.AnalyseRunner + dispatcher events.EventDispatcherInterface + formatterProvider *formatters.FormatterProvider + verboseBoolFlag bool + debugBoolFlag bool + consoleSubscriber *subscribers.ConsoleSubscriber + progressSubscriber *subscribers.ProgressSubscriber + analyseOptions *rules.AnalyseOptions +} + +func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher events.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscribers.ConsoleSubscriber, progressSubscriber *subscribers.ProgressSubscriber, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { + return &AnalyseCommand{ + runner: runner, + dispatcher: dispatcher, + formatterProvider: formatterProvider, + verboseBoolFlag: verboseBoolFlag, + debugBoolFlag: debugBoolFlag, + consoleSubscriber: consoleSubscriber, + progressSubscriber: progressSubscriber, + analyseOptions: analyseOptions, + } +} + +func (c *AnalyseCommand) Run() error { + symfonyOutput := results.NewSymfonyOutput(formatters.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) + + // Moved to services + //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) + + err := c.runner.Run(c.analyseOptions, symfonyOutput) + if err != nil { + return err + } + + return nil +} diff --git a/pkg/console_supportive/command/changed_files_command.go b/pkg/commands/changed_files_command.go similarity index 72% rename from pkg/console_supportive/command/changed_files_command.go rename to pkg/commands/changed_files_command.go index e498561..61f15cb 100644 --- a/pkg/console_supportive/command/changed_files_command.go +++ b/pkg/commands/changed_files_command.go @@ -1,13 +1,15 @@ -package command +package commands import ( - symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/runners" "github.com/pkg/errors" "github.com/spf13/cobra" ) type ChangedFilesCommand struct { - runner *ChangedFilesRunner + runner *runners.ChangedFilesRunner } const ( @@ -15,7 +17,7 @@ const ( argFiles = "files" ) -func NewChangedFilesCommand(runner *ChangedFilesRunner) *cobra.Command { +func NewChangedFilesCommand(runner *runners.ChangedFilesRunner) *cobra.Command { cmd := &ChangedFilesCommand{runner: runner} cobraCmd := &cobra.Command{ @@ -35,7 +37,7 @@ func NewChangedFilesCommand(runner *ChangedFilesRunner) *cobra.Command { } func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { - symfonyOutput := symfony2.NewSymfonyOutput(symfony2.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) + symfonyOutput := results.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) files, err := cobraCmd.Flags().GetStringArray(argFiles) if err != nil { diff --git a/pkg/config_contract/collector/attribute_config.go b/pkg/config_contract/collector/attribute_config.go deleted file mode 100644 index 24fabe9..0000000 --- a/pkg/config_contract/collector/attribute_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type AttributeConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewAttributeConfig(config string) *AttributeConfig { - return &AttributeConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeAttribute, - } -} diff --git a/pkg/config_contract/collector/bool_config.go b/pkg/config_contract/collector/bool_config.go deleted file mode 100644 index db2c81f..0000000 --- a/pkg/config_contract/collector/bool_config.go +++ /dev/null @@ -1,31 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type BoolConfig struct { - *config_contract2.CollectorConfig - collectorType config_contract2.CollectorType - mustNot []config_contract2.CollectorConfig - must []config_contract2.CollectorConfig -} - -func NewBoolConfig() *BoolConfig { - return &BoolConfig{ - CollectorConfig: &config_contract2.CollectorConfig{}, - collectorType: config_contract2.TypeBool, - mustNot: make([]config_contract2.CollectorConfig, 0), - must: make([]config_contract2.CollectorConfig, 0), - } -} - -func (c *BoolConfig) ToArray() map[string]interface{} { - parent := c.CollectorConfig.ToArray() - - parent["type"] = string(c.collectorType) - parent["mustNot"] = c.mustNot - parent["must"] = c.must - - return parent -} diff --git a/pkg/config_contract/collector/class_config.go b/pkg/config_contract/collector/class_config.go deleted file mode 100644 index 7e7c3c1..0000000 --- a/pkg/config_contract/collector/class_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type ClassConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewClassConfig(config string) *ClassConfig { - return &ClassConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeClass, - } -} diff --git a/pkg/config_contract/collector/class_like_config.go b/pkg/config_contract/collector/class_like_config.go deleted file mode 100644 index a6db426..0000000 --- a/pkg/config_contract/collector/class_like_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type ClassLikeConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewClassLikeConfig(config string) *ClassLikeConfig { - return &ClassLikeConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeClasslike, - } -} diff --git a/pkg/config_contract/collector/class_name_regex_config.go b/pkg/config_contract/collector/class_name_regex_config.go deleted file mode 100644 index f2edddd..0000000 --- a/pkg/config_contract/collector/class_name_regex_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type ClassNameRegexConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewClassNameRegexConfig(config string) *ClassNameRegexConfig { - return &ClassNameRegexConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeClassNameRegex, - } -} diff --git a/pkg/config_contract/collector/directory_config.go b/pkg/config_contract/collector/directory_config.go deleted file mode 100644 index b94c5e0..0000000 --- a/pkg/config_contract/collector/directory_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type DirectoryConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewDirectoryConfig(config string) *DirectoryConfig { - return &DirectoryConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeDirectory, - } -} diff --git a/pkg/config_contract/collector/extends_config.go b/pkg/config_contract/collector/extends_config.go deleted file mode 100644 index d75f53c..0000000 --- a/pkg/config_contract/collector/extends_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type ExtendsConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewExtendsConfig(config string) *ExtendsConfig { - return &ExtendsConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeExtends, - } -} diff --git a/pkg/config_contract/collector/function_name_config.go b/pkg/config_contract/collector/function_name_config.go deleted file mode 100644 index bc08211..0000000 --- a/pkg/config_contract/collector/function_name_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type FunctionNameConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewFunctionNameConfig(config string) *FunctionNameConfig { - return &FunctionNameConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeFunctionName, - } -} diff --git a/pkg/config_contract/collector/glob_config.go b/pkg/config_contract/collector/glob_config.go deleted file mode 100644 index a110f63..0000000 --- a/pkg/config_contract/collector/glob_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type GlobConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewGlobConfig(config string) *GlobConfig { - return &GlobConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeGlob, - } -} diff --git a/pkg/config_contract/collector/implements_config.go b/pkg/config_contract/collector/implements_config.go deleted file mode 100644 index fcfce2b..0000000 --- a/pkg/config_contract/collector/implements_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type ImplementsConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewImplementsConfig(config string) *ImplementsConfig { - return &ImplementsConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeImplements, - } -} diff --git a/pkg/config_contract/collector/inherits_config.go b/pkg/config_contract/collector/inherits_config.go deleted file mode 100644 index b731061..0000000 --- a/pkg/config_contract/collector/inherits_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type InheritsConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewInheritsConfig(config string) *InheritsConfig { - return &InheritsConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeInherits, - } -} diff --git a/pkg/config_contract/collector/interface_config.go b/pkg/config_contract/collector/interface_config.go deleted file mode 100644 index da91479..0000000 --- a/pkg/config_contract/collector/interface_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type InterfaceConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewInterfaceConfig(config string) *InterfaceConfig { - return &InterfaceConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeInterface, - } -} diff --git a/pkg/config_contract/collector/layer_config.go b/pkg/config_contract/collector/layer_config.go deleted file mode 100644 index 1ee4d51..0000000 --- a/pkg/config_contract/collector/layer_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type LayerConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewLayerConfig(config string) *LayerConfig { - return &LayerConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeLayer, - } -} diff --git a/pkg/config_contract/collector/method_config.go b/pkg/config_contract/collector/method_config.go deleted file mode 100644 index 66afdbb..0000000 --- a/pkg/config_contract/collector/method_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type MethodConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewMethodConfig(config string) *MethodConfig { - return &MethodConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeMethod, - } -} diff --git a/pkg/config_contract/collector/php_interal_config.go b/pkg/config_contract/collector/php_interal_config.go deleted file mode 100644 index 29a9c1f..0000000 --- a/pkg/config_contract/collector/php_interal_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type PhpInteralConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewPhpInteralConfig(config string) *PhpInteralConfig { - return &PhpInteralConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypePhpInternal, - } -} diff --git a/pkg/config_contract/collector/trait_config.go b/pkg/config_contract/collector/trait_config.go deleted file mode 100644 index fa8e99b..0000000 --- a/pkg/config_contract/collector/trait_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type TraitConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewTraitConfig(config string) *TraitConfig { - return &TraitConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeTrait, - } -} diff --git a/pkg/config_contract/collector/uses_config.go b/pkg/config_contract/collector/uses_config.go deleted file mode 100644 index 2703113..0000000 --- a/pkg/config_contract/collector/uses_config.go +++ /dev/null @@ -1,17 +0,0 @@ -package collector - -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type UsesConfig struct { - *config_contract2.ConfigurableCollectorConfig - collectorType config_contract2.CollectorType -} - -func NewUsesConfig(config string) *UsesConfig { - return &UsesConfig{ - ConfigurableCollectorConfig: config.CreateConfigurableCollectorConfig(config), - collectorType: config.TypeUses, - } -} diff --git a/pkg/config_contract/collector_type.go b/pkg/config_contract/collector_type.go deleted file mode 100644 index 8b8aad2..0000000 --- a/pkg/config_contract/collector_type.go +++ /dev/null @@ -1,65 +0,0 @@ -package config_contract - -import "errors" - -type CollectorType string - -const ( - TypeAttribute CollectorType = "attribute" - TypeBool CollectorType = "bool" - TypeClass CollectorType = "struct" - TypeClasslike CollectorType = "structLike" - TypeClassNameRegex CollectorType = "structNameRegex" - TypeTagValueRegex CollectorType = "tagValueRegex" - TypeDirectory CollectorType = "directory" - TypeExtends CollectorType = "extends" - TypeFunctionName CollectorType = "functionName" - TypeGlob CollectorType = "glob" - TypeImplements CollectorType = "implements" - TypeInheritance CollectorType = "inheritanceLevel" - TypeInherits CollectorType = "inherits" - TypeInterface CollectorType = "interface" - TypeLayer CollectorType = "layer_contract" - TypeMethod CollectorType = "method" - TypeSuperGlobal CollectorType = "superGlobal" - TypeGlobal CollectorType = "global" - TypeTrait CollectorType = "trait" - TypeUses CollectorType = "uses" - TypePhpInternal CollectorType = "php_internal" - TypeComposer CollectorType = "composer" -) - -var availableTypes = []CollectorType{ - TypeAttribute, - TypeBool, - TypeClass, - TypeClasslike, - TypeClassNameRegex, - TypeTagValueRegex, - TypeDirectory, - TypeExtends, - TypeFunctionName, - TypeGlob, - TypeImplements, - TypeInheritance, - TypeInherits, - TypeInterface, - TypeLayer, - TypeMethod, - TypeSuperGlobal, - TypeGlobal, - TypeTrait, - TypeUses, - TypePhpInternal, - TypeComposer, -} - -func NewCollectorTypeFromString(collectorType string) (CollectorType, error) { - for _, availableType := range availableTypes { - if string(availableType) == collectorType { - return availableType, nil - } - } - - return "", errors.New("invalid collector type") -} diff --git a/pkg/config_contract/deptrac_config/deptrac_config.go b/pkg/config_contract/deptrac_config/deptrac_config.go deleted file mode 100644 index a9a7b37..0000000 --- a/pkg/config_contract/deptrac_config/deptrac_config.go +++ /dev/null @@ -1,292 +0,0 @@ -package deptrac_config - -import ( - "errors" - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" - formatter2 "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type DeptracConfig struct { - Paths []string - Analyser *config_contract2.AnalyserConfig - Formatters map[formatter2.FormatterType]formatter2.FormatterConfigInterface - Layers []*config_contract2.Layer - Rulesets map[string]*config_contract2.Ruleset - IgnoreUncoveredInternalStructs bool - SkipViolations map[string][]string - ExcludeFiles []string - CacheFile *string -} - -func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { - parsedDeptrac := parsed["deptrac"].(map[string]interface{}) - - formatters := make(map[formatter2.FormatterType]formatter2.FormatterConfigInterface) - layers := make([]*config_contract2.Layer, 0) - - for _, layerRawRaw := range parsedDeptrac["layers"].([]interface{}) { - layerRaw := layerRawRaw.(map[string]interface{}) - collectorConfigs := make([]*config_contract2.CollectorConfig, 0) - - for _, collectorRawRaw := range layerRaw["collectors"].([]interface{}) { - collectorRaw := collectorRawRaw.(map[string]interface{}) - - if !util.MapKeyExists(collectorRaw, "type") || !util.MapKeyIsString(collectorRaw, "type") { - return nil, Layer2.NewInvalidCollectorDefinitionExceptionMissingType() - } - - collectorType, err := config_contract2.NewCollectorTypeFromString(collectorRaw["type"].(string)) - - if err != nil { - return nil, err - } - - privateValue, ok := collectorRaw["private"].(bool) - private := false - if ok { - private = privateValue - } - payload := collectorRaw - - // Delete private and type - delete(payload, "private") - delete(payload, "type") - - collectorConfig := config_contract2.NewCollectorConfig( - collectorType, - payload, - private, - ) - - collectorConfigs = append(collectorConfigs, collectorConfig) - } - - layerName, ok := layerRaw["name"] - if !ok { - return nil, errors.New("invalid layer_contract definition: missing name") - } - layerNameStr, ok := layerName.(string) - if !ok { - return nil, errors.New("invalid layer_contract definition: name must be a string") - } - - layer := config_contract2.NewLayer( - layerNameStr, - collectorConfigs, - ) - - layers = append(layers, layer) - } - - if parsedDeptracFormatters, ok := parsedDeptrac["formatters"]; ok { - for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { - formatterRaw := formatterRawRaw.(map[string]interface{}) - switch formatterKey { - case string(formatter2.FormatterTypeCodeclimateConfig): - formatters[formatter2.FormatterTypeCodeclimateConfig] = formatter2.CreateCodeclimateConfig( - formatterRaw["failure"].(*config_contract2.CodeclimateLevelEnum), - formatterRaw["skipped"].(*config_contract2.CodeclimateLevelEnum), - formatterRaw["uncovered"].(*config_contract2.CodeclimateLevelEnum), - ) - case string(formatter2.FormatterTypeGraphvizConfig): - hiddenLayers := make([]*config_contract2.Layer, 0) - - for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { - for _, layer := range layers { - if layer.Name == hiddenLayer { - hiddenLayers = append(hiddenLayers, layer) - break - } - } - } - - formatterGraphvizConfig := formatter2.CreateGraphvizConfig(). - SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). - SetHiddenLayers(hiddenLayers...) - - formatters[formatter2.FormatterTypeGraphvizConfig] = formatterGraphvizConfig - - for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*config_contract2.Layer, 0) - - for _, layerName := range groupRaw { - for _, layer := range layers { - if layer.Name == layerName { - groupLayer = append(groupLayer, layer) - break - } - } - } - - formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) - } - case string(formatter2.FormatterTypeMermaidJsConfig): - formatterMermaidJsConfig := formatter2.CreateMermaidJsConfig(). - SetDirection(formatterRaw["direction"].(string)) - - formatters[formatter2.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig - - for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*config_contract2.Layer, 0) - - for _, layerName := range groupRaw { - for _, layer := range layers { - if layer.Name == layerName { - groupLayer = append(groupLayer, layer) - break - } - } - } - - formatterMermaidJsConfig.SetGroups(groupLayerName, groupLayer...) - } - } - } - } - - rulesets := make(map[string]*config_contract2.Ruleset) - - for rulesetLayerName, rulesetLayersNames := range parsedDeptrac["ruleset"].(map[string]interface{}) { - var rulesetOwningLayer *config_contract2.Layer - - for _, layer := range layers { - if layer.Name == rulesetLayerName { - rulesetOwningLayer = layer - break - } - } - - rulesetLayers := make([]*config_contract2.Layer, 0) - - if rulesetLayersNames != nil { // If not ~ - for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { - layerName := layerNameRaw.(string) - for _, layer := range layers { - if layer.Name == layerName { - rulesetLayers = append(rulesetLayers, layer) - break - } - } - } - } - - ruleset := config_contract2.NewRuleset(rulesetOwningLayer, rulesetLayers) - - rulesets[rulesetLayerName] = ruleset - } - - analyzerTypesDefault := []config_contract2.EmitterType{config_contract2.ClassToken, config_contract2.FunctionToken} - analyzerTypes := make([]config_contract2.EmitterType, 0) - internalTag := "@internal" - if parsedDeptracAnalyzer, ok := parsedDeptrac["analyzer"]; ok { - analyzerRaw := parsedDeptracAnalyzer.(map[string]interface{}) - for _, typeRaw := range analyzerRaw["types"].([]interface{}) { - analyzerType, err := config_contract2.NewEmitterTypeFromString(typeRaw.(string)) - - if err != nil { - return nil, err - } - - analyzerTypes = append(analyzerTypes, analyzerType) - } - internalTag = analyzerRaw["internal_tag"].(string) - } else { - analyzerTypes = analyzerTypesDefault - } - - analyser := config_contract2.Create(analyzerTypes, &internalTag) - - paths := make([]string, 0) - for _, path := range parsedDeptrac["paths"].([]interface{}) { - paths = append(paths, path.(string)) - } - - ignoreUncoveredInternalStructs := true - if v, ok := parsedDeptrac["ignore_uncovered_internal_structs"]; ok { - ignoreUncoveredInternalStructs = v.(bool) - } - - skipViolations := make(map[string][]string) - if v, ok := parsedDeptrac["skip_violations"]; ok { - skipViolations = v.(map[string][]string) - } - - excludeFiles := make([]string, 0) - if v, ok := parsedDeptrac["exclude_files"]; ok { - excludeFiles = v.([]string) - } - - var cacheFile *string - if v, ok := parsedDeptrac["cache_file"]; ok { - vStr := v.(string) - cacheFile = &vStr - } - - return &DeptracConfig{ - Paths: paths, - Analyser: analyser, - Formatters: formatters, - Layers: layers, - Rulesets: rulesets, - IgnoreUncoveredInternalStructs: ignoreUncoveredInternalStructs, - SkipViolations: skipViolations, - ExcludeFiles: excludeFiles, - CacheFile: cacheFile, - }, nil -} - -func (c *DeptracConfig) SetRulesets(rulesets ...*config_contract2.Ruleset) *DeptracConfig { - for _, ruleset := range rulesets { - c.Rulesets[ruleset.LayerConfig.Name] = ruleset - } - return c -} - -func (c *DeptracConfig) ToArray() map[string]interface{} { - config := make(map[string]interface{}) - - if len(c.Paths) > 0 { - config["paths"] = c.Paths - } - if c.Analyser != nil { - config["analyser_contract"] = c.Analyser.ToArray() - } - if len(c.Formatters) > 0 { - formatters := make([]map[string]interface{}, len(c.Formatters)) - i := 0 - for _, formatter := range c.Formatters { - formatters[i] = formatter.ToArray() - i++ - } - config["formatters"] = formatters - } - if len(c.ExcludeFiles) > 0 { - config["exclude_files"] = c.ExcludeFiles - } - if len(c.Layers) > 0 { - layers := make([]map[string]interface{}, len(c.Layers)) - i := 0 - for _, layer := range c.Layers { - layers[i] = layer.ToArray() - i++ - } - config["layers"] = layers - } - if len(c.Rulesets) > 0 { - rulesets := make([]map[string]interface{}, len(c.Rulesets)) - i := 0 - for _, ruleset := range c.Rulesets { - rulesets[i] = ruleset.ToArray() - i++ - } - config["ruleset"] = rulesets - } - if len(c.SkipViolations) > 0 { - config["skip_violations"] = c.SkipViolations - } - config["ignore_uncovered_internal_structs"] = c.IgnoreUncoveredInternalStructs - config["cache_file"] = c.CacheFile - return config -} diff --git a/pkg/config_contract/emitter_type.go b/pkg/config_contract/emitter_type.go deleted file mode 100644 index 27539a8..0000000 --- a/pkg/config_contract/emitter_type.go +++ /dev/null @@ -1,37 +0,0 @@ -package config_contract - -import "errors" - -type EmitterType string - -const ( - ClassToken EmitterType = "class" - ClassSuperGlobalToken EmitterType = "class_superglobal" - FileToken EmitterType = "file_supportive" - FunctionToken EmitterType = "function" - FunctionCall EmitterType = "function_call" - FunctionSuperGlobalToken EmitterType = "function_superglobal" - UseToken EmitterType = "use" -) - -func emitterTypeValues() []EmitterType { - return []EmitterType{ - ClassToken, - ClassSuperGlobalToken, - FileToken, - FunctionToken, - FunctionCall, - FunctionSuperGlobalToken, - UseToken, - } -} - -func NewEmitterTypeFromString(input string) (EmitterType, error) { - for _, emitterType := range emitterTypeValues() { - if string(emitterType) == input { - return emitterType, nil - } - } - - return "", errors.New("invalid emitter type string: " + input) -} diff --git a/pkg/config_contract/formatter/codeclimate_config.go b/pkg/config_contract/formatter/codeclimate_config.go deleted file mode 100644 index a4a51d3..0000000 --- a/pkg/config_contract/formatter/codeclimate_config.go +++ /dev/null @@ -1,68 +0,0 @@ -package formatter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) - -type CodeclimateConfig struct { - Failure config_contract.CodeclimateLevelEnum - Skipped config_contract.CodeclimateLevelEnum - Uncovered config_contract.CodeclimateLevelEnum -} - -func newCodeclimateConfig(failure config_contract.CodeclimateLevelEnum, skipped config_contract.CodeclimateLevelEnum, uncovered config_contract.CodeclimateLevelEnum) *CodeclimateConfig { - return &CodeclimateConfig{ - Failure: failure, - Skipped: skipped, - Uncovered: uncovered, - } -} - -func CreateCodeclimateConfig(failure *config_contract.CodeclimateLevelEnum, skipped *config_contract.CodeclimateLevelEnum, uncovered *config_contract.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := config_contract.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := config_contract.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := config_contract.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - return newCodeclimateConfig(*failure, *skipped, *uncovered) -} - -func (c *CodeclimateConfig) severity(failure *config_contract.CodeclimateLevelEnum, skipped *config_contract.CodeclimateLevelEnum, uncovered *config_contract.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := config_contract.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := config_contract.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := config_contract.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - c.Failure = *failure - c.Skipped = *skipped - c.Uncovered = *uncovered - return c -} - -func (c *CodeclimateConfig) ToArray() map[string]interface{} { - return map[string]interface{}{ - "severity": map[string]interface{}{ - "failure": string(c.Failure), - "skipped": string(c.Skipped), - "uncovered": string(c.Uncovered), - }, - } -} - -func (c *CodeclimateConfig) GetName() FormatterType { - return FormatterTypeCodeclimateConfig -} diff --git a/pkg/config_contract/analyser_config.go b/pkg/configs/analyser_config.go similarity index 59% rename from pkg/config_contract/analyser_config.go rename to pkg/configs/analyser_config.go index 2fcd898..40ade5d 100644 --- a/pkg/config_contract/analyser_config.go +++ b/pkg/configs/analyser_config.go @@ -1,19 +1,23 @@ -package config_contract +package configs + +import ( + "github.com/KoNekoD/go-deptrac/pkg/emitters" +) type AnalyserConfig struct { - Types map[string]EmitterType + Types map[string]emitters.EmitterType InternalTag *string } func newAnalyserConfig() *AnalyserConfig { - return &AnalyserConfig{Types: make(map[string]EmitterType)} + return &AnalyserConfig{Types: make(map[string]emitters.EmitterType)} } -func Create(types []EmitterType, internalTag *string) *AnalyserConfig { +func Create(types []emitters.EmitterType, internalTag *string) *AnalyserConfig { analyser := newAnalyserConfig() if types == nil { - types = []EmitterType{ClassToken, FunctionToken} + types = []emitters.EmitterType{emitters.EmitterTypeClassToken, emitters.EmitterTypeFunctionToken} } analyser.setTypes(types...) @@ -22,8 +26,8 @@ func Create(types []EmitterType, internalTag *string) *AnalyserConfig { return analyser } -func (c *AnalyserConfig) setTypes(types ...EmitterType) *AnalyserConfig { - c.Types = make(map[string]EmitterType) +func (c *AnalyserConfig) setTypes(types ...emitters.EmitterType) *AnalyserConfig { + c.Types = make(map[string]emitters.EmitterType) for _, emitterType := range types { c.Types[string(emitterType)] = emitterType diff --git a/pkg/configs/attribute_config.go b/pkg/configs/attribute_config.go new file mode 100644 index 0000000..9edcc4e --- /dev/null +++ b/pkg/configs/attribute_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type AttributeConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewAttributeConfig(config string) *AttributeConfig { + return &AttributeConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeAttribute, + } +} diff --git a/pkg/configs/bool_config.go b/pkg/configs/bool_config.go new file mode 100644 index 0000000..73bb6dd --- /dev/null +++ b/pkg/configs/bool_config.go @@ -0,0 +1,29 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type BoolConfig struct { + *collectors.CollectorConfig + collectorType collectors.CollectorType + mustNot []collectors.CollectorConfig + must []collectors.CollectorConfig +} + +func NewBoolConfig() *BoolConfig { + return &BoolConfig{ + CollectorConfig: &collectors.CollectorConfig{}, + collectorType: collectors.CollectorTypeTypeBool, + mustNot: make([]collectors.CollectorConfig, 0), + must: make([]collectors.CollectorConfig, 0), + } +} + +func (c *BoolConfig) ToArray() map[string]interface{} { + parent := c.CollectorConfig.ToArray() + + parent["type"] = string(c.collectorType) + parent["mustNot"] = c.mustNot + parent["must"] = c.must + + return parent +} diff --git a/pkg/configs/class_config.go b/pkg/configs/class_config.go new file mode 100644 index 0000000..c492bea --- /dev/null +++ b/pkg/configs/class_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type ClassConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewClassConfig(config string) *ClassConfig { + return &ClassConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeClass, + } +} diff --git a/pkg/configs/class_like_config.go b/pkg/configs/class_like_config.go new file mode 100644 index 0000000..14346ae --- /dev/null +++ b/pkg/configs/class_like_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type ClassLikeConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewClassLikeConfig(config string) *ClassLikeConfig { + return &ClassLikeConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeClasslike, + } +} diff --git a/pkg/configs/class_name_regex_config.go b/pkg/configs/class_name_regex_config.go new file mode 100644 index 0000000..29ca91a --- /dev/null +++ b/pkg/configs/class_name_regex_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type ClassNameRegexConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewClassNameRegexConfig(config string) *ClassNameRegexConfig { + return &ClassNameRegexConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeClassNameRegex, + } +} diff --git a/pkg/configs/codeclimate_config.go b/pkg/configs/codeclimate_config.go new file mode 100644 index 0000000..6cc8cc2 --- /dev/null +++ b/pkg/configs/codeclimate_config.go @@ -0,0 +1,69 @@ +package configs + +import ( + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/formatters" +) + +type CodeclimateConfig struct { + Failure enums.CodeclimateLevelEnum + Skipped enums.CodeclimateLevelEnum + Uncovered enums.CodeclimateLevelEnum +} + +func newCodeclimateConfig(failure enums.CodeclimateLevelEnum, skipped enums.CodeclimateLevelEnum, uncovered enums.CodeclimateLevelEnum) *CodeclimateConfig { + return &CodeclimateConfig{ + Failure: failure, + Skipped: skipped, + Uncovered: uncovered, + } +} + +func CreateCodeclimateConfig(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := enums.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := enums.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + return newCodeclimateConfig(*failure, *skipped, *uncovered) +} + +func (c *CodeclimateConfig) severity(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := enums.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := enums.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + c.Failure = *failure + c.Skipped = *skipped + c.Uncovered = *uncovered + return c +} + +func (c *CodeclimateConfig) ToArray() map[string]interface{} { + return map[string]interface{}{ + "severity": map[string]interface{}{ + "failure": string(c.Failure), + "skipped": string(c.Skipped), + "uncovered": string(c.Uncovered), + }, + } +} + +func (c *CodeclimateConfig) GetName() formatters.FormatterType { + return formatters.FormatterTypeCodeclimateConfig +} diff --git a/pkg/config_contract/collector/composer_config.go b/pkg/configs/composer_config.go similarity index 73% rename from pkg/config_contract/collector/composer_config.go rename to pkg/configs/composer_config.go index 70bdb32..8f69d40 100644 --- a/pkg/config_contract/collector/composer_config.go +++ b/pkg/configs/composer_config.go @@ -1,12 +1,10 @@ -package collector +package configs -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/collectors" type ComposerConfig struct { - *config_contract2.CollectorConfig - collectorType config_contract2.CollectorType + *collectors.CollectorConfig + collectorType collectors.CollectorType packages []string composerPath string composerLockPath string @@ -25,8 +23,8 @@ func NewComposerConfig(packages []string, composerPath *string, composerLockPath } return &ComposerConfig{ - CollectorConfig: &config_contract2.CollectorConfig{}, - collectorType: config_contract2.TypeComposer, + CollectorConfig: &collectors.CollectorConfig{}, + collectorType: collectors.CollectorTypeTypeComposer, packages: packages, composerPath: *composerPath, composerLockPath: *composerLockPath, diff --git a/pkg/config/config.go b/pkg/configs/config.go similarity index 50% rename from pkg/config/config.go rename to pkg/configs/config.go index b5f2ec2..e488386 100644 --- a/pkg/config/config.go +++ b/pkg/configs/config.go @@ -1,8 +1,12 @@ -package config +package configs + +import ( + "github.com/KoNekoD/go-deptrac/pkg/hooks" +) type config struct { ConfigFileHook - TemplateFileHook + hooks.TemplateFileHook } var Instance *config @@ -10,6 +14,6 @@ var Instance *config func init() { Instance = &config{ ConfigFileHook: NewConfigFileHook(), - TemplateFileHook: NewTemplateFileHook(), + TemplateFileHook: hooks.NewTemplateFileHook(), } } diff --git a/pkg/config/config_file_hook.go b/pkg/configs/config_file_hook.go similarity index 85% rename from pkg/config/config_file_hook.go rename to pkg/configs/config_file_hook.go index d4f13a6..17eb292 100644 --- a/pkg/config/config_file_hook.go +++ b/pkg/configs/config_file_hook.go @@ -1,4 +1,4 @@ -package config +package configs import "flag" @@ -11,7 +11,7 @@ func NewConfigFileHook() ConfigFileHook { return &configFileHook{} } -const ArgNameConfigFileHook = "config_contract-file_supportive" +const ArgNameConfigFileHook = "config" const DefaultConfigFileHook = "deptrac.yaml" const UsageConfigFileHook = "config_contract file_supportive path" diff --git a/pkg/output_formatter_supportive/configuration/configuration_codeclimate.go b/pkg/configs/configuration_codeclimate.go similarity index 82% rename from pkg/output_formatter_supportive/configuration/configuration_codeclimate.go rename to pkg/configs/configuration_codeclimate.go index 24e238f..7a850b3 100644 --- a/pkg/output_formatter_supportive/configuration/configuration_codeclimate.go +++ b/pkg/configs/configuration_codeclimate.go @@ -1,11 +1,11 @@ -package configuration +package configs type SeverityType string const ( - Failure SeverityType = "failure" - Skipped SeverityType = "skipped" - Uncovered SeverityType = "uncovered" + SeverityTypeFailure SeverityType = "failure" + SeverityTypeSkipped SeverityType = "skipped" + SeverityTypeUncovered SeverityType = "uncovered" ) type ConfigurationCodeclimate struct { diff --git a/pkg/output_formatter_supportive/configuration/configuration_graph_viz.go b/pkg/configs/configuration_graph_viz.go similarity index 96% rename from pkg/output_formatter_supportive/configuration/configuration_graph_viz.go rename to pkg/configs/configuration_graph_viz.go index 310ee66..fe17d94 100644 --- a/pkg/output_formatter_supportive/configuration/configuration_graph_viz.go +++ b/pkg/configs/configuration_graph_viz.go @@ -1,4 +1,4 @@ -package configuration +package configs type ConfigurationGraphViz struct { HiddenLayers []string diff --git a/pkg/configs/deptrac_config.go b/pkg/configs/deptrac_config.go new file mode 100644 index 0000000..8fe5650 --- /dev/null +++ b/pkg/configs/deptrac_config.go @@ -0,0 +1,324 @@ +package configs + +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/pkg/errors" +) + +type DeptracConfig struct { + Paths []string + Analyser *AnalyserConfig + Formatters map[formatters.FormatterType]formatters.FormatterConfigInterface + Layers []*layers.Layer + Rulesets map[string]*rules.Ruleset + IgnoreUncoveredInternalStructs bool + SkipViolations map[string][]string + ExcludeFiles []string + CacheFile *string +} + +func NewDeptracConfig(parsed map[string]interface{}) (*DeptracConfig, error) { + deptracConfig := &DeptracConfig{} + if parsedDeptrac, ok := parsed["deptrac"]; ok { + if err := deptracConfig.SetupDeptracData(parsedDeptrac); err != nil { + return nil, errors.WithStack(err) + } + } + + return deptracConfig, nil +} + +func (c *DeptracConfig) ToArray() map[string]interface{} { + config := make(map[string]interface{}) + + if len(c.Paths) > 0 { + config["paths"] = c.Paths + } + if c.Analyser != nil { + config["analyser_contract"] = c.Analyser.ToArray() + } + if len(c.Formatters) > 0 { + formattersList := make([]map[string]interface{}, len(c.Formatters)) + i := 0 + for _, formatter := range c.Formatters { + formattersList[i] = formatter.ToArray() + i++ + } + config["formatters"] = formattersList + } + if len(c.ExcludeFiles) > 0 { + config["exclude_files"] = c.ExcludeFiles + } + if len(c.Layers) > 0 { + layersList := make([]map[string]interface{}, len(c.Layers)) + i := 0 + for _, layer := range c.Layers { + layersList[i] = layer.ToArray() + i++ + } + config["layers"] = layersList + } + if len(c.Rulesets) > 0 { + rulesets := make([]map[string]interface{}, len(c.Rulesets)) + i := 0 + for _, ruleset := range c.Rulesets { + rulesets[i] = ruleset.ToArray() + i++ + } + config["ruleset"] = rulesets + } + if len(c.SkipViolations) > 0 { + config["skip_violations"] = c.SkipViolations + } + config["ignore_uncovered_internal_structs"] = c.IgnoreUncoveredInternalStructs + config["cache_file"] = c.CacheFile + return config +} + +func (c *DeptracConfig) SetupDeptracData(parsedDeptrac interface{}) error { + if deptracMapData, ok := parsedDeptrac.(map[string]interface{}); ok { + if err := c.SetupDeptracMapData(deptracMapData); err != nil { + return errors.WithStack(err) + } + } + + return nil +} + +func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { + if layersList, ok := data["layers"]; ok { + if err := c.SetupLayersData(layersList); err != nil { + return errors.WithStack(err) + } + } + layersList := c.Layers + + formattersList := make(map[formatters.FormatterType]formatters.FormatterConfigInterface) + if parsedDeptracFormatters, ok := data["formatters"]; ok { + for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { + formatterRaw := formatterRawRaw.(map[string]interface{}) + switch formatterKey { + case string(formatters.FormatterTypeCodeclimateConfig): + formattersList[formatters.FormatterTypeCodeclimateConfig] = CreateCodeclimateConfig( + formatterRaw["failure"].(*enums.CodeclimateLevelEnum), + formatterRaw["skipped"].(*enums.CodeclimateLevelEnum), + formatterRaw["uncovered"].(*enums.CodeclimateLevelEnum), + ) + case string(formatters.FormatterTypeGraphvizConfig): + hiddenLayers := make([]*layers.Layer, 0) + + for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { + for _, layer := range layersList { + if layer.Name == hiddenLayer { + hiddenLayers = append(hiddenLayers, layer) + break + } + } + } + + formatterGraphvizConfig := CreateGraphvizConfig(). + SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). + SetHiddenLayers(hiddenLayers...) + + formattersList[formatters.FormatterTypeGraphvizConfig] = formatterGraphvizConfig + + for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { + groupLayer := make([]*layers.Layer, 0) + + for _, layerName := range groupRaw { + for _, layer := range layersList { + if layer.Name == layerName { + groupLayer = append(groupLayer, layer) + break + } + } + } + + formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) + } + case string(formatters.FormatterTypeMermaidJsConfig): + formatterMermaidJsConfig := CreateMermaidJsConfig(). + SetDirection(formatterRaw["direction"].(string)) + + formattersList[formatters.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig + + for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { + groupLayer := make([]*layers.Layer, 0) + + for _, layerName := range groupRaw { + for _, layer := range layersList { + if layer.Name == layerName { + groupLayer = append(groupLayer, layer) + break + } + } + } + + formatterMermaidJsConfig.SetGroups(groupLayerName, groupLayer...) + } + } + } + } + + rulesets := make(map[string]*rules.Ruleset) + + if rulesetsData, ok := data["ruleset"]; ok { + for rulesetLayerName, rulesetLayersNames := range rulesetsData.(map[string]interface{}) { + var rulesetOwningLayer *layers.Layer + + for _, layer := range layersList { + if layer.Name == rulesetLayerName { + rulesetOwningLayer = layer + break + } + } + + rulesetLayers := make([]*layers.Layer, 0) + + if rulesetLayersNames != nil { // If not ~ + for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { + layerName := layerNameRaw.(string) + for _, layer := range layersList { + if layer.Name == layerName { + rulesetLayers = append(rulesetLayers, layer) + break + } + } + } + } + + ruleset := rules.NewRuleset(rulesetOwningLayer, rulesetLayers) + + rulesets[rulesetLayerName] = ruleset + } + } + + analyzerTypesDefault := []emitters.EmitterType{emitters.EmitterTypeClassToken, emitters.EmitterTypeFunctionToken} + analyzerTypes := make([]emitters.EmitterType, 0) + internalTag := "@internal" + if parsedDeptracAnalyzer, ok := data["analyzer"]; ok { + analyzerRaw := parsedDeptracAnalyzer.(map[string]interface{}) + for _, typeRaw := range analyzerRaw["types"].([]interface{}) { + analyzerType, err := emitters.NewEmitterTypeFromString(typeRaw.(string)) + if err != nil { + return errors.WithStack(err) + } + + analyzerTypes = append(analyzerTypes, analyzerType) + } + internalTag = analyzerRaw["internal_tag"].(string) + } else { + analyzerTypes = analyzerTypesDefault + } + + analyser := Create(analyzerTypes, &internalTag) + + paths := make([]string, 0) + if dataPaths, ok := data["paths"]; ok { + for _, path := range dataPaths.([]interface{}) { + paths = append(paths, path.(string)) + } + } + + ignoreUncoveredInternalStructs := true + if v, ok := data["ignore_uncovered_internal_structs"]; ok { + ignoreUncoveredInternalStructs = v.(bool) + } + + skipViolations := make(map[string][]string) + if v, ok := data["skip_violations"]; ok { + skipViolations = v.(map[string][]string) + } + + excludeFiles := make([]string, 0) + if v, ok := data["exclude_files"]; ok { + excludeFiles = v.([]string) + } + + var cacheFile *string + if v, ok := data["cache_file"]; ok { + vStr := v.(string) + cacheFile = &vStr + } + + c.Paths = paths + c.Analyser = analyser + c.Formatters = formattersList + c.Rulesets = rulesets + c.IgnoreUncoveredInternalStructs = ignoreUncoveredInternalStructs + c.SkipViolations = skipViolations + c.ExcludeFiles = excludeFiles + c.CacheFile = cacheFile + + return nil +} + +func (c *DeptracConfig) SetupLayersData(layers interface{}) error { + if layersList, ok := layers.([]interface{}); ok { + if err := c.SetupLayersListData(layersList); err != nil { + return errors.WithStack(err) + } + } + + return nil +} + +func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { + layersList := make([]*layers.Layer, 0) + + for _, layerRawRaw := range list { + layerRaw := layerRawRaw.(map[string]interface{}) + collectorConfigs := make([]*collectors.CollectorConfig, 0) + + for _, collectorRawRaw := range layerRaw["collectors"].([]interface{}) { + collectorRaw := collectorRawRaw.(map[string]interface{}) + + if !utils.MapKeyExists(collectorRaw, "type") || !utils.MapKeyIsString(collectorRaw, "type") { + return apperrors.NewInvalidCollectorDefinitionMissingType() + } + + collectorType, err := collectors.NewCollectorTypeFromString(collectorRaw["type"].(string)) + if err != nil { + return errors.WithStack(err) + } + + privateValue, ok := collectorRaw["private"].(bool) + private := false + if ok { + private = privateValue + } + payload := collectorRaw + + // Delete private and type + delete(payload, "private") + delete(payload, "type") + + collectorConfig := collectors.NewCollectorConfig(collectorType, payload, private) + + collectorConfigs = append(collectorConfigs, collectorConfig) + } + + layerName, ok := layerRaw["name"] + if !ok { + return errors.New("invalid layer definition: missing name") + } + layerNameStr, ok := layerName.(string) + if !ok { + return errors.New("invalid layer definition: name must be a string") + } + + layer := layers.NewLayer(layerNameStr, collectorConfigs) + + layersList = append(layersList, layer) + } + c.Layers = layersList + + return nil +} diff --git a/pkg/configs/directory_config.go b/pkg/configs/directory_config.go new file mode 100644 index 0000000..c777286 --- /dev/null +++ b/pkg/configs/directory_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type DirectoryConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewDirectoryConfig(config string) *DirectoryConfig { + return &DirectoryConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeDirectory, + } +} diff --git a/pkg/configs/extends_config.go b/pkg/configs/extends_config.go new file mode 100644 index 0000000..942e4ec --- /dev/null +++ b/pkg/configs/extends_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type ExtendsConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewExtendsConfig(config string) *ExtendsConfig { + return &ExtendsConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeExtends, + } +} diff --git a/pkg/configs/function_name_config.go b/pkg/configs/function_name_config.go new file mode 100644 index 0000000..0c7b0c9 --- /dev/null +++ b/pkg/configs/function_name_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type FunctionNameConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewFunctionNameConfig(config string) *FunctionNameConfig { + return &FunctionNameConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeFunctionName, + } +} diff --git a/pkg/configs/glob_config.go b/pkg/configs/glob_config.go new file mode 100644 index 0000000..a16e1d7 --- /dev/null +++ b/pkg/configs/glob_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type GlobConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewGlobConfig(config string) *GlobConfig { + return &GlobConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeGlob, + } +} diff --git a/pkg/config_contract/formatter/graphviz_config.go b/pkg/configs/graphviz_config.go similarity index 75% rename from pkg/config_contract/formatter/graphviz_config.go rename to pkg/configs/graphviz_config.go index 7240de4..a81d86b 100644 --- a/pkg/config_contract/formatter/graphviz_config.go +++ b/pkg/configs/graphviz_config.go @@ -1,14 +1,15 @@ -package formatter +package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/layers" ) type GraphvizConfig struct { name string PointToGroups bool - HiddenLayers []*config_contract.Layer - Groups map[string][]*config_contract.Layer + HiddenLayers []*layers.Layer + Groups map[string][]*layers.Layer } func (g *GraphvizConfig) HiddenLayersNames() []string { @@ -25,8 +26,8 @@ func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", PointToGroups: false, - HiddenLayers: make([]*config_contract.Layer, 0), - Groups: make(map[string][]*config_contract.Layer), + HiddenLayers: make([]*layers.Layer, 0), + Groups: make(map[string][]*layers.Layer), } } @@ -43,12 +44,12 @@ func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { return g } -func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*config_contract.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*layers.Layer) *GraphvizConfig { g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*config_contract.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*layers.Layer) *GraphvizConfig { g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } @@ -81,6 +82,6 @@ func (g *GraphvizConfig) ToArray() map[string]interface{} { return output } -func (g *GraphvizConfig) GetName() FormatterType { - return FormatterTypeGraphvizConfig +func (g *GraphvizConfig) GetName() formatters.FormatterType { + return formatters.FormatterTypeGraphvizConfig } diff --git a/pkg/configs/implements_config.go b/pkg/configs/implements_config.go new file mode 100644 index 0000000..39c5531 --- /dev/null +++ b/pkg/configs/implements_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type ImplementsConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewImplementsConfig(config string) *ImplementsConfig { + return &ImplementsConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeImplements, + } +} diff --git a/pkg/configs/inherits_config.go b/pkg/configs/inherits_config.go new file mode 100644 index 0000000..482d4a0 --- /dev/null +++ b/pkg/configs/inherits_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type InheritsConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewInheritsConfig(config string) *InheritsConfig { + return &InheritsConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeInherits, + } +} diff --git a/pkg/configs/interface_config.go b/pkg/configs/interface_config.go new file mode 100644 index 0000000..a23ba84 --- /dev/null +++ b/pkg/configs/interface_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type InterfaceConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewInterfaceConfig(config string) *InterfaceConfig { + return &InterfaceConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeInterface, + } +} diff --git a/pkg/configs/layer_config.go b/pkg/configs/layer_config.go new file mode 100644 index 0000000..5953887 --- /dev/null +++ b/pkg/configs/layer_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type LayerConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewLayerConfig(config string) *LayerConfig { + return &LayerConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeLayer, + } +} diff --git a/pkg/config_contract/formatter/mermaid_js_config.go b/pkg/configs/mermaid_js_config.go similarity index 73% rename from pkg/config_contract/formatter/mermaid_js_config.go rename to pkg/configs/mermaid_js_config.go index d5569c3..5230e43 100644 --- a/pkg/config_contract/formatter/mermaid_js_config.go +++ b/pkg/configs/mermaid_js_config.go @@ -1,25 +1,26 @@ -package formatter +package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/layers" ) type MermaidJsConfig struct { name string Direction string - Groups map[string][]*config_contract.Layer + Groups map[string][]*layers.Layer } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", Direction: "TD", - Groups: make(map[string][]*config_contract.Layer), + Groups: make(map[string][]*layers.Layer), } } -func (m *MermaidJsConfig) GetName() FormatterType { - return FormatterTypeMermaidJsConfig +func (m *MermaidJsConfig) GetName() formatters.FormatterType { + return formatters.FormatterTypeMermaidJsConfig } func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { @@ -27,7 +28,7 @@ func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { return m } -func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*config_contract.Layer) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*layers.Layer) *MermaidJsConfig { for _, config := range layerConfigs { m.Groups[name] = append(m.Groups[name], config) } diff --git a/pkg/configs/method_config.go b/pkg/configs/method_config.go new file mode 100644 index 0000000..ab14291 --- /dev/null +++ b/pkg/configs/method_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type MethodConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewMethodConfig(config string) *MethodConfig { + return &MethodConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeMethod, + } +} diff --git a/pkg/configs/php_interal_config.go b/pkg/configs/php_interal_config.go new file mode 100644 index 0000000..c342326 --- /dev/null +++ b/pkg/configs/php_interal_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type PhpInteralConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewPhpInteralConfig(config string) *PhpInteralConfig { + return &PhpInteralConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypePhpInternal, + } +} diff --git a/pkg/config_contract/collector/super_global_config.go b/pkg/configs/super_global_config.go similarity index 64% rename from pkg/config_contract/collector/super_global_config.go rename to pkg/configs/super_global_config.go index 147668d..22f1aac 100644 --- a/pkg/config_contract/collector/super_global_config.go +++ b/pkg/configs/super_global_config.go @@ -1,19 +1,17 @@ -package collector +package configs -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/collectors" type SuperGlobalConfig struct { - *config_contract2.CollectorConfig - collectorType config_contract2.CollectorType + *collectors.CollectorConfig + collectorType collectors.CollectorType config []string } func NewSuperGlobalConfig(config []string) *SuperGlobalConfig { return &SuperGlobalConfig{ - CollectorConfig: &config.CollectorConfig{}, - collectorType: config.TypeSuperGlobal, + CollectorConfig: &collectors.CollectorConfig{}, + collectorType: collectors.CollectorTypeTypeSuperGlobal, config: config, } } diff --git a/pkg/config_contract/collector/tag_value_regex_config.go b/pkg/configs/tag_value_regex_config.go similarity index 70% rename from pkg/config_contract/collector/tag_value_regex_config.go rename to pkg/configs/tag_value_regex_config.go index 7be4ca0..5984cca 100644 --- a/pkg/config_contract/collector/tag_value_regex_config.go +++ b/pkg/configs/tag_value_regex_config.go @@ -1,20 +1,18 @@ -package collector +package configs -import ( - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/collectors" type TagValueRegexConfig struct { - *config_contract2.CollectorConfig - collectorType config_contract2.CollectorType + *collectors.CollectorConfig + collectorType collectors.CollectorType tag string value *string } func newTagValueRegexConfig(tag string, value *string) *TagValueRegexConfig { return &TagValueRegexConfig{ - CollectorConfig: &config_contract2.CollectorConfig{}, - collectorType: config_contract2.TypeTagValueRegex, + CollectorConfig: &collectors.CollectorConfig{}, + collectorType: collectors.CollectorTypeTypeTagValueRegex, tag: tag, value: value, } diff --git a/pkg/configs/trait_config.go b/pkg/configs/trait_config.go new file mode 100644 index 0000000..bffee7a --- /dev/null +++ b/pkg/configs/trait_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type TraitConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewTraitConfig(config string) *TraitConfig { + return &TraitConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeTrait, + } +} diff --git a/pkg/configs/uses_config.go b/pkg/configs/uses_config.go new file mode 100644 index 0000000..36edc6b --- /dev/null +++ b/pkg/configs/uses_config.go @@ -0,0 +1,15 @@ +package configs + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type UsesConfig struct { + *collectors.ConfigurableCollectorConfig + collectorType collectors.CollectorType +} + +func NewUsesConfig(config string) *UsesConfig { + return &UsesConfig{ + ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + collectorType: collectors.CollectorTypeTypeUses, + } +} diff --git a/pkg/console_supportive/application/application_version/application_version.go b/pkg/console_supportive/application/application_version/application_version.go deleted file mode 100644 index 40cdaab..0000000 --- a/pkg/console_supportive/application/application_version/application_version.go +++ /dev/null @@ -1,3 +0,0 @@ -package application_version - -const Version = "@git-version@" diff --git a/pkg/console_supportive/command/analyse_command.go b/pkg/console_supportive/command/analyse_command.go deleted file mode 100644 index a017122..0000000 --- a/pkg/console_supportive/command/analyse_command.go +++ /dev/null @@ -1,47 +0,0 @@ -package command - -import ( - subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" - symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" -) - -// AnalyseCommand - Analyses your project using the provided depfile -type AnalyseCommand struct { - runner *AnalyseRunner - dispatcher event_dispatcher_interface.EventDispatcherInterface - formatterProvider *output_formatter2.FormatterProvider - verboseBoolFlag bool - debugBoolFlag bool - consoleSubscriber *subscriber2.ConsoleSubscriber - progressSubscriber *subscriber2.ProgressSubscriber - analyseOptions *AnalyseOptions -} - -func NewAnalyseCommand(runner *AnalyseRunner, dispatcher event_dispatcher_interface.EventDispatcherInterface, formatterProvider *output_formatter2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscriber2.ConsoleSubscriber, progressSubscriber *subscriber2.ProgressSubscriber, analyseOptions *AnalyseOptions) *AnalyseCommand { - return &AnalyseCommand{ - runner: runner, - dispatcher: dispatcher, - formatterProvider: formatterProvider, - verboseBoolFlag: verboseBoolFlag, - debugBoolFlag: debugBoolFlag, - consoleSubscriber: consoleSubscriber, - progressSubscriber: progressSubscriber, - analyseOptions: analyseOptions, - } -} - -func (c *AnalyseCommand) Run() error { - symfonyOutput := symfony2.NewSymfonyOutput(symfony2.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) - - // Moved to services - //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) - - err := c.runner.Run(c.analyseOptions, symfonyOutput) - if err != nil { - return err - } - - return nil -} diff --git a/pkg/console_supportive/command/analyse_runner.go b/pkg/console_supportive/command/analyse_runner.go deleted file mode 100644 index d96cbb4..0000000 --- a/pkg/console_supportive/command/analyse_runner.go +++ /dev/null @@ -1,112 +0,0 @@ -package command - -import ( - "encoding/json" - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/analyser_core" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - output_formatter2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "github.com/hashicorp/go-multierror" - "strings" -) - -// AnalyseRunner - Should only be used by AnalyseCommand -type AnalyseRunner struct { - analyzer *analyser_core.DependencyLayersAnalyser - formatterProvider *output_formatter2.FormatterProvider -} - -func NewAnalyseRunner(analyzer *analyser_core.DependencyLayersAnalyser, formatterProvider *output_formatter2.FormatterProvider) *AnalyseRunner { - return &AnalyseRunner{ - analyzer: analyzer, - formatterProvider: formatterProvider, - } -} - -func (r *AnalyseRunner) Run(options *AnalyseOptions, output output_formatter_contract2.OutputInterface) error { - outputFormatterType, err := output_formatter_contract2.NewOutputFormatterTypeFromString(options.Formatter) - if err != nil { - return err - } - formatter, err := r.formatterProvider.Get(outputFormatterType) - if err != nil { - r.printFormatterNotFoundException(output, options.Formatter) - return NewCommandRunExceptionInvalidFormatter() - } - formatterInput := output_formatter_contract2.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) - r.printCollectViolations(output) - - analysisResult, errAnalyse := r.analyzer.Analyse() - if errAnalyse != nil { - r.printAnalysisException(output, multierror.Append(errAnalyse)) - return NewCommandRunExceptionAnalyserException(errAnalyse) - } - result := output_result.NewOutputResultFromAnalysisResult(analysisResult) - r.printFormattingStart(output) - errFinish := formatter.Finish(result, output, formatterInput) - if errFinish != nil { - r.printFormatterError(output, string(formatter.GetName()), errFinish) - } - if options.FailOnUncovered && result.HasUncovered() { - return NewCommandRunExceptionFinishedWithUncovered() - } - if result.HasViolations() { - return NewCommandRunExceptionFinishedWithViolations() - } - if result.HasErrors() { - return NewCommandRunExceptionFailedWithErrors() - } - - return nil -} - -func (r *AnalyseRunner) printCollectViolations(output output_formatter_contract2.OutputInterface) { - if output.IsVerbose() { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "collecting violations."}) - } -} - -func (r *AnalyseRunner) printFormattingStart(output output_formatter_contract2.OutputInterface) { - if output.IsVerbose() { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "formatting dependencies."}) - } -} - -func (r *AnalyseRunner) printFormatterError(output output_formatter_contract2.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) -} - -var JsonMultiErrFormatFunc = func(es []error) string { - errorsStrings := make([]string, len(es)) - for i, err := range es { - errorsStrings[i] = err.Error() - } - - marshalled, err := json.Marshal(errorsStrings) - - if err != nil { - return "(marshall json err) " + err.Error() - } - - return string(marshalled) -} - -func (r *AnalyseRunner) printAnalysisException(output output_formatter_contract2.OutputInterface, exception *multierror.Error) { - message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: message}) -} - -func (r *AnalyseRunner) printFormatterNotFoundException(output output_formatter_contract2.OutputInterface, formatterName string) { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) - - knownFormatters := make([]string, 0) - for _, formatterType := range r.formatterProvider.GetKnownFormatters() { - knownFormatters = append(knownFormatters, string(formatterType)) - } - - output.GetStyle().Error(output_formatter_contract2.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) -} diff --git a/pkg/console_supportive/env.go b/pkg/console_supportive/env.go deleted file mode 100644 index bf8dd7a..0000000 --- a/pkg/console_supportive/env.go +++ /dev/null @@ -1,13 +0,0 @@ -package console_supportive - -import "os" - -type Env struct{} - -func NewEnv() *Env { - return &Env{} -} - -func (e *Env) GetEnv(key string) string { - return os.Getenv(key) -} diff --git a/pkg/console_supportive/subscriber/console_subscriber.go b/pkg/console_supportive/subscriber/console_subscriber.go deleted file mode 100644 index 23d87fb..0000000 --- a/pkg/console_supportive/subscriber/console_subscriber.go +++ /dev/null @@ -1,90 +0,0 @@ -package subscriber - -import ( - "fmt" - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - dependency_contract2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" -) - -type ConsoleSubscriber struct { - output output_formatter_contract2.OutputInterface - stopwatch *time_stopwatch_supportive.Stopwatch -} - -func NewConsoleSubscriber(output output_formatter_contract2.OutputInterface, stopwatch *time_stopwatch_supportive.Stopwatch) *ConsoleSubscriber { - return &ConsoleSubscriber{ - output: output, - stopwatch: stopwatch, - } -} - -func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - switch event := rawEvent.(type) { - case *ast_contract2.PreCreateAstMapEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("ast_contract") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) - } - case *ast_contract2.PostCreateAstMapEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") - } - case *ast_contract2.AstFileAnalysedEvent: - if s.output.IsVerbose() { - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) - } - case *ast_contract2.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) - case *dependency_contract2.PreEmitEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("deps") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) - } - case *dependency_contract2.PostEmitEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") - } - case *dependency_contract2.PreFlattenEvent: - if s.output.IsVerbose() { - err := s.stopwatchStart("flatten") - if err != nil { - return err - } - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "start flatten dependencies"}) - } - case *dependency_contract2.PostFlattenEvent: - if s.output.IsVerbose() { - s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") - } - } - - return nil -} - -func (s *ConsoleSubscriber) stopwatchStart(event string) error { - err := s.stopwatch.Start(event) - if err != nil { - return err - } - - return nil -} - -func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { - period, err := s.stopwatch.Stop(event) - - if err != nil { - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: messageWithoutTime}) - return - } - - s.output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) -} diff --git a/pkg/console_supportive/subscriber/progress_subscriber.go b/pkg/console_supportive/subscriber/progress_subscriber.go deleted file mode 100644 index f0257a9..0000000 --- a/pkg/console_supportive/subscriber/progress_subscriber.go +++ /dev/null @@ -1,35 +0,0 @@ -package subscriber - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" -) - -type ProgressSubscriber struct { - output output_formatter_contract2.OutputInterface -} - -func NewProgressSubscriber(output output_formatter_contract2.OutputInterface) *ProgressSubscriber { - return &ProgressSubscriber{ - output: output, - } -} - -func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - switch event := rawEvent.(type) { - case *ast_contract2.PreCreateAstMapEvent: - s.output.GetStyle().ProgressStart(event.ExpectedFileCount) - case *ast_contract2.PostCreateAstMapEvent: - err := s.output.GetStyle().ProgressFinish() - if err != nil { - return err - } - case *ast_contract2.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(output_formatter_contract2.ProgressAdvanceDefault) - if err != nil { - return err - } - } - - return nil -} diff --git a/pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go b/pkg/dependencies/allow_dependency_handler.go similarity index 56% rename from pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go rename to pkg/dependencies/allow_dependency_handler.go index 3ccb3e2..4f781a9 100644 --- a/pkg/analyser_core/event_handler/process_event/allow_dependency_handler.go +++ b/pkg/dependencies/allow_dependency_handler.go @@ -1,8 +1,8 @@ -package process_event +package dependencies import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/rules" ) type AllowDependencyHandler struct{} @@ -12,11 +12,11 @@ func NewAllowDependencyHandler() *AllowDependencyHandler { } func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { - ruleset.AddRule(result_contract.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) + ruleset.AddRule(rules.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) stopPropagation() } diff --git a/pkg/dependencies/dependency.go b/pkg/dependencies/dependency.go new file mode 100644 index 0000000..53a7be9 --- /dev/null +++ b/pkg/dependencies/dependency.go @@ -0,0 +1,38 @@ +package dependencies + +import "github.com/KoNekoD/go-deptrac/pkg/tokens" + +type Dependency struct { + depender tokens.TokenInterface + dependent tokens.TokenInterface + context *DependencyContext +} + +func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *DependencyContext) *Dependency { + if dependent.ToString() == "" { + panic("1") + } + + return &Dependency{depender: depender, dependent: dependent, context: context} +} + +func (d *Dependency) Serialize() []map[string]interface{} { + return []map[string]interface{}{ + { + "name": d.dependent.ToString(), + "line": d.context.FileOccurrence.Line, + }, + } +} + +func (d *Dependency) GetDepender() tokens.TokenInterface { + return d.depender +} + +func (d *Dependency) GetDependent() tokens.TokenInterface { + return d.dependent +} + +func (d *Dependency) GetContext() *DependencyContext { + return d.context +} diff --git a/pkg/ast_contract/dependency_context.go b/pkg/dependencies/dependency_context.go similarity index 53% rename from pkg/ast_contract/dependency_context.go rename to pkg/dependencies/dependency_context.go index 62185c1..48de209 100644 --- a/pkg/ast_contract/dependency_context.go +++ b/pkg/dependencies/dependency_context.go @@ -1,11 +1,15 @@ -package ast_contract +package dependencies + +import ( + "github.com/KoNekoD/go-deptrac/pkg/violations" +) // DependencyContext - Context of the dependency_contract. Any additional info about where the dependency_contract occurred. type DependencyContext struct { - FileOccurrence *FileOccurrence + FileOccurrence *violations.FileOccurrence DependencyType DependencyType } -func NewDependencyContext(fileOccurrence *FileOccurrence, dependencyType DependencyType) *DependencyContext { +func NewDependencyContext(fileOccurrence *violations.FileOccurrence, dependencyType DependencyType) *DependencyContext { return &DependencyContext{FileOccurrence: fileOccurrence, DependencyType: dependencyType} } diff --git a/pkg/dependencies/dependency_interface.go b/pkg/dependencies/dependency_interface.go new file mode 100644 index 0000000..11319fd --- /dev/null +++ b/pkg/dependencies/dependency_interface.go @@ -0,0 +1,14 @@ +package dependencies + +import "github.com/KoNekoD/go-deptrac/pkg/tokens" + +// DependencyInterface - Represents a dependency_contract between 2 tokens (depender and dependent). +type DependencyInterface interface { + GetDepender() tokens.TokenInterface + + GetDependent() tokens.TokenInterface + + GetContext() *DependencyContext + + Serialize() []map[string]interface{} +} diff --git a/pkg/dependencies/dependency_layers_analyser.go b/pkg/dependencies/dependency_layers_analyser.go new file mode 100644 index 0000000..2a9c7e2 --- /dev/null +++ b/pkg/dependencies/dependency_layers_analyser.go @@ -0,0 +1,103 @@ +package dependencies + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type DependencyLayersAnalyser struct { + astMapExtractor *ast_map.AstMapExtractor + dependencyResolver *DependencyResolver + tokenResolver *tokens.TokenResolver + layerResolver layers.LayerResolverInterface + eventDispatcher events.EventDispatcherInterface +} + +func NewDependencyLayersAnalyser( + astMapExtractor *ast_map.AstMapExtractor, + dependencyResolver *DependencyResolver, + tokenResolver *tokens.TokenResolver, + layerResolver layers.LayerResolverInterface, + eventDispatcher events.EventDispatcherInterface) *DependencyLayersAnalyser { + return &DependencyLayersAnalyser{ + astMapExtractor: astMapExtractor, + dependencyResolver: dependencyResolver, + tokenResolver: tokenResolver, + layerResolver: layerResolver, + eventDispatcher: eventDispatcher, + } +} + +func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { + astMap, err := a.astMapExtractor.Extract() + if err != nil { + return nil, err + } + dependencies, err := a.dependencyResolver.Resolve(astMap) + if err != nil { + return nil, err + } + analysisResult := rules.NewAnalysisResult() + warnings := make(map[string]*tokens.Warning) + for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { + depender := dependency.GetDepender() + dependerRef := a.tokenResolver.Resolve(depender, astMap) + + if v, ok55 := dependerRef.(*references.FunctionReference); ok55 { + t := v.GetToken() + if tt, ok66 := t.(*tokens.FunctionToken); ok66 { + if tt.FunctionName == "ParseFile" { + fmt.Println() + } + } + } + + dependerLayersMap, err := a.layerResolver.GetLayersForReference(dependerRef) + if err != nil { + return nil, err + } + dependerLayers := make([]string, 0) + for s := range dependerLayersMap { + dependerLayers = append(dependerLayers, s) + } + + _, ok := warnings[depender.ToString()] + if !ok && len(dependerLayers) > 1 { + warnings[depender.ToString()] = tokens.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) + } + + dependent := dependency.GetDependent() + dependentRef := a.tokenResolver.Resolve(dependent, astMap) + + dependentLayers, err := a.layerResolver.GetLayersForReference(dependentRef) + if err != nil { + return nil, err + } + + for _, dependerLayer := range dependerLayers { + event := events.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) + err := a.eventDispatcher.DispatchEvent(event) + if err != nil { + return nil, err + } + analysisResult = event.GetResult() + } + } + + for _, warning := range warnings { + analysisResult.AddWarning(warning) + } + + event := events.NewPostProcessEvent(analysisResult) + errDispatch := a.eventDispatcher.DispatchEvent(event) + if errDispatch != nil { + return nil, errDispatch + } + + return event.GetResult(), nil +} diff --git a/pkg/dependency_core/dependency_list.go b/pkg/dependencies/dependency_list.go similarity index 65% rename from pkg/dependency_core/dependency_list.go rename to pkg/dependencies/dependency_list.go index 7e19145..db98f2f 100644 --- a/pkg/dependency_core/dependency_list.go +++ b/pkg/dependencies/dependency_list.go @@ -1,25 +1,21 @@ -package dependency_core - -import ( - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) +package dependencies type DependencyList struct { - dependencies map[string][]Dependency2.DependencyInterface + dependencies map[string][]DependencyInterface inheritDependencies map[string][]*InheritDependency } func NewDependencyList() *DependencyList { return &DependencyList{ - dependencies: map[string][]Dependency2.DependencyInterface{}, + dependencies: map[string][]DependencyInterface{}, inheritDependencies: map[string][]*InheritDependency{}, } } -func (l *DependencyList) AddDependency(dep Dependency2.DependencyInterface) { +func (l *DependencyList) AddDependency(dep DependencyInterface) { tokenName := dep.GetDepender().ToString() if l.dependencies[tokenName] == nil { - l.dependencies[tokenName] = make([]Dependency2.DependencyInterface, 0) + l.dependencies[tokenName] = make([]DependencyInterface, 0) } l.dependencies[tokenName] = append(l.dependencies[tokenName], dep) } @@ -29,12 +25,12 @@ func (l *DependencyList) AddInheritDependency(dep *InheritDependency) { l.inheritDependencies[tokenName] = append(l.inheritDependencies[dep.GetDepender().ToString()], dep) } -func (l *DependencyList) GetDependenciesByClass(classLikeName string) []Dependency2.DependencyInterface { +func (l *DependencyList) GetDependenciesByClass(classLikeName string) []DependencyInterface { return l.dependencies[classLikeName] } -func (l *DependencyList) GetDependenciesAndInheritDependencies() []Dependency2.DependencyInterface { - buffer := make([]Dependency2.DependencyInterface, 0) +func (l *DependencyList) GetDependenciesAndInheritDependencies() []DependencyInterface { + buffer := make([]DependencyInterface, 0) for _, v := range l.dependencies { buffer = append(buffer, v...) } diff --git a/pkg/dependencies/dependency_resolver.go b/pkg/dependencies/dependency_resolver.go new file mode 100644 index 0000000..ee5e833 --- /dev/null +++ b/pkg/dependencies/dependency_resolver.go @@ -0,0 +1,68 @@ +package dependencies + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "reflect" +) + +type DependencyResolver struct { + config *configs.AnalyserConfig + inheritanceFlattener *flatteners.InheritanceFlattener + emitterLocator map[emitters.EmitterType]emitters.DependencyEmitterInterface + eventDispatcher events.EventDispatcherInterface +} + +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[emitters.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher events.EventDispatcherInterface) *DependencyResolver { + return &DependencyResolver{ + config: typesConfig, + emitterLocator: emitterLocator, + inheritanceFlattener: inheritanceFlattener, + eventDispatcher: eventDispatcher, + } +} + +func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*DependencyList, error) { + result := NewDependencyList() + + for _, typeConfig := range r.config.Types { + dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] + if !ok { + return nil, apperrors.NewInvalidEmitterConfigurationExceptionCouldNotLocate(string(typeConfig)) + } + + if reflect.TypeOf(dependencyEmitterInterface).Kind() != reflect.Ptr { + return nil, apperrors.NewInvalidEmitterConfigurationExceptionIsNotEmitter(string(typeConfig), dependencyEmitterInterface) + } + + err := r.eventDispatcher.DispatchEvent(emitters.NewPreEmitEvent(dependencyEmitterInterface.GetName())) + if err != nil { + return nil, err + } + + dependencyEmitterInterface.ApplyDependencies(*astMap, result) + + errDispatchPostEmit := r.eventDispatcher.DispatchEvent(emitters.NewPostEmitEvent()) + if errDispatchPostEmit != nil { + return nil, errDispatchPostEmit + } + } + + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(flatteners.NewPreFlattenEvent()) + if errDispatchPreFlatten != nil { + return nil, errDispatchPreFlatten + } + + r.inheritanceFlattener.FlattenDependencies(*astMap, result) + + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(flatteners.NewPostFlattenEvent()) + if errDispatchPostFlatten != nil { + return nil, errDispatchPostFlatten + } + + return result, nil +} diff --git a/pkg/ast_contract/dependency_type.go b/pkg/dependencies/dependency_type.go similarity index 98% rename from pkg/ast_contract/dependency_type.go rename to pkg/dependencies/dependency_type.go index 8c6e4d3..3d80112 100644 --- a/pkg/ast_contract/dependency_type.go +++ b/pkg/dependencies/dependency_type.go @@ -1,4 +1,4 @@ -package ast_contract +package dependencies // DependencyType - Specifies the type of AST dependency_contract. You can use this information to enrich the displayed output to the user in your output formatter. type DependencyType string diff --git a/pkg/dependency_core/inherit_dependency.go b/pkg/dependencies/inherit_dependency.go similarity index 52% rename from pkg/dependency_core/inherit_dependency.go rename to pkg/dependencies/inherit_dependency.go index 1d69539..f520f9e 100644 --- a/pkg/dependency_core/inherit_dependency.go +++ b/pkg/dependencies/inherit_dependency.go @@ -1,19 +1,18 @@ -package dependency_core +package dependencies import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - Dependency2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type InheritDependency struct { - depender *ast_map2.ClassLikeToken - dependent ast_contract2.TokenInterface - originalDependency Dependency2.DependencyInterface - inheritPath *ast_map2.AstInherit + depender *tokens.ClassLikeToken + dependent tokens.TokenInterface + originalDependency DependencyInterface + inheritPath *ast_map.AstInherit } -func NewInheritDependency(depender *ast_map2.ClassLikeToken, dependent ast_contract2.TokenInterface, originalDependency Dependency2.DependencyInterface, inheritPath *ast_map2.AstInherit) *InheritDependency { +func NewInheritDependency(depender *tokens.ClassLikeToken, dependent tokens.TokenInterface, originalDependency DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { return &InheritDependency{depender: depender, dependent: dependent, originalDependency: originalDependency, inheritPath: inheritPath} } @@ -33,14 +32,14 @@ func (i *InheritDependency) Serialize() []map[string]interface{} { return buffer } -func (i *InheritDependency) GetDepender() ast_contract2.TokenInterface { +func (i *InheritDependency) GetDepender() tokens.TokenInterface { return i.depender } -func (i *InheritDependency) GetDependent() ast_contract2.TokenInterface { +func (i *InheritDependency) GetDependent() tokens.TokenInterface { return i.dependent } -func (i *InheritDependency) GetContext() *ast_contract2.DependencyContext { +func (i *InheritDependency) GetContext() *DependencyContext { return i.originalDependency.GetContext() } diff --git a/pkg/analyser_core/layer_dependencies_analyser.go b/pkg/dependencies/layer_dependencies_analyser.go similarity index 56% rename from pkg/analyser_core/layer_dependencies_analyser.go rename to pkg/dependencies/layer_dependencies_analyser.go index 09a9633..69ce4b2 100644 --- a/pkg/analyser_core/layer_dependencies_analyser.go +++ b/pkg/dependencies/layer_dependencies_analyser.go @@ -1,25 +1,24 @@ -package analyser_core +package dependencies import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type LayerDependenciesAnalyser struct { - astMapExtractor *ast_core.AstMapExtractor - tokenResolver *dependency_core.TokenResolver - dependencyResolver *dependency_resolver.DependencyResolver - layerResolver layer_resolver_interface.LayerResolverInterface + astMapExtractor *ast_map.AstMapExtractor + tokenResolver *tokens.TokenResolver + dependencyResolver *DependencyResolver + layerResolver layers.LayerResolverInterface } func NewLayerDependenciesAnalyser( - astMapExtractor *ast_core.AstMapExtractor, - tokenResolver *dependency_core.TokenResolver, - dependencyResolver *dependency_resolver.DependencyResolver, - layerResolver layer_resolver_interface.LayerResolverInterface, + astMapExtractor *ast_map.AstMapExtractor, + tokenResolver *tokens.TokenResolver, + dependencyResolver *DependencyResolver, + layerResolver layers.LayerResolverInterface, ) *LayerDependenciesAnalyser { return &LayerDependenciesAnalyser{ astMapExtractor: astMapExtractor, @@ -29,8 +28,8 @@ func NewLayerDependenciesAnalyser( } } -func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*result_contract.Uncovered, error) { - uncoveredResult := make(map[string][]*result_contract.Uncovered) +func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*rules.Uncovered, error) { + uncoveredResult := make(map[string][]*rules.Uncovered) astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -54,9 +53,9 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s continue } if _, ok := uncoveredResult[dependentLayerName]; !ok { - uncoveredResult[dependentLayerName] = make([]*result_contract.Uncovered, 0) + uncoveredResult[dependentLayerName] = make([]*rules.Uncovered, 0) } - uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], result_contract.NewUncovered(dependency, dependentLayerName)) + uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], rules.NewUncovered(dependency, dependentLayerName)) } } } diff --git a/pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go b/pkg/dependencies/uncovered_dependent_handler.go similarity index 68% rename from pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go rename to pkg/dependencies/uncovered_dependent_handler.go index 158c936..5672bb0 100644 --- a/pkg/analyser_core/event_handler/process_event/uncovered_dependent_handler.go +++ b/pkg/dependencies/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ -package process_event +package dependencies import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type UncoveredDependentHandler struct { @@ -15,7 +15,7 @@ func NewUncoveredDependentHandler(ignoreUncoveredInternalClasses bool) *Uncovere } func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) dependent := event.Dependency.GetDependent() @@ -25,9 +25,9 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, return nil } - if dependentClassLike, ok := dependent.(*ast_map.ClassLikeToken); ok { + if dependentClassLike, ok := dependent.(*tokens.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { - ruleset.AddRule(result_contract.NewUncovered(event.Dependency, event.DependerLayer)) + ruleset.AddRule(rules.NewUncovered(event.Dependency, event.DependerLayer)) } } @@ -36,7 +36,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, return nil } -func (h *UncoveredDependentHandler) isIgnoreUncoveredInternalClasses(token *ast_map.ClassLikeToken) bool { +func (h *UncoveredDependentHandler) isIgnoreUncoveredInternalClasses(token *tokens.ClassLikeToken) bool { if !h.ignoreUncoveredInternalClasses { return false } diff --git a/pkg/dependency_contract/dependency_interface.go b/pkg/dependency_contract/dependency_interface.go deleted file mode 100644 index 26b0a58..0000000 --- a/pkg/dependency_contract/dependency_interface.go +++ /dev/null @@ -1,16 +0,0 @@ -package dependency_contract - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -// DependencyInterface - Represents a dependency_contract between 2 tokens (depender and dependent). -type DependencyInterface interface { - GetDepender() ast_contract2.TokenInterface - - GetDependent() ast_contract2.TokenInterface - - GetContext() *ast_contract2.DependencyContext - - Serialize() []map[string]interface{} -} diff --git a/pkg/dependency_core/dependency.go b/pkg/dependency_core/dependency.go deleted file mode 100644 index 15ff916..0000000 --- a/pkg/dependency_core/dependency.go +++ /dev/null @@ -1,40 +0,0 @@ -package dependency_core - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type Dependency struct { - depender ast_contract2.TokenInterface - dependent ast_contract2.TokenInterface - context *ast_contract2.DependencyContext -} - -func NewDependency(depender ast_contract2.TokenInterface, dependent ast_contract2.TokenInterface, context *ast_contract2.DependencyContext) *Dependency { - if dependent.ToString() == "" { - panic("1") - } - - return &Dependency{depender: depender, dependent: dependent, context: context} -} - -func (d *Dependency) Serialize() []map[string]interface{} { - return []map[string]interface{}{ - { - "name": d.dependent.ToString(), - "line": d.context.FileOccurrence.Line, - }, - } -} - -func (d *Dependency) GetDepender() ast_contract2.TokenInterface { - return d.depender -} - -func (d *Dependency) GetDependent() ast_contract2.TokenInterface { - return d.dependent -} - -func (d *Dependency) GetContext() *ast_contract2.DependencyContext { - return d.context -} diff --git a/pkg/dependency_core/dependency_resolver/dependency_resolver.go b/pkg/dependency_core/dependency_resolver/dependency_resolver.go deleted file mode 100644 index 706b06a..0000000 --- a/pkg/dependency_core/dependency_resolver/dependency_resolver.go +++ /dev/null @@ -1,69 +0,0 @@ -package dependency_resolver - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/emitter" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" - "reflect" -) - -type DependencyResolver struct { - config *config_contract2.AnalyserConfig - inheritanceFlattener *dependency_core2.InheritanceFlattener - emitterLocator map[config_contract2.EmitterType]emitter.DependencyEmitterInterface - eventDispatcher event_dispatcher_interface.EventDispatcherInterface -} - -func NewDependencyResolver(typesConfig *config_contract2.AnalyserConfig, emitterLocator map[config_contract2.EmitterType]emitter.DependencyEmitterInterface, inheritanceFlattener *dependency_core2.InheritanceFlattener, eventDispatcher event_dispatcher_interface.EventDispatcherInterface) *DependencyResolver { - return &DependencyResolver{ - config: typesConfig, - emitterLocator: emitterLocator, - inheritanceFlattener: inheritanceFlattener, - eventDispatcher: eventDispatcher, - } -} - -func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependency_core2.DependencyList, error) { - result := dependency_core2.NewDependencyList() - - for _, typeConfig := range r.config.Types { - - dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] - if !ok { - return nil, dependency_core2.NewInvalidEmitterConfigurationExceptionCouldNotLocate(typeConfig) - } - - if reflect.TypeOf(dependencyEmitterInterface).Kind() != reflect.Ptr { - return nil, dependency_core2.NewInvalidEmitterConfigurationExceptionIsNotEmitter(typeConfig, dependencyEmitterInterface) - } - - err := r.eventDispatcher.DispatchEvent(dependency_contract.NewPreEmitEvent(dependencyEmitterInterface.GetName())) - if err != nil { - return nil, err - } - - dependencyEmitterInterface.ApplyDependencies(*astMap, result) - - errDispatchPostEmit := r.eventDispatcher.DispatchEvent(dependency_contract.NewPostEmitEvent()) - if errDispatchPostEmit != nil { - return nil, errDispatchPostEmit - } - } - - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(dependency_contract.NewPreFlattenEvent()) - if errDispatchPreFlatten != nil { - return nil, errDispatchPreFlatten - } - - r.inheritanceFlattener.FlattenDependencies(*astMap, result) - - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(dependency_contract.NewPostFlattenEvent()) - if errDispatchPostFlatten != nil { - return nil, errDispatchPostFlatten - } - - return result, nil -} diff --git a/pkg/dependency_core/emitter/class_dependency_emitter.go b/pkg/dependency_core/emitter/class_dependency_emitter.go deleted file mode 100644 index 2955fe0..0000000 --- a/pkg/dependency_core/emitter/class_dependency_emitter.go +++ /dev/null @@ -1,39 +0,0 @@ -package emitter - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" -) - -type ClassDependencyEmitter struct{} - -func NewClassDependencyEmitter() *ClassDependencyEmitter { - return &ClassDependencyEmitter{} -} - -func (c *ClassDependencyEmitter) GetName() string { - return "ClassDependencyEmitter" -} - -func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { - for _, classReference := range astMap.GetClassLikeReferences() { - classLikeName := classReference.GetToken().(*ast_map.ClassLikeToken) - - for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType == ast_contract2.DependencyTypeSuperGlobalVariable { - continue - } - - if dependencyToken.Context.DependencyType == ast_contract2.DependencyTypeUnresolvedFunctionCall { - continue - } - - dependencyList.AddDependency(dependency_core2.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) - } - - for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependency_core2.NewDependency(classLikeName, inherit.ClassLikeName, ast_contract2.NewDependencyContext(inherit.FileOccurrence, ast_contract2.DependencyTypeInherit))) - } - } -} diff --git a/pkg/dependency_core/emitter/dependency_emitter_interface.go b/pkg/dependency_core/emitter/dependency_emitter_interface.go deleted file mode 100644 index 4c0fc90..0000000 --- a/pkg/dependency_core/emitter/dependency_emitter_interface.go +++ /dev/null @@ -1,11 +0,0 @@ -package emitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" -) - -type DependencyEmitterInterface interface { - GetName() string - ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core.DependencyList) -} diff --git a/pkg/dependency_core/emitter/function_call_dependency_emitter.go b/pkg/dependency_core/emitter/function_call_dependency_emitter.go deleted file mode 100644 index c231fd0..0000000 --- a/pkg/dependency_core/emitter/function_call_dependency_emitter.go +++ /dev/null @@ -1,54 +0,0 @@ -package emitter - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract/token_reference_with_dependencies_interface" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" -) - -type FunctionCallDependencyEmitter struct{} - -func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { - return &FunctionCallDependencyEmitter{} -} - -func (f *FunctionCallDependencyEmitter) GetName() string { - return "FunctionCallDependencyEmitter" -} -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { - references := make([]token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, 0) - for _, reference := range astMap.GetClassLikeReferences() { - references = append(references, reference) - } - f.createDependenciesForReferences(references, astMap, dependencyList) - - references = make([]token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, 0) - for _, reference := range astMap.GetFunctionReferences() { - references = append(references, reference) - } - f.createDependenciesForReferences(references, astMap, dependencyList) - - references = make([]token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, 0) - for _, reference := range astMap.GetFileReferences() { - references = append(references, reference) - } - f.createDependenciesForReferences(references, astMap, dependencyList) -} - -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface, astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { - for _, referenceInterface := range references { - reference := referenceInterface.(token_reference_with_dependencies_interface.TokenReferenceWithDependenciesInterface) - for _, dependencyToken := range reference.GetDependencies() { - if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeUnresolvedFunctionCall { - continue - } - token := dependencyToken.Token - dependencyList.AddDependency(dependency_core2.NewDependency(reference.GetToken(), token, dependencyToken.Context)) - functionToken := token.(*ast_map2.FunctionToken) - if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { - dependencyList.AddDependency(dependency_core2.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) - } - } - } -} diff --git a/pkg/dependency_core/token_resolver.go b/pkg/dependency_core/token_resolver.go deleted file mode 100644 index 2322beb..0000000 --- a/pkg/dependency_core/token_resolver.go +++ /dev/null @@ -1,27 +0,0 @@ -package dependency_core - -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" -) - -type TokenResolver struct{} - -func NewTokenResolver() *TokenResolver { - return &TokenResolver{} -} - -func (r *TokenResolver) Resolve(token ast_contract2.TokenInterface, astMap *ast_map.AstMap) ast_contract2.TokenReferenceInterface { - switch v := token.(type) { - case *ast_map.ClassLikeToken: - return astMap.GetClassReferenceForToken(v) - case *ast_map.FunctionToken: - return astMap.GetFunctionReferenceForToken(v) - case *ast_map.SuperGlobalToken: - return ast_map.NewVariableReference(v) - case *ast_map.FileToken: - return astMap.GetFileReferenceForToken(v) - default: - panic("Unrecognized TokenInterface") - } -} diff --git a/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go b/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go deleted file mode 100644 index 46eac00..0000000 --- a/pkg/dependency_injection_supportive/Exception/CannotLoadConfiguration/CannotLoadConfiguration.go +++ /dev/null @@ -1,27 +0,0 @@ -package CannotLoadConfiguration - -import "fmt" - -type CannotLoadConfiguration struct { - Message string -} - -func (e *CannotLoadConfiguration) Error() string { - return e.Message -} - -func newCannotLoadConfiguration(message string) *CannotLoadConfiguration { - return &CannotLoadConfiguration{Message: message} -} - -func NewCannotLoadConfigurationFromConfig(filename string, message string) *CannotLoadConfiguration { - return newCannotLoadConfiguration(fmt.Sprintf("Could not load %s. Reason: %s", filename, message)) -} - -func NewCannotLoadConfigurationFromServices(filename string, message string) *CannotLoadConfiguration { - return newCannotLoadConfiguration(fmt.Sprintf("Could not load %s. Reason: %s", filename, message)) -} - -func NewCannotLoadConfigurationFromCache(filename string, message string) *CannotLoadConfiguration { - return newCannotLoadConfiguration(fmt.Sprintf("Could not load %s. Reason: %s", filename, message)) -} diff --git a/pkg/dependency_injection_supportive/cache.go b/pkg/dependency_injection_supportive/cache.go deleted file mode 100644 index 2d7d3d6..0000000 --- a/pkg/dependency_injection_supportive/cache.go +++ /dev/null @@ -1,14 +0,0 @@ -package dependency_injection_supportive - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application/application_version" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" -) - -func Cache(builder *container_builder.ContainerBuilder) { - builder.AstFileReferenceFileCache = cache.NewAstFileReferenceFileCache(*builder.CacheFile, application_version.Version) - builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache - builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache - builder.CacheableFileSubscriber = cache.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) -} diff --git a/pkg/dependency_injection_supportive/container_builder/container_builder.go b/pkg/dependency_injection_supportive/container_builder/container_builder.go deleted file mode 100644 index eda8a7b..0000000 --- a/pkg/dependency_injection_supportive/container_builder/container_builder.go +++ /dev/null @@ -1,88 +0,0 @@ -package container_builder - -import ( - analyser2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" - "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/post_process_event" - process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/process_event" - ast_core2 "github.com/KoNekoD/go-deptrac/pkg/ast_core" - parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - cache2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/config_contract/deptrac_config" - command2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" - subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" - symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" - file_supportive2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive" - "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" - "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" -) - -type ContainerBuilder struct { - ProjectDirectory string - CacheFile *string - Configuration *deptrac_config.DeptracConfig - EventDispatcher event_dispatcher_interface.EventDispatcherInterface - FileInputCollector input_collector_core.InputCollectorInterface - YmlFileLoader *file_supportive2.YmlFileLoader - Dumper *file_supportive2.Dumper - AstLoader *ast_core2.AstLoader - AstFileReferenceFileCache *cache2.AstFileReferenceFileCache - AstFileReferenceDeferredCacheInterface cache2.AstFileReferenceDeferredCacheInterface - AstFileReferenceCacheInterface cache2.AstFileReferenceCacheInterface - CacheableFileSubscriber *cache2.CacheableFileSubscriber - AstFileReferenceInMemoryCache *cache2.AstFileReferenceInMemoryCache - TypeResolver *parser2.TypeResolver - ReferenceExtractors []extractors.ReferenceExtractorInterface - ParserInterface parser2.ParserInterface - LayerProvider *layer_contract.LayerProvider - EventHelper *analyser2.EventHelper - AllowDependencyHandler *process_event2.AllowDependencyHandler - DependsOnPrivateLayer *process_event2.DependsOnPrivateLayer - DependsOnInternalToken *process_event2.DependsOnInternalToken - DependsOnDisallowedLayer *process_event2.DependsOnDisallowedLayer - MatchingLayersHandler *process_event2.MatchingLayersHandler - UncoveredDependentHandler *process_event2.UncoveredDependentHandler - UnmatchedSkippedViolations *post_process_event.UnmatchedSkippedViolations - ConsoleSubscriber *subscriber2.ConsoleSubscriber - ProgressSubscriber *subscriber2.ProgressSubscriber - VerboseBoolFlag *bool - DebugBoolFlag *bool - Style *symfony2.Style - SymfonyOutput *symfony2.SymfonyOutput - TimeStopwatch *time_stopwatch_supportive.Stopwatch - AstMapExtractor *ast_core2.AstMapExtractor - InheritanceFlattener *dependency_core2.InheritanceFlattener - DependencyResolver *dependency_resolver.DependencyResolver - TokenResolver *dependency_core2.TokenResolver - CollectorResolver *collector2.CollectorResolver - LayerResolver layer_resolver_interface.LayerResolverInterface - NikicPhpParser *nikic_php_parser.NikicPhpParser - CollectorProvider *collector2.CollectorProvider - DependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser - TokenInLayerAnalyser *analyser_core2.TokenInLayerAnalyser - LayerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser - UnassignedTokenAnalyser *analyser_core2.UnassignedTokenAnalyser - LayerDependenciesAnalyser *analyser_core2.LayerDependenciesAnalyser - RulesetUsageAnalyser *analyser_core2.RulesetUsageAnalyser - FormatterProvider *output_formatter_supportive.FormatterProvider - FormatterConfiguration *configuration.FormatterConfiguration - AnalyseRunner *command2.AnalyseRunner - AnalyseCommand *command2.AnalyseCommand - NodeNamer *node_namer.NodeNamer - AnalyseOptions *command2.AnalyseOptions -} - -func NewContainerBuilder(workingDirectory string) *ContainerBuilder { - return &ContainerBuilder{} -} diff --git a/pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go b/pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go deleted file mode 100644 index 35e8a13..0000000 --- a/pkg/dependency_injection_supportive/event_subscriber_default_priority/event_subscriber_default_priority.go +++ /dev/null @@ -1,3 +0,0 @@ -package EventSubscriberInterfaceMap - -const DefaultPriority = 0 diff --git a/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go deleted file mode 100644 index 5b24377..0000000 --- a/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map.go +++ /dev/null @@ -1,8 +0,0 @@ -package event_subscriber_interface_map - -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" - "github.com/elliotchance/orderedmap/v2" -) - -var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []event_subscriber_interface.EventSubscriberInterface]] diff --git a/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go b/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go deleted file mode 100644 index 99db26b..0000000 --- a/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg/event_subscriber_interface_map_reg.go +++ /dev/null @@ -1,66 +0,0 @@ -package event_subscriber_interface_map_reg - -import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" - dependency_contract2 "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_default_priority" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" - "github.com/elliotchance/orderedmap/v2" - "reflect" -) - -func RegForAnalyseCommand(consoleSubscriber *subscriber2.ConsoleSubscriber, progressSubscriber *subscriber2.ProgressSubscriber, withProgress bool) { - processEvent := &process_event.ProcessEvent{} - postProcessEvent := &post_process_event.PostProcessEvent{} - preCreateAstMapEvent := &ast_contract2.PreCreateAstMapEvent{} - postCreateAstMapEvent := &ast_contract2.PostCreateAstMapEvent{} - astFileAnalysedEvent := &ast_contract2.AstFileAnalysedEvent{} - astFileSyntaxErrorEvent := &ast_contract2.AstFileSyntaxErrorEvent{} - preEmitEvent := &dependency_contract2.PreEmitEvent{} - postEmitEvent := &dependency_contract2.PostEmitEvent{} - preFlattenEvent := &dependency_contract2.PreFlattenEvent{} - postFlattenEvent := &dependency_contract2.PostFlattenEvent{} - - Reg(preCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.EventSubscriberInterfaceMap.DefaultPriority) - Reg(postCreateAstMapEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(processEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(postProcessEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(astFileAnalysedEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(astFileSyntaxErrorEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(preEmitEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(postEmitEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(preFlattenEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(postFlattenEvent, consoleSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - - if withProgress { - Reg(preCreateAstMapEvent, progressSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - Reg(postCreateAstMapEvent, progressSubscriber, 1) - Reg(astFileAnalysedEvent, progressSubscriber, EventSubscriberInterfaceMap.DefaultPriority) - } -} - -func Reg(event interface{}, sub event_subscriber_interface.EventSubscriberInterface, priority int) { - eventTypeof := reflect.TypeOf(event) - eventType := eventTypeof.String() - - // Get or create event type row - e, ok := EventSubscriberInterfaceMap2.Map.Get(eventType) - if !ok { - e = orderedmap.NewOrderedMap[int, []event_subscriber_interface.EventSubscriberInterface]() - EventSubscriberInterfaceMap2.Map.Set(eventType, e) - } - - // Get or create priority column - subs, ok := e.Get(priority) - if !ok { - subs = []event_subscriber_interface.EventSubscriberInterface{} - } - - subs = append(subs, sub) - - e.Set(priority, subs) -} diff --git a/pkg/dependency_injection_supportive/services.go b/pkg/dependency_injection_supportive/services.go deleted file mode 100644 index df70732..0000000 --- a/pkg/dependency_injection_supportive/services.go +++ /dev/null @@ -1,348 +0,0 @@ -package dependency_injection_supportive - -import ( - "flag" - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - post_process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/post_process_event" - process_event2 "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" - "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/post_process_event" - process_event3 "github.com/KoNekoD/go-deptrac/pkg/analyser_core/event_handler/process_event" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_core2 "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - Cache2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" - config_contract2 "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive" - command2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" - subscriber2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/subscriber" - symfony2 "github.com/KoNekoD/go-deptrac/pkg/console_supportive/symfony" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" - emitter2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core/emitter" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/container_builder" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher" - EventSubscriberInterfaceMap2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_default_priority" - EventSubscriberInterface2 "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map/event_subscriber_interface_map_reg" - file_supportive2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive" - "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_core" - collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" - "github.com/KoNekoD/go-deptrac/pkg/time_stopwatch_supportive" - "github.com/elliotchance/orderedmap/v2" - "strings" -) - -func getDefaultFormatter() output_formatter_contract2.OutputFormatterType { - if console_supportive.NewEnv().GetEnv("GITHUB_ACTIONS") != "" { - return output_formatter_supportive.NewGithubActionsOutputFormatter().GetName() - } - return output_formatter_supportive.NewTableOutputFormatter().GetName() -} - -func Services(builder *container_builder.ContainerBuilder) error { - - cacheableFileSubscriber := builder.CacheableFileSubscriber - builderConfiguration := builder.Configuration - projectDirectory := builder.ProjectDirectory - verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") - debugBoolFlag := flag.Bool("debug", false, "Debug mode") - style := symfony2.NewStyle( - verboseBoolFlag != nil && *verboseBoolFlag == true, - debugBoolFlag != nil && *debugBoolFlag == true, - ) - symfonyOutput := symfony2.NewSymfonyOutput(style) - - timeStopwatch := time_stopwatch_supportive.NewStopwatch() - - nodeNamer := node_namer.NewNodeNamer(projectDirectory) - - /* - * Utilities - */ - eventDispatcher := event_dispatcher.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) - - fileInputCollector, err := input_collector_core.NewFileInputCollector( - builderConfiguration.Paths, - builderConfiguration.ExcludeFiles, - projectDirectory, - ) - if err != nil { - return err - } - - ymlFileLoader := file_supportive2.NewYmlFileLoader() - dumper := file_supportive2.NewDumper("/deptrac_template.yaml") - - /* - * AST - */ - astFileReferenceInMemoryCache := Cache2.NewAstFileReferenceInMemoryCache() - if builder.AstFileReferenceCacheInterface == nil { - builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache - } - typeResolver := parser.NewTypeResolver(nodeNamer) - referenceExtractors := []extractors.ReferenceExtractorInterface{ - /** - - TODO: Implement all reference extractors - - AnnotationReferenceExtractor.NewAnnotationReferenceExtractor(), - AnonymousClassExtractor.NewAnonymousClassExtractor(), - ClassConstantExtractor.NewClassConstantExtractor(), - FunctionLikeExtractor.NewFunctionLikeExtractor(), - PropertyExtractor.NewPropertyExtractor(), - KeywordExtractor.NewKeywordExtractor(), - StaticExtractor.NewStaticExtractor(), - FunctionCallResolver.NewFunctionCallResolver(), - - */ - } - nikicPhpParser := nikic_php_parser.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) - parserInterface := nikicPhpParser - astLoader := ast_core2.NewAstLoader(parserInterface, eventDispatcher) - - /* - * Dependency - */ - dependencyEmitters := map[config_contract2.EmitterType]emitter2.DependencyEmitterInterface{ - config_contract2.ClassToken: emitter2.NewClassDependencyEmitter(), - config_contract2.ClassSuperGlobalToken: emitter2.NewClassSuperglobalDependencyEmitter(), - config_contract2.FileToken: emitter2.NewFileDependencyEmitter(), - config_contract2.FunctionToken: emitter2.NewFunctionDependencyEmitter(), - config_contract2.FunctionCall: emitter2.NewFunctionCallDependencyEmitter(), - config_contract2.FunctionSuperGlobalToken: emitter2.NewFunctionSuperglobalDependencyEmitter(), - config_contract2.UseToken: emitter2.NewUsesDependencyEmitter(), - } - inheritanceFlattener := dependency_core2.NewInheritanceFlattener() - dependencyResolver := dependency_resolver.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) - tokenResolver := dependency_core2.NewTokenResolver() - - astMapExtractor := ast_core2.NewAstMapExtractor(fileInputCollector, astLoader) - - layerProvider := layer_contract.NewLayerProvider(builderConfiguration.Rulesets) - eventHelper := event_helper.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) - - /* - * Events (before first possible event) - */ - /* - * Events - */ - event_subscriber_interface_map.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface2.EventSubscriberInterface]]() - - // Events - uncoveredDependentHandler := process_event3.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) - matchingLayersHandler := process_event3.NewMatchingLayersHandler() - allowDependencyHandler := process_event3.NewAllowDependencyHandler() - consoleSubscriber := subscriber2.NewConsoleSubscriber(symfonyOutput, timeStopwatch) - progressSubscriber := subscriber2.NewProgressSubscriber(symfonyOutput) - dependsOnDisallowedLayer := process_event3.NewDependsOnDisallowedLayer(eventHelper) - dependsOnPrivateLayer := process_event3.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := process_event3.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) - unmatchedSkippedViolations := post_process_event.NewUnmatchedSkippedViolations(eventHelper) - - processEvent := &process_event2.ProcessEvent{} - postProcessEvent := &post_process_event2.PostProcessEvent{} - preCreateAstMapEvent := &ast_contract.PreCreateAstMapEvent{} - postCreateAstMapEvent := &ast_contract.PostCreateAstMapEvent{} - // Events Handlers - // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" - event_subscriber_interface_map_reg.Reg(processEvent, allowDependencyHandler, -100) - event_subscriber_interface_map_reg.Reg(processEvent, dependsOnPrivateLayer, -3) - event_subscriber_interface_map_reg.Reg(processEvent, dependsOnInternalToken, -2) - event_subscriber_interface_map_reg.Reg(processEvent, dependsOnDisallowedLayer, -1) - event_subscriber_interface_map_reg.Reg(processEvent, matchingLayersHandler, 1) - event_subscriber_interface_map_reg.Reg(processEvent, uncoveredDependentHandler, 2) - event_subscriber_interface_map_reg.Reg(postProcessEvent, unmatchedSkippedViolations, EventSubscriberInterfaceMap2.DefaultPriority) - if cacheableFileSubscriber != nil { - event_subscriber_interface_map_reg.Reg(preCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) - event_subscriber_interface_map_reg.Reg(postCreateAstMapEvent, cacheableFileSubscriber, EventSubscriberInterfaceMap2.DefaultPriority) - } - - /* - * OutputFormatter - */ - outputFormatter := map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface{ - output_formatter_contract2.Table: output_formatter_supportive.NewTableOutputFormatter(), - output_formatter_contract2.GithubActions: output_formatter_supportive.NewGithubActionsOutputFormatter(), - // TODO: - // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(XMLOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(BaselineOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(JsonOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(GraphVizOutputDisplayFormatter::class)->tag('output_formatter_contract'); - // $services->set(GraphVizOutputImageFormatter::class)->tag('output_formatter_contract'); - // $services->set(GraphVizOutputDotFormatter::class)->tag('output_formatter_contract'); - // $services->set(GraphVizOutputHtmlFormatter::class)->tag('output_formatter_contract'); - // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter_contract'); - // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter_contract'); - } - formatterProvider := output_formatter_supportive.NewFormatterProvider(outputFormatter) - formatterConfiguration := configuration.NewFormatterConfiguration(builderConfiguration.Formatters) - - // - knownFormattersStr := make([]string, 0) - for _, formatterType := range formatterProvider.GetKnownFormatters() { - knownFormattersStr = append(knownFormattersStr, fmt.Sprintf("\"%s\"", formatterType)) - } - var ( - formatterUsagePossible = strings.Join(knownFormattersStr, ", ") - formatterUsage = fmt.Sprintf("Format in which to print the result_contract of the analysis. Possible: [\"%s\"]", formatterUsagePossible) - formatter = flag.String("formatter", string(output_formatter_contract2.Table), formatterUsage) - output = flag.String("output", "", "Output file_supportive path for formatter (if applicable)") - noProgress = flag.Bool("no-progress", false, "Do not show progress bar") - reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") - reportUncovered = flag.Bool("report-uncovered", false, "Report uncovered dependencies") - failOnUncovered = flag.Bool("fail-on-uncovered", false, "Fails if any uncovered dependency_contract is found") - ) - - if formatter == nil { - formatterTmp := string(getDefaultFormatter()) - formatter = &formatterTmp - } - - analyseOptions := command2.NewAnalyseOptions( - nil != noProgress && *noProgress == true, - *formatter, - output, - nil != reportSkipped && *reportSkipped == true, - nil != reportUncovered && *reportUncovered == true, - nil != failOnUncovered && *failOnUncovered == true, - ) - event_subscriber_interface_map_reg.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) - // - - /* - * Layer - */ - inheritanceLevelCollector, err := collector2.NewInheritanceLevelCollector(astMapExtractor) - if err != nil { - return err - } - inheritsCollector, err := collector2.NewInheritsCollector(astMapExtractor) - if err != nil { - return err - } - usesCollector, err := collector2.NewUsesCollector(astMapExtractor) - if err != nil { - return err - } - collectorProvider := collector2.NewCollectorProvider() - collectorResolver := collector2.NewCollectorResolver(collectorProvider) - layerResolver := layer_core.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[config_contract2.CollectorType]layer_contract.CollectorInterface{ - //AttributeCollector - config_contract2.TypeBool: collector2.NewBoolCollector(collectorResolver), - config_contract2.TypeClass: collector2.NewClassCollector(), - config_contract2.TypeClasslike: collector2.NewClassLikeCollector(), - config_contract2.TypeClassNameRegex: collector2.NewClassNameRegexCollector(), - //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - config_contract2.TypeDirectory: collector2.NewDirectoryCollector(), - //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - config_contract2.TypeFunctionName: collector2.NewFunctionNameCollector(), - config_contract2.TypeGlob: collector2.NewGlobCollector(projectDirectory), - //ImplementsCollector - config_contract2.TypeInheritance: inheritanceLevelCollector, - config_contract2.TypeInterface: collector2.NewInterfaceCollector(), - config_contract2.TypeInherits: inheritsCollector, - config_contract2.TypeLayer: collector2.NewLayerCollector(layerResolver), - config_contract2.TypeMethod: collector2.NewMethodCollector(nikicPhpParser), - config_contract2.TypeSuperGlobal: collector2.NewSuperglobalCollector(), - config_contract2.TypeTrait: collector2.NewTraitCollector(), - config_contract2.TypeUses: usesCollector, - //CollectorType.TypePhpInternal: PhpInternalCollector - config_contract2.TypeComposer: collector2.NewComposerCollector(), - } - collectorProvider.Set(collectors) - - /* - * SetAnalyser - */ - dependencyLayersAnalyser := analyser_core2.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := analyser_core2.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerForTokenAnalyser := analyser_core2.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := analyser_core2.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := analyser_core2.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := analyser_core2.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) - - /* - * Console - */ - analyseRunner := command2.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) - analyseCommand := command2.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) - - // TODO: other commands - // $services->set(InitCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(ChangedFilesRunner::class)->autowire(); - // $services->set(ChangedFilesCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(DebugLayerRunner::class)->autowire()->args(['$layers' => param('layers')]); - // $services->set(DebugLayerCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(DebugTokenRunner::class)->autowire(); - // $services->set(DebugTokenCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(DebugUnassignedRunner::class)->autowire(); - // $services->set(DebugUnassignedCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(DebugDependenciesRunner::class)->autowire(); - // $services->set(DebugDependenciesCommand::class)->autowire()->tag('console_supportive.command'); - // $services->set(DebugUnusedRunner::class)->autowire(); - // $services->set(DebugUnusedCommand::class)->autowire()->tag('console_supportive.command'); - - builder.VerboseBoolFlag = verboseBoolFlag - builder.DebugBoolFlag = debugBoolFlag - builder.Style = style - builder.SymfonyOutput = symfonyOutput - builder.TimeStopwatch = timeStopwatch - builder.EventDispatcher = eventDispatcher - builder.FileInputCollector = fileInputCollector - builder.YmlFileLoader = ymlFileLoader - builder.Dumper = dumper - builder.AstFileReferenceInMemoryCache = astFileReferenceInMemoryCache - builder.TypeResolver = typeResolver - builder.ReferenceExtractors = referenceExtractors - builder.NikicPhpParser = nikicPhpParser - builder.ParserInterface = parserInterface - builder.AstLoader = astLoader - builder.InheritanceFlattener = inheritanceFlattener - builder.DependencyResolver = dependencyResolver - builder.TokenResolver = tokenResolver - builder.AstMapExtractor = astMapExtractor - builder.CollectorResolver = collectorResolver - builder.LayerResolver = layerResolver - builder.CollectorProvider = collectorProvider - builder.UncoveredDependentHandler = uncoveredDependentHandler - builder.MatchingLayersHandler = matchingLayersHandler - builder.LayerProvider = layerProvider - builder.AllowDependencyHandler = allowDependencyHandler - builder.DependsOnDisallowedLayer = dependsOnDisallowedLayer - builder.EventHelper = eventHelper - builder.DependsOnPrivateLayer = dependsOnPrivateLayer - builder.DependsOnInternalToken = dependsOnInternalToken - builder.UnmatchedSkippedViolations = unmatchedSkippedViolations - builder.DependencyLayersAnalyser = dependencyLayersAnalyser - builder.TokenInLayerAnalyser = tokenInLayerAnalyser - builder.LayerForTokenAnalyser = layerForTokenAnalyser - builder.UnassignedTokenAnalyser = unassignedTokenAnalyser - builder.LayerDependenciesAnalyser = layerDependenciesAnalyser - builder.RulesetUsageAnalyser = rulesetUsageAnalyser - builder.ConsoleSubscriber = consoleSubscriber - builder.ProgressSubscriber = progressSubscriber - builder.FormatterProvider = formatterProvider - builder.FormatterConfiguration = formatterConfiguration - builder.AnalyseRunner = analyseRunner - builder.AnalyseCommand = analyseCommand - builder.NodeNamer = nodeNamer - builder.AnalyseOptions = analyseOptions - - return nil -} diff --git a/pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go b/pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go deleted file mode 100644 index 93c29eb..0000000 --- a/pkg/dependency_injection_supportive/test_container_provider/test_container_provider.go +++ /dev/null @@ -1,29 +0,0 @@ -package test_container_provider - -import ( - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/application" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive" - "os" - "reflect" -) - -func ProvideTestContainer() *dependency_injection_supportive.ServiceContainerBuilder { - currentWorkingDirectory, _ := os.Getwd() - config := currentWorkingDirectory + application.DirectorySeparator + "deptrac.yaml" - cache := "" - - factory := dependency_injection_supportive.NewServiceContainerBuilder(currentWorkingDirectory) - factory, _ = factory.WithConfig(config) - - _, _ = factory.Build(&cache, false) - - return factory -} - -func ProvideTestContainerService(containerProperty string) interface{} { - container := ProvideTestContainer().GetContainer() - - refProps := reflect.ValueOf(container).Elem().FieldByName(containerProperty) - - return refProps.Interface() -} diff --git a/pkg/domain/apperrors/analyser_exception.go b/pkg/domain/apperrors/analyser_exception.go new file mode 100644 index 0000000..8836826 --- /dev/null +++ b/pkg/domain/apperrors/analyser_exception.go @@ -0,0 +1,46 @@ +package apperrors + +import ( + "fmt" +) + +type AnalyserException struct { + Message string + Previous error +} + +func (a *AnalyserException) Error() string { + if a.Previous != nil { + return fmt.Sprintf("%s\n%s", a.Message, a.Previous.Error()) + } else { + return a.Message + } +} + +func NewInvalidEmitterConfiguration(e *InvalidEmitterConfigurationException) *AnalyserException { + return &AnalyserException{Message: "Invalid emitter configuration.", Previous: e} +} + +func NewUnrecognizedToken(e *UnrecognizedTokenException) *AnalyserException { + return &AnalyserException{Message: "Unrecognized token.", Previous: e} +} + +func NewInvalidLayerDefinition(e *InvalidLayerDefinitionException) *AnalyserException { + return &AnalyserException{Message: "Invalid layer_contract definition.", Previous: e} +} + +func NewInvalidCollectorDefinition(e *InvalidCollectorDefinitionException) *AnalyserException { + return &AnalyserException{Message: "Invalid collector definition.", Previous: e} +} + +func NewFailedAstParsing(e *AstException) *AnalyserException { + return &AnalyserException{Message: "Failed Ast parsing.", Previous: e} +} + +func NewCouldNotParseFile(e *CouldNotParseFileException) *AnalyserException { + return &AnalyserException{Message: "Could not parse file_supportive.", Previous: e} +} + +func NewCircularReference(e *CircularReferenceException) *AnalyserException { + return &AnalyserException{Message: "Circular layer_contract dependency_contract.", Previous: e} +} diff --git a/pkg/ast_core/ast_exception.go b/pkg/domain/apperrors/ast_exception.go similarity index 65% rename from pkg/ast_core/ast_exception.go rename to pkg/domain/apperrors/ast_exception.go index fd4bd7f..208988d 100644 --- a/pkg/ast_core/ast_exception.go +++ b/pkg/domain/apperrors/ast_exception.go @@ -1,8 +1,7 @@ -package ast_core +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/input_collector_core" ) type AstException struct { @@ -18,6 +17,6 @@ func (a *AstException) Error() string { } } -func NewCouldNotCollectFiles(exception *input_collector_core.InputException) *AstException { +func NewCouldNotCollectFiles(exception *InputException) *AstException { return &AstException{Message: "Could not create AstMap.", Previous: exception} } diff --git a/pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go b/pkg/domain/apperrors/cache_file_exception.go similarity index 94% rename from pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go rename to pkg/domain/apperrors/cache_file_exception.go index 368ef46..c01c70e 100644 --- a/pkg/dependency_injection_supportive/Exception/CacheFileException/CacheFileException.go +++ b/pkg/domain/apperrors/cache_file_exception.go @@ -1,4 +1,4 @@ -package CacheFileException +package apperrors import ( "fmt" diff --git a/pkg/console_supportive/cannot_get_current_working_directory_exception.go b/pkg/domain/apperrors/cannot_get_current_working_directory_exception.go similarity index 95% rename from pkg/console_supportive/cannot_get_current_working_directory_exception.go rename to pkg/domain/apperrors/cannot_get_current_working_directory_exception.go index ae0c6a1..b654f87 100644 --- a/pkg/console_supportive/cannot_get_current_working_directory_exception.go +++ b/pkg/domain/apperrors/cannot_get_current_working_directory_exception.go @@ -1,4 +1,4 @@ -package console_supportive +package apperrors type CannotGetCurrentWorkingDirectoryException struct { Message string diff --git a/pkg/domain/apperrors/cannot_load_configuration.go b/pkg/domain/apperrors/cannot_load_configuration.go new file mode 100644 index 0000000..8cad5d8 --- /dev/null +++ b/pkg/domain/apperrors/cannot_load_configuration.go @@ -0,0 +1,15 @@ +package apperrors + +import "fmt" + +type CannotLoadConfiguration struct { + Message string +} + +func (e *CannotLoadConfiguration) Error() string { + return e.Message +} + +func NewCannotLoadConfiguration(filename string, message string) *CannotLoadConfiguration { + return &CannotLoadConfiguration{fmt.Sprintf("Could not load %s. Reason: %s", filename, message)} +} diff --git a/pkg/layer_contract/circular_reference_exception.go b/pkg/domain/apperrors/circular_reference_exception.go similarity index 98% rename from pkg/layer_contract/circular_reference_exception.go rename to pkg/domain/apperrors/circular_reference_exception.go index cb9c80e..98f6df0 100644 --- a/pkg/layer_contract/circular_reference_exception.go +++ b/pkg/domain/apperrors/circular_reference_exception.go @@ -1,4 +1,4 @@ -package layer_contract +package apperrors import ( "fmt" diff --git a/pkg/console_supportive/command/command_run_exception.go b/pkg/domain/apperrors/command_run_exception.go similarity index 98% rename from pkg/console_supportive/command/command_run_exception.go rename to pkg/domain/apperrors/command_run_exception.go index 1ba704a..6a03a7e 100644 --- a/pkg/console_supportive/command/command_run_exception.go +++ b/pkg/domain/apperrors/command_run_exception.go @@ -1,4 +1,4 @@ -package command +package apperrors import "fmt" diff --git a/pkg/ast_contract/could_not_parse_file_exception.go b/pkg/domain/apperrors/could_not_parse_file_exception.go similarity index 95% rename from pkg/ast_contract/could_not_parse_file_exception.go rename to pkg/domain/apperrors/could_not_parse_file_exception.go index c06d00b..f2c5fc2 100644 --- a/pkg/ast_contract/could_not_parse_file_exception.go +++ b/pkg/domain/apperrors/could_not_parse_file_exception.go @@ -1,4 +1,4 @@ -package ast_contract +package apperrors // CouldNotParseFileException - Exception thrown in a collector when it cannot parse a file_supportive. type CouldNotParseFileException struct { diff --git a/pkg/file_supportive/exception/could_not_read_file_exception.go b/pkg/domain/apperrors/could_not_read_file_exception.go similarity index 97% rename from pkg/file_supportive/exception/could_not_read_file_exception.go rename to pkg/domain/apperrors/could_not_read_file_exception.go index 1be940d..6df8bac 100644 --- a/pkg/file_supportive/exception/could_not_read_file_exception.go +++ b/pkg/domain/apperrors/could_not_read_file_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors import "fmt" diff --git a/pkg/result_contract/error.go b/pkg/domain/apperrors/error.go similarity index 88% rename from pkg/result_contract/error.go rename to pkg/domain/apperrors/error.go index a807b85..35a536c 100644 --- a/pkg/result_contract/error.go +++ b/pkg/domain/apperrors/error.go @@ -1,4 +1,4 @@ -package result_contract +package apperrors type Error struct { Message string @@ -9,6 +9,7 @@ func NewError(message string) *Error { Message: message, } } + func (e *Error) ToString() string { return e.Message } diff --git a/pkg/domain_error_contract/exception_interface.go b/pkg/domain/apperrors/exception_interface.go similarity index 93% rename from pkg/domain_error_contract/exception_interface.go rename to pkg/domain/apperrors/exception_interface.go index 054e82a..f024f46 100644 --- a/pkg/domain_error_contract/exception_interface.go +++ b/pkg/domain/apperrors/exception_interface.go @@ -1,4 +1,4 @@ -package domain_error_contract +package apperrors // ExceptionInterface - Shared interface for all Exceptions that Deptrac can possibly throw. You can use this to ensure that no exceptions go unhandled when integrating with Deptrac codebase. type ExceptionInterface interface{} diff --git a/pkg/file_supportive/exception/file_already_exists_exception.go b/pkg/domain/apperrors/file_already_exists_exception.go similarity index 59% rename from pkg/file_supportive/exception/file_already_exists_exception.go rename to pkg/domain/apperrors/file_already_exists_exception.go index dd77953..7a0083b 100644 --- a/pkg/file_supportive/exception/file_already_exists_exception.go +++ b/pkg/domain/apperrors/file_already_exists_exception.go @@ -1,9 +1,7 @@ -package exception +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/util" - "os" ) type FileAlreadyExistsException struct { @@ -18,6 +16,7 @@ func newFileAlreadyExistsException(message string) *FileAlreadyExistsException { return &FileAlreadyExistsException{Message: message} } -func NewFileAlreadyExistsExceptionAlreadyExists(file *os.File) *FileAlreadyExistsException { - return newFileAlreadyExistsException(fmt.Sprintf("A file_supportive named \"%s\" already exists. ", util.PathCanonicalize(file.Name()))) +// NewFileAlreadyExistsExceptionAlreadyExists - use via utils.PathCanonicalize(file.Name()) +func NewFileAlreadyExistsExceptionAlreadyExists(path string) *FileAlreadyExistsException { + return newFileAlreadyExistsException(fmt.Sprintf("A file_supportive named \"%s\" already exists. ", path)) } diff --git a/pkg/file_supportive/exception/file_cannot_be_parsed_as_yaml_exception.go b/pkg/domain/apperrors/file_cannot_be_parsed_as_yaml_exception.go similarity index 97% rename from pkg/file_supportive/exception/file_cannot_be_parsed_as_yaml_exception.go rename to pkg/domain/apperrors/file_cannot_be_parsed_as_yaml_exception.go index 1b65471..f876363 100644 --- a/pkg/file_supportive/exception/file_cannot_be_parsed_as_yaml_exception.go +++ b/pkg/domain/apperrors/file_cannot_be_parsed_as_yaml_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors import "fmt" diff --git a/pkg/file_supportive/exception/file_not_exists_exception.go b/pkg/domain/apperrors/file_not_exists_exception.go similarity index 96% rename from pkg/file_supportive/exception/file_not_exists_exception.go rename to pkg/domain/apperrors/file_not_exists_exception.go index f909516..484f9b4 100644 --- a/pkg/file_supportive/exception/file_not_exists_exception.go +++ b/pkg/domain/apperrors/file_not_exists_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors import "fmt" diff --git a/pkg/file_supportive/exception/file_not_writable_exception.go b/pkg/domain/apperrors/file_not_writable_exception.go similarity index 61% rename from pkg/file_supportive/exception/file_not_writable_exception.go rename to pkg/domain/apperrors/file_not_writable_exception.go index 1e49ea5..dade838 100644 --- a/pkg/file_supportive/exception/file_not_writable_exception.go +++ b/pkg/domain/apperrors/file_not_writable_exception.go @@ -1,9 +1,7 @@ -package exception +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/util" - "os" ) type FileNotWritableException struct { @@ -18,6 +16,7 @@ func newFileNotWritableException(message string) *FileNotWritableException { return &FileNotWritableException{Message: message} } -func NewFileNotWritableExceptionFromFilePath(file *os.File) *FileNotWritableException { - return newFileNotWritableException(fmt.Sprintf("Could not write file_supportive \"%s\".", util.PathCanonicalize(file.Name()))) +// NewFileNotWritableExceptionFromFilePath - use via PathCanonicalize(file.Name()) +func NewFileNotWritableExceptionFromFilePath(path string) *FileNotWritableException { + return newFileNotWritableException(fmt.Sprintf("Could not write file_supportive \"%s\".", path)) } diff --git a/pkg/input_collector_core/input_exception.go b/pkg/domain/apperrors/input_exception.go similarity index 93% rename from pkg/input_collector_core/input_exception.go rename to pkg/domain/apperrors/input_exception.go index 59b36fe..cadb292 100644 --- a/pkg/input_collector_core/input_exception.go +++ b/pkg/domain/apperrors/input_exception.go @@ -1,4 +1,4 @@ -package input_collector_core +package apperrors import "fmt" diff --git a/pkg/domain/apperrors/invalid_collector_definition_exception.go b/pkg/domain/apperrors/invalid_collector_definition_exception.go new file mode 100644 index 0000000..816e80c --- /dev/null +++ b/pkg/domain/apperrors/invalid_collector_definition_exception.go @@ -0,0 +1,39 @@ +package apperrors + +import ( + "fmt" + "strings" +) + +// InvalidCollectorDefinitionException - Thrown when the configuration of a particular collector is not valid. Use this error when writing custom collectors. +type InvalidCollectorDefinitionException struct { + Message string + Previous error +} + +func (e InvalidCollectorDefinitionException) Error() string { + if e.Previous != nil { + return fmt.Sprintf("%s\n%s", e.Message, e.Previous.Error()) + } else { + return e.Message + } +} + +func NewInvalidCollectorDefinitionMissingType() *InvalidCollectorDefinitionException { + msg := "Could not resolve collector definition because of missing \"type\" field." + + return &InvalidCollectorDefinitionException{Message: msg} +} + +// NewInvalidCollectorDefinitionUnsupportedType - use via types CollectorType, supportedTypes []CollectorType, previous error +func NewInvalidCollectorDefinitionUnsupportedType(needed string, supportedTypes []string, previous error) *InvalidCollectorDefinitionException { + possible := strings.Join(supportedTypes, "\", \"") + + msg := fmt.Sprintf("Could not find a collector for type \"%s\". Supported types: \"%s\".", needed, possible) + + return &InvalidCollectorDefinitionException{Message: msg, Previous: previous} +} + +func NewInvalidCollectorDefinitionInvalidCollectorConfiguration(message string) *InvalidCollectorDefinitionException { + return &InvalidCollectorDefinitionException{Message: message} +} diff --git a/pkg/dependency_core/invalid_emitter_configuration_exception.go b/pkg/domain/apperrors/invalid_emitter_configuration_exception.go similarity index 76% rename from pkg/dependency_core/invalid_emitter_configuration_exception.go rename to pkg/domain/apperrors/invalid_emitter_configuration_exception.go index 6cf24a5..cc924ea 100644 --- a/pkg/dependency_core/invalid_emitter_configuration_exception.go +++ b/pkg/domain/apperrors/invalid_emitter_configuration_exception.go @@ -1,8 +1,7 @@ -package dependency_core +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" ) type InvalidEmitterConfigurationException struct { @@ -17,10 +16,10 @@ func NewInvalidEmitterConfigurationException(message string) *InvalidEmitterConf return &InvalidEmitterConfigurationException{Message: message} } -func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType config_contract.EmitterType) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionCouldNotLocate(emitterType string) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Could not locate emitter type '%s' in the DI container.", emitterType)) } -func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType config_contract.EmitterType, emitter interface{}) *InvalidEmitterConfigurationException { +func NewInvalidEmitterConfigurationExceptionIsNotEmitter(emitterType string, emitter interface{}) *InvalidEmitterConfigurationException { return NewInvalidEmitterConfigurationException(fmt.Sprintf("Type \"%s\" is not valid emitter (expected \"%s\", but is \"%T\").", emitterType, "DependencyEmitterInterface", emitter)) } diff --git a/pkg/layer_contract/invalid_layer_definition_exception.go b/pkg/domain/apperrors/invalid_layer_definition_exception.go similarity index 98% rename from pkg/layer_contract/invalid_layer_definition_exception.go rename to pkg/domain/apperrors/invalid_layer_definition_exception.go index e392285..0dec69b 100644 --- a/pkg/layer_contract/invalid_layer_definition_exception.go +++ b/pkg/domain/apperrors/invalid_layer_definition_exception.go @@ -1,4 +1,4 @@ -package layer_contract +package apperrors import "fmt" diff --git a/pkg/file_supportive/exception/invalid_path_exception.go b/pkg/domain/apperrors/invalid_path_exception.go similarity index 96% rename from pkg/file_supportive/exception/invalid_path_exception.go rename to pkg/domain/apperrors/invalid_path_exception.go index 546f62c..e5ef49e 100644 --- a/pkg/file_supportive/exception/invalid_path_exception.go +++ b/pkg/domain/apperrors/invalid_path_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors import ( "fmt" diff --git a/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go b/pkg/domain/apperrors/invalid_service_in_locator_exception.go similarity index 66% rename from pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go rename to pkg/domain/apperrors/invalid_service_in_locator_exception.go index 4222150..c06dd55 100644 --- a/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException/InvalidServiceInLocatorException.go +++ b/pkg/domain/apperrors/invalid_service_in_locator_exception.go @@ -1,8 +1,7 @@ -package InvalidServiceInLocatorException +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" "strings" ) @@ -18,7 +17,7 @@ func newInvalidServiceInLocatorException(message string) *InvalidServiceInLocato return &InvalidServiceInLocatorException{Message: message} } -func NewInvalidServiceInLocatorExceptionInvalidType(id output_formatter_contract.OutputFormatterType, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { +func NewInvalidServiceInLocatorExceptionInvalidType(id string, actualType string, expectedTypes ...string) *InvalidServiceInLocatorException { message := fmt.Sprintf("Trying to get unsupported service \"%s\" from locator (expected \"%s\", but is \"%s\").", id, actualType, strings.Join(expectedTypes, "\", \"")) return newInvalidServiceInLocatorException(message) } diff --git a/pkg/file_supportive/exception/i_o_exception.go b/pkg/domain/apperrors/io_exception.go similarity index 94% rename from pkg/file_supportive/exception/i_o_exception.go rename to pkg/domain/apperrors/io_exception.go index a68dffd..1310a3d 100644 --- a/pkg/file_supportive/exception/i_o_exception.go +++ b/pkg/domain/apperrors/io_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors type IOException struct { Message string diff --git a/pkg/output_formatter_contract/output_exception.go b/pkg/domain/apperrors/output_exception.go similarity index 88% rename from pkg/output_formatter_contract/output_exception.go rename to pkg/domain/apperrors/output_exception.go index 1b73015..b4d461b 100644 --- a/pkg/output_formatter_contract/output_exception.go +++ b/pkg/domain/apperrors/output_exception.go @@ -1,4 +1,4 @@ -package output_formatter_contract +package apperrors // OutputException - Thrown when you are unable to provide output with your custom OutputFormatter. type OutputException struct { diff --git a/pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go b/pkg/domain/apperrors/parsed_yaml_is_not_an_array_exception.go similarity index 96% rename from pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go rename to pkg/domain/apperrors/parsed_yaml_is_not_an_array_exception.go index c69bfd4..2d6bef3 100644 --- a/pkg/file_supportive/exception/parsed_yaml_is_not_an_array_exception.go +++ b/pkg/domain/apperrors/parsed_yaml_is_not_an_array_exception.go @@ -1,4 +1,4 @@ -package exception +package apperrors import "fmt" diff --git a/pkg/time_stopwatch_supportive/stopwatch_exception.go b/pkg/domain/apperrors/stopwatch_exception.go similarity index 94% rename from pkg/time_stopwatch_supportive/stopwatch_exception.go rename to pkg/domain/apperrors/stopwatch_exception.go index b321b2b..2e1c2e6 100644 --- a/pkg/time_stopwatch_supportive/stopwatch_exception.go +++ b/pkg/domain/apperrors/stopwatch_exception.go @@ -1,4 +1,4 @@ -package time_stopwatch_supportive +package apperrors import "fmt" diff --git a/pkg/dependency_core/unrecognized_token_exception.go b/pkg/domain/apperrors/unrecognized_token_exception.go similarity index 69% rename from pkg/dependency_core/unrecognized_token_exception.go rename to pkg/domain/apperrors/unrecognized_token_exception.go index 2b9be15..2520ddf 100644 --- a/pkg/dependency_core/unrecognized_token_exception.go +++ b/pkg/domain/apperrors/unrecognized_token_exception.go @@ -1,8 +1,7 @@ -package dependency_core +package apperrors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" ) type UnrecognizedTokenException struct { @@ -17,6 +16,7 @@ func (e UnrecognizedTokenException) Error() string { return e.Message } -func (e UnrecognizedTokenException) NewCannotCreateReference(token ast_contract.TokenInterface) *UnrecognizedTokenException { - return &UnrecognizedTokenException{Message: fmt.Sprintf("Cannot create TokenReference for token '%T'", token)} +// NewCannotCreateReference - use via token TokenInterface - sprintf '%T' +func (e UnrecognizedTokenException) NewCannotCreateReference(tokenType string) *UnrecognizedTokenException { + return &UnrecognizedTokenException{Message: fmt.Sprintf("Cannot create TokenReference for token '%s'", tokenType)} } diff --git a/pkg/time_stopwatch_supportive/period.go b/pkg/domain/stopwatch/period.go similarity index 93% rename from pkg/time_stopwatch_supportive/period.go rename to pkg/domain/stopwatch/period.go index e7cac86..41421d6 100644 --- a/pkg/time_stopwatch_supportive/period.go +++ b/pkg/domain/stopwatch/period.go @@ -1,4 +1,4 @@ -package time_stopwatch_supportive +package stopwatch import ( "github.com/loov/hrtime" diff --git a/pkg/time_stopwatch_supportive/started_period.go b/pkg/domain/stopwatch/started_period.go similarity index 95% rename from pkg/time_stopwatch_supportive/started_period.go rename to pkg/domain/stopwatch/started_period.go index 38593ea..b9cf4ed 100644 --- a/pkg/time_stopwatch_supportive/started_period.go +++ b/pkg/domain/stopwatch/started_period.go @@ -1,4 +1,4 @@ -package time_stopwatch_supportive +package stopwatch import ( "github.com/loov/hrtime" diff --git a/pkg/time_stopwatch_supportive/stopwatch.go b/pkg/domain/stopwatch/stopwatch.go similarity index 57% rename from pkg/time_stopwatch_supportive/stopwatch.go rename to pkg/domain/stopwatch/stopwatch.go index a9afb6e..72243c4 100644 --- a/pkg/time_stopwatch_supportive/stopwatch.go +++ b/pkg/domain/stopwatch/stopwatch.go @@ -1,4 +1,8 @@ -package time_stopwatch_supportive +package stopwatch + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" +) type Stopwatch struct { periods map[string]*StartedPeriod @@ -10,7 +14,7 @@ func NewStopwatch() *Stopwatch { } } -func (s *Stopwatch) Start(event string) *StopwatchException { +func (s *Stopwatch) Start(event string) *apperrors.StopwatchException { err := s.assertPeriodNotStarted(event) if err != nil { return err @@ -34,17 +38,17 @@ func (s *Stopwatch) Stop(event string) (*Period, error) { return period, nil } -func (s *Stopwatch) assertPeriodNotStarted(event string) *StopwatchException { +func (s *Stopwatch) assertPeriodNotStarted(event string) *apperrors.StopwatchException { if _, ok := s.periods[event]; ok { - return NewStopwatchExceptionPeriodAlreadyStarted(event) + return apperrors.NewStopwatchExceptionPeriodAlreadyStarted(event) } return nil } -func (s *Stopwatch) AssertPeriodStarted(event string) *StopwatchException { +func (s *Stopwatch) AssertPeriodStarted(event string) *apperrors.StopwatchException { if _, ok := s.periods[event]; !ok { - return NewStopwatchExceptionPeriodNotStarted(event) + return apperrors.NewStopwatchExceptionPeriodNotStarted(event) } return nil diff --git a/pkg/util/AsPtr.go b/pkg/domain/utils/as_ptr.go similarity index 78% rename from pkg/util/AsPtr.go rename to pkg/domain/utils/as_ptr.go index cb6cbb2..c9d4145 100644 --- a/pkg/util/AsPtr.go +++ b/pkg/domain/utils/as_ptr.go @@ -1,4 +1,4 @@ -package util +package utils func AsPtr[T any](value T) *T { return &value diff --git a/pkg/file_supportive/dumper.go b/pkg/domain/utils/dumper.go similarity index 95% rename from pkg/file_supportive/dumper.go rename to pkg/domain/utils/dumper.go index 3809997..b335a7f 100644 --- a/pkg/file_supportive/dumper.go +++ b/pkg/domain/utils/dumper.go @@ -1,4 +1,4 @@ -package file_supportive +package utils import ( "errors" diff --git a/pkg/util/FileExists.go b/pkg/domain/utils/file_exists.go similarity index 91% rename from pkg/util/FileExists.go rename to pkg/domain/utils/file_exists.go index c3e4db9..6829046 100644 --- a/pkg/util/FileExists.go +++ b/pkg/domain/utils/file_exists.go @@ -1,4 +1,4 @@ -package util +package utils import "os" diff --git a/pkg/file_supportive/file_reader.go b/pkg/domain/utils/file_reader.go similarity index 54% rename from pkg/file_supportive/file_reader.go rename to pkg/domain/utils/file_reader.go index 20424f4..3a98dc5 100644 --- a/pkg/file_supportive/file_reader.go +++ b/pkg/domain/utils/file_reader.go @@ -1,14 +1,14 @@ -package file_supportive +package utils import ( - "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "os" ) func FileReaderRead(fileName string) (string, error) { contents, err := os.ReadFile(fileName) if err != nil { - return "", exception.NewCouldNotReadFileExceptionFromFilename(fileName, err) + return "", apperrors.NewCouldNotReadFileExceptionFromFilename(fileName, err) } return string(contents), nil } diff --git a/pkg/util/GetLineByPosition.go b/pkg/domain/utils/get_line_by_position.go similarity index 98% rename from pkg/util/GetLineByPosition.go rename to pkg/domain/utils/get_line_by_position.go index 0b150d6..214d360 100644 --- a/pkg/util/GetLineByPosition.go +++ b/pkg/domain/utils/get_line_by_position.go @@ -1,4 +1,4 @@ -package util +package utils import ( "bufio" diff --git a/pkg/util/GetPathWithOnlytFiename.go b/pkg/domain/utils/get_path_with_only_filename.go similarity index 95% rename from pkg/util/GetPathWithOnlytFiename.go rename to pkg/domain/utils/get_path_with_only_filename.go index 194186d..6823fad 100644 --- a/pkg/util/GetPathWithOnlytFiename.go +++ b/pkg/domain/utils/get_path_with_only_filename.go @@ -1,4 +1,4 @@ -package util +package utils import ( "errors" diff --git a/pkg/util/GetPathWithoutFiename.go b/pkg/domain/utils/get_path_without_filename.go similarity index 94% rename from pkg/util/GetPathWithoutFiename.go rename to pkg/domain/utils/get_path_without_filename.go index 6daaa94..9356324 100644 --- a/pkg/util/GetPathWithoutFiename.go +++ b/pkg/domain/utils/get_path_without_filename.go @@ -1,4 +1,4 @@ -package util +package utils import ( "os" diff --git a/pkg/util/GlobToRegex.go b/pkg/domain/utils/glob_to_regex.go similarity index 99% rename from pkg/util/GlobToRegex.go rename to pkg/domain/utils/glob_to_regex.go index dc5291b..117588e 100644 --- a/pkg/util/GlobToRegex.go +++ b/pkg/domain/utils/glob_to_regex.go @@ -1,4 +1,4 @@ -package util +package utils import "strings" diff --git a/pkg/util/in_array.go b/pkg/domain/utils/in_array.go similarity index 91% rename from pkg/util/in_array.go rename to pkg/domain/utils/in_array.go index 5c51f43..3c235a7 100644 --- a/pkg/util/in_array.go +++ b/pkg/domain/utils/in_array.go @@ -1,4 +1,4 @@ -package util +package utils func InArray(needle string, haystack []string) bool { for _, v := range haystack { diff --git a/pkg/util/IsPrimitiveType.go b/pkg/domain/utils/is_primitive_type.go similarity index 95% rename from pkg/util/IsPrimitiveType.go rename to pkg/domain/utils/is_primitive_type.go index 880f7e7..89f69ab 100644 --- a/pkg/util/IsPrimitiveType.go +++ b/pkg/domain/utils/is_primitive_type.go @@ -1,4 +1,4 @@ -package util +package utils import "slices" diff --git a/pkg/util/IsReadable.go b/pkg/domain/utils/is_readable.go similarity index 93% rename from pkg/util/IsReadable.go rename to pkg/domain/utils/is_readable.go index 31efac6..b05e999 100644 --- a/pkg/util/IsReadable.go +++ b/pkg/domain/utils/is_readable.go @@ -1,4 +1,4 @@ -package util +package utils import "os" diff --git a/pkg/util/IsStruct.go b/pkg/domain/utils/is_struct.go similarity index 95% rename from pkg/util/IsStruct.go rename to pkg/domain/utils/is_struct.go index dd84b9d..67e345a 100644 --- a/pkg/util/IsStruct.go +++ b/pkg/domain/utils/is_struct.go @@ -1,4 +1,4 @@ -package util +package utils import "go/ast" diff --git a/pkg/util/IsWriteable.go b/pkg/domain/utils/is_writeable.go similarity index 89% rename from pkg/util/IsWriteable.go rename to pkg/domain/utils/is_writeable.go index c33f001..49ae0ab 100644 --- a/pkg/util/IsWriteable.go +++ b/pkg/domain/utils/is_writeable.go @@ -1,4 +1,4 @@ -package util +package utils import "golang.org/x/sys/unix" diff --git a/pkg/util/MapKeyExists.go b/pkg/domain/utils/map_key_exists.go similarity index 88% rename from pkg/util/MapKeyExists.go rename to pkg/domain/utils/map_key_exists.go index 1d8154c..c2270e0 100644 --- a/pkg/util/MapKeyExists.go +++ b/pkg/domain/utils/map_key_exists.go @@ -1,4 +1,4 @@ -package util +package utils func MapKeyExists[Key comparable, Value any](v map[Key]Value, k Key) bool { _, ok := v[k] diff --git a/pkg/util/MapKeyIsArrayOfStrings.go b/pkg/domain/utils/map_key_is_array_of_strings.go similarity index 95% rename from pkg/util/MapKeyIsArrayOfStrings.go rename to pkg/domain/utils/map_key_is_array_of_strings.go index 28e9c24..09cba29 100644 --- a/pkg/util/MapKeyIsArrayOfStrings.go +++ b/pkg/domain/utils/map_key_is_array_of_strings.go @@ -1,4 +1,4 @@ -package util +package utils func MapKeyIsArrayOfStrings[Key comparable](v map[Key]interface{}, k Key) bool { mapKeyValue := v[k] diff --git a/pkg/util/MapKeyIsInt.go b/pkg/domain/utils/map_key_is_int.go similarity index 90% rename from pkg/util/MapKeyIsInt.go rename to pkg/domain/utils/map_key_is_int.go index d42c074..6026896 100644 --- a/pkg/util/MapKeyIsInt.go +++ b/pkg/domain/utils/map_key_is_int.go @@ -1,4 +1,4 @@ -package util +package utils func MapKeyIsInt[Key comparable](v map[Key]interface{}, k Key) bool { mapKeyValue := v[k] diff --git a/pkg/util/MapKeyIsString.go b/pkg/domain/utils/map_key_is_string.go similarity index 90% rename from pkg/util/MapKeyIsString.go rename to pkg/domain/utils/map_key_is_string.go index c4727c4..b5bb3f2 100644 --- a/pkg/util/MapKeyIsString.go +++ b/pkg/domain/utils/map_key_is_string.go @@ -1,4 +1,4 @@ -package util +package utils func MapKeyIsString[Key comparable](v map[Key]interface{}, k Key) bool { mapKeyValue := v[k] diff --git a/pkg/util/parse_yaml_file.go b/pkg/domain/utils/parse_yaml_file.go similarity index 97% rename from pkg/util/parse_yaml_file.go rename to pkg/domain/utils/parse_yaml_file.go index 52c14cd..f4ea79b 100644 --- a/pkg/util/parse_yaml_file.go +++ b/pkg/domain/utils/parse_yaml_file.go @@ -1,4 +1,4 @@ -package util +package utils import ( _ "github.com/KoNekoD/go-deptrac/resources" diff --git a/pkg/util/parse_yaml_file_test.go b/pkg/domain/utils/parse_yaml_file_test.go similarity index 95% rename from pkg/util/parse_yaml_file_test.go rename to pkg/domain/utils/parse_yaml_file_test.go index d6481be..fac173b 100644 --- a/pkg/util/parse_yaml_file_test.go +++ b/pkg/domain/utils/parse_yaml_file_test.go @@ -1,4 +1,4 @@ -package util +package utils import ( _ "github.com/KoNekoD/go-deptrac/resources" diff --git a/pkg/util/PathCanonicalize.go b/pkg/domain/utils/path_canonicalize.go similarity index 92% rename from pkg/util/PathCanonicalize.go rename to pkg/domain/utils/path_canonicalize.go index f6e646d..0e47ac9 100644 --- a/pkg/util/PathCanonicalize.go +++ b/pkg/domain/utils/path_canonicalize.go @@ -1,4 +1,4 @@ -package util +package utils import "path/filepath" diff --git a/pkg/util/path_normalize.go b/pkg/domain/utils/path_normalize.go similarity index 88% rename from pkg/util/path_normalize.go rename to pkg/domain/utils/path_normalize.go index 1d056ab..db6d928 100644 --- a/pkg/util/path_normalize.go +++ b/pkg/domain/utils/path_normalize.go @@ -1,4 +1,4 @@ -package util +package utils import "strings" diff --git a/pkg/util/Sha1File.go b/pkg/domain/utils/sha1file.go similarity index 94% rename from pkg/util/Sha1File.go rename to pkg/domain/utils/sha1file.go index d0e00b7..bfa6a0d 100644 --- a/pkg/util/Sha1File.go +++ b/pkg/domain/utils/sha1file.go @@ -1,4 +1,4 @@ -package util +package utils import ( "crypto/sha1" diff --git a/pkg/util/spl_object_id.go b/pkg/domain/utils/spl_object_id.go similarity index 86% rename from pkg/util/spl_object_id.go rename to pkg/domain/utils/spl_object_id.go index 4f771ef..c96ae2d 100644 --- a/pkg/util/spl_object_id.go +++ b/pkg/domain/utils/spl_object_id.go @@ -1,4 +1,4 @@ -package util +package utils import "fmt" diff --git a/pkg/emitters/class_dependency_emitter.go b/pkg/emitters/class_dependency_emitter.go new file mode 100644 index 0000000..ee86b61 --- /dev/null +++ b/pkg/emitters/class_dependency_emitter.go @@ -0,0 +1,39 @@ +package emitters + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type ClassDependencyEmitter struct{} + +func NewClassDependencyEmitter() *ClassDependencyEmitter { + return &ClassDependencyEmitter{} +} + +func (c *ClassDependencyEmitter) GetName() string { + return "ClassDependencyEmitter" +} + +func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + for _, classReference := range astMap.GetClassLikeReferences() { + classLikeName := classReference.GetToken().(*tokens.ClassLikeToken) + + for _, dependencyToken := range classReference.Dependencies { + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeSuperGlobalVariable { + continue + } + + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { + continue + } + + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) + } + + for _, inherit := range astMap.GetClassInherits(classLikeName) { + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies.NewDependencyContext(inherit.FileOccurrence, dependencies.DependencyTypeInherit))) + } + } +} diff --git a/pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go b/pkg/emitters/class_superglobal_dependency_emitter.go similarity index 54% rename from pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go rename to pkg/emitters/class_superglobal_dependency_emitter.go index fd6aaee..24217bf 100644 --- a/pkg/dependency_core/emitter/class_superglobal_dependency_emitter.go +++ b/pkg/emitters/class_superglobal_dependency_emitter.go @@ -1,9 +1,8 @@ -package emitter +package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" ) type ClassSuperglobalDependencyEmitter struct{} @@ -16,13 +15,13 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { return "ClassSuperglobalDependencyEmitter" } -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != dependencies.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependency_core2.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/dependency_emitter_interface.go b/pkg/emitters/dependency_emitter_interface.go new file mode 100644 index 0000000..bffcd1b --- /dev/null +++ b/pkg/emitters/dependency_emitter_interface.go @@ -0,0 +1,11 @@ +package emitters + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" +) + +type DependencyEmitterInterface interface { + GetName() string + ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) +} diff --git a/pkg/emitters/emitter_type.go b/pkg/emitters/emitter_type.go new file mode 100644 index 0000000..20ce89a --- /dev/null +++ b/pkg/emitters/emitter_type.go @@ -0,0 +1,37 @@ +package emitters + +import "errors" + +type EmitterType string + +const ( + EmitterTypeClassToken EmitterType = "class" + EmitterTypeClassSuperGlobalToken EmitterType = "class_superglobal" + EmitterTypeFileToken EmitterType = "file_supportive" + EmitterTypeFunctionToken EmitterType = "function" + EmitterTypeFunctionCall EmitterType = "function_call" + EmitterTypeFunctionSuperGlobalToken EmitterType = "function_superglobal" + EmitterTypeUseToken EmitterType = "use" +) + +func emitterTypeValues() []EmitterType { + return []EmitterType{ + EmitterTypeClassToken, + EmitterTypeClassSuperGlobalToken, + EmitterTypeFileToken, + EmitterTypeFunctionToken, + EmitterTypeFunctionCall, + EmitterTypeFunctionSuperGlobalToken, + EmitterTypeUseToken, + } +} + +func NewEmitterTypeFromString(input string) (EmitterType, error) { + for _, emitterType := range emitterTypeValues() { + if string(emitterType) == input { + return emitterType, nil + } + } + + return "", errors.New("invalid emitter type string: " + input) +} diff --git a/pkg/dependency_core/emitter/file_dependency_emitter.go b/pkg/emitters/file_dependency_emitter.go similarity index 50% rename from pkg/dependency_core/emitter/file_dependency_emitter.go rename to pkg/emitters/file_dependency_emitter.go index 914dad7..643a516 100644 --- a/pkg/dependency_core/emitter/file_dependency_emitter.go +++ b/pkg/emitters/file_dependency_emitter.go @@ -1,9 +1,8 @@ -package emitter +package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" ) type FileDependencyEmitter struct{} @@ -16,18 +15,18 @@ func (f FileDependencyEmitter) GetName() string { return "FileDependencyEmitter" } -func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, dependencyToken := range fileReference.Dependencies { - if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUse { + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUse { continue } - if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { continue } - dependencyList.AddDependency(dependency_core2.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/function_call_dependency_emitter.go b/pkg/emitters/function_call_dependency_emitter.go new file mode 100644 index 0000000..cb90acc --- /dev/null +++ b/pkg/emitters/function_call_dependency_emitter.go @@ -0,0 +1,53 @@ +package emitters + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +type FunctionCallDependencyEmitter struct{} + +func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { + return &FunctionCallDependencyEmitter{} +} + +func (f *FunctionCallDependencyEmitter) GetName() string { + return "FunctionCallDependencyEmitter" +} +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + references := make([]tokens.TokenReferenceWithDependenciesInterface, 0) + for _, reference := range astMap.GetClassLikeReferences() { + references = append(references, reference) + } + f.createDependenciesForReferences(references, astMap, dependencyList) + + references = make([]tokens.TokenReferenceWithDependenciesInterface, 0) + for _, reference := range astMap.GetFunctionReferences() { + references = append(references, reference) + } + f.createDependenciesForReferences(references, astMap, dependencyList) + + references = make([]tokens.TokenReferenceWithDependenciesInterface, 0) + for _, reference := range astMap.GetFileReferences() { + references = append(references, reference) + } + f.createDependenciesForReferences(references, astMap, dependencyList) +} + +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + for _, referenceInterface := range references { + reference := referenceInterface.(tokens.TokenReferenceWithDependenciesInterface) + for _, dependencyToken := range reference.GetDependencies() { + if dependencyToken.Context.DependencyType != dependencies.DependencyTypeUnresolvedFunctionCall { + continue + } + token := dependencyToken.Token + dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), token, dependencyToken.Context)) + functionToken := token.(*tokens.FunctionToken) + if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { + dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + } + } + } +} diff --git a/pkg/dependency_core/emitter/function_dependency_emitter.go b/pkg/emitters/function_dependency_emitter.go similarity index 55% rename from pkg/dependency_core/emitter/function_dependency_emitter.go rename to pkg/emitters/function_dependency_emitter.go index 5d772a2..5b8d301 100644 --- a/pkg/dependency_core/emitter/function_dependency_emitter.go +++ b/pkg/emitters/function_dependency_emitter.go @@ -1,9 +1,8 @@ -package emitter +package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" ) type FunctionDependencyEmitter struct{} @@ -16,19 +15,19 @@ func (f FunctionDependencyEmitter) GetName() string { return "FunctionDependencyEmitter" } -func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeSuperGlobalVariable { continue } - if dependencyToken.Context.DependencyType == ast_contract.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { continue } - dependencyList.AddDependency(dependency_core2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go b/pkg/emitters/function_superglobal_dependency_emitter.go similarity index 58% rename from pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go rename to pkg/emitters/function_superglobal_dependency_emitter.go index 25fa7cc..cfb9f8b 100644 --- a/pkg/dependency_core/emitter/function_superglobal_dependency_emitter.go +++ b/pkg/emitters/function_superglobal_dependency_emitter.go @@ -1,9 +1,8 @@ -package emitter +package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" ) type FunctionSuperglobalDependencyEmitter struct{} @@ -16,15 +15,15 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependency_core2.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType != ast_contract.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != dependencies.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependency_core2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/dependency_contract/post_emit_event.go b/pkg/emitters/post_emit_event.go similarity index 86% rename from pkg/dependency_contract/post_emit_event.go rename to pkg/emitters/post_emit_event.go index ea9a811..61614ed 100644 --- a/pkg/dependency_contract/post_emit_event.go +++ b/pkg/emitters/post_emit_event.go @@ -1,4 +1,4 @@ -package dependency_contract +package emitters // PostEmitEvent - Event triggered after all the dependencies have been resolved. type PostEmitEvent struct{} diff --git a/pkg/dependency_contract/pre_emit_event.go b/pkg/emitters/pre_emit_event.go similarity index 89% rename from pkg/dependency_contract/pre_emit_event.go rename to pkg/emitters/pre_emit_event.go index 7bbb745..07d2449 100644 --- a/pkg/dependency_contract/pre_emit_event.go +++ b/pkg/emitters/pre_emit_event.go @@ -1,4 +1,4 @@ -package dependency_contract +package emitters // PreEmitEvent - Event triggered before all the dependencies have been resolved. type PreEmitEvent struct { diff --git a/pkg/dependency_core/emitter/uses_dependency_emitter.go b/pkg/emitters/uses_dependency_emitter.go similarity index 62% rename from pkg/dependency_core/emitter/uses_dependency_emitter.go rename to pkg/emitters/uses_dependency_emitter.go index 62fdd9b..be4e1bd 100644 --- a/pkg/dependency_core/emitter/uses_dependency_emitter.go +++ b/pkg/emitters/uses_dependency_emitter.go @@ -1,9 +1,10 @@ -package emitter +package emitters import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - dependency_core2 "github.com/KoNekoD/go-deptrac/pkg/dependency_core" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/tokens" "strings" ) @@ -17,8 +18,8 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, dependencyList *dependency_core2.DependencyList) { - references := make([]ast_contract2.TaggedTokenReferenceInterface, 0) +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + references := make([]tokens.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) } @@ -31,7 +32,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, depend referencesFQDN = append(referencesFQDN, reference.GetToken().ToString()) } - FQDNIndex := FQDNIndexNode{} + FQDNIndex := nodes.FQDNIndexNode{} for _, reference := range referencesFQDN { pathSplit := strings.Split(reference, "\\") @@ -41,15 +42,15 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map2.AstMap, depend for _, fileReference := range astMap.GetFileReferences() { for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { - if emittedDependency.Context.DependencyType == ast_contract2.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { - dependencyList.AddDependency(dependency_core2.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) + if emittedDependency.Context.DependencyType == dependencies.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { + dependencyList.AddDependency(dependencies.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } } } } -func (u *UsesDependencyEmitter) IsFQDN(dependency *ast_map2.DependencyToken, FQDNIndex FQDNIndexNode) bool { +func (u *UsesDependencyEmitter) IsFQDN(dependency *tokens.DependencyToken, FQDNIndex nodes.FQDNIndexNode) bool { dependencyFQDN := dependency.Token.ToString() pathSplit := strings.Split(dependencyFQDN, "\\") value := FQDNIndex.GetNestedNode(pathSplit) diff --git a/pkg/config_contract/codeclimate_level_enum.go b/pkg/enums/codeclimate_level_enum.go similarity index 93% rename from pkg/config_contract/codeclimate_level_enum.go rename to pkg/enums/codeclimate_level_enum.go index f8df679..5dfb336 100644 --- a/pkg/config_contract/codeclimate_level_enum.go +++ b/pkg/enums/codeclimate_level_enum.go @@ -1,4 +1,4 @@ -package config_contract +package enums type CodeclimateLevelEnum string diff --git a/pkg/result_contract/rule_type_enum.go b/pkg/enums/rule_type_enum.go similarity index 66% rename from pkg/result_contract/rule_type_enum.go rename to pkg/enums/rule_type_enum.go index 3ef4597..691c47a 100644 --- a/pkg/result_contract/rule_type_enum.go +++ b/pkg/enums/rule_type_enum.go @@ -1,7 +1,8 @@ -package result_contract +package enums import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/rules" ) type RuleTypeEnum string @@ -13,15 +14,15 @@ const ( TypeAllowed RuleTypeEnum = "allowed" ) -func NewRuleTypeEnumByRule(rule RuleInterface) RuleTypeEnum { +func NewRuleTypeEnumByRule(rule rules.RuleInterface) RuleTypeEnum { switch rule.(type) { - case *Violation: + case *rules.Violation: return TypeViolation - case *SkippedViolation: + case *rules.SkippedViolation: return TypeSkippedViolation - case *Uncovered: + case *rules.Uncovered: return TypeUncovered - case *Allowed: + case *rules.Allowed: return TypeAllowed default: panic(fmt.Errorf("unknown rule type: %T", rule)) diff --git a/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go b/pkg/events/event_dispatcher_interface.go similarity index 70% rename from pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go rename to pkg/events/event_dispatcher_interface.go index 9e2c23d..a2774a1 100644 --- a/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface/event_dispatcher_interface.go +++ b/pkg/events/event_dispatcher_interface.go @@ -1,4 +1,4 @@ -package event_dispatcher_interface +package events type EventDispatcherInterface interface { DispatchEvent(event interface{}) error diff --git a/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go b/pkg/events/event_dispatcher_interface2.go similarity index 73% rename from pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go rename to pkg/events/event_dispatcher_interface2.go index feacba7..995b2d9 100644 --- a/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface.go +++ b/pkg/events/event_dispatcher_interface2.go @@ -1,9 +1,8 @@ -package event_dispatcher +package events import ( "fmt" - util "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_dispatcher/event_dispatcher_interface" - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/event_subscriber_interface_map" + subscribers2 "github.com/KoNekoD/go-deptrac/pkg/subscribers" "reflect" "slices" ) @@ -12,7 +11,7 @@ type EventDispatcher struct { isDebug bool } -func NewEventDispatcher(isDebug bool) util.EventDispatcherInterface { +func NewEventDispatcher(isDebug bool) EventDispatcherInterface { return &EventDispatcher{ isDebug: isDebug, } @@ -21,7 +20,7 @@ func NewEventDispatcher(isDebug bool) util.EventDispatcherInterface { func (d *EventDispatcher) DispatchEvent(event interface{}) error { typeName := reflect.TypeOf(event).String() - subscribers, ok := event_subscriber_interface_map.Map.Get(typeName) + subscribers, ok := subscribers2.Map.Get(typeName) if !ok { return nil // No subscribers registered for this event diff --git a/pkg/analyser_contract/event_helper/event_helper.go b/pkg/events/event_helper.go similarity index 53% rename from pkg/analyser_contract/event_helper/event_helper.go rename to pkg/events/event_helper.go index b3c0dc2..483ab93 100644 --- a/pkg/analyser_contract/event_helper/event_helper.go +++ b/pkg/events/event_helper.go @@ -1,22 +1,20 @@ -package event_helper +package events import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/violations" ) // EventHelper - Utility class for managing adding violations that could be skipped. type EventHelper struct { UnmatchedSkippedViolation map[string][]string SkippedViolations map[string][]string - LayerProvider *layer_contract.LayerProvider + LayerProvider *layers.LayerProvider } -func NewEventHelper(skippedViolations map[string][]string, layerProvider *layer_contract.LayerProvider) *EventHelper { +func NewEventHelper(skippedViolations map[string][]string, layerProvider *layers.LayerProvider) *EventHelper { return &EventHelper{ UnmatchedSkippedViolation: skippedViolations, SkippedViolations: skippedViolations, @@ -30,14 +28,14 @@ func (e *EventHelper) shouldViolationBeSkipped(depender string, dependent string return false } - matched := len(skippedViolation) > 0 && util.InArray(dependent, skippedViolation) + matched := len(skippedViolation) > 0 && utils.InArray(dependent, skippedViolation) if !matched { return false } // remove unmatched if exists unmatchedSkippedViolationDeonder, ok := e.UnmatchedSkippedViolation[depender] - if ok && util.InArray(dependent, unmatchedSkippedViolationDeonder) { + if ok && utils.InArray(dependent, unmatchedSkippedViolationDeonder) { UnmatchedSkippedViolationNew := make([]string, 0) for _, s := range e.UnmatchedSkippedViolation[depender] { if dependent != s { @@ -55,10 +53,10 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *process_event.ProcessEvent, analysisResult *analysis_result.AnalysisResult, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *ProcessEvent, analysisResult *rules.AnalysisResult, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(result_contract2.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(rules.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(result_contract2.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(rules.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/events/post_process_event.go b/pkg/events/post_process_event.go new file mode 100644 index 0000000..faa2904 --- /dev/null +++ b/pkg/events/post_process_event.go @@ -0,0 +1,24 @@ +package events + +import ( + "github.com/KoNekoD/go-deptrac/pkg/rules" +) + +// PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result_contract of the analysis after it has completed and before it is returned for output processing. +type PostProcessEvent struct { + result *rules.AnalysisResult +} + +func NewPostProcessEvent(result *rules.AnalysisResult) *PostProcessEvent { + return &PostProcessEvent{ + result: result, + } +} + +func (e *PostProcessEvent) GetResult() *rules.AnalysisResult { + return e.result +} + +func (e *PostProcessEvent) ReplaceResult(result *rules.AnalysisResult) { + e.result = result +} diff --git a/pkg/events/process_event.go b/pkg/events/process_event.go new file mode 100644 index 0000000..4d1ebb3 --- /dev/null +++ b/pkg/events/process_event.go @@ -0,0 +1,43 @@ +package events + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +// ProcessEvent - Event that is triggered on every found dependency_contract. Used to apply rules on the found dependencies. +type ProcessEvent struct { + Dependency dependencies.DependencyInterface + DependerReference tokens.TokenReferenceInterface + DependerLayer string + DependentReference tokens.TokenReferenceInterface + DependentLayers map[string]bool + result *rules.AnalysisResult +} + +func NewProcessEvent( + dependency dependencies.DependencyInterface, + dependerReference tokens.TokenReferenceInterface, + dependerLayer string, + dependentReference tokens.TokenReferenceInterface, + dependentLayers map[string]bool, + result *rules.AnalysisResult, +) *ProcessEvent { + return &ProcessEvent{ + Dependency: dependency, + DependerReference: dependerReference, + DependerLayer: dependerLayer, + DependentReference: dependentReference, + DependentLayers: dependentLayers, + result: result, + } +} + +func (e *ProcessEvent) GetResult() *rules.AnalysisResult { + return e.result +} + +func (e *ProcessEvent) ReplaceResult(result *rules.AnalysisResult) { + e.result = result +} diff --git a/pkg/ast_core/parser/extractors/AnonymousClassExtractor.php b/pkg/extractors/AnonymousClassExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/AnonymousClassExtractor.php rename to pkg/extractors/AnonymousClassExtractor.php diff --git a/pkg/ast_core/parser/extractors/ClassConstantExtractor.php b/pkg/extractors/ClassConstantExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/ClassConstantExtractor.php rename to pkg/extractors/ClassConstantExtractor.php diff --git a/pkg/ast_core/parser/extractors/FunctionCallResolver.php b/pkg/extractors/FunctionCallResolver.php similarity index 100% rename from pkg/ast_core/parser/extractors/FunctionCallResolver.php rename to pkg/extractors/FunctionCallResolver.php diff --git a/pkg/ast_core/parser/extractors/FunctionLikeExtractor.php b/pkg/extractors/FunctionLikeExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/FunctionLikeExtractor.php rename to pkg/extractors/FunctionLikeExtractor.php diff --git a/pkg/ast_core/parser/extractors/KeywordExtractor.php b/pkg/extractors/KeywordExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/KeywordExtractor.php rename to pkg/extractors/KeywordExtractor.php diff --git a/pkg/ast_core/parser/extractors/PropertyExtractor.php b/pkg/extractors/PropertyExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/PropertyExtractor.php rename to pkg/extractors/PropertyExtractor.php diff --git a/pkg/ast_core/parser/extractors/StaticExtractor.php b/pkg/extractors/StaticExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/StaticExtractor.php rename to pkg/extractors/StaticExtractor.php diff --git a/pkg/ast_core/parser/extractors/VariableExtractor.php b/pkg/extractors/VariableExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/VariableExtractor.php rename to pkg/extractors/VariableExtractor.php diff --git a/pkg/dependency_core/inheritance_flattener.go b/pkg/flatteners/inheritance_flattener.go similarity index 52% rename from pkg/dependency_core/inheritance_flattener.go rename to pkg/flatteners/inheritance_flattener.go index baaa237..36ae4ed 100644 --- a/pkg/dependency_core/inheritance_flattener.go +++ b/pkg/flatteners/inheritance_flattener.go @@ -1,7 +1,9 @@ -package dependency_core +package flatteners import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type InheritanceFlattener struct{} @@ -10,12 +12,12 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { - classLikeName := classLikeReference.GetToken().(*ast_map.ClassLikeToken) + classLikeName := classLikeReference.GetToken().(*tokens.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { for _, dep := range dependencyList.GetDependenciesByClass(inherit.ClassLikeName.ToString()) { - dependencyList.AddInheritDependency(NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) + dependencyList.AddInheritDependency(dependencies.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) } } } diff --git a/pkg/dependency_contract/post_flatten_event.go b/pkg/flatteners/post_flatten_event.go similarity index 90% rename from pkg/dependency_contract/post_flatten_event.go rename to pkg/flatteners/post_flatten_event.go index 7711127..5fb494a 100644 --- a/pkg/dependency_contract/post_flatten_event.go +++ b/pkg/flatteners/post_flatten_event.go @@ -1,4 +1,4 @@ -package dependency_contract +package flatteners // PostFlattenEvent - Event triggered after all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PostFlattenEvent struct{} diff --git a/pkg/dependency_contract/pre_flatten_event.go b/pkg/flatteners/pre_flatten_event.go similarity index 90% rename from pkg/dependency_contract/pre_flatten_event.go rename to pkg/flatteners/pre_flatten_event.go index abaca26..252f37b 100644 --- a/pkg/dependency_contract/pre_flatten_event.go +++ b/pkg/flatteners/pre_flatten_event.go @@ -1,4 +1,4 @@ -package dependency_contract +package flatteners // PreFlattenEvent - Event triggered before all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PreFlattenEvent struct{} diff --git a/pkg/output_formatter_supportive/baseline_output_formatter.go b/pkg/formatters/baseline_output_formatter.go similarity index 64% rename from pkg/output_formatter_supportive/baseline_output_formatter.go rename to pkg/formatters/baseline_output_formatter.go index 1fb0ca3..18b50ca 100644 --- a/pkg/output_formatter_supportive/baseline_output_formatter.go +++ b/pkg/formatters/baseline_output_formatter.go @@ -1,9 +1,8 @@ -package output_formatter_supportive +package formatters import ( - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" @@ -20,7 +19,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -36,7 +35,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResul if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { if err := os.MkdirAll(dirname, 0777); err != nil { if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) return err } } @@ -52,14 +51,14 @@ func (b *BaselineOutputFormatter) Finish(outputResult *output_result.OutputResul return err } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) return nil } -func (b *BaselineOutputFormatter) collectViolations(outputResult *output_result.OutputResult) map[string][]string { +func (b *BaselineOutputFormatter) collectViolations(outputResult *results.OutputResult) map[string][]string { violations := make(map[string]map[string]string) - for _, rule := range append(outputResult.AllOf(result_contract.TypeViolation), outputResult.AllOf(result_contract.TypeSkippedViolation)...) { + for _, rule := range append(outputResult.AllOf(enums.TypeViolation), outputResult.AllOf(enums.TypeSkippedViolation)...) { dependency := rule.GetDependency() dependerClass := dependency.GetDepender().ToString() dependentClass := dependency.GetDependent().ToString() diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go new file mode 100644 index 0000000..6ffbce7 --- /dev/null +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -0,0 +1,119 @@ +package formatters + +import ( + "crypto/sha1" + "encoding/json" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "os" +) + +type CodeclimateOutputFormatter struct { + config map[configs.SeverityType]interface{} +} + +func NewCodeclimateOutputFormatter(config FormatterConfiguration) *CodeclimateOutputFormatter { + extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configs.SeverityType]interface{}) + return &CodeclimateOutputFormatter{config: extractedConfig} +} + +func (f *CodeclimateOutputFormatter) GetName() string { + return "codeclimate" +} + +func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { + formatterConfig := configs.NewConfigurationCodeclimateFromArray(f.config) + var violations []map[string]interface{} + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + f.addSkipped(&violations, rule.(*rules.SkippedViolation), formatterConfig) + } + } + + if input.ReportUncovered { + for _, rule := range outputResult.AllOf(enums.TypeUncovered) { + f.addUncovered(&violations, rule.(*rules.Uncovered), formatterConfig) + } + } + + for _, rule := range outputResult.AllOf(enums.TypeViolation) { + f.addFailure(&violations, rule.(*rules.Violation), formatterConfig) + } + + jsonData, err := json.MarshalIndent(violations, "", " ") + if err != nil { + return fmt.Errorf("unable to render codeclimate output: %v", err) + } + + if input.OutputPath != nil && *input.OutputPath != "" { + err := os.WriteFile(*input.OutputPath, jsonData, 0644) + if err != nil { + return err + } + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + return nil + } + + output.WriteRaw(string(jsonData)) + return nil +} + +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *rules.Violation, config *configs.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) +} + +func (f *CodeclimateOutputFormatter) getFailureMessage(violation *rules.Violation) *string { + dependency := violation.GetDependency() + return utils.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) +} + +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *rules.SkippedViolation, config *configs.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) +} + +func (f *CodeclimateOutputFormatter) getWarningMessage(violation *rules.SkippedViolation) *string { + dependency := violation.GetDependency() + return utils.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) +} + +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *rules.Uncovered, config *configs.ConfigurationCodeclimate) { + *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) +} + +func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *rules.Uncovered) *string { + dependency := violation.GetDependency() + return utils.AsPtr(fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) +} + +func (f *CodeclimateOutputFormatter) buildRuleArray(rule rules.RuleInterface, message, severity *string) map[string]interface{} { + return map[string]interface{}{ + "type": "issue", + "check_name": "Dependency violation", + "fingerprint": f.buildFingerprint(rule), + "description": message, + "categories": []string{"Style", "Complexity"}, + "severity": severity, + "location": map[string]interface{}{ + "path": rule.GetDependency().GetContext().FileOccurrence.FilePath, + "lines": map[string]interface{}{ + "begin": rule.GetDependency().GetContext().FileOccurrence.Line, + }, + }, + } +} + +func (f *CodeclimateOutputFormatter) buildFingerprint(rule rules.RuleInterface) string { + data := fmt.Sprintf("%s,%s,%s,%s,%d", + rule, + rule.GetDependency().GetDepender(), + rule.GetDependency().GetDependent(), + rule.GetDependency().GetContext().FileOccurrence.FilePath, + rule.GetDependency().GetContext().FileOccurrence.Line) + + return fmt.Sprintf("%x", sha1.Sum([]byte(data))) +} diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go new file mode 100644 index 0000000..66f4eff --- /dev/null +++ b/pkg/formatters/console_output_formatter.go @@ -0,0 +1,160 @@ +package formatters + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/violations" + "strings" +) + +type ConsoleOutputFormatter struct{} + +func NewConsoleOutputFormatter() *ConsoleOutputFormatter { + return &ConsoleOutputFormatter{} +} + +func (f *ConsoleOutputFormatter) GetName() string { + return "console_supportive" +} + +func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) { + for _, rule := range outputResult.AllOf(enums.TypeViolation) { + f.printViolation(rule.(*rules.Violation), output) + } + + if input.ReportSkipped { + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + f.printViolation(rule.(*rules.SkippedViolation), output) + } + } + + if input.ReportUncovered { + f.printUncovered(outputResult, output) + } + + if outputResult.HasErrors() { + f.printErrors(outputResult, output) + } + + if outputResult.HasWarnings() { + f.printWarnings(outputResult, output) + } + + f.printSummary(outputResult, output) +} + +func (f *ConsoleOutputFormatter) printViolation(rule rules.RuleInterface, output results.OutputInterface) { + dep := rule.GetDependency() + skippedText := "" + + dependerLayer := "" + dependentLayer := "" + + if ruleAsserted, ok := rule.(*rules.SkippedViolation); ok { + skippedText = "[SKIPPED] " + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else if ruleAsserted, ok := rule.(*rules.Violation); ok { + dependerLayer = ruleAsserted.GetDependerLayer() + dependentLayer = ruleAsserted.GetDependentLayer() + } else { + panic(fmt.Errorf("unknown rule type: %T", rule)) + } + + output.WriteLineFormatted( + results.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", + skippedText, + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + dependerLayer, + dependentLayer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } +} + +func (f *ConsoleOutputFormatter) printMultilinePath(output results.OutputInterface, dep dependencies.DependencyInterface) { + var buffer strings.Builder + for _, depSerialized := range dep.Serialize() { + buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) + } + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: buffer.String()}) +} + +func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, output results.OutputInterface) { + violationCount := len(result.Violations()) + skippedViolationCount := len(result.SkippedViolations()) + uncoveredCount := len(result.Uncovered()) + allowedCount := len(result.Allowed()) + warningsCount := len(result.Warnings) + errorsCount := len(result.Errors) + + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) +} + +func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, output results.OutputInterface) { + uncovered := result.Uncovered() + if len(uncovered) == 0 { + return + } + + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + for _, u := range uncovered { + dep := u.GetDependency() + output.WriteLineFormatted( + results.StringOrArrayOfStrings{ + String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", + dep.GetDepender().ToString(), + dep.GetDependent().ToString(), + u.Layer, + ), + }, + ) + f.printFileOccurrence(output, dep.GetContext().FileOccurrence) + + if len(dep.Serialize()) > 1 { + f.printMultilinePath(output, dep) + } + } +} + +func (f *ConsoleOutputFormatter) printFileOccurrence(output results.OutputInterface, fileOccurrence *violations.FileOccurrence) { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +} + +func (f *ConsoleOutputFormatter) printErrors(result results.OutputResult, output results.OutputInterface) { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + for _, err := range result.Errors { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + } +} + +func (f *ConsoleOutputFormatter) printWarnings(result results.OutputResult, output results.OutputInterface) { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + for _, warning := range result.Warnings { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + } +} + +func (f *ConsoleOutputFormatter) getColor(condition bool, trueColor, falseColor string) string { + if condition { + return trueColor + } + return falseColor +} diff --git a/pkg/config_contract/formatter/formatter_config_interface.go b/pkg/formatters/formatter_config_interface.go similarity index 84% rename from pkg/config_contract/formatter/formatter_config_interface.go rename to pkg/formatters/formatter_config_interface.go index 9f12ec6..e2e9335 100644 --- a/pkg/config_contract/formatter/formatter_config_interface.go +++ b/pkg/formatters/formatter_config_interface.go @@ -1,4 +1,4 @@ -package formatter +package formatters type FormatterConfigInterface interface { GetName() FormatterType diff --git a/pkg/formatters/formatter_configuration.go b/pkg/formatters/formatter_configuration.go new file mode 100644 index 0000000..2d7b1d8 --- /dev/null +++ b/pkg/formatters/formatter_configuration.go @@ -0,0 +1,13 @@ +package formatters + +type FormatterConfiguration struct { + config map[FormatterType]FormatterConfigInterface +} + +func NewFormatterConfiguration(config map[FormatterType]FormatterConfigInterface) *FormatterConfiguration { + return &FormatterConfiguration{config: config} +} + +func (f *FormatterConfiguration) GetConfigFor(area FormatterType) FormatterConfigInterface { + return f.config[area] +} diff --git a/pkg/formatters/formatter_provider.go b/pkg/formatters/formatter_provider.go new file mode 100644 index 0000000..24384c2 --- /dev/null +++ b/pkg/formatters/formatter_provider.go @@ -0,0 +1,36 @@ +package formatters + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "golang.org/x/exp/maps" + "reflect" +) + +type FormatterProvider struct { + formatterLocator map[OutputFormatterType]OutputFormatterInterface +} + +func NewFormatterProvider(formatterLocator map[OutputFormatterType]OutputFormatterInterface) *FormatterProvider { + return &FormatterProvider{ + formatterLocator: formatterLocator, + } +} + +func (f *FormatterProvider) Get(id OutputFormatterType) (OutputFormatterInterface, error) { + service, ok := f.formatterLocator[id] + + if !ok { + return nil, apperrors.NewInvalidServiceInLocatorExceptionInvalidType(string(id), reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") + } + + return service, nil +} + +func (f *FormatterProvider) Has(id OutputFormatterType) bool { + _, ok := f.formatterLocator[id] + return ok +} + +func (f *FormatterProvider) GetKnownFormatters() []OutputFormatterType { + return maps.Keys(f.formatterLocator) +} diff --git a/pkg/config_contract/formatter/formatter_type.go b/pkg/formatters/formatter_type.go similarity index 92% rename from pkg/config_contract/formatter/formatter_type.go rename to pkg/formatters/formatter_type.go index 028137b..e3146c3 100644 --- a/pkg/config_contract/formatter/formatter_type.go +++ b/pkg/formatters/formatter_type.go @@ -1,4 +1,4 @@ -package formatter +package formatters type FormatterType string diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go new file mode 100644 index 0000000..fd7426e --- /dev/null +++ b/pkg/formatters/github_actions_output_formatter.go @@ -0,0 +1,120 @@ +package formatters + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "strings" +) + +type GithubActionsOutputFormatter struct{} + +func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { + return &GithubActionsOutputFormatter{} +} + +func (g *GithubActionsOutputFormatter) GetName() OutputFormatterType { + return GithubActions +} + +func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { + for _, rule := range outputResult.AllOf(enums.TypeViolation) { + g.printViolation(rule, output) + } + if outputFormatterInput.ReportSkipped { + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + g.printViolation(rule, output) + } + } + if outputFormatterInput.ReportUncovered { + g.printUncovered(outputResult, output, outputFormatterInput.FailOnUncovered) + } + if outputResult.HasErrors() { + g.printErrors(outputResult, output) + } + if outputResult.HasWarnings() { + g.printWarnings(outputResult, output) + } + + return nil +} + +func (g *GithubActionsOutputFormatter) determineLogLevel(rule rules.RuleInterface) string { + switch rule.(type) { + case *rules.Violation: + return "error" + case *rules.SkippedViolation: + return "warning" + default: + return "debug" + } +} + +func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResult, output results.OutputInterface, reportAsError bool) { + for _, u := range result.Uncovered() { + dependency := u.GetDependency() + + reportAs := "warning" + if reportAsError { + reportAs = "error" + } + + output.WriteLineFormatted( + results.StringOrArrayOfStrings{ + String: fmt.Sprintf( + "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", + reportAs, + dependency.GetContext().FileOccurrence.FilePath, + dependency.GetContext().FileOccurrence.Line, + dependency.GetDepender().ToString(), + dependency.GetDependent().ToString(), + u.Layer, + ), + }, + ) + } +} + +func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.DependencyInterface) string { + lines := make([]string, 0) + for _, serializedDependency := range dep.Serialize() { + lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) + } + return strings.Join(lines, " ->%0A") +} + +func (g *GithubActionsOutputFormatter) printErrors(result *results.OutputResult, output results.OutputInterface) { + for _, e := range result.Errors { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + } +} + +func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResult, output results.OutputInterface) { + for _, warning := range result.Warnings { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + } +} + +func (g *GithubActionsOutputFormatter) printViolation(rule rules.RuleInterface, output results.OutputInterface) { + dependency := rule.GetDependency() + prefix := "" + dependerLayer := "" + dependentLayer := "" + switch v := rule.(type) { + case *rules.SkippedViolation: + prefix = "[SKIPPED] " + dependerLayer = v.GetDependerLayer() + dependentLayer = v.GetDependentLayer() + case *rules.Violation: + dependerLayer = v.GetDependerLayer() + dependentLayer = v.GetDependentLayer() + } + message := fmt.Sprintf("%s%s must not depend on %s (%s on %s)", prefix, dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), dependerLayer, dependentLayer) + if len(dependency.Serialize()) > 1 { + message += "%0A" + g.multilinePathMessage(dependency) + + } + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) +} diff --git a/pkg/output_formatter_supportive/graph_viz_output_display_formatter.go b/pkg/formatters/graph_viz_output_display_formatter.go similarity index 71% rename from pkg/output_formatter_supportive/graph_viz_output_display_formatter.go rename to pkg/formatters/graph_viz_output_display_formatter.go index f8267b7..34be162 100644 --- a/pkg/output_formatter_supportive/graph_viz_output_display_formatter.go +++ b/pkg/formatters/graph_viz_output_display_formatter.go @@ -1,9 +1,8 @@ -package output_formatter_supportive +package formatters import ( "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/results" "os/exec" "runtime" "time" @@ -18,7 +17,7 @@ type GraphVizOutputDisplayFormatter struct { const DelayOpen = 2 * time.Second -func NewGraphVizOutputDisplayFormatter(config configuration.FormatterConfiguration) *GraphVizOutputDisplayFormatter { +func NewGraphVizOutputDisplayFormatter(config FormatterConfiguration) *GraphVizOutputDisplayFormatter { return &GraphVizOutputDisplayFormatter{ GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), } @@ -28,7 +27,7 @@ func (f *GraphVizOutputDisplayFormatter) GetName() string { return "graphviz-display" } -func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) diff --git a/pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go b/pkg/formatters/graph_viz_output_dot_formatter.go similarity index 62% rename from pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go rename to pkg/formatters/graph_viz_output_dot_formatter.go index a59380d..c20619d 100644 --- a/pkg/output_formatter_supportive/graph_viz_output_dot_formatter.go +++ b/pkg/formatters/graph_viz_output_dot_formatter.go @@ -1,9 +1,8 @@ -package output_formatter_supportive +package formatters import ( "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" @@ -15,7 +14,7 @@ type GraphVizOutputDotFormatter struct { GraphVizOutputFormatter } -func NewGraphVizOutputDotFormatter(config configuration.FormatterConfiguration) *GraphVizOutputDotFormatter { +func NewGraphVizOutputDotFormatter(config FormatterConfiguration) *GraphVizOutputDotFormatter { return &GraphVizOutputDotFormatter{ GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), } @@ -25,7 +24,7 @@ func (f *GraphVizOutputDotFormatter) GetName() string { return "graphviz-dot" } -func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { dumpDotPath := input.OutputPath if dumpDotPath == nil || *dumpDotPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -43,6 +42,6 @@ func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph. // return fmt.Errorf("unable to write DOT data to file_supportive: %v", err) //} - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) return nil } diff --git a/pkg/output_formatter_supportive/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go similarity index 73% rename from pkg/output_formatter_supportive/graph_viz_output_formatter.go rename to pkg/formatters/graph_viz_output_formatter.go index 9946c9c..d60b611 100644 --- a/pkg/output_formatter_supportive/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -1,11 +1,10 @@ -package output_formatter_supportive +package formatters import ( "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - configuration2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -14,15 +13,15 @@ import ( ) type GraphVizOutputFormatter struct { - config configuration2.ConfigurationGraphViz + config configs.ConfigurationGraphViz } -func NewGraphVizOutputFormatter(config configuration2.FormatterConfiguration) *GraphVizOutputFormatter { - extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configuration2.ConfigurationGraphViz) +func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFormatter { + extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configs.ConfigurationGraphViz) return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) @@ -49,7 +48,7 @@ func (f *GraphVizOutputFormatter) Finish(result output_result.OutputResult, outp return nil } -func (f *GraphVizOutputFormatter) calculateViolations(violations []*result_contract2.Violation) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateViolations(violations []*rules.Violation) map[string]map[string]int { layerViolations := make(map[string]map[string]int) for _, violation := range violations { dependerLayer := violation.GetDependerLayer() @@ -64,11 +63,11 @@ func (f *GraphVizOutputFormatter) calculateViolations(violations []*result_contr return layerViolations } -func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result_contract2.RuleInterface) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []rules.RuleInterface) map[string]map[string]int { layersDependOnLayers := make(map[string]map[string]int) - for _, rule := range rules { + for _, rule := range rulesList { switch r := rule.(type) { - case result_contract2.CoveredRuleInterface: + case rules.CoveredRuleInterface: layerA := r.GetDependerLayer() layerB := r.GetDependentLayer() @@ -77,7 +76,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result_cont } layersDependOnLayers[layerA][layerB]++ - case *result_contract2.Uncovered: + case *rules.Uncovered: if layersDependOnLayers[r.Layer] == nil { layersDependOnLayers[r.Layer] = make(map[string]int) } @@ -86,7 +85,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rules []result_cont return layersDependOnLayers } -func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration2.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { +func (f *GraphVizOutputFormatter) createNodes(outputConfig configs.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { nodes := make(map[string]*cgraph.Node) for layer, layersDependOn := range layersDependOnLayers { if slices.Contains(outputConfig.HiddenLayers, layer) { @@ -107,7 +106,7 @@ func (f *GraphVizOutputFormatter) createNodes(outputConfig configuration2.Config return nodes } -func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration2.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { +func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configs.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { for layer, layersDependOn := range layersDependOnLayers { if slices.Contains(outputConfig.HiddenLayers, layer) { continue @@ -130,7 +129,7 @@ func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[st } } -func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configuration2.ConfigurationGraphViz) { +func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configs.ConfigurationGraphViz) { for groupName, groupLayerNames := range outputConfig.GroupsLayerMap { subgraph := graph.SubGraph(f.getSubgraphName(groupName), 1) subgraph.SetLabel(groupName) @@ -148,7 +147,7 @@ func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map } } -func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) @@ -158,11 +157,11 @@ func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Gra if err := os.Rename(filename, *input.OutputPath); err != nil { return fmt.Errorf("unable to move temp file_supportive to output path: %v", err) } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) return nil } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) return nil } diff --git a/pkg/output_formatter_supportive/graph_viz_output_html_formatter.go b/pkg/formatters/graph_viz_output_html_formatter.go similarity index 72% rename from pkg/output_formatter_supportive/graph_viz_output_html_formatter.go rename to pkg/formatters/graph_viz_output_html_formatter.go index 7211a60..c40a59d 100644 --- a/pkg/output_formatter_supportive/graph_viz_output_html_formatter.go +++ b/pkg/formatters/graph_viz_output_html_formatter.go @@ -1,10 +1,9 @@ -package output_formatter_supportive +package formatters import ( "encoding/base64" "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" @@ -16,7 +15,7 @@ type GraphVizOutputHtmlFormatter struct { GraphVizOutputFormatter } -func NewGraphVizOutputHtmlFormatter(config configuration.FormatterConfiguration) *GraphVizOutputHtmlFormatter { +func NewGraphVizOutputHtmlFormatter(config FormatterConfiguration) *GraphVizOutputHtmlFormatter { return &GraphVizOutputHtmlFormatter{ GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), } @@ -26,7 +25,7 @@ func (f *GraphVizOutputHtmlFormatter) GetName() string { return "graphviz-html" } -func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { dumpHtmlPath := input.OutputPath if dumpHtmlPath == nil || *dumpHtmlPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -63,6 +62,6 @@ func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph return fmt.Errorf("unable to write HTML file_supportive: %v", err) } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) return nil } diff --git a/pkg/output_formatter_supportive/graph_viz_output_image_formatter.go b/pkg/formatters/graph_viz_output_image_formatter.go similarity index 70% rename from pkg/output_formatter_supportive/graph_viz_output_image_formatter.go rename to pkg/formatters/graph_viz_output_image_formatter.go index d91c299..3a00c7c 100644 --- a/pkg/output_formatter_supportive/graph_viz_output_image_formatter.go +++ b/pkg/formatters/graph_viz_output_image_formatter.go @@ -1,9 +1,8 @@ -package output_formatter_supportive +package formatters import ( "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" + "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" @@ -15,7 +14,7 @@ type GraphVizOutputImageFormatter struct { GraphVizOutputFormatter } -func NewGraphVizOutputImageFormatter(config configuration.FormatterConfiguration) *GraphVizOutputImageFormatter { +func NewGraphVizOutputImageFormatter(config FormatterConfiguration) *GraphVizOutputImageFormatter { return &GraphVizOutputImageFormatter{ GraphVizOutputFormatter: *NewGraphVizOutputFormatter(config), } @@ -25,7 +24,7 @@ func (f *GraphVizOutputImageFormatter) GetName() string { return "graphviz-image" } -func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { dumpImagePath := input.OutputPath if dumpImagePath == nil || *dumpImagePath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -40,7 +39,7 @@ func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgrap return fmt.Errorf("unable to display output: %v", err) } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", dumpImagePath)}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) return nil } diff --git a/pkg/output_formatter_supportive/json_output_formatter.go b/pkg/formatters/json_output_formatter.go similarity index 70% rename from pkg/output_formatter_supportive/json_output_formatter.go rename to pkg/formatters/json_output_formatter.go index 0ebf40b..0e94de7 100644 --- a/pkg/output_formatter_supportive/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -1,11 +1,11 @@ -package output_formatter_supportive +package formatters import ( "encoding/json" "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -20,22 +20,22 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { - f.addSkipped(violations, rule.(*result_contract2.SkippedViolation)) + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + f.addSkipped(violations, rule.(*rules.SkippedViolation)) } } if input.ReportUncovered { - for _, rule := range outputResult.AllOf(result_contract2.TypeUncovered) { - f.addUncovered(violations, rule.(*result_contract2.Uncovered)) + for _, rule := range outputResult.AllOf(enums.TypeUncovered) { + f.addUncovered(violations, rule.(*rules.Uncovered)) } } - for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { - f.addFailure(violations, rule.(*result_contract2.Violation)) + for _, rule := range outputResult.AllOf(enums.TypeViolation) { + f.addFailure(violations, rule.(*rules.Violation)) } // Add report summary to jsonArray @@ -65,7 +65,7 @@ func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, ou if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { return err } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) return nil } @@ -73,7 +73,7 @@ func (f *JsonOutputFormatter) Finish(outputResult output_result.OutputResult, ou return nil } -func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *result_contract2.Violation) { +func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *rules.Violation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getFailureMessage(violation), @@ -82,7 +82,7 @@ func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getFailureMessage(violation *result_contract2.Violation) string { +func (f *JsonOutputFormatter) getFailureMessage(violation *rules.Violation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -92,7 +92,7 @@ func (f *JsonOutputFormatter) getFailureMessage(violation *result_contract2.Viol ) } -func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *result_contract2.SkippedViolation) { +func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *rules.SkippedViolation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getWarningMessage(violation), @@ -101,7 +101,7 @@ func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getWarningMessage(violation *result_contract2.SkippedViolation) string { +func (f *JsonOutputFormatter) getWarningMessage(violation *rules.SkippedViolation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -111,7 +111,7 @@ func (f *JsonOutputFormatter) getWarningMessage(violation *result_contract2.Skip ) } -func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *result_contract2.Uncovered) { +func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *rules.Uncovered) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getUncoveredMessage(violation), @@ -120,7 +120,7 @@ func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, }) } -func (f *JsonOutputFormatter) getUncoveredMessage(violation *result_contract2.Uncovered) string { +func (f *JsonOutputFormatter) getUncoveredMessage(violation *rules.Uncovered) string { dependency := violation.GetDependency() return fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender().ToString(), diff --git a/pkg/output_formatter_supportive/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go similarity index 59% rename from pkg/output_formatter_supportive/junit_output_formatter.go rename to pkg/formatters/junit_output_formatter.go index 0de191f..fbccc86 100644 --- a/pkg/output_formatter_supportive/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -1,12 +1,11 @@ -package output_formatter_supportive +package formatters import ( "encoding/xml" "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -23,7 +22,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -31,18 +30,18 @@ func (f *JUnitOutputFormatter) Finish(result output_result.OutputResult, output dumpXmlPath := input.OutputPath if dumpXmlPath == nil || *dumpXmlPath == "" { - dumpXmlPath = util.AsPtr(DefaultJUnitPath) + dumpXmlPath = utils.AsPtr(DefaultJUnitPath) } if err := os.WriteFile(*dumpXmlPath, []byte(xmlData), 0644); err != nil { return err } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } -func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult) (string, error) { +func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (string, error) { testSuites := TestSuites{} if outputResult.HasErrors() { errorSuite := TestSuite{ @@ -52,7 +51,10 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult Errors: len(outputResult.Errors), } for _, message := range outputResult.Errors { - errorSuite.ErrorsList = append(errorSuite.ErrorsList, Error{ + errorSuite.ErrorsList = append(errorSuite.ErrorsList, struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + }{ Message: message.ToString(), Type: "WARNING", }) @@ -62,23 +64,26 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult layers := f.groupRulesByLayer(outputResult) layerIndex := 0 - for layer, rules := range layers { + for layer, rulesList := range layers { layerIndex++ testSuite := TestSuite{ ID: fmt.Sprintf("%d", layerIndex), Name: layer, Hostname: "localhost", } - testSuite.Tests = len(rules) - for _, rule := range rules { + testSuite.Tests = len(rulesList) + for _, rule := range rulesList { testCase := TestCase{ Name: fmt.Sprintf("%s - %s", layer, rule.GetDependency().GetDepender().ToString()), Classname: rule.GetDependency().GetDepender().ToString(), } switch r := rule.(type) { - case *result_contract.Violation: + case *rules.Violation: testSuite.Failures++ - testCase.Failures = append(testCase.Failures, Failure{ + testCase.Failures = append(testCase.Failures, struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + }{ Message: fmt.Sprintf("%s:%d must not depend on %s (%s on %s)", r.GetDependency().GetDepender().ToString(), r.GetDependency().GetContext().FileOccurrence.Line, @@ -88,11 +93,16 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult ), Type: "WARNING", }) - case *result_contract.SkippedViolation: + case *rules.SkippedViolation: testSuite.Skipped++ - testCase.Skipped = append(testCase.Skipped, Skipped{}) - case *result_contract.Uncovered: - testCase.Warnings = append(testCase.Warnings, Warning{ + testCase.Skipped = append(testCase.Skipped, struct { + XMLName xml.Name `xml:"skipped"` + }{}) + case *rules.Uncovered: + testCase.Warnings = append(testCase.Warnings, struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + }{ Message: fmt.Sprintf("%s:%d has uncovered dependency_contract on %s (%s)", r.GetDependency().GetDepender().ToString(), r.GetDependency().GetContext().FileOccurrence.Line, @@ -115,13 +125,13 @@ func (f *JUnitOutputFormatter) createXML(outputResult output_result.OutputResult return xml.Header + string(xmlData), nil } -func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult output_result.OutputResult) map[string][]result_contract.RuleInterface { - layers := make(map[string][]result_contract.RuleInterface) +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResult) map[string][]rules.RuleInterface { + layers := make(map[string][]rules.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { - case result_contract.CoveredRuleInterface: + case rules.CoveredRuleInterface: layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) - case *result_contract.Uncovered: + case *rules.Uncovered: layers[r.Layer] = append(layers[r.Layer], rule) } } @@ -142,32 +152,24 @@ type TestSuite struct { Skipped int `xml:"skipped,attr"` Errors int `xml:"errors,attr"` TestCases []TestCase `xml:"testcase"` - ErrorsList []Error `xml:"error"` + ErrorsList []struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + } `xml:"error"` } type TestCase struct { - Name string `xml:"name,attr"` - Classname string `xml:"classname,attr"` - Failures []Failure `xml:"failure"` - Skipped []Skipped `xml:"skipped"` - Warnings []Warning `xml:"warning"` -} - -type Failure struct { - Message string `xml:"message,attr"` - Type string `xml:"type,attr"` -} - -type Skipped struct { - XMLName xml.Name `xml:"skipped"` -} - -type Warning struct { - Message string `xml:"message,attr"` - Type string `xml:"type,attr"` -} - -type Error struct { - Message string `xml:"message,attr"` - Type string `xml:"type,attr"` + Name string `xml:"name,attr"` + Classname string `xml:"classname,attr"` + Failures []struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + } `xml:"failure"` + Skipped []struct { + XMLName xml.Name `xml:"skipped"` + } `xml:"skipped"` + Warnings []struct { + Message string `xml:"message,attr"` + Type string `xml:"type,attr"` + } `xml:"warning"` } diff --git a/pkg/output_formatter_supportive/mermaid_js_output_formatter.go b/pkg/formatters/mermaid_js_output_formatter.go similarity index 76% rename from pkg/output_formatter_supportive/mermaid_js_output_formatter.go rename to pkg/formatters/mermaid_js_output_formatter.go index 55d248a..680b54f 100644 --- a/pkg/output_formatter_supportive/mermaid_js_output_formatter.go +++ b/pkg/formatters/mermaid_js_output_formatter.go @@ -1,17 +1,15 @@ -package output_formatter_supportive +package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/results" "os" "strings" ) type MermaidJSOutputFormatter struct { - config *formatter.MermaidJsConfig + config *configs.MermaidJsConfig } const ( @@ -24,8 +22,8 @@ const ( DefaultOutputPath = "./mermaid-graph.md" ) -func NewMermaidJSOutputFormatter(config configuration.FormatterConfiguration) *MermaidJSOutputFormatter { - extractedConfig := config.GetConfigFor("mermaidjs").(interface{}).(*formatter.MermaidJsConfig) +func NewMermaidJSOutputFormatter(config FormatterConfiguration) *MermaidJSOutputFormatter { + extractedConfig := config.GetConfigFor("mermaidjs").(interface{}).(*configs.MermaidJsConfig) return &MermaidJSOutputFormatter{config: extractedConfig} } @@ -33,7 +31,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder @@ -94,7 +92,7 @@ func (f *MermaidJSOutputFormatter) Finish(result output_result.OutputResult, out return nil } -func (f *MermaidJSOutputFormatter) parseResults(result output_result.OutputResult) map[string]map[string]int { +func (f *MermaidJSOutputFormatter) parseResults(result results.OutputResult) map[string]map[string]int { graph := make(map[string]map[string]int) for _, rule := range result.Allowed() { dependerLayer := rule.GetDependerLayer() diff --git a/pkg/output_formatter_contract/output_formatter_input.go b/pkg/formatters/output_formatter_input.go similarity index 92% rename from pkg/output_formatter_contract/output_formatter_input.go rename to pkg/formatters/output_formatter_input.go index 2908eb5..28cdf66 100644 --- a/pkg/output_formatter_contract/output_formatter_input.go +++ b/pkg/formatters/output_formatter_input.go @@ -1,4 +1,4 @@ -package output_formatter_contract +package formatters type OutputFormatterInput struct { OutputPath *string diff --git a/pkg/output_formatter_contract/output_formatter_interface.go b/pkg/formatters/output_formatter_interface.go similarity index 56% rename from pkg/output_formatter_contract/output_formatter_interface.go rename to pkg/formatters/output_formatter_interface.go index 6f65fce..a076025 100644 --- a/pkg/output_formatter_contract/output_formatter_interface.go +++ b/pkg/formatters/output_formatter_interface.go @@ -1,7 +1,7 @@ -package output_formatter_contract +package formatters import ( - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/results" ) type OutputFormatterInterface interface { @@ -9,5 +9,5 @@ type OutputFormatterInterface interface { GetName() OutputFormatterType // Finish - Renders the final result_contract. - Finish(result *output_result.OutputResult, output OutputInterface, outputFormatterInput *OutputFormatterInput) error + Finish(result *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/output_formatter_contract/output_formatter_type.go b/pkg/formatters/output_formatter_type.go similarity index 94% rename from pkg/output_formatter_contract/output_formatter_type.go rename to pkg/formatters/output_formatter_type.go index 2397f51..ca41ca0 100644 --- a/pkg/output_formatter_contract/output_formatter_type.go +++ b/pkg/formatters/output_formatter_type.go @@ -1,4 +1,4 @@ -package output_formatter_contract +package formatters import "errors" diff --git a/pkg/console_supportive/symfony/style.go b/pkg/formatters/style.go similarity index 84% rename from pkg/console_supportive/symfony/style.go rename to pkg/formatters/style.go index ea4963b..a5daabf 100644 --- a/pkg/console_supportive/symfony/style.go +++ b/pkg/formatters/style.go @@ -1,8 +1,8 @@ -package symfony +package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" + "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" @@ -33,27 +33,27 @@ func (s *Style) Section(message string) { color.Printf("%s\n", strings.Repeat("-", len(message))) } -func (s *Style) Success(message output_formatter_contract.StringOrArrayOfStrings) { +func (s *Style) Success(message results.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Error(message output_formatter_contract.StringOrArrayOfStrings) { +func (s *Style) Error(message results.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Warning(message output_formatter_contract.StringOrArrayOfStrings) { +func (s *Style) Warning(message results.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Note(message output_formatter_contract.StringOrArrayOfStrings) { +func (s *Style) Note(message results.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Caution(message output_formatter_contract.StringOrArrayOfStrings) { +func (s *Style) Caution(message results.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) DefinitionList(list []output_formatter_contract.StringOrArrayOfStringsOrTableSeparator) { +func (s *Style) DefinitionList(list []results.StringOrArrayOfStringsOrTableSeparator) { headers := make([]string, 0) row := make([]string, 0) for _, value := range list { @@ -168,7 +168,7 @@ func (s *Style) ProgressAdvance(step int) error { func (s *Style) ProgressFinish() error { err := s.progressbar.Finish() if err != nil { - return err + return nil // TODO } return nil diff --git a/pkg/output_formatter_supportive/table_output_formatter.go b/pkg/formatters/table_output_formatter.go similarity index 75% rename from pkg/output_formatter_supportive/table_output_formatter.go rename to pkg/formatters/table_output_formatter.go index 7a65196..cb0dfef 100644 --- a/pkg/output_formatter_supportive/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -1,11 +1,10 @@ -package output_formatter_supportive +package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -18,12 +17,12 @@ func NewTableOutputFormatter() *TableOutputFormatter { return &TableOutputFormatter{} } -func (t *TableOutputFormatter) GetName() output_formatter_contract2.OutputFormatterType { - return output_formatter_contract2.Table +func (t *TableOutputFormatter) GetName() OutputFormatterType { + return Table } -func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { - groupedRules := make(map[string][]result_contract2.RuleInterface) +func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { + groupedRules := make(map[string][]rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { groupedRules[ruleItem.GetDependerLayer()] = append(groupedRules[ruleItem.GetDependerLayer()], ruleItem) @@ -46,9 +45,9 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, style := output.GetStyle() for _, layer := range groupedRulesLayers { - rules := groupedRules[layer] + rulesList := groupedRules[layer] - slices.SortFunc(rules, func(a, b result_contract2.RuleInterface) int { + slices.SortFunc(rulesList, func(a, b rules.RuleInterface) int { if a.GetDependency().GetDepender().ToString() < b.GetDependency().GetDepender().ToString() { return -1 } @@ -56,13 +55,13 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, }) rows := make([][]string, 0) - for _, ruleItem := range rules { + for _, ruleItem := range rulesList { switch item := ruleItem.(type) { - case *result_contract2.Uncovered: + case *rules.Uncovered: rows = append(rows, t.uncoveredRow(item, outputFormatterInput.FailOnUncovered)) - case *result_contract2.Violation: + case *rules.Violation: rows = append(rows, t.violationRow(item)) - case *result_contract2.SkippedViolation: + case *rules.SkippedViolation: rows = append(rows, t.skippedViolationRow(item)) } } @@ -79,7 +78,7 @@ func (t *TableOutputFormatter) Finish(outputResult *output_result.OutputResult, return nil } -func (t *TableOutputFormatter) skippedViolationRow(rule *result_contract2.SkippedViolation) []string { +func (t *TableOutputFormatter) skippedViolationRow(rule *rules.SkippedViolation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s (%s)", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { @@ -91,7 +90,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *result_contract2.Skippe } -func (t *TableOutputFormatter) violationRow(rule *result_contract2.Violation) []string { +func (t *TableOutputFormatter) violationRow(rule *rules.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) message += fmt.Sprintf("\n%s (To fix %s(You need to add to the array by this key) -> %s(That value needs to be added to that array))", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) @@ -102,7 +101,7 @@ func (t *TableOutputFormatter) violationRow(rule *result_contract2.Violation) [] message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) return []string{color.Sprint("Violation"), message} } -func (t *TableOutputFormatter) formatMultilinePath(dep dependency_contract.DependencyInterface) string { +func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyInterface) string { lines := make([]string, 0) for _, serializedDependency := range dep.Serialize() { lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) @@ -110,7 +109,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependency_contract.Depen return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output results.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -151,7 +150,7 @@ func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []output_formatter_contract2.StringOrArrayOfStringsOrTableSeparator{ + []results.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -164,7 +163,7 @@ func (t *TableOutputFormatter) printSummary(result *output_result.OutputResult, ) } -func (t *TableOutputFormatter) uncoveredRow(rule *result_contract2.Uncovered, reportAsError bool) []string { +func (t *TableOutputFormatter) uncoveredRow(rule *rules.Uncovered, reportAsError bool) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s has uncovered dependency_contract on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) if len(gotDependency.Serialize()) > 1 { @@ -179,7 +178,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *result_contract2.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output results.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -189,7 +188,7 @@ func (t *TableOutputFormatter) printErrors(result *output_result.OutputResult, o output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results.OutputResult, output results.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/output_formatter_supportive/table_output_formatter_test.go b/pkg/formatters/table_output_formatter_test.go similarity index 80% rename from pkg/output_formatter_supportive/table_output_formatter_test.go rename to pkg/formatters/table_output_formatter_test.go index ddf4d9b..1ffb0c7 100644 --- a/pkg/output_formatter_supportive/table_output_formatter_test.go +++ b/pkg/formatters/table_output_formatter_test.go @@ -1,4 +1,4 @@ -package output_formatter_supportive +package formatters import ( "fmt" diff --git a/pkg/output_formatter_supportive/xml_output_formatter.go b/pkg/formatters/xml_output_formatter.go similarity index 73% rename from pkg/output_formatter_supportive/xml_output_formatter.go rename to pkg/formatters/xml_output_formatter.go index 2408496..c6dde39 100644 --- a/pkg/output_formatter_supportive/xml_output_formatter.go +++ b/pkg/formatters/xml_output_formatter.go @@ -1,12 +1,11 @@ -package output_formatter_supportive +package formatters import ( "encoding/xml" "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -23,7 +22,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -31,18 +30,18 @@ func (f *XMLOutputFormatter) Finish(result output_result.OutputResult, output ou dumpXmlPath := input.OutputPath if dumpXmlPath == nil || *dumpXmlPath == "" { - dumpXmlPath = util.AsPtr(DefaultPath) + dumpXmlPath = utils.AsPtr(DefaultPath) } if err := os.WriteFile(*dumpXmlPath, []byte(xmlData), 0644); err != nil { return err } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } -func (f *XMLOutputFormatter) createXML(dependencyContext output_result.OutputResult) (string, error) { +func (f *XMLOutputFormatter) createXML(dependencyContext results.OutputResult) (string, error) { entries := Entries{} for _, rule := range dependencyContext.Violations() { @@ -66,7 +65,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int var line int switch r := rule.(type) { - case result_contract2.Violation: + case rules.Violation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() @@ -76,7 +75,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int file = fileOccurrence.FilePath line = fileOccurrence.Line - case result_contract2.SkippedViolation: + case rules.SkippedViolation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() diff --git a/pkg/config/template_file_hook.go b/pkg/hooks/template_file_hook.go similarity index 95% rename from pkg/config/template_file_hook.go rename to pkg/hooks/template_file_hook.go index 4279658..a0338e2 100644 --- a/pkg/config/template_file_hook.go +++ b/pkg/hooks/template_file_hook.go @@ -1,4 +1,4 @@ -package config +package hooks type templateFileHook struct{} type TemplateFileHook interface { diff --git a/pkg/file_supportive/yml_file_loader.go b/pkg/hooks/yml_file_loader.go similarity index 80% rename from pkg/file_supportive/yml_file_loader.go rename to pkg/hooks/yml_file_loader.go index b836025..c7e749a 100644 --- a/pkg/file_supportive/yml_file_loader.go +++ b/pkg/hooks/yml_file_loader.go @@ -1,7 +1,7 @@ -package file_supportive +package hooks import ( - exception2 "github.com/KoNekoD/go-deptrac/pkg/file_supportive/exception" + apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "gopkg.in/yaml.v3" ) @@ -22,7 +22,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { err := yaml.Unmarshal([]byte(file), &yamlMap) if err != nil { - return nil, exception2.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) + return nil, apperrors2.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) } _, ok1 := yamlMap["parameters"] @@ -30,7 +30,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { _, ok3 := yamlMap["imports"] if !ok1 || !ok2 || !ok3 { - return nil, exception2.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) + return nil, apperrors2.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) } result := &ParseFileResult{ diff --git a/pkg/layer_contract/invalid_collector_definition_exception.go b/pkg/layer_contract/invalid_collector_definition_exception.go deleted file mode 100644 index 359d212..0000000 --- a/pkg/layer_contract/invalid_collector_definition_exception.go +++ /dev/null @@ -1,54 +0,0 @@ -package layer_contract - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "reflect" - "strings" -) - -// InvalidCollectorDefinitionException - Thrown when the configuration of a particular collector is not valid. Use this exception when writing custom collectors. -type InvalidCollectorDefinitionException struct { - Message string - Previous error -} - -func (e InvalidCollectorDefinitionException) Error() string { - if e.Previous != nil { - return fmt.Sprintf("%s\n%s", e.Message, e.Previous.Error()) - } else { - return e.Message - } -} - -func NewInvalidCollectorDefinitionExceptionMissingType() *InvalidCollectorDefinitionException { - return &InvalidCollectorDefinitionException{ - Message: "Could not resolve collector definition because of missing \"type\" field.", - } -} - -func NewInvalidCollectorDefinitionExceptionUnsupportedType(collectorType config_contract.CollectorType, supportedTypes []config_contract.CollectorType, previous error) *InvalidCollectorDefinitionException { - supportedTypesStrings := make([]string, len(supportedTypes)) - - for i, supportedType := range supportedTypes { - supportedTypesStrings[i] = string(supportedType) - } - - return &InvalidCollectorDefinitionException{ - Message: fmt.Sprintf("Could not find a collector for type \"%s\". Supported types: \"%s\".", collectorType, strings.Join(supportedTypesStrings, "\", \"")), - Previous: previous, - } - -} - -func NewInvalidCollectorDefinitionExceptionUnsupportedClass(id string, collector interface{}) *InvalidCollectorDefinitionException { - return &InvalidCollectorDefinitionException{ - Message: fmt.Sprintf("Type \"%s\" is not valid collector (expected \"%s\", but is \"%s\").", id, "Qossmic\\Deptrac\\Contract\\Layer\\CollectorInterface", reflect.TypeOf(collector)), - } -} - -func NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(message string) *InvalidCollectorDefinitionException { - return &InvalidCollectorDefinitionException{ - Message: message, - } -} diff --git a/pkg/layer_core/collector/class_name_regex_collector.go b/pkg/layer_core/collector/class_name_regex_collector.go deleted file mode 100644 index 11b03c3..0000000 --- a/pkg/layer_core/collector/class_name_regex_collector.go +++ /dev/null @@ -1,39 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type ClassNameRegexCollector struct { - *RegexCollector -} - -func NewClassNameRegexCollector() *ClassNameRegexCollector { - return &ClassNameRegexCollector{ - RegexCollector: NewRegexCollector(), - } -} - -func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { - return false, nil - } - - validatedPattern, err := c.GetValidatedPattern(config, c.GetPattern) - if err != nil { - return false, err - } - - return reference.GetToken().(*ast_map2.ClassLikeToken).Match(validatedPattern), nil -} - -func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("ClassNameRegexCollector needs the regex configuration.") - } - - return config["value"].(string), nil -} diff --git a/pkg/layer_core/collector/collectable.go b/pkg/layer_core/collector/collectable.go deleted file mode 100644 index f4f5013..0000000 --- a/pkg/layer_core/collector/collectable.go +++ /dev/null @@ -1,14 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" -) - -type Collectable struct { - Collector layer_contract.CollectorInterface - Attributes map[string]interface{} -} - -func NewCollectable(collector layer_contract.CollectorInterface, attributes map[string]interface{}) *Collectable { - return &Collectable{Collector: collector, Attributes: attributes} -} diff --git a/pkg/layer_core/collector/collector_provider.go b/pkg/layer_core/collector/collector_provider.go deleted file mode 100644 index 7dc2751..0000000 --- a/pkg/layer_core/collector/collector_provider.go +++ /dev/null @@ -1,33 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "golang.org/x/exp/maps" -) - -type CollectorProvider struct { - collectors map[config_contract.CollectorType]layer_contract.CollectorInterface -} - -func NewCollectorProvider() *CollectorProvider { - return &CollectorProvider{} -} - -func (p *CollectorProvider) Set(collectors map[config_contract.CollectorType]layer_contract.CollectorInterface) *CollectorProvider { - p.collectors = collectors - return p -} - -func (p *CollectorProvider) Get(id config_contract.CollectorType) layer_contract.CollectorInterface { - return p.collectors[id] -} - -func (p *CollectorProvider) Has(id config_contract.CollectorType) bool { - _, ok := p.collectors[id] - return ok -} - -func (p *CollectorProvider) GetKnownCollectors() []config_contract.CollectorType { - return maps.Keys(p.collectors) -} diff --git a/pkg/layer_core/collector/collector_resolver.go b/pkg/layer_core/collector/collector_resolver.go deleted file mode 100644 index 1625d55..0000000 --- a/pkg/layer_core/collector/collector_resolver.go +++ /dev/null @@ -1,29 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" -) - -type CollectorResolver struct { - collectorProvider *CollectorProvider -} - -func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolver { - return &CollectorResolver{collectorProvider: collectorProvider} -} - -func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*Collectable, error) { - classLikeType, err := config_contract.NewCollectorTypeFromString(configMap["type"].(string)) - if err != nil { - return nil, err - } - - if !c.collectorProvider.Has(classLikeType) { - return nil, layer_contract.NewInvalidCollectorDefinitionExceptionUnsupportedType(classLikeType, c.collectorProvider.GetKnownCollectors(), nil) - } - - collector := c.collectorProvider.Get(classLikeType) - - return NewCollectable(collector, configMap), nil -} diff --git a/pkg/layer_core/collector/collector_resolver_interface.go b/pkg/layer_core/collector/collector_resolver_interface.go deleted file mode 100644 index a84470b..0000000 --- a/pkg/layer_core/collector/collector_resolver_interface.go +++ /dev/null @@ -1,5 +0,0 @@ -package collector - -type CollectorResolverInterface interface { - Resolve(config map[string]interface{}) (*Collectable, error) -} diff --git a/pkg/layer_core/collector/function_name_collector.go b/pkg/layer_core/collector/function_name_collector.go deleted file mode 100644 index bdf2c74..0000000 --- a/pkg/layer_core/collector/function_name_collector.go +++ /dev/null @@ -1,38 +0,0 @@ -package collector - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type FunctionNameCollector struct{} - -func NewFunctionNameCollector() *FunctionNameCollector { - return &FunctionNameCollector{} -} - -func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map2.FunctionReference); !ok { - return false, nil - } - - pattern, err := c.GetPattern(config) - if err != nil { - return false, err - } - - tokenName := reference.GetToken().(*ast_map2.FunctionToken) - - return tokenName.Match(pattern), nil -} - -func (c FunctionNameCollector) GetPattern(config map[string]interface{}) (string, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return "", layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("FunctionNameCollector needs the regex configuration.") - } - - return fmt.Sprintf("/%s/i", config["value"].(string)), nil -} diff --git a/pkg/layer_core/collector/inheritance_level_collector.go b/pkg/layer_core/collector/inheritance_level_collector.go deleted file mode 100644 index 2ca2e4f..0000000 --- a/pkg/layer_core/collector/inheritance_level_collector.go +++ /dev/null @@ -1,47 +0,0 @@ -package collector - -import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type InheritanceLevelCollector struct { - astMapExtractor *ast_core.AstMapExtractor - astMap *ast_map2.AstMap -} - -func NewInheritanceLevelCollector(astMapExtractor *ast_core.AstMapExtractor) (*InheritanceLevelCollector, error) { - astMap, err := astMapExtractor.Extract() - if err != nil { - return nil, err - } - return &InheritanceLevelCollector{ - astMapExtractor: astMapExtractor, - astMap: astMap, - }, nil -} - -func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { - return false, nil - } - - classInherits := c.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) - - if !util.MapKeyExists(config, "value") || util.MapKeyIsInt(config, "value") { - return false, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") - } - - depth := config["value"].(int) - - for _, classInherit := range classInherits { - if len(classInherit.GetPath()) > depth { - return true, nil - } - } - - return false, nil -} diff --git a/pkg/layer_core/collector/inherits_collector.go b/pkg/layer_core/collector/inherits_collector.go deleted file mode 100644 index 1c6516e..0000000 --- a/pkg/layer_core/collector/inherits_collector.go +++ /dev/null @@ -1,52 +0,0 @@ -package collector - -import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type InheritsCollector struct { - astMapExtractor *ast_core.AstMapExtractor - astMap *ast_map2.AstMap -} - -func NewInheritsCollector(astMapExtractor *ast_core.AstMapExtractor) (*InheritsCollector, error) { - astMap, err := astMapExtractor.Extract() - if err != nil { - return nil, err - } - return &InheritsCollector{ - astMapExtractor: astMapExtractor, - astMap: astMap, - }, nil -} - -func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { - return false, nil - } - - classLikeName, err := c.getClassLikeName(config) - if err != nil { - return false, err - } - - for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) { - if inherit.ClassLikeName.Equals(classLikeName) { - return true, nil - } - } - - return false, nil -} - -func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*ast_map2.ClassLikeToken, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") - } - - return ast_map2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil -} diff --git a/pkg/layer_core/collector/layer_collector.go b/pkg/layer_core/collector/layer_collector.go deleted file mode 100644 index 7075470..0000000 --- a/pkg/layer_core/collector/layer_collector.go +++ /dev/null @@ -1,60 +0,0 @@ -package collector - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - layer_contract2 "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type LayerCollector struct { - resolver layer_resolver_interface.LayerResolverInterface - resolved map[string]map[string]*bool -} - -func NewLayerCollector(resolver layer_resolver_interface.LayerResolverInterface) *LayerCollector { - return &LayerCollector{ - resolver: resolver, - } -} - -func (c *LayerCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if _, ok := config["value"]; !ok { - if _, ok2 := config["value"].(string); !ok2 { - return false, layer_contract2.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") - } - } - - configValueLayer := config["value"].(string) - - hasInResolver, err := c.resolver.Has(configValueLayer) - if err != nil { - return false, err - } - if !hasInResolver { - return false, layer_contract2.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer_contract \"%s\" specified in collector.", configValueLayer)) - } - - token := reference.GetToken().ToString() - - if util.MapKeyExists(c.resolved, token) && util.MapKeyExists(c.resolved[token], configValueLayer) { - if c.resolved[token][configValueLayer] == nil { - return false, layer_contract2.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) - } - - return *c.resolved[token][configValueLayer], nil - } - - // Set resolved for current token to null in case resolver comes back to it (circular reference) - c.resolved[token][configValueLayer] = nil - - resolvedValue, err := c.resolver.IsReferenceInLayer(configValueLayer, reference) - - if err != nil { - return false, err - } - - c.resolved[token][configValueLayer] = &resolvedValue - return resolvedValue, nil -} diff --git a/pkg/layer_core/collector/superglobal_collector.go b/pkg/layer_core/collector/superglobal_collector.go deleted file mode 100644 index c03bdb8..0000000 --- a/pkg/layer_core/collector/superglobal_collector.go +++ /dev/null @@ -1,41 +0,0 @@ -package collector - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type SuperglobalCollector struct{} - -func NewSuperglobalCollector() *SuperglobalCollector { - return &SuperglobalCollector{} -} - -func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference ast_contract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map.VariableReference); !ok { - return false, nil - } - - names, err := c.getNames(config) - if err != nil { - return false, err - } - - for _, name := range names { - if reference.GetToken().ToString() == name { - return true, nil - } - } - - return false, nil -} - -func (c SuperglobalCollector) getNames(config map[string]interface{}) ([]string, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsArrayOfStrings(config, "value") { - return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") - } - - return config["value"].([]string), nil -} diff --git a/pkg/layer_core/collector/uses_collector.go b/pkg/layer_core/collector/uses_collector.go deleted file mode 100644 index fad679c..0000000 --- a/pkg/layer_core/collector/uses_collector.go +++ /dev/null @@ -1,52 +0,0 @@ -package collector - -import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" -) - -type UsesCollector struct { - astMapExtractor *ast_core.AstMapExtractor - astMap *ast_map2.AstMap -} - -func NewUsesCollector(astMapExtractor *ast_core.AstMapExtractor) (*UsesCollector, error) { - astMap, err := astMapExtractor.Extract() - if err != nil { - return nil, err - } - return &UsesCollector{ - astMapExtractor: astMapExtractor, - astMap: astMap, - }, nil -} - -func (u *UsesCollector) Satisfy(config map[string]interface{}, reference astContract.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*ast_map2.ClassLikeReference); !ok { - return false, nil - } - - traitName, err := u.getTraitName(config) - if err != nil { - return false, err - } - - for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*ast_map2.ClassLikeToken)) { - if ast_map2.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { - return true, nil - } - } - - return false, nil -} - -func (u *UsesCollector) getTraitName(config map[string]interface{}) (*ast_map2.ClassLikeToken, error) { - if !util.MapKeyExists(config, "value") || !util.MapKeyIsString(config, "value") { - return nil, layer_contract.NewInvalidCollectorDefinitionExceptionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") - } - - return ast_map2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil -} diff --git a/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go b/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go deleted file mode 100644 index 31badc4..0000000 --- a/pkg/layer_core/layer_resolver_interface/layer_resolver_interface.go +++ /dev/null @@ -1,14 +0,0 @@ -package layer_resolver_interface - -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) - -type LayerResolverInterface interface { - // GetLayersForReference - Returns a layer_contract name and whether the dependency_contract is public(true) or private(false) - GetLayersForReference(reference ast_contract.TokenReferenceInterface) (map[string]bool, error) - - IsReferenceInLayer(layer string, reference ast_contract.TokenReferenceInterface) (bool, error) - - Has(layer string) (bool, error) -} diff --git a/pkg/config_contract/layer.go b/pkg/layers/layer.go similarity index 67% rename from pkg/config_contract/layer.go rename to pkg/layers/layer.go index 9f6ce0b..6405bed 100644 --- a/pkg/config_contract/layer.go +++ b/pkg/layers/layer.go @@ -1,11 +1,13 @@ -package config_contract +package layers + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" type Layer struct { - Collectors []*CollectorConfig + Collectors []*collectors.CollectorConfig Name string } -func NewLayer(name string, collectorConfigs []*CollectorConfig) *Layer { +func NewLayer(name string, collectorConfigs []*collectors.CollectorConfig) *Layer { l := &Layer{Name: name} l.setCollectors(collectorConfigs...) @@ -17,7 +19,7 @@ func NewLayerWithName(name string) *Layer { return &Layer{Name: name} } -func (l *Layer) setCollectors(collectorConfigs ...*CollectorConfig) *Layer { +func (l *Layer) setCollectors(collectorConfigs ...*collectors.CollectorConfig) *Layer { for _, collectorConfig := range collectorConfigs { l.Collectors = append(l.Collectors, collectorConfig) } diff --git a/pkg/layer_contract/layer_provider.go b/pkg/layers/layer_provider.go similarity index 66% rename from pkg/layer_contract/layer_provider.go rename to pkg/layers/layer_provider.go index 260ae87..527fc32 100644 --- a/pkg/layer_contract/layer_provider.go +++ b/pkg/layers/layer_provider.go @@ -1,16 +1,17 @@ -package layer_contract +package layers import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/rules" "strings" ) type LayerProvider struct { - AllowedLayers map[string]*config_contract.Ruleset + AllowedLayers map[string]*rules.Ruleset } -func NewLayerProvider(allowedLayers map[string]*config_contract.Ruleset) *LayerProvider { +func NewLayerProvider(allowedLayers map[string]*rules.Ruleset) *LayerProvider { return &LayerProvider{AllowedLayers: allowedLayers} } @@ -19,8 +20,8 @@ func (l *LayerProvider) GetAllowedLayers(layerName string) ([]string, error) { } func (l *LayerProvider) getTransitiveDependencies(layerName string, previousLayers []string) ([]string, error) { - if util.InArray(layerName, previousLayers) { - return nil, NewCircularReferenceExceptionFromCircularLayerDependency(layerName, previousLayers) + if utils.InArray(layerName, previousLayers) { + return nil, apperrors.NewCircularReferenceExceptionFromCircularLayerDependency(layerName, previousLayers) } dependencies := make([]string, 0) diff --git a/pkg/layer_core/layer_resolver.go b/pkg/layers/layer_resolver.go similarity index 79% rename from pkg/layer_core/layer_resolver.go rename to pkg/layers/layer_resolver.go index ffb2c31..e8e36ae 100644 --- a/pkg/layer_core/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -1,37 +1,36 @@ -package layer_core +package layers import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - collector2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/collector" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/violations" "reflect" "sync" ) // LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { - collectorResolver collector2.CollectorResolverInterface - layersConfig []*config_contract.Layer - layers map[string][]*collector2.Collectable + collectorResolver collectors.CollectorResolverInterface + layersConfig []*Layer + layers map[string][]*violations.Collectable initialized bool resolved map[string]map[string]bool mu sync.Mutex } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collector2.CollectorResolverInterface, layersConfig []*config_contract.Layer) layer_resolver_interface.LayerResolverInterface { +func NewLayerResolver(collectorResolver collectors.CollectorResolverInterface, layersConfig []*Layer) LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, - layers: make(map[string][]*collector2.Collectable), + layers: make(map[string][]*violations.Collectable), resolved: make(map[string]map[string]bool), } } // GetLayersForReference retrieves layers for a given reference -func (r *LayerResolver) GetLayersForReference(reference ast_contract.TokenReferenceInterface) (map[string]bool, error) { +func (r *LayerResolver) GetLayersForReference(reference tokens.TokenReferenceInterface) (map[string]bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -76,7 +75,7 @@ func (r *LayerResolver) GetLayersForReference(reference ast_contract.TokenRefere } // IsReferenceInLayer checks if a reference is in a given layer_contract -func (r *LayerResolver) IsReferenceInLayer(layer string, reference ast_contract.TokenReferenceInterface) (bool, error) { +func (r *LayerResolver) IsReferenceInLayer(layer string, reference tokens.TokenReferenceInterface) (bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -128,14 +127,14 @@ func (r *LayerResolver) Has(layer string) (bool, error) { // initializeLayers initializes the layers from the configuration func (r *LayerResolver) initializeLayers() error { - r.layers = make(map[string][]*collector2.Collectable) + r.layers = make(map[string][]*violations.Collectable) for _, layer := range r.layersConfig { layerName := layer.Name if _, exists := r.layers[layerName]; exists { return errors.New("invalid layer_contract definition: duplicate name " + layerName) } - r.layers[layerName] = []*collector2.Collectable{} + r.layers[layerName] = []*violations.Collectable{} for _, config := range layer.Collectors { resolvedCollector, err := r.collectorResolver.Resolve(config.ToArray()) diff --git a/pkg/layers/layer_resolver_interface.go b/pkg/layers/layer_resolver_interface.go new file mode 100644 index 0000000..cc2e9af --- /dev/null +++ b/pkg/layers/layer_resolver_interface.go @@ -0,0 +1,12 @@ +package layers + +import "github.com/KoNekoD/go-deptrac/pkg/tokens" + +type LayerResolverInterface interface { + // GetLayersForReference - Returns a layer_contract name and whether the dependency_contract is public(true) or private(false) + GetLayersForReference(reference tokens.TokenReferenceInterface) (map[string]bool, error) + + IsReferenceInLayer(layer string, reference tokens.TokenReferenceInterface) (bool, error) + + Has(layer string) (bool, error) +} diff --git a/pkg/analyser_core/event_handler/process_event/matching_layers_handler.go b/pkg/layers/matching_layers_handler.go similarity index 76% rename from pkg/analyser_core/event_handler/process_event/matching_layers_handler.go rename to pkg/layers/matching_layers_handler.go index 5b54e5c..61b1bc1 100644 --- a/pkg/analyser_core/event_handler/process_event/matching_layers_handler.go +++ b/pkg/layers/matching_layers_handler.go @@ -1,7 +1,7 @@ -package process_event +package layers import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/events" ) type MatchingLayersHandler struct{} @@ -11,7 +11,7 @@ func NewMatchingLayersHandler() *MatchingLayersHandler { } func (m *MatchingLayersHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) for dependeeLayer := range event.DependentLayers { if event.DependerLayer != dependeeLayer { return nil diff --git a/pkg/dependency_core/emitter/f_q_d_n_index_node.go b/pkg/nodes/fqdn_index_node.go similarity index 97% rename from pkg/dependency_core/emitter/f_q_d_n_index_node.go rename to pkg/nodes/fqdn_index_node.go index d379040..28bdfe4 100644 --- a/pkg/dependency_core/emitter/f_q_d_n_index_node.go +++ b/pkg/nodes/fqdn_index_node.go @@ -1,4 +1,4 @@ -package emitter +package nodes type FQDNIndexNode struct { FQDN bool diff --git a/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer.go b/pkg/nodes/node_namer.go similarity index 86% rename from pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer.go rename to pkg/nodes/node_namer.go index f80b02c..3abd306 100644 --- a/pkg/ast_core/parser/nikic_php_parser/node_namer/node_namer.go +++ b/pkg/nodes/node_namer.go @@ -1,8 +1,8 @@ -package node_namer +package nodes import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" _ "github.com/KoNekoD/go-deptrac/resources" "go/parser" "go/token" @@ -25,7 +25,7 @@ func NewNodeNamer(projectDirectory string) *NodeNamer { func (n *NodeNamer) GetRootPackageName(path string) (string, error) { fullPath := filepath.Join(n.projectDirectory, path) - path, err := util.GetPathWithoutFilename(fullPath) + path, err := utils.GetPathWithoutFilename(fullPath) if err != nil { return "", err } @@ -61,7 +61,7 @@ func (n *NodeNamer) GetPackageName(path string) (string, error) { return "", err } - innerPackageName, err := util.GetPathWithoutFilename(filepath.Join(n.projectDirectory, path)) + innerPackageName, err := utils.GetPathWithoutFilename(filepath.Join(n.projectDirectory, path)) if err != nil { return "", err } @@ -76,7 +76,6 @@ func (n *NodeNamer) GetPackageName(path string) (string, error) { func (n *NodeNamer) GetPackageFilename(path string) (string, error) { path, err := filepath.Rel(n.projectDirectory, path) - if err != nil { return "", err } @@ -87,7 +86,7 @@ func (n *NodeNamer) GetPackageFilename(path string) (string, error) { return "", err } - fileName, err := util.GetPathWithOnlyFilename(filepath.Join(n.projectDirectory, path)) + fileName, err := utils.GetPathWithOnlyFilename(filepath.Join(n.projectDirectory, path)) if err != nil { return "", err } @@ -97,7 +96,7 @@ func (n *NodeNamer) GetPackageFilename(path string) (string, error) { func (n *NodeNamer) GetPackageStructName(path string, structName string) (string, error) { // Validate if structName has in path - pathValidate := strings.Replace(path, "github.com/KoNekoD/go-deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/", 1) + pathValidate := strings.Replace(path, "github.com/KoNekoD/go_deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go_deptrac/", 1) nodes, err := parser.ParseFile(token.NewFileSet(), pathValidate, nil, 0) if err != nil { panic(err) diff --git a/pkg/nodes/node_namer_test.go b/pkg/nodes/node_namer_test.go new file mode 100644 index 0000000..79b64b4 --- /dev/null +++ b/pkg/nodes/node_namer_test.go @@ -0,0 +1,19 @@ +package nodes_test + +import ( + "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "testing" +) + +func TestOk(t *testing.T) { + namer := app.ProvideTestContainerService("NodeNamer").(*nodes.NodeNamer) + + name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") + + if err != nil { + t.Error(err) + } + + t.Log(name) +} diff --git a/pkg/output_formatter_supportive/codeclimate_output_formatter.go b/pkg/output_formatter_supportive/codeclimate_output_formatter.go deleted file mode 100644 index 49ba107..0000000 --- a/pkg/output_formatter_supportive/codeclimate_output_formatter.go +++ /dev/null @@ -1,119 +0,0 @@ -package output_formatter_supportive - -import ( - "crypto/sha1" - "encoding/json" - "fmt" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - configuration2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_supportive/configuration" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "github.com/KoNekoD/go-deptrac/pkg/util" - "os" -) - -type CodeclimateOutputFormatter struct { - config map[configuration2.SeverityType]interface{} -} - -func NewCodeclimateOutputFormatter(config configuration2.FormatterConfiguration) *CodeclimateOutputFormatter { - extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configuration2.SeverityType]interface{}) - return &CodeclimateOutputFormatter{config: extractedConfig} -} - -func (f *CodeclimateOutputFormatter) GetName() string { - return "codeclimate" -} - -func (f *CodeclimateOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) error { - formatterConfig := configuration2.NewConfigurationCodeclimateFromArray(f.config) - var violations []map[string]interface{} - - if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { - f.addSkipped(&violations, rule.(*result_contract2.SkippedViolation), formatterConfig) - } - } - - if input.ReportUncovered { - for _, rule := range outputResult.AllOf(result_contract2.TypeUncovered) { - f.addUncovered(&violations, rule.(*result_contract2.Uncovered), formatterConfig) - } - } - - for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { - f.addFailure(&violations, rule.(*result_contract2.Violation), formatterConfig) - } - - jsonData, err := json.MarshalIndent(violations, "", " ") - if err != nil { - return fmt.Errorf("unable to render codeclimate output: %v", err) - } - - if input.OutputPath != nil && *input.OutputPath != "" { - err := os.WriteFile(*input.OutputPath, jsonData, 0644) - if err != nil { - return err - } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) - return nil - } - - output.WriteRaw(string(jsonData)) - return nil -} - -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *result_contract2.Violation, config *configuration2.ConfigurationCodeclimate) { - *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) -} - -func (f *CodeclimateOutputFormatter) getFailureMessage(violation *result_contract2.Violation) *string { - dependency := violation.GetDependency() - return util.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) -} - -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *result_contract2.SkippedViolation, config *configuration2.ConfigurationCodeclimate) { - *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) -} - -func (f *CodeclimateOutputFormatter) getWarningMessage(violation *result_contract2.SkippedViolation) *string { - dependency := violation.GetDependency() - return util.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) -} - -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *result_contract2.Uncovered, config *configuration2.ConfigurationCodeclimate) { - *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) -} - -func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *result_contract2.Uncovered) *string { - dependency := violation.GetDependency() - return util.AsPtr(fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) -} - -func (f *CodeclimateOutputFormatter) buildRuleArray(rule result_contract2.RuleInterface, message, severity *string) map[string]interface{} { - return map[string]interface{}{ - "type": "issue", - "check_name": "Dependency violation", - "fingerprint": f.buildFingerprint(rule), - "description": message, - "categories": []string{"Style", "Complexity"}, - "severity": severity, - "location": map[string]interface{}{ - "path": rule.GetDependency().GetContext().FileOccurrence.FilePath, - "lines": map[string]interface{}{ - "begin": rule.GetDependency().GetContext().FileOccurrence.Line, - }, - }, - } -} - -func (f *CodeclimateOutputFormatter) buildFingerprint(rule result_contract2.RuleInterface) string { - data := fmt.Sprintf("%s,%s,%s,%s,%d", - rule, - rule.GetDependency().GetDepender(), - rule.GetDependency().GetDependent(), - rule.GetDependency().GetContext().FileOccurrence.FilePath, - rule.GetDependency().GetContext().FileOccurrence.Line) - - return fmt.Sprintf("%x", sha1.Sum([]byte(data))) -} diff --git a/pkg/output_formatter_supportive/configuration/formatter_configuration.go b/pkg/output_formatter_supportive/configuration/formatter_configuration.go deleted file mode 100644 index 8d4b11b..0000000 --- a/pkg/output_formatter_supportive/configuration/formatter_configuration.go +++ /dev/null @@ -1,17 +0,0 @@ -package configuration - -import ( - formatter2 "github.com/KoNekoD/go-deptrac/pkg/config_contract/formatter" -) - -type FormatterConfiguration struct { - config map[formatter2.FormatterType]formatter2.FormatterConfigInterface -} - -func NewFormatterConfiguration(config map[formatter2.FormatterType]formatter2.FormatterConfigInterface) *FormatterConfiguration { - return &FormatterConfiguration{config: config} -} - -func (f *FormatterConfiguration) GetConfigFor(area formatter2.FormatterType) formatter2.FormatterConfigInterface { - return f.config[area] -} diff --git a/pkg/output_formatter_supportive/console_output_formatter.go b/pkg/output_formatter_supportive/console_output_formatter.go deleted file mode 100644 index cd60a04..0000000 --- a/pkg/output_formatter_supportive/console_output_formatter.go +++ /dev/null @@ -1,160 +0,0 @@ -package output_formatter_supportive - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "strings" -) - -type ConsoleOutputFormatter struct{} - -func NewConsoleOutputFormatter() *ConsoleOutputFormatter { - return &ConsoleOutputFormatter{} -} - -func (f *ConsoleOutputFormatter) GetName() string { - return "console_supportive" -} - -func (f *ConsoleOutputFormatter) Finish(outputResult output_result.OutputResult, output output_formatter_contract2.OutputInterface, input output_formatter_contract2.OutputFormatterInput) { - for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { - f.printViolation(rule.(*result_contract2.Violation), output) - } - - if input.ReportSkipped { - for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { - f.printViolation(rule.(*result_contract2.SkippedViolation), output) - } - } - - if input.ReportUncovered { - f.printUncovered(outputResult, output) - } - - if outputResult.HasErrors() { - f.printErrors(outputResult, output) - } - - if outputResult.HasWarnings() { - f.printWarnings(outputResult, output) - } - - f.printSummary(outputResult, output) -} - -func (f *ConsoleOutputFormatter) printViolation(rule result_contract2.RuleInterface, output output_formatter_contract2.OutputInterface) { - dep := rule.GetDependency() - skippedText := "" - - dependerLayer := "" - dependentLayer := "" - - if ruleAsserted, ok := rule.(*result_contract2.SkippedViolation); ok { - skippedText = "[SKIPPED] " - dependerLayer = ruleAsserted.GetDependerLayer() - dependentLayer = ruleAsserted.GetDependentLayer() - } else if ruleAsserted, ok := rule.(*result_contract2.Violation); ok { - dependerLayer = ruleAsserted.GetDependerLayer() - dependentLayer = ruleAsserted.GetDependentLayer() - } else { - panic(fmt.Errorf("unknown rule type: %T", rule)) - } - - output.WriteLineFormatted( - output_formatter_contract2.StringOrArrayOfStrings{ - String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", - skippedText, - dep.GetDepender().ToString(), - dep.GetDependent().ToString(), - dependerLayer, - dependentLayer, - ), - }, - ) - f.printFileOccurrence(output, dep.GetContext().FileOccurrence) - - if len(dep.Serialize()) > 1 { - f.printMultilinePath(output, dep) - } -} - -func (f *ConsoleOutputFormatter) printMultilinePath(output output_formatter_contract2.OutputInterface, dep dependency_contract.DependencyInterface) { - var buffer strings.Builder - for _, depSerialized := range dep.Serialize() { - buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) - } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: buffer.String()}) -} - -func (f *ConsoleOutputFormatter) printSummary(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - violationCount := len(result.Violations()) - skippedViolationCount := len(result.SkippedViolations()) - uncoveredCount := len(result.Uncovered()) - allowedCount := len(result.Allowed()) - warningsCount := len(result.Warnings) - errorsCount := len(result.Errors) - - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "Report:"}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) -} - -func (f *ConsoleOutputFormatter) printUncovered(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - uncovered := result.Uncovered() - if len(uncovered) == 0 { - return - } - - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) - for _, u := range uncovered { - dep := u.GetDependency() - output.WriteLineFormatted( - output_formatter_contract2.StringOrArrayOfStrings{ - String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", - dep.GetDepender().ToString(), - dep.GetDependent().ToString(), - u.Layer, - ), - }, - ) - f.printFileOccurrence(output, dep.GetContext().FileOccurrence) - - if len(dep.Serialize()) > 1 { - f.printMultilinePath(output, dep) - } - } -} - -func (f *ConsoleOutputFormatter) printFileOccurrence(output output_formatter_contract2.OutputInterface, fileOccurrence *ast_contract.FileOccurrence) { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) -} - -func (f *ConsoleOutputFormatter) printErrors(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) - for _, err := range result.Errors { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) - } -} - -func (f *ConsoleOutputFormatter) printWarnings(result output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: ""}) - for _, warning := range result.Warnings { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) - } -} - -func (f *ConsoleOutputFormatter) getColor(condition bool, trueColor, falseColor string) string { - if condition { - return trueColor - } - return falseColor -} diff --git a/pkg/output_formatter_supportive/formatter_provider.go b/pkg/output_formatter_supportive/formatter_provider.go deleted file mode 100644 index c1852d5..0000000 --- a/pkg/output_formatter_supportive/formatter_provider.go +++ /dev/null @@ -1,37 +0,0 @@ -package output_formatter_supportive - -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_injection_supportive/Exception/InvalidServiceInLocatorException" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - "golang.org/x/exp/maps" - "reflect" -) - -type FormatterProvider struct { - formatterLocator map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface -} - -func NewFormatterProvider(formatterLocator map[output_formatter_contract2.OutputFormatterType]output_formatter_contract2.OutputFormatterInterface) *FormatterProvider { - return &FormatterProvider{ - formatterLocator: formatterLocator, - } -} - -func (f *FormatterProvider) Get(id output_formatter_contract2.OutputFormatterType) (output_formatter_contract2.OutputFormatterInterface, error) { - service, ok := f.formatterLocator[id] - - if !ok { - return nil, InvalidServiceInLocatorException.NewInvalidServiceInLocatorExceptionInvalidType(id, reflect.TypeOf(service).Name(), "OutputFormatterInterface.OutputFormatterInterface{}") - } - - return service, nil -} - -func (f *FormatterProvider) Has(id output_formatter_contract2.OutputFormatterType) bool { - _, ok := f.formatterLocator[id] - return ok -} - -func (f *FormatterProvider) GetKnownFormatters() []output_formatter_contract2.OutputFormatterType { - return maps.Keys(f.formatterLocator) -} diff --git a/pkg/output_formatter_supportive/github_actions_output_formatter.go b/pkg/output_formatter_supportive/github_actions_output_formatter.go deleted file mode 100644 index 50ca2c8..0000000 --- a/pkg/output_formatter_supportive/github_actions_output_formatter.go +++ /dev/null @@ -1,120 +0,0 @@ -package output_formatter_supportive - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" - "strings" -) - -type GithubActionsOutputFormatter struct{} - -func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { - return &GithubActionsOutputFormatter{} -} - -func (g *GithubActionsOutputFormatter) GetName() output_formatter_contract2.OutputFormatterType { - return output_formatter_contract2.GithubActions -} - -func (g *GithubActionsOutputFormatter) Finish(outputResult *output_result.OutputResult, output output_formatter_contract2.OutputInterface, outputFormatterInput *output_formatter_contract2.OutputFormatterInput) error { - for _, rule := range outputResult.AllOf(result_contract2.TypeViolation) { - g.printViolation(rule, output) - } - if outputFormatterInput.ReportSkipped { - for _, rule := range outputResult.AllOf(result_contract2.TypeSkippedViolation) { - g.printViolation(rule, output) - } - } - if outputFormatterInput.ReportUncovered { - g.printUncovered(outputResult, output, outputFormatterInput.FailOnUncovered) - } - if outputResult.HasErrors() { - g.printErrors(outputResult, output) - } - if outputResult.HasWarnings() { - g.printWarnings(outputResult, output) - } - - return nil -} - -func (g *GithubActionsOutputFormatter) determineLogLevel(rule result_contract2.RuleInterface) string { - switch rule.(type) { - case *result_contract2.Violation: - return "error" - case *result_contract2.SkippedViolation: - return "warning" - default: - return "debug" - } -} - -func (g *GithubActionsOutputFormatter) printUncovered(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface, reportAsError bool) { - for _, u := range result.Uncovered() { - dependency := u.GetDependency() - - reportAs := "warning" - if reportAsError { - reportAs = "error" - } - - output.WriteLineFormatted( - output_formatter_contract2.StringOrArrayOfStrings{ - String: fmt.Sprintf( - "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", - reportAs, - dependency.GetContext().FileOccurrence.FilePath, - dependency.GetContext().FileOccurrence.Line, - dependency.GetDepender().ToString(), - dependency.GetDependent().ToString(), - u.Layer, - ), - }, - ) - } -} - -func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependency_contract.DependencyInterface) string { - lines := make([]string, 0) - for _, serializedDependency := range dep.Serialize() { - lines = append(lines, fmt.Sprintf("%s::%d", serializedDependency["name"], serializedDependency["line"])) - } - return strings.Join(lines, " ->%0A") -} - -func (g *GithubActionsOutputFormatter) printErrors(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - for _, e := range result.Errors { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) - } -} - -func (g *GithubActionsOutputFormatter) printWarnings(result *output_result.OutputResult, output output_formatter_contract2.OutputInterface) { - for _, warning := range result.Warnings { - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) - } -} - -func (g *GithubActionsOutputFormatter) printViolation(rule result_contract2.RuleInterface, output output_formatter_contract2.OutputInterface) { - dependency := rule.GetDependency() - prefix := "" - dependerLayer := "" - dependentLayer := "" - switch v := rule.(type) { - case *result_contract2.SkippedViolation: - prefix = "[SKIPPED] " - dependerLayer = v.GetDependerLayer() - dependentLayer = v.GetDependentLayer() - case *result_contract2.Violation: - dependerLayer = v.GetDependerLayer() - dependentLayer = v.GetDependentLayer() - } - message := fmt.Sprintf("%s%s must not depend on %s (%s on %s)", prefix, dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), dependerLayer, dependentLayer) - if len(dependency.Serialize()) > 1 { - message += "%0A" + g.multilinePathMessage(dependency) - - } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) -} diff --git a/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go b/pkg/parsers/nikic_php_parser.go similarity index 62% rename from pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go rename to pkg/parsers/nikic_php_parser.go index 3996acc..1c33dc3 100644 --- a/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser.go +++ b/pkg/parsers/nikic_php_parser.go @@ -1,11 +1,11 @@ -package nikic_php_parser +package parsers import ( - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - astParser "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/cache" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/pkg/errors" "go/ast" "go/parser" "go/token" @@ -19,7 +19,7 @@ type parsedFilesBag struct { parsedFiles map[string]*parsedFile } -func (p *parsedFilesBag) Add(fileReference *ast_map2.FileReference, rootNode *ast.File) { +func (p *parsedFilesBag) Add(fileReference *references.FileReference, rootNode *ast.File) { filepath := fileReference.GetFilepath() file := &parsedFile{fileReference: fileReference, rootNode: rootNode} p.parsedFiles[*filepath] = file @@ -30,7 +30,7 @@ func (p *parsedFilesBag) Get(filepath string) *parsedFile { } type parsedFile struct { - fileReference *ast_map2.FileReference + fileReference *references.FileReference rootNode *ast.File debt []interface{} } @@ -47,13 +47,13 @@ func (p *parsedFile) GetOwnType(name string) *ast.Ident { type NikicPhpParser struct { classAstMap map[string]*ast.Ident - cache cache.AstFileReferenceCacheInterface - typeResolver *astParser.TypeResolver - nodeNamer *node_namer.NodeNamer - extractors []extractors.ReferenceExtractorInterface + cache ast_map.AstFileReferenceCacheInterface + typeResolver *types.TypeResolver + nodeNamer *nodes.NodeNamer + extractors []references.ReferenceExtractorInterface } -func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver *astParser.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *nodes.NodeNamer, extractors []references.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, @@ -63,7 +63,7 @@ func NewNikicPhpParser(cache cache.AstFileReferenceCacheInterface, typeResolver } } -func (p *NikicPhpParser) ParseFile(file string) (*ast_map2.FileReference, error) { +func (p *NikicPhpParser) ParseFile(file string) (*references.FileReference, error) { v, err := p.cache.Get(file) if err != nil { return nil, err @@ -72,12 +72,16 @@ func (p *NikicPhpParser) ParseFile(file string) (*ast_map2.FileReference, error) return v, nil } - fileReferenceBuilder := ast_map2.CreateFileReferenceBuilder(file) - visitor := NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) + fileReferenceBuilder := references.CreateFileReferenceBuilder(file) + visitor := references.NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) rootNode := p.loadNodesFromFile(file) ast.Walk(visitor, rootNode) + if err = visitor.GetError(); err != nil { + return nil, errors.WithStack(err) + } + fileReference := fileReferenceBuilder.Build() errCacheSet := p.cache.Set(fileReference) @@ -89,7 +93,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*ast_map2.FileReference, error) return fileReference, nil } -func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *ast_map2.ClassLikeReference) *ast.Ident { +func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *references.ClassLikeReference) *ast.Ident { classLikeName := classReference.GetToken().ToString() if v, ok := classAstMap[classLikeName]; ok { return v diff --git a/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser_test.go b/pkg/parsers/nikic_php_parser_test.go similarity index 72% rename from pkg/ast_core/parser/nikic_php_parser/nikic_php_parser_test.go rename to pkg/parsers/nikic_php_parser_test.go index 9501877..61649a6 100644 --- a/pkg/ast_core/parser/nikic_php_parser/nikic_php_parser_test.go +++ b/pkg/parsers/nikic_php_parser_test.go @@ -1,4 +1,4 @@ -package nikic_php_parser +package parsers import ( "go/parser" @@ -7,7 +7,7 @@ import ( ) func TestParsePackage(t *testing.T) { - dir, err := parser.ParseDir(token.NewFileSet(), "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/pkg/Core/Ast/AstMap", nil, 0) + dir, err := parser.ParseDir(token.NewFileSet(), "/home/mizuki/Documents/dev/KoNekoD/go_deptrac/pkg/Core/Ast/AstMap", nil, 0) if err != nil { t.Error(err) } diff --git a/pkg/parsers/parser_interface.go b/pkg/parsers/parser_interface.go new file mode 100644 index 0000000..95d9c0f --- /dev/null +++ b/pkg/parsers/parser_interface.go @@ -0,0 +1,7 @@ +package parsers + +import "github.com/KoNekoD/go-deptrac/pkg/references" + +type ParserInterface interface { + ParseFile(file string) (*references.FileReference, error) +} diff --git a/pkg/ast_core/parser/extractors/AnnotationReferenceExtractor.php b/pkg/references/AnnotationReferenceExtractor.php similarity index 100% rename from pkg/ast_core/parser/extractors/AnnotationReferenceExtractor.php rename to pkg/references/AnnotationReferenceExtractor.php diff --git a/pkg/references/class_like_reference.go b/pkg/references/class_like_reference.go new file mode 100644 index 0000000..0b32a13 --- /dev/null +++ b/pkg/references/class_like_reference.go @@ -0,0 +1,49 @@ +package references + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/types" +) + +type ClassLikeReference struct { + Type *types.ClassLikeType + classLikeName *tokens.ClassLikeToken + + Inherits []*ast_map.AstInherit + Dependencies []*tokens.DependencyToken + fileReference *FileReference + *tokens.TaggedTokenReference +} + +func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *types.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { + if classLikeType == nil { + classLikeTypeTmp := types.TypeClasslike + classLikeType = &classLikeTypeTmp + } + + return &ClassLikeReference{ + Type: classLikeType, + classLikeName: classLikeName, + Inherits: inherits, + Dependencies: dependencies, + fileReference: fileReference, + TaggedTokenReference: tokens.NewTaggedTokenReference(tags), + } +} + +func (c *ClassLikeReference) WithFileReference(astFileReference *FileReference) *ClassLikeReference { + return NewClassLikeReference(c.classLikeName, c.Type, c.Inherits, c.Dependencies, c.Tags, astFileReference) +} + +func (c *ClassLikeReference) GetFilepath() *string { + return c.fileReference.Filepath +} + +func (c *ClassLikeReference) GetToken() tokens.TokenInterface { + return c.classLikeName +} + +func (c *ClassLikeReference) GetDependencies() []*tokens.DependencyToken { + return c.Dependencies +} diff --git a/pkg/references/class_like_reference_builder.go b/pkg/references/class_like_reference_builder.go new file mode 100644 index 0000000..8293b74 --- /dev/null +++ b/pkg/references/class_like_reference_builder.go @@ -0,0 +1,68 @@ +package references + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/violations" +) + +type ClassLikeReferenceBuilder struct { + *ReferenceBuilder + + inherits []*ast_map.AstInherit + + classLikeToken *tokens.ClassLikeToken + classLikeType *types.ClassLikeType + tags map[string][]string +} + +func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *types.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { + return &ClassLikeReferenceBuilder{ + ReferenceBuilder: NewReferenceBuilder(tokenTemplates, filepath), + inherits: make([]*ast_map.AstInherit, 0), + classLikeToken: classLikeToken, + classLikeType: classLikeType, + tags: tags, + } +} + +func CreateClassLikeReferenceBuilderClassLike(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { + typeClassLike := types.TypeClasslike + return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClassLike, tags) +} + +func CreateClassLikeReferenceBuilderClass(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { + typeClass := types.TypeClass + return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClass, tags) +} + +func CreateClassLikeReferenceBuilderTrait(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { + typeTrait := types.TypeTrait + return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeTrait, tags) +} + +func CreateClassLikeReferenceBuilderInterface(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { + typeInterface := types.TypeInterface + return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeInterface, tags) +} + +// Build - Internal +func (b *ClassLikeReferenceBuilder) Build() *ClassLikeReference { + return NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) +} + +func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) + return b +} + +func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) + return b +} + +func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) + return b +} diff --git a/pkg/ast_core/ast_map/file_reference.go b/pkg/references/file_reference.go similarity index 75% rename from pkg/ast_core/ast_map/file_reference.go rename to pkg/references/file_reference.go index f06e04b..8e5d21a 100644 --- a/pkg/ast_core/ast_map/file_reference.go +++ b/pkg/references/file_reference.go @@ -1,17 +1,15 @@ -package ast_map +package references -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/tokens" type FileReference struct { Filepath *string ClassLikeReferences []*ClassLikeReference FunctionReferences []*FunctionReference - Dependencies []*DependencyToken + Dependencies []*tokens.DependencyToken } -func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*DependencyToken) *FileReference { +func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens.DependencyToken) *FileReference { structLikeReferencesMapped := make([]*ClassLikeReference, 0) functionReferencesMapped := make([]*FunctionReference, 0) @@ -37,10 +35,10 @@ func (r *FileReference) GetFilepath() *string { return r.Filepath } -func (r *FileReference) GetToken() ast_contract.TokenInterface { - return NewFileToken(r.Filepath) +func (r *FileReference) GetToken() tokens.TokenInterface { + return tokens.NewFileToken(r.Filepath) } -func (r *FileReference) GetDependencies() []*DependencyToken { +func (r *FileReference) GetDependencies() []*tokens.DependencyToken { return r.Dependencies } diff --git a/pkg/ast_core/ast_map/file_reference_builder.go b/pkg/references/file_reference_builder.go similarity index 90% rename from pkg/ast_core/ast_map/file_reference_builder.go rename to pkg/references/file_reference_builder.go index 8819d94..437310f 100644 --- a/pkg/ast_core/ast_map/file_reference_builder.go +++ b/pkg/references/file_reference_builder.go @@ -1,7 +1,8 @@ -package ast_map +package references import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type FileReferenceBuilder struct { @@ -15,7 +16,7 @@ func CreateFileReferenceBuilder(filepath string) *FileReferenceBuilder { } func (b *FileReferenceBuilder) UseStatement(classLikeName string, occursAtLine int) *FileReferenceBuilder { - b.Dependencies = append(b.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, ast_contract.DependencyTypeUse))) + b.Dependencies = append(b.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, dependencies.DependencyTypeUse))) return b } diff --git a/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go b/pkg/references/file_reference_visitor.go similarity index 66% rename from pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go rename to pkg/references/file_reference_visitor.go index 2a6a6ca..1334eb4 100644 --- a/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor.go +++ b/pkg/references/file_reference_visitor.go @@ -1,27 +1,27 @@ -package nikic_php_parser +package references import ( - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/hashicorp/go-multierror" + "github.com/pkg/errors" "go/ast" "go/token" ) type FileReferenceVisitor struct { - dependencyResolvers []extractors.ReferenceExtractorInterface - currentTypeScope *parser2.TypeScope - currentReference ast_map2.ReferenceBuilderInterface - fileReferenceBuilder *ast_map2.FileReferenceBuilder - typeResolver *parser2.TypeResolver - nodeNamer *node_namer.NodeNamer + dependencyResolvers []ReferenceExtractorInterface + currentTypeScope *types.TypeScope + currentReference ReferenceBuilderInterface + fileReferenceBuilder *FileReferenceBuilder + typeResolver *types.TypeResolver + nodeNamer *nodes.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *ast_map2.FileReferenceBuilder, resolver *parser2.TypeResolver, nodeNamer *node_namer.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *nodes.NodeNamer, extractors ...ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, @@ -29,7 +29,7 @@ func NewFileReferenceVisitor(fileReferenceBuilder *ast_map2.FileReferenceBuilder nodeNamer: nodeNamer, errors: make([]error, 0), dependencyResolvers: extractors, - currentTypeScope: parser2.NewTypeScope(""), + currentTypeScope: types.NewTypeScope(""), } } @@ -66,14 +66,74 @@ func (f *FileReferenceVisitor) Visit(node ast.Node) (w ast.Visitor) { func (f *FileReferenceVisitor) enterNode(node ast.Node) { switch typedNode := node.(type) { case *ast.File: - packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) // TODO: Possible bug when file_supportive dir != package declared in file_supportive + // TODO: Possible bug when file_supportive dir != package declared in file_supportive + packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) f.addErrIfNeeded(err) - f.currentTypeScope = parser2.NewTypeScope(packageFileName).SetFileNode(typedNode) + f.currentTypeScope = types.NewTypeScope(packageFileName).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: f.enterGenDecl(typedNode) + + case *ast.ArrayType, + *ast.AssignStmt, + *ast.BadDecl, + *ast.BadExpr, + *ast.BadStmt, + *ast.BasicLit, + *ast.BinaryExpr, + *ast.BlockStmt, + *ast.BranchStmt, + *ast.CallExpr, + *ast.CaseClause, + *ast.ChanType, + *ast.CommClause, + *ast.Comment, + *ast.CommentGroup, + *ast.CompositeLit, + ast.Decl, + *ast.DeclStmt, + *ast.DeferStmt, + *ast.Ellipsis, + *ast.EmptyStmt, + ast.Expr, + *ast.ExprStmt, + *ast.Field, + *ast.FieldList, + *ast.ForStmt, + *ast.FuncLit, + *ast.FuncType, + *ast.GoStmt, + *ast.Ident, + *ast.IfStmt, + *ast.ImportSpec, + *ast.IncDecStmt, + *ast.IndexExpr, + *ast.IndexListExpr, + *ast.InterfaceType, + *ast.KeyValueExpr, + *ast.LabeledStmt, + *ast.MapType, + *ast.Package, + *ast.ParenExpr, + *ast.RangeStmt, + *ast.ReturnStmt, + *ast.SelectStmt, + *ast.SelectorExpr, + *ast.SendStmt, + *ast.SliceExpr, + ast.Spec, + *ast.StarExpr, + ast.Stmt, + *ast.StructType, + *ast.SwitchStmt, + *ast.TypeAssertExpr, + *ast.TypeSpec, + *ast.TypeSwitchStmt, + *ast.UnaryExpr, + *ast.ValueSpec: + return } } func (f *FileReferenceVisitor) leaveNode(node ast.Node) { @@ -130,7 +190,7 @@ func (f *FileReferenceVisitor) enterFunction(node *ast.FuncDecl) { for _, param := range node.Type.Params.List { if param.Type != nil { for _, classLikeName := range f.typeResolver.ResolvePHPParserTypes(f.currentTypeScope, param.Type) { - f.currentReference.Parameter(classLikeName, util.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(param.Type.Pos()))) + f.currentReference.Parameter(classLikeName, utils.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(param.Type.Pos()))) } } } @@ -139,7 +199,7 @@ func (f *FileReferenceVisitor) enterFunction(node *ast.FuncDecl) { for _, returnType := range node.Type.Results.List { if returnType.Type != nil { for _, classLikeName := range f.typeResolver.ResolvePHPParserTypes(f.currentTypeScope, returnType.Type) { - f.currentReference.ReturnType(classLikeName, util.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(returnType.Type.Pos()))) + f.currentReference.ReturnType(classLikeName, utils.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(returnType.Type.Pos()))) } } } @@ -209,5 +269,13 @@ func (f *FileReferenceVisitor) leaveUse(node *ast.ImportSpec) { } f.currentTypeScope.AddUse(classLikeName, alias) - f.fileReferenceBuilder.UseStatement(classLikeName, util.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(node.Path.Pos()))) + f.fileReferenceBuilder.UseStatement(classLikeName, utils.GetLineByPosition(f.fileReferenceBuilder.Filepath, int(node.Path.Pos()))) +} + +func (f *FileReferenceVisitor) GetError() error { + if len(f.errors) == 0 { + return nil + } + + return multierror.Append(errors.New("visitor worked with errors"), f.errors...) } diff --git a/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go b/pkg/references/file_reference_visitor_test.go similarity index 53% rename from pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go rename to pkg/references/file_reference_visitor_test.go index 89d40b2..3aca5c6 100644 --- a/pkg/ast_core/parser/nikic_php_parser/file_reference_visitor_test.go +++ b/pkg/references/file_reference_visitor_test.go @@ -1,10 +1,8 @@ -package nikic_php_parser +package references import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - parser2 "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/extractors" + "github.com/KoNekoD/go-deptrac/pkg/types" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" @@ -21,11 +19,11 @@ func TestFileReferenceVisitorOk(t *testing.T) { t.Error(err) } - referenceExtractorInterfaces := make([]extractors.ReferenceExtractorInterface, 0) + referenceExtractorInterfaces := make([]ReferenceExtractorInterface, 0) fileReferenceVisitor := NewFileReferenceVisitor( - ast_map.CreateFileReferenceBuilder(file), - parser2.NewTypeResolver( + CreateFileReferenceBuilder(file), + types.NewTypeResolver( nil, ), nil, @@ -36,3 +34,13 @@ func TestFileReferenceVisitorOk(t *testing.T) { fmt.Println() } + +// TestDeclsInRoot - Decls is only ast.Decl or ast.FuncDecl +func TestDeclsInRoot(t *testing.T) { + file, err := parser.ParseFile(token.NewFileSet(), "resources/test/decls_in_root/main.go", nil, 0) + if err != nil { + t.Fatal(err) + } + + fmt.Println(file) +} diff --git a/pkg/ast_core/ast_map/function_reference.go b/pkg/references/function_reference.go similarity index 53% rename from pkg/ast_core/ast_map/function_reference.go rename to pkg/references/function_reference.go index a86b034..33fac30 100644 --- a/pkg/ast_core/ast_map/function_reference.go +++ b/pkg/references/function_reference.go @@ -1,17 +1,15 @@ -package ast_map +package references -import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/tokens" type FunctionReference struct { - *TaggedTokenReference - functionName *FunctionToken - Dependencies []*DependencyToken + *tokens.TaggedTokenReference + functionName *tokens.FunctionToken + Dependencies []*tokens.DependencyToken fileReference *FileReference } -func NewFunctionReference(functionName *FunctionToken, dependencies []*DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { +func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { for _, dependency := range dependencies { if dependency.Token.ToString() == "" { panic("1") @@ -21,7 +19,7 @@ func NewFunctionReference(functionName *FunctionToken, dependencies []*Dependenc return &FunctionReference{ functionName: functionName, Dependencies: dependencies, - TaggedTokenReference: NewTaggedTokenReference(tags), + TaggedTokenReference: tokens.NewTaggedTokenReference(tags), fileReference: fileReference, } } @@ -34,10 +32,10 @@ func (r *FunctionReference) GetFilepath() *string { return r.fileReference.Filepath } -func (r *FunctionReference) GetToken() ast_contract.TokenInterface { +func (r *FunctionReference) GetToken() tokens.TokenInterface { return r.functionName } -func (r *FunctionReference) GetDependencies() []*DependencyToken { +func (r *FunctionReference) GetDependencies() []*tokens.DependencyToken { return r.Dependencies } diff --git a/pkg/ast_core/ast_map/function_reference_builder.go b/pkg/references/function_reference_builder.go similarity index 81% rename from pkg/ast_core/ast_map/function_reference_builder.go rename to pkg/references/function_reference_builder.go index 25dd695..e0414e3 100644 --- a/pkg/ast_core/ast_map/function_reference_builder.go +++ b/pkg/references/function_reference_builder.go @@ -1,4 +1,6 @@ -package ast_map +package references + +import "github.com/KoNekoD/go-deptrac/pkg/tokens" type FunctionReferenceBuilder struct { *ReferenceBuilder @@ -20,5 +22,5 @@ func CreateFunctionReferenceBuilder(filepath string, functionName string, functi // Build - Internal func (b *FunctionReferenceBuilder) Build() *FunctionReference { - return NewFunctionReference(NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) + return NewFunctionReference(tokens.NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) } diff --git a/pkg/ast_core/ast_map/reference_builder.go b/pkg/references/reference_builder.go similarity index 55% rename from pkg/ast_core/ast_map/reference_builder.go rename to pkg/references/reference_builder.go index 72c05e8..eb417ed 100644 --- a/pkg/ast_core/ast_map/reference_builder.go +++ b/pkg/references/reference_builder.go @@ -1,11 +1,13 @@ -package ast_map +package references import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/violations" ) type ReferenceBuilder struct { - Dependencies []*DependencyToken + Dependencies []*tokens.DependencyToken tokenTemplates []string Filepath string ref *FileReference @@ -13,7 +15,7 @@ type ReferenceBuilder struct { type ReferenceBuilderInterface interface { GetTokenTemplates() []string - CreateContext(occursAtLine int, dependencyType ast_contract2.DependencyType) *ast_contract2.DependencyContext + CreateContext(occursAtLine int, dependencyType dependencies.DependencyType) *dependencies.DependencyContext UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder Variable(classLikeName string, occursAtLine int) *ReferenceBuilder Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder @@ -36,7 +38,7 @@ type ReferenceBuilderInterface interface { func NewReferenceBuilder(tokenTemplates []string, filepath string) *ReferenceBuilder { return &ReferenceBuilder{ - Dependencies: make([]*DependencyToken, 0), + Dependencies: make([]*tokens.DependencyToken, 0), tokenTemplates: tokenTemplates, Filepath: filepath, } @@ -46,88 +48,88 @@ func (r *ReferenceBuilder) GetTokenTemplates() []string { return r.tokenTemplates } -func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType ast_contract2.DependencyType) *ast_contract2.DependencyContext { - return ast_contract2.NewDependencyContext(ast_contract2.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) +func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType dependencies.DependencyType) *dependencies.DependencyContext { + return dependencies.NewDependencyContext(violations.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) } // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. func (r *ReferenceBuilder) UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeUnresolvedFunctionCall))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, dependencies.DependencyTypeUnresolvedFunctionCall))) return r } func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeVariable))) return r } func (r *ReferenceBuilder) Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeSuperGlobalVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, dependencies.DependencyTypeSuperGlobalVariable))) return r } func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeReturnType))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeReturnType))) return r } func (r *ReferenceBuilder) ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeThrow))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeThrow))) return r } func (r *ReferenceBuilder) AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassExtends))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassExtends))) return r } func (r *ReferenceBuilder) AnonymousClassTrait(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassTrait))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassTrait))) return r } func (r *ReferenceBuilder) ConstFetch(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeConst))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeConst))) return r } func (r *ReferenceBuilder) AnonymousClassImplements(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAnonymousClassImplements))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassImplements))) return r } func (r *ReferenceBuilder) Parameter(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeParameter))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeParameter))) return r } func (r *ReferenceBuilder) Attribute(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeAttribute))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAttribute))) return r } func (r *ReferenceBuilder) Instanceof(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeInstanceof))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeInstanceof))) return r } func (r *ReferenceBuilder) NewStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeNew))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeNew))) return r } func (r *ReferenceBuilder) StaticProperty(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeStaticProperty))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeStaticProperty))) return r } func (r *ReferenceBuilder) StaticMethod(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeStaticMethod))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeStaticMethod))) return r } func (r *ReferenceBuilder) CatchStmt(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, NewDependencyToken(NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, ast_contract2.DependencyTypeCatch))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeCatch))) return r } diff --git a/pkg/references/reference_extractor_interface.go b/pkg/references/reference_extractor_interface.go new file mode 100644 index 0000000..3b230da --- /dev/null +++ b/pkg/references/reference_extractor_interface.go @@ -0,0 +1,12 @@ +package references + +import ( + "github.com/KoNekoD/go-deptrac/pkg/types" + "go/ast" +) + +// TODO: НУЖНО РЕАЛИЗОВАТЬ ВСЕ ЭКСТРАКТОРЫ И УБРАТЬ В НИХ ЧАСТЬ КОДА ИЗ ВИЗИЬОРА И ТАЙП РЕЗОЛВЕРА - ВЫЧЕСЛЕНИЕ ЗАВИСИМОСТЕЙ-- ДЕЛО ReferenceExtractorInterface! + +type ReferenceExtractorInterface interface { + ProcessNode(node ast.Node, referenceBuilder ReferenceBuilderInterface, typeScope *types.TypeScope) +} diff --git a/pkg/references/variable_reference.go b/pkg/references/variable_reference.go new file mode 100644 index 0000000..c1c0560 --- /dev/null +++ b/pkg/references/variable_reference.go @@ -0,0 +1,19 @@ +package references + +import "github.com/KoNekoD/go-deptrac/pkg/tokens" + +type VariableReference struct { + tokenName *tokens.SuperGlobalToken +} + +func NewVariableReference(tokenName *tokens.SuperGlobalToken) *VariableReference { + return &VariableReference{tokenName: tokenName} +} + +func (v *VariableReference) GetFilepath() *string { + return nil +} + +func (v *VariableReference) GetToken() tokens.TokenInterface { + return v.tokenName +} diff --git a/pkg/result_contract/output_result/output_result.go b/pkg/result_contract/output_result/output_result.go deleted file mode 100644 index f42e35a..0000000 --- a/pkg/result_contract/output_result/output_result.go +++ /dev/null @@ -1,111 +0,0 @@ -package output_result - -import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/analysis_result" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" -) - -// OutputResult - Represents a result_contract ready for output formatting -type OutputResult struct { - rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface - Errors []*result_contract2.Error - Warnings []*result_contract2.Warning -} - -func newOutputResult(rules map[result_contract2.RuleTypeEnum]map[string]result_contract2.RuleInterface, errors []*result_contract2.Error, warnings []*result_contract2.Warning) *OutputResult { - return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} -} - -func NewOutputResultFromAnalysisResult(analysisResult *analysis_result.AnalysisResult) *OutputResult { - return newOutputResult( - analysisResult.Rules(), - analysisResult.Errors(), - analysisResult.Warnings(), - ) -} - -func (r *OutputResult) AllOf(ruleType result_contract2.RuleTypeEnum) []result_contract2.RuleInterface { - rulesByIds, ok := r.rules[ruleType] - if ok { - rules := make([]result_contract2.RuleInterface, 0, len(rulesByIds)) - - for _, rule := range rulesByIds { - rules = append(rules, rule) - } - - return rules - } - return nil -} -func (r *OutputResult) AllRules() []result_contract2.RuleInterface { - var rules []result_contract2.RuleInterface - for _, ruleArray := range r.rules { - for _, ruleItem := range ruleArray { - rules = append(rules, ruleItem) - } - } - return rules -} -func (r *OutputResult) Violations() []*result_contract2.Violation { - untyped := r.AllOf(result_contract2.TypeViolation) - - items := make([]*result_contract2.Violation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result_contract2.Violation)) - } - - return items -} - -func (r *OutputResult) HasViolations() bool { - return len(r.Violations()) > 0 -} - -func (r *OutputResult) SkippedViolations() []*result_contract2.SkippedViolation { - untyped := r.AllOf(result_contract2.TypeSkippedViolation) - - items := make([]*result_contract2.SkippedViolation, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result_contract2.SkippedViolation)) - } - - return items -} - -func (r *OutputResult) Uncovered() []*result_contract2.Uncovered { - untyped := r.AllOf(result_contract2.TypeUncovered) - - items := make([]*result_contract2.Uncovered, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result_contract2.Uncovered)) - } - - return items -} - -func (r *OutputResult) HasUncovered() bool { - return len(r.Uncovered()) > 0 -} - -func (r *OutputResult) HasAllowed() bool { - return len(r.Allowed()) > 0 -} - -func (r *OutputResult) Allowed() []*result_contract2.Allowed { - untyped := r.AllOf(result_contract2.TypeAllowed) - - items := make([]*result_contract2.Allowed, 0, len(untyped)) - for _, item := range untyped { - items = append(items, item.(*result_contract2.Allowed)) - } - - return items -} - -func (r *OutputResult) HasErrors() bool { - return len(r.Errors) > 0 -} - -func (r *OutputResult) HasWarnings() bool { - return len(r.Warnings) > 0 -} diff --git a/pkg/result_contract/rule_interface.go b/pkg/result_contract/rule_interface.go deleted file mode 100644 index e62ea6d..0000000 --- a/pkg/result_contract/rule_interface.go +++ /dev/null @@ -1,10 +0,0 @@ -package result_contract - -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) - -// RuleInterface - Represents a dependency_contract -type RuleInterface interface { - GetDependency() dependency_contract.DependencyInterface -} diff --git a/pkg/result_contract/uncovered.go b/pkg/result_contract/uncovered.go deleted file mode 100644 index 7da2830..0000000 --- a/pkg/result_contract/uncovered.go +++ /dev/null @@ -1,22 +0,0 @@ -package result_contract - -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) - -// Uncovered - Represents a dependency_contract that is NOT covered by the current configuration. -type Uncovered struct { - Dependency dependency_contract.DependencyInterface - Layer string -} - -func NewUncovered(dependency dependency_contract.DependencyInterface, layer string) *Uncovered { - return &Uncovered{ - Dependency: dependency, - Layer: layer, - } -} - -func (u *Uncovered) GetDependency() dependency_contract.DependencyInterface { - return u.Dependency -} diff --git a/pkg/output_formatter_contract/output_interface.go b/pkg/results/output_interface.go similarity index 88% rename from pkg/output_formatter_contract/output_interface.go rename to pkg/results/output_interface.go index 96841ec..c44b8b8 100644 --- a/pkg/output_formatter_contract/output_interface.go +++ b/pkg/results/output_interface.go @@ -1,4 +1,4 @@ -package output_formatter_contract +package results // OutputInterface - Wrapper around Symfony OutputInterface. type OutputInterface interface { diff --git a/pkg/results/output_result.go b/pkg/results/output_result.go new file mode 100644 index 0000000..aff5ac9 --- /dev/null +++ b/pkg/results/output_result.go @@ -0,0 +1,113 @@ +package results + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +// OutputResult - Represents a result_contract ready for output formatting +type OutputResult struct { + rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface + Errors []*apperrors.Error + Warnings []*tokens.Warning +} + +func newOutputResult(rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface, errors []*apperrors.Error, warnings []*tokens.Warning) *OutputResult { + return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} +} + +func NewOutputResultFromAnalysisResult(analysisResult *rules.AnalysisResult) *OutputResult { + return newOutputResult( + analysisResult.Rules(), + analysisResult.Errors(), + analysisResult.Warnings(), + ) +} + +func (r *OutputResult) AllOf(ruleType enums.RuleTypeEnum) []rules.RuleInterface { + rulesByIds, ok := r.rules[ruleType] + if ok { + rules := make([]rules.RuleInterface, 0, len(rulesByIds)) + + for _, rule := range rulesByIds { + rules = append(rules, rule) + } + + return rules + } + return nil +} +func (r *OutputResult) AllRules() []rules.RuleInterface { + var rules []rules.RuleInterface + for _, ruleArray := range r.rules { + for _, ruleItem := range ruleArray { + rules = append(rules, ruleItem) + } + } + return rules +} +func (r *OutputResult) Violations() []*rules.Violation { + untyped := r.AllOf(enums.TypeViolation) + + items := make([]*rules.Violation, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*rules.Violation)) + } + + return items +} + +func (r *OutputResult) HasViolations() bool { + return len(r.Violations()) > 0 +} + +func (r *OutputResult) SkippedViolations() []*rules.SkippedViolation { + untyped := r.AllOf(enums.TypeSkippedViolation) + + items := make([]*rules.SkippedViolation, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*rules.SkippedViolation)) + } + + return items +} + +func (r *OutputResult) Uncovered() []*rules.Uncovered { + untyped := r.AllOf(enums.TypeUncovered) + + items := make([]*rules.Uncovered, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*rules.Uncovered)) + } + + return items +} + +func (r *OutputResult) HasUncovered() bool { + return len(r.Uncovered()) > 0 +} + +func (r *OutputResult) HasAllowed() bool { + return len(r.Allowed()) > 0 +} + +func (r *OutputResult) Allowed() []*rules.Allowed { + untyped := r.AllOf(enums.TypeAllowed) + + items := make([]*rules.Allowed, 0, len(untyped)) + for _, item := range untyped { + items = append(items, item.(*rules.Allowed)) + } + + return items +} + +func (r *OutputResult) HasErrors() bool { + return len(r.Errors) > 0 +} + +func (r *OutputResult) HasWarnings() bool { + return len(r.Warnings) > 0 +} diff --git a/pkg/output_formatter_contract/output_style_interface.go b/pkg/results/output_style_interface.go similarity index 97% rename from pkg/output_formatter_contract/output_style_interface.go rename to pkg/results/output_style_interface.go index d2263f4..52a478b 100644 --- a/pkg/output_formatter_contract/output_style_interface.go +++ b/pkg/results/output_style_interface.go @@ -1,4 +1,4 @@ -package output_formatter_contract +package results import "strings" diff --git a/pkg/console_supportive/symfony/symfony_output.go b/pkg/results/symfony_output.go similarity index 53% rename from pkg/console_supportive/symfony/symfony_output.go rename to pkg/results/symfony_output.go index 877ccfa..da2791d 100644 --- a/pkg/console_supportive/symfony/symfony_output.go +++ b/pkg/results/symfony_output.go @@ -1,15 +1,14 @@ -package symfony +package results import ( - "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" "github.com/gookit/color" ) type SymfonyOutput struct { - style output_formatter_contract.OutputStyleInterface + style OutputStyleInterface } -func NewSymfonyOutput(style output_formatter_contract.OutputStyleInterface) *SymfonyOutput { +func NewSymfonyOutput(style OutputStyleInterface) *SymfonyOutput { return &SymfonyOutput{ style: style, } @@ -19,7 +18,7 @@ func (o *SymfonyOutput) WriteFormatted(message string) { color.Print(message) } -func (o *SymfonyOutput) WriteLineFormatted(message output_formatter_contract.StringOrArrayOfStrings) { +func (o *SymfonyOutput) WriteLineFormatted(message StringOrArrayOfStrings) { color.Println(message.ToString()) } @@ -27,7 +26,7 @@ func (o *SymfonyOutput) WriteRaw(message string) { color.Println(message) } -func (o *SymfonyOutput) GetStyle() output_formatter_contract.OutputStyleInterface { +func (o *SymfonyOutput) GetStyle() OutputStyleInterface { return o.style } diff --git a/pkg/result_contract/allowed.go b/pkg/rules/allowed.go similarity index 56% rename from pkg/result_contract/allowed.go rename to pkg/rules/allowed.go index 4142c6c..f30d066 100644 --- a/pkg/result_contract/allowed.go +++ b/pkg/rules/allowed.go @@ -1,17 +1,15 @@ -package result_contract +package rules -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/dependencies" // Allowed - Represents a dependency_contract that is allowed to exist given the defined rules type Allowed struct { - Dependency dependency_contract.DependencyInterface + Dependency dependencies.DependencyInterface DependerLayer string DependentLayer string } -func NewAllowed(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string) *Allowed { +func NewAllowed(dependency dependencies.DependencyInterface, dependerLayer string, dependentLayer string) *Allowed { return &Allowed{ Dependency: dependency, DependerLayer: dependerLayer, @@ -19,7 +17,7 @@ func NewAllowed(dependency dependency_contract.DependencyInterface, dependerLaye } } -func (a *Allowed) GetDependency() dependency_contract.DependencyInterface { +func (a *Allowed) GetDependency() dependencies.DependencyInterface { return a.Dependency } diff --git a/pkg/console_supportive/command/analyse_options.go b/pkg/rules/analyse_options.go similarity index 97% rename from pkg/console_supportive/command/analyse_options.go rename to pkg/rules/analyse_options.go index 91a78ce..5932fc2 100644 --- a/pkg/console_supportive/command/analyse_options.go +++ b/pkg/rules/analyse_options.go @@ -1,4 +1,4 @@ -package command +package rules type AnalyseOptions struct { NoProgress bool diff --git a/pkg/config/analyse_options_hook.go b/pkg/rules/analyse_options_hook.go similarity index 88% rename from pkg/config/analyse_options_hook.go rename to pkg/rules/analyse_options_hook.go index dd91c59..f4166e5 100644 --- a/pkg/config/analyse_options_hook.go +++ b/pkg/rules/analyse_options_hook.go @@ -1,13 +1,12 @@ -package config +package rules import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/console_supportive/command" ) type analyseOptionsHook struct{} type AnalyseOptionsHook interface { - GetOptions() *command.AnalyseOptions + GetOptions() *AnalyseOptions } func NewAnalyseOptionsHook() AnalyseOptionsHook { @@ -30,7 +29,7 @@ const ( OptionNoProgressUsage = "Do not show progress bar" ) -func (h *analyseOptionsHook) GetOptions() *command.AnalyseOptions { +func (h *analyseOptionsHook) GetOptions() *AnalyseOptions { reportUncovered := flag.Bool(OptionReportUncovered, false, OptionReportUncoveredUsage) failOnUncovered := flag.Bool(OptionFailOnUncovered, false, OptionFailOnUncoveredUsage) @@ -39,7 +38,7 @@ func (h *analyseOptionsHook) GetOptions() *command.AnalyseOptions { output := flag.String(OptionOutput, "", OptionOutputUsage) noProgress := flag.Bool(OptionNoProgress, false, OptionNoProgressUsage) - return &command.AnalyseOptions{ + return &AnalyseOptions{ ReportUncovered: *reportUncovered, FailOnUncovered: *failOnUncovered, ReportSkipped: *reportSkipped, diff --git a/pkg/rules/analysis_result.go b/pkg/rules/analysis_result.go new file mode 100644 index 0000000..9de42cf --- /dev/null +++ b/pkg/rules/analysis_result.go @@ -0,0 +1,63 @@ +package rules + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) + +// AnalysisResult - Describes the result_contract of a source code analysis. +type AnalysisResult struct { + rules map[enums.RuleTypeEnum]map[string]RuleInterface + + warnings []*tokens.Warning + + errors []*apperrors.Error +} + +func NewAnalysisResult() *AnalysisResult { + return &AnalysisResult{ + rules: make(map[enums.RuleTypeEnum]map[string]RuleInterface), + warnings: make([]*tokens.Warning, 0), + errors: make([]*apperrors.Error, 0), + } +} + +func (r *AnalysisResult) AddRule(rule RuleInterface) { + ruleType := enums.NewRuleTypeEnumByRule(rule) + id := utils.SplObjectID(rule) + + if _, ok := r.rules[ruleType]; !ok { + r.rules[ruleType] = make(map[string]RuleInterface) + } + + r.rules[ruleType][id] = rule +} + +func (r *AnalysisResult) RemoveRule(rule RuleInterface) { + ruleType := enums.NewRuleTypeEnumByRule(rule) + id := utils.SplObjectID(rule) + + delete(r.rules[ruleType], id) +} + +func (r *AnalysisResult) Rules() map[enums.RuleTypeEnum]map[string]RuleInterface { + return r.rules +} + +func (r *AnalysisResult) AddWarning(warning *tokens.Warning) { + r.warnings = append(r.warnings, warning) +} + +func (r *AnalysisResult) Warnings() []*tokens.Warning { + return r.warnings +} + +func (r *AnalysisResult) AddError(error *apperrors.Error) { + r.errors = append(r.errors, error) +} + +func (r *AnalysisResult) Errors() []*apperrors.Error { + return r.errors +} diff --git a/pkg/result_contract/covered_rule_interface.go b/pkg/rules/covered_rule_interface.go similarity index 93% rename from pkg/result_contract/covered_rule_interface.go rename to pkg/rules/covered_rule_interface.go index dde3512..88815ac 100644 --- a/pkg/result_contract/covered_rule_interface.go +++ b/pkg/rules/covered_rule_interface.go @@ -1,4 +1,4 @@ -package result_contract +package rules // CoveredRuleInterface - Represents a dependency_contract that is covered by the defined rules. This does not mean that it is allowed to exist, just that it is covered. In that sense it exists as a complement to `Uncovered` struct type CoveredRuleInterface interface { diff --git a/pkg/rules/rule_interface.go b/pkg/rules/rule_interface.go new file mode 100644 index 0000000..a445fca --- /dev/null +++ b/pkg/rules/rule_interface.go @@ -0,0 +1,8 @@ +package rules + +import "github.com/KoNekoD/go-deptrac/pkg/dependencies" + +// RuleInterface - Represents a dependency_contract +type RuleInterface interface { + GetDependency() dependencies.DependencyInterface +} diff --git a/pkg/config_contract/ruleset.go b/pkg/rules/ruleset.go similarity index 61% rename from pkg/config_contract/ruleset.go rename to pkg/rules/ruleset.go index 9974819..2db1084 100644 --- a/pkg/config_contract/ruleset.go +++ b/pkg/rules/ruleset.go @@ -1,11 +1,13 @@ -package config_contract +package rules + +import "github.com/KoNekoD/go-deptrac/pkg/layers" type Ruleset struct { - LayerConfig *Layer - AccessableLayers []*Layer + LayerConfig *layers.Layer + AccessableLayers []*layers.Layer } -func NewRuleset(layerConfig *Layer, layerConfigs []*Layer) *Ruleset { +func NewRuleset(layerConfig *layers.Layer, layerConfigs []*layers.Layer) *Ruleset { r := &Ruleset{LayerConfig: layerConfig} r.Accesses(layerConfigs...) @@ -13,11 +15,11 @@ func NewRuleset(layerConfig *Layer, layerConfigs []*Layer) *Ruleset { return r } -func NewForLayer(layerConfig *Layer) *Ruleset { - return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*Layer, 0)} +func NewForLayer(layerConfig *layers.Layer) *Ruleset { + return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*layers.Layer, 0)} } -func (r *Ruleset) Accesses(layerConfigs ...*Layer) *Ruleset { +func (r *Ruleset) Accesses(layerConfigs ...*layers.Layer) *Ruleset { for _, config := range layerConfigs { r.AccessableLayers = append(r.AccessableLayers, config) } diff --git a/pkg/analyser_core/ruleset_usage_analyser.go b/pkg/rules/ruleset_usage_analyser.go similarity index 69% rename from pkg/analyser_core/ruleset_usage_analyser.go rename to pkg/rules/ruleset_usage_analyser.go index 912062d..92ef060 100644 --- a/pkg/analyser_core/ruleset_usage_analyser.go +++ b/pkg/rules/ruleset_usage_analyser.go @@ -1,30 +1,28 @@ -package analyser_core +package rules import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core/dependency_resolver" - "github.com/KoNekoD/go-deptrac/pkg/layer_contract" - Layer2 "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" + "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type RulesetUsageAnalyser struct { - layerProvider *layer_contract.LayerProvider - layerResolver Layer2.LayerResolverInterface - astMapExtractor *ast_core.AstMapExtractor - dependencyResolver *dependency_resolver.DependencyResolver - tokenResolver *dependency_core.TokenResolver - layers []*config_contract.Layer + layerProvider *layers2.LayerProvider + layerResolver layers2.LayerResolverInterface + astMapExtractor *ast_map.AstMapExtractor + dependencyResolver *dependencies.DependencyResolver + tokenResolver *tokens.TokenResolver + layers []*layers2.Layer } func NewRulesetUsageAnalyser( - layerProvider *layer_contract.LayerProvider, - layerResolver Layer2.LayerResolverInterface, - astMapExtractor *ast_core.AstMapExtractor, - dependencyResolver *dependency_resolver.DependencyResolver, - tokenResolver *dependency_core.TokenResolver, - layers []*config_contract.Layer, + layerProvider *layers2.LayerProvider, + layerResolver layers2.LayerResolverInterface, + astMapExtractor *ast_map.AstMapExtractor, + dependencyResolver *dependencies.DependencyResolver, + tokenResolver *tokens.TokenResolver, + layers []*layers2.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, diff --git a/pkg/result_contract/skipped_violation.go b/pkg/rules/skipped_violation.go similarity index 57% rename from pkg/result_contract/skipped_violation.go rename to pkg/rules/skipped_violation.go index 0a6b6e7..c163313 100644 --- a/pkg/result_contract/skipped_violation.go +++ b/pkg/rules/skipped_violation.go @@ -1,17 +1,15 @@ -package result_contract +package rules -import ( - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/dependencies" // SkippedViolation - Represents a Violation that is being skipped by the baseline file_supportive type SkippedViolation struct { - Dependency dependency_contract.DependencyInterface + Dependency dependencies.DependencyInterface DependerLayer string DependentLayer string } -func NewSkippedViolation(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { +func NewSkippedViolation(dependency dependencies.DependencyInterface, dependerLayer string, dependentLayer string) *SkippedViolation { return &SkippedViolation{ Dependency: dependency, DependerLayer: dependerLayer, @@ -19,7 +17,7 @@ func NewSkippedViolation(dependency dependency_contract.DependencyInterface, dep } } -func (v *SkippedViolation) GetDependency() dependency_contract.DependencyInterface { +func (v *SkippedViolation) GetDependency() dependencies.DependencyInterface { return v.Dependency } func (v *SkippedViolation) GetDependerLayer() string { diff --git a/pkg/rules/uncovered.go b/pkg/rules/uncovered.go new file mode 100644 index 0000000..e1c6140 --- /dev/null +++ b/pkg/rules/uncovered.go @@ -0,0 +1,20 @@ +package rules + +import "github.com/KoNekoD/go-deptrac/pkg/dependencies" + +// Uncovered - Represents a dependency_contract that is NOT covered by the current configuration. +type Uncovered struct { + Dependency dependencies.DependencyInterface + Layer string +} + +func NewUncovered(dependency dependencies.DependencyInterface, layer string) *Uncovered { + return &Uncovered{ + Dependency: dependency, + Layer: layer, + } +} + +func (u *Uncovered) GetDependency() dependencies.DependencyInterface { + return u.Dependency +} diff --git a/pkg/result_contract/violation.go b/pkg/rules/violation.go similarity index 60% rename from pkg/result_contract/violation.go rename to pkg/rules/violation.go index 99dda91..552b7c2 100644 --- a/pkg/result_contract/violation.go +++ b/pkg/rules/violation.go @@ -1,20 +1,20 @@ -package result_contract +package rules import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/violation_creating_interface" - "github.com/KoNekoD/go-deptrac/pkg/dependency_contract" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/violations" ) // Violation - Represents a dependency_contract that is NOT allowed to exist given the defined rules type Violation struct { - Dependency dependency_contract.DependencyInterface + Dependency dependencies.DependencyInterface DependerLayer string DependentLayer string - ViolationCreatingRule violation_creating_interface.ViolationCreatingInterface + ViolationCreatingRule violations.ViolationCreatingInterface } -func NewViolation(dependency dependency_contract.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violation_creating_interface.ViolationCreatingInterface) *Violation { +func NewViolation(dependency dependencies.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) *Violation { if dependentLayer == dependerLayer { panic("1") @@ -32,7 +32,7 @@ func NewViolation(dependency dependency_contract.DependencyInterface, dependerLa } } -func (v *Violation) GetDependency() dependency_contract.DependencyInterface { +func (v *Violation) GetDependency() dependencies.DependencyInterface { return v.Dependency } func (v *Violation) GetDependerLayer() string { diff --git a/pkg/console_supportive/command/DebugDependenciesRunner.php b/pkg/runners/DebugDependenciesRunner.php similarity index 100% rename from pkg/console_supportive/command/DebugDependenciesRunner.php rename to pkg/runners/DebugDependenciesRunner.php diff --git a/pkg/console_supportive/command/DebugLayerRunner.php b/pkg/runners/DebugLayerRunner.php similarity index 100% rename from pkg/console_supportive/command/DebugLayerRunner.php rename to pkg/runners/DebugLayerRunner.php diff --git a/pkg/console_supportive/command/DebugTokenRunner.php b/pkg/runners/DebugTokenRunner.php similarity index 100% rename from pkg/console_supportive/command/DebugTokenRunner.php rename to pkg/runners/DebugTokenRunner.php diff --git a/pkg/console_supportive/command/DebugUnassignedRunner.php b/pkg/runners/DebugUnassignedRunner.php similarity index 100% rename from pkg/console_supportive/command/DebugUnassignedRunner.php rename to pkg/runners/DebugUnassignedRunner.php diff --git a/pkg/console_supportive/command/DebugUnusedRunner.php b/pkg/runners/DebugUnusedRunner.php similarity index 100% rename from pkg/console_supportive/command/DebugUnusedRunner.php rename to pkg/runners/DebugUnusedRunner.php diff --git a/pkg/runners/analyse_runner.go b/pkg/runners/analyse_runner.go new file mode 100644 index 0000000..5855c86 --- /dev/null +++ b/pkg/runners/analyse_runner.go @@ -0,0 +1,113 @@ +package runners + +import ( + "encoding/json" + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/hashicorp/go-multierror" + "strings" +) + +// AnalyseRunner - Should only be used by AnalyseCommand +type AnalyseRunner struct { + analyzer *dependencies.DependencyLayersAnalyser + formatterProvider *formatters.FormatterProvider +} + +func NewAnalyseRunner(analyzer *dependencies.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { + return &AnalyseRunner{ + analyzer: analyzer, + formatterProvider: formatterProvider, + } +} + +func (r *AnalyseRunner) Run(options *rules.AnalyseOptions, output results.OutputInterface) error { + outputFormatterType, err := formatters.NewOutputFormatterTypeFromString(options.Formatter) + if err != nil { + return err + } + formatter, err := r.formatterProvider.Get(outputFormatterType) + if err != nil { + r.printFormatterNotFoundException(output, options.Formatter) + return apperrors.NewCommandRunExceptionInvalidFormatter() + } + formatterInput := formatters.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) + r.printCollectViolations(output) + + analysisResult, errAnalyse := r.analyzer.Analyse() + if errAnalyse != nil { + r.printAnalysisException(output, multierror.Append(errAnalyse)) + return apperrors.NewCommandRunExceptionAnalyserException(errAnalyse) + } + result := results.NewOutputResultFromAnalysisResult(analysisResult) + r.printFormattingStart(output) + errFinish := formatter.Finish(result, output, formatterInput) + if errFinish != nil { + r.printFormatterError(output, string(formatter.GetName()), errFinish) + } + if options.FailOnUncovered && result.HasUncovered() { + return apperrors.NewCommandRunExceptionFinishedWithUncovered() + } + if result.HasViolations() { + return apperrors.NewCommandRunExceptionFinishedWithViolations() + } + if result.HasErrors() { + return apperrors.NewCommandRunExceptionFailedWithErrors() + } + + return nil +} + +func (r *AnalyseRunner) printCollectViolations(output results.OutputInterface) { + if output.IsVerbose() { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "collecting violations."}) + } +} + +func (r *AnalyseRunner) printFormattingStart(output results.OutputInterface) { + if output.IsVerbose() { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "formatting dependencies."}) + } +} + +func (r *AnalyseRunner) printFormatterError(output results.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +} + +var JsonMultiErrFormatFunc = func(es []error) string { + errorsStrings := make([]string, len(es)) + for i, err := range es { + errorsStrings[i] = err.Error() + } + + marshalled, err := json.Marshal(errorsStrings) + + if err != nil { + return "(marshall json err) " + err.Error() + } + + return string(marshalled) +} + +func (r *AnalyseRunner) printAnalysisException(output results.OutputInterface, exception *multierror.Error) { + message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} + output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: message}) +} + +func (r *AnalyseRunner) printFormatterNotFoundException(output results.OutputInterface, formatterName string) { + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + + knownFormatters := make([]string, 0) + for _, formatterType := range r.formatterProvider.GetKnownFormatters() { + knownFormatters = append(knownFormatters, string(formatterType)) + } + + output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +} diff --git a/pkg/console_supportive/command/changed_files_runner.go b/pkg/runners/changed_files_runner.go similarity index 54% rename from pkg/console_supportive/command/changed_files_runner.go rename to pkg/runners/changed_files_runner.go index 9033f4e..0c953fb 100644 --- a/pkg/console_supportive/command/changed_files_runner.go +++ b/pkg/runners/changed_files_runner.go @@ -1,33 +1,34 @@ -package command +package runners import ( - analyser_core2 "github.com/KoNekoD/go-deptrac/pkg/analyser_core" - output_formatter_contract2 "github.com/KoNekoD/go-deptrac/pkg/output_formatter_contract" - result_contract2 "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/result_contract/output_result" + "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/tokens" "golang.org/x/exp/maps" "strings" ) // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { - layerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser - dependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser + layerForTokenAnalyser *tokens.LayerForTokenAnalyser + dependencyLayersAnalyser *dependencies.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *analyser_core2.LayerForTokenAnalyser, dependencyLayersAnalyser *analyser_core2.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *dependencies.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, } } -func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output output_formatter_contract2.OutputInterface) error { +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output results.OutputInterface) error { layers := make(map[string]string) for _, file := range files { - matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, analyser_core2.TokenTypeFile) + matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, tokens.TokenTypeFile) if err != nil { - return NewCommandRunExceptionAnalyserException(err) + return apperrors.NewCommandRunExceptionAnalyserException(err) } for _, match := range matches { for _, layer := range match { @@ -35,13 +36,13 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output o } } } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) if withDependencies { analyseResult, err := r.dependencyLayersAnalyser.Analyse() if err != nil { - return NewCommandRunExceptionAnalyserException(err) + return apperrors.NewCommandRunExceptionAnalyserException(err) } - analysisResult := output_result.NewOutputResultFromAnalysisResult(analyseResult) + analysisResult := results.NewOutputResultFromAnalysisResult(analyseResult) layersDependOnLayers := r.calculateLayerDependencies(analysisResult.AllRules()) layerDependencies := make(map[string]string) for _, layer := range layers { @@ -57,18 +58,18 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output o layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] } } - output.WriteLineFormatted(output_formatter_contract2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + output.WriteLineFormatted(results.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) } return nil } -func (r *ChangedFilesRunner) calculateLayerDependencies(rules []result_contract2.RuleInterface) map[string]map[string]string { +func (r *ChangedFilesRunner) calculateLayerDependencies(rulesList []rules.RuleInterface) map[string]map[string]string { layersDependOnLayers := make(map[string]map[string]string) - for _, rule := range rules { - if _, ok := rule.(result_contract2.CoveredRuleInterface); !ok { + for _, rule := range rulesList { + if _, ok := rule.(rules.CoveredRuleInterface); !ok { continue } - rule := rule.(result_contract2.CoveredRuleInterface) + rule := rule.(rules.CoveredRuleInterface) layerA := rule.GetDependerLayer() layerB := rule.GetDependentLayer() if _, ok := layersDependOnLayers[layerB]; !ok { diff --git a/pkg/ast_core/parser/cache/cacheable_file_subscriber.go b/pkg/subscribers/cacheable_file_subscriber.go similarity index 54% rename from pkg/ast_core/parser/cache/cacheable_file_subscriber.go rename to pkg/subscribers/cacheable_file_subscriber.go index bfd98c6..78e9d17 100644 --- a/pkg/ast_core/parser/cache/cacheable_file_subscriber.go +++ b/pkg/subscribers/cacheable_file_subscriber.go @@ -1,14 +1,12 @@ -package cache +package subscribers -import ( - ast_contract2 "github.com/KoNekoD/go-deptrac/pkg/ast_contract" -) +import "github.com/KoNekoD/go-deptrac/pkg/ast_map" type CacheableFileSubscriber struct { - deferredCache AstFileReferenceDeferredCacheInterface + deferredCache ast_map.AstFileReferenceDeferredCacheInterface } -func NewCacheableFileSubscriber(deferredCache AstFileReferenceDeferredCacheInterface) *CacheableFileSubscriber { +func NewCacheableFileSubscriber(deferredCache ast_map.AstFileReferenceDeferredCacheInterface) *CacheableFileSubscriber { return &CacheableFileSubscriber{ deferredCache: deferredCache, } @@ -16,12 +14,12 @@ func NewCacheableFileSubscriber(deferredCache AstFileReferenceDeferredCacheInter func (s *CacheableFileSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { switch rawEvent.(type) { - case *ast_contract2.PreCreateAstMapEvent: + case *ast_map.PreCreateAstMapEvent: err := s.deferredCache.Load() if err != nil { return err } - case *ast_contract2.PostCreateAstMapEvent: + case *ast_map.PostCreateAstMapEvent: err := s.deferredCache.Write() if err != nil { return err diff --git a/pkg/subscribers/console_subscriber.go b/pkg/subscribers/console_subscriber.go new file mode 100644 index 0000000..58841b2 --- /dev/null +++ b/pkg/subscribers/console_subscriber.go @@ -0,0 +1,91 @@ +package subscribers + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "github.com/KoNekoD/go-deptrac/pkg/results" +) + +type ConsoleSubscriber struct { + output results.OutputInterface + stopwatch *stopwatch.Stopwatch +} + +func NewConsoleSubscriber(output results.OutputInterface, stopwatch *stopwatch.Stopwatch) *ConsoleSubscriber { + return &ConsoleSubscriber{ + output: output, + stopwatch: stopwatch, + } +} + +func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + switch event := rawEvent.(type) { + case *ast_map.PreCreateAstMapEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("ast_contract") + if err != nil { + return err + } + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + } + case *ast_map.PostCreateAstMapEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") + } + case *ast_map.AstFileAnalysedEvent: + if s.output.IsVerbose() { + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + } + case *ast_map.AstFileSyntaxErrorEvent: + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + case *emitters.PreEmitEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("deps") + if err != nil { + return err + } + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + } + case *emitters.PostEmitEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") + } + case *flatteners.PreFlattenEvent: + if s.output.IsVerbose() { + err := s.stopwatchStart("flatten") + if err != nil { + return err + } + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "start flatten dependencies"}) + } + case *flatteners.PostFlattenEvent: + if s.output.IsVerbose() { + s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") + } + } + + return nil +} + +func (s *ConsoleSubscriber) stopwatchStart(event string) error { + err := s.stopwatch.Start(event) + if err != nil { + return err + } + + return nil +} + +func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { + period, err := s.stopwatch.Stop(event) + + if err != nil { + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: messageWithoutTime}) + return + } + + s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) +} diff --git a/pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go b/pkg/subscribers/depends_on_disallowed_layer.go similarity index 60% rename from pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go rename to pkg/subscribers/depends_on_disallowed_layer.go index d255503..552bbfb 100644 --- a/pkg/analyser_core/event_handler/process_event/depends_on_disallowed_layer.go +++ b/pkg/subscribers/depends_on_disallowed_layer.go @@ -1,32 +1,31 @@ -package process_event +package subscribers import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/result_contract" - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/events" ) type DependsOnDisallowedLayer struct { - eventHelper *event_helper.EventHelper + eventHelper *events.EventHelper } -func NewDependsOnDisallowedLayer(eventHelper *event_helper.EventHelper) *DependsOnDisallowedLayer { +func NewDependsOnDisallowedLayer(eventHelper *events.EventHelper) *DependsOnDisallowedLayer { return &DependsOnDisallowedLayer{eventHelper: eventHelper} } func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) if err != nil { - ruleset.AddError(result_contract.NewError(err.Error())) + ruleset.AddError(apperrors.NewError(err.Error())) stopPropagation() return nil } for dependentLayer := range event.DependentLayers { - if !util.InArray(dependentLayer, allowedLayers) { + if !utils.InArray(dependentLayer, allowedLayers) { d.eventHelper.AddSkippableViolation(event, ruleset, dependentLayer, d) stopPropagation() } diff --git a/pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go b/pkg/subscribers/depends_on_internal_token.go similarity index 63% rename from pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go rename to pkg/subscribers/depends_on_internal_token.go index fbfe2f0..519cb6e 100644 --- a/pkg/analyser_core/event_handler/process_event/depends_on_internal_token.go +++ b/pkg/subscribers/depends_on_internal_token.go @@ -1,28 +1,27 @@ -package process_event +package subscribers import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/references" ) type DependsOnInternalToken struct { - eventHelper *event_helper.EventHelper + eventHelper *events.EventHelper internalTag *string } -func NewDependsOnInternalToken(eventHelper *event_helper.EventHelper, analyser *config_contract.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *events.EventHelper, analyser *configs.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } func (d *DependsOnInternalToken) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { if event.DependerLayer != dependentLayer { - if ref, ok := event.DependentReference.(*ast_map.ClassLikeReference); ok { + if ref, ok := event.DependentReference.(*references.ClassLikeReference); ok { isInternal := ref.HasTag("@deptrac-internal") if !isInternal && nil != d.internalTag { isInternal = ref.HasTag(*d.internalTag) diff --git a/pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go b/pkg/subscribers/depends_on_private_layer.go similarity index 69% rename from pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go rename to pkg/subscribers/depends_on_private_layer.go index 2ee2bd4..49b62a9 100644 --- a/pkg/analyser_core/event_handler/process_event/depends_on_private_layer.go +++ b/pkg/subscribers/depends_on_private_layer.go @@ -1,20 +1,19 @@ -package process_event +package subscribers import ( - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/event_helper" - "github.com/KoNekoD/go-deptrac/pkg/analyser_contract/process_event" + "github.com/KoNekoD/go-deptrac/pkg/events" ) type DependsOnPrivateLayer struct { - eventHelper *event_helper.EventHelper + eventHelper *events.EventHelper } -func NewDependsOnPrivateLayer(eventHelper *event_helper.EventHelper) *DependsOnPrivateLayer { +func NewDependsOnPrivateLayer(eventHelper *events.EventHelper) *DependsOnPrivateLayer { return &DependsOnPrivateLayer{eventHelper: eventHelper} } func (d *DependsOnPrivateLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { - event := rawEvent.(*process_event.ProcessEvent) + event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() for dependentLayer, isPublic := range event.DependentLayers { if event.DependerLayer == dependentLayer && !isPublic { diff --git a/pkg/subscribers/event_subscriber_default_priority.go b/pkg/subscribers/event_subscriber_default_priority.go new file mode 100644 index 0000000..7c955e1 --- /dev/null +++ b/pkg/subscribers/event_subscriber_default_priority.go @@ -0,0 +1,3 @@ +package subscribers + +const DefaultPriority = 0 diff --git a/pkg/dependency_injection_supportive/event_subscriber_interface/event_subscriber_interface.go b/pkg/subscribers/event_subscriber_interface.go similarity index 77% rename from pkg/dependency_injection_supportive/event_subscriber_interface/event_subscriber_interface.go rename to pkg/subscribers/event_subscriber_interface.go index b7f09ba..5fb4c36 100644 --- a/pkg/dependency_injection_supportive/event_subscriber_interface/event_subscriber_interface.go +++ b/pkg/subscribers/event_subscriber_interface.go @@ -1,4 +1,4 @@ -package event_subscriber_interface +package subscribers type EventSubscriberInterface interface { InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error diff --git a/pkg/subscribers/event_subscriber_interface_map.go b/pkg/subscribers/event_subscriber_interface_map.go new file mode 100644 index 0000000..e7b4ddc --- /dev/null +++ b/pkg/subscribers/event_subscriber_interface_map.go @@ -0,0 +1,7 @@ +package subscribers + +import ( + "github.com/elliotchance/orderedmap/v2" +) + +var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface]] diff --git a/pkg/subscribers/event_subscriber_interface_map_reg.go b/pkg/subscribers/event_subscriber_interface_map_reg.go new file mode 100644 index 0000000..860658f --- /dev/null +++ b/pkg/subscribers/event_subscriber_interface_map_reg.go @@ -0,0 +1,62 @@ +package subscribers + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "github.com/elliotchance/orderedmap/v2" + "reflect" +) + +func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber, progressSubscriber *ProgressSubscriber, withProgress bool) { + processEvent := &events.ProcessEvent{} + postProcessEvent := &events.PostProcessEvent{} + preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} + postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} + astFileAnalysedEvent := &ast_map.AstFileAnalysedEvent{} + astFileSyntaxErrorEvent := &ast_map.AstFileSyntaxErrorEvent{} + preEmitEvent := &emitters.PreEmitEvent{} + postEmitEvent := &emitters.PostEmitEvent{} + preFlattenEvent := &flatteners.PreFlattenEvent{} + postFlattenEvent := &flatteners.PostFlattenEvent{} + + Reg(preCreateAstMapEvent, consoleSubscriber, DefaultPriority) + Reg(postCreateAstMapEvent, consoleSubscriber, DefaultPriority) + Reg(processEvent, consoleSubscriber, DefaultPriority) + Reg(postProcessEvent, consoleSubscriber, DefaultPriority) + Reg(astFileAnalysedEvent, consoleSubscriber, DefaultPriority) + Reg(astFileSyntaxErrorEvent, consoleSubscriber, DefaultPriority) + Reg(preEmitEvent, consoleSubscriber, DefaultPriority) + Reg(postEmitEvent, consoleSubscriber, DefaultPriority) + Reg(preFlattenEvent, consoleSubscriber, DefaultPriority) + Reg(postFlattenEvent, consoleSubscriber, DefaultPriority) + + if withProgress { + Reg(preCreateAstMapEvent, progressSubscriber, DefaultPriority) + Reg(postCreateAstMapEvent, progressSubscriber, 1) + Reg(astFileAnalysedEvent, progressSubscriber, DefaultPriority) + } +} + +func Reg(event interface{}, sub EventSubscriberInterface, priority int) { + eventTypeof := reflect.TypeOf(event) + eventType := eventTypeof.String() + + // Get or create event type row + e, ok := Map.Get(eventType) + if !ok { + e = orderedmap.NewOrderedMap[int, []EventSubscriberInterface]() + Map.Set(eventType, e) + } + + // Get or create priority column + subs, ok := e.Get(priority) + if !ok { + subs = []EventSubscriberInterface{} + } + + subs = append(subs, sub) + + e.Set(priority, subs) +} diff --git a/pkg/subscribers/progress_subscriber.go b/pkg/subscribers/progress_subscriber.go new file mode 100644 index 0000000..5427730 --- /dev/null +++ b/pkg/subscribers/progress_subscriber.go @@ -0,0 +1,35 @@ +package subscribers + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/results" +) + +type ProgressSubscriber struct { + output results.OutputInterface +} + +func NewProgressSubscriber(output results.OutputInterface) *ProgressSubscriber { + return &ProgressSubscriber{ + output: output, + } +} + +func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + switch event := rawEvent.(type) { + case *ast_map.PreCreateAstMapEvent: + s.output.GetStyle().ProgressStart(event.ExpectedFileCount) + case *ast_map.PostCreateAstMapEvent: + err := s.output.GetStyle().ProgressFinish() + if err != nil { + return err + } + case *ast_map.AstFileAnalysedEvent: + err := s.output.GetStyle().ProgressAdvance(results.ProgressAdvanceDefault) + if err != nil { + return err + } + } + + return nil +} diff --git a/pkg/ast_core/ast_map/class_like_token.go b/pkg/tokens/class_like_token.go similarity index 97% rename from pkg/ast_core/ast_map/class_like_token.go rename to pkg/tokens/class_like_token.go index 5c6d3ab..6306563 100644 --- a/pkg/ast_core/ast_map/class_like_token.go +++ b/pkg/tokens/class_like_token.go @@ -1,4 +1,4 @@ -package ast_map +package tokens import ( "regexp" diff --git a/pkg/tokens/dependency_token.go b/pkg/tokens/dependency_token.go new file mode 100644 index 0000000..93b4084 --- /dev/null +++ b/pkg/tokens/dependency_token.go @@ -0,0 +1,14 @@ +package tokens + +import ( + "github.com/KoNekoD/go-deptrac/pkg/dependencies" +) + +type DependencyToken struct { + Token TokenInterface + Context *dependencies.DependencyContext +} + +func NewDependencyToken(token TokenInterface, context *dependencies.DependencyContext) *DependencyToken { + return &DependencyToken{Token: token, Context: context} +} diff --git a/pkg/ast_core/ast_map/file_token.go b/pkg/tokens/file_token.go similarity index 68% rename from pkg/ast_core/ast_map/file_token.go rename to pkg/tokens/file_token.go index e6d9a3b..cd631a3 100644 --- a/pkg/ast_core/ast_map/file_token.go +++ b/pkg/tokens/file_token.go @@ -1,7 +1,7 @@ -package ast_map +package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/util" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "os" "strings" ) @@ -11,7 +11,7 @@ type FileToken struct { } func NewFileToken(path *string) *FileToken { - return &FileToken{path: util.PathNormalize(*path)} + return &FileToken{path: utils.PathNormalize(*path)} } func (t *FileToken) ToString() string { @@ -21,7 +21,7 @@ func (t *FileToken) ToString() string { return t.path } - wd = util.PathNormalize(wd) + wd = utils.PathNormalize(wd) if strings.HasPrefix(t.path, wd) { return strings.TrimPrefix(t.path, wd) diff --git a/pkg/ast_core/ast_map/function_token.go b/pkg/tokens/function_token.go similarity index 98% rename from pkg/ast_core/ast_map/function_token.go rename to pkg/tokens/function_token.go index c45b191..219b5bf 100644 --- a/pkg/ast_core/ast_map/function_token.go +++ b/pkg/tokens/function_token.go @@ -1,4 +1,4 @@ -package ast_map +package tokens import ( "regexp" diff --git a/pkg/analyser_core/layer_for_token_analyser.go b/pkg/tokens/layer_for_token_analyser.go similarity index 69% rename from pkg/analyser_core/layer_for_token_analyser.go rename to pkg/tokens/layer_for_token_analyser.go index 15a3a21..1eb2c3b 100644 --- a/pkg/analyser_core/layer_for_token_analyser.go +++ b/pkg/tokens/layer_for_token_analyser.go @@ -1,26 +1,23 @@ -package analyser_core +package tokens import ( - astContract "github.com/KoNekoD/go-deptrac/pkg/ast_contract" - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/ast_core/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/pkg/errors" "golang.org/x/exp/maps" "strings" ) type LayerForTokenAnalyser struct { - astMapExtractor *ast_core.AstMapExtractor - tokenResolver *dependency_core.TokenResolver - layerResolver layer_resolver_interface.LayerResolverInterface + astMapExtractor *ast_map.AstMapExtractor + tokenResolver *TokenResolver + layerResolver layers.LayerResolverInterface } func NewLayerForTokenAnalyser( - astMapExtractor *ast_core.AstMapExtractor, - tokenResolver *dependency_core.TokenResolver, - layerResolver layer_resolver_interface.LayerResolverInterface, + astMapExtractor *ast_map.AstMapExtractor, + tokenResolver *TokenResolver, + layerResolver layers.LayerResolverInterface, ) *LayerForTokenAnalyser { return &LayerForTokenAnalyser{ astMapExtractor: astMapExtractor, @@ -48,7 +45,7 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType To } func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map.AstMap) (map[string][]string, error) { - references := referencesAny.([]astContract.TokenReferenceInterface) + references := referencesAny.([]TokenReferenceInterface) if len(references) == 0 { return make(map[string][]string), nil } diff --git a/pkg/ast_core/ast_map/super_global_token.go b/pkg/tokens/super_global_token.go similarity index 98% rename from pkg/ast_core/ast_map/super_global_token.go rename to pkg/tokens/super_global_token.go index fbe6fe6..917cdd1 100644 --- a/pkg/ast_core/ast_map/super_global_token.go +++ b/pkg/tokens/super_global_token.go @@ -1,4 +1,4 @@ -package ast_map +package tokens type SuperGlobalToken string diff --git a/pkg/ast_core/ast_map/tagged_token_reference.go b/pkg/tokens/tagged_token_reference.go similarity index 97% rename from pkg/ast_core/ast_map/tagged_token_reference.go rename to pkg/tokens/tagged_token_reference.go index 812f1ef..11cefbe 100644 --- a/pkg/ast_core/ast_map/tagged_token_reference.go +++ b/pkg/tokens/tagged_token_reference.go @@ -1,4 +1,4 @@ -package ast_map +package tokens // TaggedTokenReference - Helper trait for implementing TaggedTokenReferenceInterface. type TaggedTokenReference struct { diff --git a/pkg/ast_contract/tagged_token_reference_interface.go b/pkg/tokens/tagged_token_reference_interface.go similarity index 91% rename from pkg/ast_contract/tagged_token_reference_interface.go rename to pkg/tokens/tagged_token_reference_interface.go index f52937f..845b5b6 100644 --- a/pkg/ast_contract/tagged_token_reference_interface.go +++ b/pkg/tokens/tagged_token_reference_interface.go @@ -1,4 +1,4 @@ -package ast_contract +package tokens // TaggedTokenReferenceInterface - Represents the AST-TokenInterface, its location, and associated tags. type TaggedTokenReferenceInterface interface { diff --git a/pkg/ast_contract/token_interface.go b/pkg/tokens/token.go similarity index 88% rename from pkg/ast_contract/token_interface.go rename to pkg/tokens/token.go index 8cd555c..2804fb7 100644 --- a/pkg/ast_contract/token_interface.go +++ b/pkg/tokens/token.go @@ -1,4 +1,4 @@ -package ast_contract +package tokens // TokenInterface - Represents an AST-TokenInterface, which can be referenced as dependency_contract. type TokenInterface interface { diff --git a/pkg/analyser_core/token_in_layer_analyser.go b/pkg/tokens/token_in_layer_analyser.go similarity index 77% rename from pkg/analyser_core/token_in_layer_analyser.go rename to pkg/tokens/token_in_layer_analyser.go index 5b61368..ff388de 100644 --- a/pkg/analyser_core/token_in_layer_analyser.go +++ b/pkg/tokens/token_in_layer_analyser.go @@ -1,26 +1,25 @@ -package analyser_core +package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) type TokenInLayerAnalyser struct { tokenTypes []TokenType - config *config_contract.AnalyserConfig - astMapExtractor *ast_core.AstMapExtractor - tokenResolver *dependency_core.TokenResolver - layerResolver layer_resolver_interface.LayerResolverInterface + config *configs.AnalyserConfig + astMapExtractor *ast_map.AstMapExtractor + tokenResolver *TokenResolver + layerResolver layers.LayerResolverInterface } func NewTokenInLayerAnalyser( - astMapExtractor *ast_core.AstMapExtractor, - tokenResolver *dependency_core.TokenResolver, - layerResolver layer_resolver_interface.LayerResolverInterface, - config *config_contract.AnalyserConfig, + astMapExtractor *ast_map.AstMapExtractor, + tokenResolver *TokenResolver, + layerResolver layers.LayerResolverInterface, + config *configs.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/ast_contract/token_reference_interface.go b/pkg/tokens/token_reference_interface.go similarity index 89% rename from pkg/ast_contract/token_reference_interface.go rename to pkg/tokens/token_reference_interface.go index ce4b664..a2f38d5 100644 --- a/pkg/ast_contract/token_reference_interface.go +++ b/pkg/tokens/token_reference_interface.go @@ -1,4 +1,4 @@ -package ast_contract +package tokens // TokenReferenceInterface - Represents the AST-TokenInterface and its location. type TokenReferenceInterface interface { diff --git a/pkg/tokens/token_reference_with_dependencies_interface.go b/pkg/tokens/token_reference_with_dependencies_interface.go new file mode 100644 index 0000000..5834178 --- /dev/null +++ b/pkg/tokens/token_reference_with_dependencies_interface.go @@ -0,0 +1,6 @@ +package tokens + +type TokenReferenceWithDependenciesInterface interface { + TokenReferenceInterface + GetDependencies() []*DependencyToken +} diff --git a/pkg/tokens/token_resolver.go b/pkg/tokens/token_resolver.go new file mode 100644 index 0000000..c4f24fa --- /dev/null +++ b/pkg/tokens/token_resolver.go @@ -0,0 +1,27 @@ +package tokens + +import ( + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/references" +) + +type TokenResolver struct{} + +func NewTokenResolver() *TokenResolver { + return &TokenResolver{} +} + +func (r *TokenResolver) Resolve(token TokenInterface, astMap *ast_map.AstMap) TokenReferenceInterface { + switch v := token.(type) { + case *ClassLikeToken: + return astMap.GetClassReferenceForToken(v) + case *FunctionToken: + return astMap.GetFunctionReferenceForToken(v) + case *SuperGlobalToken: + return references.NewVariableReference(v) + case *FileToken: + return astMap.GetFileReferenceForToken(v) + default: + panic("Unrecognized TokenInterface") + } +} diff --git a/pkg/analyser_core/token_type.go b/pkg/tokens/token_type.go similarity index 71% rename from pkg/analyser_core/token_type.go rename to pkg/tokens/token_type.go index 7a4a115..25785e5 100644 --- a/pkg/analyser_core/token_type.go +++ b/pkg/tokens/token_type.go @@ -1,7 +1,7 @@ -package analyser_core +package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/config_contract" + "github.com/KoNekoD/go-deptrac/pkg/emitters" ) type TokenType string @@ -12,8 +12,8 @@ const ( TokenTypeFile TokenType = "file_supportive" ) -func NewTokenTypeTryFromEmitterType(emitterType config_contract.EmitterType) *TokenType { - if emitterType == config_contract.ClassToken { +func NewTokenTypeTryFromEmitterType(emitterType emitters.EmitterType) *TokenType { + if emitterType == emitters.EmitterTypeClassToken { classLikeTokenType := TokenTypeClassLike return &classLikeTokenType } else { diff --git a/pkg/analyser_core/unassigned_token_analyser.go b/pkg/tokens/unassigned_token_analyser.go similarity index 77% rename from pkg/analyser_core/unassigned_token_analyser.go rename to pkg/tokens/unassigned_token_analyser.go index ec53060..b11d39b 100644 --- a/pkg/analyser_core/unassigned_token_analyser.go +++ b/pkg/tokens/unassigned_token_analyser.go @@ -1,26 +1,25 @@ -package analyser_core +package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core" - "github.com/KoNekoD/go-deptrac/pkg/config_contract" - "github.com/KoNekoD/go-deptrac/pkg/dependency_core" - "github.com/KoNekoD/go-deptrac/pkg/layer_core/layer_resolver_interface" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) type UnassignedTokenAnalyser struct { tokenTypes []TokenType - config *config_contract.AnalyserConfig - astMapExtractor *ast_core.AstMapExtractor - tokenResolver *dependency_core.TokenResolver - layerResolver layer_resolver_interface.LayerResolverInterface + config *configs.AnalyserConfig + astMapExtractor *ast_map.AstMapExtractor + tokenResolver *TokenResolver + layerResolver layers.LayerResolverInterface } func NewUnassignedTokenAnalyser( - astMapExtractor *ast_core.AstMapExtractor, - tokenResolver *dependency_core.TokenResolver, - layerResolver layer_resolver_interface.LayerResolverInterface, - config *config_contract.AnalyserConfig, + astMapExtractor *ast_map.AstMapExtractor, + tokenResolver *TokenResolver, + layerResolver layers.LayerResolverInterface, + config *configs.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ tokenTypes: make([]TokenType, 0), diff --git a/pkg/result_contract/warning.go b/pkg/tokens/warning.go similarity index 96% rename from pkg/result_contract/warning.go rename to pkg/tokens/warning.go index a82fa7b..95e64a1 100644 --- a/pkg/result_contract/warning.go +++ b/pkg/tokens/warning.go @@ -1,4 +1,4 @@ -package result_contract +package tokens import ( "fmt" diff --git a/pkg/ast_core/ast_map/class_like_type.go b/pkg/types/class_like_type.go similarity index 94% rename from pkg/ast_core/ast_map/class_like_type.go rename to pkg/types/class_like_type.go index 92ed25e..410de61 100644 --- a/pkg/ast_core/ast_map/class_like_type.go +++ b/pkg/types/class_like_type.go @@ -1,4 +1,4 @@ -package ast_map +package types type ClassLikeType string diff --git a/pkg/ast_core/parser/type_resolver.go b/pkg/types/type_resolver.go similarity index 94% rename from pkg/ast_core/parser/type_resolver.go rename to pkg/types/type_resolver.go index 07ac686..0cc278e 100644 --- a/pkg/ast_core/parser/type_resolver.go +++ b/pkg/types/type_resolver.go @@ -1,7 +1,7 @@ -package parser +package types import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_core/parser/nikic_php_parser/node_namer" + "github.com/KoNekoD/go-deptrac/pkg/nodes" "go/ast" "go/parser" "go/token" @@ -10,10 +10,10 @@ import ( ) type TypeResolver struct { - nodeNamer *node_namer.NodeNamer + nodeNamer *nodes.NodeNamer } -func NewTypeResolver(nodeNamer *node_namer.NodeNamer) *TypeResolver { +func NewTypeResolver(nodeNamer *nodes.NodeNamer) *TypeResolver { return &TypeResolver{ nodeNamer: nodeNamer, } @@ -91,7 +91,7 @@ func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope, v *ast.SelectorExpr xResolvedZero := xResolved[0] - pathValidate := strings.Replace(xResolvedZero, "github.com/KoNekoD/go-deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/", 1) + pathValidate := strings.Replace(xResolvedZero, "github.com/KoNekoD/go_deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go_deptrac/", 1) parseDir, err := parser.ParseDir(token.NewFileSet(), pathValidate, nil, 0) if len(maps.Keys(parseDir)) != 1 { // TODO: Add checking in go.mod, если там нет такого модуля - ошибка diff --git a/pkg/ast_core/parser/type_scope.go b/pkg/types/type_scope.go similarity index 98% rename from pkg/ast_core/parser/type_scope.go rename to pkg/types/type_scope.go index 8a037d0..6eb572f 100644 --- a/pkg/ast_core/parser/type_scope.go +++ b/pkg/types/type_scope.go @@ -1,4 +1,4 @@ -package parser +package types import ( "go/ast" diff --git a/pkg/util/NewLogger.go b/pkg/util/NewLogger.go deleted file mode 100644 index 35ca9c1..0000000 --- a/pkg/util/NewLogger.go +++ /dev/null @@ -1,18 +0,0 @@ -package util - -import ( - "github.com/charmbracelet/log" - "os" - "time" -) - -func NewLogger(module string) *log.Logger { - opts := log.Options{ - ReportTimestamp: true, - Prefix: module, - TimeFormat: time.DateTime, - Level: log.DebugLevel, - } - logger := log.NewWithOptions(os.Stdout, opts) - return logger -} diff --git a/pkg/violations/cache.go b/pkg/violations/cache.go new file mode 100644 index 0000000..2752026 --- /dev/null +++ b/pkg/violations/cache.go @@ -0,0 +1,14 @@ +package violations + +import ( + "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" +) + +func Cache(builder *app.ContainerBuilder) { + builder.AstFileReferenceFileCache = ast_map.NewAstFileReferenceFileCache(*builder.CacheFile, app.Version) + builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache + builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache + builder.CacheableFileSubscriber = subscribers.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) +} diff --git a/pkg/violations/collectable.go b/pkg/violations/collectable.go new file mode 100644 index 0000000..8e611ca --- /dev/null +++ b/pkg/violations/collectable.go @@ -0,0 +1,12 @@ +package violations + +import "github.com/KoNekoD/go-deptrac/pkg/collectors" + +type Collectable struct { + Collector collectors.CollectorInterface + Attributes map[string]interface{} +} + +func NewCollectable(collector collectors.CollectorInterface, attributes map[string]interface{}) *Collectable { + return &Collectable{Collector: collector, Attributes: attributes} +} diff --git a/pkg/ast_contract/file_occurrence.go b/pkg/violations/file_occurrence.go similarity index 92% rename from pkg/ast_contract/file_occurrence.go rename to pkg/violations/file_occurrence.go index 3524aa5..36248c2 100644 --- a/pkg/ast_contract/file_occurrence.go +++ b/pkg/violations/file_occurrence.go @@ -1,4 +1,4 @@ -package ast_contract +package violations // FileOccurrence - Where in the file_supportive has the dependency_contract occurred. type FileOccurrence struct { diff --git a/pkg/violations/unmatched_skipped_violations.go b/pkg/violations/unmatched_skipped_violations.go new file mode 100644 index 0000000..f863bb0 --- /dev/null +++ b/pkg/violations/unmatched_skipped_violations.go @@ -0,0 +1,28 @@ +package violations + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/events" +) + +type UnmatchedSkippedViolations struct { + eventHelper *events.EventHelper +} + +func NewUnmatchedSkippedViolations(eventHelper *events.EventHelper) *UnmatchedSkippedViolations { + return &UnmatchedSkippedViolations{eventHelper: eventHelper} +} + +func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { + event := rawEvent.(*events.PostProcessEvent) + + ruleset := event.GetResult() + for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { + for _, tokenB := range tokensB { + ruleset.AddError(apperrors.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) + } + } + stopPropagation() + return nil +} diff --git a/pkg/analyser_contract/violation_creating_interface/violation_creating_interface.go b/pkg/violations/violation_creating_interface.go similarity index 87% rename from pkg/analyser_contract/violation_creating_interface/violation_creating_interface.go rename to pkg/violations/violation_creating_interface.go index f3b0406..65915b4 100644 --- a/pkg/analyser_contract/violation_creating_interface/violation_creating_interface.go +++ b/pkg/violations/violation_creating_interface.go @@ -1,4 +1,4 @@ -package violation_creating_interface +package violations // ViolationCreatingInterface - Every rule that can create a Violation has to implement this interface. It is used for output processing to display what rule has been violated. type ViolationCreatingInterface interface { diff --git a/resources/deptrac-empty.yaml b/resources/deptrac-empty.yaml new file mode 100644 index 0000000..a4908ce --- /dev/null +++ b/resources/deptrac-empty.yaml @@ -0,0 +1,5 @@ +deptrac: + paths: + - 'test/empty/' + analyser: + internal_tag: "@internal" \ No newline at end of file diff --git a/resources/test/create_ast_map/main.go b/resources/test/create_ast_map/main.go new file mode 100644 index 0000000..f93c96f --- /dev/null +++ b/resources/test/create_ast_map/main.go @@ -0,0 +1,10 @@ +package main + +type StructChild struct { +} + +type StructRoot struct { + child StructChild +} + +func (r StructRoot) rootMethod() {} diff --git a/resources/test/decls_in_root/main.go b/resources/test/decls_in_root/main.go new file mode 100644 index 0000000..8b3e5dd --- /dev/null +++ b/resources/test/decls_in_root/main.go @@ -0,0 +1,23 @@ +package decls_in_root + +// ast.Decl - Tok - IMPORT (75) +import "fmt" + +// TestConst - ast.Decl - Tok - CONST (64) +const TestConst = 1 + +// TestStruct - ast.Decl - Tok - TYPE (84) +type TestStruct struct{} + +// testVar1 - ast.Decl - Tok - VAR (85) +var testVar1 = "1" + +// Func1 - ast.FuncDecl - Recv is nil +func Func1() { + fmt.Print() +} + +// name - ast.FuncDecl - Recv relates to TestStruct +func (s TestStruct) name() { + fmt.Println(testVar1, TestConst) +} diff --git a/pkg/config_contract/example.yaml b/resources/test/example.yaml similarity index 100% rename from pkg/config_contract/example.yaml rename to resources/test/example.yaml diff --git a/pkg/util/parse_yaml_file_test_1.yaml b/resources/test/parse_yaml_file_test_1.yaml similarity index 100% rename from pkg/util/parse_yaml_file_test_1.yaml rename to resources/test/parse_yaml_file_test_1.yaml From 3d07411cd97a201399dbbf80b6e3a7689205d23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Thu, 10 Oct 2024 19:46:49 +0300 Subject: [PATCH 11/40] refactor: structure --- cmd/ttt/main.go | 12 ++++ pkg/app/services.go | 61 ++++++++++--------- pkg/ast_map/ast_inherit.go | 5 +- pkg/collectors/abstract_type_collector.go | 6 +- pkg/collectors/class_collector.go | 6 +- pkg/collectors/class_like_collector.go | 6 +- pkg/collectors/collector_config.go | 8 ++- pkg/collectors/collector_provider.go | 11 ++-- pkg/collectors/collector_resolver.go | 3 +- pkg/collectors/interface_collector.go | 6 +- pkg/collectors/trait_collector.go | 6 +- pkg/collectors/uses_collector.go | 3 +- pkg/configs/analyser_config.go | 14 ++--- pkg/configs/attribute_config.go | 9 ++- pkg/configs/bool_config.go | 9 ++- pkg/configs/class_config.go | 9 ++- pkg/configs/class_like_config.go | 9 ++- pkg/configs/class_name_regex_config.go | 9 ++- pkg/configs/codeclimate_config.go | 31 +++++----- pkg/configs/composer_config.go | 9 ++- pkg/configs/deptrac_config.go | 33 +++++----- pkg/configs/directory_config.go | 9 ++- pkg/configs/extends_config.go | 9 ++- pkg/configs/function_name_config.go | 9 ++- pkg/configs/glob_config.go | 9 ++- pkg/configs/graphviz_config.go | 6 +- pkg/configs/implements_config.go | 9 ++- pkg/configs/inherits_config.go | 9 ++- pkg/configs/interface_config.go | 9 ++- pkg/configs/layer_config.go | 9 ++- pkg/configs/mermaid_js_config.go | 6 +- pkg/configs/method_config.go | 9 ++- pkg/configs/php_interal_config.go | 9 ++- pkg/configs/super_global_config.go | 9 ++- pkg/configs/tag_value_regex_config.go | 9 ++- pkg/configs/trait_config.go | 9 ++- pkg/configs/uses_config.go | 9 ++- pkg/dependencies/dependency_context.go | 5 +- pkg/dependencies/dependency_resolver.go | 5 +- .../enums}/ast_inherit_type.go | 2 +- .../enums}/class_like_type.go | 2 +- .../enums/codeclimate_level_enum.go | 0 .../enums}/collector_type.go | 4 +- .../enums}/configuration_codeclimate.go | 2 +- .../enums}/dependency_type.go | 2 +- .../enums}/emitter_type.go | 4 +- .../enums}/formatter_type.go | 2 +- .../enums}/output_formatter_type.go | 4 +- pkg/domain/enums/rule_type_enum.go | 10 +++ .../enums}/super_global_token.go | 2 +- pkg/{tokens => domain/enums}/token_type.go | 10 +-- pkg/emitters/class_dependency_emitter.go | 7 ++- .../class_superglobal_dependency_emitter.go | 3 +- pkg/emitters/file_dependency_emitter.go | 5 +- .../function_call_dependency_emitter.go | 3 +- pkg/emitters/function_dependency_emitter.go | 5 +- ...function_superglobal_dependency_emitter.go | 3 +- pkg/emitters/uses_dependency_emitter.go | 3 +- pkg/enums/rule_type_enum.go | 30 --------- pkg/formatters/baseline_output_formatter.go | 2 +- .../codeclimate_output_formatter.go | 21 +++---- pkg/formatters/console_output_formatter.go | 2 +- pkg/formatters/formatter_config_interface.go | 6 +- pkg/formatters/formatter_configuration.go | 10 ++- pkg/formatters/formatter_provider.go | 11 ++-- .../github_actions_output_formatter.go | 10 +-- pkg/formatters/json_output_formatter.go | 2 +- pkg/formatters/output_formatter_interface.go | 3 +- pkg/formatters/table_output_formatter.go | 5 +- pkg/references/class_like_reference.go | 8 +-- .../class_like_reference_builder.go | 20 +++--- pkg/references/file_reference_builder.go | 4 +- pkg/references/reference_builder.go | 37 +++++------ pkg/references/variable_reference.go | 9 ++- pkg/results/output_result.go | 2 +- pkg/rules/analysis_result.go | 22 ++++++- pkg/runners/analyse_runner.go | 3 +- pkg/runners/changed_files_runner.go | 3 +- pkg/tokens/layer_for_token_analyser.go | 9 +-- pkg/tokens/token_in_layer_analyser.go | 23 +++---- pkg/tokens/token_resolver.go | 3 +- pkg/tokens/unassigned_token_analyser.go | 13 ++-- 82 files changed, 422 insertions(+), 322 deletions(-) create mode 100644 cmd/ttt/main.go rename pkg/{ast_map => domain/enums}/ast_inherit_type.go (92%) rename pkg/{types => domain/enums}/class_like_type.go (95%) rename pkg/{ => domain}/enums/codeclimate_level_enum.go (100%) rename pkg/{collectors => domain/enums}/collector_type.go (98%) rename pkg/{configs => domain/enums}/configuration_codeclimate.go (98%) rename pkg/{dependencies => domain/enums}/dependency_type.go (98%) rename pkg/{emitters => domain/enums}/emitter_type.go (95%) rename pkg/{formatters => domain/enums}/formatter_type.go (92%) rename pkg/{formatters => domain/enums}/output_formatter_type.go (92%) create mode 100644 pkg/domain/enums/rule_type_enum.go rename pkg/{tokens => domain/enums}/super_global_token.go (98%) rename pkg/{tokens => domain/enums}/token_type.go (71%) delete mode 100644 pkg/enums/rule_type_enum.go diff --git a/cmd/ttt/main.go b/cmd/ttt/main.go new file mode 100644 index 0000000..39b904a --- /dev/null +++ b/cmd/ttt/main.go @@ -0,0 +1,12 @@ +package main + +import "fmt" + +type TTT struct { +} + +func main() { + t := &TTT{} + + fmt.Printf("%T\n", t) +} diff --git a/pkg/app/services.go b/pkg/app/services.go index b8e0e4d..b5603fe 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -7,6 +7,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/emitters" @@ -30,7 +31,7 @@ import ( "strings" ) -func getDefaultFormatter() formatters.OutputFormatterType { +func getDefaultFormatter() enums2.OutputFormatterType { if os.Getenv("GITHUB_ACTIONS") != "" { return formatters.NewGithubActionsOutputFormatter().GetName() } @@ -102,14 +103,14 @@ func Services(builder *ContainerBuilder) error { /* * Dependency */ - dependencyEmitters := map[emitters.EmitterType]emitters.DependencyEmitterInterface{ - emitters.EmitterTypeClassToken: emitters.NewClassDependencyEmitter(), - emitters.EmitterTypeClassSuperGlobalToken: emitters.NewClassSuperglobalDependencyEmitter(), - emitters.EmitterTypeFileToken: emitters.NewFileDependencyEmitter(), - emitters.EmitterTypeFunctionToken: emitters.NewFunctionDependencyEmitter(), - emitters.EmitterTypeFunctionCall: emitters.NewFunctionCallDependencyEmitter(), - emitters.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), - emitters.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), + dependencyEmitters := map[enums2.EmitterType]emitters.DependencyEmitterInterface{ + enums2.EmitterTypeClassToken: emitters.NewClassDependencyEmitter(), + enums2.EmitterTypeClassSuperGlobalToken: emitters.NewClassSuperglobalDependencyEmitter(), + enums2.EmitterTypeFileToken: emitters.NewFileDependencyEmitter(), + enums2.EmitterTypeFunctionToken: emitters.NewFunctionDependencyEmitter(), + enums2.EmitterTypeFunctionCall: emitters.NewFunctionCallDependencyEmitter(), + enums2.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), + enums2.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), } inheritanceFlattener := flatteners.NewInheritanceFlattener() dependencyResolver := dependencies.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) @@ -160,9 +161,9 @@ func Services(builder *ContainerBuilder) error { /* * OutputFormatter */ - outputFormatter := map[formatters.OutputFormatterType]formatters.OutputFormatterInterface{ - formatters.Table: formatters.NewTableOutputFormatter(), - formatters.GithubActions: formatters.NewGithubActionsOutputFormatter(), + outputFormatter := map[enums2.OutputFormatterType]formatters.OutputFormatterInterface{ + enums2.Table: formatters.NewTableOutputFormatter(), + enums2.GithubActions: formatters.NewGithubActionsOutputFormatter(), // TODO: // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); @@ -187,7 +188,7 @@ func Services(builder *ContainerBuilder) error { var ( formatterUsagePossible = strings.Join(knownFormattersStr, ", ") formatterUsage = fmt.Sprintf("Format in which to print the result_contract of the analysis. Possible: [\"%s\"]", formatterUsagePossible) - formatter = flag.String("formatter", string(formatters.Table), formatterUsage) + formatter = flag.String("formatter", string(enums2.Table), formatterUsage) output = flag.String("output", "", "Output file_supportive path for formatter (if applicable)") noProgress = flag.Bool("no-progress", false, "Do not show progress bar") reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") @@ -229,28 +230,28 @@ func Services(builder *ContainerBuilder) error { collectorProvider := collectors.NewCollectorProvider() collectorResolver := collectors.NewCollectorResolver(collectorProvider) layerResolver := layers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[collectors.CollectorType]collectors.CollectorInterface{ + collectors := map[enums2.CollectorType]collectors.CollectorInterface{ //AttributeCollector - collectors.CollectorTypeTypeBool: collectors.NewBoolCollector(collectorResolver), - collectors.CollectorTypeTypeClass: collectors.NewClassCollector(), - collectors.CollectorTypeTypeClasslike: collectors.NewClassLikeCollector(), - collectors.CollectorTypeTypeClassNameRegex: collectors.NewClassNameRegexCollector(), + enums2.CollectorTypeTypeBool: collectors.NewBoolCollector(collectorResolver), + enums2.CollectorTypeTypeClass: collectors.NewClassCollector(), + enums2.CollectorTypeTypeClasslike: collectors.NewClassLikeCollector(), + enums2.CollectorTypeTypeClassNameRegex: collectors.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - collectors.CollectorTypeTypeDirectory: collectors.NewDirectoryCollector(), + enums2.CollectorTypeTypeDirectory: collectors.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - collectors.CollectorTypeTypeFunctionName: collectors.NewFunctionNameCollector(), - collectors.CollectorTypeTypeGlob: collectors.NewGlobCollector(projectDirectory), + enums2.CollectorTypeTypeFunctionName: collectors.NewFunctionNameCollector(), + enums2.CollectorTypeTypeGlob: collectors.NewGlobCollector(projectDirectory), //ImplementsCollector - collectors.CollectorTypeTypeInheritance: inheritanceLevelCollector, - collectors.CollectorTypeTypeInterface: collectors.NewInterfaceCollector(), - collectors.CollectorTypeTypeInherits: inheritsCollector, - collectors.CollectorTypeTypeLayer: collectors.NewLayerCollector(layerResolver), - collectors.CollectorTypeTypeMethod: collectors.NewMethodCollector(nikicPhpParser), - collectors.CollectorTypeTypeSuperGlobal: collectors.NewSuperglobalCollector(), - collectors.CollectorTypeTypeTrait: collectors.NewTraitCollector(), - collectors.CollectorTypeTypeUses: usesCollector, + enums2.CollectorTypeTypeInheritance: inheritanceLevelCollector, + enums2.CollectorTypeTypeInterface: collectors.NewInterfaceCollector(), + enums2.CollectorTypeTypeInherits: inheritsCollector, + enums2.CollectorTypeTypeLayer: collectors.NewLayerCollector(layerResolver), + enums2.CollectorTypeTypeMethod: collectors.NewMethodCollector(nikicPhpParser), + enums2.CollectorTypeTypeSuperGlobal: collectors.NewSuperglobalCollector(), + enums2.CollectorTypeTypeTrait: collectors.NewTraitCollector(), + enums2.CollectorTypeTypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - collectors.CollectorTypeTypeComposer: collectors.NewComposerCollector(), + enums2.CollectorTypeTypeComposer: collectors.NewComposerCollector(), } collectorProvider.Set(collectors) diff --git a/pkg/ast_map/ast_inherit.go b/pkg/ast_map/ast_inherit.go index 72e0466..f0a47f5 100644 --- a/pkg/ast_map/ast_inherit.go +++ b/pkg/ast_map/ast_inherit.go @@ -2,6 +2,7 @@ package ast_map import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/violations" "strings" @@ -10,11 +11,11 @@ import ( type AstInherit struct { ClassLikeName *tokens.ClassLikeToken FileOccurrence *violations.FileOccurrence - Type AstInheritType + Type enums.AstInheritType path []*AstInherit } -func NewAstInherit(classLikeName *tokens.ClassLikeToken, fileOccurrence *violations.FileOccurrence, astInheritType AstInheritType, path []*AstInherit) *AstInherit { +func NewAstInherit(classLikeName *tokens.ClassLikeToken, fileOccurrence *violations.FileOccurrence, astInheritType enums.AstInheritType, path []*AstInherit) *AstInherit { return &AstInherit{ ClassLikeName: classLikeName, FileOccurrence: fileOccurrence, diff --git a/pkg/collectors/abstract_type_collector.go b/pkg/collectors/abstract_type_collector.go index eef0dcc..ad7886c 100644 --- a/pkg/collectors/abstract_type_collector.go +++ b/pkg/collectors/abstract_type_collector.go @@ -3,9 +3,9 @@ package collectors import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/types" ) type AbstractTypeCollector struct { @@ -18,7 +18,7 @@ func NewAbstractTypeCollector() *AbstractTypeCollector { } } -func (c *AbstractTypeCollector) GetType() types.ClassLikeType { +func (c *AbstractTypeCollector) GetType() enums.ClassLikeType { panic("Not implemented") } @@ -33,7 +33,7 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference return false, err } - isClassLike := types.TypeClasslike == c.GetType() + isClassLike := enums.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() return (isClassLike || isSameType) && v.GetToken().(*tokens.ClassLikeToken).Match(pattern), nil diff --git a/pkg/collectors/class_collector.go b/pkg/collectors/class_collector.go index be2d754..5b91ba5 100644 --- a/pkg/collectors/class_collector.go +++ b/pkg/collectors/class_collector.go @@ -1,7 +1,7 @@ package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassCollector struct { @@ -14,6 +14,6 @@ func NewClassCollector() *ClassCollector { } } -func (c *ClassCollector) GetType() types.ClassLikeType { - return types.TypeClass +func (c *ClassCollector) GetType() enums.ClassLikeType { + return enums.TypeClass } diff --git a/pkg/collectors/class_like_collector.go b/pkg/collectors/class_like_collector.go index ff5e329..f1e754f 100644 --- a/pkg/collectors/class_like_collector.go +++ b/pkg/collectors/class_like_collector.go @@ -1,7 +1,7 @@ package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassLikeCollector struct { @@ -14,6 +14,6 @@ func NewClassLikeCollector() *ClassLikeCollector { } } -func (c *ClassLikeCollector) GetType() types.ClassLikeType { - return types.TypeClasslike +func (c *ClassLikeCollector) GetType() enums.ClassLikeType { + return enums.TypeClasslike } diff --git a/pkg/collectors/collector_config.go b/pkg/collectors/collector_config.go index 3cdbe57..832c519 100644 --- a/pkg/collectors/collector_config.go +++ b/pkg/collectors/collector_config.go @@ -1,13 +1,17 @@ package collectors +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) + // CollectorConfig - Abstract type CollectorConfig struct { - CollectorType CollectorType + CollectorType enums.CollectorType Payload map[string]interface{} private bool } -func NewCollectorConfig(collectorType CollectorType, payload map[string]interface{}, private bool) *CollectorConfig { +func NewCollectorConfig(collectorType enums.CollectorType, payload map[string]interface{}, private bool) *CollectorConfig { return &CollectorConfig{ CollectorType: collectorType, Payload: payload, diff --git a/pkg/collectors/collector_provider.go b/pkg/collectors/collector_provider.go index ee932b6..795211a 100644 --- a/pkg/collectors/collector_provider.go +++ b/pkg/collectors/collector_provider.go @@ -1,31 +1,32 @@ package collectors import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "golang.org/x/exp/maps" ) type CollectorProvider struct { - collectors map[CollectorType]CollectorInterface + collectors map[enums.CollectorType]CollectorInterface } func NewCollectorProvider() *CollectorProvider { return &CollectorProvider{} } -func (p *CollectorProvider) Set(collectors map[CollectorType]CollectorInterface) *CollectorProvider { +func (p *CollectorProvider) Set(collectors map[enums.CollectorType]CollectorInterface) *CollectorProvider { p.collectors = collectors return p } -func (p *CollectorProvider) Get(id CollectorType) CollectorInterface { +func (p *CollectorProvider) Get(id enums.CollectorType) CollectorInterface { return p.collectors[id] } -func (p *CollectorProvider) Has(id CollectorType) bool { +func (p *CollectorProvider) Has(id enums.CollectorType) bool { _, ok := p.collectors[id] return ok } -func (p *CollectorProvider) GetKnownCollectors() []CollectorType { +func (p *CollectorProvider) GetKnownCollectors() []enums.CollectorType { return maps.Keys(p.collectors) } diff --git a/pkg/collectors/collector_resolver.go b/pkg/collectors/collector_resolver.go index d2a2ffc..8ce0e69 100644 --- a/pkg/collectors/collector_resolver.go +++ b/pkg/collectors/collector_resolver.go @@ -2,6 +2,7 @@ package collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/violations" ) @@ -14,7 +15,7 @@ func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolv } func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*violations.Collectable, error) { - classLikeType, err := NewCollectorTypeFromString(configMap["type"].(string)) + classLikeType, err := enums.NewCollectorTypeFromString(configMap["type"].(string)) if err != nil { return nil, err } diff --git a/pkg/collectors/interface_collector.go b/pkg/collectors/interface_collector.go index 1927829..d23ac41 100644 --- a/pkg/collectors/interface_collector.go +++ b/pkg/collectors/interface_collector.go @@ -1,7 +1,7 @@ package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type InterfaceCollector struct { @@ -14,6 +14,6 @@ func NewInterfaceCollector() *InterfaceCollector { } } -func (c *InterfaceCollector) GetType() types.ClassLikeType { - return types.TypeInterface +func (c *InterfaceCollector) GetType() enums.ClassLikeType { + return enums.TypeInterface } diff --git a/pkg/collectors/trait_collector.go b/pkg/collectors/trait_collector.go index 027d910..a94cdb4 100644 --- a/pkg/collectors/trait_collector.go +++ b/pkg/collectors/trait_collector.go @@ -1,7 +1,7 @@ package collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type TraitCollector struct { @@ -14,6 +14,6 @@ func NewTraitCollector() *TraitCollector { } } -func (c *TraitCollector) GetType() types.ClassLikeType { - return types.TypeTrait +func (c *TraitCollector) GetType() enums.ClassLikeType { + return enums.TypeTrait } diff --git a/pkg/collectors/uses_collector.go b/pkg/collectors/uses_collector.go index fb67016..cee4979 100644 --- a/pkg/collectors/uses_collector.go +++ b/pkg/collectors/uses_collector.go @@ -3,6 +3,7 @@ package collectors import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -35,7 +36,7 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens. } for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { - if ast_map.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { + if enums.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { return true, nil } } diff --git a/pkg/configs/analyser_config.go b/pkg/configs/analyser_config.go index 40ade5d..6bbae1b 100644 --- a/pkg/configs/analyser_config.go +++ b/pkg/configs/analyser_config.go @@ -1,23 +1,23 @@ package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type AnalyserConfig struct { - Types map[string]emitters.EmitterType + Types map[string]enums.EmitterType InternalTag *string } func newAnalyserConfig() *AnalyserConfig { - return &AnalyserConfig{Types: make(map[string]emitters.EmitterType)} + return &AnalyserConfig{Types: make(map[string]enums.EmitterType)} } -func Create(types []emitters.EmitterType, internalTag *string) *AnalyserConfig { +func Create(types []enums.EmitterType, internalTag *string) *AnalyserConfig { analyser := newAnalyserConfig() if types == nil { - types = []emitters.EmitterType{emitters.EmitterTypeClassToken, emitters.EmitterTypeFunctionToken} + types = []enums.EmitterType{enums.EmitterTypeClassToken, enums.EmitterTypeFunctionToken} } analyser.setTypes(types...) @@ -26,8 +26,8 @@ func Create(types []emitters.EmitterType, internalTag *string) *AnalyserConfig { return analyser } -func (c *AnalyserConfig) setTypes(types ...emitters.EmitterType) *AnalyserConfig { - c.Types = make(map[string]emitters.EmitterType) +func (c *AnalyserConfig) setTypes(types ...enums.EmitterType) *AnalyserConfig { + c.Types = make(map[string]enums.EmitterType) for _, emitterType := range types { c.Types[string(emitterType)] = emitterType diff --git a/pkg/configs/attribute_config.go b/pkg/configs/attribute_config.go index 9edcc4e..60d08b9 100644 --- a/pkg/configs/attribute_config.go +++ b/pkg/configs/attribute_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type AttributeConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewAttributeConfig(config string) *AttributeConfig { return &AttributeConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeAttribute, + collectorType: enums.CollectorTypeTypeAttribute, } } diff --git a/pkg/configs/bool_config.go b/pkg/configs/bool_config.go index 73bb6dd..5698cda 100644 --- a/pkg/configs/bool_config.go +++ b/pkg/configs/bool_config.go @@ -1,10 +1,13 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type BoolConfig struct { *collectors.CollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType mustNot []collectors.CollectorConfig must []collectors.CollectorConfig } @@ -12,7 +15,7 @@ type BoolConfig struct { func NewBoolConfig() *BoolConfig { return &BoolConfig{ CollectorConfig: &collectors.CollectorConfig{}, - collectorType: collectors.CollectorTypeTypeBool, + collectorType: enums.CollectorTypeTypeBool, mustNot: make([]collectors.CollectorConfig, 0), must: make([]collectors.CollectorConfig, 0), } diff --git a/pkg/configs/class_config.go b/pkg/configs/class_config.go index c492bea..a8a6775 100644 --- a/pkg/configs/class_config.go +++ b/pkg/configs/class_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ClassConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewClassConfig(config string) *ClassConfig { return &ClassConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeClass, + collectorType: enums.CollectorTypeTypeClass, } } diff --git a/pkg/configs/class_like_config.go b/pkg/configs/class_like_config.go index 14346ae..841a6f8 100644 --- a/pkg/configs/class_like_config.go +++ b/pkg/configs/class_like_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ClassLikeConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewClassLikeConfig(config string) *ClassLikeConfig { return &ClassLikeConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeClasslike, + collectorType: enums.CollectorTypeTypeClasslike, } } diff --git a/pkg/configs/class_name_regex_config.go b/pkg/configs/class_name_regex_config.go index 29ca91a..2f4261a 100644 --- a/pkg/configs/class_name_regex_config.go +++ b/pkg/configs/class_name_regex_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ClassNameRegexConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewClassNameRegexConfig(config string) *ClassNameRegexConfig { return &ClassNameRegexConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeClassNameRegex, + collectorType: enums.CollectorTypeTypeClassNameRegex, } } diff --git a/pkg/configs/codeclimate_config.go b/pkg/configs/codeclimate_config.go index 6cc8cc2..d66cd82 100644 --- a/pkg/configs/codeclimate_config.go +++ b/pkg/configs/codeclimate_config.go @@ -1,17 +1,16 @@ package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/enums" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type CodeclimateConfig struct { - Failure enums.CodeclimateLevelEnum - Skipped enums.CodeclimateLevelEnum - Uncovered enums.CodeclimateLevelEnum + Failure enums2.CodeclimateLevelEnum + Skipped enums2.CodeclimateLevelEnum + Uncovered enums2.CodeclimateLevelEnum } -func newCodeclimateConfig(failure enums.CodeclimateLevelEnum, skipped enums.CodeclimateLevelEnum, uncovered enums.CodeclimateLevelEnum) *CodeclimateConfig { +func newCodeclimateConfig(failure enums2.CodeclimateLevelEnum, skipped enums2.CodeclimateLevelEnum, uncovered enums2.CodeclimateLevelEnum) *CodeclimateConfig { return &CodeclimateConfig{ Failure: failure, Skipped: skipped, @@ -19,33 +18,33 @@ func newCodeclimateConfig(failure enums.CodeclimateLevelEnum, skipped enums.Code } } -func CreateCodeclimateConfig(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { +func CreateCodeclimateConfig(failure *enums2.CodeclimateLevelEnum, skipped *enums2.CodeclimateLevelEnum, uncovered *enums2.CodeclimateLevelEnum) *CodeclimateConfig { if failure == nil { - failureTmp := enums.CodeclimateLevelEnumBlocker + failureTmp := enums2.CodeclimateLevelEnumBlocker failure = &failureTmp } if skipped == nil { - skippedTmp := enums.CodeclimateLevelEnumMinor + skippedTmp := enums2.CodeclimateLevelEnumMinor skipped = &skippedTmp } if uncovered == nil { - uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncoveredTmp := enums2.CodeclimateLevelEnumInfo uncovered = &uncoveredTmp } return newCodeclimateConfig(*failure, *skipped, *uncovered) } -func (c *CodeclimateConfig) severity(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { +func (c *CodeclimateConfig) severity(failure *enums2.CodeclimateLevelEnum, skipped *enums2.CodeclimateLevelEnum, uncovered *enums2.CodeclimateLevelEnum) *CodeclimateConfig { if failure == nil { - failureTmp := enums.CodeclimateLevelEnumBlocker + failureTmp := enums2.CodeclimateLevelEnumBlocker failure = &failureTmp } if skipped == nil { - skippedTmp := enums.CodeclimateLevelEnumMinor + skippedTmp := enums2.CodeclimateLevelEnumMinor skipped = &skippedTmp } if uncovered == nil { - uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncoveredTmp := enums2.CodeclimateLevelEnumInfo uncovered = &uncoveredTmp } c.Failure = *failure @@ -64,6 +63,6 @@ func (c *CodeclimateConfig) ToArray() map[string]interface{} { } } -func (c *CodeclimateConfig) GetName() formatters.FormatterType { - return formatters.FormatterTypeCodeclimateConfig +func (c *CodeclimateConfig) GetName() enums2.FormatterType { + return enums2.FormatterTypeCodeclimateConfig } diff --git a/pkg/configs/composer_config.go b/pkg/configs/composer_config.go index 8f69d40..e3302ab 100644 --- a/pkg/configs/composer_config.go +++ b/pkg/configs/composer_config.go @@ -1,10 +1,13 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ComposerConfig struct { *collectors.CollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType packages []string composerPath string composerLockPath string @@ -24,7 +27,7 @@ func NewComposerConfig(packages []string, composerPath *string, composerLockPath return &ComposerConfig{ CollectorConfig: &collectors.CollectorConfig{}, - collectorType: collectors.CollectorTypeTypeComposer, + collectorType: enums.CollectorTypeTypeComposer, packages: packages, composerPath: *composerPath, composerLockPath: *composerLockPath, diff --git a/pkg/configs/deptrac_config.go b/pkg/configs/deptrac_config.go index 8fe5650..89021a0 100644 --- a/pkg/configs/deptrac_config.go +++ b/pkg/configs/deptrac_config.go @@ -3,9 +3,8 @@ package configs import ( "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -15,7 +14,7 @@ import ( type DeptracConfig struct { Paths []string Analyser *AnalyserConfig - Formatters map[formatters.FormatterType]formatters.FormatterConfigInterface + Formatters map[enums2.FormatterType]formatters.FormatterConfigInterface Layers []*layers.Layer Rulesets map[string]*rules.Ruleset IgnoreUncoveredInternalStructs bool @@ -100,18 +99,18 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } layersList := c.Layers - formattersList := make(map[formatters.FormatterType]formatters.FormatterConfigInterface) + formattersList := make(map[enums2.FormatterType]formatters.FormatterConfigInterface) if parsedDeptracFormatters, ok := data["formatters"]; ok { for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { formatterRaw := formatterRawRaw.(map[string]interface{}) switch formatterKey { - case string(formatters.FormatterTypeCodeclimateConfig): - formattersList[formatters.FormatterTypeCodeclimateConfig] = CreateCodeclimateConfig( - formatterRaw["failure"].(*enums.CodeclimateLevelEnum), - formatterRaw["skipped"].(*enums.CodeclimateLevelEnum), - formatterRaw["uncovered"].(*enums.CodeclimateLevelEnum), + case string(enums2.FormatterTypeCodeclimateConfig): + formattersList[enums2.FormatterTypeCodeclimateConfig] = CreateCodeclimateConfig( + formatterRaw["failure"].(*enums2.CodeclimateLevelEnum), + formatterRaw["skipped"].(*enums2.CodeclimateLevelEnum), + formatterRaw["uncovered"].(*enums2.CodeclimateLevelEnum), ) - case string(formatters.FormatterTypeGraphvizConfig): + case string(enums2.FormatterTypeGraphvizConfig): hiddenLayers := make([]*layers.Layer, 0) for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { @@ -127,7 +126,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). SetHiddenLayers(hiddenLayers...) - formattersList[formatters.FormatterTypeGraphvizConfig] = formatterGraphvizConfig + formattersList[enums2.FormatterTypeGraphvizConfig] = formatterGraphvizConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { groupLayer := make([]*layers.Layer, 0) @@ -143,11 +142,11 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) } - case string(formatters.FormatterTypeMermaidJsConfig): + case string(enums2.FormatterTypeMermaidJsConfig): formatterMermaidJsConfig := CreateMermaidJsConfig(). SetDirection(formatterRaw["direction"].(string)) - formattersList[formatters.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig + formattersList[enums2.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { groupLayer := make([]*layers.Layer, 0) @@ -200,13 +199,13 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - analyzerTypesDefault := []emitters.EmitterType{emitters.EmitterTypeClassToken, emitters.EmitterTypeFunctionToken} - analyzerTypes := make([]emitters.EmitterType, 0) + analyzerTypesDefault := []enums2.EmitterType{enums2.EmitterTypeClassToken, enums2.EmitterTypeFunctionToken} + analyzerTypes := make([]enums2.EmitterType, 0) internalTag := "@internal" if parsedDeptracAnalyzer, ok := data["analyzer"]; ok { analyzerRaw := parsedDeptracAnalyzer.(map[string]interface{}) for _, typeRaw := range analyzerRaw["types"].([]interface{}) { - analyzerType, err := emitters.NewEmitterTypeFromString(typeRaw.(string)) + analyzerType, err := enums2.NewEmitterTypeFromString(typeRaw.(string)) if err != nil { return errors.WithStack(err) } @@ -284,7 +283,7 @@ func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { return apperrors.NewInvalidCollectorDefinitionMissingType() } - collectorType, err := collectors.NewCollectorTypeFromString(collectorRaw["type"].(string)) + collectorType, err := enums2.NewCollectorTypeFromString(collectorRaw["type"].(string)) if err != nil { return errors.WithStack(err) } diff --git a/pkg/configs/directory_config.go b/pkg/configs/directory_config.go index c777286..5430df1 100644 --- a/pkg/configs/directory_config.go +++ b/pkg/configs/directory_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type DirectoryConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewDirectoryConfig(config string) *DirectoryConfig { return &DirectoryConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeDirectory, + collectorType: enums.CollectorTypeTypeDirectory, } } diff --git a/pkg/configs/extends_config.go b/pkg/configs/extends_config.go index 942e4ec..495941b 100644 --- a/pkg/configs/extends_config.go +++ b/pkg/configs/extends_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ExtendsConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewExtendsConfig(config string) *ExtendsConfig { return &ExtendsConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeExtends, + collectorType: enums.CollectorTypeTypeExtends, } } diff --git a/pkg/configs/function_name_config.go b/pkg/configs/function_name_config.go index 0c7b0c9..867ccfb 100644 --- a/pkg/configs/function_name_config.go +++ b/pkg/configs/function_name_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type FunctionNameConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewFunctionNameConfig(config string) *FunctionNameConfig { return &FunctionNameConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeFunctionName, + collectorType: enums.CollectorTypeTypeFunctionName, } } diff --git a/pkg/configs/glob_config.go b/pkg/configs/glob_config.go index a16e1d7..938cc7b 100644 --- a/pkg/configs/glob_config.go +++ b/pkg/configs/glob_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type GlobConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewGlobConfig(config string) *GlobConfig { return &GlobConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeGlob, + collectorType: enums.CollectorTypeTypeGlob, } } diff --git a/pkg/configs/graphviz_config.go b/pkg/configs/graphviz_config.go index a81d86b..d2b9663 100644 --- a/pkg/configs/graphviz_config.go +++ b/pkg/configs/graphviz_config.go @@ -1,7 +1,7 @@ package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" ) @@ -82,6 +82,6 @@ func (g *GraphvizConfig) ToArray() map[string]interface{} { return output } -func (g *GraphvizConfig) GetName() formatters.FormatterType { - return formatters.FormatterTypeGraphvizConfig +func (g *GraphvizConfig) GetName() enums.FormatterType { + return enums.FormatterTypeGraphvizConfig } diff --git a/pkg/configs/implements_config.go b/pkg/configs/implements_config.go index 39c5531..5c97444 100644 --- a/pkg/configs/implements_config.go +++ b/pkg/configs/implements_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type ImplementsConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewImplementsConfig(config string) *ImplementsConfig { return &ImplementsConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeImplements, + collectorType: enums.CollectorTypeTypeImplements, } } diff --git a/pkg/configs/inherits_config.go b/pkg/configs/inherits_config.go index 482d4a0..bf611ee 100644 --- a/pkg/configs/inherits_config.go +++ b/pkg/configs/inherits_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type InheritsConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewInheritsConfig(config string) *InheritsConfig { return &InheritsConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeInherits, + collectorType: enums.CollectorTypeTypeInherits, } } diff --git a/pkg/configs/interface_config.go b/pkg/configs/interface_config.go index a23ba84..85cf151 100644 --- a/pkg/configs/interface_config.go +++ b/pkg/configs/interface_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type InterfaceConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewInterfaceConfig(config string) *InterfaceConfig { return &InterfaceConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeInterface, + collectorType: enums.CollectorTypeTypeInterface, } } diff --git a/pkg/configs/layer_config.go b/pkg/configs/layer_config.go index 5953887..8e0d368 100644 --- a/pkg/configs/layer_config.go +++ b/pkg/configs/layer_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type LayerConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewLayerConfig(config string) *LayerConfig { return &LayerConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeLayer, + collectorType: enums.CollectorTypeTypeLayer, } } diff --git a/pkg/configs/mermaid_js_config.go b/pkg/configs/mermaid_js_config.go index 5230e43..108f0ed 100644 --- a/pkg/configs/mermaid_js_config.go +++ b/pkg/configs/mermaid_js_config.go @@ -1,7 +1,7 @@ package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" ) @@ -19,8 +19,8 @@ func CreateMermaidJsConfig() *MermaidJsConfig { } } -func (m *MermaidJsConfig) GetName() formatters.FormatterType { - return formatters.FormatterTypeMermaidJsConfig +func (m *MermaidJsConfig) GetName() enums.FormatterType { + return enums.FormatterTypeMermaidJsConfig } func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { diff --git a/pkg/configs/method_config.go b/pkg/configs/method_config.go index ab14291..35ba669 100644 --- a/pkg/configs/method_config.go +++ b/pkg/configs/method_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type MethodConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewMethodConfig(config string) *MethodConfig { return &MethodConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeMethod, + collectorType: enums.CollectorTypeTypeMethod, } } diff --git a/pkg/configs/php_interal_config.go b/pkg/configs/php_interal_config.go index c342326..18e6f05 100644 --- a/pkg/configs/php_interal_config.go +++ b/pkg/configs/php_interal_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type PhpInteralConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewPhpInteralConfig(config string) *PhpInteralConfig { return &PhpInteralConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypePhpInternal, + collectorType: enums.CollectorTypeTypePhpInternal, } } diff --git a/pkg/configs/super_global_config.go b/pkg/configs/super_global_config.go index 22f1aac..0a68703 100644 --- a/pkg/configs/super_global_config.go +++ b/pkg/configs/super_global_config.go @@ -1,17 +1,20 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type SuperGlobalConfig struct { *collectors.CollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType config []string } func NewSuperGlobalConfig(config []string) *SuperGlobalConfig { return &SuperGlobalConfig{ CollectorConfig: &collectors.CollectorConfig{}, - collectorType: collectors.CollectorTypeTypeSuperGlobal, + collectorType: enums.CollectorTypeTypeSuperGlobal, config: config, } } diff --git a/pkg/configs/tag_value_regex_config.go b/pkg/configs/tag_value_regex_config.go index 5984cca..5ce140d 100644 --- a/pkg/configs/tag_value_regex_config.go +++ b/pkg/configs/tag_value_regex_config.go @@ -1,10 +1,13 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type TagValueRegexConfig struct { *collectors.CollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType tag string value *string } @@ -12,7 +15,7 @@ type TagValueRegexConfig struct { func newTagValueRegexConfig(tag string, value *string) *TagValueRegexConfig { return &TagValueRegexConfig{ CollectorConfig: &collectors.CollectorConfig{}, - collectorType: collectors.CollectorTypeTypeTagValueRegex, + collectorType: enums.CollectorTypeTypeTagValueRegex, tag: tag, value: value, } diff --git a/pkg/configs/trait_config.go b/pkg/configs/trait_config.go index bffee7a..916d1c9 100644 --- a/pkg/configs/trait_config.go +++ b/pkg/configs/trait_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type TraitConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewTraitConfig(config string) *TraitConfig { return &TraitConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeTrait, + collectorType: enums.CollectorTypeTypeTrait, } } diff --git a/pkg/configs/uses_config.go b/pkg/configs/uses_config.go index 36edc6b..e4f1187 100644 --- a/pkg/configs/uses_config.go +++ b/pkg/configs/uses_config.go @@ -1,15 +1,18 @@ package configs -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import ( + "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) type UsesConfig struct { *collectors.ConfigurableCollectorConfig - collectorType collectors.CollectorType + collectorType enums.CollectorType } func NewUsesConfig(config string) *UsesConfig { return &UsesConfig{ ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), - collectorType: collectors.CollectorTypeTypeUses, + collectorType: enums.CollectorTypeTypeUses, } } diff --git a/pkg/dependencies/dependency_context.go b/pkg/dependencies/dependency_context.go index 48de209..1595419 100644 --- a/pkg/dependencies/dependency_context.go +++ b/pkg/dependencies/dependency_context.go @@ -1,15 +1,16 @@ package dependencies import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/violations" ) // DependencyContext - Context of the dependency_contract. Any additional info about where the dependency_contract occurred. type DependencyContext struct { FileOccurrence *violations.FileOccurrence - DependencyType DependencyType + DependencyType enums.DependencyType } -func NewDependencyContext(fileOccurrence *violations.FileOccurrence, dependencyType DependencyType) *DependencyContext { +func NewDependencyContext(fileOccurrence *violations.FileOccurrence, dependencyType enums.DependencyType) *DependencyContext { return &DependencyContext{FileOccurrence: fileOccurrence, DependencyType: dependencyType} } diff --git a/pkg/dependencies/dependency_resolver.go b/pkg/dependencies/dependency_resolver.go index ee5e833..5dee35f 100644 --- a/pkg/dependencies/dependency_resolver.go +++ b/pkg/dependencies/dependency_resolver.go @@ -4,6 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/flatteners" @@ -13,11 +14,11 @@ import ( type DependencyResolver struct { config *configs.AnalyserConfig inheritanceFlattener *flatteners.InheritanceFlattener - emitterLocator map[emitters.EmitterType]emitters.DependencyEmitterInterface + emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface eventDispatcher events.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[emitters.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher events.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher events.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/ast_map/ast_inherit_type.go b/pkg/domain/enums/ast_inherit_type.go similarity index 92% rename from pkg/ast_map/ast_inherit_type.go rename to pkg/domain/enums/ast_inherit_type.go index f68b0d3..371a0be 100644 --- a/pkg/ast_map/ast_inherit_type.go +++ b/pkg/domain/enums/ast_inherit_type.go @@ -1,4 +1,4 @@ -package ast_map +package enums type AstInheritType string diff --git a/pkg/types/class_like_type.go b/pkg/domain/enums/class_like_type.go similarity index 95% rename from pkg/types/class_like_type.go rename to pkg/domain/enums/class_like_type.go index 410de61..bb262d2 100644 --- a/pkg/types/class_like_type.go +++ b/pkg/domain/enums/class_like_type.go @@ -1,4 +1,4 @@ -package types +package enums type ClassLikeType string diff --git a/pkg/enums/codeclimate_level_enum.go b/pkg/domain/enums/codeclimate_level_enum.go similarity index 100% rename from pkg/enums/codeclimate_level_enum.go rename to pkg/domain/enums/codeclimate_level_enum.go diff --git a/pkg/collectors/collector_type.go b/pkg/domain/enums/collector_type.go similarity index 98% rename from pkg/collectors/collector_type.go rename to pkg/domain/enums/collector_type.go index 9530062..b6cbf2f 100644 --- a/pkg/collectors/collector_type.go +++ b/pkg/domain/enums/collector_type.go @@ -1,6 +1,6 @@ -package collectors +package enums -import "errors" +import "github.com/pkg/errors" type CollectorType string diff --git a/pkg/configs/configuration_codeclimate.go b/pkg/domain/enums/configuration_codeclimate.go similarity index 98% rename from pkg/configs/configuration_codeclimate.go rename to pkg/domain/enums/configuration_codeclimate.go index 7a850b3..b6e7c4a 100644 --- a/pkg/configs/configuration_codeclimate.go +++ b/pkg/domain/enums/configuration_codeclimate.go @@ -1,4 +1,4 @@ -package configs +package enums type SeverityType string diff --git a/pkg/dependencies/dependency_type.go b/pkg/domain/enums/dependency_type.go similarity index 98% rename from pkg/dependencies/dependency_type.go rename to pkg/domain/enums/dependency_type.go index 3d80112..cbef47a 100644 --- a/pkg/dependencies/dependency_type.go +++ b/pkg/domain/enums/dependency_type.go @@ -1,4 +1,4 @@ -package dependencies +package enums // DependencyType - Specifies the type of AST dependency_contract. You can use this information to enrich the displayed output to the user in your output formatter. type DependencyType string diff --git a/pkg/emitters/emitter_type.go b/pkg/domain/enums/emitter_type.go similarity index 95% rename from pkg/emitters/emitter_type.go rename to pkg/domain/enums/emitter_type.go index 20ce89a..84e5094 100644 --- a/pkg/emitters/emitter_type.go +++ b/pkg/domain/enums/emitter_type.go @@ -1,6 +1,6 @@ -package emitters +package enums -import "errors" +import "github.com/pkg/errors" type EmitterType string diff --git a/pkg/formatters/formatter_type.go b/pkg/domain/enums/formatter_type.go similarity index 92% rename from pkg/formatters/formatter_type.go rename to pkg/domain/enums/formatter_type.go index e3146c3..1300812 100644 --- a/pkg/formatters/formatter_type.go +++ b/pkg/domain/enums/formatter_type.go @@ -1,4 +1,4 @@ -package formatters +package enums type FormatterType string diff --git a/pkg/formatters/output_formatter_type.go b/pkg/domain/enums/output_formatter_type.go similarity index 92% rename from pkg/formatters/output_formatter_type.go rename to pkg/domain/enums/output_formatter_type.go index ca41ca0..23e6c50 100644 --- a/pkg/formatters/output_formatter_type.go +++ b/pkg/domain/enums/output_formatter_type.go @@ -1,6 +1,6 @@ -package formatters +package enums -import "errors" +import "github.com/pkg/errors" type OutputFormatterType string diff --git a/pkg/domain/enums/rule_type_enum.go b/pkg/domain/enums/rule_type_enum.go new file mode 100644 index 0000000..0415101 --- /dev/null +++ b/pkg/domain/enums/rule_type_enum.go @@ -0,0 +1,10 @@ +package enums + +type RuleTypeEnum string + +const ( + TypeViolation RuleTypeEnum = "violation" + TypeSkippedViolation RuleTypeEnum = "skipped_violation" + TypeUncovered RuleTypeEnum = "uncovered" + TypeAllowed RuleTypeEnum = "allowed" +) diff --git a/pkg/tokens/super_global_token.go b/pkg/domain/enums/super_global_token.go similarity index 98% rename from pkg/tokens/super_global_token.go rename to pkg/domain/enums/super_global_token.go index 917cdd1..bbd751c 100644 --- a/pkg/tokens/super_global_token.go +++ b/pkg/domain/enums/super_global_token.go @@ -1,4 +1,4 @@ -package tokens +package enums type SuperGlobalToken string diff --git a/pkg/tokens/token_type.go b/pkg/domain/enums/token_type.go similarity index 71% rename from pkg/tokens/token_type.go rename to pkg/domain/enums/token_type.go index 25785e5..b463d27 100644 --- a/pkg/tokens/token_type.go +++ b/pkg/domain/enums/token_type.go @@ -1,8 +1,4 @@ -package tokens - -import ( - "github.com/KoNekoD/go-deptrac/pkg/emitters" -) +package enums type TokenType string @@ -12,8 +8,8 @@ const ( TokenTypeFile TokenType = "file_supportive" ) -func NewTokenTypeTryFromEmitterType(emitterType emitters.EmitterType) *TokenType { - if emitterType == emitters.EmitterTypeClassToken { +func NewTokenTypeTryFromEmitterType(emitterType EmitterType) *TokenType { + if emitterType == EmitterTypeClassToken { classLikeTokenType := TokenTypeClassLike return &classLikeTokenType } else { diff --git a/pkg/emitters/class_dependency_emitter.go b/pkg/emitters/class_dependency_emitter.go index ee86b61..d9fdf1f 100644 --- a/pkg/emitters/class_dependency_emitter.go +++ b/pkg/emitters/class_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -21,11 +22,11 @@ func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depend classLikeName := classReference.GetToken().(*tokens.ClassLikeToken) for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType == enums.DependencyTypeSuperGlobalVariable { continue } - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == enums.DependencyTypeUnresolvedFunctionCall { continue } @@ -33,7 +34,7 @@ func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depend } for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies.NewDependencyContext(inherit.FileOccurrence, dependencies.DependencyTypeInherit))) + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) } } } diff --git a/pkg/emitters/class_superglobal_dependency_emitter.go b/pkg/emitters/class_superglobal_dependency_emitter.go index 24217bf..ed72250 100644 --- a/pkg/emitters/class_superglobal_dependency_emitter.go +++ b/pkg/emitters/class_superglobal_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassSuperglobalDependencyEmitter struct{} @@ -18,7 +19,7 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { - if dependencyToken.Context.DependencyType != dependencies.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != enums.DependencyTypeSuperGlobalVariable { continue } dependencyList.AddDependency(dependencies.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) diff --git a/pkg/emitters/file_dependency_emitter.go b/pkg/emitters/file_dependency_emitter.go index 643a516..f105a6a 100644 --- a/pkg/emitters/file_dependency_emitter.go +++ b/pkg/emitters/file_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type FileDependencyEmitter struct{} @@ -18,11 +19,11 @@ func (f FileDependencyEmitter) GetName() string { func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, dependencyToken := range fileReference.Dependencies { - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUse { + if dependencyToken.Context.DependencyType == enums.DependencyTypeUse { continue } - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == enums.DependencyTypeUnresolvedFunctionCall { continue } diff --git a/pkg/emitters/function_call_dependency_emitter.go b/pkg/emitters/function_call_dependency_emitter.go index cb90acc..5f43118 100644 --- a/pkg/emitters/function_call_dependency_emitter.go +++ b/pkg/emitters/function_call_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -39,7 +40,7 @@ func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(referenc for _, referenceInterface := range references { reference := referenceInterface.(tokens.TokenReferenceWithDependenciesInterface) for _, dependencyToken := range reference.GetDependencies() { - if dependencyToken.Context.DependencyType != dependencies.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType != enums.DependencyTypeUnresolvedFunctionCall { continue } token := dependencyToken.Token diff --git a/pkg/emitters/function_dependency_emitter.go b/pkg/emitters/function_dependency_emitter.go index 5b8d301..bb64fa6 100644 --- a/pkg/emitters/function_dependency_emitter.go +++ b/pkg/emitters/function_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type FunctionDependencyEmitter struct{} @@ -19,11 +20,11 @@ func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depe for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType == enums.DependencyTypeSuperGlobalVariable { continue } - if dependencyToken.Context.DependencyType == dependencies.DependencyTypeUnresolvedFunctionCall { + if dependencyToken.Context.DependencyType == enums.DependencyTypeUnresolvedFunctionCall { continue } diff --git a/pkg/emitters/function_superglobal_dependency_emitter.go b/pkg/emitters/function_superglobal_dependency_emitter.go index cfb9f8b..96c9bdf 100644 --- a/pkg/emitters/function_superglobal_dependency_emitter.go +++ b/pkg/emitters/function_superglobal_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type FunctionSuperglobalDependencyEmitter struct{} @@ -19,7 +20,7 @@ func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map. for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { - if dependencyToken.Context.DependencyType != dependencies.DependencyTypeSuperGlobalVariable { + if dependencyToken.Context.DependencyType != enums.DependencyTypeSuperGlobalVariable { continue } diff --git a/pkg/emitters/uses_dependency_emitter.go b/pkg/emitters/uses_dependency_emitter.go index be4e1bd..e0f0851 100644 --- a/pkg/emitters/uses_dependency_emitter.go +++ b/pkg/emitters/uses_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/nodes" "github.com/KoNekoD/go-deptrac/pkg/tokens" "strings" @@ -42,7 +43,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende for _, fileReference := range astMap.GetFileReferences() { for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { - if emittedDependency.Context.DependencyType == dependencies.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { + if emittedDependency.Context.DependencyType == enums.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { dependencyList.AddDependency(dependencies.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } diff --git a/pkg/enums/rule_type_enum.go b/pkg/enums/rule_type_enum.go deleted file mode 100644 index 691c47a..0000000 --- a/pkg/enums/rule_type_enum.go +++ /dev/null @@ -1,30 +0,0 @@ -package enums - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/rules" -) - -type RuleTypeEnum string - -const ( - TypeViolation RuleTypeEnum = "violation" - TypeSkippedViolation RuleTypeEnum = "skipped_violation" - TypeUncovered RuleTypeEnum = "uncovered" - TypeAllowed RuleTypeEnum = "allowed" -) - -func NewRuleTypeEnumByRule(rule rules.RuleInterface) RuleTypeEnum { - switch rule.(type) { - case *rules.Violation: - return TypeViolation - case *rules.SkippedViolation: - return TypeSkippedViolation - case *rules.Uncovered: - return TypeUncovered - case *rules.Allowed: - return TypeAllowed - default: - panic(fmt.Errorf("unknown rule type: %T", rule)) - } -} diff --git a/pkg/formatters/baseline_output_formatter.go b/pkg/formatters/baseline_output_formatter.go index 18b50ca..a4cd3b3 100644 --- a/pkg/formatters/baseline_output_formatter.go +++ b/pkg/formatters/baseline_output_formatter.go @@ -1,7 +1,7 @@ package formatters import ( - "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" "golang.org/x/exp/maps" diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go index 6ffbce7..3e1aa5e 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -4,20 +4,19 @@ import ( "crypto/sha1" "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/configs" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "os" ) type CodeclimateOutputFormatter struct { - config map[configs.SeverityType]interface{} + config map[enums2.SeverityType]interface{} } func NewCodeclimateOutputFormatter(config FormatterConfiguration) *CodeclimateOutputFormatter { - extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[configs.SeverityType]interface{}) + extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[enums2.SeverityType]interface{}) return &CodeclimateOutputFormatter{config: extractedConfig} } @@ -26,22 +25,22 @@ func (f *CodeclimateOutputFormatter) GetName() string { } func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { - formatterConfig := configs.NewConfigurationCodeclimateFromArray(f.config) + formatterConfig := enums2.NewConfigurationCodeclimateFromArray(f.config) var violations []map[string]interface{} if input.ReportSkipped { - for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + for _, rule := range outputResult.AllOf(enums2.TypeSkippedViolation) { f.addSkipped(&violations, rule.(*rules.SkippedViolation), formatterConfig) } } if input.ReportUncovered { - for _, rule := range outputResult.AllOf(enums.TypeUncovered) { + for _, rule := range outputResult.AllOf(enums2.TypeUncovered) { f.addUncovered(&violations, rule.(*rules.Uncovered), formatterConfig) } } - for _, rule := range outputResult.AllOf(enums.TypeViolation) { + for _, rule := range outputResult.AllOf(enums2.TypeViolation) { f.addFailure(&violations, rule.(*rules.Violation), formatterConfig) } @@ -63,7 +62,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, o return nil } -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *rules.Violation, config *configs.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *rules.Violation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) } @@ -72,7 +71,7 @@ func (f *CodeclimateOutputFormatter) getFailureMessage(violation *rules.Violatio return utils.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *rules.SkippedViolation, config *configs.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *rules.SkippedViolation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) } @@ -81,7 +80,7 @@ func (f *CodeclimateOutputFormatter) getWarningMessage(violation *rules.SkippedV return utils.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *rules.Uncovered, config *configs.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *rules.Uncovered, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) } diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index 66f4eff..fcb208f 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dependencies" - "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/violations" diff --git a/pkg/formatters/formatter_config_interface.go b/pkg/formatters/formatter_config_interface.go index e2e9335..a51ddd4 100644 --- a/pkg/formatters/formatter_config_interface.go +++ b/pkg/formatters/formatter_config_interface.go @@ -1,6 +1,10 @@ package formatters +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) + type FormatterConfigInterface interface { - GetName() FormatterType + GetName() enums.FormatterType ToArray() map[string]interface{} } diff --git a/pkg/formatters/formatter_configuration.go b/pkg/formatters/formatter_configuration.go index 2d7b1d8..35b77b6 100644 --- a/pkg/formatters/formatter_configuration.go +++ b/pkg/formatters/formatter_configuration.go @@ -1,13 +1,17 @@ package formatters +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) + type FormatterConfiguration struct { - config map[FormatterType]FormatterConfigInterface + config map[enums.FormatterType]FormatterConfigInterface } -func NewFormatterConfiguration(config map[FormatterType]FormatterConfigInterface) *FormatterConfiguration { +func NewFormatterConfiguration(config map[enums.FormatterType]FormatterConfigInterface) *FormatterConfiguration { return &FormatterConfiguration{config: config} } -func (f *FormatterConfiguration) GetConfigFor(area FormatterType) FormatterConfigInterface { +func (f *FormatterConfiguration) GetConfigFor(area enums.FormatterType) FormatterConfigInterface { return f.config[area] } diff --git a/pkg/formatters/formatter_provider.go b/pkg/formatters/formatter_provider.go index 24384c2..01aaaa4 100644 --- a/pkg/formatters/formatter_provider.go +++ b/pkg/formatters/formatter_provider.go @@ -2,21 +2,22 @@ package formatters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "golang.org/x/exp/maps" "reflect" ) type FormatterProvider struct { - formatterLocator map[OutputFormatterType]OutputFormatterInterface + formatterLocator map[enums.OutputFormatterType]OutputFormatterInterface } -func NewFormatterProvider(formatterLocator map[OutputFormatterType]OutputFormatterInterface) *FormatterProvider { +func NewFormatterProvider(formatterLocator map[enums.OutputFormatterType]OutputFormatterInterface) *FormatterProvider { return &FormatterProvider{ formatterLocator: formatterLocator, } } -func (f *FormatterProvider) Get(id OutputFormatterType) (OutputFormatterInterface, error) { +func (f *FormatterProvider) Get(id enums.OutputFormatterType) (OutputFormatterInterface, error) { service, ok := f.formatterLocator[id] if !ok { @@ -26,11 +27,11 @@ func (f *FormatterProvider) Get(id OutputFormatterType) (OutputFormatterInterfac return service, nil } -func (f *FormatterProvider) Has(id OutputFormatterType) bool { +func (f *FormatterProvider) Has(id enums.OutputFormatterType) bool { _, ok := f.formatterLocator[id] return ok } -func (f *FormatterProvider) GetKnownFormatters() []OutputFormatterType { +func (f *FormatterProvider) GetKnownFormatters() []enums.OutputFormatterType { return maps.Keys(f.formatterLocator) } diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go index fd7426e..12a1b18 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/formatters/github_actions_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dependencies" - "github.com/KoNekoD/go-deptrac/pkg/enums" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "strings" @@ -15,16 +15,16 @@ func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { return &GithubActionsOutputFormatter{} } -func (g *GithubActionsOutputFormatter) GetName() OutputFormatterType { - return GithubActions +func (g *GithubActionsOutputFormatter) GetName() enums2.OutputFormatterType { + return enums2.GithubActions } func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { - for _, rule := range outputResult.AllOf(enums.TypeViolation) { + for _, rule := range outputResult.AllOf(enums2.TypeViolation) { g.printViolation(rule, output) } if outputFormatterInput.ReportSkipped { - for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + for _, rule := range outputResult.AllOf(enums2.TypeSkippedViolation) { g.printViolation(rule, output) } } diff --git a/pkg/formatters/json_output_formatter.go b/pkg/formatters/json_output_formatter.go index 0e94de7..230e9db 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "os" diff --git a/pkg/formatters/output_formatter_interface.go b/pkg/formatters/output_formatter_interface.go index a076025..204d100 100644 --- a/pkg/formatters/output_formatter_interface.go +++ b/pkg/formatters/output_formatter_interface.go @@ -1,12 +1,13 @@ package formatters import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" ) type OutputFormatterInterface interface { // GetName - used as an identifier to access to the formatter or to display something more user-friendly to the user when referring to the formatter - GetName() OutputFormatterType + GetName() enums.OutputFormatterType // Finish - Renders the final result_contract. Finish(result *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error diff --git a/pkg/formatters/table_output_formatter.go b/pkg/formatters/table_output_formatter.go index cb0dfef..402d8e7 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -3,6 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/gookit/color" @@ -17,8 +18,8 @@ func NewTableOutputFormatter() *TableOutputFormatter { return &TableOutputFormatter{} } -func (t *TableOutputFormatter) GetName() OutputFormatterType { - return Table +func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { + return enums.Table } func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { diff --git a/pkg/references/class_like_reference.go b/pkg/references/class_like_reference.go index 0b32a13..8a77586 100644 --- a/pkg/references/class_like_reference.go +++ b/pkg/references/class_like_reference.go @@ -2,12 +2,12 @@ package references import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/types" ) type ClassLikeReference struct { - Type *types.ClassLikeType + Type *enums.ClassLikeType classLikeName *tokens.ClassLikeToken Inherits []*ast_map.AstInherit @@ -16,9 +16,9 @@ type ClassLikeReference struct { *tokens.TaggedTokenReference } -func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *types.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { +func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { if classLikeType == nil { - classLikeTypeTmp := types.TypeClasslike + classLikeTypeTmp := enums.TypeClasslike classLikeType = &classLikeTypeTmp } diff --git a/pkg/references/class_like_reference_builder.go b/pkg/references/class_like_reference_builder.go index 8293b74..4982258 100644 --- a/pkg/references/class_like_reference_builder.go +++ b/pkg/references/class_like_reference_builder.go @@ -2,8 +2,8 @@ package references import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/KoNekoD/go-deptrac/pkg/violations" ) @@ -13,11 +13,11 @@ type ClassLikeReferenceBuilder struct { inherits []*ast_map.AstInherit classLikeToken *tokens.ClassLikeToken - classLikeType *types.ClassLikeType + classLikeType *enums2.ClassLikeType tags map[string][]string } -func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *types.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { +func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *enums2.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { return &ClassLikeReferenceBuilder{ ReferenceBuilder: NewReferenceBuilder(tokenTemplates, filepath), inherits: make([]*ast_map.AstInherit, 0), @@ -28,22 +28,22 @@ func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, clas } func CreateClassLikeReferenceBuilderClassLike(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClassLike := types.TypeClasslike + typeClassLike := enums2.TypeClasslike return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClassLike, tags) } func CreateClassLikeReferenceBuilderClass(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClass := types.TypeClass + typeClass := enums2.TypeClass return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClass, tags) } func CreateClassLikeReferenceBuilderTrait(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeTrait := types.TypeTrait + typeTrait := enums2.TypeTrait return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeTrait, tags) } func CreateClassLikeReferenceBuilderInterface(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeInterface := types.TypeInterface + typeInterface := enums2.TypeInterface return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeInterface, tags) } @@ -53,16 +53,16 @@ func (b *ClassLikeReferenceBuilder) Build() *ClassLikeReference { } func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), ast_map.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) return b } diff --git a/pkg/references/file_reference_builder.go b/pkg/references/file_reference_builder.go index 437310f..90ba7da 100644 --- a/pkg/references/file_reference_builder.go +++ b/pkg/references/file_reference_builder.go @@ -1,7 +1,7 @@ package references import ( - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -16,7 +16,7 @@ func CreateFileReferenceBuilder(filepath string) *FileReferenceBuilder { } func (b *FileReferenceBuilder) UseStatement(classLikeName string, occursAtLine int) *FileReferenceBuilder { - b.Dependencies = append(b.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, dependencies.DependencyTypeUse))) + b.Dependencies = append(b.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, enums.DependencyTypeUse))) return b } diff --git a/pkg/references/reference_builder.go b/pkg/references/reference_builder.go index eb417ed..1603e55 100644 --- a/pkg/references/reference_builder.go +++ b/pkg/references/reference_builder.go @@ -2,6 +2,7 @@ package references import ( "github.com/KoNekoD/go-deptrac/pkg/dependencies" + enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/violations" ) @@ -15,7 +16,7 @@ type ReferenceBuilder struct { type ReferenceBuilderInterface interface { GetTokenTemplates() []string - CreateContext(occursAtLine int, dependencyType dependencies.DependencyType) *dependencies.DependencyContext + CreateContext(occursAtLine int, dependencyType enums2.DependencyType) *dependencies.DependencyContext UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder Variable(classLikeName string, occursAtLine int) *ReferenceBuilder Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder @@ -48,88 +49,88 @@ func (r *ReferenceBuilder) GetTokenTemplates() []string { return r.tokenTemplates } -func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType dependencies.DependencyType) *dependencies.DependencyContext { +func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType enums2.DependencyType) *dependencies.DependencyContext { return dependencies.NewDependencyContext(violations.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) } // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. func (r *ReferenceBuilder) UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, dependencies.DependencyTypeUnresolvedFunctionCall))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, enums2.DependencyTypeUnresolvedFunctionCall))) return r } func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeVariable))) return r } func (r *ReferenceBuilder) Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, dependencies.DependencyTypeSuperGlobalVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(enums2.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, enums2.DependencyTypeSuperGlobalVariable))) return r } func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeReturnType))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeReturnType))) return r } func (r *ReferenceBuilder) ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeThrow))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeThrow))) return r } func (r *ReferenceBuilder) AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassExtends))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassExtends))) return r } func (r *ReferenceBuilder) AnonymousClassTrait(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassTrait))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassTrait))) return r } func (r *ReferenceBuilder) ConstFetch(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeConst))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeConst))) return r } func (r *ReferenceBuilder) AnonymousClassImplements(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAnonymousClassImplements))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassImplements))) return r } func (r *ReferenceBuilder) Parameter(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeParameter))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeParameter))) return r } func (r *ReferenceBuilder) Attribute(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeAttribute))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAttribute))) return r } func (r *ReferenceBuilder) Instanceof(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeInstanceof))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeInstanceof))) return r } func (r *ReferenceBuilder) NewStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeNew))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeNew))) return r } func (r *ReferenceBuilder) StaticProperty(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeStaticProperty))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeStaticProperty))) return r } func (r *ReferenceBuilder) StaticMethod(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeStaticMethod))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeStaticMethod))) return r } func (r *ReferenceBuilder) CatchStmt(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, dependencies.DependencyTypeCatch))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeCatch))) return r } diff --git a/pkg/references/variable_reference.go b/pkg/references/variable_reference.go index c1c0560..ea3381a 100644 --- a/pkg/references/variable_reference.go +++ b/pkg/references/variable_reference.go @@ -1,12 +1,15 @@ package references -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/tokens" +) type VariableReference struct { - tokenName *tokens.SuperGlobalToken + tokenName *enums.SuperGlobalToken } -func NewVariableReference(tokenName *tokens.SuperGlobalToken) *VariableReference { +func NewVariableReference(tokenName *enums.SuperGlobalToken) *VariableReference { return &VariableReference{tokenName: tokenName} } diff --git a/pkg/results/output_result.go b/pkg/results/output_result.go index aff5ac9..496d8fa 100644 --- a/pkg/results/output_result.go +++ b/pkg/results/output_result.go @@ -2,7 +2,7 @@ package results import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) diff --git a/pkg/rules/analysis_result.go b/pkg/rules/analysis_result.go index 9de42cf..97144da 100644 --- a/pkg/rules/analysis_result.go +++ b/pkg/rules/analysis_result.go @@ -1,9 +1,10 @@ package rules import ( + "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -24,8 +25,23 @@ func NewAnalysisResult() *AnalysisResult { } } +func (r *AnalysisResult) ruleTypeByRule(rule RuleInterface) enums.RuleTypeEnum { + switch rule.(type) { + case *Violation: + return enums.TypeViolation + case *SkippedViolation: + return enums.TypeSkippedViolation + case *Uncovered: + return enums.TypeUncovered + case *Allowed: + return enums.TypeAllowed + default: + panic(fmt.Errorf("unknown rule type: %T", rule)) + } +} + func (r *AnalysisResult) AddRule(rule RuleInterface) { - ruleType := enums.NewRuleTypeEnumByRule(rule) + ruleType := r.ruleTypeByRule(rule) id := utils.SplObjectID(rule) if _, ok := r.rules[ruleType]; !ok { @@ -36,7 +52,7 @@ func (r *AnalysisResult) AddRule(rule RuleInterface) { } func (r *AnalysisResult) RemoveRule(rule RuleInterface) { - ruleType := enums.NewRuleTypeEnumByRule(rule) + ruleType := r.ruleTypeByRule(rule) id := utils.SplObjectID(rule) delete(r.rules[ruleType], id) diff --git a/pkg/runners/analyse_runner.go b/pkg/runners/analyse_runner.go index 5855c86..da3574e 100644 --- a/pkg/runners/analyse_runner.go +++ b/pkg/runners/analyse_runner.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -26,7 +27,7 @@ func NewAnalyseRunner(analyzer *dependencies.DependencyLayersAnalyser, formatter } func (r *AnalyseRunner) Run(options *rules.AnalyseOptions, output results.OutputInterface) error { - outputFormatterType, err := formatters.NewOutputFormatterTypeFromString(options.Formatter) + outputFormatterType, err := enums.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err } diff --git a/pkg/runners/changed_files_runner.go b/pkg/runners/changed_files_runner.go index 0c953fb..93b67f0 100644 --- a/pkg/runners/changed_files_runner.go +++ b/pkg/runners/changed_files_runner.go @@ -3,6 +3,7 @@ package runners import ( "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -26,7 +27,7 @@ func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output results.OutputInterface) error { layers := make(map[string]string) for _, file := range files { - matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, tokens.TokenTypeFile) + matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, enums.TokenTypeFile) if err != nil { return apperrors.NewCommandRunExceptionAnalyserException(err) } diff --git a/pkg/tokens/layer_for_token_analyser.go b/pkg/tokens/layer_for_token_analyser.go index 1eb2c3b..b8ae59a 100644 --- a/pkg/tokens/layer_for_token_analyser.go +++ b/pkg/tokens/layer_for_token_analyser.go @@ -2,6 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/pkg/errors" "golang.org/x/exp/maps" @@ -26,18 +27,18 @@ func NewLayerForTokenAnalyser( } } -func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType TokenType) (map[string][]string, error) { +func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType enums.TokenType) (map[string][]string, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err } switch tokenType { - case TokenTypeClassLike: + case enums.TokenTypeClassLike: return a.findLayersForReferences(astMap.GetClassLikeReferences(), tokenName, astMap) - case TokenTypeFunction: + case enums.TokenTypeFunction: return a.findLayersForReferences(astMap.GetFunctionReferences(), tokenName, astMap) - case TokenTypeFile: + case enums.TokenTypeFile: return a.findLayersForReferences(astMap.GetFileReferences(), tokenName, astMap) default: return nil, errors.New("Invalid token type") diff --git a/pkg/tokens/token_in_layer_analyser.go b/pkg/tokens/token_in_layer_analyser.go index ff388de..06a278a 100644 --- a/pkg/tokens/token_in_layer_analyser.go +++ b/pkg/tokens/token_in_layer_analyser.go @@ -3,12 +3,13 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) type TokenInLayerAnalyser struct { - tokenTypes []TokenType + tokenTypes []enums.TokenType config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver @@ -22,7 +23,7 @@ func NewTokenInLayerAnalyser( config *configs.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ - tokenTypes: make([]TokenType, 0), + tokenTypes: make([]enums.TokenType, 0), astMapExtractor: astMapExtractor, tokenResolver: tokenResolver, layerResolver: layerResolver, @@ -30,7 +31,7 @@ func NewTokenInLayerAnalyser( } for _, configType := range config.Types { - newTokenType := NewTokenTypeTryFromEmitterType(configType) + newTokenType := enums.NewTokenTypeTryFromEmitterType(configType) if newTokenType == nil { continue } @@ -41,14 +42,14 @@ func NewTokenInLayerAnalyser( return analyser } -func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]TokenType, error) { +func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]enums.TokenType, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err } - matchingTokens := make(map[string]TokenType) + matchingTokens := make(map[string]enums.TokenType) - if slices.Contains(a.tokenTypes, TokenTypeClassLike) { + if slices.Contains(a.tokenTypes, enums.TokenTypeClassLike) { for _, classReference := range astMap.GetClassLikeReferences() { classToken := a.tokenResolver.Resolve(classReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(classToken) @@ -56,12 +57,12 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[classToken.GetToken().ToString()] = TokenTypeClassLike + matchingTokens[classToken.GetToken().ToString()] = enums.TokenTypeClassLike } } } - if slices.Contains(a.tokenTypes, TokenTypeFunction) { + if slices.Contains(a.tokenTypes, enums.TokenTypeFunction) { for _, functionReference := range astMap.GetFunctionReferences() { functionToken := a.tokenResolver.Resolve(functionReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(functionToken) @@ -69,12 +70,12 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[functionToken.GetToken().ToString()] = TokenTypeFunction + matchingTokens[functionToken.GetToken().ToString()] = enums.TokenTypeFunction } } } - if slices.Contains(a.tokenTypes, TokenTypeFile) { + if slices.Contains(a.tokenTypes, enums.TokenTypeFile) { for _, fileReference := range astMap.GetFileReferences() { fileToken := a.tokenResolver.Resolve(fileReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(fileToken) @@ -82,7 +83,7 @@ func (a *TokenInLayerAnalyser) FindTokensInLayer(layer string) (map[string]Token return nil, errGet } if _, ok := gotLayers[layer]; ok { - matchingTokens[fileToken.GetToken().ToString()] = TokenTypeFile + matchingTokens[fileToken.GetToken().ToString()] = enums.TokenTypeFile } } } diff --git a/pkg/tokens/token_resolver.go b/pkg/tokens/token_resolver.go index c4f24fa..e15214e 100644 --- a/pkg/tokens/token_resolver.go +++ b/pkg/tokens/token_resolver.go @@ -2,6 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/references" ) @@ -17,7 +18,7 @@ func (r *TokenResolver) Resolve(token TokenInterface, astMap *ast_map.AstMap) To return astMap.GetClassReferenceForToken(v) case *FunctionToken: return astMap.GetFunctionReferenceForToken(v) - case *SuperGlobalToken: + case *enums.SuperGlobalToken: return references.NewVariableReference(v) case *FileToken: return astMap.GetFileReferenceForToken(v) diff --git a/pkg/tokens/unassigned_token_analyser.go b/pkg/tokens/unassigned_token_analyser.go index b11d39b..ddbc74f 100644 --- a/pkg/tokens/unassigned_token_analyser.go +++ b/pkg/tokens/unassigned_token_analyser.go @@ -3,12 +3,13 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) type UnassignedTokenAnalyser struct { - tokenTypes []TokenType + tokenTypes []enums.TokenType config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver @@ -22,7 +23,7 @@ func NewUnassignedTokenAnalyser( config *configs.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ - tokenTypes: make([]TokenType, 0), + tokenTypes: make([]enums.TokenType, 0), astMapExtractor: astMapExtractor, tokenResolver: tokenResolver, layerResolver: layerResolver, @@ -30,7 +31,7 @@ func NewUnassignedTokenAnalyser( } for _, configType := range config.Types { - newTokenType := NewTokenTypeTryFromEmitterType(configType) + newTokenType := enums.NewTokenTypeTryFromEmitterType(configType) if newTokenType == nil { continue } @@ -48,7 +49,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } unassignedTokens := make([]string, 0) - if slices.Contains(a.tokenTypes, TokenTypeClassLike) { + if slices.Contains(a.tokenTypes, enums.TokenTypeClassLike) { for _, classReference := range astMap.GetClassLikeReferences() { classToken := a.tokenResolver.Resolve(classReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(classToken) @@ -62,7 +63,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } } - if slices.Contains(a.tokenTypes, TokenTypeFunction) { + if slices.Contains(a.tokenTypes, enums.TokenTypeFunction) { for _, functionReference := range astMap.GetFunctionReferences() { functionToken := a.tokenResolver.Resolve(functionReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(functionToken) @@ -76,7 +77,7 @@ func (a *UnassignedTokenAnalyser) FindUnassignedTokens() ([]string, error) { } } - if slices.Contains(a.tokenTypes, TokenTypeFile) { + if slices.Contains(a.tokenTypes, enums.TokenTypeFile) { for _, fileReference := range astMap.GetFileReferences() { fileToken := a.tokenResolver.Resolve(fileReference.GetToken(), astMap) gotLayers, errGet := a.layerResolver.GetLayersForReference(fileToken) From 522b77fa570e47b0c8efcd00a179af19f2439fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Thu, 10 Oct 2024 21:18:36 +0300 Subject: [PATCH 12/40] refactor: structure --- .../DebugDependenciesRunner.php | 0 pkg/{runners => app}/DebugLayerRunner.php | 0 pkg/{runners => app}/DebugTokenRunner.php | 0 .../DebugUnassignedRunner.php | 0 pkg/{runners => app}/DebugUnusedRunner.php | 0 pkg/{runners => app}/analyse_runner.go | 2 +- pkg/{violations => app}/cache.go | 7 +- pkg/{runners => app}/changed_files_runner.go | 2 +- pkg/app/container_builder.go | 21 +++--- pkg/app/service_container_builder.go | 3 +- pkg/app/services.go | 56 +++++++-------- pkg/ast_map/ast_loader.go | 7 +- pkg/ast_map/ast_map_extractor.go | 6 +- pkg/ast_map/ast_map_extractor_test.go | 4 +- .../abstract_type_collector.go | 2 +- .../bool_collector.go | 7 +- .../class_collector.go | 2 +- .../class_like_collector.go | 2 +- .../class_name_regex_collector.go | 2 +- .../collector_interface.go | 2 +- .../collector_provider.go | 2 +- .../collector_resolver.go | 2 +- .../collector_resolver_interface.go | 2 +- .../composer_collector.go | 2 +- .../directory_collector.go | 2 +- .../directory_collector_test.go | 2 +- .../file_input_collector.go | 2 +- .../function_name_collector.go | 2 +- .../glob_collector.go | 2 +- .../inheritance_level_collector.go | 2 +- .../inherits_collector.go | 2 +- .../input_collector_interface.go | 2 +- .../interface_collector.go | 2 +- .../layer_collector.go | 2 +- .../method_collector.go | 2 +- .../regex_collector.go | 2 +- .../superglobal_collector.go | 2 +- .../trait_collector.go | 2 +- .../uses_collector.go | 2 +- pkg/commands/analyse_command.go | 10 +-- pkg/commands/changed_files_command.go | 6 +- pkg/configs/codeclimate_config.go | 68 ------------------- pkg/configs/config.go | 19 ------ pkg/configs/config_file_hook.go | 22 ------ pkg/configs/configuration_graph_viz.go | 19 ------ pkg/configs/deptrac_config.go | 66 +++++++++--------- .../dependency_layers_analyser.go | 5 +- pkg/dependencies/dependency_resolver.go | 13 ++-- .../event_dispatcher_interface.go | 2 +- .../event_dispatcher_interface2.go | 2 +- pkg/{events => dispatchers}/event_helper.go | 5 +- .../dtos}/analyser_config.go | 2 +- .../collectors_configs}/attribute_config.go | 7 +- .../dtos/collectors_configs}/bool_config.go | 15 ++-- .../dtos/collectors_configs}/class_config.go | 7 +- .../collectors_configs}/class_like_config.go | 7 +- .../class_name_regex_config.go | 7 +- .../collectors_configs}/collector_config.go | 2 +- .../collectors_configs}/composer_config.go | 7 +- .../configurable_collector_config.go | 2 +- .../collectors_configs}/directory_config.go | 7 +- .../collectors_configs}/extends_config.go | 7 +- .../function_name_config.go | 7 +- .../dtos/collectors_configs}/glob_config.go | 7 +- .../collectors_configs}/implements_config.go | 7 +- .../collectors_configs}/inherits_config.go | 7 +- .../collectors_configs}/interface_config.go | 7 +- .../dtos/collectors_configs}/layer_config.go | 7 +- .../dtos/collectors_configs}/method_config.go | 7 +- .../collectors_configs}/php_interal_config.go | 7 +- .../super_global_config.go | 7 +- .../tag_value_regex_config.go | 7 +- .../dtos/collectors_configs}/trait_config.go | 7 +- .../dtos/collectors_configs}/uses_config.go | 7 +- .../formatters_configs/codeclimate_config.go | 68 +++++++++++++++++++ .../formatter_config_interface.go | 2 +- .../formatters_configs}/graphviz_config.go | 25 ++++--- .../formatters_configs}/mermaid_js_config.go | 10 +-- pkg/{nodes => domain/dtos}/fqdn_index_node.go | 7 +- pkg/domain/dtos/layer_config.go | 37 ++++++++++ pkg/{nodes => domain/services}/node_namer.go | 2 +- .../services}/node_namer_test.go | 6 +- pkg/emitters/uses_dependency_emitter.go | 6 +- .../ast_file_analysed_event.go | 2 +- .../post_flatten_event.go | 2 +- .../pre_flatten_event.go | 2 +- pkg/formatters/formatter_configuration.go | 7 +- pkg/formatters/graph_viz_output_formatter.go | 29 ++++---- pkg/formatters/mermaid_js_output_formatter.go | 6 +- pkg/hooks/template_file_hook.go | 17 ----- pkg/layers/layer.go | 40 ----------- pkg/layers/layer_resolver.go | 9 +-- pkg/parsers/nikic_php_parser.go | 6 +- pkg/references/file_reference_visitor.go | 6 +- pkg/rules/ruleset.go | 16 +++-- pkg/rules/ruleset_usage_analyser.go | 5 +- pkg/subscribers/console_subscriber.go | 8 +-- .../depends_on_disallowed_layer.go | 5 +- pkg/subscribers/depends_on_internal_token.go | 7 +- pkg/subscribers/depends_on_private_layer.go | 5 +- .../event_subscriber_interface_map_reg.go | 7 +- pkg/subscribers/progress_subscriber.go | 3 +- pkg/tokens/token_in_layer_analyser.go | 6 +- pkg/tokens/unassigned_token_analyser.go | 6 +- pkg/types/type_resolver.go | 6 +- pkg/violations/collectable.go | 6 +- .../unmatched_skipped_violations.go | 5 +- 107 files changed, 422 insertions(+), 506 deletions(-) rename pkg/{runners => app}/DebugDependenciesRunner.php (100%) rename pkg/{runners => app}/DebugLayerRunner.php (100%) rename pkg/{runners => app}/DebugTokenRunner.php (100%) rename pkg/{runners => app}/DebugUnassignedRunner.php (100%) rename pkg/{runners => app}/DebugUnusedRunner.php (100%) rename pkg/{runners => app}/analyse_runner.go (99%) rename pkg/{violations => app}/cache.go (75%) rename pkg/{runners => app}/changed_files_runner.go (99%) rename pkg/{collectors => collectors_shared}/abstract_type_collector.go (98%) rename pkg/{collectors => collectors_shared}/bool_collector.go (88%) rename pkg/{collectors => collectors_shared}/class_collector.go (92%) rename pkg/{collectors => collectors_shared}/class_like_collector.go (93%) rename pkg/{collectors => collectors_shared}/class_name_regex_collector.go (97%) rename pkg/{collectors => collectors_shared}/collector_interface.go (92%) rename pkg/{collectors => collectors_shared}/collector_provider.go (96%) rename pkg/{collectors => collectors_shared}/collector_resolver.go (97%) rename pkg/{collectors => collectors_shared}/collector_resolver_interface.go (87%) rename pkg/{collectors => collectors_shared}/composer_collector.go (98%) rename pkg/{collectors => collectors_shared}/directory_collector.go (98%) rename pkg/{collectors => collectors_shared}/directory_collector_test.go (94%) rename pkg/{collectors => collectors_shared}/file_input_collector.go (98%) rename pkg/{collectors => collectors_shared}/function_name_collector.go (97%) rename pkg/{collectors => collectors_shared}/glob_collector.go (98%) rename pkg/{collectors => collectors_shared}/inheritance_level_collector.go (98%) rename pkg/{collectors => collectors_shared}/inherits_collector.go (98%) rename pkg/{collectors => collectors_shared}/input_collector_interface.go (73%) rename pkg/{collectors => collectors_shared}/interface_collector.go (93%) rename pkg/{collectors => collectors_shared}/layer_collector.go (98%) rename pkg/{collectors => collectors_shared}/method_collector.go (98%) rename pkg/{collectors => collectors_shared}/regex_collector.go (95%) rename pkg/{collectors => collectors_shared}/superglobal_collector.go (97%) rename pkg/{collectors => collectors_shared}/trait_collector.go (92%) rename pkg/{collectors => collectors_shared}/uses_collector.go (98%) delete mode 100644 pkg/configs/codeclimate_config.go delete mode 100644 pkg/configs/config.go delete mode 100644 pkg/configs/config_file_hook.go delete mode 100644 pkg/configs/configuration_graph_viz.go rename pkg/{events => dispatchers}/event_dispatcher_interface.go (80%) rename pkg/{events => dispatchers}/event_dispatcher_interface2.go (98%) rename pkg/{events => dispatchers}/event_helper.go (88%) rename pkg/{configs => domain/dtos}/analyser_config.go (98%) rename pkg/{configs => domain/dtos/collectors_configs}/attribute_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/bool_config.go (56%) rename pkg/{configs => domain/dtos/collectors_configs}/class_config.go (58%) rename pkg/{configs => domain/dtos/collectors_configs}/class_like_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/class_name_regex_config.go (62%) rename pkg/{collectors => domain/dtos/collectors_configs}/collector_config.go (96%) rename pkg/{configs => domain/dtos/collectors_configs}/composer_config.go (87%) rename pkg/{collectors => domain/dtos/collectors_configs}/configurable_collector_config.go (98%) rename pkg/{configs => domain/dtos/collectors_configs}/directory_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/extends_config.go (59%) rename pkg/{configs => domain/dtos/collectors_configs}/function_name_config.go (61%) rename pkg/{configs => domain/dtos/collectors_configs}/glob_config.go (57%) rename pkg/{configs => domain/dtos/collectors_configs}/implements_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/inherits_config.go (59%) rename pkg/{configs => domain/dtos/collectors_configs}/interface_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/layer_config.go (58%) rename pkg/{configs => domain/dtos/collectors_configs}/method_config.go (58%) rename pkg/{configs => domain/dtos/collectors_configs}/php_interal_config.go (60%) rename pkg/{configs => domain/dtos/collectors_configs}/super_global_config.go (81%) rename pkg/{configs => domain/dtos/collectors_configs}/tag_value_regex_config.go (85%) rename pkg/{configs => domain/dtos/collectors_configs}/trait_config.go (58%) rename pkg/{configs => domain/dtos/collectors_configs}/uses_config.go (57%) create mode 100644 pkg/domain/dtos/formatters_configs/codeclimate_config.go rename pkg/{formatters => domain/dtos/formatters_configs}/formatter_config_interface.go (86%) rename pkg/{configs => domain/dtos/formatters_configs}/graphviz_config.go (75%) rename pkg/{configs => domain/dtos/formatters_configs}/mermaid_js_config.go (84%) rename pkg/{nodes => domain/dtos}/fqdn_index_node.go (86%) create mode 100644 pkg/domain/dtos/layer_config.go rename pkg/{nodes => domain/services}/node_namer.go (99%) rename pkg/{nodes => domain/services}/node_namer_test.go (60%) rename pkg/{ast_map => events}/ast_file_analysed_event.go (94%) rename pkg/{flatteners => events}/post_flatten_event.go (93%) rename pkg/{flatteners => events}/pre_flatten_event.go (93%) delete mode 100644 pkg/hooks/template_file_hook.go delete mode 100644 pkg/layers/layer.go diff --git a/pkg/runners/DebugDependenciesRunner.php b/pkg/app/DebugDependenciesRunner.php similarity index 100% rename from pkg/runners/DebugDependenciesRunner.php rename to pkg/app/DebugDependenciesRunner.php diff --git a/pkg/runners/DebugLayerRunner.php b/pkg/app/DebugLayerRunner.php similarity index 100% rename from pkg/runners/DebugLayerRunner.php rename to pkg/app/DebugLayerRunner.php diff --git a/pkg/runners/DebugTokenRunner.php b/pkg/app/DebugTokenRunner.php similarity index 100% rename from pkg/runners/DebugTokenRunner.php rename to pkg/app/DebugTokenRunner.php diff --git a/pkg/runners/DebugUnassignedRunner.php b/pkg/app/DebugUnassignedRunner.php similarity index 100% rename from pkg/runners/DebugUnassignedRunner.php rename to pkg/app/DebugUnassignedRunner.php diff --git a/pkg/runners/DebugUnusedRunner.php b/pkg/app/DebugUnusedRunner.php similarity index 100% rename from pkg/runners/DebugUnusedRunner.php rename to pkg/app/DebugUnusedRunner.php diff --git a/pkg/runners/analyse_runner.go b/pkg/app/analyse_runner.go similarity index 99% rename from pkg/runners/analyse_runner.go rename to pkg/app/analyse_runner.go index da3574e..74fa8be 100644 --- a/pkg/runners/analyse_runner.go +++ b/pkg/app/analyse_runner.go @@ -1,4 +1,4 @@ -package runners +package app import ( "encoding/json" diff --git a/pkg/violations/cache.go b/pkg/app/cache.go similarity index 75% rename from pkg/violations/cache.go rename to pkg/app/cache.go index 2752026..0bbdae7 100644 --- a/pkg/violations/cache.go +++ b/pkg/app/cache.go @@ -1,13 +1,12 @@ -package violations +package app import ( - "github.com/KoNekoD/go-deptrac/pkg/app" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/subscribers" ) -func Cache(builder *app.ContainerBuilder) { - builder.AstFileReferenceFileCache = ast_map.NewAstFileReferenceFileCache(*builder.CacheFile, app.Version) +func Cache(builder *ContainerBuilder) { + builder.AstFileReferenceFileCache = ast_map.NewAstFileReferenceFileCache(*builder.CacheFile, Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache builder.CacheableFileSubscriber = subscribers.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) diff --git a/pkg/runners/changed_files_runner.go b/pkg/app/changed_files_runner.go similarity index 99% rename from pkg/runners/changed_files_runner.go rename to pkg/app/changed_files_runner.go index 93b67f0..ec7ab1a 100644 --- a/pkg/runners/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -1,4 +1,4 @@ -package runners +package app import ( "github.com/KoNekoD/go-deptrac/pkg/dependencies" diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 4d44226..1a41152 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -2,23 +2,22 @@ package app import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/nodes" "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/runners" "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" @@ -29,8 +28,8 @@ type ContainerBuilder struct { ProjectDirectory string CacheFile *string Configuration *configs.DeptracConfig - EventDispatcher events.EventDispatcherInterface - FileInputCollector collectors.InputCollectorInterface + EventDispatcher dispatchers.EventDispatcherInterface + FileInputCollector collectors_shared.InputCollectorInterface YmlFileLoader *hooks.YmlFileLoader Dumper *utils.Dumper AstLoader *ast_map.AstLoader @@ -43,7 +42,7 @@ type ContainerBuilder struct { ReferenceExtractors []references.ReferenceExtractorInterface ParserInterface parsers.ParserInterface LayerProvider *layers.LayerProvider - EventHelper *events.EventHelper + EventHelper *dispatchers.EventHelper AllowDependencyHandler *dependencies.AllowDependencyHandler DependsOnPrivateLayer *subscribers.DependsOnPrivateLayer DependsOnInternalToken *subscribers.DependsOnInternalToken @@ -62,10 +61,10 @@ type ContainerBuilder struct { InheritanceFlattener *flatteners.InheritanceFlattener DependencyResolver *dependencies.DependencyResolver TokenResolver *tokens.TokenResolver - CollectorResolver *collectors.CollectorResolver + CollectorResolver *collectors_shared.CollectorResolver LayerResolver layers.LayerResolverInterface NikicPhpParser *parsers.NikicPhpParser - CollectorProvider *collectors.CollectorProvider + CollectorProvider *collectors_shared.CollectorProvider DependencyLayersAnalyser *dependencies.DependencyLayersAnalyser TokenInLayerAnalyser *tokens.TokenInLayerAnalyser LayerForTokenAnalyser *tokens.LayerForTokenAnalyser @@ -74,9 +73,9 @@ type ContainerBuilder struct { RulesetUsageAnalyser *rules.RulesetUsageAnalyser FormatterProvider *formatters.FormatterProvider FormatterConfiguration *formatters.FormatterConfiguration - AnalyseRunner *runners.AnalyseRunner + AnalyseRunner *AnalyseRunner AnalyseCommand *commands.AnalyseCommand - NodeNamer *nodes.NodeNamer + NodeNamer *services.NodeNamer AnalyseOptions *rules.AnalyseOptions } diff --git a/pkg/app/service_container_builder.go b/pkg/app/service_container_builder.go index 4b343b8..dd98632 100644 --- a/pkg/app/service_container_builder.go +++ b/pkg/app/service_container_builder.go @@ -6,7 +6,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/subscribers" - "github.com/KoNekoD/go-deptrac/pkg/violations" "os" "path/filepath" "reflect" @@ -108,7 +107,7 @@ func (b *ServiceContainerBuilder) GetContainer() *ContainerBuilder { func loadServices(container *ContainerBuilder, cacheFile *string) error { if cacheFile != nil { container.CacheFile = cacheFile - violations.Cache(container) + Cache(container) } err := Services(container) diff --git a/pkg/app/services.go b/pkg/app/services.go index b5603fe..67de09b 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -4,10 +4,12 @@ import ( "flag" "fmt" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/emitters" @@ -16,12 +18,10 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/nodes" "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/runners" "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" @@ -53,14 +53,14 @@ func Services(builder *ContainerBuilder) error { timeStopwatch := stopwatch.NewStopwatch() - nodeNamer := nodes.NewNodeNamer(projectDirectory) + nodeNamer := services.NewNodeNamer(projectDirectory) /* * Utilities */ - eventDispatcher := events.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + eventDispatcher := dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) - fileInputCollector, err := collectors.NewFileInputCollector( + fileInputCollector, err := collectors_shared.NewFileInputCollector( builderConfiguration.Paths, builderConfiguration.ExcludeFiles, projectDirectory, @@ -119,7 +119,7 @@ func Services(builder *ContainerBuilder) error { astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) layerProvider := layers.NewLayerProvider(builderConfiguration.Rulesets) - eventHelper := events.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) + eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* * Events (before first possible event) @@ -213,45 +213,45 @@ func Services(builder *ContainerBuilder) error { // /* - * Layer + * LayerConfig */ - inheritanceLevelCollector, err := collectors.NewInheritanceLevelCollector(astMapExtractor) + inheritanceLevelCollector, err := collectors_shared.NewInheritanceLevelCollector(astMapExtractor) if err != nil { return err } - inheritsCollector, err := collectors.NewInheritsCollector(astMapExtractor) + inheritsCollector, err := collectors_shared.NewInheritsCollector(astMapExtractor) if err != nil { return err } - usesCollector, err := collectors.NewUsesCollector(astMapExtractor) + usesCollector, err := collectors_shared.NewUsesCollector(astMapExtractor) if err != nil { return err } - collectorProvider := collectors.NewCollectorProvider() - collectorResolver := collectors.NewCollectorResolver(collectorProvider) + collectorProvider := collectors_shared.NewCollectorProvider() + collectorResolver := collectors_shared.NewCollectorResolver(collectorProvider) layerResolver := layers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[enums2.CollectorType]collectors.CollectorInterface{ + collectors := map[enums2.CollectorType]collectors_shared.CollectorInterface{ //AttributeCollector - enums2.CollectorTypeTypeBool: collectors.NewBoolCollector(collectorResolver), - enums2.CollectorTypeTypeClass: collectors.NewClassCollector(), - enums2.CollectorTypeTypeClasslike: collectors.NewClassLikeCollector(), - enums2.CollectorTypeTypeClassNameRegex: collectors.NewClassNameRegexCollector(), + enums2.CollectorTypeTypeBool: collectors_shared.NewBoolCollector(collectorResolver), + enums2.CollectorTypeTypeClass: collectors_shared.NewClassCollector(), + enums2.CollectorTypeTypeClasslike: collectors_shared.NewClassLikeCollector(), + enums2.CollectorTypeTypeClassNameRegex: collectors_shared.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - enums2.CollectorTypeTypeDirectory: collectors.NewDirectoryCollector(), + enums2.CollectorTypeTypeDirectory: collectors_shared.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - enums2.CollectorTypeTypeFunctionName: collectors.NewFunctionNameCollector(), - enums2.CollectorTypeTypeGlob: collectors.NewGlobCollector(projectDirectory), + enums2.CollectorTypeTypeFunctionName: collectors_shared.NewFunctionNameCollector(), + enums2.CollectorTypeTypeGlob: collectors_shared.NewGlobCollector(projectDirectory), //ImplementsCollector enums2.CollectorTypeTypeInheritance: inheritanceLevelCollector, - enums2.CollectorTypeTypeInterface: collectors.NewInterfaceCollector(), + enums2.CollectorTypeTypeInterface: collectors_shared.NewInterfaceCollector(), enums2.CollectorTypeTypeInherits: inheritsCollector, - enums2.CollectorTypeTypeLayer: collectors.NewLayerCollector(layerResolver), - enums2.CollectorTypeTypeMethod: collectors.NewMethodCollector(nikicPhpParser), - enums2.CollectorTypeTypeSuperGlobal: collectors.NewSuperglobalCollector(), - enums2.CollectorTypeTypeTrait: collectors.NewTraitCollector(), + enums2.CollectorTypeTypeLayer: collectors_shared.NewLayerCollector(layerResolver), + enums2.CollectorTypeTypeMethod: collectors_shared.NewMethodCollector(nikicPhpParser), + enums2.CollectorTypeTypeSuperGlobal: collectors_shared.NewSuperglobalCollector(), + enums2.CollectorTypeTypeTrait: collectors_shared.NewTraitCollector(), enums2.CollectorTypeTypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - enums2.CollectorTypeTypeComposer: collectors.NewComposerCollector(), + enums2.CollectorTypeTypeComposer: collectors_shared.NewComposerCollector(), } collectorProvider.Set(collectors) @@ -268,7 +268,7 @@ func Services(builder *ContainerBuilder) error { /* * Console */ - analyseRunner := runners.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + analyseRunner := NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) analyseCommand := commands.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) // TODO: other commands diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go index 8c0b426..1af80df 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/ast_map/ast_loader.go @@ -1,6 +1,7 @@ package ast_map import ( + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/references" @@ -8,10 +9,10 @@ import ( type AstLoader struct { parser parsers.ParserInterface - eventDispatcher events.EventDispatcherInterface + eventDispatcher dispatchers.EventDispatcherInterface } -func NewAstLoader(parser parsers.ParserInterface, eventDispatcher events.EventDispatcherInterface) *AstLoader { +func NewAstLoader(parser parsers.ParserInterface, eventDispatcher dispatchers.EventDispatcherInterface) *AstLoader { return &AstLoader{ parser: parser, eventDispatcher: eventDispatcher, @@ -39,7 +40,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*AstMap, error) { references = append(references, reference) - errDispatchAnalysed := l.eventDispatcher.DispatchEvent(NewAstFileAnalysedEvent(file)) + errDispatchAnalysed := l.eventDispatcher.DispatchEvent(events.NewAstFileAnalysedEvent(file)) if errDispatchAnalysed != nil { return nil, errDispatchAnalysed } diff --git a/pkg/ast_map/ast_map_extractor.go b/pkg/ast_map/ast_map_extractor.go index 0814150..fb8dcd9 100644 --- a/pkg/ast_map/ast_map_extractor.go +++ b/pkg/ast_map/ast_map_extractor.go @@ -1,16 +1,16 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" ) type AstMapExtractor struct { - inputCollector collectors.InputCollectorInterface + inputCollector collectors_shared.InputCollectorInterface astLoader *AstLoader astMapCache *AstMap } -func NewAstMapExtractor(inputCollector collectors.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { +func NewAstMapExtractor(inputCollector collectors_shared.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { return &AstMapExtractor{ inputCollector: inputCollector, astLoader: astLoader, diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index afb0320..f59e2d6 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/types" @@ -30,7 +30,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { basePath := wd + "/pkg/" - fileInputCollector, err := collectors.NewFileInputCollector(paths, excluded, basePath) + fileInputCollector, err := collectors_shared.NewFileInputCollector(paths, excluded, basePath) if err != nil { t.Error(err) diff --git a/pkg/collectors/abstract_type_collector.go b/pkg/collectors_shared/abstract_type_collector.go similarity index 98% rename from pkg/collectors/abstract_type_collector.go rename to pkg/collectors_shared/abstract_type_collector.go index ad7886c..b85b127 100644 --- a/pkg/collectors/abstract_type_collector.go +++ b/pkg/collectors_shared/abstract_type_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "fmt" diff --git a/pkg/collectors/bool_collector.go b/pkg/collectors_shared/bool_collector.go similarity index 88% rename from pkg/collectors/bool_collector.go rename to pkg/collectors_shared/bool_collector.go index aed8913..d5daecb 100644 --- a/pkg/collectors/bool_collector.go +++ b/pkg/collectors_shared/bool_collector.go @@ -1,8 +1,9 @@ -package collectors +package collectors_shared import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -54,11 +55,11 @@ func (b *BoolCollector) Satisfy(config map[string]interface{}, reference tokens. func (b *BoolCollector) normalizeConfiguration(configuration map[string]interface{}) (map[string]interface{}, error) { if _, ok := configuration["must"]; !ok { - configuration["must"] = make([]*CollectorConfig, 0) + configuration["must"] = make([]*collectors_configs.CollectorConfig, 0) } if _, ok := configuration["must_not"]; !ok { - configuration["must_not"] = make([]*CollectorConfig, 0) + configuration["must_not"] = make([]*collectors_configs.CollectorConfig, 0) } if len(configuration["must"].([]interface{})) == 0 && len(configuration["must_not"].([]interface{})) == 0 { diff --git a/pkg/collectors/class_collector.go b/pkg/collectors_shared/class_collector.go similarity index 92% rename from pkg/collectors/class_collector.go rename to pkg/collectors_shared/class_collector.go index 5b91ba5..a8c458b 100644 --- a/pkg/collectors/class_collector.go +++ b/pkg/collectors_shared/class_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors/class_like_collector.go b/pkg/collectors_shared/class_like_collector.go similarity index 93% rename from pkg/collectors/class_like_collector.go rename to pkg/collectors_shared/class_like_collector.go index f1e754f..9d1c788 100644 --- a/pkg/collectors/class_like_collector.go +++ b/pkg/collectors_shared/class_like_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors/class_name_regex_collector.go b/pkg/collectors_shared/class_name_regex_collector.go similarity index 97% rename from pkg/collectors/class_name_regex_collector.go rename to pkg/collectors_shared/class_name_regex_collector.go index a9d2c5f..8ba4220 100644 --- a/pkg/collectors/class_name_regex_collector.go +++ b/pkg/collectors_shared/class_name_regex_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/collector_interface.go b/pkg/collectors_shared/collector_interface.go similarity index 92% rename from pkg/collectors/collector_interface.go rename to pkg/collectors_shared/collector_interface.go index e041770..2161f8c 100644 --- a/pkg/collectors/collector_interface.go +++ b/pkg/collectors_shared/collector_interface.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/tokens" diff --git a/pkg/collectors/collector_provider.go b/pkg/collectors_shared/collector_provider.go similarity index 96% rename from pkg/collectors/collector_provider.go rename to pkg/collectors_shared/collector_provider.go index 795211a..f8ae46f 100644 --- a/pkg/collectors/collector_provider.go +++ b/pkg/collectors_shared/collector_provider.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors/collector_resolver.go b/pkg/collectors_shared/collector_resolver.go similarity index 97% rename from pkg/collectors/collector_resolver.go rename to pkg/collectors_shared/collector_resolver.go index 8ce0e69..a6e4418 100644 --- a/pkg/collectors/collector_resolver.go +++ b/pkg/collectors_shared/collector_resolver.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/collector_resolver_interface.go b/pkg/collectors_shared/collector_resolver_interface.go similarity index 87% rename from pkg/collectors/collector_resolver_interface.go rename to pkg/collectors_shared/collector_resolver_interface.go index 9ad8736..12f8f80 100644 --- a/pkg/collectors/collector_resolver_interface.go +++ b/pkg/collectors_shared/collector_resolver_interface.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/violations" diff --git a/pkg/collectors/composer_collector.go b/pkg/collectors_shared/composer_collector.go similarity index 98% rename from pkg/collectors/composer_collector.go rename to pkg/collectors_shared/composer_collector.go index 8dd7c83..efdcbbf 100644 --- a/pkg/collectors/composer_collector.go +++ b/pkg/collectors_shared/composer_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/directory_collector.go b/pkg/collectors_shared/directory_collector.go similarity index 98% rename from pkg/collectors/directory_collector.go rename to pkg/collectors_shared/directory_collector.go index 8e0df23..174653e 100644 --- a/pkg/collectors/directory_collector.go +++ b/pkg/collectors_shared/directory_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "fmt" diff --git a/pkg/collectors/directory_collector_test.go b/pkg/collectors_shared/directory_collector_test.go similarity index 94% rename from pkg/collectors/directory_collector_test.go rename to pkg/collectors_shared/directory_collector_test.go index 023404a..66fa76f 100644 --- a/pkg/collectors/directory_collector_test.go +++ b/pkg/collectors_shared/directory_collector_test.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "regexp" diff --git a/pkg/collectors/file_input_collector.go b/pkg/collectors_shared/file_input_collector.go similarity index 98% rename from pkg/collectors/file_input_collector.go rename to pkg/collectors_shared/file_input_collector.go index 678a6bd..41e3e6d 100644 --- a/pkg/collectors/file_input_collector.go +++ b/pkg/collectors_shared/file_input_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/function_name_collector.go b/pkg/collectors_shared/function_name_collector.go similarity index 97% rename from pkg/collectors/function_name_collector.go rename to pkg/collectors_shared/function_name_collector.go index a80718a..de1668b 100644 --- a/pkg/collectors/function_name_collector.go +++ b/pkg/collectors_shared/function_name_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "fmt" diff --git a/pkg/collectors/glob_collector.go b/pkg/collectors_shared/glob_collector.go similarity index 98% rename from pkg/collectors/glob_collector.go rename to pkg/collectors_shared/glob_collector.go index 782df64..8b61ca3 100644 --- a/pkg/collectors/glob_collector.go +++ b/pkg/collectors_shared/glob_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/inheritance_level_collector.go b/pkg/collectors_shared/inheritance_level_collector.go similarity index 98% rename from pkg/collectors/inheritance_level_collector.go rename to pkg/collectors_shared/inheritance_level_collector.go index a184c77..0953228 100644 --- a/pkg/collectors/inheritance_level_collector.go +++ b/pkg/collectors_shared/inheritance_level_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" diff --git a/pkg/collectors/inherits_collector.go b/pkg/collectors_shared/inherits_collector.go similarity index 98% rename from pkg/collectors/inherits_collector.go rename to pkg/collectors_shared/inherits_collector.go index 2199272..6e82550 100644 --- a/pkg/collectors/inherits_collector.go +++ b/pkg/collectors_shared/inherits_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" diff --git a/pkg/collectors/input_collector_interface.go b/pkg/collectors_shared/input_collector_interface.go similarity index 73% rename from pkg/collectors/input_collector_interface.go rename to pkg/collectors_shared/input_collector_interface.go index 19eba69..07ee8fa 100644 --- a/pkg/collectors/input_collector_interface.go +++ b/pkg/collectors_shared/input_collector_interface.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared type InputCollectorInterface interface { Collect() ([]string, error) diff --git a/pkg/collectors/interface_collector.go b/pkg/collectors_shared/interface_collector.go similarity index 93% rename from pkg/collectors/interface_collector.go rename to pkg/collectors_shared/interface_collector.go index d23ac41..d1afa71 100644 --- a/pkg/collectors/interface_collector.go +++ b/pkg/collectors_shared/interface_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors/layer_collector.go b/pkg/collectors_shared/layer_collector.go similarity index 98% rename from pkg/collectors/layer_collector.go rename to pkg/collectors_shared/layer_collector.go index 823bb96..9e7c6c3 100644 --- a/pkg/collectors/layer_collector.go +++ b/pkg/collectors_shared/layer_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "fmt" diff --git a/pkg/collectors/method_collector.go b/pkg/collectors_shared/method_collector.go similarity index 98% rename from pkg/collectors/method_collector.go rename to pkg/collectors_shared/method_collector.go index 34b7143..2e306a2 100644 --- a/pkg/collectors/method_collector.go +++ b/pkg/collectors_shared/method_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "fmt" diff --git a/pkg/collectors/regex_collector.go b/pkg/collectors_shared/regex_collector.go similarity index 95% rename from pkg/collectors/regex_collector.go rename to pkg/collectors_shared/regex_collector.go index 0e2805a..d545707 100644 --- a/pkg/collectors/regex_collector.go +++ b/pkg/collectors_shared/regex_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/superglobal_collector.go b/pkg/collectors_shared/superglobal_collector.go similarity index 97% rename from pkg/collectors/superglobal_collector.go rename to pkg/collectors_shared/superglobal_collector.go index e7a83c6..54af05e 100644 --- a/pkg/collectors/superglobal_collector.go +++ b/pkg/collectors_shared/superglobal_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors/trait_collector.go b/pkg/collectors_shared/trait_collector.go similarity index 92% rename from pkg/collectors/trait_collector.go rename to pkg/collectors_shared/trait_collector.go index a94cdb4..4ab1b15 100644 --- a/pkg/collectors/trait_collector.go +++ b/pkg/collectors_shared/trait_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors/uses_collector.go b/pkg/collectors_shared/uses_collector.go similarity index 98% rename from pkg/collectors/uses_collector.go rename to pkg/collectors_shared/uses_collector.go index cee4979..3b3a37c 100644 --- a/pkg/collectors/uses_collector.go +++ b/pkg/collectors_shared/uses_collector.go @@ -1,4 +1,4 @@ -package collectors +package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" diff --git a/pkg/commands/analyse_command.go b/pkg/commands/analyse_command.go index b14be8d..eac4127 100644 --- a/pkg/commands/analyse_command.go +++ b/pkg/commands/analyse_command.go @@ -1,18 +1,18 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/runners" "github.com/KoNekoD/go-deptrac/pkg/subscribers" ) // AnalyseCommand - Analyses your project using the provided depfile type AnalyseCommand struct { - runner *runners.AnalyseRunner - dispatcher events.EventDispatcherInterface + runner *app.AnalyseRunner + dispatcher dispatchers.EventDispatcherInterface formatterProvider *formatters.FormatterProvider verboseBoolFlag bool debugBoolFlag bool @@ -21,7 +21,7 @@ type AnalyseCommand struct { analyseOptions *rules.AnalyseOptions } -func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher events.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscribers.ConsoleSubscriber, progressSubscriber *subscribers.ProgressSubscriber, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscribers.ConsoleSubscriber, progressSubscriber *subscribers.ProgressSubscriber, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, diff --git a/pkg/commands/changed_files_command.go b/pkg/commands/changed_files_command.go index 61f15cb..20de9f7 100644 --- a/pkg/commands/changed_files_command.go +++ b/pkg/commands/changed_files_command.go @@ -1,15 +1,15 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg/app" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/runners" "github.com/pkg/errors" "github.com/spf13/cobra" ) type ChangedFilesCommand struct { - runner *runners.ChangedFilesRunner + runner *app.ChangedFilesRunner } const ( @@ -17,7 +17,7 @@ const ( argFiles = "files" ) -func NewChangedFilesCommand(runner *runners.ChangedFilesRunner) *cobra.Command { +func NewChangedFilesCommand(runner *app.ChangedFilesRunner) *cobra.Command { cmd := &ChangedFilesCommand{runner: runner} cobraCmd := &cobra.Command{ diff --git a/pkg/configs/codeclimate_config.go b/pkg/configs/codeclimate_config.go deleted file mode 100644 index d66cd82..0000000 --- a/pkg/configs/codeclimate_config.go +++ /dev/null @@ -1,68 +0,0 @@ -package configs - -import ( - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" -) - -type CodeclimateConfig struct { - Failure enums2.CodeclimateLevelEnum - Skipped enums2.CodeclimateLevelEnum - Uncovered enums2.CodeclimateLevelEnum -} - -func newCodeclimateConfig(failure enums2.CodeclimateLevelEnum, skipped enums2.CodeclimateLevelEnum, uncovered enums2.CodeclimateLevelEnum) *CodeclimateConfig { - return &CodeclimateConfig{ - Failure: failure, - Skipped: skipped, - Uncovered: uncovered, - } -} - -func CreateCodeclimateConfig(failure *enums2.CodeclimateLevelEnum, skipped *enums2.CodeclimateLevelEnum, uncovered *enums2.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := enums2.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := enums2.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := enums2.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - return newCodeclimateConfig(*failure, *skipped, *uncovered) -} - -func (c *CodeclimateConfig) severity(failure *enums2.CodeclimateLevelEnum, skipped *enums2.CodeclimateLevelEnum, uncovered *enums2.CodeclimateLevelEnum) *CodeclimateConfig { - if failure == nil { - failureTmp := enums2.CodeclimateLevelEnumBlocker - failure = &failureTmp - } - if skipped == nil { - skippedTmp := enums2.CodeclimateLevelEnumMinor - skipped = &skippedTmp - } - if uncovered == nil { - uncoveredTmp := enums2.CodeclimateLevelEnumInfo - uncovered = &uncoveredTmp - } - c.Failure = *failure - c.Skipped = *skipped - c.Uncovered = *uncovered - return c -} - -func (c *CodeclimateConfig) ToArray() map[string]interface{} { - return map[string]interface{}{ - "severity": map[string]interface{}{ - "failure": string(c.Failure), - "skipped": string(c.Skipped), - "uncovered": string(c.Uncovered), - }, - } -} - -func (c *CodeclimateConfig) GetName() enums2.FormatterType { - return enums2.FormatterTypeCodeclimateConfig -} diff --git a/pkg/configs/config.go b/pkg/configs/config.go deleted file mode 100644 index e488386..0000000 --- a/pkg/configs/config.go +++ /dev/null @@ -1,19 +0,0 @@ -package configs - -import ( - "github.com/KoNekoD/go-deptrac/pkg/hooks" -) - -type config struct { - ConfigFileHook - hooks.TemplateFileHook -} - -var Instance *config - -func init() { - Instance = &config{ - ConfigFileHook: NewConfigFileHook(), - TemplateFileHook: hooks.NewTemplateFileHook(), - } -} diff --git a/pkg/configs/config_file_hook.go b/pkg/configs/config_file_hook.go deleted file mode 100644 index 17eb292..0000000 --- a/pkg/configs/config_file_hook.go +++ /dev/null @@ -1,22 +0,0 @@ -package configs - -import "flag" - -type configFileHook struct{} -type ConfigFileHook interface { - GetConfigFile() string -} - -func NewConfigFileHook() ConfigFileHook { - return &configFileHook{} -} - -const ArgNameConfigFileHook = "config" -const DefaultConfigFileHook = "deptrac.yaml" -const UsageConfigFileHook = "config_contract file_supportive path" - -func (h *configFileHook) GetConfigFile() string { - configFile := flag.String(ArgNameConfigFileHook, DefaultConfigFileHook, UsageConfigFileHook) - - return *configFile -} diff --git a/pkg/configs/configuration_graph_viz.go b/pkg/configs/configuration_graph_viz.go deleted file mode 100644 index fe17d94..0000000 --- a/pkg/configs/configuration_graph_viz.go +++ /dev/null @@ -1,19 +0,0 @@ -package configs - -type ConfigurationGraphViz struct { - HiddenLayers []string - GroupsLayerMap map[string][]string - PointToGroups bool -} - -func NewConfigurationGraphVizFromArray(array map[string]interface{}) *ConfigurationGraphViz { - return newConfigurationGraphViz( - array["hidden_layers"].([]string), - array["groups"].(map[string][]string), - array["point_to_groups"].(bool), - ) -} - -func newConfigurationGraphViz(hiddenLayers []string, groupsLayerMap map[string][]string, pointToGroups bool) *ConfigurationGraphViz { - return &ConfigurationGraphViz{HiddenLayers: hiddenLayers, GroupsLayerMap: groupsLayerMap, PointToGroups: pointToGroups} -} diff --git a/pkg/configs/deptrac_config.go b/pkg/configs/deptrac_config.go index 89021a0..e80a773 100644 --- a/pkg/configs/deptrac_config.go +++ b/pkg/configs/deptrac_config.go @@ -1,21 +1,21 @@ package configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" + formatters_configs2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/pkg/errors" ) type DeptracConfig struct { Paths []string - Analyser *AnalyserConfig - Formatters map[enums2.FormatterType]formatters.FormatterConfigInterface - Layers []*layers.Layer + Analyser *dtos.AnalyserConfig + Formatters map[enums.FormatterType]formatters_configs2.FormatterConfigInterface + Layers []*dtos.LayerConfig Rulesets map[string]*rules.Ruleset IgnoreUncoveredInternalStructs bool SkipViolations map[string][]string @@ -99,19 +99,19 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } layersList := c.Layers - formattersList := make(map[enums2.FormatterType]formatters.FormatterConfigInterface) + formattersList := make(map[enums.FormatterType]formatters_configs2.FormatterConfigInterface) if parsedDeptracFormatters, ok := data["formatters"]; ok { for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { formatterRaw := formatterRawRaw.(map[string]interface{}) switch formatterKey { - case string(enums2.FormatterTypeCodeclimateConfig): - formattersList[enums2.FormatterTypeCodeclimateConfig] = CreateCodeclimateConfig( - formatterRaw["failure"].(*enums2.CodeclimateLevelEnum), - formatterRaw["skipped"].(*enums2.CodeclimateLevelEnum), - formatterRaw["uncovered"].(*enums2.CodeclimateLevelEnum), + case string(enums.FormatterTypeCodeclimateConfig): + formattersList[enums.FormatterTypeCodeclimateConfig] = formatters_configs2.CreateCodeclimateConfig( + formatterRaw["failure"].(*enums.CodeclimateLevelEnum), + formatterRaw["skipped"].(*enums.CodeclimateLevelEnum), + formatterRaw["uncovered"].(*enums.CodeclimateLevelEnum), ) - case string(enums2.FormatterTypeGraphvizConfig): - hiddenLayers := make([]*layers.Layer, 0) + case string(enums.FormatterTypeGraphvizConfig): + hiddenLayers := make([]*dtos.LayerConfig, 0) for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { for _, layer := range layersList { @@ -122,14 +122,14 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - formatterGraphvizConfig := CreateGraphvizConfig(). + formatterGraphvizConfig := formatters_configs2.CreateGraphvizConfig(). SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). SetHiddenLayers(hiddenLayers...) - formattersList[enums2.FormatterTypeGraphvizConfig] = formatterGraphvizConfig + formattersList[enums.FormatterTypeGraphvizConfig] = formatterGraphvizConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*layers.Layer, 0) + groupLayer := make([]*dtos.LayerConfig, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -142,14 +142,14 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) } - case string(enums2.FormatterTypeMermaidJsConfig): - formatterMermaidJsConfig := CreateMermaidJsConfig(). + case string(enums.FormatterTypeMermaidJsConfig): + formatterMermaidJsConfig := formatters_configs2.CreateMermaidJsConfig(). SetDirection(formatterRaw["direction"].(string)) - formattersList[enums2.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig + formattersList[enums.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*layers.Layer, 0) + groupLayer := make([]*dtos.LayerConfig, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -170,7 +170,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { if rulesetsData, ok := data["ruleset"]; ok { for rulesetLayerName, rulesetLayersNames := range rulesetsData.(map[string]interface{}) { - var rulesetOwningLayer *layers.Layer + var rulesetOwningLayer *dtos.LayerConfig for _, layer := range layersList { if layer.Name == rulesetLayerName { @@ -179,7 +179,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - rulesetLayers := make([]*layers.Layer, 0) + rulesetLayers := make([]*dtos.LayerConfig, 0) if rulesetLayersNames != nil { // If not ~ for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { @@ -199,13 +199,13 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - analyzerTypesDefault := []enums2.EmitterType{enums2.EmitterTypeClassToken, enums2.EmitterTypeFunctionToken} - analyzerTypes := make([]enums2.EmitterType, 0) + analyzerTypesDefault := []enums.EmitterType{enums.EmitterTypeClassToken, enums.EmitterTypeFunctionToken} + analyzerTypes := make([]enums.EmitterType, 0) internalTag := "@internal" if parsedDeptracAnalyzer, ok := data["analyzer"]; ok { analyzerRaw := parsedDeptracAnalyzer.(map[string]interface{}) for _, typeRaw := range analyzerRaw["types"].([]interface{}) { - analyzerType, err := enums2.NewEmitterTypeFromString(typeRaw.(string)) + analyzerType, err := enums.NewEmitterTypeFromString(typeRaw.(string)) if err != nil { return errors.WithStack(err) } @@ -217,7 +217,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { analyzerTypes = analyzerTypesDefault } - analyser := Create(analyzerTypes, &internalTag) + analyser := dtos.Create(analyzerTypes, &internalTag) paths := make([]string, 0) if dataPaths, ok := data["paths"]; ok { @@ -270,11 +270,11 @@ func (c *DeptracConfig) SetupLayersData(layers interface{}) error { } func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { - layersList := make([]*layers.Layer, 0) + layersList := make([]*dtos.LayerConfig, 0) for _, layerRawRaw := range list { layerRaw := layerRawRaw.(map[string]interface{}) - collectorConfigs := make([]*collectors.CollectorConfig, 0) + collectorConfigs := make([]*collectors_configs.CollectorConfig, 0) for _, collectorRawRaw := range layerRaw["collectors"].([]interface{}) { collectorRaw := collectorRawRaw.(map[string]interface{}) @@ -283,7 +283,7 @@ func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { return apperrors.NewInvalidCollectorDefinitionMissingType() } - collectorType, err := enums2.NewCollectorTypeFromString(collectorRaw["type"].(string)) + collectorType, err := enums.NewCollectorTypeFromString(collectorRaw["type"].(string)) if err != nil { return errors.WithStack(err) } @@ -299,7 +299,7 @@ func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { delete(payload, "private") delete(payload, "type") - collectorConfig := collectors.NewCollectorConfig(collectorType, payload, private) + collectorConfig := collectors_configs.NewCollectorConfig(collectorType, payload, private) collectorConfigs = append(collectorConfigs, collectorConfig) } @@ -313,7 +313,7 @@ func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { return errors.New("invalid layer definition: name must be a string") } - layer := layers.NewLayer(layerNameStr, collectorConfigs) + layer := dtos.NewLayer(layerNameStr, collectorConfigs) layersList = append(layersList, layer) } diff --git a/pkg/dependencies/dependency_layers_analyser.go b/pkg/dependencies/dependency_layers_analyser.go index 2a9c7e2..1bd78be 100644 --- a/pkg/dependencies/dependency_layers_analyser.go +++ b/pkg/dependencies/dependency_layers_analyser.go @@ -3,6 +3,7 @@ package dependencies import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/references" @@ -15,7 +16,7 @@ type DependencyLayersAnalyser struct { dependencyResolver *DependencyResolver tokenResolver *tokens.TokenResolver layerResolver layers.LayerResolverInterface - eventDispatcher events.EventDispatcherInterface + eventDispatcher dispatchers.EventDispatcherInterface } func NewDependencyLayersAnalyser( @@ -23,7 +24,7 @@ func NewDependencyLayersAnalyser( dependencyResolver *DependencyResolver, tokenResolver *tokens.TokenResolver, layerResolver layers.LayerResolverInterface, - eventDispatcher events.EventDispatcherInterface) *DependencyLayersAnalyser { + eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ astMapExtractor: astMapExtractor, dependencyResolver: dependencyResolver, diff --git a/pkg/dependencies/dependency_resolver.go b/pkg/dependencies/dependency_resolver.go index 5dee35f..1117d98 100644 --- a/pkg/dependencies/dependency_resolver.go +++ b/pkg/dependencies/dependency_resolver.go @@ -2,8 +2,9 @@ package dependencies import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/events" @@ -12,13 +13,13 @@ import ( ) type DependencyResolver struct { - config *configs.AnalyserConfig + config *dtos.AnalyserConfig inheritanceFlattener *flatteners.InheritanceFlattener emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface - eventDispatcher events.EventDispatcherInterface + eventDispatcher dispatchers.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher events.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *dtos.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, @@ -53,14 +54,14 @@ func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*DependencyList, e } } - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(flatteners.NewPreFlattenEvent()) + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(events.NewPreFlattenEvent()) if errDispatchPreFlatten != nil { return nil, errDispatchPreFlatten } r.inheritanceFlattener.FlattenDependencies(*astMap, result) - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(flatteners.NewPostFlattenEvent()) + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(events.NewPostFlattenEvent()) if errDispatchPostFlatten != nil { return nil, errDispatchPostFlatten } diff --git a/pkg/events/event_dispatcher_interface.go b/pkg/dispatchers/event_dispatcher_interface.go similarity index 80% rename from pkg/events/event_dispatcher_interface.go rename to pkg/dispatchers/event_dispatcher_interface.go index a2774a1..6787833 100644 --- a/pkg/events/event_dispatcher_interface.go +++ b/pkg/dispatchers/event_dispatcher_interface.go @@ -1,4 +1,4 @@ -package events +package dispatchers type EventDispatcherInterface interface { DispatchEvent(event interface{}) error diff --git a/pkg/events/event_dispatcher_interface2.go b/pkg/dispatchers/event_dispatcher_interface2.go similarity index 98% rename from pkg/events/event_dispatcher_interface2.go rename to pkg/dispatchers/event_dispatcher_interface2.go index 995b2d9..5bbc727 100644 --- a/pkg/events/event_dispatcher_interface2.go +++ b/pkg/dispatchers/event_dispatcher_interface2.go @@ -1,4 +1,4 @@ -package events +package dispatchers import ( "fmt" diff --git a/pkg/events/event_helper.go b/pkg/dispatchers/event_helper.go similarity index 88% rename from pkg/events/event_helper.go rename to pkg/dispatchers/event_helper.go index 483ab93..9d85694 100644 --- a/pkg/events/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -1,7 +1,8 @@ -package events +package dispatchers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/violations" @@ -53,7 +54,7 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *ProcessEvent, analysisResult *rules.AnalysisResult, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *rules.AnalysisResult, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { analysisResult.AddRule(rules.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { diff --git a/pkg/configs/analyser_config.go b/pkg/domain/dtos/analyser_config.go similarity index 98% rename from pkg/configs/analyser_config.go rename to pkg/domain/dtos/analyser_config.go index 6bbae1b..3f23e05 100644 --- a/pkg/configs/analyser_config.go +++ b/pkg/domain/dtos/analyser_config.go @@ -1,4 +1,4 @@ -package configs +package dtos import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/configs/attribute_config.go b/pkg/domain/dtos/collectors_configs/attribute_config.go similarity index 60% rename from pkg/configs/attribute_config.go rename to pkg/domain/dtos/collectors_configs/attribute_config.go index 60d08b9..e0ccd21 100644 --- a/pkg/configs/attribute_config.go +++ b/pkg/domain/dtos/collectors_configs/attribute_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type AttributeConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewAttributeConfig(config string) *AttributeConfig { return &AttributeConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeAttribute, } } diff --git a/pkg/configs/bool_config.go b/pkg/domain/dtos/collectors_configs/bool_config.go similarity index 56% rename from pkg/configs/bool_config.go rename to pkg/domain/dtos/collectors_configs/bool_config.go index 5698cda..c5a80b3 100644 --- a/pkg/configs/bool_config.go +++ b/pkg/domain/dtos/collectors_configs/bool_config.go @@ -1,23 +1,22 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type BoolConfig struct { - *collectors.CollectorConfig + *CollectorConfig collectorType enums.CollectorType - mustNot []collectors.CollectorConfig - must []collectors.CollectorConfig + mustNot []CollectorConfig + must []CollectorConfig } func NewBoolConfig() *BoolConfig { return &BoolConfig{ - CollectorConfig: &collectors.CollectorConfig{}, + CollectorConfig: &CollectorConfig{}, collectorType: enums.CollectorTypeTypeBool, - mustNot: make([]collectors.CollectorConfig, 0), - must: make([]collectors.CollectorConfig, 0), + mustNot: make([]CollectorConfig, 0), + must: make([]CollectorConfig, 0), } } diff --git a/pkg/configs/class_config.go b/pkg/domain/dtos/collectors_configs/class_config.go similarity index 58% rename from pkg/configs/class_config.go rename to pkg/domain/dtos/collectors_configs/class_config.go index a8a6775..f4933d0 100644 --- a/pkg/configs/class_config.go +++ b/pkg/domain/dtos/collectors_configs/class_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewClassConfig(config string) *ClassConfig { return &ClassConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeClass, } } diff --git a/pkg/configs/class_like_config.go b/pkg/domain/dtos/collectors_configs/class_like_config.go similarity index 60% rename from pkg/configs/class_like_config.go rename to pkg/domain/dtos/collectors_configs/class_like_config.go index 841a6f8..b1e4e25 100644 --- a/pkg/configs/class_like_config.go +++ b/pkg/domain/dtos/collectors_configs/class_like_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassLikeConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewClassLikeConfig(config string) *ClassLikeConfig { return &ClassLikeConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeClasslike, } } diff --git a/pkg/configs/class_name_regex_config.go b/pkg/domain/dtos/collectors_configs/class_name_regex_config.go similarity index 62% rename from pkg/configs/class_name_regex_config.go rename to pkg/domain/dtos/collectors_configs/class_name_regex_config.go index 2f4261a..c1c66c4 100644 --- a/pkg/configs/class_name_regex_config.go +++ b/pkg/domain/dtos/collectors_configs/class_name_regex_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassNameRegexConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewClassNameRegexConfig(config string) *ClassNameRegexConfig { return &ClassNameRegexConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeClassNameRegex, } } diff --git a/pkg/collectors/collector_config.go b/pkg/domain/dtos/collectors_configs/collector_config.go similarity index 96% rename from pkg/collectors/collector_config.go rename to pkg/domain/dtos/collectors_configs/collector_config.go index 832c519..0f4b76b 100644 --- a/pkg/collectors/collector_config.go +++ b/pkg/domain/dtos/collectors_configs/collector_config.go @@ -1,4 +1,4 @@ -package collectors +package collectors_configs import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/configs/composer_config.go b/pkg/domain/dtos/collectors_configs/composer_config.go similarity index 87% rename from pkg/configs/composer_config.go rename to pkg/domain/dtos/collectors_configs/composer_config.go index e3302ab..7985e42 100644 --- a/pkg/configs/composer_config.go +++ b/pkg/domain/dtos/collectors_configs/composer_config.go @@ -1,12 +1,11 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ComposerConfig struct { - *collectors.CollectorConfig + *CollectorConfig collectorType enums.CollectorType packages []string composerPath string @@ -26,7 +25,7 @@ func NewComposerConfig(packages []string, composerPath *string, composerLockPath } return &ComposerConfig{ - CollectorConfig: &collectors.CollectorConfig{}, + CollectorConfig: &CollectorConfig{}, collectorType: enums.CollectorTypeTypeComposer, packages: packages, composerPath: *composerPath, diff --git a/pkg/collectors/configurable_collector_config.go b/pkg/domain/dtos/collectors_configs/configurable_collector_config.go similarity index 98% rename from pkg/collectors/configurable_collector_config.go rename to pkg/domain/dtos/collectors_configs/configurable_collector_config.go index facda44..0a5f1d6 100644 --- a/pkg/collectors/configurable_collector_config.go +++ b/pkg/domain/dtos/collectors_configs/configurable_collector_config.go @@ -1,4 +1,4 @@ -package collectors +package collectors_configs import ( "strings" diff --git a/pkg/configs/directory_config.go b/pkg/domain/dtos/collectors_configs/directory_config.go similarity index 60% rename from pkg/configs/directory_config.go rename to pkg/domain/dtos/collectors_configs/directory_config.go index 5430df1..9f4ed14 100644 --- a/pkg/configs/directory_config.go +++ b/pkg/domain/dtos/collectors_configs/directory_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type DirectoryConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewDirectoryConfig(config string) *DirectoryConfig { return &DirectoryConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeDirectory, } } diff --git a/pkg/configs/extends_config.go b/pkg/domain/dtos/collectors_configs/extends_config.go similarity index 59% rename from pkg/configs/extends_config.go rename to pkg/domain/dtos/collectors_configs/extends_config.go index 495941b..7e0b07b 100644 --- a/pkg/configs/extends_config.go +++ b/pkg/domain/dtos/collectors_configs/extends_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ExtendsConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewExtendsConfig(config string) *ExtendsConfig { return &ExtendsConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeExtends, } } diff --git a/pkg/configs/function_name_config.go b/pkg/domain/dtos/collectors_configs/function_name_config.go similarity index 61% rename from pkg/configs/function_name_config.go rename to pkg/domain/dtos/collectors_configs/function_name_config.go index 867ccfb..a728ab4 100644 --- a/pkg/configs/function_name_config.go +++ b/pkg/domain/dtos/collectors_configs/function_name_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type FunctionNameConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewFunctionNameConfig(config string) *FunctionNameConfig { return &FunctionNameConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeFunctionName, } } diff --git a/pkg/configs/glob_config.go b/pkg/domain/dtos/collectors_configs/glob_config.go similarity index 57% rename from pkg/configs/glob_config.go rename to pkg/domain/dtos/collectors_configs/glob_config.go index 938cc7b..9e02e46 100644 --- a/pkg/configs/glob_config.go +++ b/pkg/domain/dtos/collectors_configs/glob_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type GlobConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewGlobConfig(config string) *GlobConfig { return &GlobConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeGlob, } } diff --git a/pkg/configs/implements_config.go b/pkg/domain/dtos/collectors_configs/implements_config.go similarity index 60% rename from pkg/configs/implements_config.go rename to pkg/domain/dtos/collectors_configs/implements_config.go index 5c97444..d72aa77 100644 --- a/pkg/configs/implements_config.go +++ b/pkg/domain/dtos/collectors_configs/implements_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ImplementsConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewImplementsConfig(config string) *ImplementsConfig { return &ImplementsConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeImplements, } } diff --git a/pkg/configs/inherits_config.go b/pkg/domain/dtos/collectors_configs/inherits_config.go similarity index 59% rename from pkg/configs/inherits_config.go rename to pkg/domain/dtos/collectors_configs/inherits_config.go index bf611ee..2b14660 100644 --- a/pkg/configs/inherits_config.go +++ b/pkg/domain/dtos/collectors_configs/inherits_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type InheritsConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewInheritsConfig(config string) *InheritsConfig { return &InheritsConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeInherits, } } diff --git a/pkg/configs/interface_config.go b/pkg/domain/dtos/collectors_configs/interface_config.go similarity index 60% rename from pkg/configs/interface_config.go rename to pkg/domain/dtos/collectors_configs/interface_config.go index 85cf151..bb257ea 100644 --- a/pkg/configs/interface_config.go +++ b/pkg/domain/dtos/collectors_configs/interface_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type InterfaceConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewInterfaceConfig(config string) *InterfaceConfig { return &InterfaceConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeInterface, } } diff --git a/pkg/configs/layer_config.go b/pkg/domain/dtos/collectors_configs/layer_config.go similarity index 58% rename from pkg/configs/layer_config.go rename to pkg/domain/dtos/collectors_configs/layer_config.go index 8e0d368..9c8ff75 100644 --- a/pkg/configs/layer_config.go +++ b/pkg/domain/dtos/collectors_configs/layer_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type LayerConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewLayerConfig(config string) *LayerConfig { return &LayerConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeLayer, } } diff --git a/pkg/configs/method_config.go b/pkg/domain/dtos/collectors_configs/method_config.go similarity index 58% rename from pkg/configs/method_config.go rename to pkg/domain/dtos/collectors_configs/method_config.go index 35ba669..7ef1f61 100644 --- a/pkg/configs/method_config.go +++ b/pkg/domain/dtos/collectors_configs/method_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type MethodConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewMethodConfig(config string) *MethodConfig { return &MethodConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeMethod, } } diff --git a/pkg/configs/php_interal_config.go b/pkg/domain/dtos/collectors_configs/php_interal_config.go similarity index 60% rename from pkg/configs/php_interal_config.go rename to pkg/domain/dtos/collectors_configs/php_interal_config.go index 18e6f05..8a5ecaf 100644 --- a/pkg/configs/php_interal_config.go +++ b/pkg/domain/dtos/collectors_configs/php_interal_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type PhpInteralConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewPhpInteralConfig(config string) *PhpInteralConfig { return &PhpInteralConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypePhpInternal, } } diff --git a/pkg/configs/super_global_config.go b/pkg/domain/dtos/collectors_configs/super_global_config.go similarity index 81% rename from pkg/configs/super_global_config.go rename to pkg/domain/dtos/collectors_configs/super_global_config.go index 0a68703..f8747e4 100644 --- a/pkg/configs/super_global_config.go +++ b/pkg/domain/dtos/collectors_configs/super_global_config.go @@ -1,19 +1,18 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type SuperGlobalConfig struct { - *collectors.CollectorConfig + *CollectorConfig collectorType enums.CollectorType config []string } func NewSuperGlobalConfig(config []string) *SuperGlobalConfig { return &SuperGlobalConfig{ - CollectorConfig: &collectors.CollectorConfig{}, + CollectorConfig: &CollectorConfig{}, collectorType: enums.CollectorTypeTypeSuperGlobal, config: config, } diff --git a/pkg/configs/tag_value_regex_config.go b/pkg/domain/dtos/collectors_configs/tag_value_regex_config.go similarity index 85% rename from pkg/configs/tag_value_regex_config.go rename to pkg/domain/dtos/collectors_configs/tag_value_regex_config.go index 5ce140d..69ff60b 100644 --- a/pkg/configs/tag_value_regex_config.go +++ b/pkg/domain/dtos/collectors_configs/tag_value_regex_config.go @@ -1,12 +1,11 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type TagValueRegexConfig struct { - *collectors.CollectorConfig + *CollectorConfig collectorType enums.CollectorType tag string value *string @@ -14,7 +13,7 @@ type TagValueRegexConfig struct { func newTagValueRegexConfig(tag string, value *string) *TagValueRegexConfig { return &TagValueRegexConfig{ - CollectorConfig: &collectors.CollectorConfig{}, + CollectorConfig: &CollectorConfig{}, collectorType: enums.CollectorTypeTypeTagValueRegex, tag: tag, value: value, diff --git a/pkg/configs/trait_config.go b/pkg/domain/dtos/collectors_configs/trait_config.go similarity index 58% rename from pkg/configs/trait_config.go rename to pkg/domain/dtos/collectors_configs/trait_config.go index 916d1c9..f06e692 100644 --- a/pkg/configs/trait_config.go +++ b/pkg/domain/dtos/collectors_configs/trait_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type TraitConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewTraitConfig(config string) *TraitConfig { return &TraitConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeTrait, } } diff --git a/pkg/configs/uses_config.go b/pkg/domain/dtos/collectors_configs/uses_config.go similarity index 57% rename from pkg/configs/uses_config.go rename to pkg/domain/dtos/collectors_configs/uses_config.go index e4f1187..51185e3 100644 --- a/pkg/configs/uses_config.go +++ b/pkg/domain/dtos/collectors_configs/uses_config.go @@ -1,18 +1,17 @@ -package configs +package collectors_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type UsesConfig struct { - *collectors.ConfigurableCollectorConfig + *ConfigurableCollectorConfig collectorType enums.CollectorType } func NewUsesConfig(config string) *UsesConfig { return &UsesConfig{ - ConfigurableCollectorConfig: collectors.CreateConfigurableCollectorConfig(config), + ConfigurableCollectorConfig: CreateConfigurableCollectorConfig(config), collectorType: enums.CollectorTypeTypeUses, } } diff --git a/pkg/domain/dtos/formatters_configs/codeclimate_config.go b/pkg/domain/dtos/formatters_configs/codeclimate_config.go new file mode 100644 index 0000000..5672185 --- /dev/null +++ b/pkg/domain/dtos/formatters_configs/codeclimate_config.go @@ -0,0 +1,68 @@ +package formatters_configs + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" +) + +type CodeclimateConfig struct { + Failure enums.CodeclimateLevelEnum + Skipped enums.CodeclimateLevelEnum + Uncovered enums.CodeclimateLevelEnum +} + +func newCodeclimateConfig(failure enums.CodeclimateLevelEnum, skipped enums.CodeclimateLevelEnum, uncovered enums.CodeclimateLevelEnum) *CodeclimateConfig { + return &CodeclimateConfig{ + Failure: failure, + Skipped: skipped, + Uncovered: uncovered, + } +} + +func CreateCodeclimateConfig(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := enums.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := enums.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + return newCodeclimateConfig(*failure, *skipped, *uncovered) +} + +func (c *CodeclimateConfig) severity(failure *enums.CodeclimateLevelEnum, skipped *enums.CodeclimateLevelEnum, uncovered *enums.CodeclimateLevelEnum) *CodeclimateConfig { + if failure == nil { + failureTmp := enums.CodeclimateLevelEnumBlocker + failure = &failureTmp + } + if skipped == nil { + skippedTmp := enums.CodeclimateLevelEnumMinor + skipped = &skippedTmp + } + if uncovered == nil { + uncoveredTmp := enums.CodeclimateLevelEnumInfo + uncovered = &uncoveredTmp + } + c.Failure = *failure + c.Skipped = *skipped + c.Uncovered = *uncovered + return c +} + +func (c *CodeclimateConfig) ToArray() map[string]interface{} { + return map[string]interface{}{ + "severity": map[string]interface{}{ + "failure": string(c.Failure), + "skipped": string(c.Skipped), + "uncovered": string(c.Uncovered), + }, + } +} + +func (c *CodeclimateConfig) GetName() enums.FormatterType { + return enums.FormatterTypeCodeclimateConfig +} diff --git a/pkg/formatters/formatter_config_interface.go b/pkg/domain/dtos/formatters_configs/formatter_config_interface.go similarity index 86% rename from pkg/formatters/formatter_config_interface.go rename to pkg/domain/dtos/formatters_configs/formatter_config_interface.go index a51ddd4..e41b55a 100644 --- a/pkg/formatters/formatter_config_interface.go +++ b/pkg/domain/dtos/formatters_configs/formatter_config_interface.go @@ -1,4 +1,4 @@ -package formatters +package formatters_configs import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/configs/graphviz_config.go b/pkg/domain/dtos/formatters_configs/graphviz_config.go similarity index 75% rename from pkg/configs/graphviz_config.go rename to pkg/domain/dtos/formatters_configs/graphviz_config.go index d2b9663..0ec7525 100644 --- a/pkg/configs/graphviz_config.go +++ b/pkg/domain/dtos/formatters_configs/graphviz_config.go @@ -1,15 +1,24 @@ -package configs +package formatters_configs import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type GraphvizConfig struct { name string PointToGroups bool - HiddenLayers []*layers.Layer - Groups map[string][]*layers.Layer + HiddenLayers []*dtos.LayerConfig + Groups map[string][]*dtos.LayerConfig +} + +func (g *GraphvizConfig) HasHiddenLayer(name string) bool { + for _, layer := range g.HiddenLayers { + if layer.Name == name { + return true + } + } + return false } func (g *GraphvizConfig) HiddenLayersNames() []string { @@ -26,8 +35,8 @@ func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", PointToGroups: false, - HiddenLayers: make([]*layers.Layer, 0), - Groups: make(map[string][]*layers.Layer), + HiddenLayers: make([]*dtos.LayerConfig, 0), + Groups: make(map[string][]*dtos.LayerConfig), } } @@ -44,12 +53,12 @@ func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { return g } -func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*layers.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*dtos.LayerConfig) *GraphvizConfig { g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*layers.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*dtos.LayerConfig) *GraphvizConfig { g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } diff --git a/pkg/configs/mermaid_js_config.go b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go similarity index 84% rename from pkg/configs/mermaid_js_config.go rename to pkg/domain/dtos/formatters_configs/mermaid_js_config.go index 108f0ed..998f220 100644 --- a/pkg/configs/mermaid_js_config.go +++ b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go @@ -1,21 +1,21 @@ -package configs +package formatters_configs import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type MermaidJsConfig struct { name string Direction string - Groups map[string][]*layers.Layer + Groups map[string][]*dtos.LayerConfig } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", Direction: "TD", - Groups: make(map[string][]*layers.Layer), + Groups: make(map[string][]*dtos.LayerConfig), } } @@ -28,7 +28,7 @@ func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { return m } -func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*layers.Layer) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*dtos.LayerConfig) *MermaidJsConfig { for _, config := range layerConfigs { m.Groups[name] = append(m.Groups[name], config) } diff --git a/pkg/nodes/fqdn_index_node.go b/pkg/domain/dtos/fqdn_index_node.go similarity index 86% rename from pkg/nodes/fqdn_index_node.go rename to pkg/domain/dtos/fqdn_index_node.go index 28bdfe4..4f01521 100644 --- a/pkg/nodes/fqdn_index_node.go +++ b/pkg/domain/dtos/fqdn_index_node.go @@ -1,4 +1,4 @@ -package nodes +package dtos type FQDNIndexNode struct { FQDN bool @@ -6,10 +6,7 @@ type FQDNIndexNode struct { } func NewFQDNIndexNode() *FQDNIndexNode { - return &FQDNIndexNode{ - FQDN: false, - nodes: make(map[string]*FQDNIndexNode), - } + return &FQDNIndexNode{nodes: make(map[string]*FQDNIndexNode)} } func (f *FQDNIndexNode) IsFQDN() bool { diff --git a/pkg/domain/dtos/layer_config.go b/pkg/domain/dtos/layer_config.go new file mode 100644 index 0000000..88b07ef --- /dev/null +++ b/pkg/domain/dtos/layer_config.go @@ -0,0 +1,37 @@ +package dtos + +import "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" + +type LayerConfig struct { + Collectors []*collectors_configs.CollectorConfig + Name string +} + +func NewLayer(name string, collectorConfigs []*collectors_configs.CollectorConfig) *LayerConfig { + l := &LayerConfig{Name: name} + + l.setCollectors(collectorConfigs...) + + return l +} + +func NewLayerWithName(name string) *LayerConfig { + return &LayerConfig{Name: name} +} + +func (l *LayerConfig) setCollectors(collectorConfigs ...*collectors_configs.CollectorConfig) *LayerConfig { + for _, collectorConfig := range collectorConfigs { + l.Collectors = append(l.Collectors, collectorConfig) + } + + return l +} + +func (l *LayerConfig) ToArray() map[string]interface{} { + collectors := make([]interface{}, len(l.Collectors)) + for i, collector := range l.Collectors { + collectors[i] = collector.ToArray() + } + + return map[string]interface{}{"name": l.Name, "collectors": collectors} +} diff --git a/pkg/nodes/node_namer.go b/pkg/domain/services/node_namer.go similarity index 99% rename from pkg/nodes/node_namer.go rename to pkg/domain/services/node_namer.go index 3abd306..3e1dc82 100644 --- a/pkg/nodes/node_namer.go +++ b/pkg/domain/services/node_namer.go @@ -1,4 +1,4 @@ -package nodes +package services import ( "fmt" diff --git a/pkg/nodes/node_namer_test.go b/pkg/domain/services/node_namer_test.go similarity index 60% rename from pkg/nodes/node_namer_test.go rename to pkg/domain/services/node_namer_test.go index 79b64b4..2bbbc14 100644 --- a/pkg/nodes/node_namer_test.go +++ b/pkg/domain/services/node_namer_test.go @@ -1,13 +1,13 @@ -package nodes_test +package services_test import ( "github.com/KoNekoD/go-deptrac/pkg/app" - "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "testing" ) func TestOk(t *testing.T) { - namer := app.ProvideTestContainerService("NodeNamer").(*nodes.NodeNamer) + namer := app.ProvideTestContainerService("NodeNamer").(*services.NodeNamer) name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") diff --git a/pkg/emitters/uses_dependency_emitter.go b/pkg/emitters/uses_dependency_emitter.go index e0f0851..a981a90 100644 --- a/pkg/emitters/uses_dependency_emitter.go +++ b/pkg/emitters/uses_dependency_emitter.go @@ -3,8 +3,8 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/nodes" "github.com/KoNekoD/go-deptrac/pkg/tokens" "strings" ) @@ -33,7 +33,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende referencesFQDN = append(referencesFQDN, reference.GetToken().ToString()) } - FQDNIndex := nodes.FQDNIndexNode{} + FQDNIndex := dtos.NewFQDNIndexNode() for _, reference := range referencesFQDN { pathSplit := strings.Split(reference, "\\") @@ -51,7 +51,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende } } -func (u *UsesDependencyEmitter) IsFQDN(dependency *tokens.DependencyToken, FQDNIndex nodes.FQDNIndexNode) bool { +func (u *UsesDependencyEmitter) IsFQDN(dependency *tokens.DependencyToken, FQDNIndex *dtos.FQDNIndexNode) bool { dependencyFQDN := dependency.Token.ToString() pathSplit := strings.Split(dependencyFQDN, "\\") value := FQDNIndex.GetNestedNode(pathSplit) diff --git a/pkg/ast_map/ast_file_analysed_event.go b/pkg/events/ast_file_analysed_event.go similarity index 94% rename from pkg/ast_map/ast_file_analysed_event.go rename to pkg/events/ast_file_analysed_event.go index 9d5e6ce..8dea521 100644 --- a/pkg/ast_map/ast_file_analysed_event.go +++ b/pkg/events/ast_file_analysed_event.go @@ -1,4 +1,4 @@ -package ast_map +package events // AstFileAnalysedEvent - Event triggered after parsing the AST of a file_supportive has been completed. type AstFileAnalysedEvent struct { diff --git a/pkg/flatteners/post_flatten_event.go b/pkg/events/post_flatten_event.go similarity index 93% rename from pkg/flatteners/post_flatten_event.go rename to pkg/events/post_flatten_event.go index 5fb494a..33a788b 100644 --- a/pkg/flatteners/post_flatten_event.go +++ b/pkg/events/post_flatten_event.go @@ -1,4 +1,4 @@ -package flatteners +package events // PostFlattenEvent - Event triggered after all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PostFlattenEvent struct{} diff --git a/pkg/flatteners/pre_flatten_event.go b/pkg/events/pre_flatten_event.go similarity index 93% rename from pkg/flatteners/pre_flatten_event.go rename to pkg/events/pre_flatten_event.go index 252f37b..0656343 100644 --- a/pkg/flatteners/pre_flatten_event.go +++ b/pkg/events/pre_flatten_event.go @@ -1,4 +1,4 @@ -package flatteners +package events // PreFlattenEvent - Event triggered before all the dependencies have been flattened. This occurs when all dependencies caused by class inheritance have been resolved. type PreFlattenEvent struct{} diff --git a/pkg/formatters/formatter_configuration.go b/pkg/formatters/formatter_configuration.go index 35b77b6..2dd00d5 100644 --- a/pkg/formatters/formatter_configuration.go +++ b/pkg/formatters/formatter_configuration.go @@ -1,17 +1,18 @@ package formatters import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type FormatterConfiguration struct { - config map[enums.FormatterType]FormatterConfigInterface + config map[enums.FormatterType]formatters_configs.FormatterConfigInterface } -func NewFormatterConfiguration(config map[enums.FormatterType]FormatterConfigInterface) *FormatterConfiguration { +func NewFormatterConfiguration(config map[enums.FormatterType]formatters_configs.FormatterConfigInterface) *FormatterConfiguration { return &FormatterConfiguration{config: config} } -func (f *FormatterConfiguration) GetConfigFor(area enums.FormatterType) FormatterConfigInterface { +func (f *FormatterConfiguration) GetConfigFor(area enums.FormatterType) formatters_configs.FormatterConfigInterface { return f.config[area] } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index d60b611..8967397 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -2,22 +2,21 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" "path/filepath" - "slices" ) type GraphVizOutputFormatter struct { - config configs.ConfigurationGraphViz + config formatters_configs.GraphvizConfig } func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFormatter { - extractedConfig := config.GetConfigFor("graphviz").(interface{}).(configs.ConfigurationGraphViz) + extractedConfig := config.GetConfigFor("graphviz").(interface{}).(formatters_configs.GraphvizConfig) return &GraphVizOutputFormatter{config: extractedConfig} } @@ -85,17 +84,17 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []rules.R return layersDependOnLayers } -func (f *GraphVizOutputFormatter) createNodes(outputConfig configs.ConfigurationGraphViz, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { +func (f *GraphVizOutputFormatter) createNodes(outputConfig formatters_configs.GraphvizConfig, layersDependOnLayers map[string]map[string]int, graph *cgraph.Graph) map[string]*cgraph.Node { nodes := make(map[string]*cgraph.Node) for layer, layersDependOn := range layersDependOnLayers { - if slices.Contains(outputConfig.HiddenLayers, layer) { + if outputConfig.HasHiddenLayer(layer) { continue } if nodes[layer] == nil { nodes[layer], _ = graph.CreateNode(layer) } for layerDependOn := range layersDependOn { - if slices.Contains(outputConfig.HiddenLayers, layerDependOn) { + if outputConfig.HasHiddenLayer(layerDependOn) { continue } if nodes[layerDependOn] == nil { @@ -106,13 +105,13 @@ func (f *GraphVizOutputFormatter) createNodes(outputConfig configs.Configuration return nodes } -func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configs.ConfigurationGraphViz, layersDependOnLayers, layerViolations map[string]map[string]int) { +func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig formatters_configs.GraphvizConfig, layersDependOnLayers, layerViolations map[string]map[string]int) { for layer, layersDependOn := range layersDependOnLayers { - if slices.Contains(outputConfig.HiddenLayers, layer) { + if outputConfig.HasHiddenLayer(layer) { continue } for layerDependOn, layerDependOnCount := range layersDependOn { - if slices.Contains(outputConfig.HiddenLayers, layerDependOn) { + if outputConfig.HasHiddenLayer(layerDependOn) { continue } edge, _ := graph.CreateEdge(fmt.Sprintf("%s->%s", layer, layerDependOn), nodes[layer], nodes[layerDependOn]) @@ -129,15 +128,15 @@ func (f *GraphVizOutputFormatter) connectEdges(graph *cgraph.Graph, nodes map[st } } -func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig configs.ConfigurationGraphViz) { - for groupName, groupLayerNames := range outputConfig.GroupsLayerMap { +func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map[string]*cgraph.Node, outputConfig formatters_configs.GraphvizConfig) { + for groupName, groupLayerNames := range outputConfig.Groups { subgraph := graph.SubGraph(f.getSubgraphName(groupName), 1) subgraph.SetLabel(groupName) - for _, groupLayerName := range groupLayerNames { - if node, exists := nodes[groupLayerName]; exists { + for _, groupLayer := range groupLayerNames { + if node, exists := nodes[groupLayer.Name]; exists { subgraph.NextNode(node) node.Set("group", groupName) - delete(nodes, groupLayerName) + delete(nodes, groupLayer.Name) } } } diff --git a/pkg/formatters/mermaid_js_output_formatter.go b/pkg/formatters/mermaid_js_output_formatter.go index 680b54f..a30d2c2 100644 --- a/pkg/formatters/mermaid_js_output_formatter.go +++ b/pkg/formatters/mermaid_js_output_formatter.go @@ -2,14 +2,14 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" "github.com/KoNekoD/go-deptrac/pkg/results" "os" "strings" ) type MermaidJSOutputFormatter struct { - config *configs.MermaidJsConfig + config *formatters_configs.MermaidJsConfig } const ( @@ -23,7 +23,7 @@ const ( ) func NewMermaidJSOutputFormatter(config FormatterConfiguration) *MermaidJSOutputFormatter { - extractedConfig := config.GetConfigFor("mermaidjs").(interface{}).(*configs.MermaidJsConfig) + extractedConfig := config.GetConfigFor("mermaidjs").(interface{}).(*formatters_configs.MermaidJsConfig) return &MermaidJSOutputFormatter{config: extractedConfig} } diff --git a/pkg/hooks/template_file_hook.go b/pkg/hooks/template_file_hook.go deleted file mode 100644 index a0338e2..0000000 --- a/pkg/hooks/template_file_hook.go +++ /dev/null @@ -1,17 +0,0 @@ -package hooks - -type templateFileHook struct{} -type TemplateFileHook interface { - GetTemplateFile() string -} - -func NewTemplateFileHook() TemplateFileHook { - return &templateFileHook{} -} - -const DefaultTemplateFile = "deptrac_template.yaml" - -func (h *templateFileHook) GetTemplateFile() string { - - return DefaultTemplateFile -} diff --git a/pkg/layers/layer.go b/pkg/layers/layer.go deleted file mode 100644 index 6405bed..0000000 --- a/pkg/layers/layer.go +++ /dev/null @@ -1,40 +0,0 @@ -package layers - -import "github.com/KoNekoD/go-deptrac/pkg/collectors" - -type Layer struct { - Collectors []*collectors.CollectorConfig - Name string -} - -func NewLayer(name string, collectorConfigs []*collectors.CollectorConfig) *Layer { - l := &Layer{Name: name} - - l.setCollectors(collectorConfigs...) - - return l -} - -func NewLayerWithName(name string) *Layer { - return &Layer{Name: name} -} - -func (l *Layer) setCollectors(collectorConfigs ...*collectors.CollectorConfig) *Layer { - for _, collectorConfig := range collectorConfigs { - l.Collectors = append(l.Collectors, collectorConfig) - } - - return l -} - -func (l *Layer) ToArray() map[string]interface{} { - collectors := make([]interface{}, len(l.Collectors)) - for i, collector := range l.Collectors { - collectors[i] = collector.ToArray() - } - - return map[string]interface{}{ - "name": l.Name, - "collectors": collectors, - } -} diff --git a/pkg/layers/layer_resolver.go b/pkg/layers/layer_resolver.go index e8e36ae..6e76e59 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -2,7 +2,8 @@ package layers import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/collectors" + "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/violations" "reflect" @@ -11,8 +12,8 @@ import ( // LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { - collectorResolver collectors.CollectorResolverInterface - layersConfig []*Layer + collectorResolver collectors_shared.CollectorResolverInterface + layersConfig []*dtos.LayerConfig layers map[string][]*violations.Collectable initialized bool resolved map[string]map[string]bool @@ -20,7 +21,7 @@ type LayerResolver struct { } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collectors.CollectorResolverInterface, layersConfig []*Layer) LayerResolverInterface { +func NewLayerResolver(collectorResolver collectors_shared.CollectorResolverInterface, layersConfig []*dtos.LayerConfig) LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, diff --git a/pkg/parsers/nikic_php_parser.go b/pkg/parsers/nikic_php_parser.go index 1c33dc3..bd743f9 100644 --- a/pkg/parsers/nikic_php_parser.go +++ b/pkg/parsers/nikic_php_parser.go @@ -2,7 +2,7 @@ package parsers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/pkg/errors" @@ -49,11 +49,11 @@ type NikicPhpParser struct { classAstMap map[string]*ast.Ident cache ast_map.AstFileReferenceCacheInterface typeResolver *types.TypeResolver - nodeNamer *nodes.NodeNamer + nodeNamer *services.NodeNamer extractors []references.ReferenceExtractorInterface } -func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *nodes.NodeNamer, extractors []references.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []references.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, diff --git a/pkg/references/file_reference_visitor.go b/pkg/references/file_reference_visitor.go index 1334eb4..86f1d3a 100644 --- a/pkg/references/file_reference_visitor.go +++ b/pkg/references/file_reference_visitor.go @@ -1,8 +1,8 @@ package references import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/nodes" "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/hashicorp/go-multierror" "github.com/pkg/errors" @@ -16,12 +16,12 @@ type FileReferenceVisitor struct { currentReference ReferenceBuilderInterface fileReferenceBuilder *FileReferenceBuilder typeResolver *types.TypeResolver - nodeNamer *nodes.NodeNamer + nodeNamer *services.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *nodes.NodeNamer, extractors ...ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, diff --git a/pkg/rules/ruleset.go b/pkg/rules/ruleset.go index 2db1084..5dc400f 100644 --- a/pkg/rules/ruleset.go +++ b/pkg/rules/ruleset.go @@ -1,13 +1,15 @@ package rules -import "github.com/KoNekoD/go-deptrac/pkg/layers" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" +) type Ruleset struct { - LayerConfig *layers.Layer - AccessableLayers []*layers.Layer + LayerConfig *dtos.LayerConfig + AccessableLayers []*dtos.LayerConfig } -func NewRuleset(layerConfig *layers.Layer, layerConfigs []*layers.Layer) *Ruleset { +func NewRuleset(layerConfig *dtos.LayerConfig, layerConfigs []*dtos.LayerConfig) *Ruleset { r := &Ruleset{LayerConfig: layerConfig} r.Accesses(layerConfigs...) @@ -15,11 +17,11 @@ func NewRuleset(layerConfig *layers.Layer, layerConfigs []*layers.Layer) *Rulese return r } -func NewForLayer(layerConfig *layers.Layer) *Ruleset { - return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*layers.Layer, 0)} +func NewForLayer(layerConfig *dtos.LayerConfig) *Ruleset { + return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*dtos.LayerConfig, 0)} } -func (r *Ruleset) Accesses(layerConfigs ...*layers.Layer) *Ruleset { +func (r *Ruleset) Accesses(layerConfigs ...*dtos.LayerConfig) *Ruleset { for _, config := range layerConfigs { r.AccessableLayers = append(r.AccessableLayers, config) } diff --git a/pkg/rules/ruleset_usage_analyser.go b/pkg/rules/ruleset_usage_analyser.go index 92ef060..ded69e5 100644 --- a/pkg/rules/ruleset_usage_analyser.go +++ b/pkg/rules/ruleset_usage_analyser.go @@ -3,6 +3,7 @@ package rules import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -13,7 +14,7 @@ type RulesetUsageAnalyser struct { astMapExtractor *ast_map.AstMapExtractor dependencyResolver *dependencies.DependencyResolver tokenResolver *tokens.TokenResolver - layers []*layers2.Layer + layers []*dtos.LayerConfig } func NewRulesetUsageAnalyser( @@ -22,7 +23,7 @@ func NewRulesetUsageAnalyser( astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *dependencies.DependencyResolver, tokenResolver *tokens.TokenResolver, - layers []*layers2.Layer, + layers []*dtos.LayerConfig, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, diff --git a/pkg/subscribers/console_subscriber.go b/pkg/subscribers/console_subscriber.go index 58841b2..c98b5ca 100644 --- a/pkg/subscribers/console_subscriber.go +++ b/pkg/subscribers/console_subscriber.go @@ -5,7 +5,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/flatteners" + "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/results" ) @@ -35,7 +35,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp if s.output.IsVerbose() { s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") } - case *ast_map.AstFileAnalysedEvent: + case *events.AstFileAnalysedEvent: if s.output.IsVerbose() { s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } @@ -53,7 +53,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp if s.output.IsVerbose() { s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") } - case *flatteners.PreFlattenEvent: + case *events.PreFlattenEvent: if s.output.IsVerbose() { err := s.stopwatchStart("flatten") if err != nil { @@ -61,7 +61,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp } s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "start flatten dependencies"}) } - case *flatteners.PostFlattenEvent: + case *events.PostFlattenEvent: if s.output.IsVerbose() { s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") } diff --git a/pkg/subscribers/depends_on_disallowed_layer.go b/pkg/subscribers/depends_on_disallowed_layer.go index 552bbfb..810ea11 100644 --- a/pkg/subscribers/depends_on_disallowed_layer.go +++ b/pkg/subscribers/depends_on_disallowed_layer.go @@ -1,16 +1,17 @@ package subscribers import ( + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/events" ) type DependsOnDisallowedLayer struct { - eventHelper *events.EventHelper + eventHelper *dispatchers.EventHelper } -func NewDependsOnDisallowedLayer(eventHelper *events.EventHelper) *DependsOnDisallowedLayer { +func NewDependsOnDisallowedLayer(eventHelper *dispatchers.EventHelper) *DependsOnDisallowedLayer { return &DependsOnDisallowedLayer{eventHelper: eventHelper} } diff --git a/pkg/subscribers/depends_on_internal_token.go b/pkg/subscribers/depends_on_internal_token.go index 519cb6e..e7e0bde 100644 --- a/pkg/subscribers/depends_on_internal_token.go +++ b/pkg/subscribers/depends_on_internal_token.go @@ -1,17 +1,18 @@ package subscribers import ( - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/references" ) type DependsOnInternalToken struct { - eventHelper *events.EventHelper + eventHelper *dispatchers.EventHelper internalTag *string } -func NewDependsOnInternalToken(eventHelper *events.EventHelper, analyser *configs.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *dispatchers.EventHelper, analyser *dtos.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } diff --git a/pkg/subscribers/depends_on_private_layer.go b/pkg/subscribers/depends_on_private_layer.go index 49b62a9..499b789 100644 --- a/pkg/subscribers/depends_on_private_layer.go +++ b/pkg/subscribers/depends_on_private_layer.go @@ -1,14 +1,15 @@ package subscribers import ( + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/events" ) type DependsOnPrivateLayer struct { - eventHelper *events.EventHelper + eventHelper *dispatchers.EventHelper } -func NewDependsOnPrivateLayer(eventHelper *events.EventHelper) *DependsOnPrivateLayer { +func NewDependsOnPrivateLayer(eventHelper *dispatchers.EventHelper) *DependsOnPrivateLayer { return &DependsOnPrivateLayer{eventHelper: eventHelper} } diff --git a/pkg/subscribers/event_subscriber_interface_map_reg.go b/pkg/subscribers/event_subscriber_interface_map_reg.go index 860658f..a9e7f56 100644 --- a/pkg/subscribers/event_subscriber_interface_map_reg.go +++ b/pkg/subscribers/event_subscriber_interface_map_reg.go @@ -4,7 +4,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/events" - "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/elliotchance/orderedmap/v2" "reflect" ) @@ -14,12 +13,12 @@ func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber, progressSubscrib postProcessEvent := &events.PostProcessEvent{} preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} - astFileAnalysedEvent := &ast_map.AstFileAnalysedEvent{} + astFileAnalysedEvent := &events.AstFileAnalysedEvent{} astFileSyntaxErrorEvent := &ast_map.AstFileSyntaxErrorEvent{} preEmitEvent := &emitters.PreEmitEvent{} postEmitEvent := &emitters.PostEmitEvent{} - preFlattenEvent := &flatteners.PreFlattenEvent{} - postFlattenEvent := &flatteners.PostFlattenEvent{} + preFlattenEvent := &events.PreFlattenEvent{} + postFlattenEvent := &events.PostFlattenEvent{} Reg(preCreateAstMapEvent, consoleSubscriber, DefaultPriority) Reg(postCreateAstMapEvent, consoleSubscriber, DefaultPriority) diff --git a/pkg/subscribers/progress_subscriber.go b/pkg/subscribers/progress_subscriber.go index 5427730..6a7239e 100644 --- a/pkg/subscribers/progress_subscriber.go +++ b/pkg/subscribers/progress_subscriber.go @@ -2,6 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/results" ) @@ -24,7 +25,7 @@ func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPro if err != nil { return err } - case *ast_map.AstFileAnalysedEvent: + case *events.AstFileAnalysedEvent: err := s.output.GetStyle().ProgressAdvance(results.ProgressAdvanceDefault) if err != nil { return err diff --git a/pkg/tokens/token_in_layer_analyser.go b/pkg/tokens/token_in_layer_analyser.go index 06a278a..d490d26 100644 --- a/pkg/tokens/token_in_layer_analyser.go +++ b/pkg/tokens/token_in_layer_analyser.go @@ -2,7 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" @@ -10,7 +10,7 @@ import ( type TokenInLayerAnalyser struct { tokenTypes []enums.TokenType - config *configs.AnalyserConfig + config *dtos.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver layerResolver layers.LayerResolverInterface @@ -20,7 +20,7 @@ func NewTokenInLayerAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *TokenResolver, layerResolver layers.LayerResolverInterface, - config *configs.AnalyserConfig, + config *dtos.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ tokenTypes: make([]enums.TokenType, 0), diff --git a/pkg/tokens/unassigned_token_analyser.go b/pkg/tokens/unassigned_token_analyser.go index ddbc74f..75f06f9 100644 --- a/pkg/tokens/unassigned_token_analyser.go +++ b/pkg/tokens/unassigned_token_analyser.go @@ -2,7 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" @@ -10,7 +10,7 @@ import ( type UnassignedTokenAnalyser struct { tokenTypes []enums.TokenType - config *configs.AnalyserConfig + config *dtos.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver layerResolver layers.LayerResolverInterface @@ -20,7 +20,7 @@ func NewUnassignedTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *TokenResolver, layerResolver layers.LayerResolverInterface, - config *configs.AnalyserConfig, + config *dtos.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ tokenTypes: make([]enums.TokenType, 0), diff --git a/pkg/types/type_resolver.go b/pkg/types/type_resolver.go index 0cc278e..b2d45ba 100644 --- a/pkg/types/type_resolver.go +++ b/pkg/types/type_resolver.go @@ -1,7 +1,7 @@ package types import ( - "github.com/KoNekoD/go-deptrac/pkg/nodes" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "go/ast" "go/parser" "go/token" @@ -10,10 +10,10 @@ import ( ) type TypeResolver struct { - nodeNamer *nodes.NodeNamer + nodeNamer *services.NodeNamer } -func NewTypeResolver(nodeNamer *nodes.NodeNamer) *TypeResolver { +func NewTypeResolver(nodeNamer *services.NodeNamer) *TypeResolver { return &TypeResolver{ nodeNamer: nodeNamer, } diff --git a/pkg/violations/collectable.go b/pkg/violations/collectable.go index 8e611ca..ce44d9c 100644 --- a/pkg/violations/collectable.go +++ b/pkg/violations/collectable.go @@ -1,12 +1,12 @@ package violations -import "github.com/KoNekoD/go-deptrac/pkg/collectors" +import "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" type Collectable struct { - Collector collectors.CollectorInterface + Collector collectors_shared.CollectorInterface Attributes map[string]interface{} } -func NewCollectable(collector collectors.CollectorInterface, attributes map[string]interface{}) *Collectable { +func NewCollectable(collector collectors_shared.CollectorInterface, attributes map[string]interface{}) *Collectable { return &Collectable{Collector: collector, Attributes: attributes} } diff --git a/pkg/violations/unmatched_skipped_violations.go b/pkg/violations/unmatched_skipped_violations.go index f863bb0..dc19569 100644 --- a/pkg/violations/unmatched_skipped_violations.go +++ b/pkg/violations/unmatched_skipped_violations.go @@ -2,15 +2,16 @@ package violations import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/events" ) type UnmatchedSkippedViolations struct { - eventHelper *events.EventHelper + eventHelper *dispatchers.EventHelper } -func NewUnmatchedSkippedViolations(eventHelper *events.EventHelper) *UnmatchedSkippedViolations { +func NewUnmatchedSkippedViolations(eventHelper *dispatchers.EventHelper) *UnmatchedSkippedViolations { return &UnmatchedSkippedViolations{eventHelper: eventHelper} } From 722bd2438c38a3fc861a6a926ba8074f99e0d47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Thu, 10 Oct 2024 21:33:36 +0300 Subject: [PATCH 13/40] refactor: structure --- .../ast_file_reference_cache_interface.go | 6 +- pkg/ast_map/ast_file_reference_file_cache.go | 20 +++--- .../ast_file_reference_in_memory_cache.go | 10 +-- pkg/ast_map/ast_loader.go | 4 +- pkg/ast_map/ast_map.go | 59 +++++++++-------- .../abstract_type_collector.go | 10 +-- pkg/collectors_shared/bool_collector.go | 4 +- .../class_name_regex_collector.go | 10 +-- pkg/collectors_shared/collector_interface.go | 4 +- pkg/collectors_shared/composer_collector.go | 4 +- pkg/collectors_shared/directory_collector.go | 4 +- .../function_name_collector.go | 8 +-- pkg/collectors_shared/glob_collector.go | 4 +- .../inheritance_level_collector.go | 10 +-- pkg/collectors_shared/inherits_collector.go | 14 ++-- pkg/collectors_shared/layer_collector.go | 4 +- pkg/collectors_shared/method_collector.go | 9 ++- .../superglobal_collector.go | 7 +- pkg/collectors_shared/uses_collector.go | 14 ++-- pkg/dependencies/dependency.go | 11 ++-- pkg/dependencies/dependency_interface.go | 7 +- .../dependency_layers_analyser.go | 7 +- pkg/dependencies/inherit_dependency.go | 7 +- .../uncovered_dependent_handler.go | 2 +- pkg/{ => domain/dtos}/ast_map/ast_inherit.go | 8 +-- .../dtos}/dependencies/dependency_context.go | 6 +- .../dtos}/file_occurrence.go | 2 +- .../dtos}/tokens/class_like_token.go | 0 .../dtos}/tokens/dependency_token.go | 2 +- pkg/{ => domain/dtos}/tokens/file_token.go | 0 .../dtos}/tokens/function_token.go | 0 pkg/{ => domain/dtos}/tokens/token.go | 0 .../class_like_reference.go | 20 +++--- .../dtos/tokens_references}/file_reference.go | 16 +++-- .../tokens_references}/function_reference.go | 20 +++--- .../tagged_token_reference.go | 2 +- .../tagged_token_reference_interface.go | 2 +- .../token_reference_interface.go | 8 ++- .../tokens_references}/variable_reference.go | 4 +- pkg/emitters/class_dependency_emitter.go | 5 +- .../function_call_dependency_emitter.go | 3 +- pkg/emitters/uses_dependency_emitter.go | 5 +- pkg/events/process_event.go | 10 +-- pkg/flatteners/inheritance_flattener.go | 2 +- pkg/formatters/console_output_formatter.go | 4 +- pkg/layers/layer_resolver.go | 6 +- pkg/layers/layer_resolver_interface.go | 8 ++- pkg/parsers/nikic_php_parser.go | 9 +-- pkg/parsers/parser_interface.go | 6 +- .../AnnotationReferenceExtractor.php | 66 ------------------- .../class_like_reference_builder.go | 17 ++--- pkg/references/file_reference_builder.go | 11 ++-- pkg/references/function_reference_builder.go | 9 ++- pkg/references/reference_builder.go | 11 ++-- pkg/subscribers/depends_on_internal_token.go | 4 +- pkg/tokens/layer_for_token_analyser.go | 3 +- ...n_reference_with_dependencies_interface.go | 9 ++- pkg/tokens/token_resolver.go | 13 ++-- 58 files changed, 250 insertions(+), 280 deletions(-) rename pkg/{ => domain/dtos}/ast_map/ast_inherit.go (83%) rename pkg/{ => domain/dtos}/dependencies/dependency_context.go (63%) rename pkg/{violations => domain/dtos}/file_occurrence.go (93%) rename pkg/{ => domain/dtos}/tokens/class_like_token.go (100%) rename pkg/{ => domain/dtos}/tokens/dependency_token.go (82%) rename pkg/{ => domain/dtos}/tokens/file_token.go (100%) rename pkg/{ => domain/dtos}/tokens/function_token.go (100%) rename pkg/{ => domain/dtos}/tokens/token.go (100%) rename pkg/{references => domain/dtos/tokens_references}/class_like_reference.go (56%) rename pkg/{references => domain/dtos/tokens_references}/file_reference.go (73%) rename pkg/{references => domain/dtos/tokens_references}/function_reference.go (52%) rename pkg/{tokens => domain/dtos/tokens_references}/tagged_token_reference.go (95%) rename pkg/{tokens => domain/dtos/tokens_references}/tagged_token_reference_interface.go (90%) rename pkg/{tokens => domain/dtos/tokens_references}/token_reference_interface.go (53%) rename pkg/{references => domain/dtos/tokens_references}/variable_reference.go (83%) delete mode 100644 pkg/references/AnnotationReferenceExtractor.php diff --git a/pkg/ast_map/ast_file_reference_cache_interface.go b/pkg/ast_map/ast_file_reference_cache_interface.go index addf586..ed15635 100644 --- a/pkg/ast_map/ast_file_reference_cache_interface.go +++ b/pkg/ast_map/ast_file_reference_cache_interface.go @@ -1,10 +1,10 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) type AstFileReferenceCacheInterface interface { - Get(filepath string) (*references.FileReference, error) - Set(fileReference *references.FileReference) error + Get(filepath string) (*tokens_references.FileReference, error) + Set(fileReference *tokens_references.FileReference) error } diff --git a/pkg/ast_map/ast_file_reference_file_cache.go b/pkg/ast_map/ast_file_reference_file_cache.go index ddf285e..f6aa339 100644 --- a/pkg/ast_map/ast_file_reference_file_cache.go +++ b/pkg/ast_map/ast_file_reference_file_cache.go @@ -2,8 +2,8 @@ package ast_map import ( "encoding/json" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" "os" "path/filepath" ) @@ -11,7 +11,7 @@ import ( type AstFileReferenceFileCache struct { cache map[string]struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference } loaded bool parsedFiles map[string]bool @@ -23,7 +23,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil return &AstFileReferenceFileCache{ cache: make(map[string]struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference }), loaded: false, parsedFiles: make(map[string]bool), @@ -32,7 +32,7 @@ func NewAstFileReferenceFileCache(cacheFile string, cacheVersion string) *AstFil } } -func (c *AstFileReferenceFileCache) Get(filepath string) (*references.FileReference, error) { +func (c *AstFileReferenceFileCache) Get(filepath string) (*tokens_references.FileReference, error) { err := c.Load() if err != nil { return nil, err @@ -53,7 +53,7 @@ func (c *AstFileReferenceFileCache) Get(filepath string) (*references.FileRefere return nil, nil } -func (c *AstFileReferenceFileCache) Set(fileReference *references.FileReference) error { +func (c *AstFileReferenceFileCache) Set(fileReference *tokens_references.FileReference) error { err := c.Load() if err != nil { return err @@ -68,7 +68,7 @@ func (c *AstFileReferenceFileCache) Set(fileReference *references.FileReference) c.cache[normalizedFilepath] = struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference }{hash: hash, reference: fileReference} return nil @@ -89,7 +89,7 @@ func (c *AstFileReferenceFileCache) Load() error { version string payload map[string]struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference } }{} err = json.Unmarshal([]byte(contents), &cache) @@ -100,7 +100,7 @@ func (c *AstFileReferenceFileCache) Load() error { for filepathData, data := range cache.payload { c.cache[filepathData] = struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference }{hash: data.hash, reference: data.reference} } return nil @@ -112,7 +112,7 @@ func (c *AstFileReferenceFileCache) Write() error { } cache := make(map[string]struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference }) for filepathData, data := range c.cache { if _, ok := c.parsedFiles[filepathData]; ok { @@ -124,7 +124,7 @@ func (c *AstFileReferenceFileCache) Write() error { version string payload map[string]struct { hash string - reference *references.FileReference + reference *tokens_references.FileReference } }{ version: c.cacheVersion, diff --git a/pkg/ast_map/ast_file_reference_in_memory_cache.go b/pkg/ast_map/ast_file_reference_in_memory_cache.go index 44f05a7..1bbe931 100644 --- a/pkg/ast_map/ast_file_reference_in_memory_cache.go +++ b/pkg/ast_map/ast_file_reference_in_memory_cache.go @@ -1,21 +1,21 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "path/filepath" ) type AstFileReferenceInMemoryCache struct { - cache map[string]*references.FileReference + cache map[string]*tokens_references.FileReference } func NewAstFileReferenceInMemoryCache() *AstFileReferenceInMemoryCache { return &AstFileReferenceInMemoryCache{ - cache: make(map[string]*references.FileReference), + cache: make(map[string]*tokens_references.FileReference), } } -func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*references.FileReference, error) { +func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*tokens_references.FileReference, error) { path, err := filepath.Abs(pathInput) if err != nil { return nil, err @@ -29,7 +29,7 @@ func (c *AstFileReferenceInMemoryCache) Get(pathInput string) (*references.FileR return v, nil } -func (c *AstFileReferenceInMemoryCache) Set(fileReference *references.FileReference) error { +func (c *AstFileReferenceInMemoryCache) Set(fileReference *tokens_references.FileReference) error { path, err := filepath.Abs(*fileReference.Filepath) if err != nil { return err diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go index 1af80df..e462671 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/ast_map/ast_loader.go @@ -2,9 +2,9 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/references" ) type AstLoader struct { @@ -20,7 +20,7 @@ func NewAstLoader(parser parsers.ParserInterface, eventDispatcher dispatchers.Ev } func (l *AstLoader) CreateAstMap(files []string) (*AstMap, error) { - references := make([]*references.FileReference, 0) + references := make([]*tokens_references.FileReference, 0) err := l.eventDispatcher.DispatchEvent(NewPreCreateAstMapEvent(len(files))) if err != nil { diff --git a/pkg/ast_map/ast_map.go b/pkg/ast_map/ast_map.go index b8ab8d8..71883fa 100644 --- a/pkg/ast_map/ast_map.go +++ b/pkg/ast_map/ast_map.go @@ -2,22 +2,23 @@ package ast_map import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "strings" ) type AstMap struct { - ClassReferences map[string]*references.ClassLikeReference - FileReferences map[string]*references.FileReference - FunctionReferences map[string]*references.FunctionReference + ClassReferences map[string]*tokens_references.ClassLikeReference + FileReferences map[string]*tokens_references.FileReference + FunctionReferences map[string]*tokens_references.FunctionReference } -func NewAstMap(astFileReferences []*references.FileReference) *AstMap { +func NewAstMap(astFileReferences []*tokens_references.FileReference) *AstMap { a := &AstMap{ - ClassReferences: make(map[string]*references.ClassLikeReference), - FileReferences: make(map[string]*references.FileReference), - FunctionReferences: make(map[string]*references.FunctionReference), + ClassReferences: make(map[string]*tokens_references.ClassLikeReference), + FileReferences: make(map[string]*tokens_references.FileReference), + FunctionReferences: make(map[string]*tokens_references.FunctionReference), } for _, astFileReference := range astFileReferences { a.addAstFileReference(astFileReference) @@ -25,8 +26,8 @@ func NewAstMap(astFileReferences []*references.FileReference) *AstMap { return a } -func (a *AstMap) GetClassLikeReferences() []*references.ClassLikeReference { - values := make([]*references.ClassLikeReference, 0) +func (a *AstMap) GetClassLikeReferences() []*tokens_references.ClassLikeReference { + values := make([]*tokens_references.ClassLikeReference, 0) for _, r := range a.ClassReferences { values = append(values, r) @@ -35,8 +36,8 @@ func (a *AstMap) GetClassLikeReferences() []*references.ClassLikeReference { return values } -func (a *AstMap) GetFileReferences() []*references.FileReference { - values := make([]*references.FileReference, 0) +func (a *AstMap) GetFileReferences() []*tokens_references.FileReference { + values := make([]*tokens_references.FileReference, 0) for _, fileReference := range a.FileReferences { values = append(values, fileReference) @@ -45,8 +46,8 @@ func (a *AstMap) GetFileReferences() []*references.FileReference { return values } -func (a *AstMap) GetFunctionReferences() []*references.FunctionReference { - values := make([]*references.FunctionReference, 0) +func (a *AstMap) GetFunctionReferences() []*tokens_references.FunctionReference { + values := make([]*tokens_references.FunctionReference, 0) for _, functionReference := range a.FunctionReferences { values = append(values, functionReference) @@ -55,7 +56,7 @@ func (a *AstMap) GetFunctionReferences() []*references.FunctionReference { return values } -func (a *AstMap) GetClassReferenceForToken(structName *tokens.ClassLikeToken) *references.ClassLikeReference { +func (a *AstMap) GetClassReferenceForToken(structName *tokens.ClassLikeToken) *tokens_references.ClassLikeReference { // TODO: Rework to full package path name := structName.ToString() @@ -82,7 +83,7 @@ func (a *AstMap) GetClassReferenceForToken(structName *tokens.ClassLikeToken) *r return v } -func (a *AstMap) GetFunctionReferenceForToken(functionName *tokens.FunctionToken) *references.FunctionReference { +func (a *AstMap) GetFunctionReferenceForToken(functionName *tokens.FunctionToken) *tokens_references.FunctionReference { v, ok := a.FunctionReferences[functionName.ToString()] if !ok { return nil @@ -91,7 +92,7 @@ func (a *AstMap) GetFunctionReferenceForToken(functionName *tokens.FunctionToken return v } -func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *references.FileReference { +func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *tokens_references.FileReference { v, ok := a.FileReferences[filePath.ToString()] if !ok { return nil @@ -100,12 +101,12 @@ func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *reference return v } -func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstInherit { +func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*ast_map2.AstInherit { structReference := a.GetClassReferenceForToken(structLikeName) if structReference == nil { return nil } - inherits := make([]*AstInherit, 0) + inherits := make([]*ast_map2.AstInherit, 0) for _, dep := range structReference.Inherits { inherits = append(inherits, dep) outArr := a.recursivelyResolveDependencies(dep, nil, nil) @@ -117,25 +118,25 @@ func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstI } type stack struct { - s []*AstInherit + s []*ast_map2.AstInherit } -func (s *stack) Push(v *AstInherit) { +func (s *stack) Push(v *ast_map2.AstInherit) { s.s = append(s.s, v) } -func (s *stack) Pop() *AstInherit { +func (s *stack) Pop() *ast_map2.AstInherit { v := s.s[len(s.s)-1] s.s = s.s[:len(s.s)-1] return v } -func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*AstInherit { +func (a *AstMap) recursivelyResolveDependencies(inheritDependency *ast_map2.AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*ast_map2.AstInherit { if alreadyResolved == nil { alreadyResolved = make(map[string]bool) } if pathStack == nil { - pathStack = &stack{s: make([]*AstInherit, 0)} + pathStack = &stack{s: make([]*ast_map2.AstInherit, 0)} pathStack.Push(inheritDependency) } structName := inheritDependency.ClassLikeName.ToString() @@ -147,7 +148,7 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, a if structReference == nil { return nil } - out := make([]*AstInherit, 0) + out := make([]*ast_map2.AstInherit, 0) for _, inherit := range structReference.Inherits { alreadyResolved[structName] = true path := pathStack.s @@ -163,7 +164,7 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, a return out } -func (a *AstMap) addClassLike(astStructReference references.ClassLikeReference) { +func (a *AstMap) addClassLike(astStructReference tokens_references.ClassLikeReference) { token := astStructReference.GetToken() // If token.ToString() contains :: then panic @@ -179,7 +180,7 @@ func (a *AstMap) addClassLike(astStructReference references.ClassLikeReference) a.ClassReferences[token.ToString()] = &astStructReference } -func (a *AstMap) addAstFileReference(astFileReference *references.FileReference) { +func (a *AstMap) addAstFileReference(astFileReference *tokens_references.FileReference) { a.FileReferences[*astFileReference.Filepath] = astFileReference for _, astStructReference := range astFileReference.ClassLikeReferences { a.addClassLike(*astStructReference) @@ -190,6 +191,6 @@ func (a *AstMap) addAstFileReference(astFileReference *references.FileReference) } } -func (a *AstMap) addFunction(astFunctionReference references.FunctionReference) { +func (a *AstMap) addFunction(astFunctionReference tokens_references.FunctionReference) { a.FunctionReferences[astFunctionReference.GetToken().ToString()] = &astFunctionReference } diff --git a/pkg/collectors_shared/abstract_type_collector.go b/pkg/collectors_shared/abstract_type_collector.go index b85b127..c852f49 100644 --- a/pkg/collectors_shared/abstract_type_collector.go +++ b/pkg/collectors_shared/abstract_type_collector.go @@ -3,9 +3,9 @@ package collectors_shared import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type AbstractTypeCollector struct { @@ -22,8 +22,8 @@ func (c *AbstractTypeCollector) GetType() enums.ClassLikeType { panic("Not implemented") } -func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - v, ok := reference.(*references.ClassLikeReference) +func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + v, ok := reference.(*tokens_references2.ClassLikeReference) if !ok { return false, nil } @@ -36,7 +36,7 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference isClassLike := enums.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() - return (isClassLike || isSameType) && v.GetToken().(*tokens.ClassLikeToken).Match(pattern), nil + return (isClassLike || isSameType) && v.GetToken().(*tokens2.ClassLikeToken).Match(pattern), nil } func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/collectors_shared/bool_collector.go b/pkg/collectors_shared/bool_collector.go index d5daecb..f7d0080 100644 --- a/pkg/collectors_shared/bool_collector.go +++ b/pkg/collectors_shared/bool_collector.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" - "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) type BoolCollector struct { @@ -17,7 +17,7 @@ func NewBoolCollector(collectorResolver CollectorResolverInterface) *BoolCollect } } -func (b *BoolCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { +func (b *BoolCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { configuration, err := b.normalizeConfiguration(config) if err != nil { return false, err diff --git a/pkg/collectors_shared/class_name_regex_collector.go b/pkg/collectors_shared/class_name_regex_collector.go index 8ba4220..4465bcf 100644 --- a/pkg/collectors_shared/class_name_regex_collector.go +++ b/pkg/collectors_shared/class_name_regex_collector.go @@ -2,9 +2,9 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ClassNameRegexCollector struct { @@ -17,8 +17,8 @@ func NewClassNameRegexCollector() *ClassNameRegexCollector { } } -func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.ClassLikeReference); !ok { +func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { return false, nil } @@ -27,7 +27,7 @@ func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, referenc return false, err } - return reference.GetToken().(*tokens.ClassLikeToken).Match(validatedPattern), nil + return reference.GetToken().(*tokens2.ClassLikeToken).Match(validatedPattern), nil } func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/collectors_shared/collector_interface.go b/pkg/collectors_shared/collector_interface.go index 2161f8c..aa634be 100644 --- a/pkg/collectors_shared/collector_interface.go +++ b/pkg/collectors_shared/collector_interface.go @@ -1,10 +1,10 @@ package collectors_shared import ( - "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) // CollectorInterface - A collector is responsible to tell whether an AST node (e.g. a specific class) is part of a layer_contract. type CollectorInterface interface { - Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) + Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) } diff --git a/pkg/collectors_shared/composer_collector.go b/pkg/collectors_shared/composer_collector.go index efdcbbf..6a95c99 100644 --- a/pkg/collectors_shared/composer_collector.go +++ b/pkg/collectors_shared/composer_collector.go @@ -2,8 +2,8 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ComposerCollector struct{} @@ -12,7 +12,7 @@ func NewComposerCollector() *ComposerCollector { return &ComposerCollector{} } -func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { +func (c *ComposerCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { if !utils.MapKeyExists(config, "composerPath") || !utils.MapKeyIsString(config, "composerPath") { return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("ComposerCollector needs the path to the composer.json file_supportive as string.") } diff --git a/pkg/collectors_shared/directory_collector.go b/pkg/collectors_shared/directory_collector.go index 174653e..1376215 100644 --- a/pkg/collectors_shared/directory_collector.go +++ b/pkg/collectors_shared/directory_collector.go @@ -3,8 +3,8 @@ package collectors_shared import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/tokens" "regexp" ) @@ -18,7 +18,7 @@ func NewDirectoryCollector() *DirectoryCollector { } } -func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { +func (c *DirectoryCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { return false, nil diff --git a/pkg/collectors_shared/function_name_collector.go b/pkg/collectors_shared/function_name_collector.go index de1668b..910e417 100644 --- a/pkg/collectors_shared/function_name_collector.go +++ b/pkg/collectors_shared/function_name_collector.go @@ -3,9 +3,9 @@ package collectors_shared import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type FunctionNameCollector struct{} @@ -14,8 +14,8 @@ func NewFunctionNameCollector() *FunctionNameCollector { return &FunctionNameCollector{} } -func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.FunctionReference); !ok { +func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.FunctionReference); !ok { return false, nil } diff --git a/pkg/collectors_shared/glob_collector.go b/pkg/collectors_shared/glob_collector.go index 8b61ca3..4f2545f 100644 --- a/pkg/collectors_shared/glob_collector.go +++ b/pkg/collectors_shared/glob_collector.go @@ -2,8 +2,8 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/tokens" filepath2 "path/filepath" "regexp" ) @@ -20,7 +20,7 @@ func NewGlobCollector(basePath string) *GlobCollector { } } -func (c *GlobCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { +func (c *GlobCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { filepath := reference.GetFilepath() if filepath == nil { diff --git a/pkg/collectors_shared/inheritance_level_collector.go b/pkg/collectors_shared/inheritance_level_collector.go index 0953228..ee5d841 100644 --- a/pkg/collectors_shared/inheritance_level_collector.go +++ b/pkg/collectors_shared/inheritance_level_collector.go @@ -3,9 +3,9 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type InheritanceLevelCollector struct { @@ -24,12 +24,12 @@ func NewInheritanceLevelCollector(astMapExtractor *ast_map.AstMapExtractor) (*In }, nil } -func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.ClassLikeReference); !ok { +func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { return false, nil } - classInherits := c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) + classInherits := c.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) if !utils.MapKeyExists(config, "value") || utils.MapKeyIsInt(config, "value") { return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") diff --git a/pkg/collectors_shared/inherits_collector.go b/pkg/collectors_shared/inherits_collector.go index 6e82550..dd58676 100644 --- a/pkg/collectors_shared/inherits_collector.go +++ b/pkg/collectors_shared/inherits_collector.go @@ -3,9 +3,9 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type InheritsCollector struct { @@ -24,8 +24,8 @@ func NewInheritsCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritsCo }, nil } -func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.ClassLikeReference); !ok { +func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { return false, nil } @@ -34,7 +34,7 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tok return false, err } - for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { + for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) { if inherit.ClassLikeName.Equals(classLikeName) { return true, nil } @@ -43,10 +43,10 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tok return false, nil } -func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { +func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*tokens2.ClassLikeToken, error) { if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") } - return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return tokens2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/collectors_shared/layer_collector.go b/pkg/collectors_shared/layer_collector.go index 9e7c6c3..cda8273 100644 --- a/pkg/collectors_shared/layer_collector.go +++ b/pkg/collectors_shared/layer_collector.go @@ -3,9 +3,9 @@ package collectors_shared import ( "fmt" apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type LayerCollector struct { @@ -19,7 +19,7 @@ func NewLayerCollector(resolver layers.LayerResolverInterface) *LayerCollector { } } -func (c *LayerCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { +func (c *LayerCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { return false, apperrors2.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") diff --git a/pkg/collectors_shared/method_collector.go b/pkg/collectors_shared/method_collector.go index 2e306a2..1afdc44 100644 --- a/pkg/collectors_shared/method_collector.go +++ b/pkg/collectors_shared/method_collector.go @@ -3,10 +3,9 @@ package collectors_shared import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type MethodCollector struct { @@ -21,8 +20,8 @@ func NewMethodCollector(astParser *parsers.NikicPhpParser) *MethodCollector { } } -func (c *MethodCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.ClassLikeReference); !ok { +func (c *MethodCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { return false, nil } @@ -31,7 +30,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference token return false, err } - classLike := c.astParser.GetNodeForClassLikeReference(reference.(*references.ClassLikeReference)) + classLike := c.astParser.GetNodeForClassLikeReference(reference.(*tokens_references2.ClassLikeReference)) if classLike == nil { return false, nil } diff --git a/pkg/collectors_shared/superglobal_collector.go b/pkg/collectors_shared/superglobal_collector.go index 54af05e..53267c1 100644 --- a/pkg/collectors_shared/superglobal_collector.go +++ b/pkg/collectors_shared/superglobal_collector.go @@ -2,9 +2,8 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type SuperglobalCollector struct{} @@ -13,8 +12,8 @@ func NewSuperglobalCollector() *SuperglobalCollector { return &SuperglobalCollector{} } -func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.VariableReference); !ok { +func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.VariableReference); !ok { return false, nil } diff --git a/pkg/collectors_shared/uses_collector.go b/pkg/collectors_shared/uses_collector.go index 3b3a37c..6ebd060 100644 --- a/pkg/collectors_shared/uses_collector.go +++ b/pkg/collectors_shared/uses_collector.go @@ -3,10 +3,10 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/references" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type UsesCollector struct { @@ -25,8 +25,8 @@ func NewUsesCollector(astMapExtractor *ast_map.AstMapExtractor) (*UsesCollector, }, nil } -func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*references.ClassLikeReference); !ok { +func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { return false, nil } @@ -35,7 +35,7 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens. return false, err } - for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { + for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) { if enums.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { return true, nil } @@ -44,10 +44,10 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens. return false, nil } -func (u *UsesCollector) getTraitName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { +func (u *UsesCollector) getTraitName(config map[string]interface{}) (*tokens2.ClassLikeToken, error) { if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") } - return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return tokens2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/dependencies/dependency.go b/pkg/dependencies/dependency.go index 53a7be9..4d989ac 100644 --- a/pkg/dependencies/dependency.go +++ b/pkg/dependencies/dependency.go @@ -1,14 +1,17 @@ package dependencies -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) type Dependency struct { depender tokens.TokenInterface dependent tokens.TokenInterface - context *DependencyContext + context *dependencies2.DependencyContext } -func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *DependencyContext) *Dependency { +func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *dependencies2.DependencyContext) *Dependency { if dependent.ToString() == "" { panic("1") } @@ -33,6 +36,6 @@ func (d *Dependency) GetDependent() tokens.TokenInterface { return d.dependent } -func (d *Dependency) GetContext() *DependencyContext { +func (d *Dependency) GetContext() *dependencies2.DependencyContext { return d.context } diff --git a/pkg/dependencies/dependency_interface.go b/pkg/dependencies/dependency_interface.go index 11319fd..7237132 100644 --- a/pkg/dependencies/dependency_interface.go +++ b/pkg/dependencies/dependency_interface.go @@ -1,6 +1,9 @@ package dependencies -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) // DependencyInterface - Represents a dependency_contract between 2 tokens (depender and dependent). type DependencyInterface interface { @@ -8,7 +11,7 @@ type DependencyInterface interface { GetDependent() tokens.TokenInterface - GetContext() *DependencyContext + GetContext() *dependencies2.DependencyContext Serialize() []map[string]interface{} } diff --git a/pkg/dependencies/dependency_layers_analyser.go b/pkg/dependencies/dependency_layers_analyser.go index 1bd78be..0617f32 100644 --- a/pkg/dependencies/dependency_layers_analyser.go +++ b/pkg/dependencies/dependency_layers_analyser.go @@ -4,9 +4,10 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -49,9 +50,9 @@ func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) - if v, ok55 := dependerRef.(*references.FunctionReference); ok55 { + if v, ok55 := dependerRef.(*tokens_references.FunctionReference); ok55 { t := v.GetToken() - if tt, ok66 := t.(*tokens.FunctionToken); ok66 { + if tt, ok66 := t.(*tokens2.FunctionToken); ok66 { if tt.FunctionName == "ParseFile" { fmt.Println() } diff --git a/pkg/dependencies/inherit_dependency.go b/pkg/dependencies/inherit_dependency.go index f520f9e..669b17a 100644 --- a/pkg/dependencies/inherit_dependency.go +++ b/pkg/dependencies/inherit_dependency.go @@ -1,8 +1,9 @@ package dependencies import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type InheritDependency struct { @@ -40,6 +41,6 @@ func (i *InheritDependency) GetDependent() tokens.TokenInterface { return i.dependent } -func (i *InheritDependency) GetContext() *DependencyContext { +func (i *InheritDependency) GetContext() *dependencies2.DependencyContext { return i.originalDependency.GetContext() } diff --git a/pkg/dependencies/uncovered_dependent_handler.go b/pkg/dependencies/uncovered_dependent_handler.go index 5672bb0..95b8ddd 100644 --- a/pkg/dependencies/uncovered_dependent_handler.go +++ b/pkg/dependencies/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ package dependencies import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type UncoveredDependentHandler struct { diff --git a/pkg/ast_map/ast_inherit.go b/pkg/domain/dtos/ast_map/ast_inherit.go similarity index 83% rename from pkg/ast_map/ast_inherit.go rename to pkg/domain/dtos/ast_map/ast_inherit.go index f0a47f5..ffc5c2f 100644 --- a/pkg/ast_map/ast_inherit.go +++ b/pkg/domain/dtos/ast_map/ast_inherit.go @@ -2,20 +2,20 @@ package ast_map import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/violations" "strings" ) type AstInherit struct { ClassLikeName *tokens.ClassLikeToken - FileOccurrence *violations.FileOccurrence + FileOccurrence *dtos.FileOccurrence Type enums.AstInheritType path []*AstInherit } -func NewAstInherit(classLikeName *tokens.ClassLikeToken, fileOccurrence *violations.FileOccurrence, astInheritType enums.AstInheritType, path []*AstInherit) *AstInherit { +func NewAstInherit(classLikeName *tokens.ClassLikeToken, fileOccurrence *dtos.FileOccurrence, astInheritType enums.AstInheritType, path []*AstInherit) *AstInherit { return &AstInherit{ ClassLikeName: classLikeName, FileOccurrence: fileOccurrence, diff --git a/pkg/dependencies/dependency_context.go b/pkg/domain/dtos/dependencies/dependency_context.go similarity index 63% rename from pkg/dependencies/dependency_context.go rename to pkg/domain/dtos/dependencies/dependency_context.go index 1595419..07fbca2 100644 --- a/pkg/dependencies/dependency_context.go +++ b/pkg/domain/dtos/dependencies/dependency_context.go @@ -1,16 +1,16 @@ package dependencies import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) // DependencyContext - Context of the dependency_contract. Any additional info about where the dependency_contract occurred. type DependencyContext struct { - FileOccurrence *violations.FileOccurrence + FileOccurrence *dtos.FileOccurrence DependencyType enums.DependencyType } -func NewDependencyContext(fileOccurrence *violations.FileOccurrence, dependencyType enums.DependencyType) *DependencyContext { +func NewDependencyContext(fileOccurrence *dtos.FileOccurrence, dependencyType enums.DependencyType) *DependencyContext { return &DependencyContext{FileOccurrence: fileOccurrence, DependencyType: dependencyType} } diff --git a/pkg/violations/file_occurrence.go b/pkg/domain/dtos/file_occurrence.go similarity index 93% rename from pkg/violations/file_occurrence.go rename to pkg/domain/dtos/file_occurrence.go index 36248c2..6b7ede9 100644 --- a/pkg/violations/file_occurrence.go +++ b/pkg/domain/dtos/file_occurrence.go @@ -1,4 +1,4 @@ -package violations +package dtos // FileOccurrence - Where in the file_supportive has the dependency_contract occurred. type FileOccurrence struct { diff --git a/pkg/tokens/class_like_token.go b/pkg/domain/dtos/tokens/class_like_token.go similarity index 100% rename from pkg/tokens/class_like_token.go rename to pkg/domain/dtos/tokens/class_like_token.go diff --git a/pkg/tokens/dependency_token.go b/pkg/domain/dtos/tokens/dependency_token.go similarity index 82% rename from pkg/tokens/dependency_token.go rename to pkg/domain/dtos/tokens/dependency_token.go index 93b4084..963e8a5 100644 --- a/pkg/tokens/dependency_token.go +++ b/pkg/domain/dtos/tokens/dependency_token.go @@ -1,7 +1,7 @@ package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" ) type DependencyToken struct { diff --git a/pkg/tokens/file_token.go b/pkg/domain/dtos/tokens/file_token.go similarity index 100% rename from pkg/tokens/file_token.go rename to pkg/domain/dtos/tokens/file_token.go diff --git a/pkg/tokens/function_token.go b/pkg/domain/dtos/tokens/function_token.go similarity index 100% rename from pkg/tokens/function_token.go rename to pkg/domain/dtos/tokens/function_token.go diff --git a/pkg/tokens/token.go b/pkg/domain/dtos/tokens/token.go similarity index 100% rename from pkg/tokens/token.go rename to pkg/domain/dtos/tokens/token.go diff --git a/pkg/references/class_like_reference.go b/pkg/domain/dtos/tokens_references/class_like_reference.go similarity index 56% rename from pkg/references/class_like_reference.go rename to pkg/domain/dtos/tokens_references/class_like_reference.go index 8a77586..4b2c4e8 100644 --- a/pkg/references/class_like_reference.go +++ b/pkg/domain/dtos/tokens_references/class_like_reference.go @@ -1,22 +1,22 @@ -package references +package tokens_references import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ClassLikeReference struct { Type *enums.ClassLikeType - classLikeName *tokens.ClassLikeToken + classLikeName *tokens2.ClassLikeToken Inherits []*ast_map.AstInherit - Dependencies []*tokens.DependencyToken + Dependencies []*tokens2.DependencyToken fileReference *FileReference - *tokens.TaggedTokenReference + *TaggedTokenReference } -func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { +func NewClassLikeReference(classLikeName *tokens2.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens2.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { if classLikeType == nil { classLikeTypeTmp := enums.TypeClasslike classLikeType = &classLikeTypeTmp @@ -28,7 +28,7 @@ func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType * Inherits: inherits, Dependencies: dependencies, fileReference: fileReference, - TaggedTokenReference: tokens.NewTaggedTokenReference(tags), + TaggedTokenReference: NewTaggedTokenReference(tags), } } @@ -40,10 +40,10 @@ func (c *ClassLikeReference) GetFilepath() *string { return c.fileReference.Filepath } -func (c *ClassLikeReference) GetToken() tokens.TokenInterface { +func (c *ClassLikeReference) GetToken() tokens2.TokenInterface { return c.classLikeName } -func (c *ClassLikeReference) GetDependencies() []*tokens.DependencyToken { +func (c *ClassLikeReference) GetDependencies() []*tokens2.DependencyToken { return c.Dependencies } diff --git a/pkg/references/file_reference.go b/pkg/domain/dtos/tokens_references/file_reference.go similarity index 73% rename from pkg/references/file_reference.go rename to pkg/domain/dtos/tokens_references/file_reference.go index 8e5d21a..8880351 100644 --- a/pkg/references/file_reference.go +++ b/pkg/domain/dtos/tokens_references/file_reference.go @@ -1,15 +1,17 @@ -package references +package tokens_references -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) type FileReference struct { Filepath *string ClassLikeReferences []*ClassLikeReference FunctionReferences []*FunctionReference - Dependencies []*tokens.DependencyToken + Dependencies []*tokens2.DependencyToken } -func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens.DependencyToken) *FileReference { +func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens2.DependencyToken) *FileReference { structLikeReferencesMapped := make([]*ClassLikeReference, 0) functionReferencesMapped := make([]*FunctionReference, 0) @@ -35,10 +37,10 @@ func (r *FileReference) GetFilepath() *string { return r.Filepath } -func (r *FileReference) GetToken() tokens.TokenInterface { - return tokens.NewFileToken(r.Filepath) +func (r *FileReference) GetToken() tokens2.TokenInterface { + return tokens2.NewFileToken(r.Filepath) } -func (r *FileReference) GetDependencies() []*tokens.DependencyToken { +func (r *FileReference) GetDependencies() []*tokens2.DependencyToken { return r.Dependencies } diff --git a/pkg/references/function_reference.go b/pkg/domain/dtos/tokens_references/function_reference.go similarity index 52% rename from pkg/references/function_reference.go rename to pkg/domain/dtos/tokens_references/function_reference.go index 33fac30..83feb9f 100644 --- a/pkg/references/function_reference.go +++ b/pkg/domain/dtos/tokens_references/function_reference.go @@ -1,15 +1,17 @@ -package references +package tokens_references -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) type FunctionReference struct { - *tokens.TaggedTokenReference - functionName *tokens.FunctionToken - Dependencies []*tokens.DependencyToken + *TaggedTokenReference + functionName *tokens2.FunctionToken + Dependencies []*tokens2.DependencyToken fileReference *FileReference } -func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { +func NewFunctionReference(functionName *tokens2.FunctionToken, dependencies []*tokens2.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { for _, dependency := range dependencies { if dependency.Token.ToString() == "" { panic("1") @@ -19,7 +21,7 @@ func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*to return &FunctionReference{ functionName: functionName, Dependencies: dependencies, - TaggedTokenReference: tokens.NewTaggedTokenReference(tags), + TaggedTokenReference: NewTaggedTokenReference(tags), fileReference: fileReference, } } @@ -32,10 +34,10 @@ func (r *FunctionReference) GetFilepath() *string { return r.fileReference.Filepath } -func (r *FunctionReference) GetToken() tokens.TokenInterface { +func (r *FunctionReference) GetToken() tokens2.TokenInterface { return r.functionName } -func (r *FunctionReference) GetDependencies() []*tokens.DependencyToken { +func (r *FunctionReference) GetDependencies() []*tokens2.DependencyToken { return r.Dependencies } diff --git a/pkg/tokens/tagged_token_reference.go b/pkg/domain/dtos/tokens_references/tagged_token_reference.go similarity index 95% rename from pkg/tokens/tagged_token_reference.go rename to pkg/domain/dtos/tokens_references/tagged_token_reference.go index 11cefbe..ba631d3 100644 --- a/pkg/tokens/tagged_token_reference.go +++ b/pkg/domain/dtos/tokens_references/tagged_token_reference.go @@ -1,4 +1,4 @@ -package tokens +package tokens_references // TaggedTokenReference - Helper trait for implementing TaggedTokenReferenceInterface. type TaggedTokenReference struct { diff --git a/pkg/tokens/tagged_token_reference_interface.go b/pkg/domain/dtos/tokens_references/tagged_token_reference_interface.go similarity index 90% rename from pkg/tokens/tagged_token_reference_interface.go rename to pkg/domain/dtos/tokens_references/tagged_token_reference_interface.go index 845b5b6..9331dd8 100644 --- a/pkg/tokens/tagged_token_reference_interface.go +++ b/pkg/domain/dtos/tokens_references/tagged_token_reference_interface.go @@ -1,4 +1,4 @@ -package tokens +package tokens_references // TaggedTokenReferenceInterface - Represents the AST-TokenInterface, its location, and associated tags. type TaggedTokenReferenceInterface interface { diff --git a/pkg/tokens/token_reference_interface.go b/pkg/domain/dtos/tokens_references/token_reference_interface.go similarity index 53% rename from pkg/tokens/token_reference_interface.go rename to pkg/domain/dtos/tokens_references/token_reference_interface.go index a2f38d5..a229182 100644 --- a/pkg/tokens/token_reference_interface.go +++ b/pkg/domain/dtos/tokens_references/token_reference_interface.go @@ -1,7 +1,11 @@ -package tokens +package tokens_references + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) // TokenReferenceInterface - Represents the AST-TokenInterface and its location. type TokenReferenceInterface interface { GetFilepath() *string - GetToken() TokenInterface + GetToken() tokens.TokenInterface } diff --git a/pkg/references/variable_reference.go b/pkg/domain/dtos/tokens_references/variable_reference.go similarity index 83% rename from pkg/references/variable_reference.go rename to pkg/domain/dtos/tokens_references/variable_reference.go index ea3381a..d3d0cb3 100644 --- a/pkg/references/variable_reference.go +++ b/pkg/domain/dtos/tokens_references/variable_reference.go @@ -1,8 +1,8 @@ -package references +package tokens_references import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type VariableReference struct { diff --git a/pkg/emitters/class_dependency_emitter.go b/pkg/emitters/class_dependency_emitter.go index d9fdf1f..643c450 100644 --- a/pkg/emitters/class_dependency_emitter.go +++ b/pkg/emitters/class_dependency_emitter.go @@ -3,8 +3,9 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ClassDependencyEmitter struct{} @@ -34,7 +35,7 @@ func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depend } for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies2.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) } } } diff --git a/pkg/emitters/function_call_dependency_emitter.go b/pkg/emitters/function_call_dependency_emitter.go index 5f43118..699e4a8 100644 --- a/pkg/emitters/function_call_dependency_emitter.go +++ b/pkg/emitters/function_call_dependency_emitter.go @@ -3,6 +3,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -45,7 +46,7 @@ func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(referenc } token := dependencyToken.Token dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), token, dependencyToken.Context)) - functionToken := token.(*tokens.FunctionToken) + functionToken := token.(*tokens2.FunctionToken) if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } diff --git a/pkg/emitters/uses_dependency_emitter.go b/pkg/emitters/uses_dependency_emitter.go index a981a90..142db05 100644 --- a/pkg/emitters/uses_dependency_emitter.go +++ b/pkg/emitters/uses_dependency_emitter.go @@ -4,8 +4,9 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" "strings" ) @@ -20,7 +21,7 @@ func (u *UsesDependencyEmitter) GetName() string { } func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { - references := make([]tokens.TaggedTokenReferenceInterface, 0) + references := make([]tokens2.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) } diff --git a/pkg/events/process_event.go b/pkg/events/process_event.go index 4d1ebb3..2086890 100644 --- a/pkg/events/process_event.go +++ b/pkg/events/process_event.go @@ -2,25 +2,25 @@ package events import ( "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) // ProcessEvent - Event that is triggered on every found dependency_contract. Used to apply rules on the found dependencies. type ProcessEvent struct { Dependency dependencies.DependencyInterface - DependerReference tokens.TokenReferenceInterface + DependerReference tokens_references.TokenReferenceInterface DependerLayer string - DependentReference tokens.TokenReferenceInterface + DependentReference tokens_references.TokenReferenceInterface DependentLayers map[string]bool result *rules.AnalysisResult } func NewProcessEvent( dependency dependencies.DependencyInterface, - dependerReference tokens.TokenReferenceInterface, + dependerReference tokens_references.TokenReferenceInterface, dependerLayer string, - dependentReference tokens.TokenReferenceInterface, + dependentReference tokens_references.TokenReferenceInterface, dependentLayers map[string]bool, result *rules.AnalysisResult, ) *ProcessEvent { diff --git a/pkg/flatteners/inheritance_flattener.go b/pkg/flatteners/inheritance_flattener.go index 36ae4ed..85763ff 100644 --- a/pkg/flatteners/inheritance_flattener.go +++ b/pkg/flatteners/inheritance_flattener.go @@ -3,7 +3,7 @@ package flatteners import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dependencies" - "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type InheritanceFlattener struct{} diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index fcb208f..39e38b2 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/violations" "strings" ) @@ -134,7 +134,7 @@ func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, out } } -func (f *ConsoleOutputFormatter) printFileOccurrence(output results.OutputInterface, fileOccurrence *violations.FileOccurrence) { +func (f *ConsoleOutputFormatter) printFileOccurrence(output results.OutputInterface, fileOccurrence *dtos.FileOccurrence) { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } diff --git a/pkg/layers/layer_resolver.go b/pkg/layers/layer_resolver.go index 6e76e59..76c12da 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -4,7 +4,7 @@ import ( "errors" "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" - "github.com/KoNekoD/go-deptrac/pkg/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/violations" "reflect" "sync" @@ -31,7 +31,7 @@ func NewLayerResolver(collectorResolver collectors_shared.CollectorResolverInter } // GetLayersForReference retrieves layers for a given reference -func (r *LayerResolver) GetLayersForReference(reference tokens.TokenReferenceInterface) (map[string]bool, error) { +func (r *LayerResolver) GetLayersForReference(reference tokens_references.TokenReferenceInterface) (map[string]bool, error) { r.mu.Lock() defer r.mu.Unlock() @@ -76,7 +76,7 @@ func (r *LayerResolver) GetLayersForReference(reference tokens.TokenReferenceInt } // IsReferenceInLayer checks if a reference is in a given layer_contract -func (r *LayerResolver) IsReferenceInLayer(layer string, reference tokens.TokenReferenceInterface) (bool, error) { +func (r *LayerResolver) IsReferenceInLayer(layer string, reference tokens_references.TokenReferenceInterface) (bool, error) { r.mu.Lock() defer r.mu.Unlock() diff --git a/pkg/layers/layer_resolver_interface.go b/pkg/layers/layer_resolver_interface.go index cc2e9af..74d0cc4 100644 --- a/pkg/layers/layer_resolver_interface.go +++ b/pkg/layers/layer_resolver_interface.go @@ -1,12 +1,14 @@ package layers -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" +) type LayerResolverInterface interface { // GetLayersForReference - Returns a layer_contract name and whether the dependency_contract is public(true) or private(false) - GetLayersForReference(reference tokens.TokenReferenceInterface) (map[string]bool, error) + GetLayersForReference(reference tokens_references.TokenReferenceInterface) (map[string]bool, error) - IsReferenceInLayer(layer string, reference tokens.TokenReferenceInterface) (bool, error) + IsReferenceInLayer(layer string, reference tokens_references.TokenReferenceInterface) (bool, error) Has(layer string) (bool, error) } diff --git a/pkg/parsers/nikic_php_parser.go b/pkg/parsers/nikic_php_parser.go index bd743f9..f144202 100644 --- a/pkg/parsers/nikic_php_parser.go +++ b/pkg/parsers/nikic_php_parser.go @@ -2,6 +2,7 @@ package parsers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/types" @@ -19,7 +20,7 @@ type parsedFilesBag struct { parsedFiles map[string]*parsedFile } -func (p *parsedFilesBag) Add(fileReference *references.FileReference, rootNode *ast.File) { +func (p *parsedFilesBag) Add(fileReference *tokens_references.FileReference, rootNode *ast.File) { filepath := fileReference.GetFilepath() file := &parsedFile{fileReference: fileReference, rootNode: rootNode} p.parsedFiles[*filepath] = file @@ -30,7 +31,7 @@ func (p *parsedFilesBag) Get(filepath string) *parsedFile { } type parsedFile struct { - fileReference *references.FileReference + fileReference *tokens_references.FileReference rootNode *ast.File debt []interface{} } @@ -63,7 +64,7 @@ func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolve } } -func (p *NikicPhpParser) ParseFile(file string) (*references.FileReference, error) { +func (p *NikicPhpParser) ParseFile(file string) (*tokens_references.FileReference, error) { v, err := p.cache.Get(file) if err != nil { return nil, err @@ -93,7 +94,7 @@ func (p *NikicPhpParser) ParseFile(file string) (*references.FileReference, erro return fileReference, nil } -func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *references.ClassLikeReference) *ast.Ident { +func (p *NikicPhpParser) GetNodeForClassLikeReference(classReference *tokens_references.ClassLikeReference) *ast.Ident { classLikeName := classReference.GetToken().ToString() if v, ok := classAstMap[classLikeName]; ok { return v diff --git a/pkg/parsers/parser_interface.go b/pkg/parsers/parser_interface.go index 95d9c0f..36afdc8 100644 --- a/pkg/parsers/parser_interface.go +++ b/pkg/parsers/parser_interface.go @@ -1,7 +1,9 @@ package parsers -import "github.com/KoNekoD/go-deptrac/pkg/references" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" +) type ParserInterface interface { - ParseFile(file string) (*references.FileReference, error) + ParseFile(file string) (*tokens_references.FileReference, error) } diff --git a/pkg/references/AnnotationReferenceExtractor.php b/pkg/references/AnnotationReferenceExtractor.php deleted file mode 100644 index 010386f..0000000 --- a/pkg/references/AnnotationReferenceExtractor.php +++ /dev/null @@ -1,66 +0,0 @@ -lexer = new Lexer(); - $this->docParser = new PhpDocParser(new TypeParser(), new ConstExprParser()); - } - public function processNode(Node $node, ReferenceBuilder $referenceBuilder, TypeScope $typeScope) : void - { - if (!$node instanceof Property && !$node instanceof Variable && !$node instanceof ClassMethod) { - return; - } - $docComment = $node->getDocComment(); - if (!$docComment instanceof Doc) { - return; - } - $tokens = new TokenIterator($this->lexer->tokenize($docComment->getText())); - $docNode = $this->docParser->parse($tokens); - $templateTypes = \array_merge(\array_map(static fn(TemplateTagValueNode $node): string => $node->name, $docNode->getTemplateTagValues()), $referenceBuilder->getTokenTemplates()); - foreach ($docNode->getVarTagValues() as $tag) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $typeScope, $templateTypes); - foreach ($types as $type) { - $referenceBuilder->variable($type, $docComment->getStartLine()); - } - } - foreach ($docNode->getParamTagValues() as $tag) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $typeScope, $templateTypes); - foreach ($types as $type) { - $referenceBuilder->parameter($type, $docComment->getStartLine()); - } - } - foreach ($docNode->getReturnTagValues() as $tag) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $typeScope, $templateTypes); - foreach ($types as $type) { - $referenceBuilder->returnType($type, $docComment->getStartLine()); - } - } - foreach ($docNode->getThrowsTagValues() as $tag) { - $types = $this->typeResolver->resolvePHPStanDocParserType($tag->type, $typeScope, $templateTypes); - foreach ($types as $type) { - $referenceBuilder->throwStatement($type, $docComment->getStartLine()); - } - } - } -} diff --git a/pkg/references/class_like_reference_builder.go b/pkg/references/class_like_reference_builder.go index 4982258..366f077 100644 --- a/pkg/references/class_like_reference_builder.go +++ b/pkg/references/class_like_reference_builder.go @@ -1,10 +1,11 @@ package references import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) type ClassLikeReferenceBuilder struct { @@ -48,21 +49,21 @@ func CreateClassLikeReferenceBuilderInterface(filepath string, classLikeName str } // Build - Internal -func (b *ClassLikeReferenceBuilder) Build() *ClassLikeReference { - return NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) +func (b *ClassLikeReferenceBuilder) Build() *references2.ClassLikeReference { + return references2.NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) } func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), violations.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) return b } diff --git a/pkg/references/file_reference_builder.go b/pkg/references/file_reference_builder.go index 90ba7da..4c59fb0 100644 --- a/pkg/references/file_reference_builder.go +++ b/pkg/references/file_reference_builder.go @@ -1,8 +1,9 @@ package references import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type FileReferenceBuilder struct { @@ -50,16 +51,16 @@ func (b *FileReferenceBuilder) NewFunction(functionName string, templateTypes [] return functionReference } -func (b *FileReferenceBuilder) Build() *FileReference { - classReferences := make([]*ClassLikeReference, 0) +func (b *FileReferenceBuilder) Build() *tokens_references.FileReference { + classReferences := make([]*tokens_references.ClassLikeReference, 0) for _, classReference := range b.classReferences { classReferences = append(classReferences, classReference.Build()) } - functionReferences := make([]*FunctionReference, 0) + functionReferences := make([]*tokens_references.FunctionReference, 0) for _, functionReference := range b.functionReferences { functionReferences = append(functionReferences, functionReference.Build()) } - return NewFileReference(&b.Filepath, classReferences, functionReferences, b.Dependencies) + return tokens_references.NewFileReference(&b.Filepath, classReferences, functionReferences, b.Dependencies) } diff --git a/pkg/references/function_reference_builder.go b/pkg/references/function_reference_builder.go index e0414e3..0447723 100644 --- a/pkg/references/function_reference_builder.go +++ b/pkg/references/function_reference_builder.go @@ -1,6 +1,9 @@ package references -import "github.com/KoNekoD/go-deptrac/pkg/tokens" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" +) type FunctionReferenceBuilder struct { *ReferenceBuilder @@ -21,6 +24,6 @@ func CreateFunctionReferenceBuilder(filepath string, functionName string, functi } // Build - Internal -func (b *FunctionReferenceBuilder) Build() *FunctionReference { - return NewFunctionReference(tokens.NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) +func (b *FunctionReferenceBuilder) Build() *references2.FunctionReference { + return references2.NewFunctionReference(tokens.NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) } diff --git a/pkg/references/reference_builder.go b/pkg/references/reference_builder.go index 1603e55..f86d4d8 100644 --- a/pkg/references/reference_builder.go +++ b/pkg/references/reference_builder.go @@ -1,17 +1,18 @@ package references import ( - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) type ReferenceBuilder struct { Dependencies []*tokens.DependencyToken tokenTemplates []string Filepath string - ref *FileReference + ref *references2.FileReference } type ReferenceBuilderInterface interface { @@ -50,7 +51,7 @@ func (r *ReferenceBuilder) GetTokenTemplates() []string { } func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType enums2.DependencyType) *dependencies.DependencyContext { - return dependencies.NewDependencyContext(violations.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) + return dependencies.NewDependencyContext(dtos.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) } // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. diff --git a/pkg/subscribers/depends_on_internal_token.go b/pkg/subscribers/depends_on_internal_token.go index e7e0bde..86fb779 100644 --- a/pkg/subscribers/depends_on_internal_token.go +++ b/pkg/subscribers/depends_on_internal_token.go @@ -3,8 +3,8 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/events" - "github.com/KoNekoD/go-deptrac/pkg/references" ) type DependsOnInternalToken struct { @@ -22,7 +22,7 @@ func (d *DependsOnInternalToken) InvokeEventSubscriber(rawEvent interface{}, sto ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { if event.DependerLayer != dependentLayer { - if ref, ok := event.DependentReference.(*references.ClassLikeReference); ok { + if ref, ok := event.DependentReference.(*tokens_references.ClassLikeReference); ok { isInternal := ref.HasTag("@deptrac-internal") if !isInternal && nil != d.internalTag { isInternal = ref.HasTag(*d.internalTag) diff --git a/pkg/tokens/layer_for_token_analyser.go b/pkg/tokens/layer_for_token_analyser.go index b8ae59a..a071767 100644 --- a/pkg/tokens/layer_for_token_analyser.go +++ b/pkg/tokens/layer_for_token_analyser.go @@ -2,6 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/pkg/errors" @@ -46,7 +47,7 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType en } func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map.AstMap) (map[string][]string, error) { - references := referencesAny.([]TokenReferenceInterface) + references := referencesAny.([]tokens2.TokenReferenceInterface) if len(references) == 0 { return make(map[string][]string), nil } diff --git a/pkg/tokens/token_reference_with_dependencies_interface.go b/pkg/tokens/token_reference_with_dependencies_interface.go index 5834178..8243bd8 100644 --- a/pkg/tokens/token_reference_with_dependencies_interface.go +++ b/pkg/tokens/token_reference_with_dependencies_interface.go @@ -1,6 +1,11 @@ package tokens +import ( + tokens3 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" +) + type TokenReferenceWithDependenciesInterface interface { - TokenReferenceInterface - GetDependencies() []*DependencyToken + tokens2.TokenReferenceInterface + GetDependencies() []*tokens3.DependencyToken } diff --git a/pkg/tokens/token_resolver.go b/pkg/tokens/token_resolver.go index e15214e..a835c5a 100644 --- a/pkg/tokens/token_resolver.go +++ b/pkg/tokens/token_resolver.go @@ -2,8 +2,9 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + tokens3 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/references" ) type TokenResolver struct{} @@ -12,15 +13,15 @@ func NewTokenResolver() *TokenResolver { return &TokenResolver{} } -func (r *TokenResolver) Resolve(token TokenInterface, astMap *ast_map.AstMap) TokenReferenceInterface { +func (r *TokenResolver) Resolve(token tokens3.TokenInterface, astMap *ast_map.AstMap) tokens_references2.TokenReferenceInterface { switch v := token.(type) { - case *ClassLikeToken: + case *tokens3.ClassLikeToken: return astMap.GetClassReferenceForToken(v) - case *FunctionToken: + case *tokens3.FunctionToken: return astMap.GetFunctionReferenceForToken(v) case *enums.SuperGlobalToken: - return references.NewVariableReference(v) - case *FileToken: + return tokens_references2.NewVariableReference(v) + case *tokens3.FileToken: return astMap.GetFileReferenceForToken(v) default: panic("Unrecognized TokenInterface") From c48d23bf11ea6ab756b908427f65256d01a87391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 00:22:18 +0300 Subject: [PATCH 14/40] refactor: structure --- pkg/app/analyse_runner.go | 6 ++--- pkg/app/changed_files_runner.go | 6 ++--- pkg/app/container_builder.go | 15 +++++------ pkg/app/services.go | 15 +++++------ pkg/ast_map/ast_loader.go | 5 ++-- pkg/ast_map/ast_map_extractor.go | 5 ++-- .../inheritance_level_collector.go | 3 ++- pkg/collectors_shared/inherits_collector.go | 3 ++- pkg/collectors_shared/uses_collector.go | 3 ++- pkg/{dependencies => }/dependency_resolver.go | 9 ++++--- pkg/dispatchers/event_helper.go | 6 ++--- pkg/{ => domain/dtos}/ast_map/ast_map.go | 17 ++++++------ .../dtos}/dependencies/dependency.go | 7 +++-- .../dependencies/dependency_interface.go | 3 +-- .../dtos}/dependencies/dependency_list.go | 0 .../dtos}/dependencies/inherit_dependency.go | 3 +-- .../{apperrors => dtos/violations}/error.go | 2 +- .../dtos/violations}/skipped_violation.go | 6 +++-- .../dtos/violations}/uncovered.go | 6 +++-- .../dtos/violations}/violation.go | 9 +++---- .../violation_creating_interface.go | 0 .../dtos/violations}/warning.go | 2 +- pkg/emitters/class_dependency_emitter.go | 9 +++---- .../class_superglobal_dependency_emitter.go | 8 +++--- pkg/emitters/dependency_emitter_interface.go | 4 +-- pkg/emitters/file_dependency_emitter.go | 8 +++--- .../function_call_dependency_emitter.go | 12 ++++----- pkg/emitters/function_dependency_emitter.go | 8 +++--- ...function_superglobal_dependency_emitter.go | 8 +++--- pkg/emitters/uses_dependency_emitter.go | 8 +++--- pkg/events/process_event.go | 2 +- pkg/flatteners/inheritance_flattener.go | 8 +++--- .../codeclimate_output_formatter.go | 19 ++++++------- pkg/formatters/console_output_formatter.go | 11 ++++---- .../github_actions_output_formatter.go | 11 ++++---- pkg/formatters/graph_viz_output_formatter.go | 5 ++-- pkg/formatters/json_output_formatter.go | 20 +++++++------- pkg/formatters/junit_output_formatter.go | 9 ++++--- pkg/formatters/table_output_formatter.go | 15 ++++++----- pkg/formatters/xml_output_formatter.go | 6 ++--- pkg/results/output_result.go | 27 +++++++++---------- pkg/rules/allowed.go | 4 ++- pkg/rules/analysis_result.go | 25 +++++++++-------- pkg/rules/rule_interface.go | 4 ++- pkg/rules/ruleset_usage_analyser.go | 6 ++--- .../allow_dependency_handler.go | 2 +- .../dependency_layers_analyser.go | 12 +++++---- .../depends_on_disallowed_layer.go | 4 +-- .../layer_dependencies_analyser.go | 17 ++++++------ .../uncovered_dependent_handler.go | 6 ++--- .../unmatched_skipped_violations.go | 6 ++--- pkg/tokens/layer_for_token_analyser.go | 3 ++- pkg/tokens/token_resolver.go | 2 +- 53 files changed, 217 insertions(+), 203 deletions(-) rename pkg/{dependencies => }/dependency_resolver.go (89%) rename pkg/{ => domain/dtos}/ast_map/ast_map.go (91%) rename pkg/{ => domain/dtos}/dependencies/dependency.go (73%) rename pkg/{ => domain/dtos}/dependencies/dependency_interface.go (73%) rename pkg/{ => domain/dtos}/dependencies/dependency_list.go (100%) rename pkg/{ => domain/dtos}/dependencies/inherit_dependency.go (91%) rename pkg/domain/{apperrors => dtos/violations}/error.go (90%) rename pkg/{rules => domain/dtos/violations}/skipped_violation.go (89%) rename pkg/{rules => domain/dtos/violations}/uncovered.go (82%) rename pkg/{rules => domain/dtos/violations}/violation.go (83%) rename pkg/{ => domain/dtos}/violations/violation_creating_interface.go (100%) rename pkg/{tokens => domain/dtos/violations}/warning.go (97%) rename pkg/{dependencies => subscribers}/allow_dependency_handler.go (96%) rename pkg/{dependencies => subscribers}/dependency_layers_analyser.go (88%) rename pkg/{dependencies => subscribers}/layer_dependencies_analyser.go (78%) rename pkg/{dependencies => subscribers}/uncovered_dependent_handler.go (88%) rename pkg/{violations => subscribers}/unmatched_skipped_violations.go (77%) diff --git a/pkg/app/analyse_runner.go b/pkg/app/analyse_runner.go index 74fa8be..f451272 100644 --- a/pkg/app/analyse_runner.go +++ b/pkg/app/analyse_runner.go @@ -3,23 +3,23 @@ package app import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/hashicorp/go-multierror" "strings" ) // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { - analyzer *dependencies.DependencyLayersAnalyser + analyzer *subscribers.DependencyLayersAnalyser formatterProvider *formatters.FormatterProvider } -func NewAnalyseRunner(analyzer *dependencies.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *subscribers.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index ec7ab1a..44a74c5 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -1,11 +1,11 @@ package app import ( - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "golang.org/x/exp/maps" "strings" @@ -14,10 +14,10 @@ import ( // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { layerForTokenAnalyser *tokens.LayerForTokenAnalyser - dependencyLayersAnalyser *dependencies.DependencyLayersAnalyser + dependencyLayersAnalyser *subscribers.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *dependencies.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *subscribers.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 1a41152..299acfd 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -1,11 +1,11 @@ package app import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/configs" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" @@ -21,7 +21,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) type ContainerBuilder struct { @@ -43,13 +42,13 @@ type ContainerBuilder struct { ParserInterface parsers.ParserInterface LayerProvider *layers.LayerProvider EventHelper *dispatchers.EventHelper - AllowDependencyHandler *dependencies.AllowDependencyHandler + AllowDependencyHandler *subscribers.AllowDependencyHandler DependsOnPrivateLayer *subscribers.DependsOnPrivateLayer DependsOnInternalToken *subscribers.DependsOnInternalToken DependsOnDisallowedLayer *subscribers.DependsOnDisallowedLayer MatchingLayersHandler *layers.MatchingLayersHandler - UncoveredDependentHandler *dependencies.UncoveredDependentHandler - UnmatchedSkippedViolations *violations.UnmatchedSkippedViolations + UncoveredDependentHandler *subscribers.UncoveredDependentHandler + UnmatchedSkippedViolations *subscribers.UnmatchedSkippedViolations ConsoleSubscriber *subscribers.ConsoleSubscriber ProgressSubscriber *subscribers.ProgressSubscriber VerboseBoolFlag *bool @@ -59,17 +58,17 @@ type ContainerBuilder struct { TimeStopwatch *stopwatch.Stopwatch AstMapExtractor *ast_map.AstMapExtractor InheritanceFlattener *flatteners.InheritanceFlattener - DependencyResolver *dependencies.DependencyResolver + DependencyResolver *pkg.DependencyResolver TokenResolver *tokens.TokenResolver CollectorResolver *collectors_shared.CollectorResolver LayerResolver layers.LayerResolverInterface NikicPhpParser *parsers.NikicPhpParser CollectorProvider *collectors_shared.CollectorProvider - DependencyLayersAnalyser *dependencies.DependencyLayersAnalyser + DependencyLayersAnalyser *subscribers.DependencyLayersAnalyser TokenInLayerAnalyser *tokens.TokenInLayerAnalyser LayerForTokenAnalyser *tokens.LayerForTokenAnalyser UnassignedTokenAnalyser *tokens.UnassignedTokenAnalyser - LayerDependenciesAnalyser *dependencies.LayerDependenciesAnalyser + LayerDependenciesAnalyser *subscribers.LayerDependenciesAnalyser RulesetUsageAnalyser *rules.RulesetUsageAnalyser FormatterProvider *formatters.FormatterProvider FormatterConfiguration *formatters.FormatterConfiguration diff --git a/pkg/app/services.go b/pkg/app/services.go index 67de09b..ae07bdd 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -3,10 +3,10 @@ package app import ( "flag" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/services" @@ -25,7 +25,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" - "github.com/KoNekoD/go-deptrac/pkg/violations" "github.com/elliotchance/orderedmap/v2" "os" "strings" @@ -113,7 +112,7 @@ func Services(builder *ContainerBuilder) error { enums2.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), } inheritanceFlattener := flatteners.NewInheritanceFlattener() - dependencyResolver := dependencies.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + dependencyResolver := pkg.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) tokenResolver := tokens.NewTokenResolver() astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) @@ -130,15 +129,15 @@ func Services(builder *ContainerBuilder) error { subscribers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []subscribers.EventSubscriberInterface]]() // Events - uncoveredDependentHandler := dependencies.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) + uncoveredDependentHandler := subscribers.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) matchingLayersHandler := layers.NewMatchingLayersHandler() - allowDependencyHandler := dependencies.NewAllowDependencyHandler() + allowDependencyHandler := subscribers.NewAllowDependencyHandler() consoleSubscriber := subscribers.NewConsoleSubscriber(symfonyOutput, timeStopwatch) progressSubscriber := subscribers.NewProgressSubscriber(symfonyOutput) dependsOnDisallowedLayer := subscribers.NewDependsOnDisallowedLayer(eventHelper) dependsOnPrivateLayer := subscribers.NewDependsOnPrivateLayer(eventHelper) dependsOnInternalToken := subscribers.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) - unmatchedSkippedViolations := violations.NewUnmatchedSkippedViolations(eventHelper) + unmatchedSkippedViolations := subscribers.NewUnmatchedSkippedViolations(eventHelper) processEvent := &events.ProcessEvent{} postProcessEvent := &events.PostProcessEvent{} @@ -258,11 +257,11 @@ func Services(builder *ContainerBuilder) error { /* * SetAnalyser */ - dependencyLayersAnalyser := dependencies.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + dependencyLayersAnalyser := subscribers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) tokenInLayerAnalyser := tokens.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerForTokenAnalyser := tokens.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) unassignedTokenAnalyser := tokens.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := dependencies.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + layerDependenciesAnalyser := subscribers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) rulesetUsageAnalyser := rules.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go index e462671..b5799f9 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/ast_map/ast_loader.go @@ -2,6 +2,7 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/parsers" @@ -19,7 +20,7 @@ func NewAstLoader(parser parsers.ParserInterface, eventDispatcher dispatchers.Ev } } -func (l *AstLoader) CreateAstMap(files []string) (*AstMap, error) { +func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { references := make([]*tokens_references.FileReference, 0) err := l.eventDispatcher.DispatchEvent(NewPreCreateAstMapEvent(len(files))) @@ -46,7 +47,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*AstMap, error) { } } - astMap := NewAstMap(references) + astMap := ast_map.NewAstMap(references) errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(NewPostCreateAstMapEvent()) if errDispatchPostCreateMap != nil { diff --git a/pkg/ast_map/ast_map_extractor.go b/pkg/ast_map/ast_map_extractor.go index fb8dcd9..9c2c48d 100644 --- a/pkg/ast_map/ast_map_extractor.go +++ b/pkg/ast_map/ast_map_extractor.go @@ -2,12 +2,13 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" ) type AstMapExtractor struct { inputCollector collectors_shared.InputCollectorInterface astLoader *AstLoader - astMapCache *AstMap + astMapCache *ast_map.AstMap } func NewAstMapExtractor(inputCollector collectors_shared.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { @@ -18,7 +19,7 @@ func NewAstMapExtractor(inputCollector collectors_shared.InputCollectorInterface } } -func (e *AstMapExtractor) Extract() (*AstMap, error) { +func (e *AstMapExtractor) Extract() (*ast_map.AstMap, error) { if e.astMapCache == nil { collected, err := e.inputCollector.Collect() diff --git a/pkg/collectors_shared/inheritance_level_collector.go b/pkg/collectors_shared/inheritance_level_collector.go index ee5d841..1993fe2 100644 --- a/pkg/collectors_shared/inheritance_level_collector.go +++ b/pkg/collectors_shared/inheritance_level_collector.go @@ -3,6 +3,7 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" @@ -10,7 +11,7 @@ import ( type InheritanceLevelCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map.AstMap + astMap *ast_map2.AstMap } func NewInheritanceLevelCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritanceLevelCollector, error) { diff --git a/pkg/collectors_shared/inherits_collector.go b/pkg/collectors_shared/inherits_collector.go index dd58676..4284fc5 100644 --- a/pkg/collectors_shared/inherits_collector.go +++ b/pkg/collectors_shared/inherits_collector.go @@ -3,6 +3,7 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" @@ -10,7 +11,7 @@ import ( type InheritsCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map.AstMap + astMap *ast_map2.AstMap } func NewInheritsCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritsCollector, error) { diff --git a/pkg/collectors_shared/uses_collector.go b/pkg/collectors_shared/uses_collector.go index 6ebd060..fbca6db 100644 --- a/pkg/collectors_shared/uses_collector.go +++ b/pkg/collectors_shared/uses_collector.go @@ -3,6 +3,7 @@ package collectors_shared import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -11,7 +12,7 @@ import ( type UsesCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map.AstMap + astMap *ast_map2.AstMap } func NewUsesCollector(astMapExtractor *ast_map.AstMapExtractor) (*UsesCollector, error) { diff --git a/pkg/dependencies/dependency_resolver.go b/pkg/dependency_resolver.go similarity index 89% rename from pkg/dependencies/dependency_resolver.go rename to pkg/dependency_resolver.go index 1117d98..0c39980 100644 --- a/pkg/dependencies/dependency_resolver.go +++ b/pkg/dependency_resolver.go @@ -1,10 +1,11 @@ -package dependencies +package pkg import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/events" @@ -28,8 +29,8 @@ func NewDependencyResolver(typesConfig *dtos.AnalyserConfig, emitterLocator map[ } } -func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*DependencyList, error) { - result := NewDependencyList() +func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependencies.DependencyList, error) { + result := dependencies.NewDependencyList() for _, typeConfig := range r.config.Types { dependencyEmitterInterface, ok := r.emitterLocator[typeConfig] diff --git a/pkg/dispatchers/event_helper.go b/pkg/dispatchers/event_helper.go index 9d85694..a3bcdae 100644 --- a/pkg/dispatchers/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -1,11 +1,11 @@ package dispatchers import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) // EventHelper - Utility class for managing adding violations that could be skipped. @@ -56,8 +56,8 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *rules.AnalysisResult, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(rules.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(violations.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(rules.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(violations.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/ast_map/ast_map.go b/pkg/domain/dtos/ast_map/ast_map.go similarity index 91% rename from pkg/ast_map/ast_map.go rename to pkg/domain/dtos/ast_map/ast_map.go index 71883fa..93d92d9 100644 --- a/pkg/ast_map/ast_map.go +++ b/pkg/domain/dtos/ast_map/ast_map.go @@ -2,7 +2,6 @@ package ast_map import ( "fmt" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "strings" @@ -101,12 +100,12 @@ func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *tokens_re return v } -func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*ast_map2.AstInherit { +func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstInherit { structReference := a.GetClassReferenceForToken(structLikeName) if structReference == nil { return nil } - inherits := make([]*ast_map2.AstInherit, 0) + inherits := make([]*AstInherit, 0) for _, dep := range structReference.Inherits { inherits = append(inherits, dep) outArr := a.recursivelyResolveDependencies(dep, nil, nil) @@ -118,25 +117,25 @@ func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*ast_ } type stack struct { - s []*ast_map2.AstInherit + s []*AstInherit } -func (s *stack) Push(v *ast_map2.AstInherit) { +func (s *stack) Push(v *AstInherit) { s.s = append(s.s, v) } -func (s *stack) Pop() *ast_map2.AstInherit { +func (s *stack) Pop() *AstInherit { v := s.s[len(s.s)-1] s.s = s.s[:len(s.s)-1] return v } -func (a *AstMap) recursivelyResolveDependencies(inheritDependency *ast_map2.AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*ast_map2.AstInherit { +func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*AstInherit { if alreadyResolved == nil { alreadyResolved = make(map[string]bool) } if pathStack == nil { - pathStack = &stack{s: make([]*ast_map2.AstInherit, 0)} + pathStack = &stack{s: make([]*AstInherit, 0)} pathStack.Push(inheritDependency) } structName := inheritDependency.ClassLikeName.ToString() @@ -148,7 +147,7 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *ast_map2.AstI if structReference == nil { return nil } - out := make([]*ast_map2.AstInherit, 0) + out := make([]*AstInherit, 0) for _, inherit := range structReference.Inherits { alreadyResolved[structName] = true path := pathStack.s diff --git a/pkg/dependencies/dependency.go b/pkg/domain/dtos/dependencies/dependency.go similarity index 73% rename from pkg/dependencies/dependency.go rename to pkg/domain/dtos/dependencies/dependency.go index 4d989ac..984fbb5 100644 --- a/pkg/dependencies/dependency.go +++ b/pkg/domain/dtos/dependencies/dependency.go @@ -1,17 +1,16 @@ package dependencies import ( - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type Dependency struct { depender tokens.TokenInterface dependent tokens.TokenInterface - context *dependencies2.DependencyContext + context *DependencyContext } -func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *dependencies2.DependencyContext) *Dependency { +func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *DependencyContext) *Dependency { if dependent.ToString() == "" { panic("1") } @@ -36,6 +35,6 @@ func (d *Dependency) GetDependent() tokens.TokenInterface { return d.dependent } -func (d *Dependency) GetContext() *dependencies2.DependencyContext { +func (d *Dependency) GetContext() *DependencyContext { return d.context } diff --git a/pkg/dependencies/dependency_interface.go b/pkg/domain/dtos/dependencies/dependency_interface.go similarity index 73% rename from pkg/dependencies/dependency_interface.go rename to pkg/domain/dtos/dependencies/dependency_interface.go index 7237132..65bf96f 100644 --- a/pkg/dependencies/dependency_interface.go +++ b/pkg/domain/dtos/dependencies/dependency_interface.go @@ -1,7 +1,6 @@ package dependencies import ( - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -11,7 +10,7 @@ type DependencyInterface interface { GetDependent() tokens.TokenInterface - GetContext() *dependencies2.DependencyContext + GetContext() *DependencyContext Serialize() []map[string]interface{} } diff --git a/pkg/dependencies/dependency_list.go b/pkg/domain/dtos/dependencies/dependency_list.go similarity index 100% rename from pkg/dependencies/dependency_list.go rename to pkg/domain/dtos/dependencies/dependency_list.go diff --git a/pkg/dependencies/inherit_dependency.go b/pkg/domain/dtos/dependencies/inherit_dependency.go similarity index 91% rename from pkg/dependencies/inherit_dependency.go rename to pkg/domain/dtos/dependencies/inherit_dependency.go index 669b17a..d2d9975 100644 --- a/pkg/dependencies/inherit_dependency.go +++ b/pkg/domain/dtos/dependencies/inherit_dependency.go @@ -2,7 +2,6 @@ package dependencies import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -41,6 +40,6 @@ func (i *InheritDependency) GetDependent() tokens.TokenInterface { return i.dependent } -func (i *InheritDependency) GetContext() *dependencies2.DependencyContext { +func (i *InheritDependency) GetContext() *DependencyContext { return i.originalDependency.GetContext() } diff --git a/pkg/domain/apperrors/error.go b/pkg/domain/dtos/violations/error.go similarity index 90% rename from pkg/domain/apperrors/error.go rename to pkg/domain/dtos/violations/error.go index 35a536c..903af7a 100644 --- a/pkg/domain/apperrors/error.go +++ b/pkg/domain/dtos/violations/error.go @@ -1,4 +1,4 @@ -package apperrors +package violations type Error struct { Message string diff --git a/pkg/rules/skipped_violation.go b/pkg/domain/dtos/violations/skipped_violation.go similarity index 89% rename from pkg/rules/skipped_violation.go rename to pkg/domain/dtos/violations/skipped_violation.go index c163313..d121581 100644 --- a/pkg/rules/skipped_violation.go +++ b/pkg/domain/dtos/violations/skipped_violation.go @@ -1,6 +1,8 @@ -package rules +package violations -import "github.com/KoNekoD/go-deptrac/pkg/dependencies" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" +) // SkippedViolation - Represents a Violation that is being skipped by the baseline file_supportive type SkippedViolation struct { diff --git a/pkg/rules/uncovered.go b/pkg/domain/dtos/violations/uncovered.go similarity index 82% rename from pkg/rules/uncovered.go rename to pkg/domain/dtos/violations/uncovered.go index e1c6140..59c813d 100644 --- a/pkg/rules/uncovered.go +++ b/pkg/domain/dtos/violations/uncovered.go @@ -1,6 +1,8 @@ -package rules +package violations -import "github.com/KoNekoD/go-deptrac/pkg/dependencies" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" +) // Uncovered - Represents a dependency_contract that is NOT covered by the current configuration. type Uncovered struct { diff --git a/pkg/rules/violation.go b/pkg/domain/dtos/violations/violation.go similarity index 83% rename from pkg/rules/violation.go rename to pkg/domain/dtos/violations/violation.go index 552b7c2..4a3cc1f 100644 --- a/pkg/rules/violation.go +++ b/pkg/domain/dtos/violations/violation.go @@ -1,9 +1,8 @@ -package rules +package violations import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" - "github.com/KoNekoD/go-deptrac/pkg/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" ) // Violation - Represents a dependency_contract that is NOT allowed to exist given the defined rules @@ -11,10 +10,10 @@ type Violation struct { Dependency dependencies.DependencyInterface DependerLayer string DependentLayer string - ViolationCreatingRule violations.ViolationCreatingInterface + ViolationCreatingRule ViolationCreatingInterface } -func NewViolation(dependency dependencies.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) *Violation { +func NewViolation(dependency dependencies.DependencyInterface, dependerLayer string, dependentLayer string, violationCreatingRule ViolationCreatingInterface) *Violation { if dependentLayer == dependerLayer { panic("1") diff --git a/pkg/violations/violation_creating_interface.go b/pkg/domain/dtos/violations/violation_creating_interface.go similarity index 100% rename from pkg/violations/violation_creating_interface.go rename to pkg/domain/dtos/violations/violation_creating_interface.go diff --git a/pkg/tokens/warning.go b/pkg/domain/dtos/violations/warning.go similarity index 97% rename from pkg/tokens/warning.go rename to pkg/domain/dtos/violations/warning.go index 95e64a1..4e187f4 100644 --- a/pkg/tokens/warning.go +++ b/pkg/domain/dtos/violations/warning.go @@ -1,4 +1,4 @@ -package tokens +package violations import ( "fmt" diff --git a/pkg/emitters/class_dependency_emitter.go b/pkg/emitters/class_dependency_emitter.go index 643c450..10caada 100644 --- a/pkg/emitters/class_dependency_emitter.go +++ b/pkg/emitters/class_dependency_emitter.go @@ -1,8 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -18,7 +17,7 @@ func (c *ClassDependencyEmitter) GetName() string { return "ClassDependencyEmitter" } -func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { classLikeName := classReference.GetToken().(*tokens.ClassLikeToken) @@ -31,11 +30,11 @@ func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depend continue } - dependencyList.AddDependency(dependencies.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) } for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies2.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) + dependencyList.AddDependency(dependencies2.NewDependency(classLikeName, inherit.ClassLikeName, dependencies2.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) } } } diff --git a/pkg/emitters/class_superglobal_dependency_emitter.go b/pkg/emitters/class_superglobal_dependency_emitter.go index ed72250..673d151 100644 --- a/pkg/emitters/class_superglobal_dependency_emitter.go +++ b/pkg/emitters/class_superglobal_dependency_emitter.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,13 +16,13 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { return "ClassSuperglobalDependencyEmitter" } -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { if dependencyToken.Context.DependencyType != enums.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependencies.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/dependency_emitter_interface.go b/pkg/emitters/dependency_emitter_interface.go index bffcd1b..2d77959 100644 --- a/pkg/emitters/dependency_emitter_interface.go +++ b/pkg/emitters/dependency_emitter_interface.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" ) type DependencyEmitterInterface interface { diff --git a/pkg/emitters/file_dependency_emitter.go b/pkg/emitters/file_dependency_emitter.go index f105a6a..13e509d 100644 --- a/pkg/emitters/file_dependency_emitter.go +++ b/pkg/emitters/file_dependency_emitter.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FileDependencyEmitter) GetName() string { return "FileDependencyEmitter" } -func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, dependencyToken := range fileReference.Dependencies { if dependencyToken.Context.DependencyType == enums.DependencyTypeUse { @@ -27,7 +27,7 @@ func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependen continue } - dependencyList.AddDependency(dependencies.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/function_call_dependency_emitter.go b/pkg/emitters/function_call_dependency_emitter.go index 699e4a8..9636983 100644 --- a/pkg/emitters/function_call_dependency_emitter.go +++ b/pkg/emitters/function_call_dependency_emitter.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -17,7 +17,7 @@ func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { func (f *FunctionCallDependencyEmitter) GetName() string { return "FunctionCallDependencyEmitter" } -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { references := make([]tokens.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetClassLikeReferences() { references = append(references, reference) @@ -37,7 +37,7 @@ func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, f.createDependenciesForReferences(references, astMap, dependencyList) } -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, referenceInterface := range references { reference := referenceInterface.(tokens.TokenReferenceWithDependenciesInterface) for _, dependencyToken := range reference.GetDependencies() { @@ -45,10 +45,10 @@ func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(referenc continue } token := dependencyToken.Token - dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(reference.GetToken(), token, dependencyToken.Context)) functionToken := token.(*tokens2.FunctionToken) if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { - dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/function_dependency_emitter.go b/pkg/emitters/function_dependency_emitter.go index bb64fa6..38e3fae 100644 --- a/pkg/emitters/function_dependency_emitter.go +++ b/pkg/emitters/function_dependency_emitter.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FunctionDependencyEmitter) GetName() string { return "FunctionDependencyEmitter" } -func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { @@ -28,7 +28,7 @@ func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depe continue } - dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/function_superglobal_dependency_emitter.go b/pkg/emitters/function_superglobal_dependency_emitter.go index 96c9bdf..68af6df 100644 --- a/pkg/emitters/function_superglobal_dependency_emitter.go +++ b/pkg/emitters/function_superglobal_dependency_emitter.go @@ -1,8 +1,8 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { @@ -24,7 +24,7 @@ func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map. continue } - dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/emitters/uses_dependency_emitter.go b/pkg/emitters/uses_dependency_emitter.go index 142db05..5f7128d 100644 --- a/pkg/emitters/uses_dependency_emitter.go +++ b/pkg/emitters/uses_dependency_emitter.go @@ -1,9 +1,9 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -20,7 +20,7 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { references := make([]tokens2.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) @@ -45,7 +45,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { if emittedDependency.Context.DependencyType == enums.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { - dependencyList.AddDependency(dependencies.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) + dependencyList.AddDependency(dependencies2.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } } diff --git a/pkg/events/process_event.go b/pkg/events/process_event.go index 2086890..827052d 100644 --- a/pkg/events/process_event.go +++ b/pkg/events/process_event.go @@ -1,7 +1,7 @@ package events import ( - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/rules" ) diff --git a/pkg/flatteners/inheritance_flattener.go b/pkg/flatteners/inheritance_flattener.go index 85763ff..b6e9fde 100644 --- a/pkg/flatteners/inheritance_flattener.go +++ b/pkg/flatteners/inheritance_flattener.go @@ -1,8 +1,8 @@ package flatteners import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -12,12 +12,12 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { classLikeName := classLikeReference.GetToken().(*tokens.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { for _, dep := range dependencyList.GetDependenciesByClass(inherit.ClassLikeName.ToString()) { - dependencyList.AddInheritDependency(dependencies.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) + dependencyList.AddInheritDependency(dependencies2.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) } } } diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go index 3e1aa5e..80cd43e 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -4,6 +4,7 @@ import ( "crypto/sha1" "encoding/json" "fmt" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" @@ -30,18 +31,18 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, o if input.ReportSkipped { for _, rule := range outputResult.AllOf(enums2.TypeSkippedViolation) { - f.addSkipped(&violations, rule.(*rules.SkippedViolation), formatterConfig) + f.addSkipped(&violations, rule.(*violations.SkippedViolation), formatterConfig) } } if input.ReportUncovered { for _, rule := range outputResult.AllOf(enums2.TypeUncovered) { - f.addUncovered(&violations, rule.(*rules.Uncovered), formatterConfig) + f.addUncovered(&violations, rule.(*violations.Uncovered), formatterConfig) } } for _, rule := range outputResult.AllOf(enums2.TypeViolation) { - f.addFailure(&violations, rule.(*rules.Violation), formatterConfig) + f.addFailure(&violations, rule.(*violations.Violation), formatterConfig) } jsonData, err := json.MarshalIndent(violations, "", " ") @@ -62,29 +63,29 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, o return nil } -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *rules.Violation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *violations2.Violation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) } -func (f *CodeclimateOutputFormatter) getFailureMessage(violation *rules.Violation) *string { +func (f *CodeclimateOutputFormatter) getFailureMessage(violation *violations2.Violation) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *rules.SkippedViolation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *violations2.SkippedViolation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) } -func (f *CodeclimateOutputFormatter) getWarningMessage(violation *rules.SkippedViolation) *string { +func (f *CodeclimateOutputFormatter) getWarningMessage(violation *violations2.SkippedViolation) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *rules.Uncovered, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *violations2.Uncovered, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) } -func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *rules.Uncovered) *string { +func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *violations2.Uncovered) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) } diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index 39e38b2..307913e 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -2,8 +2,9 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -22,12 +23,12 @@ func (f *ConsoleOutputFormatter) GetName() string { func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { - f.printViolation(rule.(*rules.Violation), output) + f.printViolation(rule.(*violations2.Violation), output) } if input.ReportSkipped { for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { - f.printViolation(rule.(*rules.SkippedViolation), output) + f.printViolation(rule.(*violations2.SkippedViolation), output) } } @@ -53,11 +54,11 @@ func (f *ConsoleOutputFormatter) printViolation(rule rules.RuleInterface, output dependerLayer := "" dependentLayer := "" - if ruleAsserted, ok := rule.(*rules.SkippedViolation); ok { + if ruleAsserted, ok := rule.(*violations2.SkippedViolation); ok { skippedText = "[SKIPPED] " dependerLayer = ruleAsserted.GetDependerLayer() dependentLayer = ruleAsserted.GetDependentLayer() - } else if ruleAsserted, ok := rule.(*rules.Violation); ok { + } else if ruleAsserted, ok := rule.(*violations2.Violation); ok { dependerLayer = ruleAsserted.GetDependerLayer() dependentLayer = ruleAsserted.GetDependentLayer() } else { diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go index 12a1b18..7005e4c 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/formatters/github_actions_output_formatter.go @@ -2,7 +2,8 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -43,9 +44,9 @@ func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult func (g *GithubActionsOutputFormatter) determineLogLevel(rule rules.RuleInterface) string { switch rule.(type) { - case *rules.Violation: + case *violations2.Violation: return "error" - case *rules.SkippedViolation: + case *violations2.SkippedViolation: return "warning" default: return "debug" @@ -103,11 +104,11 @@ func (g *GithubActionsOutputFormatter) printViolation(rule rules.RuleInterface, dependerLayer := "" dependentLayer := "" switch v := rule.(type) { - case *rules.SkippedViolation: + case *violations2.SkippedViolation: prefix = "[SKIPPED] " dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() - case *rules.Violation: + case *violations2.Violation: dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index 8967397..1333e08 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -3,6 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" @@ -47,7 +48,7 @@ func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output res return nil } -func (f *GraphVizOutputFormatter) calculateViolations(violations []*rules.Violation) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateViolations(violations []*violations2.Violation) map[string]map[string]int { layerViolations := make(map[string]map[string]int) for _, violation := range violations { dependerLayer := violation.GetDependerLayer() @@ -75,7 +76,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []rules.R } layersDependOnLayers[layerA][layerB]++ - case *rules.Uncovered: + case *violations2.Uncovered: if layersDependOnLayers[r.Layer] == nil { layersDependOnLayers[r.Layer] = make(map[string]int) } diff --git a/pkg/formatters/json_output_formatter.go b/pkg/formatters/json_output_formatter.go index 230e9db..5c8e056 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -3,9 +3,9 @@ package formatters import ( "encoding/json" "fmt" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -26,16 +26,16 @@ func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output r if input.ReportSkipped { for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { - f.addSkipped(violations, rule.(*rules.SkippedViolation)) + f.addSkipped(violations, rule.(*violations.SkippedViolation)) } } if input.ReportUncovered { for _, rule := range outputResult.AllOf(enums.TypeUncovered) { - f.addUncovered(violations, rule.(*rules.Uncovered)) + f.addUncovered(violations, rule.(*violations.Uncovered)) } } for _, rule := range outputResult.AllOf(enums.TypeViolation) { - f.addFailure(violations, rule.(*rules.Violation)) + f.addFailure(violations, rule.(*violations.Violation)) } // Add report summary to jsonArray @@ -73,7 +73,7 @@ func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output r return nil } -func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *rules.Violation) { +func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *violations2.Violation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getFailureMessage(violation), @@ -82,7 +82,7 @@ func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getFailureMessage(violation *rules.Violation) string { +func (f *JsonOutputFormatter) getFailureMessage(violation *violations2.Violation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -92,7 +92,7 @@ func (f *JsonOutputFormatter) getFailureMessage(violation *rules.Violation) stri ) } -func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *rules.SkippedViolation) { +func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *violations2.SkippedViolation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getWarningMessage(violation), @@ -101,7 +101,7 @@ func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getWarningMessage(violation *rules.SkippedViolation) string { +func (f *JsonOutputFormatter) getWarningMessage(violation *violations2.SkippedViolation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -111,7 +111,7 @@ func (f *JsonOutputFormatter) getWarningMessage(violation *rules.SkippedViolatio ) } -func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *rules.Uncovered) { +func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *violations2.Uncovered) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getUncoveredMessage(violation), @@ -120,7 +120,7 @@ func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, }) } -func (f *JsonOutputFormatter) getUncoveredMessage(violation *rules.Uncovered) string { +func (f *JsonOutputFormatter) getUncoveredMessage(violation *violations2.Uncovered) string { dependency := violation.GetDependency() return fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender().ToString(), diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go index fbccc86..34040f2 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -3,6 +3,7 @@ package formatters import ( "encoding/xml" "fmt" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -78,7 +79,7 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str Classname: rule.GetDependency().GetDepender().ToString(), } switch r := rule.(type) { - case *rules.Violation: + case *violations2.Violation: testSuite.Failures++ testCase.Failures = append(testCase.Failures, struct { Message string `xml:"message,attr"` @@ -93,12 +94,12 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str ), Type: "WARNING", }) - case *rules.SkippedViolation: + case *violations2.SkippedViolation: testSuite.Skipped++ testCase.Skipped = append(testCase.Skipped, struct { XMLName xml.Name `xml:"skipped"` }{}) - case *rules.Uncovered: + case *violations2.Uncovered: testCase.Warnings = append(testCase.Warnings, struct { Message string `xml:"message,attr"` Type string `xml:"type,attr"` @@ -131,7 +132,7 @@ func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResu switch r := rule.(type) { case rules.CoveredRuleInterface: layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) - case *rules.Uncovered: + case *violations2.Uncovered: layers[r.Layer] = append(layers[r.Layer], rule) } } diff --git a/pkg/formatters/table_output_formatter.go b/pkg/formatters/table_output_formatter.go index 402d8e7..d49f0db 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -2,7 +2,8 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -58,11 +59,11 @@ func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output rows := make([][]string, 0) for _, ruleItem := range rulesList { switch item := ruleItem.(type) { - case *rules.Uncovered: + case *violations2.Uncovered: rows = append(rows, t.uncoveredRow(item, outputFormatterInput.FailOnUncovered)) - case *rules.Violation: + case *violations2.Violation: rows = append(rows, t.violationRow(item)) - case *rules.SkippedViolation: + case *violations2.SkippedViolation: rows = append(rows, t.skippedViolationRow(item)) } } @@ -79,7 +80,7 @@ func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output return nil } -func (t *TableOutputFormatter) skippedViolationRow(rule *rules.SkippedViolation) []string { +func (t *TableOutputFormatter) skippedViolationRow(rule *violations2.SkippedViolation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s (%s)", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { @@ -91,7 +92,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *rules.SkippedViolation) } -func (t *TableOutputFormatter) violationRow(rule *rules.Violation) []string { +func (t *TableOutputFormatter) violationRow(rule *violations2.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) message += fmt.Sprintf("\n%s (To fix %s(You need to add to the array by this key) -> %s(That value needs to be added to that array))", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) @@ -164,7 +165,7 @@ func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output ) } -func (t *TableOutputFormatter) uncoveredRow(rule *rules.Uncovered, reportAsError bool) []string { +func (t *TableOutputFormatter) uncoveredRow(rule *violations2.Uncovered, reportAsError bool) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s has uncovered dependency_contract on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) if len(gotDependency.Serialize()) > 1 { diff --git a/pkg/formatters/xml_output_formatter.go b/pkg/formatters/xml_output_formatter.go index c6dde39..96b737e 100644 --- a/pkg/formatters/xml_output_formatter.go +++ b/pkg/formatters/xml_output_formatter.go @@ -3,9 +3,9 @@ package formatters import ( "encoding/xml" "fmt" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -65,7 +65,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int var line int switch r := rule.(type) { - case rules.Violation: + case violations2.Violation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() @@ -75,7 +75,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int file = fileOccurrence.FilePath line = fileOccurrence.Line - case rules.SkippedViolation: + case violations2.SkippedViolation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() diff --git a/pkg/results/output_result.go b/pkg/results/output_result.go index 496d8fa..7c71c75 100644 --- a/pkg/results/output_result.go +++ b/pkg/results/output_result.go @@ -1,20 +1,19 @@ package results import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) // OutputResult - Represents a result_contract ready for output formatting type OutputResult struct { rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface - Errors []*apperrors.Error - Warnings []*tokens.Warning + Errors []*violations2.Error + Warnings []*violations2.Warning } -func newOutputResult(rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface, errors []*apperrors.Error, warnings []*tokens.Warning) *OutputResult { +func newOutputResult(rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface, errors []*violations2.Error, warnings []*violations2.Warning) *OutputResult { return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} } @@ -48,12 +47,12 @@ func (r *OutputResult) AllRules() []rules.RuleInterface { } return rules } -func (r *OutputResult) Violations() []*rules.Violation { +func (r *OutputResult) Violations() []*violations2.Violation { untyped := r.AllOf(enums.TypeViolation) - items := make([]*rules.Violation, 0, len(untyped)) + items := make([]*violations2.Violation, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*rules.Violation)) + items = append(items, item.(*violations2.Violation)) } return items @@ -63,23 +62,23 @@ func (r *OutputResult) HasViolations() bool { return len(r.Violations()) > 0 } -func (r *OutputResult) SkippedViolations() []*rules.SkippedViolation { +func (r *OutputResult) SkippedViolations() []*violations2.SkippedViolation { untyped := r.AllOf(enums.TypeSkippedViolation) - items := make([]*rules.SkippedViolation, 0, len(untyped)) + items := make([]*violations2.SkippedViolation, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*rules.SkippedViolation)) + items = append(items, item.(*violations2.SkippedViolation)) } return items } -func (r *OutputResult) Uncovered() []*rules.Uncovered { +func (r *OutputResult) Uncovered() []*violations2.Uncovered { untyped := r.AllOf(enums.TypeUncovered) - items := make([]*rules.Uncovered, 0, len(untyped)) + items := make([]*violations2.Uncovered, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*rules.Uncovered)) + items = append(items, item.(*violations2.Uncovered)) } return items diff --git a/pkg/rules/allowed.go b/pkg/rules/allowed.go index f30d066..b83b4e5 100644 --- a/pkg/rules/allowed.go +++ b/pkg/rules/allowed.go @@ -1,6 +1,8 @@ package rules -import "github.com/KoNekoD/go-deptrac/pkg/dependencies" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" +) // Allowed - Represents a dependency_contract that is allowed to exist given the defined rules type Allowed struct { diff --git a/pkg/rules/analysis_result.go b/pkg/rules/analysis_result.go index 97144da..3682e89 100644 --- a/pkg/rules/analysis_result.go +++ b/pkg/rules/analysis_result.go @@ -2,36 +2,35 @@ package rules import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) // AnalysisResult - Describes the result_contract of a source code analysis. type AnalysisResult struct { rules map[enums.RuleTypeEnum]map[string]RuleInterface - warnings []*tokens.Warning + warnings []*violations.Warning - errors []*apperrors.Error + errors []*violations.Error } func NewAnalysisResult() *AnalysisResult { return &AnalysisResult{ rules: make(map[enums.RuleTypeEnum]map[string]RuleInterface), - warnings: make([]*tokens.Warning, 0), - errors: make([]*apperrors.Error, 0), + warnings: make([]*violations.Warning, 0), + errors: make([]*violations.Error, 0), } } func (r *AnalysisResult) ruleTypeByRule(rule RuleInterface) enums.RuleTypeEnum { switch rule.(type) { - case *Violation: + case *violations.Violation: return enums.TypeViolation - case *SkippedViolation: + case *violations.SkippedViolation: return enums.TypeSkippedViolation - case *Uncovered: + case *violations.Uncovered: return enums.TypeUncovered case *Allowed: return enums.TypeAllowed @@ -62,18 +61,18 @@ func (r *AnalysisResult) Rules() map[enums.RuleTypeEnum]map[string]RuleInterface return r.rules } -func (r *AnalysisResult) AddWarning(warning *tokens.Warning) { +func (r *AnalysisResult) AddWarning(warning *violations.Warning) { r.warnings = append(r.warnings, warning) } -func (r *AnalysisResult) Warnings() []*tokens.Warning { +func (r *AnalysisResult) Warnings() []*violations.Warning { return r.warnings } -func (r *AnalysisResult) AddError(error *apperrors.Error) { +func (r *AnalysisResult) AddError(error *violations.Error) { r.errors = append(r.errors, error) } -func (r *AnalysisResult) Errors() []*apperrors.Error { +func (r *AnalysisResult) Errors() []*violations.Error { return r.errors } diff --git a/pkg/rules/rule_interface.go b/pkg/rules/rule_interface.go index a445fca..aadb289 100644 --- a/pkg/rules/rule_interface.go +++ b/pkg/rules/rule_interface.go @@ -1,6 +1,8 @@ package rules -import "github.com/KoNekoD/go-deptrac/pkg/dependencies" +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" +) // RuleInterface - Represents a dependency_contract type RuleInterface interface { diff --git a/pkg/rules/ruleset_usage_analyser.go b/pkg/rules/ruleset_usage_analyser.go index ded69e5..9fb0c7e 100644 --- a/pkg/rules/ruleset_usage_analyser.go +++ b/pkg/rules/ruleset_usage_analyser.go @@ -1,8 +1,8 @@ package rules import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -12,7 +12,7 @@ type RulesetUsageAnalyser struct { layerProvider *layers2.LayerProvider layerResolver layers2.LayerResolverInterface astMapExtractor *ast_map.AstMapExtractor - dependencyResolver *dependencies.DependencyResolver + dependencyResolver *pkg.DependencyResolver tokenResolver *tokens.TokenResolver layers []*dtos.LayerConfig } @@ -21,7 +21,7 @@ func NewRulesetUsageAnalyser( layerProvider *layers2.LayerProvider, layerResolver layers2.LayerResolverInterface, astMapExtractor *ast_map.AstMapExtractor, - dependencyResolver *dependencies.DependencyResolver, + dependencyResolver *pkg.DependencyResolver, tokenResolver *tokens.TokenResolver, layers []*dtos.LayerConfig, ) *RulesetUsageAnalyser { diff --git a/pkg/dependencies/allow_dependency_handler.go b/pkg/subscribers/allow_dependency_handler.go similarity index 96% rename from pkg/dependencies/allow_dependency_handler.go rename to pkg/subscribers/allow_dependency_handler.go index 4f781a9..7425ec1 100644 --- a/pkg/dependencies/allow_dependency_handler.go +++ b/pkg/subscribers/allow_dependency_handler.go @@ -1,4 +1,4 @@ -package dependencies +package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/events" diff --git a/pkg/dependencies/dependency_layers_analyser.go b/pkg/subscribers/dependency_layers_analyser.go similarity index 88% rename from pkg/dependencies/dependency_layers_analyser.go rename to pkg/subscribers/dependency_layers_analyser.go index 0617f32..45ffe38 100644 --- a/pkg/dependencies/dependency_layers_analyser.go +++ b/pkg/subscribers/dependency_layers_analyser.go @@ -1,11 +1,13 @@ -package dependencies +package subscribers import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -14,7 +16,7 @@ import ( type DependencyLayersAnalyser struct { astMapExtractor *ast_map.AstMapExtractor - dependencyResolver *DependencyResolver + dependencyResolver *pkg.DependencyResolver tokenResolver *tokens.TokenResolver layerResolver layers.LayerResolverInterface eventDispatcher dispatchers.EventDispatcherInterface @@ -22,7 +24,7 @@ type DependencyLayersAnalyser struct { func NewDependencyLayersAnalyser( astMapExtractor *ast_map.AstMapExtractor, - dependencyResolver *DependencyResolver, + dependencyResolver *pkg.DependencyResolver, tokenResolver *tokens.TokenResolver, layerResolver layers.LayerResolverInterface, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { @@ -45,7 +47,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { return nil, err } analysisResult := rules.NewAnalysisResult() - warnings := make(map[string]*tokens.Warning) + warnings := make(map[string]*violations.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) @@ -70,7 +72,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { _, ok := warnings[depender.ToString()] if !ok && len(dependerLayers) > 1 { - warnings[depender.ToString()] = tokens.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) + warnings[depender.ToString()] = violations.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) } dependent := dependency.GetDependent() diff --git a/pkg/subscribers/depends_on_disallowed_layer.go b/pkg/subscribers/depends_on_disallowed_layer.go index 810ea11..14cc12b 100644 --- a/pkg/subscribers/depends_on_disallowed_layer.go +++ b/pkg/subscribers/depends_on_disallowed_layer.go @@ -2,7 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/events" ) @@ -21,7 +21,7 @@ func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, s ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) if err != nil { - ruleset.AddError(apperrors.NewError(err.Error())) + ruleset.AddError(violations.NewError(err.Error())) stopPropagation() return nil } diff --git a/pkg/dependencies/layer_dependencies_analyser.go b/pkg/subscribers/layer_dependencies_analyser.go similarity index 78% rename from pkg/dependencies/layer_dependencies_analyser.go rename to pkg/subscribers/layer_dependencies_analyser.go index 69ce4b2..fc390f7 100644 --- a/pkg/dependencies/layer_dependencies_analyser.go +++ b/pkg/subscribers/layer_dependencies_analyser.go @@ -1,23 +1,24 @@ -package dependencies +package subscribers import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type LayerDependenciesAnalyser struct { astMapExtractor *ast_map.AstMapExtractor tokenResolver *tokens.TokenResolver - dependencyResolver *DependencyResolver + dependencyResolver *pkg.DependencyResolver layerResolver layers.LayerResolverInterface } func NewLayerDependenciesAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *tokens.TokenResolver, - dependencyResolver *DependencyResolver, + dependencyResolver *pkg.DependencyResolver, layerResolver layers.LayerResolverInterface, ) *LayerDependenciesAnalyser { return &LayerDependenciesAnalyser{ @@ -28,8 +29,8 @@ func NewLayerDependenciesAnalyser( } } -func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*rules.Uncovered, error) { - uncoveredResult := make(map[string][]*rules.Uncovered) +func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*violations.Uncovered, error) { + uncoveredResult := make(map[string][]*violations.Uncovered) astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -53,9 +54,9 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s continue } if _, ok := uncoveredResult[dependentLayerName]; !ok { - uncoveredResult[dependentLayerName] = make([]*rules.Uncovered, 0) + uncoveredResult[dependentLayerName] = make([]*violations.Uncovered, 0) } - uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], rules.NewUncovered(dependency, dependentLayerName)) + uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], violations.NewUncovered(dependency, dependentLayerName)) } } } diff --git a/pkg/dependencies/uncovered_dependent_handler.go b/pkg/subscribers/uncovered_dependent_handler.go similarity index 88% rename from pkg/dependencies/uncovered_dependent_handler.go rename to pkg/subscribers/uncovered_dependent_handler.go index 95b8ddd..3e0b635 100644 --- a/pkg/dependencies/uncovered_dependent_handler.go +++ b/pkg/subscribers/uncovered_dependent_handler.go @@ -1,9 +1,9 @@ -package dependencies +package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/events" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) type UncoveredDependentHandler struct { @@ -27,7 +27,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, if dependentClassLike, ok := dependent.(*tokens.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { - ruleset.AddRule(rules.NewUncovered(event.Dependency, event.DependerLayer)) + ruleset.AddRule(violations.NewUncovered(event.Dependency, event.DependerLayer)) } } diff --git a/pkg/violations/unmatched_skipped_violations.go b/pkg/subscribers/unmatched_skipped_violations.go similarity index 77% rename from pkg/violations/unmatched_skipped_violations.go rename to pkg/subscribers/unmatched_skipped_violations.go index dc19569..a1b2c63 100644 --- a/pkg/violations/unmatched_skipped_violations.go +++ b/pkg/subscribers/unmatched_skipped_violations.go @@ -1,9 +1,9 @@ -package violations +package subscribers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/events" ) @@ -21,7 +21,7 @@ func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, ruleset := event.GetResult() for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { for _, tokenB := range tokensB { - ruleset.AddError(apperrors.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) + ruleset.AddError(violations.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) } } stopPropagation() diff --git a/pkg/tokens/layer_for_token_analyser.go b/pkg/tokens/layer_for_token_analyser.go index a071767..53ae5ac 100644 --- a/pkg/tokens/layer_for_token_analyser.go +++ b/pkg/tokens/layer_for_token_analyser.go @@ -2,6 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" @@ -46,7 +47,7 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType en } } -func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map.AstMap) (map[string][]string, error) { +func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map2.AstMap) (map[string][]string, error) { references := referencesAny.([]tokens2.TokenReferenceInterface) if len(references) == 0 { return make(map[string][]string), nil diff --git a/pkg/tokens/token_resolver.go b/pkg/tokens/token_resolver.go index a835c5a..f1a0b15 100644 --- a/pkg/tokens/token_resolver.go +++ b/pkg/tokens/token_resolver.go @@ -1,7 +1,7 @@ package tokens import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens3 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" From 19c9ce6b066b34edb44c6a316593b0a59386271b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 00:26:30 +0300 Subject: [PATCH 15/40] refactor: structure --- pkg/configs/deptrac_config.go | 14 +++++++------- .../dtos/formatters_configs/graphviz_config.go | 12 ++++++------ .../dtos/formatters_configs/mermaid_js_config.go | 6 +++--- pkg/domain/dtos/{layer_config.go => layer.go} | 14 +++++++------- .../dtos/tokens_references/class_like_reference.go | 12 ++++++------ .../dtos/tokens_references/file_reference.go | 12 ++++++------ .../dtos/tokens_references/function_reference.go | 12 ++++++------ pkg/layers/layer_resolver.go | 4 ++-- pkg/rules/ruleset.go | 12 ++++++------ pkg/rules/ruleset_usage_analyser.go | 4 ++-- 10 files changed, 51 insertions(+), 51 deletions(-) rename pkg/domain/dtos/{layer_config.go => layer.go} (64%) diff --git a/pkg/configs/deptrac_config.go b/pkg/configs/deptrac_config.go index e80a773..2521459 100644 --- a/pkg/configs/deptrac_config.go +++ b/pkg/configs/deptrac_config.go @@ -15,7 +15,7 @@ type DeptracConfig struct { Paths []string Analyser *dtos.AnalyserConfig Formatters map[enums.FormatterType]formatters_configs2.FormatterConfigInterface - Layers []*dtos.LayerConfig + Layers []*dtos.Layer Rulesets map[string]*rules.Ruleset IgnoreUncoveredInternalStructs bool SkipViolations map[string][]string @@ -111,7 +111,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formatterRaw["uncovered"].(*enums.CodeclimateLevelEnum), ) case string(enums.FormatterTypeGraphvizConfig): - hiddenLayers := make([]*dtos.LayerConfig, 0) + hiddenLayers := make([]*dtos.Layer, 0) for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { for _, layer := range layersList { @@ -129,7 +129,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formattersList[enums.FormatterTypeGraphvizConfig] = formatterGraphvizConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*dtos.LayerConfig, 0) + groupLayer := make([]*dtos.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -149,7 +149,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formattersList[enums.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*dtos.LayerConfig, 0) + groupLayer := make([]*dtos.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -170,7 +170,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { if rulesetsData, ok := data["ruleset"]; ok { for rulesetLayerName, rulesetLayersNames := range rulesetsData.(map[string]interface{}) { - var rulesetOwningLayer *dtos.LayerConfig + var rulesetOwningLayer *dtos.Layer for _, layer := range layersList { if layer.Name == rulesetLayerName { @@ -179,7 +179,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - rulesetLayers := make([]*dtos.LayerConfig, 0) + rulesetLayers := make([]*dtos.Layer, 0) if rulesetLayersNames != nil { // If not ~ for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { @@ -270,7 +270,7 @@ func (c *DeptracConfig) SetupLayersData(layers interface{}) error { } func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { - layersList := make([]*dtos.LayerConfig, 0) + layersList := make([]*dtos.Layer, 0) for _, layerRawRaw := range list { layerRaw := layerRawRaw.(map[string]interface{}) diff --git a/pkg/domain/dtos/formatters_configs/graphviz_config.go b/pkg/domain/dtos/formatters_configs/graphviz_config.go index 0ec7525..06d8dfd 100644 --- a/pkg/domain/dtos/formatters_configs/graphviz_config.go +++ b/pkg/domain/dtos/formatters_configs/graphviz_config.go @@ -8,8 +8,8 @@ import ( type GraphvizConfig struct { name string PointToGroups bool - HiddenLayers []*dtos.LayerConfig - Groups map[string][]*dtos.LayerConfig + HiddenLayers []*dtos.Layer + Groups map[string][]*dtos.Layer } func (g *GraphvizConfig) HasHiddenLayer(name string) bool { @@ -35,8 +35,8 @@ func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", PointToGroups: false, - HiddenLayers: make([]*dtos.LayerConfig, 0), - Groups: make(map[string][]*dtos.LayerConfig), + HiddenLayers: make([]*dtos.Layer, 0), + Groups: make(map[string][]*dtos.Layer), } } @@ -53,12 +53,12 @@ func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { return g } -func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*dtos.LayerConfig) *GraphvizConfig { +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*dtos.Layer) *GraphvizConfig { g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*dtos.LayerConfig) *GraphvizConfig { +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*dtos.Layer) *GraphvizConfig { g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } diff --git a/pkg/domain/dtos/formatters_configs/mermaid_js_config.go b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go index 998f220..b046b28 100644 --- a/pkg/domain/dtos/formatters_configs/mermaid_js_config.go +++ b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go @@ -8,14 +8,14 @@ import ( type MermaidJsConfig struct { name string Direction string - Groups map[string][]*dtos.LayerConfig + Groups map[string][]*dtos.Layer } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", Direction: "TD", - Groups: make(map[string][]*dtos.LayerConfig), + Groups: make(map[string][]*dtos.Layer), } } @@ -28,7 +28,7 @@ func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { return m } -func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*dtos.LayerConfig) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*dtos.Layer) *MermaidJsConfig { for _, config := range layerConfigs { m.Groups[name] = append(m.Groups[name], config) } diff --git a/pkg/domain/dtos/layer_config.go b/pkg/domain/dtos/layer.go similarity index 64% rename from pkg/domain/dtos/layer_config.go rename to pkg/domain/dtos/layer.go index 88b07ef..b1d7bce 100644 --- a/pkg/domain/dtos/layer_config.go +++ b/pkg/domain/dtos/layer.go @@ -2,24 +2,24 @@ package dtos import "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" -type LayerConfig struct { +type Layer struct { Collectors []*collectors_configs.CollectorConfig Name string } -func NewLayer(name string, collectorConfigs []*collectors_configs.CollectorConfig) *LayerConfig { - l := &LayerConfig{Name: name} +func NewLayer(name string, collectorConfigs []*collectors_configs.CollectorConfig) *Layer { + l := &Layer{Name: name} l.setCollectors(collectorConfigs...) return l } -func NewLayerWithName(name string) *LayerConfig { - return &LayerConfig{Name: name} +func NewLayerWithName(name string) *Layer { + return &Layer{Name: name} } -func (l *LayerConfig) setCollectors(collectorConfigs ...*collectors_configs.CollectorConfig) *LayerConfig { +func (l *Layer) setCollectors(collectorConfigs ...*collectors_configs.CollectorConfig) *Layer { for _, collectorConfig := range collectorConfigs { l.Collectors = append(l.Collectors, collectorConfig) } @@ -27,7 +27,7 @@ func (l *LayerConfig) setCollectors(collectorConfigs ...*collectors_configs.Coll return l } -func (l *LayerConfig) ToArray() map[string]interface{} { +func (l *Layer) ToArray() map[string]interface{} { collectors := make([]interface{}, len(l.Collectors)) for i, collector := range l.Collectors { collectors[i] = collector.ToArray() diff --git a/pkg/domain/dtos/tokens_references/class_like_reference.go b/pkg/domain/dtos/tokens_references/class_like_reference.go index 4b2c4e8..02750b9 100644 --- a/pkg/domain/dtos/tokens_references/class_like_reference.go +++ b/pkg/domain/dtos/tokens_references/class_like_reference.go @@ -2,21 +2,21 @@ package tokens_references import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassLikeReference struct { Type *enums.ClassLikeType - classLikeName *tokens2.ClassLikeToken + classLikeName *tokens.ClassLikeToken Inherits []*ast_map.AstInherit - Dependencies []*tokens2.DependencyToken + Dependencies []*tokens.DependencyToken fileReference *FileReference *TaggedTokenReference } -func NewClassLikeReference(classLikeName *tokens2.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens2.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { +func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { if classLikeType == nil { classLikeTypeTmp := enums.TypeClasslike classLikeType = &classLikeTypeTmp @@ -40,10 +40,10 @@ func (c *ClassLikeReference) GetFilepath() *string { return c.fileReference.Filepath } -func (c *ClassLikeReference) GetToken() tokens2.TokenInterface { +func (c *ClassLikeReference) GetToken() tokens.TokenInterface { return c.classLikeName } -func (c *ClassLikeReference) GetDependencies() []*tokens2.DependencyToken { +func (c *ClassLikeReference) GetDependencies() []*tokens.DependencyToken { return c.Dependencies } diff --git a/pkg/domain/dtos/tokens_references/file_reference.go b/pkg/domain/dtos/tokens_references/file_reference.go index 8880351..cc06d96 100644 --- a/pkg/domain/dtos/tokens_references/file_reference.go +++ b/pkg/domain/dtos/tokens_references/file_reference.go @@ -1,17 +1,17 @@ package tokens_references import ( - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type FileReference struct { Filepath *string ClassLikeReferences []*ClassLikeReference FunctionReferences []*FunctionReference - Dependencies []*tokens2.DependencyToken + Dependencies []*tokens.DependencyToken } -func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens2.DependencyToken) *FileReference { +func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens.DependencyToken) *FileReference { structLikeReferencesMapped := make([]*ClassLikeReference, 0) functionReferencesMapped := make([]*FunctionReference, 0) @@ -37,10 +37,10 @@ func (r *FileReference) GetFilepath() *string { return r.Filepath } -func (r *FileReference) GetToken() tokens2.TokenInterface { - return tokens2.NewFileToken(r.Filepath) +func (r *FileReference) GetToken() tokens.TokenInterface { + return tokens.NewFileToken(r.Filepath) } -func (r *FileReference) GetDependencies() []*tokens2.DependencyToken { +func (r *FileReference) GetDependencies() []*tokens.DependencyToken { return r.Dependencies } diff --git a/pkg/domain/dtos/tokens_references/function_reference.go b/pkg/domain/dtos/tokens_references/function_reference.go index 83feb9f..ff52aaa 100644 --- a/pkg/domain/dtos/tokens_references/function_reference.go +++ b/pkg/domain/dtos/tokens_references/function_reference.go @@ -1,17 +1,17 @@ package tokens_references import ( - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type FunctionReference struct { *TaggedTokenReference - functionName *tokens2.FunctionToken - Dependencies []*tokens2.DependencyToken + functionName *tokens.FunctionToken + Dependencies []*tokens.DependencyToken fileReference *FileReference } -func NewFunctionReference(functionName *tokens2.FunctionToken, dependencies []*tokens2.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { +func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { for _, dependency := range dependencies { if dependency.Token.ToString() == "" { panic("1") @@ -34,10 +34,10 @@ func (r *FunctionReference) GetFilepath() *string { return r.fileReference.Filepath } -func (r *FunctionReference) GetToken() tokens2.TokenInterface { +func (r *FunctionReference) GetToken() tokens.TokenInterface { return r.functionName } -func (r *FunctionReference) GetDependencies() []*tokens2.DependencyToken { +func (r *FunctionReference) GetDependencies() []*tokens.DependencyToken { return r.Dependencies } diff --git a/pkg/layers/layer_resolver.go b/pkg/layers/layer_resolver.go index 76c12da..573fdce 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -13,7 +13,7 @@ import ( // LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { collectorResolver collectors_shared.CollectorResolverInterface - layersConfig []*dtos.LayerConfig + layersConfig []*dtos.Layer layers map[string][]*violations.Collectable initialized bool resolved map[string]map[string]bool @@ -21,7 +21,7 @@ type LayerResolver struct { } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collectors_shared.CollectorResolverInterface, layersConfig []*dtos.LayerConfig) LayerResolverInterface { +func NewLayerResolver(collectorResolver collectors_shared.CollectorResolverInterface, layersConfig []*dtos.Layer) LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, diff --git a/pkg/rules/ruleset.go b/pkg/rules/ruleset.go index 5dc400f..b0745be 100644 --- a/pkg/rules/ruleset.go +++ b/pkg/rules/ruleset.go @@ -5,11 +5,11 @@ import ( ) type Ruleset struct { - LayerConfig *dtos.LayerConfig - AccessableLayers []*dtos.LayerConfig + LayerConfig *dtos.Layer + AccessableLayers []*dtos.Layer } -func NewRuleset(layerConfig *dtos.LayerConfig, layerConfigs []*dtos.LayerConfig) *Ruleset { +func NewRuleset(layerConfig *dtos.Layer, layerConfigs []*dtos.Layer) *Ruleset { r := &Ruleset{LayerConfig: layerConfig} r.Accesses(layerConfigs...) @@ -17,11 +17,11 @@ func NewRuleset(layerConfig *dtos.LayerConfig, layerConfigs []*dtos.LayerConfig) return r } -func NewForLayer(layerConfig *dtos.LayerConfig) *Ruleset { - return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*dtos.LayerConfig, 0)} +func NewForLayer(layerConfig *dtos.Layer) *Ruleset { + return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*dtos.Layer, 0)} } -func (r *Ruleset) Accesses(layerConfigs ...*dtos.LayerConfig) *Ruleset { +func (r *Ruleset) Accesses(layerConfigs ...*dtos.Layer) *Ruleset { for _, config := range layerConfigs { r.AccessableLayers = append(r.AccessableLayers, config) } diff --git a/pkg/rules/ruleset_usage_analyser.go b/pkg/rules/ruleset_usage_analyser.go index 9fb0c7e..beabfc8 100644 --- a/pkg/rules/ruleset_usage_analyser.go +++ b/pkg/rules/ruleset_usage_analyser.go @@ -14,7 +14,7 @@ type RulesetUsageAnalyser struct { astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver tokenResolver *tokens.TokenResolver - layers []*dtos.LayerConfig + layers []*dtos.Layer } func NewRulesetUsageAnalyser( @@ -23,7 +23,7 @@ func NewRulesetUsageAnalyser( astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, tokenResolver *tokens.TokenResolver, - layers []*dtos.LayerConfig, + layers []*dtos.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, From 0345daba01f184aa36069997fee9c9c3b2db2686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 00:37:46 +0300 Subject: [PATCH 16/40] refactor: structure --- pkg/app/changed_files_runner.go | 3 +- pkg/dispatchers/event_helper.go | 10 +-- .../dtos/analysis_results/analysis_result.go | 79 +++++++++++++++++++ .../issues}/error.go | 2 +- .../issues}/warning.go | 2 +- .../violations_rules}/allowed.go | 2 +- .../violations_rules}/rule_interface.go | 2 +- .../violations_rules}/skipped_violation.go | 2 +- .../violations_rules}/uncovered.go | 2 +- .../violations_rules}/violation.go | 2 +- .../violation_creating_interface.go | 2 +- pkg/events/post_process_event.go | 10 +-- pkg/events/process_event.go | 10 +-- .../codeclimate_output_formatter.go | 19 +++-- pkg/formatters/console_output_formatter.go | 13 ++- .../github_actions_output_formatter.go | 15 ++-- pkg/formatters/graph_viz_output_formatter.go | 8 +- pkg/formatters/json_output_formatter.go | 14 ++-- pkg/formatters/junit_output_formatter.go | 14 ++-- pkg/formatters/table_output_formatter.go | 19 +++-- pkg/formatters/xml_output_formatter.go | 6 +- pkg/results/output_result.go | 47 +++++------ pkg/rules/analysis_result.go | 78 ------------------ pkg/subscribers/allow_dependency_handler.go | 4 +- pkg/subscribers/dependency_layers_analyser.go | 12 +-- .../depends_on_disallowed_layer.go | 4 +- .../layer_dependencies_analyser.go | 10 +-- .../uncovered_dependent_handler.go | 4 +- .../unmatched_skipped_violations.go | 4 +- 29 files changed, 199 insertions(+), 200 deletions(-) create mode 100644 pkg/domain/dtos/analysis_results/analysis_result.go rename pkg/domain/dtos/{violations => analysis_results/issues}/error.go (90%) rename pkg/domain/dtos/{violations => analysis_results/issues}/warning.go (97%) rename pkg/{rules => domain/dtos/analysis_results/violations_rules}/allowed.go (96%) rename pkg/{rules => domain/dtos/analysis_results/violations_rules}/rule_interface.go (89%) rename pkg/domain/dtos/{violations => analysis_results/violations_rules}/skipped_violation.go (97%) rename pkg/domain/dtos/{violations => analysis_results/violations_rules}/uncovered.go (95%) rename pkg/domain/dtos/{violations => analysis_results/violations_rules}/violation.go (98%) rename pkg/domain/dtos/{violations => analysis_results/violations_rules}/violation_creating_interface.go (91%) delete mode 100644 pkg/rules/analysis_result.go diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index 44a74c5..6eac14c 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -2,6 +2,7 @@ package app import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -64,7 +65,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output r return nil } -func (r *ChangedFilesRunner) calculateLayerDependencies(rulesList []rules.RuleInterface) map[string]map[string]string { +func (r *ChangedFilesRunner) calculateLayerDependencies(rulesList []violations_rules.RuleInterface) map[string]map[string]string { layersDependOnLayers := make(map[string]map[string]string) for _, rule := range rulesList { if _, ok := rule.(rules.CoveredRuleInterface); !ok { diff --git a/pkg/dispatchers/event_helper.go b/pkg/dispatchers/event_helper.go index a3bcdae..083b5a4 100644 --- a/pkg/dispatchers/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -1,11 +1,11 @@ package dispatchers import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) // EventHelper - Utility class for managing adding violations that could be skipped. @@ -54,10 +54,10 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *rules.AnalysisResult, dependentLayer string, violationCreatingRule violations.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *analysis_results.AnalysisResult, dependentLayer string, violationCreatingRule violations2.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(violations.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(violations2.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(violations.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(violations2.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/domain/dtos/analysis_results/analysis_result.go b/pkg/domain/dtos/analysis_results/analysis_result.go new file mode 100644 index 0000000..9c04de6 --- /dev/null +++ b/pkg/domain/dtos/analysis_results/analysis_result.go @@ -0,0 +1,79 @@ +package analysis_results + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" +) + +// AnalysisResult - Describes the result_contract of a source code analysis. +type AnalysisResult struct { + rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface + + warnings []*issues.Warning + + errors []*issues.Error +} + +func NewAnalysisResult() *AnalysisResult { + return &AnalysisResult{ + rules: make(map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface), + warnings: make([]*issues.Warning, 0), + errors: make([]*issues.Error, 0), + } +} + +func (r *AnalysisResult) ruleTypeByRule(rule violations_rules.RuleInterface) enums.RuleTypeEnum { + switch rule.(type) { + case *violations_rules.Violation: + return enums.TypeViolation + case *violations_rules.SkippedViolation: + return enums.TypeSkippedViolation + case *violations_rules.Uncovered: + return enums.TypeUncovered + case *violations_rules.Allowed: + return enums.TypeAllowed + default: + panic(fmt.Errorf("unknown rule type: %T", rule)) + } +} + +func (r *AnalysisResult) AddRule(rule violations_rules.RuleInterface) { + ruleType := r.ruleTypeByRule(rule) + id := utils.SplObjectID(rule) + + if _, ok := r.rules[ruleType]; !ok { + r.rules[ruleType] = make(map[string]violations_rules.RuleInterface) + } + + r.rules[ruleType][id] = rule +} + +func (r *AnalysisResult) RemoveRule(rule violations_rules.RuleInterface) { + ruleType := r.ruleTypeByRule(rule) + id := utils.SplObjectID(rule) + + delete(r.rules[ruleType], id) +} + +func (r *AnalysisResult) Rules() map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface { + return r.rules +} + +func (r *AnalysisResult) AddWarning(warning *issues.Warning) { + r.warnings = append(r.warnings, warning) +} + +func (r *AnalysisResult) Warnings() []*issues.Warning { + return r.warnings +} + +func (r *AnalysisResult) AddError(error *issues.Error) { + r.errors = append(r.errors, error) +} + +func (r *AnalysisResult) Errors() []*issues.Error { + return r.errors +} diff --git a/pkg/domain/dtos/violations/error.go b/pkg/domain/dtos/analysis_results/issues/error.go similarity index 90% rename from pkg/domain/dtos/violations/error.go rename to pkg/domain/dtos/analysis_results/issues/error.go index 903af7a..819ac75 100644 --- a/pkg/domain/dtos/violations/error.go +++ b/pkg/domain/dtos/analysis_results/issues/error.go @@ -1,4 +1,4 @@ -package violations +package issues type Error struct { Message string diff --git a/pkg/domain/dtos/violations/warning.go b/pkg/domain/dtos/analysis_results/issues/warning.go similarity index 97% rename from pkg/domain/dtos/violations/warning.go rename to pkg/domain/dtos/analysis_results/issues/warning.go index 4e187f4..aa1bd1d 100644 --- a/pkg/domain/dtos/violations/warning.go +++ b/pkg/domain/dtos/analysis_results/issues/warning.go @@ -1,4 +1,4 @@ -package violations +package issues import ( "fmt" diff --git a/pkg/rules/allowed.go b/pkg/domain/dtos/analysis_results/violations_rules/allowed.go similarity index 96% rename from pkg/rules/allowed.go rename to pkg/domain/dtos/analysis_results/violations_rules/allowed.go index b83b4e5..b7ec94f 100644 --- a/pkg/rules/allowed.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/allowed.go @@ -1,4 +1,4 @@ -package rules +package violations_rules import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" diff --git a/pkg/rules/rule_interface.go b/pkg/domain/dtos/analysis_results/violations_rules/rule_interface.go similarity index 89% rename from pkg/rules/rule_interface.go rename to pkg/domain/dtos/analysis_results/violations_rules/rule_interface.go index aadb289..3316bea 100644 --- a/pkg/rules/rule_interface.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/rule_interface.go @@ -1,4 +1,4 @@ -package rules +package violations_rules import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" diff --git a/pkg/domain/dtos/violations/skipped_violation.go b/pkg/domain/dtos/analysis_results/violations_rules/skipped_violation.go similarity index 97% rename from pkg/domain/dtos/violations/skipped_violation.go rename to pkg/domain/dtos/analysis_results/violations_rules/skipped_violation.go index d121581..e643b3a 100644 --- a/pkg/domain/dtos/violations/skipped_violation.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/skipped_violation.go @@ -1,4 +1,4 @@ -package violations +package violations_rules import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" diff --git a/pkg/domain/dtos/violations/uncovered.go b/pkg/domain/dtos/analysis_results/violations_rules/uncovered.go similarity index 95% rename from pkg/domain/dtos/violations/uncovered.go rename to pkg/domain/dtos/analysis_results/violations_rules/uncovered.go index 59c813d..4cdb77f 100644 --- a/pkg/domain/dtos/violations/uncovered.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/uncovered.go @@ -1,4 +1,4 @@ -package violations +package violations_rules import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" diff --git a/pkg/domain/dtos/violations/violation.go b/pkg/domain/dtos/analysis_results/violations_rules/violation.go similarity index 98% rename from pkg/domain/dtos/violations/violation.go rename to pkg/domain/dtos/analysis_results/violations_rules/violation.go index 4a3cc1f..d084eda 100644 --- a/pkg/domain/dtos/violations/violation.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/violation.go @@ -1,4 +1,4 @@ -package violations +package violations_rules import ( "fmt" diff --git a/pkg/domain/dtos/violations/violation_creating_interface.go b/pkg/domain/dtos/analysis_results/violations_rules/violation_creating_interface.go similarity index 91% rename from pkg/domain/dtos/violations/violation_creating_interface.go rename to pkg/domain/dtos/analysis_results/violations_rules/violation_creating_interface.go index 65915b4..07e6086 100644 --- a/pkg/domain/dtos/violations/violation_creating_interface.go +++ b/pkg/domain/dtos/analysis_results/violations_rules/violation_creating_interface.go @@ -1,4 +1,4 @@ -package violations +package violations_rules // ViolationCreatingInterface - Every rule that can create a Violation has to implement this interface. It is used for output processing to display what rule has been violated. type ViolationCreatingInterface interface { diff --git a/pkg/events/post_process_event.go b/pkg/events/post_process_event.go index faa2904..1764866 100644 --- a/pkg/events/post_process_event.go +++ b/pkg/events/post_process_event.go @@ -1,24 +1,24 @@ package events import ( - "github.com/KoNekoD/go-deptrac/pkg/rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" ) // PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result_contract of the analysis after it has completed and before it is returned for output processing. type PostProcessEvent struct { - result *rules.AnalysisResult + result *analysis_results.AnalysisResult } -func NewPostProcessEvent(result *rules.AnalysisResult) *PostProcessEvent { +func NewPostProcessEvent(result *analysis_results.AnalysisResult) *PostProcessEvent { return &PostProcessEvent{ result: result, } } -func (e *PostProcessEvent) GetResult() *rules.AnalysisResult { +func (e *PostProcessEvent) GetResult() *analysis_results.AnalysisResult { return e.result } -func (e *PostProcessEvent) ReplaceResult(result *rules.AnalysisResult) { +func (e *PostProcessEvent) ReplaceResult(result *analysis_results.AnalysisResult) { e.result = result } diff --git a/pkg/events/process_event.go b/pkg/events/process_event.go index 827052d..b6c8b63 100644 --- a/pkg/events/process_event.go +++ b/pkg/events/process_event.go @@ -1,9 +1,9 @@ package events import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) // ProcessEvent - Event that is triggered on every found dependency_contract. Used to apply rules on the found dependencies. @@ -13,7 +13,7 @@ type ProcessEvent struct { DependerLayer string DependentReference tokens_references.TokenReferenceInterface DependentLayers map[string]bool - result *rules.AnalysisResult + result *analysis_results.AnalysisResult } func NewProcessEvent( @@ -22,7 +22,7 @@ func NewProcessEvent( dependerLayer string, dependentReference tokens_references.TokenReferenceInterface, dependentLayers map[string]bool, - result *rules.AnalysisResult, + result *analysis_results.AnalysisResult, ) *ProcessEvent { return &ProcessEvent{ Dependency: dependency, @@ -34,10 +34,10 @@ func NewProcessEvent( } } -func (e *ProcessEvent) GetResult() *rules.AnalysisResult { +func (e *ProcessEvent) GetResult() *analysis_results.AnalysisResult { return e.result } -func (e *ProcessEvent) ReplaceResult(result *rules.AnalysisResult) { +func (e *ProcessEvent) ReplaceResult(result *analysis_results.AnalysisResult) { e.result = result } diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go index 80cd43e..9430ff4 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -4,11 +4,10 @@ import ( "crypto/sha1" "encoding/json" "fmt" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "os" ) @@ -63,34 +62,34 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, o return nil } -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *violations2.Violation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *violations_rules.Violation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) } -func (f *CodeclimateOutputFormatter) getFailureMessage(violation *violations2.Violation) *string { +func (f *CodeclimateOutputFormatter) getFailureMessage(violation *violations_rules.Violation) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *violations2.SkippedViolation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *violations_rules.SkippedViolation, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) } -func (f *CodeclimateOutputFormatter) getWarningMessage(violation *violations2.SkippedViolation) *string { +func (f *CodeclimateOutputFormatter) getWarningMessage(violation *violations_rules.SkippedViolation) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *violations2.Uncovered, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *violations_rules.Uncovered, config *enums2.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) } -func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *violations2.Uncovered) *string { +func (f *CodeclimateOutputFormatter) getUncoveredMessage(violation *violations_rules.Uncovered) *string { dependency := violation.GetDependency() return utils.AsPtr(fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender(), dependency.GetDependent(), violation.Layer)) } -func (f *CodeclimateOutputFormatter) buildRuleArray(rule rules.RuleInterface, message, severity *string) map[string]interface{} { +func (f *CodeclimateOutputFormatter) buildRuleArray(rule violations_rules.RuleInterface, message, severity *string) map[string]interface{} { return map[string]interface{}{ "type": "issue", "check_name": "Dependency violation", @@ -107,7 +106,7 @@ func (f *CodeclimateOutputFormatter) buildRuleArray(rule rules.RuleInterface, me } } -func (f *CodeclimateOutputFormatter) buildFingerprint(rule rules.RuleInterface) string { +func (f *CodeclimateOutputFormatter) buildFingerprint(rule violations_rules.RuleInterface) string { data := fmt.Sprintf("%s,%s,%s,%s,%d", rule, rule.GetDependency().GetDepender(), diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index 307913e..2e60acd 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -3,11 +3,10 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "strings" ) @@ -23,12 +22,12 @@ func (f *ConsoleOutputFormatter) GetName() string { func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { - f.printViolation(rule.(*violations2.Violation), output) + f.printViolation(rule.(*violations_rules.Violation), output) } if input.ReportSkipped { for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { - f.printViolation(rule.(*violations2.SkippedViolation), output) + f.printViolation(rule.(*violations_rules.SkippedViolation), output) } } @@ -47,18 +46,18 @@ func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, outpu f.printSummary(outputResult, output) } -func (f *ConsoleOutputFormatter) printViolation(rule rules.RuleInterface, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output results.OutputInterface) { dep := rule.GetDependency() skippedText := "" dependerLayer := "" dependentLayer := "" - if ruleAsserted, ok := rule.(*violations2.SkippedViolation); ok { + if ruleAsserted, ok := rule.(*violations_rules.SkippedViolation); ok { skippedText = "[SKIPPED] " dependerLayer = ruleAsserted.GetDependerLayer() dependentLayer = ruleAsserted.GetDependentLayer() - } else if ruleAsserted, ok := rule.(*violations2.Violation); ok { + } else if ruleAsserted, ok := rule.(*violations_rules.Violation); ok { dependerLayer = ruleAsserted.GetDependerLayer() dependentLayer = ruleAsserted.GetDependentLayer() } else { diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go index 7005e4c..8fb2320 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/formatters/github_actions_output_formatter.go @@ -2,11 +2,10 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "strings" ) @@ -42,11 +41,11 @@ func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult return nil } -func (g *GithubActionsOutputFormatter) determineLogLevel(rule rules.RuleInterface) string { +func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.RuleInterface) string { switch rule.(type) { - case *violations2.Violation: + case *violations_rules.Violation: return "error" - case *violations2.SkippedViolation: + case *violations_rules.SkippedViolation: return "warning" default: return "debug" @@ -98,17 +97,17 @@ func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResul } } -func (g *GithubActionsOutputFormatter) printViolation(rule rules.RuleInterface, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output results.OutputInterface) { dependency := rule.GetDependency() prefix := "" dependerLayer := "" dependentLayer := "" switch v := rule.(type) { - case *violations2.SkippedViolation: + case *violations_rules.SkippedViolation: prefix = "[SKIPPED] " dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() - case *violations2.Violation: + case *violations_rules.Violation: dependerLayer = v.GetDependerLayer() dependentLayer = v.GetDependentLayer() } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index 1333e08..052ac5e 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -2,8 +2,8 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" @@ -48,7 +48,7 @@ func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output res return nil } -func (f *GraphVizOutputFormatter) calculateViolations(violations []*violations2.Violation) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateViolations(violations []*violations_rules.Violation) map[string]map[string]int { layerViolations := make(map[string]map[string]int) for _, violation := range violations { dependerLayer := violation.GetDependerLayer() @@ -63,7 +63,7 @@ func (f *GraphVizOutputFormatter) calculateViolations(violations []*violations2. return layerViolations } -func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []rules.RuleInterface) map[string]map[string]int { +func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []violations_rules.RuleInterface) map[string]map[string]int { layersDependOnLayers := make(map[string]map[string]int) for _, rule := range rulesList { switch r := rule.(type) { @@ -76,7 +76,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []rules.R } layersDependOnLayers[layerA][layerB]++ - case *violations2.Uncovered: + case *violations_rules.Uncovered: if layersDependOnLayers[r.Layer] == nil { layersDependOnLayers[r.Layer] = make(map[string]int) } diff --git a/pkg/formatters/json_output_formatter.go b/pkg/formatters/json_output_formatter.go index 5c8e056..dffe25b 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/json" "fmt" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "os" @@ -73,7 +73,7 @@ func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output r return nil } -func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *violations2.Violation) { +func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, violation *violations_rules.Violation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getFailureMessage(violation), @@ -82,7 +82,7 @@ func (f *JsonOutputFormatter) addFailure(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getFailureMessage(violation *violations2.Violation) string { +func (f *JsonOutputFormatter) getFailureMessage(violation *violations_rules.Violation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -92,7 +92,7 @@ func (f *JsonOutputFormatter) getFailureMessage(violation *violations2.Violation ) } -func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *violations2.SkippedViolation) { +func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, violation *violations_rules.SkippedViolation) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getWarningMessage(violation), @@ -101,7 +101,7 @@ func (f *JsonOutputFormatter) addSkipped(violations map[string]FileViolations, v }) } -func (f *JsonOutputFormatter) getWarningMessage(violation *violations2.SkippedViolation) string { +func (f *JsonOutputFormatter) getWarningMessage(violation *violations_rules.SkippedViolation) string { dependency := violation.GetDependency() return fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender().ToString(), @@ -111,7 +111,7 @@ func (f *JsonOutputFormatter) getWarningMessage(violation *violations2.SkippedVi ) } -func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *violations2.Uncovered) { +func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, violation *violations_rules.Uncovered) { className := violation.GetDependency().GetContext().FileOccurrence.FilePath violations[className] = appendViolation(violations[className], Message{ Message: f.getUncoveredMessage(violation), @@ -120,7 +120,7 @@ func (f *JsonOutputFormatter) addUncovered(violations map[string]FileViolations, }) } -func (f *JsonOutputFormatter) getUncoveredMessage(violation *violations2.Uncovered) string { +func (f *JsonOutputFormatter) getUncoveredMessage(violation *violations_rules.Uncovered) string { dependency := violation.GetDependency() return fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dependency.GetDepender().ToString(), diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go index 34040f2..e7c8876 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/xml" "fmt" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -79,7 +79,7 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str Classname: rule.GetDependency().GetDepender().ToString(), } switch r := rule.(type) { - case *violations2.Violation: + case *violations_rules.Violation: testSuite.Failures++ testCase.Failures = append(testCase.Failures, struct { Message string `xml:"message,attr"` @@ -94,12 +94,12 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str ), Type: "WARNING", }) - case *violations2.SkippedViolation: + case *violations_rules.SkippedViolation: testSuite.Skipped++ testCase.Skipped = append(testCase.Skipped, struct { XMLName xml.Name `xml:"skipped"` }{}) - case *violations2.Uncovered: + case *violations_rules.Uncovered: testCase.Warnings = append(testCase.Warnings, struct { Message string `xml:"message,attr"` Type string `xml:"type,attr"` @@ -126,13 +126,13 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str return xml.Header + string(xmlData), nil } -func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResult) map[string][]rules.RuleInterface { - layers := make(map[string][]rules.RuleInterface) +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResult) map[string][]violations_rules.RuleInterface { + layers := make(map[string][]violations_rules.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { case rules.CoveredRuleInterface: layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) - case *violations2.Uncovered: + case *violations_rules.Uncovered: layers[r.Layer] = append(layers[r.Layer], rule) } } diff --git a/pkg/formatters/table_output_formatter.go b/pkg/formatters/table_output_formatter.go index d49f0db..baf4adb 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -2,11 +2,10 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -24,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { } func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { - groupedRules := make(map[string][]rules.RuleInterface) + groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { groupedRules[ruleItem.GetDependerLayer()] = append(groupedRules[ruleItem.GetDependerLayer()], ruleItem) @@ -49,7 +48,7 @@ func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output for _, layer := range groupedRulesLayers { rulesList := groupedRules[layer] - slices.SortFunc(rulesList, func(a, b rules.RuleInterface) int { + slices.SortFunc(rulesList, func(a, b violations_rules.RuleInterface) int { if a.GetDependency().GetDepender().ToString() < b.GetDependency().GetDepender().ToString() { return -1 } @@ -59,11 +58,11 @@ func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output rows := make([][]string, 0) for _, ruleItem := range rulesList { switch item := ruleItem.(type) { - case *violations2.Uncovered: + case *violations_rules.Uncovered: rows = append(rows, t.uncoveredRow(item, outputFormatterInput.FailOnUncovered)) - case *violations2.Violation: + case *violations_rules.Violation: rows = append(rows, t.violationRow(item)) - case *violations2.SkippedViolation: + case *violations_rules.SkippedViolation: rows = append(rows, t.skippedViolationRow(item)) } } @@ -80,7 +79,7 @@ func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output return nil } -func (t *TableOutputFormatter) skippedViolationRow(rule *violations2.SkippedViolation) []string { +func (t *TableOutputFormatter) skippedViolationRow(rule *violations_rules.SkippedViolation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s (%s)", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString(), rule.GetDependentLayer()) if len(gotDependency.Serialize()) > 1 { @@ -92,7 +91,7 @@ func (t *TableOutputFormatter) skippedViolationRow(rule *violations2.SkippedViol } -func (t *TableOutputFormatter) violationRow(rule *violations2.Violation) []string { +func (t *TableOutputFormatter) violationRow(rule *violations_rules.Violation) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s must not depend on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) message += fmt.Sprintf("\n%s (To fix %s(You need to add to the array by this key) -> %s(That value needs to be added to that array))", rule.RuleDescription(), rule.GetDependerLayer(), rule.GetDependentLayer()) @@ -165,7 +164,7 @@ func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output ) } -func (t *TableOutputFormatter) uncoveredRow(rule *violations2.Uncovered, reportAsError bool) []string { +func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, reportAsError bool) []string { gotDependency := rule.GetDependency() message := color.Sprintf("%s has uncovered dependency_contract on %s", gotDependency.GetDepender().ToString(), gotDependency.GetDependent().ToString()) if len(gotDependency.Serialize()) > 1 { diff --git a/pkg/formatters/xml_output_formatter.go b/pkg/formatters/xml_output_formatter.go index 96b737e..8506ba5 100644 --- a/pkg/formatters/xml_output_formatter.go +++ b/pkg/formatters/xml_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/xml" "fmt" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" "os" @@ -65,7 +65,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int var line int switch r := rule.(type) { - case violations2.Violation: + case violations_rules.Violation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() @@ -75,7 +75,7 @@ func (f *XMLOutputFormatter) addRule(ruleType string, entries *Entries, rule int file = fileOccurrence.FilePath line = fileOccurrence.Line - case violations2.SkippedViolation: + case violations_rules.SkippedViolation: layerA = r.GetDependerLayer() layerB = r.GetDependentLayer() dependency := r.GetDependency() diff --git a/pkg/results/output_result.go b/pkg/results/output_result.go index 7c71c75..175356b 100644 --- a/pkg/results/output_result.go +++ b/pkg/results/output_result.go @@ -1,23 +1,24 @@ package results import ( - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" + analysis_results_failure2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) // OutputResult - Represents a result_contract ready for output formatting type OutputResult struct { - rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface - Errors []*violations2.Error - Warnings []*violations2.Warning + rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface + Errors []*analysis_results_failure2.Error + Warnings []*analysis_results_failure2.Warning } -func newOutputResult(rules map[enums.RuleTypeEnum]map[string]rules.RuleInterface, errors []*violations2.Error, warnings []*violations2.Warning) *OutputResult { +func newOutputResult(rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface, errors []*analysis_results_failure2.Error, warnings []*analysis_results_failure2.Warning) *OutputResult { return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} } -func NewOutputResultFromAnalysisResult(analysisResult *rules.AnalysisResult) *OutputResult { +func NewOutputResultFromAnalysisResult(analysisResult *analysis_results.AnalysisResult) *OutputResult { return newOutputResult( analysisResult.Rules(), analysisResult.Errors(), @@ -25,10 +26,10 @@ func NewOutputResultFromAnalysisResult(analysisResult *rules.AnalysisResult) *Ou ) } -func (r *OutputResult) AllOf(ruleType enums.RuleTypeEnum) []rules.RuleInterface { +func (r *OutputResult) AllOf(ruleType enums.RuleTypeEnum) []violations_rules.RuleInterface { rulesByIds, ok := r.rules[ruleType] if ok { - rules := make([]rules.RuleInterface, 0, len(rulesByIds)) + rules := make([]violations_rules.RuleInterface, 0, len(rulesByIds)) for _, rule := range rulesByIds { rules = append(rules, rule) @@ -38,8 +39,8 @@ func (r *OutputResult) AllOf(ruleType enums.RuleTypeEnum) []rules.RuleInterface } return nil } -func (r *OutputResult) AllRules() []rules.RuleInterface { - var rules []rules.RuleInterface +func (r *OutputResult) AllRules() []violations_rules.RuleInterface { + var rules []violations_rules.RuleInterface for _, ruleArray := range r.rules { for _, ruleItem := range ruleArray { rules = append(rules, ruleItem) @@ -47,12 +48,12 @@ func (r *OutputResult) AllRules() []rules.RuleInterface { } return rules } -func (r *OutputResult) Violations() []*violations2.Violation { +func (r *OutputResult) Violations() []*violations_rules.Violation { untyped := r.AllOf(enums.TypeViolation) - items := make([]*violations2.Violation, 0, len(untyped)) + items := make([]*violations_rules.Violation, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*violations2.Violation)) + items = append(items, item.(*violations_rules.Violation)) } return items @@ -62,23 +63,23 @@ func (r *OutputResult) HasViolations() bool { return len(r.Violations()) > 0 } -func (r *OutputResult) SkippedViolations() []*violations2.SkippedViolation { +func (r *OutputResult) SkippedViolations() []*violations_rules.SkippedViolation { untyped := r.AllOf(enums.TypeSkippedViolation) - items := make([]*violations2.SkippedViolation, 0, len(untyped)) + items := make([]*violations_rules.SkippedViolation, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*violations2.SkippedViolation)) + items = append(items, item.(*violations_rules.SkippedViolation)) } return items } -func (r *OutputResult) Uncovered() []*violations2.Uncovered { +func (r *OutputResult) Uncovered() []*violations_rules.Uncovered { untyped := r.AllOf(enums.TypeUncovered) - items := make([]*violations2.Uncovered, 0, len(untyped)) + items := make([]*violations_rules.Uncovered, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*violations2.Uncovered)) + items = append(items, item.(*violations_rules.Uncovered)) } return items @@ -92,12 +93,12 @@ func (r *OutputResult) HasAllowed() bool { return len(r.Allowed()) > 0 } -func (r *OutputResult) Allowed() []*rules.Allowed { +func (r *OutputResult) Allowed() []*violations_rules.Allowed { untyped := r.AllOf(enums.TypeAllowed) - items := make([]*rules.Allowed, 0, len(untyped)) + items := make([]*violations_rules.Allowed, 0, len(untyped)) for _, item := range untyped { - items = append(items, item.(*rules.Allowed)) + items = append(items, item.(*violations_rules.Allowed)) } return items diff --git a/pkg/rules/analysis_result.go b/pkg/rules/analysis_result.go deleted file mode 100644 index 3682e89..0000000 --- a/pkg/rules/analysis_result.go +++ /dev/null @@ -1,78 +0,0 @@ -package rules - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" - "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/domain/utils" -) - -// AnalysisResult - Describes the result_contract of a source code analysis. -type AnalysisResult struct { - rules map[enums.RuleTypeEnum]map[string]RuleInterface - - warnings []*violations.Warning - - errors []*violations.Error -} - -func NewAnalysisResult() *AnalysisResult { - return &AnalysisResult{ - rules: make(map[enums.RuleTypeEnum]map[string]RuleInterface), - warnings: make([]*violations.Warning, 0), - errors: make([]*violations.Error, 0), - } -} - -func (r *AnalysisResult) ruleTypeByRule(rule RuleInterface) enums.RuleTypeEnum { - switch rule.(type) { - case *violations.Violation: - return enums.TypeViolation - case *violations.SkippedViolation: - return enums.TypeSkippedViolation - case *violations.Uncovered: - return enums.TypeUncovered - case *Allowed: - return enums.TypeAllowed - default: - panic(fmt.Errorf("unknown rule type: %T", rule)) - } -} - -func (r *AnalysisResult) AddRule(rule RuleInterface) { - ruleType := r.ruleTypeByRule(rule) - id := utils.SplObjectID(rule) - - if _, ok := r.rules[ruleType]; !ok { - r.rules[ruleType] = make(map[string]RuleInterface) - } - - r.rules[ruleType][id] = rule -} - -func (r *AnalysisResult) RemoveRule(rule RuleInterface) { - ruleType := r.ruleTypeByRule(rule) - id := utils.SplObjectID(rule) - - delete(r.rules[ruleType], id) -} - -func (r *AnalysisResult) Rules() map[enums.RuleTypeEnum]map[string]RuleInterface { - return r.rules -} - -func (r *AnalysisResult) AddWarning(warning *violations.Warning) { - r.warnings = append(r.warnings, warning) -} - -func (r *AnalysisResult) Warnings() []*violations.Warning { - return r.warnings -} - -func (r *AnalysisResult) AddError(error *violations.Error) { - r.errors = append(r.errors, error) -} - -func (r *AnalysisResult) Errors() []*violations.Error { - return r.errors -} diff --git a/pkg/subscribers/allow_dependency_handler.go b/pkg/subscribers/allow_dependency_handler.go index 7425ec1..bda457b 100644 --- a/pkg/subscribers/allow_dependency_handler.go +++ b/pkg/subscribers/allow_dependency_handler.go @@ -1,8 +1,8 @@ package subscribers import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/events" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) type AllowDependencyHandler struct{} @@ -16,7 +16,7 @@ func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPr ruleset := event.GetResult() for dependentLayer := range event.DependentLayers { - ruleset.AddRule(rules.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) + ruleset.AddRule(violations_rules.NewAllowed(event.Dependency, event.DependerLayer, dependentLayer)) stopPropagation() } diff --git a/pkg/subscribers/dependency_layers_analyser.go b/pkg/subscribers/dependency_layers_analyser.go index 45ffe38..f0eb89a 100644 --- a/pkg/subscribers/dependency_layers_analyser.go +++ b/pkg/subscribers/dependency_layers_analyser.go @@ -5,12 +5,12 @@ import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -37,7 +37,7 @@ func NewDependencyLayersAnalyser( } } -func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { +func (a *DependencyLayersAnalyser) Analyse() (*analysis_results.AnalysisResult, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -46,8 +46,8 @@ func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { if err != nil { return nil, err } - analysisResult := rules.NewAnalysisResult() - warnings := make(map[string]*violations.Warning) + analysisResult := analysis_results.NewAnalysisResult() + warnings := make(map[string]*issues.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) @@ -72,7 +72,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*rules.AnalysisResult, error) { _, ok := warnings[depender.ToString()] if !ok && len(dependerLayers) > 1 { - warnings[depender.ToString()] = violations.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) + warnings[depender.ToString()] = issues.NewWarningTokenIsInMoreThanOneLayer(depender.ToString(), dependerLayers) } dependent := dependency.GetDependent() diff --git a/pkg/subscribers/depends_on_disallowed_layer.go b/pkg/subscribers/depends_on_disallowed_layer.go index 14cc12b..05b1b53 100644 --- a/pkg/subscribers/depends_on_disallowed_layer.go +++ b/pkg/subscribers/depends_on_disallowed_layer.go @@ -2,7 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/events" ) @@ -21,7 +21,7 @@ func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, s ruleset := event.GetResult() allowedLayers, err := d.eventHelper.LayerProvider.GetAllowedLayers(event.DependerLayer) if err != nil { - ruleset.AddError(violations.NewError(err.Error())) + ruleset.AddError(issues.NewError(err.Error())) stopPropagation() return nil } diff --git a/pkg/subscribers/layer_dependencies_analyser.go b/pkg/subscribers/layer_dependencies_analyser.go index fc390f7..a423d74 100644 --- a/pkg/subscribers/layer_dependencies_analyser.go +++ b/pkg/subscribers/layer_dependencies_analyser.go @@ -3,7 +3,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -29,8 +29,8 @@ func NewLayerDependenciesAnalyser( } } -func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*violations.Uncovered, error) { - uncoveredResult := make(map[string][]*violations.Uncovered) +func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *string) (map[string][]*violations_rules.Uncovered, error) { + uncoveredResult := make(map[string][]*violations_rules.Uncovered) astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -54,9 +54,9 @@ func (a *LayerDependenciesAnalyser) GetDependencies(layer string, targetLayer *s continue } if _, ok := uncoveredResult[dependentLayerName]; !ok { - uncoveredResult[dependentLayerName] = make([]*violations.Uncovered, 0) + uncoveredResult[dependentLayerName] = make([]*violations_rules.Uncovered, 0) } - uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], violations.NewUncovered(dependency, dependentLayerName)) + uncoveredResult[dependentLayerName] = append(uncoveredResult[dependentLayerName], violations_rules.NewUncovered(dependency, dependentLayerName)) } } } diff --git a/pkg/subscribers/uncovered_dependent_handler.go b/pkg/subscribers/uncovered_dependent_handler.go index 3e0b635..ba4d677 100644 --- a/pkg/subscribers/uncovered_dependent_handler.go +++ b/pkg/subscribers/uncovered_dependent_handler.go @@ -1,8 +1,8 @@ package subscribers import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" "github.com/KoNekoD/go-deptrac/pkg/events" ) @@ -27,7 +27,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, if dependentClassLike, ok := dependent.(*tokens.ClassLikeToken); ok { if !h.isIgnoreUncoveredInternalClasses(dependentClassLike) { - ruleset.AddRule(violations.NewUncovered(event.Dependency, event.DependerLayer)) + ruleset.AddRule(violations_rules.NewUncovered(event.Dependency, event.DependerLayer)) } } diff --git a/pkg/subscribers/unmatched_skipped_violations.go b/pkg/subscribers/unmatched_skipped_violations.go index a1b2c63..f34a86c 100644 --- a/pkg/subscribers/unmatched_skipped_violations.go +++ b/pkg/subscribers/unmatched_skipped_violations.go @@ -3,7 +3,7 @@ package subscribers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/violations" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" "github.com/KoNekoD/go-deptrac/pkg/events" ) @@ -21,7 +21,7 @@ func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, ruleset := event.GetResult() for tokenA, tokensB := range u.eventHelper.UnmatchedSkippedViolations() { for _, tokenB := range tokensB { - ruleset.AddError(violations.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) + ruleset.AddError(issues.NewError(fmt.Sprintf("Skipped violation \"%s\" for \"%s\" was not matched.", tokenB, tokenA))) } } stopPropagation() From 4c9201188ff8037fc07a5389b8616f3066416ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 00:39:24 +0300 Subject: [PATCH 17/40] refactor: structure --- pkg/app/services.go | 6 +++--- pkg/ast_map/ast_loader.go | 2 +- pkg/dependency_resolver.go | 6 +++--- pkg/dispatchers/event_helper.go | 2 +- pkg/{ => domain}/events/ast_file_analysed_event.go | 0 pkg/{ => domain}/events/post_flatten_event.go | 0 pkg/{ => domain}/events/post_process_event.go | 0 pkg/{ => domain}/events/pre_flatten_event.go | 0 pkg/{ => domain}/events/process_event.go | 0 pkg/layers/matching_layers_handler.go | 2 +- pkg/subscribers/allow_dependency_handler.go | 2 +- pkg/subscribers/console_subscriber.go | 8 ++++---- pkg/subscribers/dependency_layers_analyser.go | 6 +++--- pkg/subscribers/depends_on_disallowed_layer.go | 2 +- pkg/subscribers/depends_on_internal_token.go | 2 +- pkg/subscribers/depends_on_private_layer.go | 2 +- .../event_subscriber_interface_map_reg.go | 12 ++++++------ pkg/subscribers/progress_subscriber.go | 2 +- pkg/subscribers/uncovered_dependent_handler.go | 2 +- pkg/subscribers/unmatched_skipped_violations.go | 2 +- 20 files changed, 29 insertions(+), 29 deletions(-) rename pkg/{ => domain}/events/ast_file_analysed_event.go (100%) rename pkg/{ => domain}/events/post_flatten_event.go (100%) rename pkg/{ => domain}/events/post_process_event.go (100%) rename pkg/{ => domain}/events/pre_flatten_event.go (100%) rename pkg/{ => domain}/events/process_event.go (100%) diff --git a/pkg/app/services.go b/pkg/app/services.go index ae07bdd..62a4dc2 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -9,11 +9,11 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" @@ -139,8 +139,8 @@ func Services(builder *ContainerBuilder) error { dependsOnInternalToken := subscribers.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) unmatchedSkippedViolations := subscribers.NewUnmatchedSkippedViolations(eventHelper) - processEvent := &events.ProcessEvent{} - postProcessEvent := &events.PostProcessEvent{} + processEvent := &events2.ProcessEvent{} + postProcessEvent := &events2.PostProcessEvent{} preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} // Events Handlers diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go index b5799f9..ba055ad 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/ast_map/ast_loader.go @@ -4,7 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/parsers" ) diff --git a/pkg/dependency_resolver.go b/pkg/dependency_resolver.go index 0c39980..61a83f8 100644 --- a/pkg/dependency_resolver.go +++ b/pkg/dependency_resolver.go @@ -7,8 +7,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "reflect" ) @@ -55,14 +55,14 @@ func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependencies.Depe } } - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(events.NewPreFlattenEvent()) + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(events2.NewPreFlattenEvent()) if errDispatchPreFlatten != nil { return nil, errDispatchPreFlatten } r.inheritanceFlattener.FlattenDependencies(*astMap, result) - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(events.NewPostFlattenEvent()) + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(events2.NewPostFlattenEvent()) if errDispatchPostFlatten != nil { return nil, errDispatchPostFlatten } diff --git a/pkg/dispatchers/event_helper.go b/pkg/dispatchers/event_helper.go index 083b5a4..fca3e10 100644 --- a/pkg/dispatchers/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -3,8 +3,8 @@ package dispatchers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/layers" ) diff --git a/pkg/events/ast_file_analysed_event.go b/pkg/domain/events/ast_file_analysed_event.go similarity index 100% rename from pkg/events/ast_file_analysed_event.go rename to pkg/domain/events/ast_file_analysed_event.go diff --git a/pkg/events/post_flatten_event.go b/pkg/domain/events/post_flatten_event.go similarity index 100% rename from pkg/events/post_flatten_event.go rename to pkg/domain/events/post_flatten_event.go diff --git a/pkg/events/post_process_event.go b/pkg/domain/events/post_process_event.go similarity index 100% rename from pkg/events/post_process_event.go rename to pkg/domain/events/post_process_event.go diff --git a/pkg/events/pre_flatten_event.go b/pkg/domain/events/pre_flatten_event.go similarity index 100% rename from pkg/events/pre_flatten_event.go rename to pkg/domain/events/pre_flatten_event.go diff --git a/pkg/events/process_event.go b/pkg/domain/events/process_event.go similarity index 100% rename from pkg/events/process_event.go rename to pkg/domain/events/process_event.go diff --git a/pkg/layers/matching_layers_handler.go b/pkg/layers/matching_layers_handler.go index 61b1bc1..968ad6a 100644 --- a/pkg/layers/matching_layers_handler.go +++ b/pkg/layers/matching_layers_handler.go @@ -1,7 +1,7 @@ package layers import ( - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type MatchingLayersHandler struct{} diff --git a/pkg/subscribers/allow_dependency_handler.go b/pkg/subscribers/allow_dependency_handler.go index bda457b..59f1550 100644 --- a/pkg/subscribers/allow_dependency_handler.go +++ b/pkg/subscribers/allow_dependency_handler.go @@ -2,7 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type AllowDependencyHandler struct{} diff --git a/pkg/subscribers/console_subscriber.go b/pkg/subscribers/console_subscriber.go index c98b5ca..08bba76 100644 --- a/pkg/subscribers/console_subscriber.go +++ b/pkg/subscribers/console_subscriber.go @@ -3,9 +3,9 @@ package subscribers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/ast_map" + events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/KoNekoD/go-deptrac/pkg/results" ) @@ -35,7 +35,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp if s.output.IsVerbose() { s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") } - case *events.AstFileAnalysedEvent: + case *events2.AstFileAnalysedEvent: if s.output.IsVerbose() { s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } @@ -53,7 +53,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp if s.output.IsVerbose() { s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") } - case *events.PreFlattenEvent: + case *events2.PreFlattenEvent: if s.output.IsVerbose() { err := s.stopwatchStart("flatten") if err != nil { @@ -61,7 +61,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp } s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "start flatten dependencies"}) } - case *events.PostFlattenEvent: + case *events2.PostFlattenEvent: if s.output.IsVerbose() { s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") } diff --git a/pkg/subscribers/dependency_layers_analyser.go b/pkg/subscribers/dependency_layers_analyser.go index f0eb89a..4a79027 100644 --- a/pkg/subscribers/dependency_layers_analyser.go +++ b/pkg/subscribers/dependency_layers_analyser.go @@ -9,7 +9,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/events" + events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -84,7 +84,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_results.AnalysisResult, } for _, dependerLayer := range dependerLayers { - event := events.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) + event := events2.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) err := a.eventDispatcher.DispatchEvent(event) if err != nil { return nil, err @@ -97,7 +97,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_results.AnalysisResult, analysisResult.AddWarning(warning) } - event := events.NewPostProcessEvent(analysisResult) + event := events2.NewPostProcessEvent(analysisResult) errDispatch := a.eventDispatcher.DispatchEvent(event) if errDispatch != nil { return nil, errDispatch diff --git a/pkg/subscribers/depends_on_disallowed_layer.go b/pkg/subscribers/depends_on_disallowed_layer.go index 05b1b53..4f1d59e 100644 --- a/pkg/subscribers/depends_on_disallowed_layer.go +++ b/pkg/subscribers/depends_on_disallowed_layer.go @@ -3,8 +3,8 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/events" ) type DependsOnDisallowedLayer struct { diff --git a/pkg/subscribers/depends_on_internal_token.go b/pkg/subscribers/depends_on_internal_token.go index 86fb779..311ae58 100644 --- a/pkg/subscribers/depends_on_internal_token.go +++ b/pkg/subscribers/depends_on_internal_token.go @@ -4,7 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type DependsOnInternalToken struct { diff --git a/pkg/subscribers/depends_on_private_layer.go b/pkg/subscribers/depends_on_private_layer.go index 499b789..4783279 100644 --- a/pkg/subscribers/depends_on_private_layer.go +++ b/pkg/subscribers/depends_on_private_layer.go @@ -2,7 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type DependsOnPrivateLayer struct { diff --git a/pkg/subscribers/event_subscriber_interface_map_reg.go b/pkg/subscribers/event_subscriber_interface_map_reg.go index a9e7f56..a56057b 100644 --- a/pkg/subscribers/event_subscriber_interface_map_reg.go +++ b/pkg/subscribers/event_subscriber_interface_map_reg.go @@ -2,23 +2,23 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" + events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/emitters" - "github.com/KoNekoD/go-deptrac/pkg/events" "github.com/elliotchance/orderedmap/v2" "reflect" ) func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber, progressSubscriber *ProgressSubscriber, withProgress bool) { - processEvent := &events.ProcessEvent{} - postProcessEvent := &events.PostProcessEvent{} + processEvent := &events2.ProcessEvent{} + postProcessEvent := &events2.PostProcessEvent{} preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} - astFileAnalysedEvent := &events.AstFileAnalysedEvent{} + astFileAnalysedEvent := &events2.AstFileAnalysedEvent{} astFileSyntaxErrorEvent := &ast_map.AstFileSyntaxErrorEvent{} preEmitEvent := &emitters.PreEmitEvent{} postEmitEvent := &emitters.PostEmitEvent{} - preFlattenEvent := &events.PreFlattenEvent{} - postFlattenEvent := &events.PostFlattenEvent{} + preFlattenEvent := &events2.PreFlattenEvent{} + postFlattenEvent := &events2.PostFlattenEvent{} Reg(preCreateAstMapEvent, consoleSubscriber, DefaultPriority) Reg(postCreateAstMapEvent, consoleSubscriber, DefaultPriority) diff --git a/pkg/subscribers/progress_subscriber.go b/pkg/subscribers/progress_subscriber.go index 6a7239e..0a5058a 100644 --- a/pkg/subscribers/progress_subscriber.go +++ b/pkg/subscribers/progress_subscriber.go @@ -2,7 +2,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/results" ) diff --git a/pkg/subscribers/uncovered_dependent_handler.go b/pkg/subscribers/uncovered_dependent_handler.go index ba4d677..197815c 100644 --- a/pkg/subscribers/uncovered_dependent_handler.go +++ b/pkg/subscribers/uncovered_dependent_handler.go @@ -3,7 +3,7 @@ package subscribers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type UncoveredDependentHandler struct { diff --git a/pkg/subscribers/unmatched_skipped_violations.go b/pkg/subscribers/unmatched_skipped_violations.go index f34a86c..0cd2091 100644 --- a/pkg/subscribers/unmatched_skipped_violations.go +++ b/pkg/subscribers/unmatched_skipped_violations.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" - "github.com/KoNekoD/go-deptrac/pkg/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type UnmatchedSkippedViolations struct { From 681aeea2f13e74fa842a115c2df9d9c708de946a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:21:32 +0300 Subject: [PATCH 18/40] refactor: structure --- .../dependency_layers_analyser.go | 2 +- .../layer_dependencies_analyser.go | 2 +- pkg/app/analyse_runner.go | 6 +- pkg/app/cache.go | 4 +- pkg/app/changed_files_runner.go | 6 +- pkg/app/container_builder.go | 35 +++---- pkg/app/service_container_builder.go | 6 +- pkg/app/services.go | 92 ++++++++++--------- pkg/application/dtos/collectable.go | 14 +++ .../event_handlers/allow_dependency.go} | 10 +- .../event_handlers/cacheable_file.go} | 12 +-- .../event_handlers/console.go} | 27 +++--- .../depends_on_disallowed_layer.go | 4 +- .../depends_on_internal_token.go | 4 +- .../depends_on_private_layer.go | 4 +- .../event_handlers/event_handler.go} | 35 ++++--- .../event_handlers/progress.go} | 12 +-- .../event_handlers/uncovered_dependent.go} | 12 +-- .../unmatched_skipped_violations.go | 4 +- .../services}/collector_provider.go | 9 +- .../collector_resolver.go | 13 +-- .../collector_resolver_interface.go | 9 ++ .../abstract_type_collector.go | 12 +-- .../bool_collector.go | 7 +- .../class_collector.go | 2 +- .../class_like_collector.go | 2 +- .../class_name_regex_collector.go | 12 +-- .../collector_interface.go | 2 +- .../composer_collector.go | 2 +- .../directory_collector.go | 2 +- .../directory_collector_test.go | 2 +- .../function_name_collector.go | 8 +- .../glob_collector.go | 12 +-- .../inheritance_level_collector.go | 16 ++-- .../inherits_collector.go | 20 ++-- .../interface_collector.go | 2 +- .../layer_collector.go | 10 +- .../method_collector.go | 10 +- .../regex_collector.go | 2 +- .../superglobal_collector.go | 8 +- .../trait_collector.go | 2 +- .../uses_collector.go | 20 ++-- .../emitters/class_dependency_emitter.go | 0 .../class_superglobal_dependency_emitter.go | 0 .../emitters/dependency_emitter_interface.go | 0 .../emitters/file_dependency_emitter.go | 0 .../function_call_dependency_emitter.go | 0 .../emitters/function_dependency_emitter.go | 0 ...function_superglobal_dependency_emitter.go | 0 .../emitters/uses_dependency_emitter.go | 0 .../input_collectors}/file_input_collector.go | 14 +-- .../input_collectors/input_collector.go | 5 + pkg/ast_map/ast_map_extractor.go | 6 +- pkg/ast_map/ast_map_extractor_test.go | 4 +- .../collector_resolver_interface.go | 9 -- .../input_collector_interface.go | 5 - pkg/commands/analyse_command.go | 8 +- pkg/dependency_resolver.go | 6 +- .../event_dispatcher_interface2.go | 4 +- pkg/domain/dtos/ast_map/ast_map.go | 5 - .../events}/post_emit_event.go | 2 +- .../events}/pre_emit_event.go | 2 +- pkg/layers/layer_resolver.go | 16 ++-- pkg/layers/matching_layers_handler.go | 2 +- .../event_subscriber_default_priority.go | 3 - pkg/subscribers/event_subscriber_interface.go | 5 - .../event_subscriber_interface_map.go | 7 -- pkg/violations/collectable.go | 12 --- 68 files changed, 292 insertions(+), 298 deletions(-) rename pkg/{subscribers => analysers}/dependency_layers_analyser.go (99%) rename pkg/{subscribers => analysers}/layer_dependencies_analyser.go (99%) create mode 100644 pkg/application/dtos/collectable.go rename pkg/{subscribers/allow_dependency_handler.go => application/event_handlers/allow_dependency.go} (61%) rename pkg/{subscribers/cacheable_file_subscriber.go => application/event_handlers/cacheable_file.go} (51%) rename pkg/{subscribers/console_subscriber.go => application/event_handlers/console.go} (75%) rename pkg/{subscribers => application/event_handlers}/depends_on_disallowed_layer.go (90%) rename pkg/{subscribers => application/event_handlers}/depends_on_internal_token.go (91%) rename pkg/{subscribers => application/event_handlers}/depends_on_private_layer.go (88%) rename pkg/{subscribers/event_subscriber_interface_map_reg.go => application/event_handlers/event_handler.go} (60%) rename pkg/{subscribers/progress_subscriber.go => application/event_handlers/progress.go} (67%) rename pkg/{subscribers/uncovered_dependent_handler.go => application/event_handlers/uncovered_dependent.go} (66%) rename pkg/{subscribers => application/event_handlers}/unmatched_skipped_violations.go (85%) rename pkg/{collectors_shared => application/services}/collector_provider.go (61%) rename pkg/{collectors_shared => application/services/collectors_resolvers}/collector_resolver.go (66%) create mode 100644 pkg/application/services/collectors_resolvers/collector_resolver_interface.go rename pkg/{collectors_shared => application/services/dependencies_collectors}/abstract_type_collector.go (73%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/bool_collector.go (87%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/class_collector.go (91%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/class_like_collector.go (91%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/class_name_regex_collector.go (68%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/collector_interface.go (91%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/composer_collector.go (98%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/directory_collector.go (97%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/directory_collector_test.go (93%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/function_name_collector.go (78%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/glob_collector.go (83%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/inheritance_level_collector.go (70%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/inherits_collector.go (67%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/interface_collector.go (91%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/layer_collector.go (71%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/method_collector.go (82%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/regex_collector.go (94%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/superglobal_collector.go (77%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/trait_collector.go (91%) rename pkg/{collectors_shared => application/services/dependencies_collectors}/uses_collector.go (68%) rename pkg/{ => application/services}/emitters/class_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/class_superglobal_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/dependency_emitter_interface.go (100%) rename pkg/{ => application/services}/emitters/file_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/function_call_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/function_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/function_superglobal_dependency_emitter.go (100%) rename pkg/{ => application/services}/emitters/uses_dependency_emitter.go (100%) rename pkg/{collectors_shared => application/services/input_collectors}/file_input_collector.go (75%) create mode 100644 pkg/application/services/input_collectors/input_collector.go delete mode 100644 pkg/collectors_shared/collector_resolver_interface.go delete mode 100644 pkg/collectors_shared/input_collector_interface.go rename pkg/{emitters => domain/events}/post_emit_event.go (91%) rename pkg/{emitters => domain/events}/pre_emit_event.go (93%) delete mode 100644 pkg/subscribers/event_subscriber_default_priority.go delete mode 100644 pkg/subscribers/event_subscriber_interface.go delete mode 100644 pkg/subscribers/event_subscriber_interface_map.go delete mode 100644 pkg/violations/collectable.go diff --git a/pkg/subscribers/dependency_layers_analyser.go b/pkg/analysers/dependency_layers_analyser.go similarity index 99% rename from pkg/subscribers/dependency_layers_analyser.go rename to pkg/analysers/dependency_layers_analyser.go index 4a79027..3d24451 100644 --- a/pkg/subscribers/dependency_layers_analyser.go +++ b/pkg/analysers/dependency_layers_analyser.go @@ -1,4 +1,4 @@ -package subscribers +package analysers import ( "fmt" diff --git a/pkg/subscribers/layer_dependencies_analyser.go b/pkg/analysers/layer_dependencies_analyser.go similarity index 99% rename from pkg/subscribers/layer_dependencies_analyser.go rename to pkg/analysers/layer_dependencies_analyser.go index a423d74..4e993de 100644 --- a/pkg/subscribers/layer_dependencies_analyser.go +++ b/pkg/analysers/layer_dependencies_analyser.go @@ -1,4 +1,4 @@ -package subscribers +package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" diff --git a/pkg/app/analyse_runner.go b/pkg/app/analyse_runner.go index f451272..1b97ca6 100644 --- a/pkg/app/analyse_runner.go +++ b/pkg/app/analyse_runner.go @@ -3,23 +3,23 @@ package app import ( "encoding/json" "fmt" + "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/hashicorp/go-multierror" "strings" ) // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { - analyzer *subscribers.DependencyLayersAnalyser + analyzer *analysers.DependencyLayersAnalyser formatterProvider *formatters.FormatterProvider } -func NewAnalyseRunner(analyzer *subscribers.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, diff --git a/pkg/app/cache.go b/pkg/app/cache.go index 0bbdae7..7e0d487 100644 --- a/pkg/app/cache.go +++ b/pkg/app/cache.go @@ -1,13 +1,13 @@ package app import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" ) func Cache(builder *ContainerBuilder) { builder.AstFileReferenceFileCache = ast_map.NewAstFileReferenceFileCache(*builder.CacheFile, Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache - builder.CacheableFileSubscriber = subscribers.NewCacheableFileSubscriber(builder.AstFileReferenceDeferredCacheInterface) + builder.CacheableFileSubscriber = event_handlers.NewCacheableFile(builder.AstFileReferenceDeferredCacheInterface) } diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index 6eac14c..a83eeb2 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -1,12 +1,12 @@ package app import ( + "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "golang.org/x/exp/maps" "strings" @@ -15,10 +15,10 @@ import ( // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { layerForTokenAnalyser *tokens.LayerForTokenAnalyser - dependencyLayersAnalyser *subscribers.DependencyLayersAnalyser + dependencyLayersAnalyser *analysers.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *subscribers.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 299acfd..e23599f 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -2,8 +2,12 @@ package app import ( "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/analysers" + event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -18,7 +22,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" ) @@ -28,29 +31,29 @@ type ContainerBuilder struct { CacheFile *string Configuration *configs.DeptracConfig EventDispatcher dispatchers.EventDispatcherInterface - FileInputCollector collectors_shared.InputCollectorInterface + FileInputCollector input_collectors.InputCollector YmlFileLoader *hooks.YmlFileLoader Dumper *utils.Dumper AstLoader *ast_map.AstLoader AstFileReferenceFileCache *ast_map.AstFileReferenceFileCache AstFileReferenceDeferredCacheInterface ast_map.AstFileReferenceDeferredCacheInterface AstFileReferenceCacheInterface ast_map.AstFileReferenceCacheInterface - CacheableFileSubscriber *subscribers.CacheableFileSubscriber + CacheableFileSubscriber *event_handlers2.CacheableFile AstFileReferenceInMemoryCache *ast_map.AstFileReferenceInMemoryCache TypeResolver *types.TypeResolver ReferenceExtractors []references.ReferenceExtractorInterface ParserInterface parsers.ParserInterface LayerProvider *layers.LayerProvider EventHelper *dispatchers.EventHelper - AllowDependencyHandler *subscribers.AllowDependencyHandler - DependsOnPrivateLayer *subscribers.DependsOnPrivateLayer - DependsOnInternalToken *subscribers.DependsOnInternalToken - DependsOnDisallowedLayer *subscribers.DependsOnDisallowedLayer + AllowDependencyHandler *event_handlers2.AllowDependency + DependsOnPrivateLayer *event_handlers2.DependsOnPrivateLayer + DependsOnInternalToken *event_handlers2.DependsOnInternalToken + DependsOnDisallowedLayer *event_handlers2.DependsOnDisallowedLayer MatchingLayersHandler *layers.MatchingLayersHandler - UncoveredDependentHandler *subscribers.UncoveredDependentHandler - UnmatchedSkippedViolations *subscribers.UnmatchedSkippedViolations - ConsoleSubscriber *subscribers.ConsoleSubscriber - ProgressSubscriber *subscribers.ProgressSubscriber + UncoveredDependentHandler *event_handlers2.UncoveredDependent + UnmatchedSkippedViolations *event_handlers2.UnmatchedSkippedViolations + ConsoleSubscriber *event_handlers2.Console + ProgressSubscriber *event_handlers2.Progress VerboseBoolFlag *bool DebugBoolFlag *bool Style *formatters.Style @@ -60,15 +63,15 @@ type ContainerBuilder struct { InheritanceFlattener *flatteners.InheritanceFlattener DependencyResolver *pkg.DependencyResolver TokenResolver *tokens.TokenResolver - CollectorResolver *collectors_shared.CollectorResolver + CollectorResolver *collectors_resolvers.CollectorResolver LayerResolver layers.LayerResolverInterface NikicPhpParser *parsers.NikicPhpParser - CollectorProvider *collectors_shared.CollectorProvider - DependencyLayersAnalyser *subscribers.DependencyLayersAnalyser + CollectorProvider *services2.CollectorProvider + DependencyLayersAnalyser *analysers.DependencyLayersAnalyser TokenInLayerAnalyser *tokens.TokenInLayerAnalyser LayerForTokenAnalyser *tokens.LayerForTokenAnalyser UnassignedTokenAnalyser *tokens.UnassignedTokenAnalyser - LayerDependenciesAnalyser *subscribers.LayerDependenciesAnalyser + LayerDependenciesAnalyser *analysers.LayerDependenciesAnalyser RulesetUsageAnalyser *rules.RulesetUsageAnalyser FormatterProvider *formatters.FormatterProvider FormatterConfiguration *formatters.FormatterConfiguration diff --git a/pkg/app/service_container_builder.go b/pkg/app/service_container_builder.go index dd98632..d9b707b 100644 --- a/pkg/app/service_container_builder.go +++ b/pkg/app/service_container_builder.go @@ -2,10 +2,10 @@ package app import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" "os" "path/filepath" "reflect" @@ -82,8 +82,8 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) // Debug event subscriber if b.containerBuilder.DebugBoolFlag != nil && *b.containerBuilder.DebugBoolFlag == true { - for _, key := range subscribers.Map.Keys() { - mapByPriorities, _ := subscribers.Map.Get(key) + for _, key := range event_handlers.Map.Keys() { + mapByPriorities, _ := event_handlers.Map.Get(key) for _, priority := range mapByPriorities.Keys() { subscribers, _ := mapByPriorities.Get(priority) diff --git a/pkg/app/services.go b/pkg/app/services.go index 62a4dc2..65e16ab 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -4,8 +4,14 @@ import ( "flag" "fmt" "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/analysers" + event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" + "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -13,7 +19,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" @@ -22,7 +27,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/elliotchance/orderedmap/v2" @@ -59,7 +63,7 @@ func Services(builder *ContainerBuilder) error { */ eventDispatcher := dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) - fileInputCollector, err := collectors_shared.NewFileInputCollector( + fileInputCollector, err := input_collectors.NewFileInputCollector( builderConfiguration.Paths, builderConfiguration.ExcludeFiles, projectDirectory, @@ -126,18 +130,18 @@ func Services(builder *ContainerBuilder) error { /* * Events */ - subscribers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []subscribers.EventSubscriberInterface]]() + event_handlers2.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []event_handlers2.EventHandlerInterface]]() // Events - uncoveredDependentHandler := subscribers.NewUncoveredDependentHandler(builderConfiguration.IgnoreUncoveredInternalStructs) + uncoveredDependentHandler := event_handlers2.NewUncoveredDependent(builderConfiguration.IgnoreUncoveredInternalStructs) matchingLayersHandler := layers.NewMatchingLayersHandler() - allowDependencyHandler := subscribers.NewAllowDependencyHandler() - consoleSubscriber := subscribers.NewConsoleSubscriber(symfonyOutput, timeStopwatch) - progressSubscriber := subscribers.NewProgressSubscriber(symfonyOutput) - dependsOnDisallowedLayer := subscribers.NewDependsOnDisallowedLayer(eventHelper) - dependsOnPrivateLayer := subscribers.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := subscribers.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) - unmatchedSkippedViolations := subscribers.NewUnmatchedSkippedViolations(eventHelper) + allowDependencyHandler := event_handlers2.NewAllowDependency() + consoleSubscriber := event_handlers2.NewConsole(symfonyOutput, timeStopwatch) + progressSubscriber := event_handlers2.NewProgress(symfonyOutput) + dependsOnDisallowedLayer := event_handlers2.NewDependsOnDisallowedLayer(eventHelper) + dependsOnPrivateLayer := event_handlers2.NewDependsOnPrivateLayer(eventHelper) + dependsOnInternalToken := event_handlers2.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) + unmatchedSkippedViolations := event_handlers2.NewUnmatchedSkippedViolations(eventHelper) processEvent := &events2.ProcessEvent{} postProcessEvent := &events2.PostProcessEvent{} @@ -145,16 +149,16 @@ func Services(builder *ContainerBuilder) error { postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" - subscribers.Reg(processEvent, allowDependencyHandler, -100) - subscribers.Reg(processEvent, dependsOnPrivateLayer, -3) - subscribers.Reg(processEvent, dependsOnInternalToken, -2) - subscribers.Reg(processEvent, dependsOnDisallowedLayer, -1) - subscribers.Reg(processEvent, matchingLayersHandler, 1) - subscribers.Reg(processEvent, uncoveredDependentHandler, 2) - subscribers.Reg(postProcessEvent, unmatchedSkippedViolations, subscribers.DefaultPriority) + event_handlers2.Reg(processEvent, allowDependencyHandler, -100) + event_handlers2.Reg(processEvent, dependsOnPrivateLayer, -3) + event_handlers2.Reg(processEvent, dependsOnInternalToken, -2) + event_handlers2.Reg(processEvent, dependsOnDisallowedLayer, -1) + event_handlers2.Reg(processEvent, matchingLayersHandler, 1) + event_handlers2.Reg(processEvent, uncoveredDependentHandler, 2) + event_handlers2.Reg(postProcessEvent, unmatchedSkippedViolations, event_handlers2.DefaultPriority) if cacheableFileSubscriber != nil { - subscribers.Reg(preCreateAstMapEvent, cacheableFileSubscriber, subscribers.DefaultPriority) - subscribers.Reg(postCreateAstMapEvent, cacheableFileSubscriber, subscribers.DefaultPriority) + event_handlers2.Reg(preCreateAstMapEvent, cacheableFileSubscriber, event_handlers2.DefaultPriority) + event_handlers2.Reg(postCreateAstMapEvent, cacheableFileSubscriber, event_handlers2.DefaultPriority) } /* @@ -208,60 +212,60 @@ func Services(builder *ContainerBuilder) error { nil != reportUncovered && *reportUncovered == true, nil != failOnUncovered && *failOnUncovered == true, ) - subscribers.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + event_handlers2.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) // /* * LayerConfig */ - inheritanceLevelCollector, err := collectors_shared.NewInheritanceLevelCollector(astMapExtractor) + inheritanceLevelCollector, err := dependencies_collectors.NewInheritanceLevelCollector(astMapExtractor) if err != nil { return err } - inheritsCollector, err := collectors_shared.NewInheritsCollector(astMapExtractor) + inheritsCollector, err := dependencies_collectors.NewInheritsCollector(astMapExtractor) if err != nil { return err } - usesCollector, err := collectors_shared.NewUsesCollector(astMapExtractor) + usesCollector, err := dependencies_collectors.NewUsesCollector(astMapExtractor) if err != nil { return err } - collectorProvider := collectors_shared.NewCollectorProvider() - collectorResolver := collectors_shared.NewCollectorResolver(collectorProvider) + collectorProvider := services2.NewCollectorProvider() + collectorResolver := collectors_resolvers.NewCollectorResolver(collectorProvider) layerResolver := layers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[enums2.CollectorType]collectors_shared.CollectorInterface{ + collectors := map[enums2.CollectorType]dependencies_collectors.CollectorInterface{ //AttributeCollector - enums2.CollectorTypeTypeBool: collectors_shared.NewBoolCollector(collectorResolver), - enums2.CollectorTypeTypeClass: collectors_shared.NewClassCollector(), - enums2.CollectorTypeTypeClasslike: collectors_shared.NewClassLikeCollector(), - enums2.CollectorTypeTypeClassNameRegex: collectors_shared.NewClassNameRegexCollector(), + enums2.CollectorTypeTypeBool: dependencies_collectors.NewBoolCollector(collectorResolver), + enums2.CollectorTypeTypeClass: dependencies_collectors.NewClassCollector(), + enums2.CollectorTypeTypeClasslike: dependencies_collectors.NewClassLikeCollector(), + enums2.CollectorTypeTypeClassNameRegex: dependencies_collectors.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - enums2.CollectorTypeTypeDirectory: collectors_shared.NewDirectoryCollector(), + enums2.CollectorTypeTypeDirectory: dependencies_collectors.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - enums2.CollectorTypeTypeFunctionName: collectors_shared.NewFunctionNameCollector(), - enums2.CollectorTypeTypeGlob: collectors_shared.NewGlobCollector(projectDirectory), + enums2.CollectorTypeTypeFunctionName: dependencies_collectors.NewFunctionNameCollector(), + enums2.CollectorTypeTypeGlob: dependencies_collectors.NewGlobCollector(projectDirectory), //ImplementsCollector enums2.CollectorTypeTypeInheritance: inheritanceLevelCollector, - enums2.CollectorTypeTypeInterface: collectors_shared.NewInterfaceCollector(), + enums2.CollectorTypeTypeInterface: dependencies_collectors.NewInterfaceCollector(), enums2.CollectorTypeTypeInherits: inheritsCollector, - enums2.CollectorTypeTypeLayer: collectors_shared.NewLayerCollector(layerResolver), - enums2.CollectorTypeTypeMethod: collectors_shared.NewMethodCollector(nikicPhpParser), - enums2.CollectorTypeTypeSuperGlobal: collectors_shared.NewSuperglobalCollector(), - enums2.CollectorTypeTypeTrait: collectors_shared.NewTraitCollector(), + enums2.CollectorTypeTypeLayer: dependencies_collectors.NewLayerCollector(layerResolver), + enums2.CollectorTypeTypeMethod: dependencies_collectors.NewMethodCollector(nikicPhpParser), + enums2.CollectorTypeTypeSuperGlobal: dependencies_collectors.NewSuperglobalCollector(), + enums2.CollectorTypeTypeTrait: dependencies_collectors.NewTraitCollector(), enums2.CollectorTypeTypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - enums2.CollectorTypeTypeComposer: collectors_shared.NewComposerCollector(), + enums2.CollectorTypeTypeComposer: dependencies_collectors.NewComposerCollector(), } collectorProvider.Set(collectors) /* * SetAnalyser */ - dependencyLayersAnalyser := subscribers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + dependencyLayersAnalyser := analysers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) tokenInLayerAnalyser := tokens.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerForTokenAnalyser := tokens.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) unassignedTokenAnalyser := tokens.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := subscribers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + layerDependenciesAnalyser := analysers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) rulesetUsageAnalyser := rules.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* diff --git a/pkg/application/dtos/collectable.go b/pkg/application/dtos/collectable.go new file mode 100644 index 0000000..65d2e99 --- /dev/null +++ b/pkg/application/dtos/collectable.go @@ -0,0 +1,14 @@ +package dtos + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" +) + +type Collectable struct { + Collector dependencies_collectors.CollectorInterface + Attributes map[string]interface{} +} + +func NewCollectable(collector dependencies_collectors.CollectorInterface, attributes map[string]interface{}) *Collectable { + return &Collectable{Collector: collector, Attributes: attributes} +} diff --git a/pkg/subscribers/allow_dependency_handler.go b/pkg/application/event_handlers/allow_dependency.go similarity index 61% rename from pkg/subscribers/allow_dependency_handler.go rename to pkg/application/event_handlers/allow_dependency.go index 59f1550..f265071 100644 --- a/pkg/subscribers/allow_dependency_handler.go +++ b/pkg/application/event_handlers/allow_dependency.go @@ -1,17 +1,17 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) -type AllowDependencyHandler struct{} +type AllowDependency struct{} -func NewAllowDependencyHandler() *AllowDependencyHandler { - return &AllowDependencyHandler{} +func NewAllowDependency() *AllowDependency { + return &AllowDependency{} } -func (AllowDependencyHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (AllowDependency) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() diff --git a/pkg/subscribers/cacheable_file_subscriber.go b/pkg/application/event_handlers/cacheable_file.go similarity index 51% rename from pkg/subscribers/cacheable_file_subscriber.go rename to pkg/application/event_handlers/cacheable_file.go index 78e9d17..d81e27a 100644 --- a/pkg/subscribers/cacheable_file_subscriber.go +++ b/pkg/application/event_handlers/cacheable_file.go @@ -1,18 +1,16 @@ -package subscribers +package event_handlers import "github.com/KoNekoD/go-deptrac/pkg/ast_map" -type CacheableFileSubscriber struct { +type CacheableFile struct { deferredCache ast_map.AstFileReferenceDeferredCacheInterface } -func NewCacheableFileSubscriber(deferredCache ast_map.AstFileReferenceDeferredCacheInterface) *CacheableFileSubscriber { - return &CacheableFileSubscriber{ - deferredCache: deferredCache, - } +func NewCacheableFile(deferredCache ast_map.AstFileReferenceDeferredCacheInterface) *CacheableFile { + return &CacheableFile{deferredCache: deferredCache} } -func (s *CacheableFileSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (s *CacheableFile) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch rawEvent.(type) { case *ast_map.PreCreateAstMapEvent: err := s.deferredCache.Load() diff --git a/pkg/subscribers/console_subscriber.go b/pkg/application/event_handlers/console.go similarity index 75% rename from pkg/subscribers/console_subscriber.go rename to pkg/application/event_handlers/console.go index 08bba76..a27554e 100644 --- a/pkg/subscribers/console_subscriber.go +++ b/pkg/application/event_handlers/console.go @@ -1,27 +1,26 @@ -package subscribers +package event_handlers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/results" ) -type ConsoleSubscriber struct { +type Console struct { output results.OutputInterface stopwatch *stopwatch.Stopwatch } -func NewConsoleSubscriber(output results.OutputInterface, stopwatch *stopwatch.Stopwatch) *ConsoleSubscriber { - return &ConsoleSubscriber{ +func NewConsole(output results.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { + return &Console{ output: output, stopwatch: stopwatch, } } -func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch event := rawEvent.(type) { case *ast_map.PreCreateAstMapEvent: if s.output.IsVerbose() { @@ -35,13 +34,13 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp if s.output.IsVerbose() { s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") } - case *events2.AstFileAnalysedEvent: + case *events.AstFileAnalysedEvent: if s.output.IsVerbose() { s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } case *ast_map.AstFileSyntaxErrorEvent: s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) - case *emitters.PreEmitEvent: + case *events.PreEmitEvent: if s.output.IsVerbose() { err := s.stopwatchStart("deps") if err != nil { @@ -49,11 +48,11 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp } s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) } - case *emitters.PostEmitEvent: + case *events.PostEmitEvent: if s.output.IsVerbose() { s.printMessageWithTime("deps", "Dependencies emitted in %01.2f sec.", "Dependencies emitted.") } - case *events2.PreFlattenEvent: + case *events.PreFlattenEvent: if s.output.IsVerbose() { err := s.stopwatchStart("flatten") if err != nil { @@ -61,7 +60,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp } s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "start flatten dependencies"}) } - case *events2.PostFlattenEvent: + case *events.PostFlattenEvent: if s.output.IsVerbose() { s.printMessageWithTime("flatten", "Dependencies flattened in %01.2f sec.", "Dependencies flattened.") } @@ -70,7 +69,7 @@ func (s *ConsoleSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopProp return nil } -func (s *ConsoleSubscriber) stopwatchStart(event string) error { +func (s *Console) stopwatchStart(event string) error { err := s.stopwatch.Start(event) if err != nil { return err @@ -79,7 +78,7 @@ func (s *ConsoleSubscriber) stopwatchStart(event string) error { return nil } -func (s *ConsoleSubscriber) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { +func (s *Console) printMessageWithTime(event string, messageWithTime string, messageWithoutTime string) { period, err := s.stopwatch.Stop(event) if err != nil { diff --git a/pkg/subscribers/depends_on_disallowed_layer.go b/pkg/application/event_handlers/depends_on_disallowed_layer.go similarity index 90% rename from pkg/subscribers/depends_on_disallowed_layer.go rename to pkg/application/event_handlers/depends_on_disallowed_layer.go index 4f1d59e..fa20535 100644 --- a/pkg/subscribers/depends_on_disallowed_layer.go +++ b/pkg/application/event_handlers/depends_on_disallowed_layer.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -15,7 +15,7 @@ func NewDependsOnDisallowedLayer(eventHelper *dispatchers.EventHelper) *DependsO return &DependsOnDisallowedLayer{eventHelper: eventHelper} } -func (d *DependsOnDisallowedLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (d *DependsOnDisallowedLayer) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() diff --git a/pkg/subscribers/depends_on_internal_token.go b/pkg/application/event_handlers/depends_on_internal_token.go similarity index 91% rename from pkg/subscribers/depends_on_internal_token.go rename to pkg/application/event_handlers/depends_on_internal_token.go index 311ae58..831dcc8 100644 --- a/pkg/subscribers/depends_on_internal_token.go +++ b/pkg/application/event_handlers/depends_on_internal_token.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -16,7 +16,7 @@ func NewDependsOnInternalToken(eventHelper *dispatchers.EventHelper, analyser *d return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } -func (d *DependsOnInternalToken) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (d *DependsOnInternalToken) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() diff --git a/pkg/subscribers/depends_on_private_layer.go b/pkg/application/event_handlers/depends_on_private_layer.go similarity index 88% rename from pkg/subscribers/depends_on_private_layer.go rename to pkg/application/event_handlers/depends_on_private_layer.go index 4783279..55e77d5 100644 --- a/pkg/subscribers/depends_on_private_layer.go +++ b/pkg/application/event_handlers/depends_on_private_layer.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -13,7 +13,7 @@ func NewDependsOnPrivateLayer(eventHelper *dispatchers.EventHelper) *DependsOnPr return &DependsOnPrivateLayer{eventHelper: eventHelper} } -func (d *DependsOnPrivateLayer) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (d *DependsOnPrivateLayer) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) ruleset := event.GetResult() for dependentLayer, isPublic := range event.DependentLayers { diff --git a/pkg/subscribers/event_subscriber_interface_map_reg.go b/pkg/application/event_handlers/event_handler.go similarity index 60% rename from pkg/subscribers/event_subscriber_interface_map_reg.go rename to pkg/application/event_handlers/event_handler.go index a56057b..764861e 100644 --- a/pkg/subscribers/event_subscriber_interface_map_reg.go +++ b/pkg/application/event_handlers/event_handler.go @@ -1,24 +1,31 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/emitters" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/elliotchance/orderedmap/v2" "reflect" ) -func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber, progressSubscriber *ProgressSubscriber, withProgress bool) { - processEvent := &events2.ProcessEvent{} - postProcessEvent := &events2.PostProcessEvent{} +type EventHandlerInterface interface { + HandleEvent(rawEvent interface{}, stopPropagation func()) error +} + +const DefaultPriority = 0 + +var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventHandlerInterface]] + +func RegForAnalyseCommand(consoleSubscriber *Console, progressSubscriber *Progress, withProgress bool) { + processEvent := &events.ProcessEvent{} + postProcessEvent := &events.PostProcessEvent{} preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} - astFileAnalysedEvent := &events2.AstFileAnalysedEvent{} + astFileAnalysedEvent := &events.AstFileAnalysedEvent{} astFileSyntaxErrorEvent := &ast_map.AstFileSyntaxErrorEvent{} - preEmitEvent := &emitters.PreEmitEvent{} - postEmitEvent := &emitters.PostEmitEvent{} - preFlattenEvent := &events2.PreFlattenEvent{} - postFlattenEvent := &events2.PostFlattenEvent{} + preEmitEvent := &events.PreEmitEvent{} + postEmitEvent := &events.PostEmitEvent{} + preFlattenEvent := &events.PreFlattenEvent{} + postFlattenEvent := &events.PostFlattenEvent{} Reg(preCreateAstMapEvent, consoleSubscriber, DefaultPriority) Reg(postCreateAstMapEvent, consoleSubscriber, DefaultPriority) @@ -38,21 +45,21 @@ func RegForAnalyseCommand(consoleSubscriber *ConsoleSubscriber, progressSubscrib } } -func Reg(event interface{}, sub EventSubscriberInterface, priority int) { +func Reg(event interface{}, sub EventHandlerInterface, priority int) { eventTypeof := reflect.TypeOf(event) eventType := eventTypeof.String() // Get or create event type row e, ok := Map.Get(eventType) if !ok { - e = orderedmap.NewOrderedMap[int, []EventSubscriberInterface]() + e = orderedmap.NewOrderedMap[int, []EventHandlerInterface]() Map.Set(eventType, e) } // Get or create priority column subs, ok := e.Get(priority) if !ok { - subs = []EventSubscriberInterface{} + subs = []EventHandlerInterface{} } subs = append(subs, sub) diff --git a/pkg/subscribers/progress_subscriber.go b/pkg/application/event_handlers/progress.go similarity index 67% rename from pkg/subscribers/progress_subscriber.go rename to pkg/application/event_handlers/progress.go index 0a5058a..486f397 100644 --- a/pkg/subscribers/progress_subscriber.go +++ b/pkg/application/event_handlers/progress.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" @@ -6,17 +6,15 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/results" ) -type ProgressSubscriber struct { +type Progress struct { output results.OutputInterface } -func NewProgressSubscriber(output results.OutputInterface) *ProgressSubscriber { - return &ProgressSubscriber{ - output: output, - } +func NewProgress(output results.OutputInterface) *Progress { + return &Progress{output: output} } -func (s *ProgressSubscriber) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (s *Progress) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch event := rawEvent.(type) { case *ast_map.PreCreateAstMapEvent: s.output.GetStyle().ProgressStart(event.ExpectedFileCount) diff --git a/pkg/subscribers/uncovered_dependent_handler.go b/pkg/application/event_handlers/uncovered_dependent.go similarity index 66% rename from pkg/subscribers/uncovered_dependent_handler.go rename to pkg/application/event_handlers/uncovered_dependent.go index 197815c..84a830a 100644 --- a/pkg/subscribers/uncovered_dependent_handler.go +++ b/pkg/application/event_handlers/uncovered_dependent.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" @@ -6,15 +6,15 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) -type UncoveredDependentHandler struct { +type UncoveredDependent struct { ignoreUncoveredInternalClasses bool } -func NewUncoveredDependentHandler(ignoreUncoveredInternalClasses bool) *UncoveredDependentHandler { - return &UncoveredDependentHandler{ignoreUncoveredInternalClasses: ignoreUncoveredInternalClasses} +func NewUncoveredDependent(ignoreUncoveredInternalClasses bool) *UncoveredDependent { + return &UncoveredDependent{ignoreUncoveredInternalClasses: ignoreUncoveredInternalClasses} } -func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (h *UncoveredDependent) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) dependent := event.Dependency.GetDependent() @@ -36,7 +36,7 @@ func (h *UncoveredDependentHandler) InvokeEventSubscriber(rawEvent interface{}, return nil } -func (h *UncoveredDependentHandler) isIgnoreUncoveredInternalClasses(token *tokens.ClassLikeToken) bool { +func (h *UncoveredDependent) isIgnoreUncoveredInternalClasses(token *tokens.ClassLikeToken) bool { if !h.ignoreUncoveredInternalClasses { return false } diff --git a/pkg/subscribers/unmatched_skipped_violations.go b/pkg/application/event_handlers/unmatched_skipped_violations.go similarity index 85% rename from pkg/subscribers/unmatched_skipped_violations.go rename to pkg/application/event_handlers/unmatched_skipped_violations.go index 0cd2091..945729a 100644 --- a/pkg/subscribers/unmatched_skipped_violations.go +++ b/pkg/application/event_handlers/unmatched_skipped_violations.go @@ -1,4 +1,4 @@ -package subscribers +package event_handlers import ( "fmt" @@ -15,7 +15,7 @@ func NewUnmatchedSkippedViolations(eventHelper *dispatchers.EventHelper) *Unmatc return &UnmatchedSkippedViolations{eventHelper: eventHelper} } -func (u *UnmatchedSkippedViolations) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (u *UnmatchedSkippedViolations) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.PostProcessEvent) ruleset := event.GetResult() diff --git a/pkg/collectors_shared/collector_provider.go b/pkg/application/services/collector_provider.go similarity index 61% rename from pkg/collectors_shared/collector_provider.go rename to pkg/application/services/collector_provider.go index f8ae46f..b48f711 100644 --- a/pkg/collectors_shared/collector_provider.go +++ b/pkg/application/services/collector_provider.go @@ -1,24 +1,25 @@ -package collectors_shared +package services import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "golang.org/x/exp/maps" ) type CollectorProvider struct { - collectors map[enums.CollectorType]CollectorInterface + collectors map[enums.CollectorType]dependencies_collectors.CollectorInterface } func NewCollectorProvider() *CollectorProvider { return &CollectorProvider{} } -func (p *CollectorProvider) Set(collectors map[enums.CollectorType]CollectorInterface) *CollectorProvider { +func (p *CollectorProvider) Set(collectors map[enums.CollectorType]dependencies_collectors.CollectorInterface) *CollectorProvider { p.collectors = collectors return p } -func (p *CollectorProvider) Get(id enums.CollectorType) CollectorInterface { +func (p *CollectorProvider) Get(id enums.CollectorType) dependencies_collectors.CollectorInterface { return p.collectors[id] } diff --git a/pkg/collectors_shared/collector_resolver.go b/pkg/application/services/collectors_resolvers/collector_resolver.go similarity index 66% rename from pkg/collectors_shared/collector_resolver.go rename to pkg/application/services/collectors_resolvers/collector_resolver.go index a6e4418..182a1bd 100644 --- a/pkg/collectors_shared/collector_resolver.go +++ b/pkg/application/services/collectors_resolvers/collector_resolver.go @@ -1,20 +1,21 @@ -package collectors_shared +package collectors_resolvers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/dtos" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/violations" ) type CollectorResolver struct { - collectorProvider *CollectorProvider + collectorProvider *services.CollectorProvider } -func NewCollectorResolver(collectorProvider *CollectorProvider) *CollectorResolver { +func NewCollectorResolver(collectorProvider *services.CollectorProvider) *CollectorResolver { return &CollectorResolver{collectorProvider: collectorProvider} } -func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*violations.Collectable, error) { +func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*dtos.Collectable, error) { classLikeType, err := enums.NewCollectorTypeFromString(configMap["type"].(string)) if err != nil { return nil, err @@ -32,5 +33,5 @@ func (c *CollectorResolver) Resolve(configMap map[string]interface{}) (*violatio collector := c.collectorProvider.Get(classLikeType) - return violations.NewCollectable(collector, configMap), nil + return dtos.NewCollectable(collector, configMap), nil } diff --git a/pkg/application/services/collectors_resolvers/collector_resolver_interface.go b/pkg/application/services/collectors_resolvers/collector_resolver_interface.go new file mode 100644 index 0000000..14f5895 --- /dev/null +++ b/pkg/application/services/collectors_resolvers/collector_resolver_interface.go @@ -0,0 +1,9 @@ +package collectors_resolvers + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/dtos" +) + +type CollectorResolverInterface interface { + Resolve(config map[string]interface{}) (*dtos.Collectable, error) +} diff --git a/pkg/collectors_shared/abstract_type_collector.go b/pkg/application/services/dependencies_collectors/abstract_type_collector.go similarity index 73% rename from pkg/collectors_shared/abstract_type_collector.go rename to pkg/application/services/dependencies_collectors/abstract_type_collector.go index c852f49..49bc9b5 100644 --- a/pkg/collectors_shared/abstract_type_collector.go +++ b/pkg/application/services/dependencies_collectors/abstract_type_collector.go @@ -1,10 +1,10 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -22,8 +22,8 @@ func (c *AbstractTypeCollector) GetType() enums.ClassLikeType { panic("Not implemented") } -func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - v, ok := reference.(*tokens_references2.ClassLikeReference) +func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + v, ok := reference.(*tokens_references.ClassLikeReference) if !ok { return false, nil } @@ -36,7 +36,7 @@ func (c *AbstractTypeCollector) Satisfy(config map[string]interface{}, reference isClassLike := enums.TypeClasslike == c.GetType() isSameType := *v.Type == c.GetType() - return (isClassLike || isSameType) && v.GetToken().(*tokens2.ClassLikeToken).Match(pattern), nil + return (isClassLike || isSameType) && v.GetToken().(*tokens.ClassLikeToken).Match(pattern), nil } func (c *AbstractTypeCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/collectors_shared/bool_collector.go b/pkg/application/services/dependencies_collectors/bool_collector.go similarity index 87% rename from pkg/collectors_shared/bool_collector.go rename to pkg/application/services/dependencies_collectors/bool_collector.go index f7d0080..4641fac 100644 --- a/pkg/collectors_shared/bool_collector.go +++ b/pkg/application/services/dependencies_collectors/bool_collector.go @@ -1,17 +1,18 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) type BoolCollector struct { - collectorResolver CollectorResolverInterface + collectorResolver collectors_resolvers.CollectorResolverInterface } -func NewBoolCollector(collectorResolver CollectorResolverInterface) *BoolCollector { +func NewBoolCollector(collectorResolver collectors_resolvers.CollectorResolverInterface) *BoolCollector { return &BoolCollector{ collectorResolver: collectorResolver, } diff --git a/pkg/collectors_shared/class_collector.go b/pkg/application/services/dependencies_collectors/class_collector.go similarity index 91% rename from pkg/collectors_shared/class_collector.go rename to pkg/application/services/dependencies_collectors/class_collector.go index a8c458b..6482c99 100644 --- a/pkg/collectors_shared/class_collector.go +++ b/pkg/application/services/dependencies_collectors/class_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors_shared/class_like_collector.go b/pkg/application/services/dependencies_collectors/class_like_collector.go similarity index 91% rename from pkg/collectors_shared/class_like_collector.go rename to pkg/application/services/dependencies_collectors/class_like_collector.go index 9d1c788..87fa8d8 100644 --- a/pkg/collectors_shared/class_like_collector.go +++ b/pkg/application/services/dependencies_collectors/class_like_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors_shared/class_name_regex_collector.go b/pkg/application/services/dependencies_collectors/class_name_regex_collector.go similarity index 68% rename from pkg/collectors_shared/class_name_regex_collector.go rename to pkg/application/services/dependencies_collectors/class_name_regex_collector.go index 4465bcf..d45caff 100644 --- a/pkg/collectors_shared/class_name_regex_collector.go +++ b/pkg/application/services/dependencies_collectors/class_name_regex_collector.go @@ -1,9 +1,9 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) @@ -17,8 +17,8 @@ func NewClassNameRegexCollector() *ClassNameRegexCollector { } } -func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { +func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.ClassLikeReference); !ok { return false, nil } @@ -27,7 +27,7 @@ func (c ClassNameRegexCollector) Satisfy(config map[string]interface{}, referenc return false, err } - return reference.GetToken().(*tokens2.ClassLikeToken).Match(validatedPattern), nil + return reference.GetToken().(*tokens.ClassLikeToken).Match(validatedPattern), nil } func (c ClassNameRegexCollector) GetPattern(config map[string]interface{}) (string, error) { diff --git a/pkg/collectors_shared/collector_interface.go b/pkg/application/services/dependencies_collectors/collector_interface.go similarity index 91% rename from pkg/collectors_shared/collector_interface.go rename to pkg/application/services/dependencies_collectors/collector_interface.go index aa634be..8da6ad8 100644 --- a/pkg/collectors_shared/collector_interface.go +++ b/pkg/application/services/dependencies_collectors/collector_interface.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" diff --git a/pkg/collectors_shared/composer_collector.go b/pkg/application/services/dependencies_collectors/composer_collector.go similarity index 98% rename from pkg/collectors_shared/composer_collector.go rename to pkg/application/services/dependencies_collectors/composer_collector.go index 6a95c99..e689a93 100644 --- a/pkg/collectors_shared/composer_collector.go +++ b/pkg/application/services/dependencies_collectors/composer_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors_shared/directory_collector.go b/pkg/application/services/dependencies_collectors/directory_collector.go similarity index 97% rename from pkg/collectors_shared/directory_collector.go rename to pkg/application/services/dependencies_collectors/directory_collector.go index 1376215..8f80314 100644 --- a/pkg/collectors_shared/directory_collector.go +++ b/pkg/application/services/dependencies_collectors/directory_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" diff --git a/pkg/collectors_shared/directory_collector_test.go b/pkg/application/services/dependencies_collectors/directory_collector_test.go similarity index 93% rename from pkg/collectors_shared/directory_collector_test.go rename to pkg/application/services/dependencies_collectors/directory_collector_test.go index 66fa76f..bb5c9d1 100644 --- a/pkg/collectors_shared/directory_collector_test.go +++ b/pkg/application/services/dependencies_collectors/directory_collector_test.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "regexp" diff --git a/pkg/collectors_shared/function_name_collector.go b/pkg/application/services/dependencies_collectors/function_name_collector.go similarity index 78% rename from pkg/collectors_shared/function_name_collector.go rename to pkg/application/services/dependencies_collectors/function_name_collector.go index 910e417..652dbd3 100644 --- a/pkg/collectors_shared/function_name_collector.go +++ b/pkg/application/services/dependencies_collectors/function_name_collector.go @@ -1,10 +1,10 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) @@ -14,8 +14,8 @@ func NewFunctionNameCollector() *FunctionNameCollector { return &FunctionNameCollector{} } -func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.FunctionReference); !ok { +func (c FunctionNameCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.FunctionReference); !ok { return false, nil } diff --git a/pkg/collectors_shared/glob_collector.go b/pkg/application/services/dependencies_collectors/glob_collector.go similarity index 83% rename from pkg/collectors_shared/glob_collector.go rename to pkg/application/services/dependencies_collectors/glob_collector.go index 4f2545f..169cbad 100644 --- a/pkg/collectors_shared/glob_collector.go +++ b/pkg/application/services/dependencies_collectors/glob_collector.go @@ -1,10 +1,10 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - filepath2 "path/filepath" + "path/filepath" "regexp" ) @@ -21,9 +21,9 @@ func NewGlobCollector(basePath string) *GlobCollector { } func (c *GlobCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { - filepath := reference.GetFilepath() + referenceFilepath := reference.GetFilepath() - if filepath == nil { + if referenceFilepath == nil { return false, nil } @@ -32,9 +32,9 @@ func (c *GlobCollector) Satisfy(config map[string]interface{}, reference tokens_ return false, err } - normalizedPath := utils.PathNormalize(*filepath) + normalizedPath := utils.PathNormalize(*referenceFilepath) - relativeFilePath, err := filepath2.Rel(c.basePath, normalizedPath) + relativeFilePath, err := filepath.Rel(c.basePath, normalizedPath) if err != nil { return false, err } diff --git a/pkg/collectors_shared/inheritance_level_collector.go b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go similarity index 70% rename from pkg/collectors_shared/inheritance_level_collector.go rename to pkg/application/services/dependencies_collectors/inheritance_level_collector.go index 1993fe2..59dcdaa 100644 --- a/pkg/collectors_shared/inheritance_level_collector.go +++ b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go @@ -1,17 +1,17 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) type InheritanceLevelCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map2.AstMap + astMap *dtosAstMap.AstMap } func NewInheritanceLevelCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritanceLevelCollector, error) { @@ -25,12 +25,12 @@ func NewInheritanceLevelCollector(astMapExtractor *ast_map.AstMapExtractor) (*In }, nil } -func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { +func (c *InheritanceLevelCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.ClassLikeReference); !ok { return false, nil } - classInherits := c.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) + classInherits := c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) if !utils.MapKeyExists(config, "value") || utils.MapKeyIsInt(config, "value") { return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritanceLevelCollector needs inheritance depth as int.") diff --git a/pkg/collectors_shared/inherits_collector.go b/pkg/application/services/dependencies_collectors/inherits_collector.go similarity index 67% rename from pkg/collectors_shared/inherits_collector.go rename to pkg/application/services/dependencies_collectors/inherits_collector.go index 4284fc5..1da3994 100644 --- a/pkg/collectors_shared/inherits_collector.go +++ b/pkg/application/services/dependencies_collectors/inherits_collector.go @@ -1,17 +1,17 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) type InheritsCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map2.AstMap + astMap *dtosAstMap.AstMap } func NewInheritsCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritsCollector, error) { @@ -25,8 +25,8 @@ func NewInheritsCollector(astMapExtractor *ast_map.AstMapExtractor) (*InheritsCo }, nil } -func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { +func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.ClassLikeReference); !ok { return false, nil } @@ -35,7 +35,7 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tok return false, err } - for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) { + for _, inherit := range c.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { if inherit.ClassLikeName.Equals(classLikeName) { return true, nil } @@ -44,10 +44,10 @@ func (c *InheritsCollector) Satisfy(config map[string]interface{}, reference tok return false, nil } -func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*tokens2.ClassLikeToken, error) { +func (c *InheritsCollector) getClassLikeName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("InheritsCollector needs the interface, trait or class name as a string.") } - return tokens2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/collectors_shared/interface_collector.go b/pkg/application/services/dependencies_collectors/interface_collector.go similarity index 91% rename from pkg/collectors_shared/interface_collector.go rename to pkg/application/services/dependencies_collectors/interface_collector.go index d1afa71..501ea86 100644 --- a/pkg/collectors_shared/interface_collector.go +++ b/pkg/application/services/dependencies_collectors/interface_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors_shared/layer_collector.go b/pkg/application/services/dependencies_collectors/layer_collector.go similarity index 71% rename from pkg/collectors_shared/layer_collector.go rename to pkg/application/services/dependencies_collectors/layer_collector.go index cda8273..184e15c 100644 --- a/pkg/collectors_shared/layer_collector.go +++ b/pkg/application/services/dependencies_collectors/layer_collector.go @@ -1,8 +1,8 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" - apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/layers" @@ -22,7 +22,7 @@ func NewLayerCollector(resolver layers.LayerResolverInterface) *LayerCollector { func (c *LayerCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { if _, ok := config["value"]; !ok { if _, ok2 := config["value"].(string); !ok2 { - return false, apperrors2.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("LayerCollector needs the layer_contract configuration, expected 'value' config_contract is missing or invalid.") } } @@ -33,14 +33,14 @@ func (c *LayerCollector) Satisfy(config map[string]interface{}, reference tokens return false, err } if !hasInResolver { - return false, apperrors2.NewInvalidCollectorDefinitionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer_contract \"%s\" specified in collector.", configValueLayer)) + return false, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration(fmt.Sprintf("Unknown layer_contract \"%s\" specified in collector.", configValueLayer)) } token := reference.GetToken().ToString() if utils.MapKeyExists(c.resolved, token) && utils.MapKeyExists(c.resolved[token], configValueLayer) { if c.resolved[token][configValueLayer] == nil { - return false, apperrors2.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) + return false, apperrors.NewInvalidLayerDefinitionExceptionCircularTokenReference(token) } return *c.resolved[token][configValueLayer], nil diff --git a/pkg/collectors_shared/method_collector.go b/pkg/application/services/dependencies_collectors/method_collector.go similarity index 82% rename from pkg/collectors_shared/method_collector.go rename to pkg/application/services/dependencies_collectors/method_collector.go index 1afdc44..671da02 100644 --- a/pkg/collectors_shared/method_collector.go +++ b/pkg/application/services/dependencies_collectors/method_collector.go @@ -1,9 +1,9 @@ -package collectors_shared +package dependencies_collectors import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/parsers" ) @@ -20,8 +20,8 @@ func NewMethodCollector(astParser *parsers.NikicPhpParser) *MethodCollector { } } -func (c *MethodCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { +func (c *MethodCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.ClassLikeReference); !ok { return false, nil } @@ -30,7 +30,7 @@ func (c *MethodCollector) Satisfy(config map[string]interface{}, reference token return false, err } - classLike := c.astParser.GetNodeForClassLikeReference(reference.(*tokens_references2.ClassLikeReference)) + classLike := c.astParser.GetNodeForClassLikeReference(reference.(*tokens_references.ClassLikeReference)) if classLike == nil { return false, nil } diff --git a/pkg/collectors_shared/regex_collector.go b/pkg/application/services/dependencies_collectors/regex_collector.go similarity index 94% rename from pkg/collectors_shared/regex_collector.go rename to pkg/application/services/dependencies_collectors/regex_collector.go index d545707..ec35041 100644 --- a/pkg/collectors_shared/regex_collector.go +++ b/pkg/application/services/dependencies_collectors/regex_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/collectors_shared/superglobal_collector.go b/pkg/application/services/dependencies_collectors/superglobal_collector.go similarity index 77% rename from pkg/collectors_shared/superglobal_collector.go rename to pkg/application/services/dependencies_collectors/superglobal_collector.go index 53267c1..2b229fc 100644 --- a/pkg/collectors_shared/superglobal_collector.go +++ b/pkg/application/services/dependencies_collectors/superglobal_collector.go @@ -1,8 +1,8 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) @@ -12,8 +12,8 @@ func NewSuperglobalCollector() *SuperglobalCollector { return &SuperglobalCollector{} } -func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.VariableReference); !ok { +func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.VariableReference); !ok { return false, nil } diff --git a/pkg/collectors_shared/trait_collector.go b/pkg/application/services/dependencies_collectors/trait_collector.go similarity index 91% rename from pkg/collectors_shared/trait_collector.go rename to pkg/application/services/dependencies_collectors/trait_collector.go index 4ab1b15..1e3c10f 100644 --- a/pkg/collectors_shared/trait_collector.go +++ b/pkg/application/services/dependencies_collectors/trait_collector.go @@ -1,4 +1,4 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/collectors_shared/uses_collector.go b/pkg/application/services/dependencies_collectors/uses_collector.go similarity index 68% rename from pkg/collectors_shared/uses_collector.go rename to pkg/application/services/dependencies_collectors/uses_collector.go index fbca6db..25f5b67 100644 --- a/pkg/collectors_shared/uses_collector.go +++ b/pkg/application/services/dependencies_collectors/uses_collector.go @@ -1,18 +1,18 @@ -package collectors_shared +package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) type UsesCollector struct { astMapExtractor *ast_map.AstMapExtractor - astMap *ast_map2.AstMap + astMap *dtosAstMap.AstMap } func NewUsesCollector(astMapExtractor *ast_map.AstMapExtractor) (*UsesCollector, error) { @@ -26,8 +26,8 @@ func NewUsesCollector(astMapExtractor *ast_map.AstMapExtractor) (*UsesCollector, }, nil } -func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens_references2.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references2.ClassLikeReference); !ok { +func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { + if _, ok := reference.(*tokens_references.ClassLikeReference); !ok { return false, nil } @@ -36,7 +36,7 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens_ return false, err } - for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens2.ClassLikeToken)) { + for _, inherit := range u.astMap.GetClassInherits(reference.GetToken().(*tokens.ClassLikeToken)) { if enums.AstInheritTypeUses == inherit.Type && inherit.ClassLikeName.Equals(traitName) { return true, nil } @@ -45,10 +45,10 @@ func (u *UsesCollector) Satisfy(config map[string]interface{}, reference tokens_ return false, nil } -func (u *UsesCollector) getTraitName(config map[string]interface{}) (*tokens2.ClassLikeToken, error) { +func (u *UsesCollector) getTraitName(config map[string]interface{}) (*tokens.ClassLikeToken, error) { if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsString(config, "value") { return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("UsesCollector needs the trait name as a string.") } - return tokens2.NewClassLikeTokenFromFQCN(config["value"].(string)), nil + return tokens.NewClassLikeTokenFromFQCN(config["value"].(string)), nil } diff --git a/pkg/emitters/class_dependency_emitter.go b/pkg/application/services/emitters/class_dependency_emitter.go similarity index 100% rename from pkg/emitters/class_dependency_emitter.go rename to pkg/application/services/emitters/class_dependency_emitter.go diff --git a/pkg/emitters/class_superglobal_dependency_emitter.go b/pkg/application/services/emitters/class_superglobal_dependency_emitter.go similarity index 100% rename from pkg/emitters/class_superglobal_dependency_emitter.go rename to pkg/application/services/emitters/class_superglobal_dependency_emitter.go diff --git a/pkg/emitters/dependency_emitter_interface.go b/pkg/application/services/emitters/dependency_emitter_interface.go similarity index 100% rename from pkg/emitters/dependency_emitter_interface.go rename to pkg/application/services/emitters/dependency_emitter_interface.go diff --git a/pkg/emitters/file_dependency_emitter.go b/pkg/application/services/emitters/file_dependency_emitter.go similarity index 100% rename from pkg/emitters/file_dependency_emitter.go rename to pkg/application/services/emitters/file_dependency_emitter.go diff --git a/pkg/emitters/function_call_dependency_emitter.go b/pkg/application/services/emitters/function_call_dependency_emitter.go similarity index 100% rename from pkg/emitters/function_call_dependency_emitter.go rename to pkg/application/services/emitters/function_call_dependency_emitter.go diff --git a/pkg/emitters/function_dependency_emitter.go b/pkg/application/services/emitters/function_dependency_emitter.go similarity index 100% rename from pkg/emitters/function_dependency_emitter.go rename to pkg/application/services/emitters/function_dependency_emitter.go diff --git a/pkg/emitters/function_superglobal_dependency_emitter.go b/pkg/application/services/emitters/function_superglobal_dependency_emitter.go similarity index 100% rename from pkg/emitters/function_superglobal_dependency_emitter.go rename to pkg/application/services/emitters/function_superglobal_dependency_emitter.go diff --git a/pkg/emitters/uses_dependency_emitter.go b/pkg/application/services/emitters/uses_dependency_emitter.go similarity index 100% rename from pkg/emitters/uses_dependency_emitter.go rename to pkg/application/services/emitters/uses_dependency_emitter.go diff --git a/pkg/collectors_shared/file_input_collector.go b/pkg/application/services/input_collectors/file_input_collector.go similarity index 75% rename from pkg/collectors_shared/file_input_collector.go rename to pkg/application/services/input_collectors/file_input_collector.go index 41e3e6d..bd497c6 100644 --- a/pkg/collectors_shared/file_input_collector.go +++ b/pkg/application/services/input_collectors/file_input_collector.go @@ -1,7 +1,7 @@ -package collectors_shared +package input_collectors import ( - apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "os" "path/filepath" @@ -14,13 +14,13 @@ type FileInputCollector struct { // todo: типы не берутся из типов полей структур } -func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string, basePath string) (InputCollectorInterface, error) { +func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string, basePath string) (InputCollector, error) { fileInfo, err := os.Stat(basePath) if err != nil { return nil, err } if !fileInfo.IsDir() || !utils.IsReadable(basePath) { - return nil, apperrors2.NewInvalidPathExceptionUnreadablePath(fileInfo) + return nil, apperrors.NewInvalidPathExceptionUnreadablePath(fileInfo) } paths := make([]string, 0) for _, originalPath := range originalPaths { @@ -36,7 +36,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string if err != nil { return nil, err } - return nil, apperrors2.NewInvalidPathExceptionUnreadablePath(pathFileInfo) + return nil, apperrors.NewInvalidPathExceptionUnreadablePath(pathFileInfo) } paths = append(paths, utils.PathCanonicalize(path)) } @@ -46,7 +46,7 @@ func NewFileInputCollector(originalPaths []string, excludedFilePatterns []string func (c *FileInputCollector) Collect() ([]string, error) { if len(c.paths) == 0 { - return nil, apperrors2.NewException("No 'paths' defined in the depfile.") + return nil, apperrors.NewException("No 'paths' defined in the depfile.") } regex, err := regexp.Compile(".*\\.go") @@ -64,7 +64,7 @@ func (c *FileInputCollector) Collect() ([]string, error) { return err }) if err != nil { - return nil, apperrors2.NewInputExceptionCouldNotCollectFiles(err) + return nil, apperrors.NewInputExceptionCouldNotCollectFiles(err) } } return paths, nil diff --git a/pkg/application/services/input_collectors/input_collector.go b/pkg/application/services/input_collectors/input_collector.go new file mode 100644 index 0000000..bfb68a4 --- /dev/null +++ b/pkg/application/services/input_collectors/input_collector.go @@ -0,0 +1,5 @@ +package input_collectors + +type InputCollector interface { + Collect() ([]string, error) +} diff --git a/pkg/ast_map/ast_map_extractor.go b/pkg/ast_map/ast_map_extractor.go index 9c2c48d..a896119 100644 --- a/pkg/ast_map/ast_map_extractor.go +++ b/pkg/ast_map/ast_map_extractor.go @@ -1,17 +1,17 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" + "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" ) type AstMapExtractor struct { - inputCollector collectors_shared.InputCollectorInterface + inputCollector input_collectors.InputCollector astLoader *AstLoader astMapCache *ast_map.AstMap } -func NewAstMapExtractor(inputCollector collectors_shared.InputCollectorInterface, astLoader *AstLoader) *AstMapExtractor { +func NewAstMapExtractor(inputCollector input_collectors.InputCollector, astLoader *AstLoader) *AstMapExtractor { return &AstMapExtractor{ inputCollector: inputCollector, astLoader: astLoader, diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index f59e2d6..4da45d8 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -1,7 +1,7 @@ package ast_map import ( - "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" + "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/types" @@ -30,7 +30,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { basePath := wd + "/pkg/" - fileInputCollector, err := collectors_shared.NewFileInputCollector(paths, excluded, basePath) + fileInputCollector, err := input_collectors.NewFileInputCollector(paths, excluded, basePath) if err != nil { t.Error(err) diff --git a/pkg/collectors_shared/collector_resolver_interface.go b/pkg/collectors_shared/collector_resolver_interface.go deleted file mode 100644 index 12f8f80..0000000 --- a/pkg/collectors_shared/collector_resolver_interface.go +++ /dev/null @@ -1,9 +0,0 @@ -package collectors_shared - -import ( - "github.com/KoNekoD/go-deptrac/pkg/violations" -) - -type CollectorResolverInterface interface { - Resolve(config map[string]interface{}) (*violations.Collectable, error) -} diff --git a/pkg/collectors_shared/input_collector_interface.go b/pkg/collectors_shared/input_collector_interface.go deleted file mode 100644 index 07ee8fa..0000000 --- a/pkg/collectors_shared/input_collector_interface.go +++ /dev/null @@ -1,5 +0,0 @@ -package collectors_shared - -type InputCollectorInterface interface { - Collect() ([]string, error) -} diff --git a/pkg/commands/analyse_command.go b/pkg/commands/analyse_command.go index eac4127..fe10235 100644 --- a/pkg/commands/analyse_command.go +++ b/pkg/commands/analyse_command.go @@ -2,11 +2,11 @@ package commands import ( "github.com/KoNekoD/go-deptrac/pkg/app" + event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/subscribers" ) // AnalyseCommand - Analyses your project using the provided depfile @@ -16,12 +16,12 @@ type AnalyseCommand struct { formatterProvider *formatters.FormatterProvider verboseBoolFlag bool debugBoolFlag bool - consoleSubscriber *subscribers.ConsoleSubscriber - progressSubscriber *subscribers.ProgressSubscriber + consoleSubscriber *event_handlers2.Console + progressSubscriber *event_handlers2.Progress analyseOptions *rules.AnalyseOptions } -func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *subscribers.ConsoleSubscriber, progressSubscriber *subscribers.ProgressSubscriber, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, diff --git a/pkg/dependency_resolver.go b/pkg/dependency_resolver.go index 61a83f8..425e8a3 100644 --- a/pkg/dependency_resolver.go +++ b/pkg/dependency_resolver.go @@ -1,6 +1,7 @@ package pkg import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" @@ -8,7 +9,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/emitters" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "reflect" ) @@ -42,14 +42,14 @@ func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependencies.Depe return nil, apperrors.NewInvalidEmitterConfigurationExceptionIsNotEmitter(string(typeConfig), dependencyEmitterInterface) } - err := r.eventDispatcher.DispatchEvent(emitters.NewPreEmitEvent(dependencyEmitterInterface.GetName())) + err := r.eventDispatcher.DispatchEvent(events2.NewPreEmitEvent(dependencyEmitterInterface.GetName())) if err != nil { return nil, err } dependencyEmitterInterface.ApplyDependencies(*astMap, result) - errDispatchPostEmit := r.eventDispatcher.DispatchEvent(emitters.NewPostEmitEvent()) + errDispatchPostEmit := r.eventDispatcher.DispatchEvent(events2.NewPostEmitEvent()) if errDispatchPostEmit != nil { return nil, errDispatchPostEmit } diff --git a/pkg/dispatchers/event_dispatcher_interface2.go b/pkg/dispatchers/event_dispatcher_interface2.go index 5bbc727..fb09c1e 100644 --- a/pkg/dispatchers/event_dispatcher_interface2.go +++ b/pkg/dispatchers/event_dispatcher_interface2.go @@ -2,7 +2,7 @@ package dispatchers import ( "fmt" - subscribers2 "github.com/KoNekoD/go-deptrac/pkg/subscribers" + subscribers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "reflect" "slices" ) @@ -54,7 +54,7 @@ func (d *EventDispatcher) DispatchEvent(event interface{}) error { fmt.Println("calling:", typeName, priority, subscriberName) } - err := subscriber.InvokeEventSubscriber(event, stopPropagation) + err := subscriber.HandleEvent(event, stopPropagation) if err != nil { return err } diff --git a/pkg/domain/dtos/ast_map/ast_map.go b/pkg/domain/dtos/ast_map/ast_map.go index 93d92d9..43330ec 100644 --- a/pkg/domain/dtos/ast_map/ast_map.go +++ b/pkg/domain/dtos/ast_map/ast_map.go @@ -171,11 +171,6 @@ func (a *AstMap) addClassLike(astStructReference tokens_references.ClassLikeRefe panic(token.ToString()) } - // github.com/KoNekoD/go_deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap - if strings.Contains(token.ToString(), "github.com/KoNekoD/go_deptrac/pkg/core/ast_contract/ast_map/emitter.go AstMap") { - panic(token.ToString()) - } - a.ClassReferences[token.ToString()] = &astStructReference } diff --git a/pkg/emitters/post_emit_event.go b/pkg/domain/events/post_emit_event.go similarity index 91% rename from pkg/emitters/post_emit_event.go rename to pkg/domain/events/post_emit_event.go index 61614ed..6c541aa 100644 --- a/pkg/emitters/post_emit_event.go +++ b/pkg/domain/events/post_emit_event.go @@ -1,4 +1,4 @@ -package emitters +package events // PostEmitEvent - Event triggered after all the dependencies have been resolved. type PostEmitEvent struct{} diff --git a/pkg/emitters/pre_emit_event.go b/pkg/domain/events/pre_emit_event.go similarity index 93% rename from pkg/emitters/pre_emit_event.go rename to pkg/domain/events/pre_emit_event.go index 07d2449..731b451 100644 --- a/pkg/emitters/pre_emit_event.go +++ b/pkg/domain/events/pre_emit_event.go @@ -1,4 +1,4 @@ -package emitters +package events // PreEmitEvent - Event triggered before all the dependencies have been resolved. type PreEmitEvent struct { diff --git a/pkg/layers/layer_resolver.go b/pkg/layers/layer_resolver.go index 573fdce..d6623b9 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -2,30 +2,30 @@ package layers import ( "errors" - "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" + dtos2 "github.com/KoNekoD/go-deptrac/pkg/application/dtos" + "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/violations" "reflect" "sync" ) // LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { - collectorResolver collectors_shared.CollectorResolverInterface + collectorResolver collectors_resolvers.CollectorResolverInterface layersConfig []*dtos.Layer - layers map[string][]*violations.Collectable + layers map[string][]*dtos2.Collectable initialized bool resolved map[string]map[string]bool mu sync.Mutex } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collectors_shared.CollectorResolverInterface, layersConfig []*dtos.Layer) LayerResolverInterface { +func NewLayerResolver(collectorResolver collectors_resolvers.CollectorResolverInterface, layersConfig []*dtos.Layer) LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, - layers: make(map[string][]*violations.Collectable), + layers: make(map[string][]*dtos2.Collectable), resolved: make(map[string]map[string]bool), } } @@ -128,14 +128,14 @@ func (r *LayerResolver) Has(layer string) (bool, error) { // initializeLayers initializes the layers from the configuration func (r *LayerResolver) initializeLayers() error { - r.layers = make(map[string][]*violations.Collectable) + r.layers = make(map[string][]*dtos2.Collectable) for _, layer := range r.layersConfig { layerName := layer.Name if _, exists := r.layers[layerName]; exists { return errors.New("invalid layer_contract definition: duplicate name " + layerName) } - r.layers[layerName] = []*violations.Collectable{} + r.layers[layerName] = []*dtos2.Collectable{} for _, config := range layer.Collectors { resolvedCollector, err := r.collectorResolver.Resolve(config.ToArray()) diff --git a/pkg/layers/matching_layers_handler.go b/pkg/layers/matching_layers_handler.go index 968ad6a..8ca8fd3 100644 --- a/pkg/layers/matching_layers_handler.go +++ b/pkg/layers/matching_layers_handler.go @@ -10,7 +10,7 @@ func NewMatchingLayersHandler() *MatchingLayersHandler { return &MatchingLayersHandler{} } -func (m *MatchingLayersHandler) InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error { +func (m *MatchingLayersHandler) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) for dependeeLayer := range event.DependentLayers { if event.DependerLayer != dependeeLayer { diff --git a/pkg/subscribers/event_subscriber_default_priority.go b/pkg/subscribers/event_subscriber_default_priority.go deleted file mode 100644 index 7c955e1..0000000 --- a/pkg/subscribers/event_subscriber_default_priority.go +++ /dev/null @@ -1,3 +0,0 @@ -package subscribers - -const DefaultPriority = 0 diff --git a/pkg/subscribers/event_subscriber_interface.go b/pkg/subscribers/event_subscriber_interface.go deleted file mode 100644 index 5fb4c36..0000000 --- a/pkg/subscribers/event_subscriber_interface.go +++ /dev/null @@ -1,5 +0,0 @@ -package subscribers - -type EventSubscriberInterface interface { - InvokeEventSubscriber(rawEvent interface{}, stopPropagation func()) error -} diff --git a/pkg/subscribers/event_subscriber_interface_map.go b/pkg/subscribers/event_subscriber_interface_map.go deleted file mode 100644 index e7b4ddc..0000000 --- a/pkg/subscribers/event_subscriber_interface_map.go +++ /dev/null @@ -1,7 +0,0 @@ -package subscribers - -import ( - "github.com/elliotchance/orderedmap/v2" -) - -var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventSubscriberInterface]] diff --git a/pkg/violations/collectable.go b/pkg/violations/collectable.go deleted file mode 100644 index ce44d9c..0000000 --- a/pkg/violations/collectable.go +++ /dev/null @@ -1,12 +0,0 @@ -package violations - -import "github.com/KoNekoD/go-deptrac/pkg/collectors_shared" - -type Collectable struct { - Collector collectors_shared.CollectorInterface - Attributes map[string]interface{} -} - -func NewCollectable(collector collectors_shared.CollectorInterface, attributes map[string]interface{}) *Collectable { - return &Collectable{Collector: collector, Attributes: attributes} -} From 32f4813cca2a66d33de5878b8ff7f7f92f740d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:23:09 +0300 Subject: [PATCH 19/40] refactor: structure --- pkg/analysers/dependency_layers_analyser.go | 8 ++++---- pkg/analysers/layer_dependencies_analyser.go | 2 +- pkg/app/analyse_runner.go | 3 ++- pkg/app/changed_files_runner.go | 5 +++-- pkg/application/event_handlers/allow_dependency.go | 2 +- .../event_handlers/depends_on_disallowed_layer.go | 2 +- .../event_handlers/uncovered_dependent.go | 2 +- .../event_handlers/unmatched_skipped_violations.go | 2 +- pkg/dispatchers/event_helper.go | 6 +++--- .../analysis_result.go | 6 +++--- .../{analysis_results => results}/issues/error.go | 0 .../{analysis_results => results}/issues/warning.go | 0 pkg/{ => domain/dtos}/results/output_result.go | 13 ++++++------- .../violations_rules/allowed.go | 0 .../violations_rules/rule_interface.go | 0 .../violations_rules/skipped_violation.go | 0 .../violations_rules/uncovered.go | 0 .../violations_rules/violation.go | 0 .../violation_creating_interface.go | 0 pkg/domain/events/post_process_event.go | 10 +++++----- pkg/domain/events/process_event.go | 10 +++++----- pkg/formatters/baseline_output_formatter.go | 5 +++-- pkg/formatters/codeclimate_output_formatter.go | 5 +++-- pkg/formatters/console_output_formatter.go | 13 +++++++------ pkg/formatters/github_actions_output_formatter.go | 11 ++++++----- pkg/formatters/graph_viz_output_formatter.go | 5 +++-- pkg/formatters/json_output_formatter.go | 5 +++-- pkg/formatters/junit_output_formatter.go | 9 +++++---- pkg/formatters/mermaid_js_output_formatter.go | 5 +++-- pkg/formatters/output_formatter_interface.go | 3 ++- pkg/formatters/table_output_formatter.go | 11 ++++++----- pkg/formatters/xml_output_formatter.go | 7 ++++--- 32 files changed, 81 insertions(+), 69 deletions(-) rename pkg/domain/dtos/{analysis_results => results}/analysis_result.go (91%) rename pkg/domain/dtos/{analysis_results => results}/issues/error.go (100%) rename pkg/domain/dtos/{analysis_results => results}/issues/warning.go (100%) rename pkg/{ => domain/dtos}/results/output_result.go (81%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/allowed.go (100%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/rule_interface.go (100%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/skipped_violation.go (100%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/uncovered.go (100%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/violation.go (100%) rename pkg/domain/dtos/{analysis_results => results}/violations_rules/violation_creating_interface.go (100%) diff --git a/pkg/analysers/dependency_layers_analyser.go b/pkg/analysers/dependency_layers_analyser.go index 3d24451..9a45c23 100644 --- a/pkg/analysers/dependency_layers_analyser.go +++ b/pkg/analysers/dependency_layers_analyser.go @@ -5,8 +5,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" @@ -37,7 +37,7 @@ func NewDependencyLayersAnalyser( } } -func (a *DependencyLayersAnalyser) Analyse() (*analysis_results.AnalysisResult, error) { +func (a *DependencyLayersAnalyser) Analyse() (*results.AnalysisResult, error) { astMap, err := a.astMapExtractor.Extract() if err != nil { return nil, err @@ -46,7 +46,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*analysis_results.AnalysisResult, if err != nil { return nil, err } - analysisResult := analysis_results.NewAnalysisResult() + analysisResult := results.NewAnalysisResult() warnings := make(map[string]*issues.Warning) for _, dependency := range dependencies.GetDependenciesAndInheritDependencies() { depender := dependency.GetDepender() diff --git a/pkg/analysers/layer_dependencies_analyser.go b/pkg/analysers/layer_dependencies_analyser.go index 4e993de..6782ac2 100644 --- a/pkg/analysers/layer_dependencies_analyser.go +++ b/pkg/analysers/layer_dependencies_analyser.go @@ -3,7 +3,7 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) diff --git a/pkg/app/analyse_runner.go b/pkg/app/analyse_runner.go index 1b97ca6..f3659f9 100644 --- a/pkg/app/analyse_runner.go +++ b/pkg/app/analyse_runner.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/results" @@ -44,7 +45,7 @@ func (r *AnalyseRunner) Run(options *rules.AnalyseOptions, output results.Output r.printAnalysisException(output, multierror.Append(errAnalyse)) return apperrors.NewCommandRunExceptionAnalyserException(errAnalyse) } - result := results.NewOutputResultFromAnalysisResult(analysisResult) + result := results2.NewOutputResultFromAnalysisResult(analysisResult) r.printFormattingStart(output) errFinish := formatter.Finish(result, output, formatterInput) if errFinish != nil { diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index a83eeb2..e2a3f63 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -3,7 +3,8 @@ package app import ( "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -44,7 +45,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output r if err != nil { return apperrors.NewCommandRunExceptionAnalyserException(err) } - analysisResult := results.NewOutputResultFromAnalysisResult(analyseResult) + analysisResult := results2.NewOutputResultFromAnalysisResult(analyseResult) layersDependOnLayers := r.calculateLayerDependencies(analysisResult.AllRules()) layerDependencies := make(map[string]string) for _, layer := range layers { diff --git a/pkg/application/event_handlers/allow_dependency.go b/pkg/application/event_handlers/allow_dependency.go index f265071..ef1cdb9 100644 --- a/pkg/application/event_handlers/allow_dependency.go +++ b/pkg/application/event_handlers/allow_dependency.go @@ -1,7 +1,7 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) diff --git a/pkg/application/event_handlers/depends_on_disallowed_layer.go b/pkg/application/event_handlers/depends_on_disallowed_layer.go index fa20535..e3c683b 100644 --- a/pkg/application/event_handlers/depends_on_disallowed_layer.go +++ b/pkg/application/event_handlers/depends_on_disallowed_layer.go @@ -2,7 +2,7 @@ package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) diff --git a/pkg/application/event_handlers/uncovered_dependent.go b/pkg/application/event_handlers/uncovered_dependent.go index 84a830a..20dbb73 100644 --- a/pkg/application/event_handlers/uncovered_dependent.go +++ b/pkg/application/event_handlers/uncovered_dependent.go @@ -1,7 +1,7 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) diff --git a/pkg/application/event_handlers/unmatched_skipped_violations.go b/pkg/application/event_handlers/unmatched_skipped_violations.go index 945729a..5a42cf7 100644 --- a/pkg/application/event_handlers/unmatched_skipped_violations.go +++ b/pkg/application/event_handlers/unmatched_skipped_violations.go @@ -3,7 +3,7 @@ package event_handlers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) diff --git a/pkg/dispatchers/event_helper.go b/pkg/dispatchers/event_helper.go index fca3e10..b52ad8e 100644 --- a/pkg/dispatchers/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -1,8 +1,8 @@ package dispatchers import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/layers" @@ -54,7 +54,7 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *analysis_results.AnalysisResult, dependentLayer string, violationCreatingRule violations2.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *results.AnalysisResult, dependentLayer string, violationCreatingRule violations2.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { analysisResult.AddRule(violations2.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { diff --git a/pkg/domain/dtos/analysis_results/analysis_result.go b/pkg/domain/dtos/results/analysis_result.go similarity index 91% rename from pkg/domain/dtos/analysis_results/analysis_result.go rename to pkg/domain/dtos/results/analysis_result.go index 9c04de6..78cd2b8 100644 --- a/pkg/domain/dtos/analysis_results/analysis_result.go +++ b/pkg/domain/dtos/results/analysis_result.go @@ -1,9 +1,9 @@ -package analysis_results +package results import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) diff --git a/pkg/domain/dtos/analysis_results/issues/error.go b/pkg/domain/dtos/results/issues/error.go similarity index 100% rename from pkg/domain/dtos/analysis_results/issues/error.go rename to pkg/domain/dtos/results/issues/error.go diff --git a/pkg/domain/dtos/analysis_results/issues/warning.go b/pkg/domain/dtos/results/issues/warning.go similarity index 100% rename from pkg/domain/dtos/analysis_results/issues/warning.go rename to pkg/domain/dtos/results/issues/warning.go diff --git a/pkg/results/output_result.go b/pkg/domain/dtos/results/output_result.go similarity index 81% rename from pkg/results/output_result.go rename to pkg/domain/dtos/results/output_result.go index 175356b..8820d74 100644 --- a/pkg/results/output_result.go +++ b/pkg/domain/dtos/results/output_result.go @@ -1,24 +1,23 @@ package results import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" - analysis_results_failure2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/issues" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) // OutputResult - Represents a result_contract ready for output formatting type OutputResult struct { rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface - Errors []*analysis_results_failure2.Error - Warnings []*analysis_results_failure2.Warning + Errors []*issues.Error + Warnings []*issues.Warning } -func newOutputResult(rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface, errors []*analysis_results_failure2.Error, warnings []*analysis_results_failure2.Warning) *OutputResult { +func newOutputResult(rules map[enums.RuleTypeEnum]map[string]violations_rules.RuleInterface, errors []*issues.Error, warnings []*issues.Warning) *OutputResult { return &OutputResult{rules: rules, Errors: errors, Warnings: warnings} } -func NewOutputResultFromAnalysisResult(analysisResult *analysis_results.AnalysisResult) *OutputResult { +func NewOutputResultFromAnalysisResult(analysisResult *AnalysisResult) *OutputResult { return newOutputResult( analysisResult.Rules(), analysisResult.Errors(), diff --git a/pkg/domain/dtos/analysis_results/violations_rules/allowed.go b/pkg/domain/dtos/results/violations_rules/allowed.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/allowed.go rename to pkg/domain/dtos/results/violations_rules/allowed.go diff --git a/pkg/domain/dtos/analysis_results/violations_rules/rule_interface.go b/pkg/domain/dtos/results/violations_rules/rule_interface.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/rule_interface.go rename to pkg/domain/dtos/results/violations_rules/rule_interface.go diff --git a/pkg/domain/dtos/analysis_results/violations_rules/skipped_violation.go b/pkg/domain/dtos/results/violations_rules/skipped_violation.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/skipped_violation.go rename to pkg/domain/dtos/results/violations_rules/skipped_violation.go diff --git a/pkg/domain/dtos/analysis_results/violations_rules/uncovered.go b/pkg/domain/dtos/results/violations_rules/uncovered.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/uncovered.go rename to pkg/domain/dtos/results/violations_rules/uncovered.go diff --git a/pkg/domain/dtos/analysis_results/violations_rules/violation.go b/pkg/domain/dtos/results/violations_rules/violation.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/violation.go rename to pkg/domain/dtos/results/violations_rules/violation.go diff --git a/pkg/domain/dtos/analysis_results/violations_rules/violation_creating_interface.go b/pkg/domain/dtos/results/violations_rules/violation_creating_interface.go similarity index 100% rename from pkg/domain/dtos/analysis_results/violations_rules/violation_creating_interface.go rename to pkg/domain/dtos/results/violations_rules/violation_creating_interface.go diff --git a/pkg/domain/events/post_process_event.go b/pkg/domain/events/post_process_event.go index 1764866..47472d8 100644 --- a/pkg/domain/events/post_process_event.go +++ b/pkg/domain/events/post_process_event.go @@ -1,24 +1,24 @@ package events import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" ) // PostProcessEvent - Event fired after the analysis is complete. Useful if you want to change the result_contract of the analysis after it has completed and before it is returned for output processing. type PostProcessEvent struct { - result *analysis_results.AnalysisResult + result *results.AnalysisResult } -func NewPostProcessEvent(result *analysis_results.AnalysisResult) *PostProcessEvent { +func NewPostProcessEvent(result *results.AnalysisResult) *PostProcessEvent { return &PostProcessEvent{ result: result, } } -func (e *PostProcessEvent) GetResult() *analysis_results.AnalysisResult { +func (e *PostProcessEvent) GetResult() *results.AnalysisResult { return e.result } -func (e *PostProcessEvent) ReplaceResult(result *analysis_results.AnalysisResult) { +func (e *PostProcessEvent) ReplaceResult(result *results.AnalysisResult) { e.result = result } diff --git a/pkg/domain/events/process_event.go b/pkg/domain/events/process_event.go index b6c8b63..c3a6b6c 100644 --- a/pkg/domain/events/process_event.go +++ b/pkg/domain/events/process_event.go @@ -1,8 +1,8 @@ package events import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) @@ -13,7 +13,7 @@ type ProcessEvent struct { DependerLayer string DependentReference tokens_references.TokenReferenceInterface DependentLayers map[string]bool - result *analysis_results.AnalysisResult + result *results.AnalysisResult } func NewProcessEvent( @@ -22,7 +22,7 @@ func NewProcessEvent( dependerLayer string, dependentReference tokens_references.TokenReferenceInterface, dependentLayers map[string]bool, - result *analysis_results.AnalysisResult, + result *results.AnalysisResult, ) *ProcessEvent { return &ProcessEvent{ Dependency: dependency, @@ -34,10 +34,10 @@ func NewProcessEvent( } } -func (e *ProcessEvent) GetResult() *analysis_results.AnalysisResult { +func (e *ProcessEvent) GetResult() *results.AnalysisResult { return e.result } -func (e *ProcessEvent) ReplaceResult(result *analysis_results.AnalysisResult) { +func (e *ProcessEvent) ReplaceResult(result *results.AnalysisResult) { e.result = result } diff --git a/pkg/formatters/baseline_output_formatter.go b/pkg/formatters/baseline_output_formatter.go index a4cd3b3..829402f 100644 --- a/pkg/formatters/baseline_output_formatter.go +++ b/pkg/formatters/baseline_output_formatter.go @@ -1,6 +1,7 @@ package formatters import ( + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" @@ -19,7 +20,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -56,7 +57,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, out return nil } -func (b *BaselineOutputFormatter) collectViolations(outputResult *results.OutputResult) map[string][]string { +func (b *BaselineOutputFormatter) collectViolations(outputResult *results2.OutputResult) map[string][]string { violations := make(map[string]map[string]string) for _, rule := range append(outputResult.AllOf(enums.TypeViolation), outputResult.AllOf(enums.TypeSkippedViolation)...) { dependency := rule.GetDependency() diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go index 9430ff4..b5f0c2b 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -4,7 +4,8 @@ import ( "crypto/sha1" "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" @@ -24,7 +25,7 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { formatterConfig := enums2.NewConfigurationCodeclimateFromArray(f.config) var violations []map[string]interface{} diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index 2e60acd..50f3031 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -3,8 +3,9 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "strings" @@ -20,7 +21,7 @@ func (f *ConsoleOutputFormatter) GetName() string { return "console_supportive" } -func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) { +func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { f.printViolation(rule.(*violations_rules.Violation), output) } @@ -90,7 +91,7 @@ func (f *ConsoleOutputFormatter) printMultilinePath(output results.OutputInterfa output.WriteLineFormatted(results.StringOrArrayOfStrings{String: buffer.String()}) } -func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output results.OutputInterface) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -108,7 +109,7 @@ func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, outpu output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) } -func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output results.OutputInterface) { uncovered := result.Uncovered() if len(uncovered) == 0 { return @@ -138,14 +139,14 @@ func (f *ConsoleOutputFormatter) printFileOccurrence(output results.OutputInterf output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } -func (f *ConsoleOutputFormatter) printErrors(result results.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output results.OutputInterface) { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) for _, err := range result.Errors { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) } } -func (f *ConsoleOutputFormatter) printWarnings(result results.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output results.OutputInterface) { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) for _, warning := range result.Warnings { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go index 8fb2320..d5beefd 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/formatters/github_actions_output_formatter.go @@ -2,8 +2,9 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "strings" @@ -19,7 +20,7 @@ func (g *GithubActionsOutputFormatter) GetName() enums2.OutputFormatterType { return enums2.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { for _, rule := range outputResult.AllOf(enums2.TypeViolation) { g.printViolation(rule, output) } @@ -52,7 +53,7 @@ func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.R } } -func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResult, output results.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output results.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -85,13 +86,13 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.Dep return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *results.OutputResult, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output results.OutputInterface) { for _, e := range result.Errors { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResult, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output results.OutputInterface) { for _, warning := range result.Warnings { output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index 052ac5e..0277cfb 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -2,8 +2,9 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" @@ -21,7 +22,7 @@ func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFo return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) diff --git a/pkg/formatters/json_output_formatter.go b/pkg/formatters/json_output_formatter.go index dffe25b..39a3f50 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -3,7 +3,8 @@ package formatters import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "os" @@ -20,7 +21,7 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go index e7c8876..4aedbcf 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -3,7 +3,8 @@ package formatters import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" @@ -23,7 +24,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -42,7 +43,7 @@ func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output result return nil } -func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (string, error) { +func (f *JUnitOutputFormatter) createXML(outputResult results2.OutputResult) (string, error) { testSuites := TestSuites{} if outputResult.HasErrors() { errorSuite := TestSuite{ @@ -126,7 +127,7 @@ func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (str return xml.Header + string(xmlData), nil } -func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResult) map[string][]violations_rules.RuleInterface { +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results2.OutputResult) map[string][]violations_rules.RuleInterface { layers := make(map[string][]violations_rules.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { diff --git a/pkg/formatters/mermaid_js_output_formatter.go b/pkg/formatters/mermaid_js_output_formatter.go index a30d2c2..fbdb6d0 100644 --- a/pkg/formatters/mermaid_js_output_formatter.go +++ b/pkg/formatters/mermaid_js_output_formatter.go @@ -3,6 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/results" "os" "strings" @@ -31,7 +32,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder @@ -92,7 +93,7 @@ func (f *MermaidJSOutputFormatter) Finish(result results.OutputResult, output re return nil } -func (f *MermaidJSOutputFormatter) parseResults(result results.OutputResult) map[string]map[string]int { +func (f *MermaidJSOutputFormatter) parseResults(result results2.OutputResult) map[string]map[string]int { graph := make(map[string]map[string]int) for _, rule := range result.Allowed() { dependerLayer := rule.GetDependerLayer() diff --git a/pkg/formatters/output_formatter_interface.go b/pkg/formatters/output_formatter_interface.go index 204d100..564fbab 100644 --- a/pkg/formatters/output_formatter_interface.go +++ b/pkg/formatters/output_formatter_interface.go @@ -1,6 +1,7 @@ package formatters import ( + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" ) @@ -10,5 +11,5 @@ type OutputFormatterInterface interface { GetName() enums.OutputFormatterType // Finish - Renders the final result_contract. - Finish(result *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error + Finish(result *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/formatters/table_output_formatter.go b/pkg/formatters/table_output_formatter.go index baf4adb..94738a0 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -2,8 +2,9 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" @@ -22,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { return enums.Table } -func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { @@ -110,7 +111,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyIn return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output results.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output results.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -179,7 +180,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output results.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output results.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -189,7 +190,7 @@ func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *results.OutputResult, output results.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output results.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/formatters/xml_output_formatter.go b/pkg/formatters/xml_output_formatter.go index 8506ba5..9c92351 100644 --- a/pkg/formatters/xml_output_formatter.go +++ b/pkg/formatters/xml_output_formatter.go @@ -3,7 +3,8 @@ package formatters import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/analysis_results/violations_rules" + results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" "os" @@ -22,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result results.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -41,7 +42,7 @@ func (f *XMLOutputFormatter) Finish(result results.OutputResult, output results. return nil } -func (f *XMLOutputFormatter) createXML(dependencyContext results.OutputResult) (string, error) { +func (f *XMLOutputFormatter) createXML(dependencyContext results2.OutputResult) (string, error) { entries := Entries{} for _, rule := range dependencyContext.Violations() { From 9063eeee8694725952a2726ca30e34b6731cc4c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:29:44 +0300 Subject: [PATCH 20/40] refactor: structure --- .../ruleset_usage_analyser.go | 8 ++--- pkg/app/changed_files_runner.go | 5 ++- pkg/app/container_builder.go | 8 ++--- pkg/app/service_container_builder.go | 2 +- pkg/app/services.go | 6 ++-- .../depends_on_internal_token.go | 4 +-- pkg/ast_map/ast_map_extractor_test.go | 4 +-- pkg/dependency_resolver.go | 6 ++-- .../dtos/{ => configs}/analyser_config.go | 2 +- .../dtos}/configs/deptrac_config.go | 35 +++++++++---------- .../formatters_configs/graphviz_config.go | 14 ++++---- .../formatters_configs/mermaid_js_config.go | 8 ++--- .../covered_rule_interface.go | 2 +- pkg/domain/dtos/{ => rules}/layer.go | 2 +- pkg/{ => domain/dtos}/rules/ruleset.go | 16 ++++----- .../reference_extractor_interface.go | 5 +-- pkg/formatters/graph_viz_output_formatter.go | 3 +- pkg/formatters/junit_output_formatter.go | 3 +- pkg/layers/layer_provider.go | 2 +- pkg/layers/layer_resolver.go | 6 ++-- pkg/parsers/nikic_php_parser.go | 12 ++++--- .../file_reference_visitor.go | 12 ++++--- .../file_reference_visitor_test.go | 8 +++-- .../class_like_reference_builder.go | 2 +- .../file_reference_builder.go | 2 +- .../function_reference_builder.go | 2 +- .../reference_builder.go | 2 +- pkg/tokens/token_in_layer_analyser.go | 6 ++-- pkg/tokens/unassigned_token_analyser.go | 6 ++-- 29 files changed, 96 insertions(+), 97 deletions(-) rename pkg/{rules => analysers}/ruleset_usage_analyser.go (95%) rename pkg/domain/dtos/{ => configs}/analyser_config.go (98%) rename pkg/{ => domain/dtos}/configs/deptrac_config.go (90%) rename pkg/{rules => domain/dtos/results/violations_rules}/covered_rule_interface.go (92%) rename pkg/domain/dtos/{ => rules}/layer.go (98%) rename pkg/{ => domain/dtos}/rules/ruleset.go (63%) rename pkg/{references => extractors}/reference_extractor_interface.go (65%) rename pkg/{references => reference_visitors}/file_reference_visitor.go (92%) rename pkg/{references => reference_visitors}/file_reference_visitor_test.go (75%) rename pkg/{references => references_builders}/class_like_reference_builder.go (99%) rename pkg/{references => references_builders}/file_reference_builder.go (99%) rename pkg/{references => references_builders}/function_reference_builder.go (97%) rename pkg/{references => references_builders}/reference_builder.go (99%) diff --git a/pkg/rules/ruleset_usage_analyser.go b/pkg/analysers/ruleset_usage_analyser.go similarity index 95% rename from pkg/rules/ruleset_usage_analyser.go rename to pkg/analysers/ruleset_usage_analyser.go index beabfc8..cca6899 100644 --- a/pkg/rules/ruleset_usage_analyser.go +++ b/pkg/analysers/ruleset_usage_analyser.go @@ -1,9 +1,9 @@ -package rules +package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/tokens" ) @@ -14,7 +14,7 @@ type RulesetUsageAnalyser struct { astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver tokenResolver *tokens.TokenResolver - layers []*dtos.Layer + layers []*rules.Layer } func NewRulesetUsageAnalyser( @@ -23,7 +23,7 @@ func NewRulesetUsageAnalyser( astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, tokenResolver *tokens.TokenResolver, - layers []*dtos.Layer, + layers []*rules.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ layerProvider: layerProvider, diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index e2a3f63..1f0632d 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -7,7 +7,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" "golang.org/x/exp/maps" "strings" @@ -69,10 +68,10 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output r func (r *ChangedFilesRunner) calculateLayerDependencies(rulesList []violations_rules.RuleInterface) map[string]map[string]string { layersDependOnLayers := make(map[string]map[string]string) for _, rule := range rulesList { - if _, ok := rule.(rules.CoveredRuleInterface); !ok { + if _, ok := rule.(violations_rules.CoveredRuleInterface); !ok { continue } - rule := rule.(rules.CoveredRuleInterface) + rule := rule.(violations_rules.CoveredRuleInterface) layerA := rule.GetDependerLayer() layerB := rule.GetDependentLayer() if _, ok := layersDependOnLayers[layerB]; !ok { diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index e23599f..dfff2e7 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -9,17 +9,17 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" - "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -41,7 +41,7 @@ type ContainerBuilder struct { CacheableFileSubscriber *event_handlers2.CacheableFile AstFileReferenceInMemoryCache *ast_map.AstFileReferenceInMemoryCache TypeResolver *types.TypeResolver - ReferenceExtractors []references.ReferenceExtractorInterface + ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parsers.ParserInterface LayerProvider *layers.LayerProvider EventHelper *dispatchers.EventHelper @@ -72,7 +72,7 @@ type ContainerBuilder struct { LayerForTokenAnalyser *tokens.LayerForTokenAnalyser UnassignedTokenAnalyser *tokens.UnassignedTokenAnalyser LayerDependenciesAnalyser *analysers.LayerDependenciesAnalyser - RulesetUsageAnalyser *rules.RulesetUsageAnalyser + RulesetUsageAnalyser *analysers.RulesetUsageAnalyser FormatterProvider *formatters.FormatterProvider FormatterConfiguration *formatters.FormatterConfiguration AnalyseRunner *AnalyseRunner diff --git a/pkg/app/service_container_builder.go b/pkg/app/service_container_builder.go index d9b707b..373335a 100644 --- a/pkg/app/service_container_builder.go +++ b/pkg/app/service_container_builder.go @@ -3,8 +3,8 @@ package app import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - "github.com/KoNekoD/go-deptrac/pkg/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "os" "path/filepath" diff --git a/pkg/app/services.go b/pkg/app/services.go index 65e16ab..c7633e2 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -19,12 +19,12 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" @@ -83,7 +83,7 @@ func Services(builder *ContainerBuilder) error { builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache } typeResolver := types.NewTypeResolver(nodeNamer) - referenceExtractors := []references.ReferenceExtractorInterface{ + referenceExtractors := []extractors.ReferenceExtractorInterface{ /** TODO: Implement all reference extractors @@ -266,7 +266,7 @@ func Services(builder *ContainerBuilder) error { layerForTokenAnalyser := tokens.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) unassignedTokenAnalyser := tokens.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerDependenciesAnalyser := analysers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := rules.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) + rulesetUsageAnalyser := analysers.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* * Console diff --git a/pkg/application/event_handlers/depends_on_internal_token.go b/pkg/application/event_handlers/depends_on_internal_token.go index 831dcc8..35a6190 100644 --- a/pkg/application/event_handlers/depends_on_internal_token.go +++ b/pkg/application/event_handlers/depends_on_internal_token.go @@ -2,7 +2,7 @@ package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) @@ -12,7 +12,7 @@ type DependsOnInternalToken struct { internalTag *string } -func NewDependsOnInternalToken(eventHelper *dispatchers.EventHelper, analyser *dtos.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *dispatchers.EventHelper, analyser *configs.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index 4da45d8..bc7272e 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -2,8 +2,8 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/references" "github.com/KoNekoD/go-deptrac/pkg/types" "os" "testing" @@ -43,7 +43,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { nil, ), nil, - []references.ReferenceExtractorInterface{}, + []extractors.ReferenceExtractorInterface{}, ), nil, ) diff --git a/pkg/dependency_resolver.go b/pkg/dependency_resolver.go index 425e8a3..0481322 100644 --- a/pkg/dependency_resolver.go +++ b/pkg/dependency_resolver.go @@ -4,8 +4,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" @@ -14,13 +14,13 @@ import ( ) type DependencyResolver struct { - config *dtos.AnalyserConfig + config *configs.AnalyserConfig inheritanceFlattener *flatteners.InheritanceFlattener emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface eventDispatcher dispatchers.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *dtos.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/domain/dtos/analyser_config.go b/pkg/domain/dtos/configs/analyser_config.go similarity index 98% rename from pkg/domain/dtos/analyser_config.go rename to pkg/domain/dtos/configs/analyser_config.go index 3f23e05..6bbae1b 100644 --- a/pkg/domain/dtos/analyser_config.go +++ b/pkg/domain/dtos/configs/analyser_config.go @@ -1,4 +1,4 @@ -package dtos +package configs import ( "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/configs/deptrac_config.go b/pkg/domain/dtos/configs/deptrac_config.go similarity index 90% rename from pkg/configs/deptrac_config.go rename to pkg/domain/dtos/configs/deptrac_config.go index 2521459..6cb4bda 100644 --- a/pkg/configs/deptrac_config.go +++ b/pkg/domain/dtos/configs/deptrac_config.go @@ -2,20 +2,19 @@ package configs import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" - formatters_configs2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/pkg/errors" ) type DeptracConfig struct { Paths []string - Analyser *dtos.AnalyserConfig - Formatters map[enums.FormatterType]formatters_configs2.FormatterConfigInterface - Layers []*dtos.Layer + Analyser *AnalyserConfig + Formatters map[enums.FormatterType]formatters_configs.FormatterConfigInterface + Layers []*rules.Layer Rulesets map[string]*rules.Ruleset IgnoreUncoveredInternalStructs bool SkipViolations map[string][]string @@ -99,19 +98,19 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } layersList := c.Layers - formattersList := make(map[enums.FormatterType]formatters_configs2.FormatterConfigInterface) + formattersList := make(map[enums.FormatterType]formatters_configs.FormatterConfigInterface) if parsedDeptracFormatters, ok := data["formatters"]; ok { for formatterKey, formatterRawRaw := range parsedDeptracFormatters.(map[string]interface{}) { formatterRaw := formatterRawRaw.(map[string]interface{}) switch formatterKey { case string(enums.FormatterTypeCodeclimateConfig): - formattersList[enums.FormatterTypeCodeclimateConfig] = formatters_configs2.CreateCodeclimateConfig( + formattersList[enums.FormatterTypeCodeclimateConfig] = formatters_configs.CreateCodeclimateConfig( formatterRaw["failure"].(*enums.CodeclimateLevelEnum), formatterRaw["skipped"].(*enums.CodeclimateLevelEnum), formatterRaw["uncovered"].(*enums.CodeclimateLevelEnum), ) case string(enums.FormatterTypeGraphvizConfig): - hiddenLayers := make([]*dtos.Layer, 0) + hiddenLayers := make([]*rules.Layer, 0) for _, hiddenLayer := range formatterRaw["hiddenLayers"].([]string) { for _, layer := range layersList { @@ -122,14 +121,14 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - formatterGraphvizConfig := formatters_configs2.CreateGraphvizConfig(). + formatterGraphvizConfig := formatters_configs.CreateGraphvizConfig(). SetPointToGroups(formatterRaw["point_to_groups"].(*bool)). SetHiddenLayers(hiddenLayers...) formattersList[enums.FormatterTypeGraphvizConfig] = formatterGraphvizConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*dtos.Layer, 0) + groupLayer := make([]*rules.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -143,13 +142,13 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { formatterGraphvizConfig.SetGroups(groupLayerName, groupLayer...) } case string(enums.FormatterTypeMermaidJsConfig): - formatterMermaidJsConfig := formatters_configs2.CreateMermaidJsConfig(). + formatterMermaidJsConfig := formatters_configs.CreateMermaidJsConfig(). SetDirection(formatterRaw["direction"].(string)) formattersList[enums.FormatterTypeMermaidJsConfig] = formatterMermaidJsConfig for groupLayerName, groupRaw := range formatterRaw["groups"].(map[string][]string) { - groupLayer := make([]*dtos.Layer, 0) + groupLayer := make([]*rules.Layer, 0) for _, layerName := range groupRaw { for _, layer := range layersList { @@ -170,7 +169,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { if rulesetsData, ok := data["ruleset"]; ok { for rulesetLayerName, rulesetLayersNames := range rulesetsData.(map[string]interface{}) { - var rulesetOwningLayer *dtos.Layer + var rulesetOwningLayer *rules.Layer for _, layer := range layersList { if layer.Name == rulesetLayerName { @@ -179,7 +178,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { } } - rulesetLayers := make([]*dtos.Layer, 0) + rulesetLayers := make([]*rules.Layer, 0) if rulesetLayersNames != nil { // If not ~ for _, layerNameRaw := range rulesetLayersNames.([]interface{}) { @@ -217,7 +216,7 @@ func (c *DeptracConfig) SetupDeptracMapData(data map[string]interface{}) error { analyzerTypes = analyzerTypesDefault } - analyser := dtos.Create(analyzerTypes, &internalTag) + analyser := Create(analyzerTypes, &internalTag) paths := make([]string, 0) if dataPaths, ok := data["paths"]; ok { @@ -270,7 +269,7 @@ func (c *DeptracConfig) SetupLayersData(layers interface{}) error { } func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { - layersList := make([]*dtos.Layer, 0) + layersList := make([]*rules.Layer, 0) for _, layerRawRaw := range list { layerRaw := layerRawRaw.(map[string]interface{}) @@ -313,7 +312,7 @@ func (c *DeptracConfig) SetupLayersListData(list []interface{}) error { return errors.New("invalid layer definition: name must be a string") } - layer := dtos.NewLayer(layerNameStr, collectorConfigs) + layer := rules.NewLayer(layerNameStr, collectorConfigs) layersList = append(layersList, layer) } diff --git a/pkg/domain/dtos/formatters_configs/graphviz_config.go b/pkg/domain/dtos/formatters_configs/graphviz_config.go index 06d8dfd..a2a3962 100644 --- a/pkg/domain/dtos/formatters_configs/graphviz_config.go +++ b/pkg/domain/dtos/formatters_configs/graphviz_config.go @@ -1,15 +1,15 @@ package formatters_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type GraphvizConfig struct { name string PointToGroups bool - HiddenLayers []*dtos.Layer - Groups map[string][]*dtos.Layer + HiddenLayers []*rules.Layer + Groups map[string][]*rules.Layer } func (g *GraphvizConfig) HasHiddenLayer(name string) bool { @@ -35,8 +35,8 @@ func newGraphvizConfig() *GraphvizConfig { return &GraphvizConfig{ name: "graphviz", PointToGroups: false, - HiddenLayers: make([]*dtos.Layer, 0), - Groups: make(map[string][]*dtos.Layer), + HiddenLayers: make([]*rules.Layer, 0), + Groups: make(map[string][]*rules.Layer), } } @@ -53,12 +53,12 @@ func (g *GraphvizConfig) SetPointToGroups(pointToGroups *bool) *GraphvizConfig { return g } -func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*dtos.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetHiddenLayers(layerConfigs ...*rules.Layer) *GraphvizConfig { g.HiddenLayers = append(g.HiddenLayers, layerConfigs...) return g } -func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*dtos.Layer) *GraphvizConfig { +func (g *GraphvizConfig) SetGroups(name string, layerConfigs ...*rules.Layer) *GraphvizConfig { g.Groups[name] = append(g.Groups[name], layerConfigs...) return g } diff --git a/pkg/domain/dtos/formatters_configs/mermaid_js_config.go b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go index b046b28..512709f 100644 --- a/pkg/domain/dtos/formatters_configs/mermaid_js_config.go +++ b/pkg/domain/dtos/formatters_configs/mermaid_js_config.go @@ -1,21 +1,21 @@ package formatters_configs import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type MermaidJsConfig struct { name string Direction string - Groups map[string][]*dtos.Layer + Groups map[string][]*rules.Layer } func CreateMermaidJsConfig() *MermaidJsConfig { return &MermaidJsConfig{ name: "mermaidjs", Direction: "TD", - Groups: make(map[string][]*dtos.Layer), + Groups: make(map[string][]*rules.Layer), } } @@ -28,7 +28,7 @@ func (m *MermaidJsConfig) SetDirection(direction string) *MermaidJsConfig { return m } -func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*dtos.Layer) *MermaidJsConfig { +func (m *MermaidJsConfig) SetGroups(name string, layerConfigs ...*rules.Layer) *MermaidJsConfig { for _, config := range layerConfigs { m.Groups[name] = append(m.Groups[name], config) } diff --git a/pkg/rules/covered_rule_interface.go b/pkg/domain/dtos/results/violations_rules/covered_rule_interface.go similarity index 92% rename from pkg/rules/covered_rule_interface.go rename to pkg/domain/dtos/results/violations_rules/covered_rule_interface.go index 88815ac..0dea3d4 100644 --- a/pkg/rules/covered_rule_interface.go +++ b/pkg/domain/dtos/results/violations_rules/covered_rule_interface.go @@ -1,4 +1,4 @@ -package rules +package violations_rules // CoveredRuleInterface - Represents a dependency_contract that is covered by the defined rules. This does not mean that it is allowed to exist, just that it is covered. In that sense it exists as a complement to `Uncovered` struct type CoveredRuleInterface interface { diff --git a/pkg/domain/dtos/layer.go b/pkg/domain/dtos/rules/layer.go similarity index 98% rename from pkg/domain/dtos/layer.go rename to pkg/domain/dtos/rules/layer.go index b1d7bce..3d1bc89 100644 --- a/pkg/domain/dtos/layer.go +++ b/pkg/domain/dtos/rules/layer.go @@ -1,4 +1,4 @@ -package dtos +package rules import "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/collectors_configs" diff --git a/pkg/rules/ruleset.go b/pkg/domain/dtos/rules/ruleset.go similarity index 63% rename from pkg/rules/ruleset.go rename to pkg/domain/dtos/rules/ruleset.go index b0745be..1cf87f9 100644 --- a/pkg/rules/ruleset.go +++ b/pkg/domain/dtos/rules/ruleset.go @@ -1,15 +1,11 @@ package rules -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" -) - type Ruleset struct { - LayerConfig *dtos.Layer - AccessableLayers []*dtos.Layer + LayerConfig *Layer + AccessableLayers []*Layer } -func NewRuleset(layerConfig *dtos.Layer, layerConfigs []*dtos.Layer) *Ruleset { +func NewRuleset(layerConfig *Layer, layerConfigs []*Layer) *Ruleset { r := &Ruleset{LayerConfig: layerConfig} r.Accesses(layerConfigs...) @@ -17,11 +13,11 @@ func NewRuleset(layerConfig *dtos.Layer, layerConfigs []*dtos.Layer) *Ruleset { return r } -func NewForLayer(layerConfig *dtos.Layer) *Ruleset { - return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*dtos.Layer, 0)} +func NewForLayer(layerConfig *Layer) *Ruleset { + return &Ruleset{LayerConfig: layerConfig, AccessableLayers: make([]*Layer, 0)} } -func (r *Ruleset) Accesses(layerConfigs ...*dtos.Layer) *Ruleset { +func (r *Ruleset) Accesses(layerConfigs ...*Layer) *Ruleset { for _, config := range layerConfigs { r.AccessableLayers = append(r.AccessableLayers, config) } diff --git a/pkg/references/reference_extractor_interface.go b/pkg/extractors/reference_extractor_interface.go similarity index 65% rename from pkg/references/reference_extractor_interface.go rename to pkg/extractors/reference_extractor_interface.go index 3b230da..1be8672 100644 --- a/pkg/references/reference_extractor_interface.go +++ b/pkg/extractors/reference_extractor_interface.go @@ -1,6 +1,7 @@ -package references +package extractors import ( + "github.com/KoNekoD/go-deptrac/pkg/references_builders" "github.com/KoNekoD/go-deptrac/pkg/types" "go/ast" ) @@ -8,5 +9,5 @@ import ( // TODO: НУЖНО РЕАЛИЗОВАТЬ ВСЕ ЭКСТРАКТОРЫ И УБРАТЬ В НИХ ЧАСТЬ КОДА ИЗ ВИЗИЬОРА И ТАЙП РЕЗОЛВЕРА - ВЫЧЕСЛЕНИЕ ЗАВИСИМОСТЕЙ-- ДЕЛО ReferenceExtractorInterface! type ReferenceExtractorInterface interface { - ProcessNode(node ast.Node, referenceBuilder ReferenceBuilderInterface, typeScope *types.TypeScope) + ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index 0277cfb..3df760c 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -6,7 +6,6 @@ import ( results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -68,7 +67,7 @@ func (f *GraphVizOutputFormatter) calculateLayerDependencies(rulesList []violati layersDependOnLayers := make(map[string]map[string]int) for _, rule := range rulesList { switch r := rule.(type) { - case rules.CoveredRuleInterface: + case violations_rules.CoveredRuleInterface: layerA := r.GetDependerLayer() layerB := r.GetDependentLayer() diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go index 4aedbcf..550ebe8 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -7,7 +7,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "os" "path/filepath" ) @@ -131,7 +130,7 @@ func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results2.OutputRes layers := make(map[string][]violations_rules.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { - case rules.CoveredRuleInterface: + case violations_rules.CoveredRuleInterface: layers[r.GetDependerLayer()] = append(layers[r.GetDependerLayer()], rule) case *violations_rules.Uncovered: layers[r.Layer] = append(layers[r.Layer], rule) diff --git a/pkg/layers/layer_provider.go b/pkg/layers/layer_provider.go index 527fc32..14847d8 100644 --- a/pkg/layers/layer_provider.go +++ b/pkg/layers/layer_provider.go @@ -2,8 +2,8 @@ package layers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/rules" "strings" ) diff --git a/pkg/layers/layer_resolver.go b/pkg/layers/layer_resolver.go index d6623b9..afa2423 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/layers/layer_resolver.go @@ -4,7 +4,7 @@ import ( "errors" dtos2 "github.com/KoNekoD/go-deptrac/pkg/application/dtos" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "reflect" "sync" @@ -13,7 +13,7 @@ import ( // LayerResolver - LayerResolverInterface defines the structure for a layer_contract resolver type LayerResolver struct { collectorResolver collectors_resolvers.CollectorResolverInterface - layersConfig []*dtos.Layer + layersConfig []*rules.Layer layers map[string][]*dtos2.Collectable initialized bool resolved map[string]map[string]bool @@ -21,7 +21,7 @@ type LayerResolver struct { } // NewLayerResolver creates a new LayerResolverInterface -func NewLayerResolver(collectorResolver collectors_resolvers.CollectorResolverInterface, layersConfig []*dtos.Layer) LayerResolverInterface { +func NewLayerResolver(collectorResolver collectors_resolvers.CollectorResolverInterface, layersConfig []*rules.Layer) LayerResolverInterface { return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, diff --git a/pkg/parsers/nikic_php_parser.go b/pkg/parsers/nikic_php_parser.go index f144202..facfb3c 100644 --- a/pkg/parsers/nikic_php_parser.go +++ b/pkg/parsers/nikic_php_parser.go @@ -4,7 +4,9 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" - "github.com/KoNekoD/go-deptrac/pkg/references" + "github.com/KoNekoD/go-deptrac/pkg/extractors" + "github.com/KoNekoD/go-deptrac/pkg/reference_visitors" + "github.com/KoNekoD/go-deptrac/pkg/references_builders" "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/pkg/errors" "go/ast" @@ -51,10 +53,10 @@ type NikicPhpParser struct { cache ast_map.AstFileReferenceCacheInterface typeResolver *types.TypeResolver nodeNamer *services.NodeNamer - extractors []references.ReferenceExtractorInterface + extractors []extractors.ReferenceExtractorInterface } -func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []references.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, @@ -73,8 +75,8 @@ func (p *NikicPhpParser) ParseFile(file string) (*tokens_references.FileReferenc return v, nil } - fileReferenceBuilder := references.CreateFileReferenceBuilder(file) - visitor := references.NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) + fileReferenceBuilder := references_builders.CreateFileReferenceBuilder(file) + visitor := reference_visitors.NewFileReferenceVisitor(fileReferenceBuilder, p.typeResolver, p.nodeNamer, p.extractors...) rootNode := p.loadNodesFromFile(file) ast.Walk(visitor, rootNode) diff --git a/pkg/references/file_reference_visitor.go b/pkg/reference_visitors/file_reference_visitor.go similarity index 92% rename from pkg/references/file_reference_visitor.go rename to pkg/reference_visitors/file_reference_visitor.go index 86f1d3a..e02b2b3 100644 --- a/pkg/references/file_reference_visitor.go +++ b/pkg/reference_visitors/file_reference_visitor.go @@ -1,8 +1,10 @@ -package references +package reference_visitors import ( "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/extractors" + "github.com/KoNekoD/go-deptrac/pkg/references_builders" "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/hashicorp/go-multierror" "github.com/pkg/errors" @@ -11,17 +13,17 @@ import ( ) type FileReferenceVisitor struct { - dependencyResolvers []ReferenceExtractorInterface + dependencyResolvers []extractors.ReferenceExtractorInterface currentTypeScope *types.TypeScope - currentReference ReferenceBuilderInterface - fileReferenceBuilder *FileReferenceBuilder + currentReference references_builders.ReferenceBuilderInterface + fileReferenceBuilder *references_builders.FileReferenceBuilder typeResolver *types.TypeResolver nodeNamer *services.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, diff --git a/pkg/references/file_reference_visitor_test.go b/pkg/reference_visitors/file_reference_visitor_test.go similarity index 75% rename from pkg/references/file_reference_visitor_test.go rename to pkg/reference_visitors/file_reference_visitor_test.go index 3aca5c6..c1b17cf 100644 --- a/pkg/references/file_reference_visitor_test.go +++ b/pkg/reference_visitors/file_reference_visitor_test.go @@ -1,7 +1,9 @@ -package references +package reference_visitors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/extractors" + "github.com/KoNekoD/go-deptrac/pkg/references_builders" "github.com/KoNekoD/go-deptrac/pkg/types" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" @@ -19,10 +21,10 @@ func TestFileReferenceVisitorOk(t *testing.T) { t.Error(err) } - referenceExtractorInterfaces := make([]ReferenceExtractorInterface, 0) + referenceExtractorInterfaces := make([]extractors.ReferenceExtractorInterface, 0) fileReferenceVisitor := NewFileReferenceVisitor( - CreateFileReferenceBuilder(file), + references_builders.CreateFileReferenceBuilder(file), types.NewTypeResolver( nil, ), diff --git a/pkg/references/class_like_reference_builder.go b/pkg/references_builders/class_like_reference_builder.go similarity index 99% rename from pkg/references/class_like_reference_builder.go rename to pkg/references_builders/class_like_reference_builder.go index 366f077..9cc79c9 100644 --- a/pkg/references/class_like_reference_builder.go +++ b/pkg/references_builders/class_like_reference_builder.go @@ -1,4 +1,4 @@ -package references +package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" diff --git a/pkg/references/file_reference_builder.go b/pkg/references_builders/file_reference_builder.go similarity index 99% rename from pkg/references/file_reference_builder.go rename to pkg/references_builders/file_reference_builder.go index 4c59fb0..dcd9feb 100644 --- a/pkg/references/file_reference_builder.go +++ b/pkg/references_builders/file_reference_builder.go @@ -1,4 +1,4 @@ -package references +package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" diff --git a/pkg/references/function_reference_builder.go b/pkg/references_builders/function_reference_builder.go similarity index 97% rename from pkg/references/function_reference_builder.go rename to pkg/references_builders/function_reference_builder.go index 0447723..1ae7713 100644 --- a/pkg/references/function_reference_builder.go +++ b/pkg/references_builders/function_reference_builder.go @@ -1,4 +1,4 @@ -package references +package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" diff --git a/pkg/references/reference_builder.go b/pkg/references_builders/reference_builder.go similarity index 99% rename from pkg/references/reference_builder.go rename to pkg/references_builders/reference_builder.go index f86d4d8..d25e153 100644 --- a/pkg/references/reference_builder.go +++ b/pkg/references_builders/reference_builder.go @@ -1,4 +1,4 @@ -package references +package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" diff --git a/pkg/tokens/token_in_layer_analyser.go b/pkg/tokens/token_in_layer_analyser.go index d490d26..beaacf9 100644 --- a/pkg/tokens/token_in_layer_analyser.go +++ b/pkg/tokens/token_in_layer_analyser.go @@ -2,7 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" @@ -10,7 +10,7 @@ import ( type TokenInLayerAnalyser struct { tokenTypes []enums.TokenType - config *dtos.AnalyserConfig + config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver layerResolver layers.LayerResolverInterface @@ -20,7 +20,7 @@ func NewTokenInLayerAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *TokenResolver, layerResolver layers.LayerResolverInterface, - config *dtos.AnalyserConfig, + config *configs.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ tokenTypes: make([]enums.TokenType, 0), diff --git a/pkg/tokens/unassigned_token_analyser.go b/pkg/tokens/unassigned_token_analyser.go index 75f06f9..484f2ed 100644 --- a/pkg/tokens/unassigned_token_analyser.go +++ b/pkg/tokens/unassigned_token_analyser.go @@ -2,7 +2,7 @@ package tokens import ( "github.com/KoNekoD/go-deptrac/pkg/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" @@ -10,7 +10,7 @@ import ( type UnassignedTokenAnalyser struct { tokenTypes []enums.TokenType - config *dtos.AnalyserConfig + config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *TokenResolver layerResolver layers.LayerResolverInterface @@ -20,7 +20,7 @@ func NewUnassignedTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *TokenResolver, layerResolver layers.LayerResolverInterface, - config *dtos.AnalyserConfig, + config *configs.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ tokenTypes: make([]enums.TokenType, 0), From 21fd0e93aec5f5cebb6a76f094fe38420580e521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:33:08 +0300 Subject: [PATCH 21/40] refactor: structure --- pkg/app/container_builder.go | 2 +- pkg/app/services.go | 2 +- .../file_reference_visitor.go | 14 +++---- .../file_reference_visitor_test.go | 4 +- .../class_like_reference_builder.go | 26 ++++++------ .../file_reference_builder.go | 0 .../function_reference_builder.go | 6 +-- .../references_builders/reference_builder.go | 42 +++++++++---------- .../services}/types/type_resolver.go | 0 .../services}/types/type_scope.go | 0 pkg/ast_map/ast_map_extractor_test.go | 2 +- .../reference_extractor_interface.go | 4 +- pkg/parsers/nikic_php_parser.go | 6 +-- 13 files changed, 54 insertions(+), 54 deletions(-) rename pkg/{ => application/services}/reference_visitors/file_reference_visitor.go (93%) rename pkg/{ => application/services}/reference_visitors/file_reference_visitor_test.go (87%) rename pkg/{ => application/services}/references_builders/class_like_reference_builder.go (76%) rename pkg/{ => application/services}/references_builders/file_reference_builder.go (100%) rename pkg/{ => application/services}/references_builders/function_reference_builder.go (74%) rename pkg/{ => application/services}/references_builders/reference_builder.go (83%) rename pkg/{ => application/services}/types/type_resolver.go (100%) rename pkg/{ => application/services}/types/type_scope.go (100%) diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index dfff2e7..703a0ec 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -7,6 +7,7 @@ import ( services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -23,7 +24,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/types" ) type ContainerBuilder struct { diff --git a/pkg/app/services.go b/pkg/app/services.go index c7633e2..150a0ba 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -11,6 +11,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" @@ -28,7 +29,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/KoNekoD/go-deptrac/pkg/tokens" - "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/elliotchance/orderedmap/v2" "os" "strings" diff --git a/pkg/reference_visitors/file_reference_visitor.go b/pkg/application/services/reference_visitors/file_reference_visitor.go similarity index 93% rename from pkg/reference_visitors/file_reference_visitor.go rename to pkg/application/services/reference_visitors/file_reference_visitor.go index e02b2b3..bfbce1a 100644 --- a/pkg/reference_visitors/file_reference_visitor.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor.go @@ -1,11 +1,11 @@ package reference_visitors import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + types2 "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/references_builders" - "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/hashicorp/go-multierror" "github.com/pkg/errors" "go/ast" @@ -14,16 +14,16 @@ import ( type FileReferenceVisitor struct { dependencyResolvers []extractors.ReferenceExtractorInterface - currentTypeScope *types.TypeScope + currentTypeScope *types2.TypeScope currentReference references_builders.ReferenceBuilderInterface fileReferenceBuilder *references_builders.FileReferenceBuilder - typeResolver *types.TypeResolver + typeResolver *types2.TypeResolver nodeNamer *services.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types2.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, @@ -31,7 +31,7 @@ func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileRefer nodeNamer: nodeNamer, errors: make([]error, 0), dependencyResolvers: extractors, - currentTypeScope: types.NewTypeScope(""), + currentTypeScope: types2.NewTypeScope(""), } } @@ -72,7 +72,7 @@ func (f *FileReferenceVisitor) enterNode(node ast.Node) { packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) f.addErrIfNeeded(err) - f.currentTypeScope = types.NewTypeScope(packageFileName).SetFileNode(typedNode) + f.currentTypeScope = types2.NewTypeScope(packageFileName).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: diff --git a/pkg/reference_visitors/file_reference_visitor_test.go b/pkg/application/services/reference_visitors/file_reference_visitor_test.go similarity index 87% rename from pkg/reference_visitors/file_reference_visitor_test.go rename to pkg/application/services/reference_visitors/file_reference_visitor_test.go index c1b17cf..4387798 100644 --- a/pkg/reference_visitors/file_reference_visitor_test.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor_test.go @@ -2,9 +2,9 @@ package reference_visitors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/references_builders" - "github.com/KoNekoD/go-deptrac/pkg/types" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" diff --git a/pkg/references_builders/class_like_reference_builder.go b/pkg/application/services/references_builders/class_like_reference_builder.go similarity index 76% rename from pkg/references_builders/class_like_reference_builder.go rename to pkg/application/services/references_builders/class_like_reference_builder.go index 9cc79c9..dc95a01 100644 --- a/pkg/references_builders/class_like_reference_builder.go +++ b/pkg/application/services/references_builders/class_like_reference_builder.go @@ -4,8 +4,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ClassLikeReferenceBuilder struct { @@ -14,11 +14,11 @@ type ClassLikeReferenceBuilder struct { inherits []*ast_map.AstInherit classLikeToken *tokens.ClassLikeToken - classLikeType *enums2.ClassLikeType + classLikeType *enums.ClassLikeType tags map[string][]string } -func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *enums2.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { +func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { return &ClassLikeReferenceBuilder{ ReferenceBuilder: NewReferenceBuilder(tokenTemplates, filepath), inherits: make([]*ast_map.AstInherit, 0), @@ -29,41 +29,41 @@ func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, clas } func CreateClassLikeReferenceBuilderClassLike(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClassLike := enums2.TypeClasslike + typeClassLike := enums.TypeClasslike return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClassLike, tags) } func CreateClassLikeReferenceBuilderClass(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeClass := enums2.TypeClass + typeClass := enums.TypeClass return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeClass, tags) } func CreateClassLikeReferenceBuilderTrait(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeTrait := enums2.TypeTrait + typeTrait := enums.TypeTrait return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeTrait, tags) } func CreateClassLikeReferenceBuilderInterface(filepath string, classLikeName string, classTemplates []string, tags map[string][]string) *ClassLikeReferenceBuilder { - typeInterface := enums2.TypeInterface + typeInterface := enums.TypeInterface return NewClassLikeReferenceBuilder(classTemplates, filepath, tokens.NewClassLikeTokenFromFQCN(classLikeName), &typeInterface, tags) } // Build - Internal -func (b *ClassLikeReferenceBuilder) Build() *references2.ClassLikeReference { - return references2.NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) +func (b *ClassLikeReferenceBuilder) Build() *tokens_references.ClassLikeReference { + return tokens_references.NewClassLikeReference(b.classLikeToken, b.classLikeType, b.inherits, b.Dependencies, b.tags, nil) } func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums2.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) return b } diff --git a/pkg/references_builders/file_reference_builder.go b/pkg/application/services/references_builders/file_reference_builder.go similarity index 100% rename from pkg/references_builders/file_reference_builder.go rename to pkg/application/services/references_builders/file_reference_builder.go diff --git a/pkg/references_builders/function_reference_builder.go b/pkg/application/services/references_builders/function_reference_builder.go similarity index 74% rename from pkg/references_builders/function_reference_builder.go rename to pkg/application/services/references_builders/function_reference_builder.go index 1ae7713..29dce2a 100644 --- a/pkg/references_builders/function_reference_builder.go +++ b/pkg/application/services/references_builders/function_reference_builder.go @@ -2,7 +2,7 @@ package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) type FunctionReferenceBuilder struct { @@ -24,6 +24,6 @@ func CreateFunctionReferenceBuilder(filepath string, functionName string, functi } // Build - Internal -func (b *FunctionReferenceBuilder) Build() *references2.FunctionReference { - return references2.NewFunctionReference(tokens.NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) +func (b *FunctionReferenceBuilder) Build() *tokens_references.FunctionReference { + return tokens_references.NewFunctionReference(tokens.NewFunctionTokenFromFQCN(b.functionName), b.Dependencies, b.tags, nil) } diff --git a/pkg/references_builders/reference_builder.go b/pkg/application/services/references_builders/reference_builder.go similarity index 83% rename from pkg/references_builders/reference_builder.go rename to pkg/application/services/references_builders/reference_builder.go index d25e153..d4f3fdb 100644 --- a/pkg/references_builders/reference_builder.go +++ b/pkg/application/services/references_builders/reference_builder.go @@ -4,20 +4,20 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type ReferenceBuilder struct { Dependencies []*tokens.DependencyToken tokenTemplates []string Filepath string - ref *references2.FileReference + ref *tokens_references.FileReference } type ReferenceBuilderInterface interface { GetTokenTemplates() []string - CreateContext(occursAtLine int, dependencyType enums2.DependencyType) *dependencies.DependencyContext + CreateContext(occursAtLine int, dependencyType enums.DependencyType) *dependencies.DependencyContext UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder Variable(classLikeName string, occursAtLine int) *ReferenceBuilder Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder @@ -50,88 +50,88 @@ func (r *ReferenceBuilder) GetTokenTemplates() []string { return r.tokenTemplates } -func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType enums2.DependencyType) *dependencies.DependencyContext { +func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType enums.DependencyType) *dependencies.DependencyContext { return dependencies.NewDependencyContext(dtos.NewFileOccurrence(r.Filepath, occursAtLine), dependencyType) } // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. func (r *ReferenceBuilder) UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, enums2.DependencyTypeUnresolvedFunctionCall))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, enums.DependencyTypeUnresolvedFunctionCall))) return r } func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeVariable))) return r } func (r *ReferenceBuilder) Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(enums2.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, enums2.DependencyTypeSuperGlobalVariable))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(enums.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, enums.DependencyTypeSuperGlobalVariable))) return r } func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeReturnType))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeReturnType))) return r } func (r *ReferenceBuilder) ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeThrow))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeThrow))) return r } func (r *ReferenceBuilder) AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassExtends))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassExtends))) return r } func (r *ReferenceBuilder) AnonymousClassTrait(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassTrait))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassTrait))) return r } func (r *ReferenceBuilder) ConstFetch(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeConst))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeConst))) return r } func (r *ReferenceBuilder) AnonymousClassImplements(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAnonymousClassImplements))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassImplements))) return r } func (r *ReferenceBuilder) Parameter(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeParameter))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeParameter))) return r } func (r *ReferenceBuilder) Attribute(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeAttribute))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAttribute))) return r } func (r *ReferenceBuilder) Instanceof(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeInstanceof))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeInstanceof))) return r } func (r *ReferenceBuilder) NewStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeNew))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeNew))) return r } func (r *ReferenceBuilder) StaticProperty(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeStaticProperty))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticProperty))) return r } func (r *ReferenceBuilder) StaticMethod(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeStaticMethod))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticMethod))) return r } func (r *ReferenceBuilder) CatchStmt(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums2.DependencyTypeCatch))) + r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeCatch))) return r } diff --git a/pkg/types/type_resolver.go b/pkg/application/services/types/type_resolver.go similarity index 100% rename from pkg/types/type_resolver.go rename to pkg/application/services/types/type_resolver.go diff --git a/pkg/types/type_scope.go b/pkg/application/services/types/type_scope.go similarity index 100% rename from pkg/types/type_scope.go rename to pkg/application/services/types/type_scope.go diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index bc7272e..c906818 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -2,9 +2,9 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/types" "os" "testing" ) diff --git a/pkg/extractors/reference_extractor_interface.go b/pkg/extractors/reference_extractor_interface.go index 1be8672..08dc850 100644 --- a/pkg/extractors/reference_extractor_interface.go +++ b/pkg/extractors/reference_extractor_interface.go @@ -1,8 +1,8 @@ package extractors import ( - "github.com/KoNekoD/go-deptrac/pkg/references_builders" - "github.com/KoNekoD/go-deptrac/pkg/types" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "go/ast" ) diff --git a/pkg/parsers/nikic_php_parser.go b/pkg/parsers/nikic_php_parser.go index facfb3c..338e239 100644 --- a/pkg/parsers/nikic_php_parser.go +++ b/pkg/parsers/nikic_php_parser.go @@ -1,13 +1,13 @@ package parsers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/reference_visitors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/reference_visitors" - "github.com/KoNekoD/go-deptrac/pkg/references_builders" - "github.com/KoNekoD/go-deptrac/pkg/types" "github.com/pkg/errors" "go/ast" "go/parser" From 07c17648185f02da061d86e5a6e97db07422a74e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:36:55 +0300 Subject: [PATCH 22/40] refactor: structure --- pkg/analysers/dependency_layers_analyser.go | 6 ++--- pkg/analysers/layer_dependencies_analyser.go | 6 ++--- .../layer_for_token_analyser.go | 7 +++--- pkg/analysers/ruleset_usage_analyser.go | 6 ++--- .../token_in_layer_analyser.go | 7 +++--- .../unassigned_token_analyser.go | 7 +++--- pkg/app/changed_files_runner.go | 5 ++-- pkg/app/container_builder.go | 9 ++++--- pkg/app/services.go | 9 ++++--- .../emitters/class_dependency_emitter.go | 8 +++---- .../class_superglobal_dependency_emitter.go | 6 ++--- .../emitters/file_dependency_emitter.go | 6 ++--- .../function_call_dependency_emitter.go | 24 +++++++++---------- .../emitters/function_dependency_emitter.go | 6 ++--- ...function_superglobal_dependency_emitter.go | 6 ++--- .../emitters/uses_dependency_emitter.go | 10 ++++---- .../services}/token_resolver.go | 16 ++++++------- ...n_reference_with_dependencies_interface.go | 10 ++++++++ ...n_reference_with_dependencies_interface.go | 11 --------- 19 files changed, 82 insertions(+), 83 deletions(-) rename pkg/{tokens => analysers}/layer_for_token_analyser.go (93%) rename pkg/{tokens => analysers}/token_in_layer_analyser.go (94%) rename pkg/{tokens => analysers}/unassigned_token_analyser.go (94%) rename pkg/{tokens => application/services}/token_resolver.go (51%) create mode 100644 pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go delete mode 100644 pkg/tokens/token_reference_with_dependencies_interface.go diff --git a/pkg/analysers/dependency_layers_analyser.go b/pkg/analysers/dependency_layers_analyser.go index 9a45c23..d20758e 100644 --- a/pkg/analysers/dependency_layers_analyser.go +++ b/pkg/analysers/dependency_layers_analyser.go @@ -3,6 +3,7 @@ package analysers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" @@ -11,13 +12,12 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type DependencyLayersAnalyser struct { astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver - tokenResolver *tokens.TokenResolver + tokenResolver *services.TokenResolver layerResolver layers.LayerResolverInterface eventDispatcher dispatchers.EventDispatcherInterface } @@ -25,7 +25,7 @@ type DependencyLayersAnalyser struct { func NewDependencyLayersAnalyser( astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, - tokenResolver *tokens.TokenResolver, + tokenResolver *services.TokenResolver, layerResolver layers.LayerResolverInterface, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ diff --git a/pkg/analysers/layer_dependencies_analyser.go b/pkg/analysers/layer_dependencies_analyser.go index 6782ac2..51c2f37 100644 --- a/pkg/analysers/layer_dependencies_analyser.go +++ b/pkg/analysers/layer_dependencies_analyser.go @@ -2,22 +2,22 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type LayerDependenciesAnalyser struct { astMapExtractor *ast_map.AstMapExtractor - tokenResolver *tokens.TokenResolver + tokenResolver *services.TokenResolver dependencyResolver *pkg.DependencyResolver layerResolver layers.LayerResolverInterface } func NewLayerDependenciesAnalyser( astMapExtractor *ast_map.AstMapExtractor, - tokenResolver *tokens.TokenResolver, + tokenResolver *services.TokenResolver, dependencyResolver *pkg.DependencyResolver, layerResolver layers.LayerResolverInterface, ) *LayerDependenciesAnalyser { diff --git a/pkg/tokens/layer_for_token_analyser.go b/pkg/analysers/layer_for_token_analyser.go similarity index 93% rename from pkg/tokens/layer_for_token_analyser.go rename to pkg/analysers/layer_for_token_analyser.go index 53ae5ac..41510e3 100644 --- a/pkg/tokens/layer_for_token_analyser.go +++ b/pkg/analysers/layer_for_token_analyser.go @@ -1,6 +1,7 @@ -package tokens +package analysers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" @@ -13,13 +14,13 @@ import ( type LayerForTokenAnalyser struct { astMapExtractor *ast_map.AstMapExtractor - tokenResolver *TokenResolver + tokenResolver *services.TokenResolver layerResolver layers.LayerResolverInterface } func NewLayerForTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, - tokenResolver *TokenResolver, + tokenResolver *services.TokenResolver, layerResolver layers.LayerResolverInterface, ) *LayerForTokenAnalyser { return &LayerForTokenAnalyser{ diff --git a/pkg/analysers/ruleset_usage_analyser.go b/pkg/analysers/ruleset_usage_analyser.go index cca6899..ed9a548 100644 --- a/pkg/analysers/ruleset_usage_analyser.go +++ b/pkg/analysers/ruleset_usage_analyser.go @@ -2,10 +2,10 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type RulesetUsageAnalyser struct { @@ -13,7 +13,7 @@ type RulesetUsageAnalyser struct { layerResolver layers2.LayerResolverInterface astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver - tokenResolver *tokens.TokenResolver + tokenResolver *services.TokenResolver layers []*rules.Layer } @@ -22,7 +22,7 @@ func NewRulesetUsageAnalyser( layerResolver layers2.LayerResolverInterface, astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, - tokenResolver *tokens.TokenResolver, + tokenResolver *services.TokenResolver, layers []*rules.Layer, ) *RulesetUsageAnalyser { return &RulesetUsageAnalyser{ diff --git a/pkg/tokens/token_in_layer_analyser.go b/pkg/analysers/token_in_layer_analyser.go similarity index 94% rename from pkg/tokens/token_in_layer_analyser.go rename to pkg/analysers/token_in_layer_analyser.go index beaacf9..5a79528 100644 --- a/pkg/tokens/token_in_layer_analyser.go +++ b/pkg/analysers/token_in_layer_analyser.go @@ -1,6 +1,7 @@ -package tokens +package analysers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -12,13 +13,13 @@ type TokenInLayerAnalyser struct { tokenTypes []enums.TokenType config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor - tokenResolver *TokenResolver + tokenResolver *services.TokenResolver layerResolver layers.LayerResolverInterface } func NewTokenInLayerAnalyser( astMapExtractor *ast_map.AstMapExtractor, - tokenResolver *TokenResolver, + tokenResolver *services.TokenResolver, layerResolver layers.LayerResolverInterface, config *configs.AnalyserConfig, ) *TokenInLayerAnalyser { diff --git a/pkg/tokens/unassigned_token_analyser.go b/pkg/analysers/unassigned_token_analyser.go similarity index 94% rename from pkg/tokens/unassigned_token_analyser.go rename to pkg/analysers/unassigned_token_analyser.go index 484f2ed..f2cb4a2 100644 --- a/pkg/tokens/unassigned_token_analyser.go +++ b/pkg/analysers/unassigned_token_analyser.go @@ -1,6 +1,7 @@ -package tokens +package analysers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -12,13 +13,13 @@ type UnassignedTokenAnalyser struct { tokenTypes []enums.TokenType config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor - tokenResolver *TokenResolver + tokenResolver *services.TokenResolver layerResolver layers.LayerResolverInterface } func NewUnassignedTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, - tokenResolver *TokenResolver, + tokenResolver *services.TokenResolver, layerResolver layers.LayerResolverInterface, config *configs.AnalyserConfig, ) *UnassignedTokenAnalyser { diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index 1f0632d..bf55b63 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -7,18 +7,17 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/tokens" "golang.org/x/exp/maps" "strings" ) // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { - layerForTokenAnalyser *tokens.LayerForTokenAnalyser + layerForTokenAnalyser *analysers.LayerForTokenAnalyser dependencyLayersAnalyser *analysers.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *tokens.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *analysers.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 703a0ec..1513ae7 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -23,7 +23,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type ContainerBuilder struct { @@ -62,15 +61,15 @@ type ContainerBuilder struct { AstMapExtractor *ast_map.AstMapExtractor InheritanceFlattener *flatteners.InheritanceFlattener DependencyResolver *pkg.DependencyResolver - TokenResolver *tokens.TokenResolver + TokenResolver *services2.TokenResolver CollectorResolver *collectors_resolvers.CollectorResolver LayerResolver layers.LayerResolverInterface NikicPhpParser *parsers.NikicPhpParser CollectorProvider *services2.CollectorProvider DependencyLayersAnalyser *analysers.DependencyLayersAnalyser - TokenInLayerAnalyser *tokens.TokenInLayerAnalyser - LayerForTokenAnalyser *tokens.LayerForTokenAnalyser - UnassignedTokenAnalyser *tokens.UnassignedTokenAnalyser + TokenInLayerAnalyser *analysers.TokenInLayerAnalyser + LayerForTokenAnalyser *analysers.LayerForTokenAnalyser + UnassignedTokenAnalyser *analysers.UnassignedTokenAnalyser LayerDependenciesAnalyser *analysers.LayerDependenciesAnalyser RulesetUsageAnalyser *analysers.RulesetUsageAnalyser FormatterProvider *formatters.FormatterProvider diff --git a/pkg/app/services.go b/pkg/app/services.go index 150a0ba..4aa6c85 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -28,7 +28,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/parsers" "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/KoNekoD/go-deptrac/pkg/rules" - "github.com/KoNekoD/go-deptrac/pkg/tokens" "github.com/elliotchance/orderedmap/v2" "os" "strings" @@ -117,7 +116,7 @@ func Services(builder *ContainerBuilder) error { } inheritanceFlattener := flatteners.NewInheritanceFlattener() dependencyResolver := pkg.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) - tokenResolver := tokens.NewTokenResolver() + tokenResolver := services2.NewTokenResolver() astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) @@ -262,9 +261,9 @@ func Services(builder *ContainerBuilder) error { * SetAnalyser */ dependencyLayersAnalyser := analysers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := tokens.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerForTokenAnalyser := tokens.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := tokens.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + tokenInLayerAnalyser := analysers.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerForTokenAnalyser := analysers.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := analysers.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) layerDependenciesAnalyser := analysers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) rulesetUsageAnalyser := analysers.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) diff --git a/pkg/application/services/emitters/class_dependency_emitter.go b/pkg/application/services/emitters/class_dependency_emitter.go index 10caada..02825be 100644 --- a/pkg/application/services/emitters/class_dependency_emitter.go +++ b/pkg/application/services/emitters/class_dependency_emitter.go @@ -2,7 +2,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -17,7 +17,7 @@ func (c *ClassDependencyEmitter) GetName() string { return "ClassDependencyEmitter" } -func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { classLikeName := classReference.GetToken().(*tokens.ClassLikeToken) @@ -30,11 +30,11 @@ func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depend continue } - dependencyList.AddDependency(dependencies2.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, dependencyToken.Token, dependencyToken.Context)) } for _, inherit := range astMap.GetClassInherits(classLikeName) { - dependencyList.AddDependency(dependencies2.NewDependency(classLikeName, inherit.ClassLikeName, dependencies2.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) + dependencyList.AddDependency(dependencies.NewDependency(classLikeName, inherit.ClassLikeName, dependencies.NewDependencyContext(inherit.FileOccurrence, enums.DependencyTypeInherit))) } } } diff --git a/pkg/application/services/emitters/class_superglobal_dependency_emitter.go b/pkg/application/services/emitters/class_superglobal_dependency_emitter.go index 673d151..8e3f144 100644 --- a/pkg/application/services/emitters/class_superglobal_dependency_emitter.go +++ b/pkg/application/services/emitters/class_superglobal_dependency_emitter.go @@ -2,7 +2,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,13 +16,13 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { return "ClassSuperglobalDependencyEmitter" } -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { if dependencyToken.Context.DependencyType != enums.DependencyTypeSuperGlobalVariable { continue } - dependencyList.AddDependency(dependencies2.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(classReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/application/services/emitters/file_dependency_emitter.go b/pkg/application/services/emitters/file_dependency_emitter.go index 13e509d..16bf801 100644 --- a/pkg/application/services/emitters/file_dependency_emitter.go +++ b/pkg/application/services/emitters/file_dependency_emitter.go @@ -2,7 +2,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FileDependencyEmitter) GetName() string { return "FileDependencyEmitter" } -func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, dependencyToken := range fileReference.Dependencies { if dependencyToken.Context.DependencyType == enums.DependencyTypeUse { @@ -27,7 +27,7 @@ func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependen continue } - dependencyList.AddDependency(dependencies2.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(fileReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/application/services/emitters/function_call_dependency_emitter.go b/pkg/application/services/emitters/function_call_dependency_emitter.go index 9636983..717257e 100644 --- a/pkg/application/services/emitters/function_call_dependency_emitter.go +++ b/pkg/application/services/emitters/function_call_dependency_emitter.go @@ -2,10 +2,10 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/tokens" ) type FunctionCallDependencyEmitter struct{} @@ -17,38 +17,38 @@ func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { func (f *FunctionCallDependencyEmitter) GetName() string { return "FunctionCallDependencyEmitter" } -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { - references := make([]tokens.TokenReferenceWithDependenciesInterface, 0) +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + references := make([]tokens_references.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetClassLikeReferences() { references = append(references, reference) } f.createDependenciesForReferences(references, astMap, dependencyList) - references = make([]tokens.TokenReferenceWithDependenciesInterface, 0) + references = make([]tokens_references.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetFunctionReferences() { references = append(references, reference) } f.createDependenciesForReferences(references, astMap, dependencyList) - references = make([]tokens.TokenReferenceWithDependenciesInterface, 0) + references = make([]tokens_references.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetFileReferences() { references = append(references, reference) } f.createDependenciesForReferences(references, astMap, dependencyList) } -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens_references.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, referenceInterface := range references { - reference := referenceInterface.(tokens.TokenReferenceWithDependenciesInterface) + reference := referenceInterface.(tokens_references.TokenReferenceWithDependenciesInterface) for _, dependencyToken := range reference.GetDependencies() { if dependencyToken.Context.DependencyType != enums.DependencyTypeUnresolvedFunctionCall { continue } token := dependencyToken.Token - dependencyList.AddDependency(dependencies2.NewDependency(reference.GetToken(), token, dependencyToken.Context)) - functionToken := token.(*tokens2.FunctionToken) + dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), token, dependencyToken.Context)) + functionToken := token.(*tokens.FunctionToken) if functionReference := astMap.GetFunctionReferenceForToken(functionToken); functionReference != nil { - dependencyList.AddDependency(dependencies2.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(reference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/application/services/emitters/function_dependency_emitter.go b/pkg/application/services/emitters/function_dependency_emitter.go index 38e3fae..42754e6 100644 --- a/pkg/application/services/emitters/function_dependency_emitter.go +++ b/pkg/application/services/emitters/function_dependency_emitter.go @@ -2,7 +2,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FunctionDependencyEmitter) GetName() string { return "FunctionDependencyEmitter" } -func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { @@ -28,7 +28,7 @@ func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depe continue } - dependencyList.AddDependency(dependencies2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/application/services/emitters/function_superglobal_dependency_emitter.go b/pkg/application/services/emitters/function_superglobal_dependency_emitter.go index 68af6df..e6cf533 100644 --- a/pkg/application/services/emitters/function_superglobal_dependency_emitter.go +++ b/pkg/application/services/emitters/function_superglobal_dependency_emitter.go @@ -2,7 +2,7 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { @@ -24,7 +24,7 @@ func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map. continue } - dependencyList.AddDependency(dependencies2.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) + dependencyList.AddDependency(dependencies.NewDependency(astFunctionReference.GetToken(), dependencyToken.Token, dependencyToken.Context)) } } } diff --git a/pkg/application/services/emitters/uses_dependency_emitter.go b/pkg/application/services/emitters/uses_dependency_emitter.go index 5f7128d..9bdee02 100644 --- a/pkg/application/services/emitters/uses_dependency_emitter.go +++ b/pkg/application/services/emitters/uses_dependency_emitter.go @@ -3,9 +3,9 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "strings" ) @@ -20,8 +20,8 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { - references := make([]tokens2.TaggedTokenReferenceInterface, 0) +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { + references := make([]tokens_references.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) } @@ -45,7 +45,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende for _, astStructReference := range fileReference.ClassLikeReferences { for _, emittedDependency := range fileReference.Dependencies { if emittedDependency.Context.DependencyType == enums.DependencyTypeUse && u.IsFQDN(emittedDependency, FQDNIndex) { - dependencyList.AddDependency(dependencies2.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) + dependencyList.AddDependency(dependencies.NewDependency(astStructReference.GetToken(), emittedDependency.Token, emittedDependency.Context)) } } } diff --git a/pkg/tokens/token_resolver.go b/pkg/application/services/token_resolver.go similarity index 51% rename from pkg/tokens/token_resolver.go rename to pkg/application/services/token_resolver.go index f1a0b15..e39e8c8 100644 --- a/pkg/tokens/token_resolver.go +++ b/pkg/application/services/token_resolver.go @@ -1,9 +1,9 @@ -package tokens +package services import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens3 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens_references2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -13,15 +13,15 @@ func NewTokenResolver() *TokenResolver { return &TokenResolver{} } -func (r *TokenResolver) Resolve(token tokens3.TokenInterface, astMap *ast_map.AstMap) tokens_references2.TokenReferenceInterface { +func (r *TokenResolver) Resolve(token tokens.TokenInterface, astMap *ast_map.AstMap) tokens_references.TokenReferenceInterface { switch v := token.(type) { - case *tokens3.ClassLikeToken: + case *tokens.ClassLikeToken: return astMap.GetClassReferenceForToken(v) - case *tokens3.FunctionToken: + case *tokens.FunctionToken: return astMap.GetFunctionReferenceForToken(v) case *enums.SuperGlobalToken: - return tokens_references2.NewVariableReference(v) - case *tokens3.FileToken: + return tokens_references.NewVariableReference(v) + case *tokens.FileToken: return astMap.GetFileReferenceForToken(v) default: panic("Unrecognized TokenInterface") diff --git a/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go b/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go new file mode 100644 index 0000000..db003ed --- /dev/null +++ b/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go @@ -0,0 +1,10 @@ +package tokens_references + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" +) + +type TokenReferenceWithDependenciesInterface interface { + TokenReferenceInterface + GetDependencies() []*tokens.DependencyToken +} diff --git a/pkg/tokens/token_reference_with_dependencies_interface.go b/pkg/tokens/token_reference_with_dependencies_interface.go deleted file mode 100644 index 8243bd8..0000000 --- a/pkg/tokens/token_reference_with_dependencies_interface.go +++ /dev/null @@ -1,11 +0,0 @@ -package tokens - -import ( - tokens3 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" -) - -type TokenReferenceWithDependenciesInterface interface { - tokens2.TokenReferenceInterface - GetDependencies() []*tokens3.DependencyToken -} From e045e88be65e7c8055176c76b5af7bd9d6f986e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:38:44 +0300 Subject: [PATCH 23/40] refactor: structure --- pkg/{rules => }/analyse_options.go | 2 +- pkg/{rules => }/analyse_options_hook.go | 2 +- pkg/app/analyse_runner.go | 33 ++++++------ pkg/app/changed_files_runner.go | 8 +-- pkg/app/container_builder.go | 12 ++--- pkg/app/services.go | 8 ++- pkg/application/event_handlers/console.go | 20 +++---- pkg/application/event_handlers/progress.go | 8 +-- .../method_collector.go | 2 +- .../services}/parsers/nikic_php_parser.go | 0 .../parsers/nikic_php_parser_test.go | 0 .../services}/parsers/parser_interface.go | 0 pkg/ast_map/ast_loader.go | 2 +- pkg/ast_map/ast_map_extractor_test.go | 2 +- pkg/commands/analyse_command.go | 9 ++-- pkg/commands/changed_files_command.go | 4 +- pkg/formatters/baseline_output_formatter.go | 8 +-- .../codeclimate_output_formatter.go | 6 +-- pkg/formatters/console_output_formatter.go | 52 +++++++++---------- .../github_actions_output_formatter.go | 20 +++---- .../graph_viz_output_display_formatter.go | 4 +- .../graph_viz_output_dot_formatter.go | 6 +-- pkg/formatters/graph_viz_output_formatter.go | 10 ++-- .../graph_viz_output_html_formatter.go | 6 +-- .../graph_viz_output_image_formatter.go | 6 +-- pkg/formatters/json_output_formatter.go | 6 +-- pkg/formatters/junit_output_formatter.go | 6 +-- pkg/formatters/mermaid_js_output_formatter.go | 4 +- pkg/formatters/output_formatter_interface.go | 4 +- pkg/formatters/style.go | 14 ++--- pkg/formatters/table_output_formatter.go | 12 ++--- pkg/formatters/xml_output_formatter.go | 6 +-- pkg/{results => }/output_interface.go | 2 +- pkg/{results => }/output_style_interface.go | 2 +- pkg/{results => }/symfony_output.go | 2 +- 35 files changed, 141 insertions(+), 147 deletions(-) rename pkg/{rules => }/analyse_options.go (97%) rename pkg/{rules => }/analyse_options_hook.go (99%) rename pkg/{ => application/services}/parsers/nikic_php_parser.go (100%) rename pkg/{ => application/services}/parsers/nikic_php_parser_test.go (100%) rename pkg/{ => application/services}/parsers/parser_interface.go (100%) rename pkg/{results => }/output_interface.go (94%) rename pkg/{results => }/output_style_interface.go (98%) rename pkg/{results => }/symfony_output.go (97%) diff --git a/pkg/rules/analyse_options.go b/pkg/analyse_options.go similarity index 97% rename from pkg/rules/analyse_options.go rename to pkg/analyse_options.go index 5932fc2..2c1f888 100644 --- a/pkg/rules/analyse_options.go +++ b/pkg/analyse_options.go @@ -1,4 +1,4 @@ -package rules +package pkg type AnalyseOptions struct { NoProgress bool diff --git a/pkg/rules/analyse_options_hook.go b/pkg/analyse_options_hook.go similarity index 99% rename from pkg/rules/analyse_options_hook.go rename to pkg/analyse_options_hook.go index f4166e5..e9afcab 100644 --- a/pkg/rules/analyse_options_hook.go +++ b/pkg/analyse_options_hook.go @@ -1,4 +1,4 @@ -package rules +package pkg import ( "flag" diff --git a/pkg/app/analyse_runner.go b/pkg/app/analyse_runner.go index f3659f9..b49b8d5 100644 --- a/pkg/app/analyse_runner.go +++ b/pkg/app/analyse_runner.go @@ -3,13 +3,12 @@ package app import ( "encoding/json" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/hashicorp/go-multierror" "strings" ) @@ -27,7 +26,7 @@ func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterPro } } -func (r *AnalyseRunner) Run(options *rules.AnalyseOptions, output results.OutputInterface) error { +func (r *AnalyseRunner) Run(options *pkg.AnalyseOptions, output pkg.OutputInterface) error { outputFormatterType, err := enums.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err @@ -64,22 +63,22 @@ func (r *AnalyseRunner) Run(options *rules.AnalyseOptions, output results.Output return nil } -func (r *AnalyseRunner) printCollectViolations(output results.OutputInterface) { +func (r *AnalyseRunner) printCollectViolations(output pkg.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "collecting violations."}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "collecting violations."}) } } -func (r *AnalyseRunner) printFormattingStart(output results.OutputInterface) { +func (r *AnalyseRunner) printFormattingStart(output pkg.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "formatting dependencies."}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "formatting dependencies."}) } } -func (r *AnalyseRunner) printFormatterError(output results.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterError(output pkg.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) } var JsonMultiErrFormatFunc = func(es []error) string { @@ -97,19 +96,19 @@ var JsonMultiErrFormatFunc = func(es []error) string { return string(marshalled) } -func (r *AnalyseRunner) printAnalysisException(output results.OutputInterface, exception *multierror.Error) { +func (r *AnalyseRunner) printAnalysisException(output pkg.OutputInterface, exception *multierror.Error) { message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: message}) + output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: message}) } -func (r *AnalyseRunner) printFormatterNotFoundException(output results.OutputInterface, formatterName string) { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterNotFoundException(output pkg.OutputInterface, formatterName string) { + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) knownFormatters := make([]string, 0) for _, formatterType := range r.formatterProvider.GetKnownFormatters() { knownFormatters = append(knownFormatters, string(formatterType)) } - output.GetStyle().Error(results.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) } diff --git a/pkg/app/changed_files_runner.go b/pkg/app/changed_files_runner.go index bf55b63..422f952 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/app/changed_files_runner.go @@ -1,12 +1,12 @@ package app import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "golang.org/x/exp/maps" "strings" ) @@ -24,7 +24,7 @@ func NewChangedFilesRunner(layerForTokenAnalyser *analysers.LayerForTokenAnalyse } } -func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output results.OutputInterface) error { +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output pkg.OutputInterface) error { layers := make(map[string]string) for _, file := range files { matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, enums.TokenTypeFile) @@ -37,7 +37,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output r } } } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) if withDependencies { analyseResult, err := r.dependencyLayersAnalyser.Analyse() if err != nil { @@ -59,7 +59,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output r layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] } } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) } return nil } diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 1513ae7..10d36ec 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -7,6 +7,7 @@ import ( services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + parsers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" @@ -20,9 +21,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) type ContainerBuilder struct { @@ -41,7 +39,7 @@ type ContainerBuilder struct { AstFileReferenceInMemoryCache *ast_map.AstFileReferenceInMemoryCache TypeResolver *types.TypeResolver ReferenceExtractors []extractors.ReferenceExtractorInterface - ParserInterface parsers.ParserInterface + ParserInterface parsers2.ParserInterface LayerProvider *layers.LayerProvider EventHelper *dispatchers.EventHelper AllowDependencyHandler *event_handlers2.AllowDependency @@ -56,7 +54,7 @@ type ContainerBuilder struct { VerboseBoolFlag *bool DebugBoolFlag *bool Style *formatters.Style - SymfonyOutput *results.SymfonyOutput + SymfonyOutput *pkg.SymfonyOutput TimeStopwatch *stopwatch.Stopwatch AstMapExtractor *ast_map.AstMapExtractor InheritanceFlattener *flatteners.InheritanceFlattener @@ -64,7 +62,7 @@ type ContainerBuilder struct { TokenResolver *services2.TokenResolver CollectorResolver *collectors_resolvers.CollectorResolver LayerResolver layers.LayerResolverInterface - NikicPhpParser *parsers.NikicPhpParser + NikicPhpParser *parsers2.NikicPhpParser CollectorProvider *services2.CollectorProvider DependencyLayersAnalyser *analysers.DependencyLayersAnalyser TokenInLayerAnalyser *analysers.TokenInLayerAnalyser @@ -77,7 +75,7 @@ type ContainerBuilder struct { AnalyseRunner *AnalyseRunner AnalyseCommand *commands.AnalyseCommand NodeNamer *services.NodeNamer - AnalyseOptions *rules.AnalyseOptions + AnalyseOptions *pkg.AnalyseOptions } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/app/services.go b/pkg/app/services.go index 4aa6c85..941a9bf 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -11,6 +11,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" @@ -25,9 +26,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/formatters" "github.com/KoNekoD/go-deptrac/pkg/hooks" "github.com/KoNekoD/go-deptrac/pkg/layers" - "github.com/KoNekoD/go-deptrac/pkg/parsers" - "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" "github.com/elliotchance/orderedmap/v2" "os" "strings" @@ -51,7 +49,7 @@ func Services(builder *ContainerBuilder) error { verboseBoolFlag != nil && *verboseBoolFlag == true, debugBoolFlag != nil && *debugBoolFlag == true, ) - symfonyOutput := results.NewSymfonyOutput(style) + symfonyOutput := pkg.NewSymfonyOutput(style) timeStopwatch := stopwatch.NewStopwatch() @@ -203,7 +201,7 @@ func Services(builder *ContainerBuilder) error { formatter = &formatterTmp } - analyseOptions := rules.NewAnalyseOptions( + analyseOptions := pkg.NewAnalyseOptions( nil != noProgress && *noProgress == true, *formatter, output, diff --git a/pkg/application/event_handlers/console.go b/pkg/application/event_handlers/console.go index a27554e..86afc00 100644 --- a/pkg/application/event_handlers/console.go +++ b/pkg/application/event_handlers/console.go @@ -2,18 +2,18 @@ package event_handlers import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/results" ) type Console struct { - output results.OutputInterface + output pkg.OutputInterface stopwatch *stopwatch.Stopwatch } -func NewConsole(output results.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { +func NewConsole(output pkg.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { return &Console{ output: output, stopwatch: stopwatch, @@ -28,7 +28,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) } case *ast_map.PostCreateAstMapEvent: if s.output.IsVerbose() { @@ -36,17 +36,17 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro } case *events.AstFileAnalysedEvent: if s.output.IsVerbose() { - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } case *ast_map.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) case *events.PreEmitEvent: if s.output.IsVerbose() { err := s.stopwatchStart("deps") if err != nil { return err } - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) } case *events.PostEmitEvent: if s.output.IsVerbose() { @@ -58,7 +58,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "start flatten dependencies"}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "start flatten dependencies"}) } case *events.PostFlattenEvent: if s.output.IsVerbose() { @@ -82,9 +82,9 @@ func (s *Console) printMessageWithTime(event string, messageWithTime string, mes period, err := s.stopwatch.Stop(event) if err != nil { - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: messageWithoutTime}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: messageWithoutTime}) return } - s.output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) + s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) } diff --git a/pkg/application/event_handlers/progress.go b/pkg/application/event_handlers/progress.go index 486f397..8e276b8 100644 --- a/pkg/application/event_handlers/progress.go +++ b/pkg/application/event_handlers/progress.go @@ -1,16 +1,16 @@ package event_handlers import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/results" ) type Progress struct { - output results.OutputInterface + output pkg.OutputInterface } -func NewProgress(output results.OutputInterface) *Progress { +func NewProgress(output pkg.OutputInterface) *Progress { return &Progress{output: output} } @@ -24,7 +24,7 @@ func (s *Progress) HandleEvent(rawEvent interface{}, stopPropagation func()) err return err } case *events.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(results.ProgressAdvanceDefault) + err := s.output.GetStyle().ProgressAdvance(pkg.ProgressAdvanceDefault) if err != nil { return err } diff --git a/pkg/application/services/dependencies_collectors/method_collector.go b/pkg/application/services/dependencies_collectors/method_collector.go index 671da02..7580a1b 100644 --- a/pkg/application/services/dependencies_collectors/method_collector.go +++ b/pkg/application/services/dependencies_collectors/method_collector.go @@ -2,10 +2,10 @@ package dependencies_collectors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/parsers" ) type MethodCollector struct { diff --git a/pkg/parsers/nikic_php_parser.go b/pkg/application/services/parsers/nikic_php_parser.go similarity index 100% rename from pkg/parsers/nikic_php_parser.go rename to pkg/application/services/parsers/nikic_php_parser.go diff --git a/pkg/parsers/nikic_php_parser_test.go b/pkg/application/services/parsers/nikic_php_parser_test.go similarity index 100% rename from pkg/parsers/nikic_php_parser_test.go rename to pkg/application/services/parsers/nikic_php_parser_test.go diff --git a/pkg/parsers/parser_interface.go b/pkg/application/services/parsers/parser_interface.go similarity index 100% rename from pkg/parsers/parser_interface.go rename to pkg/application/services/parsers/parser_interface.go diff --git a/pkg/ast_map/ast_loader.go b/pkg/ast_map/ast_loader.go index ba055ad..af4003a 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/ast_map/ast_loader.go @@ -1,11 +1,11 @@ package ast_map import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/parsers" ) type AstLoader struct { diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index c906818..137e77f 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -2,9 +2,9 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/parsers" "os" "testing" ) diff --git a/pkg/commands/analyse_command.go b/pkg/commands/analyse_command.go index fe10235..df8e1b4 100644 --- a/pkg/commands/analyse_command.go +++ b/pkg/commands/analyse_command.go @@ -1,12 +1,11 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/app" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/results" - "github.com/KoNekoD/go-deptrac/pkg/rules" ) // AnalyseCommand - Analyses your project using the provided depfile @@ -18,10 +17,10 @@ type AnalyseCommand struct { debugBoolFlag bool consoleSubscriber *event_handlers2.Console progressSubscriber *event_handlers2.Progress - analyseOptions *rules.AnalyseOptions + analyseOptions *pkg.AnalyseOptions } -func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *rules.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *pkg.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, @@ -35,7 +34,7 @@ func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDi } func (c *AnalyseCommand) Run() error { - symfonyOutput := results.NewSymfonyOutput(formatters.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) + symfonyOutput := pkg.NewSymfonyOutput(formatters.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) // Moved to services //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) diff --git a/pkg/commands/changed_files_command.go b/pkg/commands/changed_files_command.go index 20de9f7..3aaf5ec 100644 --- a/pkg/commands/changed_files_command.go +++ b/pkg/commands/changed_files_command.go @@ -1,9 +1,9 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/app" "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -37,7 +37,7 @@ func NewChangedFilesCommand(runner *app.ChangedFilesRunner) *cobra.Command { } func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { - symfonyOutput := results.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) + symfonyOutput := pkg.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) files, err := cobraCmd.Flags().GetStringArray(argFiles) if err != nil { diff --git a/pkg/formatters/baseline_output_formatter.go b/pkg/formatters/baseline_output_formatter.go index 829402f..3ce282b 100644 --- a/pkg/formatters/baseline_output_formatter.go +++ b/pkg/formatters/baseline_output_formatter.go @@ -1,9 +1,9 @@ package formatters import ( + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" @@ -20,7 +20,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -36,7 +36,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, ou if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { if err := os.MkdirAll(dirname, 0777); err != nil { if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) return err } } @@ -52,7 +52,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, ou return err } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) return nil } diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/formatters/codeclimate_output_formatter.go index b5f0c2b..e8b5695 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/formatters/codeclimate_output_formatter.go @@ -4,11 +4,11 @@ import ( "crypto/sha1" "encoding/json" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/results" "os" ) @@ -25,7 +25,7 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { formatterConfig := enums2.NewConfigurationCodeclimateFromArray(f.config) var violations []map[string]interface{} @@ -55,7 +55,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, if err != nil { return err } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) return nil } diff --git a/pkg/formatters/console_output_formatter.go b/pkg/formatters/console_output_formatter.go index 50f3031..7950528 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/formatters/console_output_formatter.go @@ -2,12 +2,12 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "strings" ) @@ -21,7 +21,7 @@ func (f *ConsoleOutputFormatter) GetName() string { return "console_supportive" } -func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) { +func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { f.printViolation(rule.(*violations_rules.Violation), output) } @@ -47,7 +47,7 @@ func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, outp f.printSummary(outputResult, output) } -func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output pkg.OutputInterface) { dep := rule.GetDependency() skippedText := "" @@ -66,7 +66,7 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } output.WriteLineFormatted( - results.StringOrArrayOfStrings{ + pkg.StringOrArrayOfStrings{ String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", skippedText, dep.GetDepender().ToString(), @@ -83,15 +83,15 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } } -func (f *ConsoleOutputFormatter) printMultilinePath(output results.OutputInterface, dep dependencies.DependencyInterface) { +func (f *ConsoleOutputFormatter) printMultilinePath(output pkg.OutputInterface, dep dependencies.DependencyInterface) { var buffer strings.Builder for _, depSerialized := range dep.Serialize() { buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: buffer.String()}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: buffer.String()}) } -func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output pkg.OutputInterface) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -99,27 +99,27 @@ func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, outp warningsCount := len(result.Warnings) errorsCount := len(result.Errors) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "Report:"}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) } -func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output results.OutputInterface) { +func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output pkg.OutputInterface) { uncovered := result.Uncovered() if len(uncovered) == 0 { return } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) for _, u := range uncovered { dep := u.GetDependency() output.WriteLineFormatted( - results.StringOrArrayOfStrings{ + pkg.StringOrArrayOfStrings{ String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dep.GetDepender().ToString(), dep.GetDependent().ToString(), @@ -135,21 +135,21 @@ func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, ou } } -func (f *ConsoleOutputFormatter) printFileOccurrence(output results.OutputInterface, fileOccurrence *dtos.FileOccurrence) { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +func (f *ConsoleOutputFormatter) printFileOccurrence(output pkg.OutputInterface, fileOccurrence *dtos.FileOccurrence) { + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } -func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output results.OutputInterface) { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output pkg.OutputInterface) { + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) for _, err := range result.Errors { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) } } -func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output results.OutputInterface) { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output pkg.OutputInterface) { + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) for _, warning := range result.Warnings { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) } } diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/formatters/github_actions_output_formatter.go index d5beefd..c0066de 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/formatters/github_actions_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "strings" ) @@ -20,7 +20,7 @@ func (g *GithubActionsOutputFormatter) GetName() enums2.OutputFormatterType { return enums2.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { for _, rule := range outputResult.AllOf(enums2.TypeViolation) { g.printViolation(rule, output) } @@ -53,7 +53,7 @@ func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.R } } -func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output results.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output pkg.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -63,7 +63,7 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputRes } output.WriteLineFormatted( - results.StringOrArrayOfStrings{ + pkg.StringOrArrayOfStrings{ String: fmt.Sprintf( "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", reportAs, @@ -86,19 +86,19 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.Dep return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output pkg.OutputInterface) { for _, e := range result.Errors { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output pkg.OutputInterface) { for _, warning := range result.Warnings { - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } } -func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output results.OutputInterface) { +func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output pkg.OutputInterface) { dependency := rule.GetDependency() prefix := "" dependerLayer := "" @@ -117,5 +117,5 @@ func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.Rule message += "%0A" + g.multilinePathMessage(dependency) } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) } diff --git a/pkg/formatters/graph_viz_output_display_formatter.go b/pkg/formatters/graph_viz_output_display_formatter.go index 34be162..775ba62 100644 --- a/pkg/formatters/graph_viz_output_display_formatter.go +++ b/pkg/formatters/graph_viz_output_display_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg" "os/exec" "runtime" "time" @@ -27,7 +27,7 @@ func (f *GraphVizOutputDisplayFormatter) GetName() string { return "graphviz-display" } -func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) diff --git a/pkg/formatters/graph_viz_output_dot_formatter.go b/pkg/formatters/graph_viz_output_dot_formatter.go index c20619d..c9df3cf 100644 --- a/pkg/formatters/graph_viz_output_dot_formatter.go +++ b/pkg/formatters/graph_viz_output_dot_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputDotFormatter) GetName() string { return "graphviz-dot" } -func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { dumpDotPath := input.OutputPath if dumpDotPath == nil || *dumpDotPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -42,6 +42,6 @@ func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph. // return fmt.Errorf("unable to write DOT data to file_supportive: %v", err) //} - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) return nil } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/formatters/graph_viz_output_formatter.go index 3df760c..562d129 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/formatters/graph_viz_output_formatter.go @@ -2,10 +2,10 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" - "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -21,7 +21,7 @@ func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFo return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) @@ -147,7 +147,7 @@ func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map } } -func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) @@ -157,11 +157,11 @@ func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Gra if err := os.Rename(filename, *input.OutputPath); err != nil { return fmt.Errorf("unable to move temp file_supportive to output path: %v", err) } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) return nil } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) return nil } diff --git a/pkg/formatters/graph_viz_output_html_formatter.go b/pkg/formatters/graph_viz_output_html_formatter.go index c40a59d..9b93f94 100644 --- a/pkg/formatters/graph_viz_output_html_formatter.go +++ b/pkg/formatters/graph_viz_output_html_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/base64" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg" "os" "path/filepath" @@ -25,7 +25,7 @@ func (f *GraphVizOutputHtmlFormatter) GetName() string { return "graphviz-html" } -func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { dumpHtmlPath := input.OutputPath if dumpHtmlPath == nil || *dumpHtmlPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -62,6 +62,6 @@ func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph return fmt.Errorf("unable to write HTML file_supportive: %v", err) } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) return nil } diff --git a/pkg/formatters/graph_viz_output_image_formatter.go b/pkg/formatters/graph_viz_output_image_formatter.go index 3a00c7c..4069a7a 100644 --- a/pkg/formatters/graph_viz_output_image_formatter.go +++ b/pkg/formatters/graph_viz_output_image_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputImageFormatter) GetName() string { return "graphviz-image" } -func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output results.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { dumpImagePath := input.OutputPath if dumpImagePath == nil || *dumpImagePath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -39,7 +39,7 @@ func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgrap return fmt.Errorf("unable to display output: %v", err) } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) return nil } diff --git a/pkg/formatters/json_output_formatter.go b/pkg/formatters/json_output_formatter.go index 39a3f50..88ff646 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/formatters/json_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/json" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" ) @@ -21,7 +21,7 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) @@ -66,7 +66,7 @@ func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { return err } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) return nil } diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/formatters/junit_output_formatter.go index 550ebe8..5ef49e5 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/formatters/junit_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output resul return err } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/formatters/mermaid_js_output_formatter.go b/pkg/formatters/mermaid_js_output_formatter.go index fbdb6d0..bbd6da3 100644 --- a/pkg/formatters/mermaid_js_output_formatter.go +++ b/pkg/formatters/mermaid_js_output_formatter.go @@ -2,9 +2,9 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" - "github.com/KoNekoD/go-deptrac/pkg/results" "os" "strings" ) @@ -32,7 +32,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder diff --git a/pkg/formatters/output_formatter_interface.go b/pkg/formatters/output_formatter_interface.go index 564fbab..259dcc6 100644 --- a/pkg/formatters/output_formatter_interface.go +++ b/pkg/formatters/output_formatter_interface.go @@ -1,9 +1,9 @@ package formatters import ( + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" ) type OutputFormatterInterface interface { @@ -11,5 +11,5 @@ type OutputFormatterInterface interface { GetName() enums.OutputFormatterType // Finish - Renders the final result_contract. - Finish(result *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error + Finish(result *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/formatters/style.go b/pkg/formatters/style.go index a5daabf..b7c67f5 100644 --- a/pkg/formatters/style.go +++ b/pkg/formatters/style.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/results" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" @@ -33,27 +33,27 @@ func (s *Style) Section(message string) { color.Printf("%s\n", strings.Repeat("-", len(message))) } -func (s *Style) Success(message results.StringOrArrayOfStrings) { +func (s *Style) Success(message pkg.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Error(message results.StringOrArrayOfStrings) { +func (s *Style) Error(message pkg.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Warning(message results.StringOrArrayOfStrings) { +func (s *Style) Warning(message pkg.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Note(message results.StringOrArrayOfStrings) { +func (s *Style) Note(message pkg.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Caution(message results.StringOrArrayOfStrings) { +func (s *Style) Caution(message pkg.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) DefinitionList(list []results.StringOrArrayOfStringsOrTableSeparator) { +func (s *Style) DefinitionList(list []pkg.StringOrArrayOfStringsOrTableSeparator) { headers := make([]string, 0) row := make([]string, 0) for _, value := range list { diff --git a/pkg/formatters/table_output_formatter.go b/pkg/formatters/table_output_formatter.go index 94738a0..f3c113e 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/formatters/table_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/results" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -23,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { return enums.Table } -func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output results.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { @@ -111,7 +111,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyIn return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output results.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output pkg.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -152,7 +152,7 @@ func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, outpu style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []results.StringOrArrayOfStringsOrTableSeparator{ + []pkg.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -180,7 +180,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output results.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output pkg.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -190,7 +190,7 @@ func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output results.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output pkg.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/formatters/xml_output_formatter.go b/pkg/formatters/xml_output_formatter.go index 9c92351..cb9a3bf 100644 --- a/pkg/formatters/xml_output_formatter.go +++ b/pkg/formatters/xml_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" + "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/results" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output results.OutputInterface, input OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output results return err } - output.WriteLineFormatted(results.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/results/output_interface.go b/pkg/output_interface.go similarity index 94% rename from pkg/results/output_interface.go rename to pkg/output_interface.go index c44b8b8..7f6a316 100644 --- a/pkg/results/output_interface.go +++ b/pkg/output_interface.go @@ -1,4 +1,4 @@ -package results +package pkg // OutputInterface - Wrapper around Symfony OutputInterface. type OutputInterface interface { diff --git a/pkg/results/output_style_interface.go b/pkg/output_style_interface.go similarity index 98% rename from pkg/results/output_style_interface.go rename to pkg/output_style_interface.go index 52a478b..682b748 100644 --- a/pkg/results/output_style_interface.go +++ b/pkg/output_style_interface.go @@ -1,4 +1,4 @@ -package results +package pkg import "strings" diff --git a/pkg/results/symfony_output.go b/pkg/symfony_output.go similarity index 97% rename from pkg/results/symfony_output.go rename to pkg/symfony_output.go index da2791d..e5955f8 100644 --- a/pkg/results/symfony_output.go +++ b/pkg/symfony_output.go @@ -1,4 +1,4 @@ -package results +package pkg import ( "github.com/gookit/color" From 8f31eb7642fd7db7ab10dd672d92a6d7a7883f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:41:35 +0300 Subject: [PATCH 24/40] refactor: structure --- pkg/analysers/dependency_layers_analyser.go | 6 +++--- pkg/analysers/layer_dependencies_analyser.go | 6 +++--- pkg/analysers/layer_for_token_analyser.go | 6 +++--- pkg/analysers/ruleset_usage_analyser.go | 6 +++--- pkg/analysers/token_in_layer_analyser.go | 6 +++--- pkg/analysers/unassigned_token_analyser.go | 6 +++--- pkg/app/container_builder.go | 14 ++++++-------- pkg/app/services.go | 14 ++++++-------- .../event_handlers/matching_layers.go} | 10 +++++----- .../dependencies_collectors/layer_collector.go | 6 +++--- .../services}/inheritance_flattener.go | 2 +- .../services}/layer_provider.go | 2 +- .../services/layers_resolvers}/layer_resolver.go | 12 ++++++------ .../layers_resolvers}/layer_resolver_interface.go | 2 +- pkg/dependency_resolver.go | 6 +++--- pkg/dispatchers/event_helper.go | 6 +++--- pkg/{hooks => }/yml_file_loader.go | 2 +- 17 files changed, 54 insertions(+), 58 deletions(-) rename pkg/{layers/matching_layers_handler.go => application/event_handlers/matching_layers.go} (57%) rename pkg/{flatteners => application/services}/inheritance_flattener.go (97%) rename pkg/{layers => application/services}/layer_provider.go (98%) rename pkg/{layers => application/services/layers_resolvers}/layer_resolver.go (93%) rename pkg/{layers => application/services/layers_resolvers}/layer_resolver_interface.go (95%) rename pkg/{hooks => }/yml_file_loader.go (98%) diff --git a/pkg/analysers/dependency_layers_analyser.go b/pkg/analysers/dependency_layers_analyser.go index d20758e..67de60c 100644 --- a/pkg/analysers/dependency_layers_analyser.go +++ b/pkg/analysers/dependency_layers_analyser.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" @@ -11,14 +12,13 @@ import ( tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type DependencyLayersAnalyser struct { astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver tokenResolver *services.TokenResolver - layerResolver layers.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface eventDispatcher dispatchers.EventDispatcherInterface } @@ -26,7 +26,7 @@ func NewDependencyLayersAnalyser( astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, tokenResolver *services.TokenResolver, - layerResolver layers.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ astMapExtractor: astMapExtractor, diff --git a/pkg/analysers/layer_dependencies_analyser.go b/pkg/analysers/layer_dependencies_analyser.go index 51c2f37..43bd5fc 100644 --- a/pkg/analysers/layer_dependencies_analyser.go +++ b/pkg/analysers/layer_dependencies_analyser.go @@ -3,23 +3,23 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type LayerDependenciesAnalyser struct { astMapExtractor *ast_map.AstMapExtractor tokenResolver *services.TokenResolver dependencyResolver *pkg.DependencyResolver - layerResolver layers.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface } func NewLayerDependenciesAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *services.TokenResolver, dependencyResolver *pkg.DependencyResolver, - layerResolver layers.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, ) *LayerDependenciesAnalyser { return &LayerDependenciesAnalyser{ astMapExtractor: astMapExtractor, diff --git a/pkg/analysers/layer_for_token_analyser.go b/pkg/analysers/layer_for_token_analyser.go index 41510e3..3257044 100644 --- a/pkg/analysers/layer_for_token_analyser.go +++ b/pkg/analysers/layer_for_token_analyser.go @@ -2,11 +2,11 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/pkg/errors" "golang.org/x/exp/maps" "strings" @@ -15,13 +15,13 @@ import ( type LayerForTokenAnalyser struct { astMapExtractor *ast_map.AstMapExtractor tokenResolver *services.TokenResolver - layerResolver layers.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface } func NewLayerForTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *services.TokenResolver, - layerResolver layers.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, ) *LayerForTokenAnalyser { return &LayerForTokenAnalyser{ astMapExtractor: astMapExtractor, diff --git a/pkg/analysers/ruleset_usage_analyser.go b/pkg/analysers/ruleset_usage_analyser.go index ed9a548..5b8dea9 100644 --- a/pkg/analysers/ruleset_usage_analyser.go +++ b/pkg/analysers/ruleset_usage_analyser.go @@ -3,13 +3,13 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + layers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" - layers2 "github.com/KoNekoD/go-deptrac/pkg/layers" ) type RulesetUsageAnalyser struct { - layerProvider *layers2.LayerProvider + layerProvider *services.LayerProvider layerResolver layers2.LayerResolverInterface astMapExtractor *ast_map.AstMapExtractor dependencyResolver *pkg.DependencyResolver @@ -18,7 +18,7 @@ type RulesetUsageAnalyser struct { } func NewRulesetUsageAnalyser( - layerProvider *layers2.LayerProvider, + layerProvider *services.LayerProvider, layerResolver layers2.LayerResolverInterface, astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *pkg.DependencyResolver, diff --git a/pkg/analysers/token_in_layer_analyser.go b/pkg/analysers/token_in_layer_analyser.go index 5a79528..03e3d6f 100644 --- a/pkg/analysers/token_in_layer_analyser.go +++ b/pkg/analysers/token_in_layer_analyser.go @@ -2,10 +2,10 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) @@ -14,13 +14,13 @@ type TokenInLayerAnalyser struct { config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *services.TokenResolver - layerResolver layers.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface } func NewTokenInLayerAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *services.TokenResolver, - layerResolver layers.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, config *configs.AnalyserConfig, ) *TokenInLayerAnalyser { analyser := &TokenInLayerAnalyser{ diff --git a/pkg/analysers/unassigned_token_analyser.go b/pkg/analysers/unassigned_token_analyser.go index f2cb4a2..cc4c463 100644 --- a/pkg/analysers/unassigned_token_analyser.go +++ b/pkg/analysers/unassigned_token_analyser.go @@ -2,10 +2,10 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/layers" "slices" ) @@ -14,13 +14,13 @@ type UnassignedTokenAnalyser struct { config *configs.AnalyserConfig astMapExtractor *ast_map.AstMapExtractor tokenResolver *services.TokenResolver - layerResolver layers.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface } func NewUnassignedTokenAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *services.TokenResolver, - layerResolver layers.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, config *configs.AnalyserConfig, ) *UnassignedTokenAnalyser { analyser := &UnassignedTokenAnalyser{ diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 10d36ec..fba1e92 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -7,6 +7,7 @@ import ( services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" parsers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" @@ -17,10 +18,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/hooks" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type ContainerBuilder struct { @@ -29,7 +27,7 @@ type ContainerBuilder struct { Configuration *configs.DeptracConfig EventDispatcher dispatchers.EventDispatcherInterface FileInputCollector input_collectors.InputCollector - YmlFileLoader *hooks.YmlFileLoader + YmlFileLoader *pkg.YmlFileLoader Dumper *utils.Dumper AstLoader *ast_map.AstLoader AstFileReferenceFileCache *ast_map.AstFileReferenceFileCache @@ -40,13 +38,13 @@ type ContainerBuilder struct { TypeResolver *types.TypeResolver ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parsers2.ParserInterface - LayerProvider *layers.LayerProvider + LayerProvider *services2.LayerProvider EventHelper *dispatchers.EventHelper AllowDependencyHandler *event_handlers2.AllowDependency DependsOnPrivateLayer *event_handlers2.DependsOnPrivateLayer DependsOnInternalToken *event_handlers2.DependsOnInternalToken DependsOnDisallowedLayer *event_handlers2.DependsOnDisallowedLayer - MatchingLayersHandler *layers.MatchingLayersHandler + MatchingLayersHandler *event_handlers2.MatchingLayers UncoveredDependentHandler *event_handlers2.UncoveredDependent UnmatchedSkippedViolations *event_handlers2.UnmatchedSkippedViolations ConsoleSubscriber *event_handlers2.Console @@ -57,11 +55,11 @@ type ContainerBuilder struct { SymfonyOutput *pkg.SymfonyOutput TimeStopwatch *stopwatch.Stopwatch AstMapExtractor *ast_map.AstMapExtractor - InheritanceFlattener *flatteners.InheritanceFlattener + InheritanceFlattener *services2.InheritanceFlattener DependencyResolver *pkg.DependencyResolver TokenResolver *services2.TokenResolver CollectorResolver *collectors_resolvers.CollectorResolver - LayerResolver layers.LayerResolverInterface + LayerResolver layers_resolvers.LayerResolverInterface NikicPhpParser *parsers2.NikicPhpParser CollectorProvider *services2.CollectorProvider DependencyLayersAnalyser *analysers.DependencyLayersAnalyser diff --git a/pkg/app/services.go b/pkg/app/services.go index 941a9bf..4688adb 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -11,6 +11,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/ast_map" @@ -22,10 +23,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/flatteners" "github.com/KoNekoD/go-deptrac/pkg/formatters" - "github.com/KoNekoD/go-deptrac/pkg/hooks" - "github.com/KoNekoD/go-deptrac/pkg/layers" "github.com/elliotchance/orderedmap/v2" "os" "strings" @@ -69,7 +67,7 @@ func Services(builder *ContainerBuilder) error { return err } - ymlFileLoader := hooks.NewYmlFileLoader() + ymlFileLoader := pkg.NewYmlFileLoader() dumper := utils.NewDumper("/deptrac_template.yaml") /* @@ -112,13 +110,13 @@ func Services(builder *ContainerBuilder) error { enums2.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), enums2.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), } - inheritanceFlattener := flatteners.NewInheritanceFlattener() + inheritanceFlattener := services2.NewInheritanceFlattener() dependencyResolver := pkg.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) tokenResolver := services2.NewTokenResolver() astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) - layerProvider := layers.NewLayerProvider(builderConfiguration.Rulesets) + layerProvider := services2.NewLayerProvider(builderConfiguration.Rulesets) eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* @@ -131,7 +129,7 @@ func Services(builder *ContainerBuilder) error { // Events uncoveredDependentHandler := event_handlers2.NewUncoveredDependent(builderConfiguration.IgnoreUncoveredInternalStructs) - matchingLayersHandler := layers.NewMatchingLayersHandler() + matchingLayersHandler := event_handlers2.NewMatchingLayers() allowDependencyHandler := event_handlers2.NewAllowDependency() consoleSubscriber := event_handlers2.NewConsole(symfonyOutput, timeStopwatch) progressSubscriber := event_handlers2.NewProgress(symfonyOutput) @@ -229,7 +227,7 @@ func Services(builder *ContainerBuilder) error { } collectorProvider := services2.NewCollectorProvider() collectorResolver := collectors_resolvers.NewCollectorResolver(collectorProvider) - layerResolver := layers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) + layerResolver := layers_resolvers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) collectors := map[enums2.CollectorType]dependencies_collectors.CollectorInterface{ //AttributeCollector enums2.CollectorTypeTypeBool: dependencies_collectors.NewBoolCollector(collectorResolver), diff --git a/pkg/layers/matching_layers_handler.go b/pkg/application/event_handlers/matching_layers.go similarity index 57% rename from pkg/layers/matching_layers_handler.go rename to pkg/application/event_handlers/matching_layers.go index 8ca8fd3..e302733 100644 --- a/pkg/layers/matching_layers_handler.go +++ b/pkg/application/event_handlers/matching_layers.go @@ -1,16 +1,16 @@ -package layers +package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) -type MatchingLayersHandler struct{} +type MatchingLayers struct{} -func NewMatchingLayersHandler() *MatchingLayersHandler { - return &MatchingLayersHandler{} +func NewMatchingLayers() *MatchingLayers { + return &MatchingLayers{} } -func (m *MatchingLayersHandler) HandleEvent(rawEvent interface{}, stopPropagation func()) error { +func (m *MatchingLayers) HandleEvent(rawEvent interface{}, stopPropagation func()) error { event := rawEvent.(*events.ProcessEvent) for dependeeLayer := range event.DependentLayers { if event.DependerLayer != dependeeLayer { diff --git a/pkg/application/services/dependencies_collectors/layer_collector.go b/pkg/application/services/dependencies_collectors/layer_collector.go index 184e15c..88d0d19 100644 --- a/pkg/application/services/dependencies_collectors/layer_collector.go +++ b/pkg/application/services/dependencies_collectors/layer_collector.go @@ -2,18 +2,18 @@ package dependencies_collectors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) type LayerCollector struct { - resolver layers.LayerResolverInterface + resolver layers_resolvers.LayerResolverInterface resolved map[string]map[string]*bool } -func NewLayerCollector(resolver layers.LayerResolverInterface) *LayerCollector { +func NewLayerCollector(resolver layers_resolvers.LayerResolverInterface) *LayerCollector { return &LayerCollector{ resolver: resolver, } diff --git a/pkg/flatteners/inheritance_flattener.go b/pkg/application/services/inheritance_flattener.go similarity index 97% rename from pkg/flatteners/inheritance_flattener.go rename to pkg/application/services/inheritance_flattener.go index b6e9fde..9341f1f 100644 --- a/pkg/flatteners/inheritance_flattener.go +++ b/pkg/application/services/inheritance_flattener.go @@ -1,4 +1,4 @@ -package flatteners +package services import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" diff --git a/pkg/layers/layer_provider.go b/pkg/application/services/layer_provider.go similarity index 98% rename from pkg/layers/layer_provider.go rename to pkg/application/services/layer_provider.go index 14847d8..92d13ef 100644 --- a/pkg/layers/layer_provider.go +++ b/pkg/application/services/layer_provider.go @@ -1,4 +1,4 @@ -package layers +package services import ( "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" diff --git a/pkg/layers/layer_resolver.go b/pkg/application/services/layers_resolvers/layer_resolver.go similarity index 93% rename from pkg/layers/layer_resolver.go rename to pkg/application/services/layers_resolvers/layer_resolver.go index afa2423..7eb44f1 100644 --- a/pkg/layers/layer_resolver.go +++ b/pkg/application/services/layers_resolvers/layer_resolver.go @@ -1,8 +1,8 @@ -package layers +package layers_resolvers import ( "errors" - dtos2 "github.com/KoNekoD/go-deptrac/pkg/application/dtos" + "github.com/KoNekoD/go-deptrac/pkg/application/dtos" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" @@ -14,7 +14,7 @@ import ( type LayerResolver struct { collectorResolver collectors_resolvers.CollectorResolverInterface layersConfig []*rules.Layer - layers map[string][]*dtos2.Collectable + layers map[string][]*dtos.Collectable initialized bool resolved map[string]map[string]bool mu sync.Mutex @@ -25,7 +25,7 @@ func NewLayerResolver(collectorResolver collectors_resolvers.CollectorResolverIn return &LayerResolver{ collectorResolver: collectorResolver, layersConfig: layersConfig, - layers: make(map[string][]*dtos2.Collectable), + layers: make(map[string][]*dtos.Collectable), resolved: make(map[string]map[string]bool), } } @@ -128,14 +128,14 @@ func (r *LayerResolver) Has(layer string) (bool, error) { // initializeLayers initializes the layers from the configuration func (r *LayerResolver) initializeLayers() error { - r.layers = make(map[string][]*dtos2.Collectable) + r.layers = make(map[string][]*dtos.Collectable) for _, layer := range r.layersConfig { layerName := layer.Name if _, exists := r.layers[layerName]; exists { return errors.New("invalid layer_contract definition: duplicate name " + layerName) } - r.layers[layerName] = []*dtos2.Collectable{} + r.layers[layerName] = []*dtos.Collectable{} for _, config := range layer.Collectors { resolvedCollector, err := r.collectorResolver.Resolve(config.ToArray()) diff --git a/pkg/layers/layer_resolver_interface.go b/pkg/application/services/layers_resolvers/layer_resolver_interface.go similarity index 95% rename from pkg/layers/layer_resolver_interface.go rename to pkg/application/services/layers_resolvers/layer_resolver_interface.go index 74d0cc4..ce57a4e 100644 --- a/pkg/layers/layer_resolver_interface.go +++ b/pkg/application/services/layers_resolvers/layer_resolver_interface.go @@ -1,4 +1,4 @@ -package layers +package layers_resolvers import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" diff --git a/pkg/dependency_resolver.go b/pkg/dependency_resolver.go index 0481322..2a9524b 100644 --- a/pkg/dependency_resolver.go +++ b/pkg/dependency_resolver.go @@ -1,6 +1,7 @@ package pkg import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" @@ -9,18 +10,17 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/flatteners" "reflect" ) type DependencyResolver struct { config *configs.AnalyserConfig - inheritanceFlattener *flatteners.InheritanceFlattener + inheritanceFlattener *services.InheritanceFlattener emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface eventDispatcher dispatchers.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *flatteners.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *services.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/dispatchers/event_helper.go b/pkg/dispatchers/event_helper.go index b52ad8e..9a68285 100644 --- a/pkg/dispatchers/event_helper.go +++ b/pkg/dispatchers/event_helper.go @@ -1,21 +1,21 @@ package dispatchers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/layers" ) // EventHelper - Utility class for managing adding violations that could be skipped. type EventHelper struct { UnmatchedSkippedViolation map[string][]string SkippedViolations map[string][]string - LayerProvider *layers.LayerProvider + LayerProvider *services.LayerProvider } -func NewEventHelper(skippedViolations map[string][]string, layerProvider *layers.LayerProvider) *EventHelper { +func NewEventHelper(skippedViolations map[string][]string, layerProvider *services.LayerProvider) *EventHelper { return &EventHelper{ UnmatchedSkippedViolation: skippedViolations, SkippedViolations: skippedViolations, diff --git a/pkg/hooks/yml_file_loader.go b/pkg/yml_file_loader.go similarity index 98% rename from pkg/hooks/yml_file_loader.go rename to pkg/yml_file_loader.go index c7e749a..85d1d3b 100644 --- a/pkg/hooks/yml_file_loader.go +++ b/pkg/yml_file_loader.go @@ -1,4 +1,4 @@ -package hooks +package pkg import ( apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" From eeb95f60a06a5d10df202264e242f0b6943f6cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:43:00 +0300 Subject: [PATCH 25/40] refactor: structure --- pkg/app/cache.go | 4 ++-- pkg/app/container_builder.go | 9 +++++---- pkg/app/services.go | 3 ++- pkg/application/event_handlers/cacheable_file.go | 9 ++++++--- .../ast_file_reference_cache_interface.go | 2 +- .../ast_file_reference_deferred_cache_interface.go | 2 +- .../ast_file_reference_file_cache.go | 2 +- .../ast_file_reference_in_memory_cache.go | 2 +- pkg/application/services/parsers/nikic_php_parser.go | 6 +++--- pkg/ast_map/ast_map_extractor_test.go | 3 ++- 10 files changed, 24 insertions(+), 18 deletions(-) rename pkg/{ast_map => application/services/ast_file_reference_cache}/ast_file_reference_cache_interface.go (88%) rename pkg/{ast_map => application/services/ast_file_reference_cache}/ast_file_reference_deferred_cache_interface.go (78%) rename pkg/{ast_map => application/services/ast_file_reference_cache}/ast_file_reference_file_cache.go (99%) rename pkg/{ast_map => application/services/ast_file_reference_cache}/ast_file_reference_in_memory_cache.go (96%) diff --git a/pkg/app/cache.go b/pkg/app/cache.go index 7e0d487..bff1df9 100644 --- a/pkg/app/cache.go +++ b/pkg/app/cache.go @@ -2,11 +2,11 @@ package app import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" ) func Cache(builder *ContainerBuilder) { - builder.AstFileReferenceFileCache = ast_map.NewAstFileReferenceFileCache(*builder.CacheFile, Version) + builder.AstFileReferenceFileCache = ast_file_reference_cache.NewAstFileReferenceFileCache(*builder.CacheFile, Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache builder.CacheableFileSubscriber = event_handlers.NewCacheableFile(builder.AstFileReferenceDeferredCacheInterface) diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index fba1e92..4102991 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -5,6 +5,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/analysers" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" @@ -30,11 +31,11 @@ type ContainerBuilder struct { YmlFileLoader *pkg.YmlFileLoader Dumper *utils.Dumper AstLoader *ast_map.AstLoader - AstFileReferenceFileCache *ast_map.AstFileReferenceFileCache - AstFileReferenceDeferredCacheInterface ast_map.AstFileReferenceDeferredCacheInterface - AstFileReferenceCacheInterface ast_map.AstFileReferenceCacheInterface + AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache + AstFileReferenceDeferredCacheInterface ast_file_reference_cache.AstFileReferenceDeferredCacheInterface + AstFileReferenceCacheInterface ast_file_reference_cache.AstFileReferenceCacheInterface CacheableFileSubscriber *event_handlers2.CacheableFile - AstFileReferenceInMemoryCache *ast_map.AstFileReferenceInMemoryCache + AstFileReferenceInMemoryCache *ast_file_reference_cache.AstFileReferenceInMemoryCache TypeResolver *types.TypeResolver ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parsers2.ParserInterface diff --git a/pkg/app/services.go b/pkg/app/services.go index 4688adb..caf77ec 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -7,6 +7,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/analysers" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" @@ -73,7 +74,7 @@ func Services(builder *ContainerBuilder) error { /* * AST */ - astFileReferenceInMemoryCache := ast_map.NewAstFileReferenceInMemoryCache() + astFileReferenceInMemoryCache := ast_file_reference_cache.NewAstFileReferenceInMemoryCache() if builder.AstFileReferenceCacheInterface == nil { builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache } diff --git a/pkg/application/event_handlers/cacheable_file.go b/pkg/application/event_handlers/cacheable_file.go index d81e27a..e46ced5 100644 --- a/pkg/application/event_handlers/cacheable_file.go +++ b/pkg/application/event_handlers/cacheable_file.go @@ -1,12 +1,15 @@ package event_handlers -import "github.com/KoNekoD/go-deptrac/pkg/ast_map" +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + "github.com/KoNekoD/go-deptrac/pkg/ast_map" +) type CacheableFile struct { - deferredCache ast_map.AstFileReferenceDeferredCacheInterface + deferredCache ast_file_reference_cache.AstFileReferenceDeferredCacheInterface } -func NewCacheableFile(deferredCache ast_map.AstFileReferenceDeferredCacheInterface) *CacheableFile { +func NewCacheableFile(deferredCache ast_file_reference_cache.AstFileReferenceDeferredCacheInterface) *CacheableFile { return &CacheableFile{deferredCache: deferredCache} } diff --git a/pkg/ast_map/ast_file_reference_cache_interface.go b/pkg/application/services/ast_file_reference_cache/ast_file_reference_cache_interface.go similarity index 88% rename from pkg/ast_map/ast_file_reference_cache_interface.go rename to pkg/application/services/ast_file_reference_cache/ast_file_reference_cache_interface.go index ed15635..1661f07 100644 --- a/pkg/ast_map/ast_file_reference_cache_interface.go +++ b/pkg/application/services/ast_file_reference_cache/ast_file_reference_cache_interface.go @@ -1,4 +1,4 @@ -package ast_map +package ast_file_reference_cache import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" diff --git a/pkg/ast_map/ast_file_reference_deferred_cache_interface.go b/pkg/application/services/ast_file_reference_cache/ast_file_reference_deferred_cache_interface.go similarity index 78% rename from pkg/ast_map/ast_file_reference_deferred_cache_interface.go rename to pkg/application/services/ast_file_reference_cache/ast_file_reference_deferred_cache_interface.go index 43c34e9..d513413 100644 --- a/pkg/ast_map/ast_file_reference_deferred_cache_interface.go +++ b/pkg/application/services/ast_file_reference_cache/ast_file_reference_deferred_cache_interface.go @@ -1,4 +1,4 @@ -package ast_map +package ast_file_reference_cache type AstFileReferenceDeferredCacheInterface interface { AstFileReferenceCacheInterface diff --git a/pkg/ast_map/ast_file_reference_file_cache.go b/pkg/application/services/ast_file_reference_cache/ast_file_reference_file_cache.go similarity index 99% rename from pkg/ast_map/ast_file_reference_file_cache.go rename to pkg/application/services/ast_file_reference_cache/ast_file_reference_file_cache.go index f6aa339..b134cca 100644 --- a/pkg/ast_map/ast_file_reference_file_cache.go +++ b/pkg/application/services/ast_file_reference_cache/ast_file_reference_file_cache.go @@ -1,4 +1,4 @@ -package ast_map +package ast_file_reference_cache import ( "encoding/json" diff --git a/pkg/ast_map/ast_file_reference_in_memory_cache.go b/pkg/application/services/ast_file_reference_cache/ast_file_reference_in_memory_cache.go similarity index 96% rename from pkg/ast_map/ast_file_reference_in_memory_cache.go rename to pkg/application/services/ast_file_reference_cache/ast_file_reference_in_memory_cache.go index 1bbe931..ec12800 100644 --- a/pkg/ast_map/ast_file_reference_in_memory_cache.go +++ b/pkg/application/services/ast_file_reference_cache/ast_file_reference_in_memory_cache.go @@ -1,4 +1,4 @@ -package ast_map +package ast_file_reference_cache import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" diff --git a/pkg/application/services/parsers/nikic_php_parser.go b/pkg/application/services/parsers/nikic_php_parser.go index 338e239..1994d07 100644 --- a/pkg/application/services/parsers/nikic_php_parser.go +++ b/pkg/application/services/parsers/nikic_php_parser.go @@ -1,10 +1,10 @@ package parsers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" "github.com/KoNekoD/go-deptrac/pkg/application/services/reference_visitors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/extractors" @@ -50,13 +50,13 @@ func (p *parsedFile) GetOwnType(name string) *ast.Ident { type NikicPhpParser struct { classAstMap map[string]*ast.Ident - cache ast_map.AstFileReferenceCacheInterface + cache ast_file_reference_cache.AstFileReferenceCacheInterface typeResolver *types.TypeResolver nodeNamer *services.NodeNamer extractors []extractors.ReferenceExtractorInterface } -func NewNikicPhpParser(cache ast_map.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache ast_file_reference_cache.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/ast_map/ast_map_extractor_test.go index 137e77f..d44aedf 100644 --- a/pkg/ast_map/ast_map_extractor_test.go +++ b/pkg/ast_map/ast_map_extractor_test.go @@ -1,6 +1,7 @@ package ast_map import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" @@ -38,7 +39,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { astLoader := NewAstLoader( parsers.NewNikicPhpParser( - NewAstFileReferenceInMemoryCache(), + ast_file_reference_cache.NewAstFileReferenceInMemoryCache(), types.NewTypeResolver( nil, ), From 74aa70e0ac45c57983bdc0538ca9f4c79def3f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:45:03 +0300 Subject: [PATCH 26/40] refactor: structure --- pkg/analysers/dependency_layers_analyser.go | 2 +- pkg/analysers/layer_dependencies_analyser.go | 2 +- pkg/analysers/layer_for_token_analyser.go | 2 +- pkg/analysers/ruleset_usage_analyser.go | 2 +- pkg/analysers/token_in_layer_analyser.go | 2 +- pkg/analysers/unassigned_token_analyser.go | 2 +- pkg/app/container_builder.go | 6 +++--- pkg/app/services.go | 10 +++++----- pkg/application/event_handlers/cacheable_file.go | 6 +++--- pkg/application/event_handlers/console.go | 7 +++---- pkg/application/event_handlers/event_handler.go | 7 +++---- pkg/application/event_handlers/progress.go | 5 ++--- pkg/{ => application/services}/ast_map/ast_loader.go | 6 +++--- .../services}/ast_map/ast_loader_test.go | 0 .../services}/ast_map/ast_map_extractor.go | 0 .../services}/ast_map/ast_map_extractor_test.go | 0 .../inheritance_level_collector.go | 2 +- .../dependencies_collectors/inherits_collector.go | 2 +- .../services/dependencies_collectors/uses_collector.go | 2 +- .../events}/ast_file_syntax_error_event.go | 2 +- .../events}/post_create_ast_map_event.go | 2 +- .../events}/pre_create_ast_map_event.go | 2 +- 22 files changed, 34 insertions(+), 37 deletions(-) rename pkg/{ => application/services}/ast_map/ast_loader.go (82%) rename pkg/{ => application/services}/ast_map/ast_loader_test.go (100%) rename pkg/{ => application/services}/ast_map/ast_map_extractor.go (100%) rename pkg/{ => application/services}/ast_map/ast_map_extractor_test.go (100%) rename pkg/{ast_map => domain/events}/ast_file_syntax_error_event.go (95%) rename pkg/{ast_map => domain/events}/post_create_ast_map_event.go (93%) rename pkg/{ast_map => domain/events}/pre_create_ast_map_event.go (95%) diff --git a/pkg/analysers/dependency_layers_analyser.go b/pkg/analysers/dependency_layers_analyser.go index 67de60c..6f2e337 100644 --- a/pkg/analysers/dependency_layers_analyser.go +++ b/pkg/analysers/dependency_layers_analyser.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" diff --git a/pkg/analysers/layer_dependencies_analyser.go b/pkg/analysers/layer_dependencies_analyser.go index 43bd5fc..3926d43 100644 --- a/pkg/analysers/layer_dependencies_analyser.go +++ b/pkg/analysers/layer_dependencies_analyser.go @@ -3,8 +3,8 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" ) diff --git a/pkg/analysers/layer_for_token_analyser.go b/pkg/analysers/layer_for_token_analyser.go index 3257044..94ab2fe 100644 --- a/pkg/analysers/layer_for_token_analyser.go +++ b/pkg/analysers/layer_for_token_analyser.go @@ -2,8 +2,8 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/analysers/ruleset_usage_analyser.go b/pkg/analysers/ruleset_usage_analyser.go index 5b8dea9..e157efe 100644 --- a/pkg/analysers/ruleset_usage_analyser.go +++ b/pkg/analysers/ruleset_usage_analyser.go @@ -3,8 +3,8 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" layers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" ) diff --git a/pkg/analysers/token_in_layer_analyser.go b/pkg/analysers/token_in_layer_analyser.go index 03e3d6f..8f854a0 100644 --- a/pkg/analysers/token_in_layer_analyser.go +++ b/pkg/analysers/token_in_layer_analyser.go @@ -2,8 +2,8 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "slices" diff --git a/pkg/analysers/unassigned_token_analyser.go b/pkg/analysers/unassigned_token_analyser.go index cc4c463..1a3ec0a 100644 --- a/pkg/analysers/unassigned_token_analyser.go +++ b/pkg/analysers/unassigned_token_analyser.go @@ -2,8 +2,8 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "slices" diff --git a/pkg/app/container_builder.go b/pkg/app/container_builder.go index 4102991..69db159 100644 --- a/pkg/app/container_builder.go +++ b/pkg/app/container_builder.go @@ -6,12 +6,12 @@ import ( event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" parsers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" @@ -30,7 +30,7 @@ type ContainerBuilder struct { FileInputCollector input_collectors.InputCollector YmlFileLoader *pkg.YmlFileLoader Dumper *utils.Dumper - AstLoader *ast_map.AstLoader + AstLoader *ast_map2.AstLoader AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache AstFileReferenceDeferredCacheInterface ast_file_reference_cache.AstFileReferenceDeferredCacheInterface AstFileReferenceCacheInterface ast_file_reference_cache.AstFileReferenceCacheInterface @@ -55,7 +55,7 @@ type ContainerBuilder struct { Style *formatters.Style SymfonyOutput *pkg.SymfonyOutput TimeStopwatch *stopwatch.Stopwatch - AstMapExtractor *ast_map.AstMapExtractor + AstMapExtractor *ast_map2.AstMapExtractor InheritanceFlattener *services2.InheritanceFlattener DependencyResolver *pkg.DependencyResolver TokenResolver *services2.TokenResolver diff --git a/pkg/app/services.go b/pkg/app/services.go index caf77ec..88c9f03 100644 --- a/pkg/app/services.go +++ b/pkg/app/services.go @@ -8,6 +8,7 @@ import ( event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" @@ -15,7 +16,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/commands" "github.com/KoNekoD/go-deptrac/pkg/dispatchers" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -97,7 +97,7 @@ func Services(builder *ContainerBuilder) error { } nikicPhpParser := parsers.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser - astLoader := ast_map.NewAstLoader(parserInterface, eventDispatcher) + astLoader := ast_map2.NewAstLoader(parserInterface, eventDispatcher) /* * Dependency @@ -115,7 +115,7 @@ func Services(builder *ContainerBuilder) error { dependencyResolver := pkg.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) tokenResolver := services2.NewTokenResolver() - astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) + astMapExtractor := ast_map2.NewAstMapExtractor(fileInputCollector, astLoader) layerProvider := services2.NewLayerProvider(builderConfiguration.Rulesets) eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) @@ -141,8 +141,8 @@ func Services(builder *ContainerBuilder) error { processEvent := &events2.ProcessEvent{} postProcessEvent := &events2.PostProcessEvent{} - preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} - postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} + preCreateAstMapEvent := &events2.PreCreateAstMapEvent{} + postCreateAstMapEvent := &events2.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" event_handlers2.Reg(processEvent, allowDependencyHandler, -100) diff --git a/pkg/application/event_handlers/cacheable_file.go b/pkg/application/event_handlers/cacheable_file.go index e46ced5..d9f169e 100644 --- a/pkg/application/event_handlers/cacheable_file.go +++ b/pkg/application/event_handlers/cacheable_file.go @@ -2,7 +2,7 @@ package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) type CacheableFile struct { @@ -15,12 +15,12 @@ func NewCacheableFile(deferredCache ast_file_reference_cache.AstFileReferenceDef func (s *CacheableFile) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch rawEvent.(type) { - case *ast_map.PreCreateAstMapEvent: + case *events.PreCreateAstMapEvent: err := s.deferredCache.Load() if err != nil { return err } - case *ast_map.PostCreateAstMapEvent: + case *events.PostCreateAstMapEvent: err := s.deferredCache.Write() if err != nil { return err diff --git a/pkg/application/event_handlers/console.go b/pkg/application/event_handlers/console.go index 86afc00..22e6588 100644 --- a/pkg/application/event_handlers/console.go +++ b/pkg/application/event_handlers/console.go @@ -3,7 +3,6 @@ package event_handlers import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" ) @@ -22,7 +21,7 @@ func NewConsole(output pkg.OutputInterface, stopwatch *stopwatch.Stopwatch) *Con func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch event := rawEvent.(type) { - case *ast_map.PreCreateAstMapEvent: + case *events.PreCreateAstMapEvent: if s.output.IsVerbose() { err := s.stopwatchStart("ast_contract") if err != nil { @@ -30,7 +29,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro } s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) } - case *ast_map.PostCreateAstMapEvent: + case *events.PostCreateAstMapEvent: if s.output.IsVerbose() { s.printMessageWithTime("ast_contract", "AstMap created in %01.2f sec.", "AstMap created.") } @@ -38,7 +37,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if s.output.IsVerbose() { s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } - case *ast_map.AstFileSyntaxErrorEvent: + case *events.AstFileSyntaxErrorEvent: s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) case *events.PreEmitEvent: if s.output.IsVerbose() { diff --git a/pkg/application/event_handlers/event_handler.go b/pkg/application/event_handlers/event_handler.go index 764861e..75c714d 100644 --- a/pkg/application/event_handlers/event_handler.go +++ b/pkg/application/event_handlers/event_handler.go @@ -1,7 +1,6 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/elliotchance/orderedmap/v2" "reflect" @@ -18,10 +17,10 @@ var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventHandle func RegForAnalyseCommand(consoleSubscriber *Console, progressSubscriber *Progress, withProgress bool) { processEvent := &events.ProcessEvent{} postProcessEvent := &events.PostProcessEvent{} - preCreateAstMapEvent := &ast_map.PreCreateAstMapEvent{} - postCreateAstMapEvent := &ast_map.PostCreateAstMapEvent{} + preCreateAstMapEvent := &events.PreCreateAstMapEvent{} + postCreateAstMapEvent := &events.PostCreateAstMapEvent{} astFileAnalysedEvent := &events.AstFileAnalysedEvent{} - astFileSyntaxErrorEvent := &ast_map.AstFileSyntaxErrorEvent{} + astFileSyntaxErrorEvent := &events.AstFileSyntaxErrorEvent{} preEmitEvent := &events.PreEmitEvent{} postEmitEvent := &events.PostEmitEvent{} preFlattenEvent := &events.PreFlattenEvent{} diff --git a/pkg/application/event_handlers/progress.go b/pkg/application/event_handlers/progress.go index 8e276b8..b4d7d1c 100644 --- a/pkg/application/event_handlers/progress.go +++ b/pkg/application/event_handlers/progress.go @@ -2,7 +2,6 @@ package event_handlers import ( "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) @@ -16,9 +15,9 @@ func NewProgress(output pkg.OutputInterface) *Progress { func (s *Progress) HandleEvent(rawEvent interface{}, stopPropagation func()) error { switch event := rawEvent.(type) { - case *ast_map.PreCreateAstMapEvent: + case *events.PreCreateAstMapEvent: s.output.GetStyle().ProgressStart(event.ExpectedFileCount) - case *ast_map.PostCreateAstMapEvent: + case *events.PostCreateAstMapEvent: err := s.output.GetStyle().ProgressFinish() if err != nil { return err diff --git a/pkg/ast_map/ast_loader.go b/pkg/application/services/ast_map/ast_loader.go similarity index 82% rename from pkg/ast_map/ast_loader.go rename to pkg/application/services/ast_map/ast_loader.go index af4003a..c34b53e 100644 --- a/pkg/ast_map/ast_loader.go +++ b/pkg/application/services/ast_map/ast_loader.go @@ -23,7 +23,7 @@ func NewAstLoader(parser parsers.ParserInterface, eventDispatcher dispatchers.Ev func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { references := make([]*tokens_references.FileReference, 0) - err := l.eventDispatcher.DispatchEvent(NewPreCreateAstMapEvent(len(files))) + err := l.eventDispatcher.DispatchEvent(events.NewPreCreateAstMapEvent(len(files))) if err != nil { return nil, err } @@ -31,7 +31,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { for _, file := range files { reference, err := l.parser.ParseFile(file) if err != nil { - err := l.eventDispatcher.DispatchEvent(NewAstFileSyntaxErrorEvent(file, err.Error())) + err := l.eventDispatcher.DispatchEvent(events.NewAstFileSyntaxErrorEvent(file, err.Error())) if err != nil { return nil, err } @@ -49,7 +49,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { astMap := ast_map.NewAstMap(references) - errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(NewPostCreateAstMapEvent()) + errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(events.NewPostCreateAstMapEvent()) if errDispatchPostCreateMap != nil { return nil, errDispatchPostCreateMap } diff --git a/pkg/ast_map/ast_loader_test.go b/pkg/application/services/ast_map/ast_loader_test.go similarity index 100% rename from pkg/ast_map/ast_loader_test.go rename to pkg/application/services/ast_map/ast_loader_test.go diff --git a/pkg/ast_map/ast_map_extractor.go b/pkg/application/services/ast_map/ast_map_extractor.go similarity index 100% rename from pkg/ast_map/ast_map_extractor.go rename to pkg/application/services/ast_map/ast_map_extractor.go diff --git a/pkg/ast_map/ast_map_extractor_test.go b/pkg/application/services/ast_map/ast_map_extractor_test.go similarity index 100% rename from pkg/ast_map/ast_map_extractor_test.go rename to pkg/application/services/ast_map/ast_map_extractor_test.go diff --git a/pkg/application/services/dependencies_collectors/inheritance_level_collector.go b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go index 59dcdaa..96fc4ee 100644 --- a/pkg/application/services/dependencies_collectors/inheritance_level_collector.go +++ b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go @@ -1,7 +1,7 @@ package dependencies_collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" diff --git a/pkg/application/services/dependencies_collectors/inherits_collector.go b/pkg/application/services/dependencies_collectors/inherits_collector.go index 1da3994..ef8e510 100644 --- a/pkg/application/services/dependencies_collectors/inherits_collector.go +++ b/pkg/application/services/dependencies_collectors/inherits_collector.go @@ -1,7 +1,7 @@ package dependencies_collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" diff --git a/pkg/application/services/dependencies_collectors/uses_collector.go b/pkg/application/services/dependencies_collectors/uses_collector.go index 25f5b67..7dca0ed 100644 --- a/pkg/application/services/dependencies_collectors/uses_collector.go +++ b/pkg/application/services/dependencies_collectors/uses_collector.go @@ -1,7 +1,7 @@ package dependencies_collectors import ( - "github.com/KoNekoD/go-deptrac/pkg/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" diff --git a/pkg/ast_map/ast_file_syntax_error_event.go b/pkg/domain/events/ast_file_syntax_error_event.go similarity index 95% rename from pkg/ast_map/ast_file_syntax_error_event.go rename to pkg/domain/events/ast_file_syntax_error_event.go index 6777027..a5d8b96 100644 --- a/pkg/ast_map/ast_file_syntax_error_event.go +++ b/pkg/domain/events/ast_file_syntax_error_event.go @@ -1,4 +1,4 @@ -package ast_map +package events // AstFileSyntaxErrorEvent - Event triggered when parsing the AST failed on syntax error in the PHP file_supportive. type AstFileSyntaxErrorEvent struct { diff --git a/pkg/ast_map/post_create_ast_map_event.go b/pkg/domain/events/post_create_ast_map_event.go similarity index 93% rename from pkg/ast_map/post_create_ast_map_event.go rename to pkg/domain/events/post_create_ast_map_event.go index 2c4adde..375751d 100644 --- a/pkg/ast_map/post_create_ast_map_event.go +++ b/pkg/domain/events/post_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast_map +package events // PostCreateAstMapEvent - Event triggered after the AST map of all files has been created. type PostCreateAstMapEvent struct{} diff --git a/pkg/ast_map/pre_create_ast_map_event.go b/pkg/domain/events/pre_create_ast_map_event.go similarity index 95% rename from pkg/ast_map/pre_create_ast_map_event.go rename to pkg/domain/events/pre_create_ast_map_event.go index 236010c..03d2ab7 100644 --- a/pkg/ast_map/pre_create_ast_map_event.go +++ b/pkg/domain/events/pre_create_ast_map_event.go @@ -1,4 +1,4 @@ -package ast_map +package events // PreCreateAstMapEvent - Event triggered before the AST map and parsing of all files has started. type PreCreateAstMapEvent struct { From 45a42b75ace0dde0336921e3ba8972a103292094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 01:50:30 +0300 Subject: [PATCH 27/40] refactor: structure --- cmd/go_deptrac/main.go | 2 +- examples/run_test.go | 2 +- examples/simple_invalid_mvc/run_test.go | 2 +- examples/simple_mvc/run_test.go | 2 +- pkg/application/event_handlers/console.go | 20 +++---- .../depends_on_disallowed_layer.go | 2 +- .../depends_on_internal_token.go | 2 +- .../depends_on_private_layer.go | 2 +- pkg/application/event_handlers/progress.go | 8 +-- .../unmatched_skipped_violations.go | 2 +- .../analysers/dependency_layers_analyser.go | 7 ++- .../analysers/layer_dependencies_analyser.go | 5 +- .../analysers/layer_for_token_analyser.go | 0 .../analysers/ruleset_usage_analyser.go | 5 +- .../analysers/token_in_layer_analyser.go | 0 .../analysers/unassigned_token_analyser.go | 0 .../services/ast_map/ast_loader.go | 2 +- .../services/ast_map/ast_loader_test.go | 2 +- .../ast_map/ast_map_extractor_test.go | 2 +- .../services}/dependency_resolver.go | 9 ++-- .../extractors/AnonymousClassExtractor.php | 0 .../extractors/ClassConstantExtractor.php | 0 .../extractors/FunctionCallResolver.php | 0 .../extractors/FunctionLikeExtractor.php | 0 .../services}/extractors/KeywordExtractor.php | 0 .../extractors/PropertyExtractor.php | 0 .../services}/extractors/StaticExtractor.php | 0 .../extractors/VariableExtractor.php | 0 .../reference_extractor_interface.go | 0 .../services/parsers/nikic_php_parser.go | 2 +- .../file_reference_visitor.go | 2 +- .../file_reference_visitor_test.go | 2 +- .../dtos/options}/analyse_options.go | 2 +- pkg/domain/services/node_namer_test.go | 2 +- .../app/DebugDependenciesRunner.php | 0 .../app/DebugLayerRunner.php | 0 .../app/DebugTokenRunner.php | 0 .../app/DebugUnassignedRunner.php | 0 .../app/DebugUnusedRunner.php | 0 .../app/analyse_runner.go | 43 +++++++-------- pkg/{ => infrastructure}/app/application.go | 0 .../app/application_test.go | 0 pkg/{ => infrastructure}/app/cache.go | 0 .../app/changed_files_runner.go | 16 +++--- .../app/container_builder.go | 43 +++++++-------- .../app/service_container_builder.go | 0 pkg/{ => infrastructure}/app/services.go | 53 ++++++++++--------- .../app/test_container_provider.go | 0 .../commands/DebugDependenciesCommand.php | 0 .../commands/DebugLayerCommand.php | 0 .../commands/DebugTokenCommand.php | 0 .../commands/DebugUnassignedCommand.php | 0 .../commands/DebugUnusedCommand.php | 0 .../commands/InitCommand.php | 0 .../commands/analyse_command.go | 17 +++--- .../commands/changed_files_command.go | 8 +-- .../services}/analyse_options_hook.go | 9 ++-- .../dispatchers/event_dispatcher_interface.go | 0 .../event_dispatcher_interface2.go | 0 .../services}/dispatchers/event_helper.go | 0 .../formatters/baseline_output_formatter.go | 12 ++--- .../codeclimate_output_formatter.go | 6 +-- .../formatters/console_output_formatter.go | 52 +++++++++--------- .../formatters/formatter_configuration.go | 0 .../formatters/formatter_provider.go | 0 .../github_actions_output_formatter.go | 20 +++---- .../graph_viz_output_display_formatter.go | 4 +- .../graph_viz_output_dot_formatter.go | 6 +-- .../formatters/graph_viz_output_formatter.go | 10 ++-- .../graph_viz_output_html_formatter.go | 6 +-- .../graph_viz_output_image_formatter.go | 6 +-- .../formatters/json_output_formatter.go | 6 +-- .../formatters/junit_output_formatter.go | 6 +-- .../formatters/mermaid_js_output_formatter.go | 4 +- .../formatters/output_formatter_input.go | 0 .../formatters/output_formatter_interface.go | 4 +- .../services}/formatters/style.go | 14 ++--- .../formatters/table_output_formatter.go | 12 ++--- .../formatters/table_output_formatter_test.go | 0 .../formatters/xml_output_formatter.go | 6 +-- .../services}/output_interface.go | 2 +- .../services}/output_style_interface.go | 2 +- .../services}/symfony_output.go | 2 +- .../services}/yml_file_loader.go | 2 +- 84 files changed, 229 insertions(+), 228 deletions(-) rename pkg/{ => application/services}/analysers/dependency_layers_analyser.go (94%) rename pkg/{ => application/services}/analysers/layer_dependencies_analyser.go (94%) rename pkg/{ => application/services}/analysers/layer_for_token_analyser.go (100%) rename pkg/{ => application/services}/analysers/ruleset_usage_analyser.go (95%) rename pkg/{ => application/services}/analysers/token_in_layer_analyser.go (100%) rename pkg/{ => application/services}/analysers/unassigned_token_analyser.go (100%) rename pkg/{ => application/services}/dependency_resolver.go (88%) rename pkg/{ => application/services}/extractors/AnonymousClassExtractor.php (100%) rename pkg/{ => application/services}/extractors/ClassConstantExtractor.php (100%) rename pkg/{ => application/services}/extractors/FunctionCallResolver.php (100%) rename pkg/{ => application/services}/extractors/FunctionLikeExtractor.php (100%) rename pkg/{ => application/services}/extractors/KeywordExtractor.php (100%) rename pkg/{ => application/services}/extractors/PropertyExtractor.php (100%) rename pkg/{ => application/services}/extractors/StaticExtractor.php (100%) rename pkg/{ => application/services}/extractors/VariableExtractor.php (100%) rename pkg/{ => application/services}/extractors/reference_extractor_interface.go (100%) rename pkg/{ => domain/dtos/options}/analyse_options.go (97%) rename pkg/{ => infrastructure}/app/DebugDependenciesRunner.php (100%) rename pkg/{ => infrastructure}/app/DebugLayerRunner.php (100%) rename pkg/{ => infrastructure}/app/DebugTokenRunner.php (100%) rename pkg/{ => infrastructure}/app/DebugUnassignedRunner.php (100%) rename pkg/{ => infrastructure}/app/DebugUnusedRunner.php (100%) rename pkg/{ => infrastructure}/app/analyse_runner.go (53%) rename pkg/{ => infrastructure}/app/application.go (100%) rename pkg/{ => infrastructure}/app/application_test.go (100%) rename pkg/{ => infrastructure}/app/cache.go (100%) rename pkg/{ => infrastructure}/app/changed_files_runner.go (77%) rename pkg/{ => infrastructure}/app/container_builder.go (69%) rename pkg/{ => infrastructure}/app/service_container_builder.go (100%) rename pkg/{ => infrastructure}/app/services.go (85%) rename pkg/{ => infrastructure}/app/test_container_provider.go (100%) rename pkg/{ => infrastructure}/commands/DebugDependenciesCommand.php (100%) rename pkg/{ => infrastructure}/commands/DebugLayerCommand.php (100%) rename pkg/{ => infrastructure}/commands/DebugTokenCommand.php (100%) rename pkg/{ => infrastructure}/commands/DebugUnassignedCommand.php (100%) rename pkg/{ => infrastructure}/commands/DebugUnusedCommand.php (100%) rename pkg/{ => infrastructure}/commands/InitCommand.php (100%) rename pkg/{ => infrastructure}/commands/analyse_command.go (61%) rename pkg/{ => infrastructure}/commands/changed_files_command.go (78%) rename pkg/{ => infrastructure/services}/analyse_options_hook.go (88%) rename pkg/{ => infrastructure/services}/dispatchers/event_dispatcher_interface.go (100%) rename pkg/{ => infrastructure/services}/dispatchers/event_dispatcher_interface2.go (100%) rename pkg/{ => infrastructure/services}/dispatchers/event_helper.go (100%) rename pkg/{ => infrastructure/services}/formatters/baseline_output_formatter.go (76%) rename pkg/{ => infrastructure/services}/formatters/codeclimate_output_formatter.go (94%) rename pkg/{ => infrastructure/services}/formatters/console_output_formatter.go (58%) rename pkg/{ => infrastructure/services}/formatters/formatter_configuration.go (100%) rename pkg/{ => infrastructure/services}/formatters/formatter_provider.go (100%) rename pkg/{ => infrastructure/services}/formatters/github_actions_output_formatter.go (78%) rename pkg/{ => infrastructure/services}/formatters/graph_viz_output_display_formatter.go (89%) rename pkg/{ => infrastructure/services}/formatters/graph_viz_output_dot_formatter.go (79%) rename pkg/{ => infrastructure/services}/formatters/graph_viz_output_formatter.go (91%) rename pkg/{ => infrastructure/services}/formatters/graph_viz_output_html_formatter.go (85%) rename pkg/{ => infrastructure/services}/formatters/graph_viz_output_image_formatter.go (84%) rename pkg/{ => infrastructure/services}/formatters/json_output_formatter.go (94%) rename pkg/{ => infrastructure/services}/formatters/junit_output_formatter.go (94%) rename pkg/{ => infrastructure/services}/formatters/mermaid_js_output_formatter.go (95%) rename pkg/{ => infrastructure/services}/formatters/output_formatter_input.go (100%) rename pkg/{ => infrastructure/services}/formatters/output_formatter_interface.go (70%) rename pkg/{ => infrastructure/services}/formatters/style.go (87%) rename pkg/{ => infrastructure/services}/formatters/table_output_formatter.go (94%) rename pkg/{ => infrastructure/services}/formatters/table_output_formatter_test.go (100%) rename pkg/{ => infrastructure/services}/formatters/xml_output_formatter.go (91%) rename pkg/{ => infrastructure/services}/output_interface.go (94%) rename pkg/{ => infrastructure/services}/output_style_interface.go (98%) rename pkg/{ => infrastructure/services}/symfony_output.go (97%) rename pkg/{ => infrastructure/services}/yml_file_loader.go (98%) diff --git a/cmd/go_deptrac/main.go b/cmd/go_deptrac/main.go index 68bba6c..781fdc7 100644 --- a/cmd/go_deptrac/main.go +++ b/cmd/go_deptrac/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" ) func main() { diff --git a/examples/run_test.go b/examples/run_test.go index 6fa28fb..9a5490b 100644 --- a/examples/run_test.go +++ b/examples/run_test.go @@ -2,7 +2,7 @@ package examples import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" diff --git a/examples/simple_invalid_mvc/run_test.go b/examples/simple_invalid_mvc/run_test.go index d1e7d5f..363416e 100644 --- a/examples/simple_invalid_mvc/run_test.go +++ b/examples/simple_invalid_mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" diff --git a/examples/simple_mvc/run_test.go b/examples/simple_mvc/run_test.go index e0a697e..863802a 100644 --- a/examples/simple_mvc/run_test.go +++ b/examples/simple_mvc/run_test.go @@ -2,7 +2,7 @@ package simple_cleanarch import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" _ "github.com/KoNekoD/go-deptrac/resources" "os" "testing" diff --git a/pkg/application/event_handlers/console.go b/pkg/application/event_handlers/console.go index 22e6588..1372cb0 100644 --- a/pkg/application/event_handlers/console.go +++ b/pkg/application/event_handlers/console.go @@ -2,17 +2,17 @@ package event_handlers import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type Console struct { - output pkg.OutputInterface + output services.OutputInterface stopwatch *stopwatch.Stopwatch } -func NewConsole(output pkg.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { +func NewConsole(output services.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { return &Console{ output: output, stopwatch: stopwatch, @@ -27,7 +27,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) } case *events.PostCreateAstMapEvent: if s.output.IsVerbose() { @@ -35,17 +35,17 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro } case *events.AstFileAnalysedEvent: if s.output.IsVerbose() { - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } case *events.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) case *events.PreEmitEvent: if s.output.IsVerbose() { err := s.stopwatchStart("deps") if err != nil { return err } - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) } case *events.PostEmitEvent: if s.output.IsVerbose() { @@ -57,7 +57,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "start flatten dependencies"}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "start flatten dependencies"}) } case *events.PostFlattenEvent: if s.output.IsVerbose() { @@ -81,9 +81,9 @@ func (s *Console) printMessageWithTime(event string, messageWithTime string, mes period, err := s.stopwatch.Stop(event) if err != nil { - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: messageWithoutTime}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: messageWithoutTime}) return } - s.output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) + s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) } diff --git a/pkg/application/event_handlers/depends_on_disallowed_layer.go b/pkg/application/event_handlers/depends_on_disallowed_layer.go index e3c683b..1736260 100644 --- a/pkg/application/event_handlers/depends_on_disallowed_layer.go +++ b/pkg/application/event_handlers/depends_on_disallowed_layer.go @@ -1,10 +1,10 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnDisallowedLayer struct { diff --git a/pkg/application/event_handlers/depends_on_internal_token.go b/pkg/application/event_handlers/depends_on_internal_token.go index 35a6190..401c4c9 100644 --- a/pkg/application/event_handlers/depends_on_internal_token.go +++ b/pkg/application/event_handlers/depends_on_internal_token.go @@ -1,10 +1,10 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnInternalToken struct { diff --git a/pkg/application/event_handlers/depends_on_private_layer.go b/pkg/application/event_handlers/depends_on_private_layer.go index 55e77d5..1b1fe8c 100644 --- a/pkg/application/event_handlers/depends_on_private_layer.go +++ b/pkg/application/event_handlers/depends_on_private_layer.go @@ -1,8 +1,8 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnPrivateLayer struct { diff --git a/pkg/application/event_handlers/progress.go b/pkg/application/event_handlers/progress.go index b4d7d1c..0c2ebe8 100644 --- a/pkg/application/event_handlers/progress.go +++ b/pkg/application/event_handlers/progress.go @@ -1,15 +1,15 @@ package event_handlers import ( - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type Progress struct { - output pkg.OutputInterface + output services.OutputInterface } -func NewProgress(output pkg.OutputInterface) *Progress { +func NewProgress(output services.OutputInterface) *Progress { return &Progress{output: output} } @@ -23,7 +23,7 @@ func (s *Progress) HandleEvent(rawEvent interface{}, stopPropagation func()) err return err } case *events.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(pkg.ProgressAdvanceDefault) + err := s.output.GetStyle().ProgressAdvance(services.ProgressAdvanceDefault) if err != nil { return err } diff --git a/pkg/application/event_handlers/unmatched_skipped_violations.go b/pkg/application/event_handlers/unmatched_skipped_violations.go index 5a42cf7..76a6388 100644 --- a/pkg/application/event_handlers/unmatched_skipped_violations.go +++ b/pkg/application/event_handlers/unmatched_skipped_violations.go @@ -2,9 +2,9 @@ package event_handlers import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type UnmatchedSkippedViolations struct { diff --git a/pkg/analysers/dependency_layers_analyser.go b/pkg/application/services/analysers/dependency_layers_analyser.go similarity index 94% rename from pkg/analysers/dependency_layers_analyser.go rename to pkg/application/services/analysers/dependency_layers_analyser.go index 6f2e337..b179fc5 100644 --- a/pkg/analysers/dependency_layers_analyser.go +++ b/pkg/application/services/analysers/dependency_layers_analyser.go @@ -2,21 +2,20 @@ package analysers import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependencyLayersAnalyser struct { astMapExtractor *ast_map.AstMapExtractor - dependencyResolver *pkg.DependencyResolver + dependencyResolver *services.DependencyResolver tokenResolver *services.TokenResolver layerResolver layers_resolvers.LayerResolverInterface eventDispatcher dispatchers.EventDispatcherInterface @@ -24,7 +23,7 @@ type DependencyLayersAnalyser struct { func NewDependencyLayersAnalyser( astMapExtractor *ast_map.AstMapExtractor, - dependencyResolver *pkg.DependencyResolver, + dependencyResolver *services.DependencyResolver, tokenResolver *services.TokenResolver, layerResolver layers_resolvers.LayerResolverInterface, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { diff --git a/pkg/analysers/layer_dependencies_analyser.go b/pkg/application/services/analysers/layer_dependencies_analyser.go similarity index 94% rename from pkg/analysers/layer_dependencies_analyser.go rename to pkg/application/services/analysers/layer_dependencies_analyser.go index 3926d43..9133a7e 100644 --- a/pkg/analysers/layer_dependencies_analyser.go +++ b/pkg/application/services/analysers/layer_dependencies_analyser.go @@ -1,7 +1,6 @@ package analysers import ( - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" @@ -11,14 +10,14 @@ import ( type LayerDependenciesAnalyser struct { astMapExtractor *ast_map.AstMapExtractor tokenResolver *services.TokenResolver - dependencyResolver *pkg.DependencyResolver + dependencyResolver *services.DependencyResolver layerResolver layers_resolvers.LayerResolverInterface } func NewLayerDependenciesAnalyser( astMapExtractor *ast_map.AstMapExtractor, tokenResolver *services.TokenResolver, - dependencyResolver *pkg.DependencyResolver, + dependencyResolver *services.DependencyResolver, layerResolver layers_resolvers.LayerResolverInterface, ) *LayerDependenciesAnalyser { return &LayerDependenciesAnalyser{ diff --git a/pkg/analysers/layer_for_token_analyser.go b/pkg/application/services/analysers/layer_for_token_analyser.go similarity index 100% rename from pkg/analysers/layer_for_token_analyser.go rename to pkg/application/services/analysers/layer_for_token_analyser.go diff --git a/pkg/analysers/ruleset_usage_analyser.go b/pkg/application/services/analysers/ruleset_usage_analyser.go similarity index 95% rename from pkg/analysers/ruleset_usage_analyser.go rename to pkg/application/services/analysers/ruleset_usage_analyser.go index e157efe..73d31f7 100644 --- a/pkg/analysers/ruleset_usage_analyser.go +++ b/pkg/application/services/analysers/ruleset_usage_analyser.go @@ -1,7 +1,6 @@ package analysers import ( - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" layers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" @@ -12,7 +11,7 @@ type RulesetUsageAnalyser struct { layerProvider *services.LayerProvider layerResolver layers2.LayerResolverInterface astMapExtractor *ast_map.AstMapExtractor - dependencyResolver *pkg.DependencyResolver + dependencyResolver *services.DependencyResolver tokenResolver *services.TokenResolver layers []*rules.Layer } @@ -21,7 +20,7 @@ func NewRulesetUsageAnalyser( layerProvider *services.LayerProvider, layerResolver layers2.LayerResolverInterface, astMapExtractor *ast_map.AstMapExtractor, - dependencyResolver *pkg.DependencyResolver, + dependencyResolver *services.DependencyResolver, tokenResolver *services.TokenResolver, layers []*rules.Layer, ) *RulesetUsageAnalyser { diff --git a/pkg/analysers/token_in_layer_analyser.go b/pkg/application/services/analysers/token_in_layer_analyser.go similarity index 100% rename from pkg/analysers/token_in_layer_analyser.go rename to pkg/application/services/analysers/token_in_layer_analyser.go diff --git a/pkg/analysers/unassigned_token_analyser.go b/pkg/application/services/analysers/unassigned_token_analyser.go similarity index 100% rename from pkg/analysers/unassigned_token_analyser.go rename to pkg/application/services/analysers/unassigned_token_analyser.go diff --git a/pkg/application/services/ast_map/ast_loader.go b/pkg/application/services/ast_map/ast_loader.go index c34b53e..6acd039 100644 --- a/pkg/application/services/ast_map/ast_loader.go +++ b/pkg/application/services/ast_map/ast_loader.go @@ -2,10 +2,10 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type AstLoader struct { diff --git a/pkg/application/services/ast_map/ast_loader_test.go b/pkg/application/services/ast_map/ast_loader_test.go index 6022159..7f2f080 100644 --- a/pkg/application/services/ast_map/ast_loader_test.go +++ b/pkg/application/services/ast_map/ast_loader_test.go @@ -2,7 +2,7 @@ package ast_map import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "os" "path" "runtime" diff --git a/pkg/application/services/ast_map/ast_map_extractor_test.go b/pkg/application/services/ast_map/ast_map_extractor_test.go index d44aedf..bbcd16a 100644 --- a/pkg/application/services/ast_map/ast_map_extractor_test.go +++ b/pkg/application/services/ast_map/ast_map_extractor_test.go @@ -2,10 +2,10 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/extractors" "os" "testing" ) diff --git a/pkg/dependency_resolver.go b/pkg/application/services/dependency_resolver.go similarity index 88% rename from pkg/dependency_resolver.go rename to pkg/application/services/dependency_resolver.go index 2a9524b..966d09b 100644 --- a/pkg/dependency_resolver.go +++ b/pkg/application/services/dependency_resolver.go @@ -1,26 +1,25 @@ -package pkg +package services import ( - "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "reflect" ) type DependencyResolver struct { config *configs.AnalyserConfig - inheritanceFlattener *services.InheritanceFlattener + inheritanceFlattener *InheritanceFlattener emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface eventDispatcher dispatchers.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *services.InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/extractors/AnonymousClassExtractor.php b/pkg/application/services/extractors/AnonymousClassExtractor.php similarity index 100% rename from pkg/extractors/AnonymousClassExtractor.php rename to pkg/application/services/extractors/AnonymousClassExtractor.php diff --git a/pkg/extractors/ClassConstantExtractor.php b/pkg/application/services/extractors/ClassConstantExtractor.php similarity index 100% rename from pkg/extractors/ClassConstantExtractor.php rename to pkg/application/services/extractors/ClassConstantExtractor.php diff --git a/pkg/extractors/FunctionCallResolver.php b/pkg/application/services/extractors/FunctionCallResolver.php similarity index 100% rename from pkg/extractors/FunctionCallResolver.php rename to pkg/application/services/extractors/FunctionCallResolver.php diff --git a/pkg/extractors/FunctionLikeExtractor.php b/pkg/application/services/extractors/FunctionLikeExtractor.php similarity index 100% rename from pkg/extractors/FunctionLikeExtractor.php rename to pkg/application/services/extractors/FunctionLikeExtractor.php diff --git a/pkg/extractors/KeywordExtractor.php b/pkg/application/services/extractors/KeywordExtractor.php similarity index 100% rename from pkg/extractors/KeywordExtractor.php rename to pkg/application/services/extractors/KeywordExtractor.php diff --git a/pkg/extractors/PropertyExtractor.php b/pkg/application/services/extractors/PropertyExtractor.php similarity index 100% rename from pkg/extractors/PropertyExtractor.php rename to pkg/application/services/extractors/PropertyExtractor.php diff --git a/pkg/extractors/StaticExtractor.php b/pkg/application/services/extractors/StaticExtractor.php similarity index 100% rename from pkg/extractors/StaticExtractor.php rename to pkg/application/services/extractors/StaticExtractor.php diff --git a/pkg/extractors/VariableExtractor.php b/pkg/application/services/extractors/VariableExtractor.php similarity index 100% rename from pkg/extractors/VariableExtractor.php rename to pkg/application/services/extractors/VariableExtractor.php diff --git a/pkg/extractors/reference_extractor_interface.go b/pkg/application/services/extractors/reference_extractor_interface.go similarity index 100% rename from pkg/extractors/reference_extractor_interface.go rename to pkg/application/services/extractors/reference_extractor_interface.go diff --git a/pkg/application/services/parsers/nikic_php_parser.go b/pkg/application/services/parsers/nikic_php_parser.go index 1994d07..8ee405a 100644 --- a/pkg/application/services/parsers/nikic_php_parser.go +++ b/pkg/application/services/parsers/nikic_php_parser.go @@ -2,12 +2,12 @@ package parsers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/reference_visitors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" - "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/pkg/errors" "go/ast" "go/parser" diff --git a/pkg/application/services/reference_visitors/file_reference_visitor.go b/pkg/application/services/reference_visitors/file_reference_visitor.go index bfbce1a..28c3b39 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor.go @@ -1,11 +1,11 @@ package reference_visitors import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" types2 "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/extractors" "github.com/hashicorp/go-multierror" "github.com/pkg/errors" "go/ast" diff --git a/pkg/application/services/reference_visitors/file_reference_visitor_test.go b/pkg/application/services/reference_visitors/file_reference_visitor_test.go index 4387798..9d63bcb 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor_test.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor_test.go @@ -2,9 +2,9 @@ package reference_visitors import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/extractors" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" "go/parser" diff --git a/pkg/analyse_options.go b/pkg/domain/dtos/options/analyse_options.go similarity index 97% rename from pkg/analyse_options.go rename to pkg/domain/dtos/options/analyse_options.go index 2c1f888..8885be8 100644 --- a/pkg/analyse_options.go +++ b/pkg/domain/dtos/options/analyse_options.go @@ -1,4 +1,4 @@ -package pkg +package options type AnalyseOptions struct { NoProgress bool diff --git a/pkg/domain/services/node_namer_test.go b/pkg/domain/services/node_namer_test.go index 2bbbc14..2d86d9e 100644 --- a/pkg/domain/services/node_namer_test.go +++ b/pkg/domain/services/node_namer_test.go @@ -1,8 +1,8 @@ package services_test import ( - "github.com/KoNekoD/go-deptrac/pkg/app" "github.com/KoNekoD/go-deptrac/pkg/domain/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "testing" ) diff --git a/pkg/app/DebugDependenciesRunner.php b/pkg/infrastructure/app/DebugDependenciesRunner.php similarity index 100% rename from pkg/app/DebugDependenciesRunner.php rename to pkg/infrastructure/app/DebugDependenciesRunner.php diff --git a/pkg/app/DebugLayerRunner.php b/pkg/infrastructure/app/DebugLayerRunner.php similarity index 100% rename from pkg/app/DebugLayerRunner.php rename to pkg/infrastructure/app/DebugLayerRunner.php diff --git a/pkg/app/DebugTokenRunner.php b/pkg/infrastructure/app/DebugTokenRunner.php similarity index 100% rename from pkg/app/DebugTokenRunner.php rename to pkg/infrastructure/app/DebugTokenRunner.php diff --git a/pkg/app/DebugUnassignedRunner.php b/pkg/infrastructure/app/DebugUnassignedRunner.php similarity index 100% rename from pkg/app/DebugUnassignedRunner.php rename to pkg/infrastructure/app/DebugUnassignedRunner.php diff --git a/pkg/app/DebugUnusedRunner.php b/pkg/infrastructure/app/DebugUnusedRunner.php similarity index 100% rename from pkg/app/DebugUnusedRunner.php rename to pkg/infrastructure/app/DebugUnusedRunner.php diff --git a/pkg/app/analyse_runner.go b/pkg/infrastructure/app/analyse_runner.go similarity index 53% rename from pkg/app/analyse_runner.go rename to pkg/infrastructure/app/analyse_runner.go index b49b8d5..1bf9f6c 100644 --- a/pkg/app/analyse_runner.go +++ b/pkg/infrastructure/app/analyse_runner.go @@ -3,12 +3,13 @@ package app import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/analysers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/hashicorp/go-multierror" "strings" ) @@ -16,17 +17,17 @@ import ( // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { analyzer *analysers.DependencyLayersAnalyser - formatterProvider *formatters.FormatterProvider + formatterProvider *formatters2.FormatterProvider } -func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterProvider *formatters2.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, } } -func (r *AnalyseRunner) Run(options *pkg.AnalyseOptions, output pkg.OutputInterface) error { +func (r *AnalyseRunner) Run(options *options.AnalyseOptions, output services.OutputInterface) error { outputFormatterType, err := enums.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err @@ -36,7 +37,7 @@ func (r *AnalyseRunner) Run(options *pkg.AnalyseOptions, output pkg.OutputInterf r.printFormatterNotFoundException(output, options.Formatter) return apperrors.NewCommandRunExceptionInvalidFormatter() } - formatterInput := formatters.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) + formatterInput := formatters2.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) r.printCollectViolations(output) analysisResult, errAnalyse := r.analyzer.Analyse() @@ -63,22 +64,22 @@ func (r *AnalyseRunner) Run(options *pkg.AnalyseOptions, output pkg.OutputInterf return nil } -func (r *AnalyseRunner) printCollectViolations(output pkg.OutputInterface) { +func (r *AnalyseRunner) printCollectViolations(output services.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "collecting violations."}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "collecting violations."}) } } -func (r *AnalyseRunner) printFormattingStart(output pkg.OutputInterface) { +func (r *AnalyseRunner) printFormattingStart(output services.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "formatting dependencies."}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "formatting dependencies."}) } } -func (r *AnalyseRunner) printFormatterError(output pkg.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterError(output services.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) } var JsonMultiErrFormatFunc = func(es []error) string { @@ -96,19 +97,19 @@ var JsonMultiErrFormatFunc = func(es []error) string { return string(marshalled) } -func (r *AnalyseRunner) printAnalysisException(output pkg.OutputInterface, exception *multierror.Error) { +func (r *AnalyseRunner) printAnalysisException(output services.OutputInterface, exception *multierror.Error) { message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: message}) + output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: message}) } -func (r *AnalyseRunner) printFormatterNotFoundException(output pkg.OutputInterface, formatterName string) { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterNotFoundException(output services.OutputInterface, formatterName string) { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) knownFormatters := make([]string, 0) for _, formatterType := range r.formatterProvider.GetKnownFormatters() { knownFormatters = append(knownFormatters, string(formatterType)) } - output.GetStyle().Error(pkg.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) } diff --git a/pkg/app/application.go b/pkg/infrastructure/app/application.go similarity index 100% rename from pkg/app/application.go rename to pkg/infrastructure/app/application.go diff --git a/pkg/app/application_test.go b/pkg/infrastructure/app/application_test.go similarity index 100% rename from pkg/app/application_test.go rename to pkg/infrastructure/app/application_test.go diff --git a/pkg/app/cache.go b/pkg/infrastructure/app/cache.go similarity index 100% rename from pkg/app/cache.go rename to pkg/infrastructure/app/cache.go diff --git a/pkg/app/changed_files_runner.go b/pkg/infrastructure/app/changed_files_runner.go similarity index 77% rename from pkg/app/changed_files_runner.go rename to pkg/infrastructure/app/changed_files_runner.go index 422f952..71886ae 100644 --- a/pkg/app/changed_files_runner.go +++ b/pkg/infrastructure/app/changed_files_runner.go @@ -1,30 +1,30 @@ package app import ( - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/analysers" + analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "golang.org/x/exp/maps" "strings" ) // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { - layerForTokenAnalyser *analysers.LayerForTokenAnalyser - dependencyLayersAnalyser *analysers.DependencyLayersAnalyser + layerForTokenAnalyser *analysers2.LayerForTokenAnalyser + dependencyLayersAnalyser *analysers2.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *analysers.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *analysers2.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers2.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, } } -func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output pkg.OutputInterface) error { +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output services.OutputInterface) error { layers := make(map[string]string) for _, file := range files { matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, enums.TokenTypeFile) @@ -37,7 +37,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output p } } } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) if withDependencies { analyseResult, err := r.dependencyLayersAnalyser.Analyse() if err != nil { @@ -59,7 +59,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output p layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] } } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) } return nil } diff --git a/pkg/app/container_builder.go b/pkg/infrastructure/app/container_builder.go similarity index 69% rename from pkg/app/container_builder.go rename to pkg/infrastructure/app/container_builder.go index 69db159..ef2d529 100644 --- a/pkg/app/container_builder.go +++ b/pkg/infrastructure/app/container_builder.go @@ -1,34 +1,35 @@ package app import ( - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/analysers" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" parsers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/commands" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" + services3 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + dispatchers2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" + formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" ) type ContainerBuilder struct { ProjectDirectory string CacheFile *string Configuration *configs.DeptracConfig - EventDispatcher dispatchers.EventDispatcherInterface + EventDispatcher dispatchers2.EventDispatcherInterface FileInputCollector input_collectors.InputCollector - YmlFileLoader *pkg.YmlFileLoader + YmlFileLoader *services3.YmlFileLoader Dumper *utils.Dumper AstLoader *ast_map2.AstLoader AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache @@ -40,7 +41,7 @@ type ContainerBuilder struct { ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parsers2.ParserInterface LayerProvider *services2.LayerProvider - EventHelper *dispatchers.EventHelper + EventHelper *dispatchers2.EventHelper AllowDependencyHandler *event_handlers2.AllowDependency DependsOnPrivateLayer *event_handlers2.DependsOnPrivateLayer DependsOnInternalToken *event_handlers2.DependsOnInternalToken @@ -52,29 +53,29 @@ type ContainerBuilder struct { ProgressSubscriber *event_handlers2.Progress VerboseBoolFlag *bool DebugBoolFlag *bool - Style *formatters.Style - SymfonyOutput *pkg.SymfonyOutput + Style *formatters2.Style + SymfonyOutput *services3.SymfonyOutput TimeStopwatch *stopwatch.Stopwatch AstMapExtractor *ast_map2.AstMapExtractor InheritanceFlattener *services2.InheritanceFlattener - DependencyResolver *pkg.DependencyResolver + DependencyResolver *services2.DependencyResolver TokenResolver *services2.TokenResolver CollectorResolver *collectors_resolvers.CollectorResolver LayerResolver layers_resolvers.LayerResolverInterface NikicPhpParser *parsers2.NikicPhpParser CollectorProvider *services2.CollectorProvider - DependencyLayersAnalyser *analysers.DependencyLayersAnalyser - TokenInLayerAnalyser *analysers.TokenInLayerAnalyser - LayerForTokenAnalyser *analysers.LayerForTokenAnalyser - UnassignedTokenAnalyser *analysers.UnassignedTokenAnalyser - LayerDependenciesAnalyser *analysers.LayerDependenciesAnalyser - RulesetUsageAnalyser *analysers.RulesetUsageAnalyser - FormatterProvider *formatters.FormatterProvider - FormatterConfiguration *formatters.FormatterConfiguration + DependencyLayersAnalyser *analysers2.DependencyLayersAnalyser + TokenInLayerAnalyser *analysers2.TokenInLayerAnalyser + LayerForTokenAnalyser *analysers2.LayerForTokenAnalyser + UnassignedTokenAnalyser *analysers2.UnassignedTokenAnalyser + LayerDependenciesAnalyser *analysers2.LayerDependenciesAnalyser + RulesetUsageAnalyser *analysers2.RulesetUsageAnalyser + FormatterProvider *formatters2.FormatterProvider + FormatterConfiguration *formatters2.FormatterConfiguration AnalyseRunner *AnalyseRunner AnalyseCommand *commands.AnalyseCommand NodeNamer *services.NodeNamer - AnalyseOptions *pkg.AnalyseOptions + AnalyseOptions *options.AnalyseOptions } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/app/service_container_builder.go b/pkg/infrastructure/app/service_container_builder.go similarity index 100% rename from pkg/app/service_container_builder.go rename to pkg/infrastructure/app/service_container_builder.go diff --git a/pkg/app/services.go b/pkg/infrastructure/app/services.go similarity index 85% rename from pkg/app/services.go rename to pkg/infrastructure/app/services.go index 88c9f03..0b65dcc 100644 --- a/pkg/app/services.go +++ b/pkg/infrastructure/app/services.go @@ -3,28 +3,29 @@ package app import ( "flag" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/analysers" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" + analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/commands" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/extractors" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" + services3 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + dispatchers2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" + formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/elliotchance/orderedmap/v2" "os" "strings" @@ -32,9 +33,9 @@ import ( func getDefaultFormatter() enums2.OutputFormatterType { if os.Getenv("GITHUB_ACTIONS") != "" { - return formatters.NewGithubActionsOutputFormatter().GetName() + return formatters2.NewGithubActionsOutputFormatter().GetName() } - return formatters.NewTableOutputFormatter().GetName() + return formatters2.NewTableOutputFormatter().GetName() } func Services(builder *ContainerBuilder) error { @@ -44,11 +45,11 @@ func Services(builder *ContainerBuilder) error { projectDirectory := builder.ProjectDirectory verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") debugBoolFlag := flag.Bool("debug", false, "Debug mode") - style := formatters.NewStyle( + style := formatters2.NewStyle( verboseBoolFlag != nil && *verboseBoolFlag == true, debugBoolFlag != nil && *debugBoolFlag == true, ) - symfonyOutput := pkg.NewSymfonyOutput(style) + symfonyOutput := services3.NewSymfonyOutput(style) timeStopwatch := stopwatch.NewStopwatch() @@ -57,7 +58,7 @@ func Services(builder *ContainerBuilder) error { /* * Utilities */ - eventDispatcher := dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + eventDispatcher := dispatchers2.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) fileInputCollector, err := input_collectors.NewFileInputCollector( builderConfiguration.Paths, @@ -68,7 +69,7 @@ func Services(builder *ContainerBuilder) error { return err } - ymlFileLoader := pkg.NewYmlFileLoader() + ymlFileLoader := services3.NewYmlFileLoader() dumper := utils.NewDumper("/deptrac_template.yaml") /* @@ -112,13 +113,13 @@ func Services(builder *ContainerBuilder) error { enums2.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), } inheritanceFlattener := services2.NewInheritanceFlattener() - dependencyResolver := pkg.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + dependencyResolver := services2.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) tokenResolver := services2.NewTokenResolver() astMapExtractor := ast_map2.NewAstMapExtractor(fileInputCollector, astLoader) layerProvider := services2.NewLayerProvider(builderConfiguration.Rulesets) - eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) + eventHelper := dispatchers2.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* * Events (before first possible event) @@ -160,9 +161,9 @@ func Services(builder *ContainerBuilder) error { /* * OutputFormatter */ - outputFormatter := map[enums2.OutputFormatterType]formatters.OutputFormatterInterface{ - enums2.Table: formatters.NewTableOutputFormatter(), - enums2.GithubActions: formatters.NewGithubActionsOutputFormatter(), + outputFormatter := map[enums2.OutputFormatterType]formatters2.OutputFormatterInterface{ + enums2.Table: formatters2.NewTableOutputFormatter(), + enums2.GithubActions: formatters2.NewGithubActionsOutputFormatter(), // TODO: // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); @@ -176,8 +177,8 @@ func Services(builder *ContainerBuilder) error { // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter_contract'); // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter_contract'); } - formatterProvider := formatters.NewFormatterProvider(outputFormatter) - formatterConfiguration := formatters.NewFormatterConfiguration(builderConfiguration.Formatters) + formatterProvider := formatters2.NewFormatterProvider(outputFormatter) + formatterConfiguration := formatters2.NewFormatterConfiguration(builderConfiguration.Formatters) // knownFormattersStr := make([]string, 0) @@ -200,7 +201,7 @@ func Services(builder *ContainerBuilder) error { formatter = &formatterTmp } - analyseOptions := pkg.NewAnalyseOptions( + analyseOptions := options.NewAnalyseOptions( nil != noProgress && *noProgress == true, *formatter, output, @@ -257,12 +258,12 @@ func Services(builder *ContainerBuilder) error { /* * SetAnalyser */ - dependencyLayersAnalyser := analysers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := analysers.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerForTokenAnalyser := analysers.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := analysers.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := analysers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := analysers.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) + dependencyLayersAnalyser := analysers2.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + tokenInLayerAnalyser := analysers2.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerForTokenAnalyser := analysers2.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := analysers2.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerDependenciesAnalyser := analysers2.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + rulesetUsageAnalyser := analysers2.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* * Console diff --git a/pkg/app/test_container_provider.go b/pkg/infrastructure/app/test_container_provider.go similarity index 100% rename from pkg/app/test_container_provider.go rename to pkg/infrastructure/app/test_container_provider.go diff --git a/pkg/commands/DebugDependenciesCommand.php b/pkg/infrastructure/commands/DebugDependenciesCommand.php similarity index 100% rename from pkg/commands/DebugDependenciesCommand.php rename to pkg/infrastructure/commands/DebugDependenciesCommand.php diff --git a/pkg/commands/DebugLayerCommand.php b/pkg/infrastructure/commands/DebugLayerCommand.php similarity index 100% rename from pkg/commands/DebugLayerCommand.php rename to pkg/infrastructure/commands/DebugLayerCommand.php diff --git a/pkg/commands/DebugTokenCommand.php b/pkg/infrastructure/commands/DebugTokenCommand.php similarity index 100% rename from pkg/commands/DebugTokenCommand.php rename to pkg/infrastructure/commands/DebugTokenCommand.php diff --git a/pkg/commands/DebugUnassignedCommand.php b/pkg/infrastructure/commands/DebugUnassignedCommand.php similarity index 100% rename from pkg/commands/DebugUnassignedCommand.php rename to pkg/infrastructure/commands/DebugUnassignedCommand.php diff --git a/pkg/commands/DebugUnusedCommand.php b/pkg/infrastructure/commands/DebugUnusedCommand.php similarity index 100% rename from pkg/commands/DebugUnusedCommand.php rename to pkg/infrastructure/commands/DebugUnusedCommand.php diff --git a/pkg/commands/InitCommand.php b/pkg/infrastructure/commands/InitCommand.php similarity index 100% rename from pkg/commands/InitCommand.php rename to pkg/infrastructure/commands/InitCommand.php diff --git a/pkg/commands/analyse_command.go b/pkg/infrastructure/commands/analyse_command.go similarity index 61% rename from pkg/commands/analyse_command.go rename to pkg/infrastructure/commands/analyse_command.go index df8e1b4..b4479ac 100644 --- a/pkg/commands/analyse_command.go +++ b/pkg/infrastructure/commands/analyse_command.go @@ -1,26 +1,27 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/app" event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - "github.com/KoNekoD/go-deptrac/pkg/dispatchers" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" + formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" ) // AnalyseCommand - Analyses your project using the provided depfile type AnalyseCommand struct { runner *app.AnalyseRunner dispatcher dispatchers.EventDispatcherInterface - formatterProvider *formatters.FormatterProvider + formatterProvider *formatters2.FormatterProvider verboseBoolFlag bool debugBoolFlag bool consoleSubscriber *event_handlers2.Console progressSubscriber *event_handlers2.Progress - analyseOptions *pkg.AnalyseOptions + analyseOptions *options.AnalyseOptions } -func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *pkg.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *options.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, @@ -34,7 +35,7 @@ func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDi } func (c *AnalyseCommand) Run() error { - symfonyOutput := pkg.NewSymfonyOutput(formatters.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) + symfonyOutput := services.NewSymfonyOutput(formatters2.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) // Moved to services //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) diff --git a/pkg/commands/changed_files_command.go b/pkg/infrastructure/commands/changed_files_command.go similarity index 78% rename from pkg/commands/changed_files_command.go rename to pkg/infrastructure/commands/changed_files_command.go index 3aaf5ec..4d5162e 100644 --- a/pkg/commands/changed_files_command.go +++ b/pkg/infrastructure/commands/changed_files_command.go @@ -1,9 +1,9 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg" - "github.com/KoNekoD/go-deptrac/pkg/app" - "github.com/KoNekoD/go-deptrac/pkg/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -37,7 +37,7 @@ func NewChangedFilesCommand(runner *app.ChangedFilesRunner) *cobra.Command { } func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { - symfonyOutput := pkg.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) + symfonyOutput := services.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) files, err := cobraCmd.Flags().GetStringArray(argFiles) if err != nil { diff --git a/pkg/analyse_options_hook.go b/pkg/infrastructure/services/analyse_options_hook.go similarity index 88% rename from pkg/analyse_options_hook.go rename to pkg/infrastructure/services/analyse_options_hook.go index e9afcab..bac35d6 100644 --- a/pkg/analyse_options_hook.go +++ b/pkg/infrastructure/services/analyse_options_hook.go @@ -1,12 +1,13 @@ -package pkg +package services import ( "flag" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" ) type analyseOptionsHook struct{} type AnalyseOptionsHook interface { - GetOptions() *AnalyseOptions + GetOptions() *options.AnalyseOptions } func NewAnalyseOptionsHook() AnalyseOptionsHook { @@ -29,7 +30,7 @@ const ( OptionNoProgressUsage = "Do not show progress bar" ) -func (h *analyseOptionsHook) GetOptions() *AnalyseOptions { +func (h *analyseOptionsHook) GetOptions() *options.AnalyseOptions { reportUncovered := flag.Bool(OptionReportUncovered, false, OptionReportUncoveredUsage) failOnUncovered := flag.Bool(OptionFailOnUncovered, false, OptionFailOnUncoveredUsage) @@ -38,7 +39,7 @@ func (h *analyseOptionsHook) GetOptions() *AnalyseOptions { output := flag.String(OptionOutput, "", OptionOutputUsage) noProgress := flag.Bool(OptionNoProgress, false, OptionNoProgressUsage) - return &AnalyseOptions{ + return &options.AnalyseOptions{ ReportUncovered: *reportUncovered, FailOnUncovered: *failOnUncovered, ReportSkipped: *reportSkipped, diff --git a/pkg/dispatchers/event_dispatcher_interface.go b/pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go similarity index 100% rename from pkg/dispatchers/event_dispatcher_interface.go rename to pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go diff --git a/pkg/dispatchers/event_dispatcher_interface2.go b/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go similarity index 100% rename from pkg/dispatchers/event_dispatcher_interface2.go rename to pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go diff --git a/pkg/dispatchers/event_helper.go b/pkg/infrastructure/services/dispatchers/event_helper.go similarity index 100% rename from pkg/dispatchers/event_helper.go rename to pkg/infrastructure/services/dispatchers/event_helper.go diff --git a/pkg/formatters/baseline_output_formatter.go b/pkg/infrastructure/services/formatters/baseline_output_formatter.go similarity index 76% rename from pkg/formatters/baseline_output_formatter.go rename to pkg/infrastructure/services/formatters/baseline_output_formatter.go index 3ce282b..1c8ea9a 100644 --- a/pkg/formatters/baseline_output_formatter.go +++ b/pkg/infrastructure/services/formatters/baseline_output_formatter.go @@ -1,9 +1,9 @@ package formatters import ( - "github.com/KoNekoD/go-deptrac/pkg" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" @@ -20,7 +20,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -36,7 +36,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, ou if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { if err := os.MkdirAll(dirname, 0777); err != nil { if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) return err } } @@ -52,12 +52,12 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results2.OutputResult, ou return err } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) return nil } -func (b *BaselineOutputFormatter) collectViolations(outputResult *results2.OutputResult) map[string][]string { +func (b *BaselineOutputFormatter) collectViolations(outputResult *results.OutputResult) map[string][]string { violations := make(map[string]map[string]string) for _, rule := range append(outputResult.AllOf(enums.TypeViolation), outputResult.AllOf(enums.TypeSkippedViolation)...) { dependency := rule.GetDependency() diff --git a/pkg/formatters/codeclimate_output_formatter.go b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go similarity index 94% rename from pkg/formatters/codeclimate_output_formatter.go rename to pkg/infrastructure/services/formatters/codeclimate_output_formatter.go index e8b5695..b642a6f 100644 --- a/pkg/formatters/codeclimate_output_formatter.go +++ b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go @@ -4,11 +4,11 @@ import ( "crypto/sha1" "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" ) @@ -25,7 +25,7 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { formatterConfig := enums2.NewConfigurationCodeclimateFromArray(f.config) var violations []map[string]interface{} @@ -55,7 +55,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, if err != nil { return err } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) return nil } diff --git a/pkg/formatters/console_output_formatter.go b/pkg/infrastructure/services/formatters/console_output_formatter.go similarity index 58% rename from pkg/formatters/console_output_formatter.go rename to pkg/infrastructure/services/formatters/console_output_formatter.go index 7950528..afcd5e0 100644 --- a/pkg/formatters/console_output_formatter.go +++ b/pkg/infrastructure/services/formatters/console_output_formatter.go @@ -2,12 +2,12 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "strings" ) @@ -21,7 +21,7 @@ func (f *ConsoleOutputFormatter) GetName() string { return "console_supportive" } -func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) { +func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { f.printViolation(rule.(*violations_rules.Violation), output) } @@ -47,7 +47,7 @@ func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, outp f.printSummary(outputResult, output) } -func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output pkg.OutputInterface) { +func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services.OutputInterface) { dep := rule.GetDependency() skippedText := "" @@ -66,7 +66,7 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } output.WriteLineFormatted( - pkg.StringOrArrayOfStrings{ + services.StringOrArrayOfStrings{ String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", skippedText, dep.GetDepender().ToString(), @@ -83,15 +83,15 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } } -func (f *ConsoleOutputFormatter) printMultilinePath(output pkg.OutputInterface, dep dependencies.DependencyInterface) { +func (f *ConsoleOutputFormatter) printMultilinePath(output services.OutputInterface, dep dependencies.DependencyInterface) { var buffer strings.Builder for _, depSerialized := range dep.Serialize() { buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: buffer.String()}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: buffer.String()}) } -func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output pkg.OutputInterface) { +func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output services.OutputInterface) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -99,27 +99,27 @@ func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, outp warningsCount := len(result.Warnings) errorsCount := len(result.Errors) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "Report:"}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) } -func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output pkg.OutputInterface) { +func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output services.OutputInterface) { uncovered := result.Uncovered() if len(uncovered) == 0 { return } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) for _, u := range uncovered { dep := u.GetDependency() output.WriteLineFormatted( - pkg.StringOrArrayOfStrings{ + services.StringOrArrayOfStrings{ String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dep.GetDepender().ToString(), dep.GetDependent().ToString(), @@ -135,21 +135,21 @@ func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, ou } } -func (f *ConsoleOutputFormatter) printFileOccurrence(output pkg.OutputInterface, fileOccurrence *dtos.FileOccurrence) { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +func (f *ConsoleOutputFormatter) printFileOccurrence(output services.OutputInterface, fileOccurrence *dtos.FileOccurrence) { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } -func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output pkg.OutputInterface) { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output services.OutputInterface) { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) for _, err := range result.Errors { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) } } -func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output pkg.OutputInterface) { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output services.OutputInterface) { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) for _, warning := range result.Warnings { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) } } diff --git a/pkg/formatters/formatter_configuration.go b/pkg/infrastructure/services/formatters/formatter_configuration.go similarity index 100% rename from pkg/formatters/formatter_configuration.go rename to pkg/infrastructure/services/formatters/formatter_configuration.go diff --git a/pkg/formatters/formatter_provider.go b/pkg/infrastructure/services/formatters/formatter_provider.go similarity index 100% rename from pkg/formatters/formatter_provider.go rename to pkg/infrastructure/services/formatters/formatter_provider.go diff --git a/pkg/formatters/github_actions_output_formatter.go b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go similarity index 78% rename from pkg/formatters/github_actions_output_formatter.go rename to pkg/infrastructure/services/formatters/github_actions_output_formatter.go index c0066de..d279d46 100644 --- a/pkg/formatters/github_actions_output_formatter.go +++ b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "strings" ) @@ -20,7 +20,7 @@ func (g *GithubActionsOutputFormatter) GetName() enums2.OutputFormatterType { return enums2.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { for _, rule := range outputResult.AllOf(enums2.TypeViolation) { g.printViolation(rule, output) } @@ -53,7 +53,7 @@ func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.R } } -func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output pkg.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output services.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -63,7 +63,7 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputRes } output.WriteLineFormatted( - pkg.StringOrArrayOfStrings{ + services.StringOrArrayOfStrings{ String: fmt.Sprintf( "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", reportAs, @@ -86,19 +86,19 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.Dep return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output pkg.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output services.OutputInterface) { for _, e := range result.Errors { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output pkg.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output services.OutputInterface) { for _, warning := range result.Warnings { - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } } -func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output pkg.OutputInterface) { +func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services.OutputInterface) { dependency := rule.GetDependency() prefix := "" dependerLayer := "" @@ -117,5 +117,5 @@ func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.Rule message += "%0A" + g.multilinePathMessage(dependency) } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) } diff --git a/pkg/formatters/graph_viz_output_display_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go similarity index 89% rename from pkg/formatters/graph_viz_output_display_formatter.go rename to pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go index 775ba62..964a355 100644 --- a/pkg/formatters/graph_viz_output_display_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os/exec" "runtime" "time" @@ -27,7 +27,7 @@ func (f *GraphVizOutputDisplayFormatter) GetName() string { return "graphviz-display" } -func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputDisplayFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) diff --git a/pkg/formatters/graph_viz_output_dot_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go similarity index 79% rename from pkg/formatters/graph_viz_output_dot_formatter.go rename to pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go index c9df3cf..4456f72 100644 --- a/pkg/formatters/graph_viz_output_dot_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputDotFormatter) GetName() string { return "graphviz-dot" } -func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { dumpDotPath := input.OutputPath if dumpDotPath == nil || *dumpDotPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -42,6 +42,6 @@ func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph. // return fmt.Errorf("unable to write DOT data to file_supportive: %v", err) //} - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) return nil } diff --git a/pkg/formatters/graph_viz_output_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go similarity index 91% rename from pkg/formatters/graph_viz_output_formatter.go rename to pkg/infrastructure/services/formatters/graph_viz_output_formatter.go index 562d129..527eec5 100644 --- a/pkg/formatters/graph_viz_output_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go @@ -2,10 +2,10 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -21,7 +21,7 @@ func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFo return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) @@ -147,7 +147,7 @@ func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map } } -func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) @@ -157,11 +157,11 @@ func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Gra if err := os.Rename(filename, *input.OutputPath); err != nil { return fmt.Errorf("unable to move temp file_supportive to output path: %v", err) } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) return nil } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) return nil } diff --git a/pkg/formatters/graph_viz_output_html_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go similarity index 85% rename from pkg/formatters/graph_viz_output_html_formatter.go rename to pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go index 9b93f94..361d970 100644 --- a/pkg/formatters/graph_viz_output_html_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/base64" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" @@ -25,7 +25,7 @@ func (f *GraphVizOutputHtmlFormatter) GetName() string { return "graphviz-html" } -func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { dumpHtmlPath := input.OutputPath if dumpHtmlPath == nil || *dumpHtmlPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -62,6 +62,6 @@ func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph return fmt.Errorf("unable to write HTML file_supportive: %v", err) } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) return nil } diff --git a/pkg/formatters/graph_viz_output_image_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go similarity index 84% rename from pkg/formatters/graph_viz_output_image_formatter.go rename to pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go index 4069a7a..483eb96 100644 --- a/pkg/formatters/graph_viz_output_image_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputImageFormatter) GetName() string { return "graphviz-image" } -func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { dumpImagePath := input.OutputPath if dumpImagePath == nil || *dumpImagePath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -39,7 +39,7 @@ func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgrap return fmt.Errorf("unable to display output: %v", err) } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) return nil } diff --git a/pkg/formatters/json_output_formatter.go b/pkg/infrastructure/services/formatters/json_output_formatter.go similarity index 94% rename from pkg/formatters/json_output_formatter.go rename to pkg/infrastructure/services/formatters/json_output_formatter.go index 88ff646..378df07 100644 --- a/pkg/formatters/json_output_formatter.go +++ b/pkg/infrastructure/services/formatters/json_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/json" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -21,7 +21,7 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) @@ -66,7 +66,7 @@ func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { return err } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) return nil } diff --git a/pkg/formatters/junit_output_formatter.go b/pkg/infrastructure/services/formatters/junit_output_formatter.go similarity index 94% rename from pkg/formatters/junit_output_formatter.go rename to pkg/infrastructure/services/formatters/junit_output_formatter.go index 5ef49e5..f716979 100644 --- a/pkg/formatters/junit_output_formatter.go +++ b/pkg/infrastructure/services/formatters/junit_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output pkg.O return err } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/formatters/mermaid_js_output_formatter.go b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go similarity index 95% rename from pkg/formatters/mermaid_js_output_formatter.go rename to pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go index bbd6da3..d5a7b14 100644 --- a/pkg/formatters/mermaid_js_output_formatter.go +++ b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go @@ -2,9 +2,9 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "strings" ) @@ -32,7 +32,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder diff --git a/pkg/formatters/output_formatter_input.go b/pkg/infrastructure/services/formatters/output_formatter_input.go similarity index 100% rename from pkg/formatters/output_formatter_input.go rename to pkg/infrastructure/services/formatters/output_formatter_input.go diff --git a/pkg/formatters/output_formatter_interface.go b/pkg/infrastructure/services/formatters/output_formatter_interface.go similarity index 70% rename from pkg/formatters/output_formatter_interface.go rename to pkg/infrastructure/services/formatters/output_formatter_interface.go index 259dcc6..c1ebf0e 100644 --- a/pkg/formatters/output_formatter_interface.go +++ b/pkg/infrastructure/services/formatters/output_formatter_interface.go @@ -1,9 +1,9 @@ package formatters import ( - "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type OutputFormatterInterface interface { @@ -11,5 +11,5 @@ type OutputFormatterInterface interface { GetName() enums.OutputFormatterType // Finish - Renders the final result_contract. - Finish(result *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error + Finish(result *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/formatters/style.go b/pkg/infrastructure/services/formatters/style.go similarity index 87% rename from pkg/formatters/style.go rename to pkg/infrastructure/services/formatters/style.go index b7c67f5..7208fcb 100644 --- a/pkg/formatters/style.go +++ b/pkg/infrastructure/services/formatters/style.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" @@ -33,27 +33,27 @@ func (s *Style) Section(message string) { color.Printf("%s\n", strings.Repeat("-", len(message))) } -func (s *Style) Success(message pkg.StringOrArrayOfStrings) { +func (s *Style) Success(message services.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Error(message pkg.StringOrArrayOfStrings) { +func (s *Style) Error(message services.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Warning(message pkg.StringOrArrayOfStrings) { +func (s *Style) Warning(message services.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Note(message pkg.StringOrArrayOfStrings) { +func (s *Style) Note(message services.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) Caution(message pkg.StringOrArrayOfStrings) { +func (s *Style) Caution(message services.StringOrArrayOfStrings) { color.Printf("%s", message.ToString()) } -func (s *Style) DefinitionList(list []pkg.StringOrArrayOfStringsOrTableSeparator) { +func (s *Style) DefinitionList(list []services.StringOrArrayOfStringsOrTableSeparator) { headers := make([]string, 0) row := make([]string, 0) for _, value := range list { diff --git a/pkg/formatters/table_output_formatter.go b/pkg/infrastructure/services/formatters/table_output_formatter.go similarity index 94% rename from pkg/formatters/table_output_formatter.go rename to pkg/infrastructure/services/formatters/table_output_formatter.go index f3c113e..5f18c94 100644 --- a/pkg/formatters/table_output_formatter.go +++ b/pkg/infrastructure/services/formatters/table_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -23,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { return enums.Table } -func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output pkg.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { @@ -111,7 +111,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyIn return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output pkg.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output services.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -152,7 +152,7 @@ func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, outpu style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []pkg.StringOrArrayOfStringsOrTableSeparator{ + []services.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -180,7 +180,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output pkg.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output services.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -190,7 +190,7 @@ func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output pkg.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output services.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/formatters/table_output_formatter_test.go b/pkg/infrastructure/services/formatters/table_output_formatter_test.go similarity index 100% rename from pkg/formatters/table_output_formatter_test.go rename to pkg/infrastructure/services/formatters/table_output_formatter_test.go diff --git a/pkg/formatters/xml_output_formatter.go b/pkg/infrastructure/services/formatters/xml_output_formatter.go similarity index 91% rename from pkg/formatters/xml_output_formatter.go rename to pkg/infrastructure/services/formatters/xml_output_formatter.go index cb9a3bf..02154e4 100644 --- a/pkg/formatters/xml_output_formatter.go +++ b/pkg/infrastructure/services/formatters/xml_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" - "github.com/KoNekoD/go-deptrac/pkg" results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output pkg.OutputInterface, input OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output pkg.Out return err } - output.WriteLineFormatted(pkg.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/output_interface.go b/pkg/infrastructure/services/output_interface.go similarity index 94% rename from pkg/output_interface.go rename to pkg/infrastructure/services/output_interface.go index 7f6a316..71e7aa6 100644 --- a/pkg/output_interface.go +++ b/pkg/infrastructure/services/output_interface.go @@ -1,4 +1,4 @@ -package pkg +package services // OutputInterface - Wrapper around Symfony OutputInterface. type OutputInterface interface { diff --git a/pkg/output_style_interface.go b/pkg/infrastructure/services/output_style_interface.go similarity index 98% rename from pkg/output_style_interface.go rename to pkg/infrastructure/services/output_style_interface.go index 682b748..44a8174 100644 --- a/pkg/output_style_interface.go +++ b/pkg/infrastructure/services/output_style_interface.go @@ -1,4 +1,4 @@ -package pkg +package services import "strings" diff --git a/pkg/symfony_output.go b/pkg/infrastructure/services/symfony_output.go similarity index 97% rename from pkg/symfony_output.go rename to pkg/infrastructure/services/symfony_output.go index e5955f8..eaa9ec7 100644 --- a/pkg/symfony_output.go +++ b/pkg/infrastructure/services/symfony_output.go @@ -1,4 +1,4 @@ -package pkg +package services import ( "github.com/gookit/color" diff --git a/pkg/yml_file_loader.go b/pkg/infrastructure/services/yml_file_loader.go similarity index 98% rename from pkg/yml_file_loader.go rename to pkg/infrastructure/services/yml_file_loader.go index 85d1d3b..9160414 100644 --- a/pkg/yml_file_loader.go +++ b/pkg/infrastructure/services/yml_file_loader.go @@ -1,4 +1,4 @@ -package pkg +package services import ( apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" From 232622c56dfd8008d7a5826fbef2565ea1b2077e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 08:16:14 +0300 Subject: [PATCH 28/40] refactor: structure --- .../analysers/dependency_layers_analyser.go | 10 +- .../analysers/layer_for_token_analyser.go | 8 +- .../analysers/ruleset_usage_analyser.go | 6 +- .../services/ast_map/ast_loader_test.go | 6 +- .../services/dependency_resolver.go | 10 +- .../services/inheritance_flattener.go | 6 +- .../file_reference_visitor.go | 12 +- pkg/domain/services/node_namer_test.go | 4 +- pkg/infrastructure/app/application.go | 3 +- pkg/infrastructure/app/container_builder.go | 83 -------- .../commands/analyse_command.go | 18 +- .../commands/changed_files_command.go | 6 +- pkg/infrastructure/{app => di}/cache.go | 5 +- pkg/infrastructure/di/container_builder.go | 84 ++++++++ .../{app => di}/service_container_builder.go | 2 +- pkg/infrastructure/{app => di}/services.go | 179 +++++++++--------- .../{app => di}/test_container_provider.go | 5 +- .../event_dispatcher_interface2.go | 8 +- .../services/dispatchers/event_helper.go | 8 +- .../codeclimate_output_formatter.go | 34 ++-- .../formatters/console_output_formatter.go | 12 +- .../github_actions_output_formatter.go | 20 +- .../formatters/graph_viz_output_formatter.go | 4 +- .../formatters/json_output_formatter.go | 4 +- .../formatters/junit_output_formatter.go | 8 +- .../formatters/mermaid_js_output_formatter.go | 6 +- .../formatters/output_formatter_interface.go | 4 +- .../formatters/table_output_formatter.go | 10 +- .../formatters/xml_output_formatter.go | 6 +- .../runners}/analyse_runner.go | 14 +- .../runners}/changed_files_runner.go | 14 +- .../services/yml_file_loader.go | 6 +- 32 files changed, 305 insertions(+), 300 deletions(-) delete mode 100644 pkg/infrastructure/app/container_builder.go rename pkg/infrastructure/{app => di}/cache.go (80%) create mode 100644 pkg/infrastructure/di/container_builder.go rename pkg/infrastructure/{app => di}/service_container_builder.go (99%) rename pkg/infrastructure/{app => di}/services.go (58%) rename pkg/infrastructure/{app => di}/test_container_provider.go (80%) rename pkg/infrastructure/{app => services/runners}/analyse_runner.go (89%) rename pkg/infrastructure/{app => services/runners}/changed_files_runner.go (83%) diff --git a/pkg/application/services/analysers/dependency_layers_analyser.go b/pkg/application/services/analysers/dependency_layers_analyser.go index b179fc5..a545be6 100644 --- a/pkg/application/services/analysers/dependency_layers_analyser.go +++ b/pkg/application/services/analysers/dependency_layers_analyser.go @@ -7,9 +7,9 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) @@ -53,7 +53,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*results.AnalysisResult, error) { if v, ok55 := dependerRef.(*tokens_references.FunctionReference); ok55 { t := v.GetToken() - if tt, ok66 := t.(*tokens2.FunctionToken); ok66 { + if tt, ok66 := t.(*tokens.FunctionToken); ok66 { if tt.FunctionName == "ParseFile" { fmt.Println() } @@ -83,7 +83,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*results.AnalysisResult, error) { } for _, dependerLayer := range dependerLayers { - event := events2.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) + event := events.NewProcessEvent(dependency, dependerRef, dependerLayer, dependentRef, dependentLayers, analysisResult) err := a.eventDispatcher.DispatchEvent(event) if err != nil { return nil, err @@ -96,7 +96,7 @@ func (a *DependencyLayersAnalyser) Analyse() (*results.AnalysisResult, error) { analysisResult.AddWarning(warning) } - event := events2.NewPostProcessEvent(analysisResult) + event := events.NewPostProcessEvent(analysisResult) errDispatch := a.eventDispatcher.DispatchEvent(event) if errDispatch != nil { return nil, errDispatch diff --git a/pkg/application/services/analysers/layer_for_token_analyser.go b/pkg/application/services/analysers/layer_for_token_analyser.go index 94ab2fe..a4b931f 100644 --- a/pkg/application/services/analysers/layer_for_token_analyser.go +++ b/pkg/application/services/analysers/layer_for_token_analyser.go @@ -4,8 +4,8 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - tokens2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/pkg/errors" "golang.org/x/exp/maps" @@ -48,8 +48,8 @@ func (a *LayerForTokenAnalyser) FindLayerForToken(tokenName string, tokenType en } } -func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *ast_map2.AstMap) (map[string][]string, error) { - references := referencesAny.([]tokens2.TokenReferenceInterface) +func (a *LayerForTokenAnalyser) findLayersForReferences(referencesAny any, tokenName string, astMap *dtosAstMap.AstMap) (map[string][]string, error) { + references := referencesAny.([]tokens_references.TokenReferenceInterface) if len(references) == 0 { return make(map[string][]string), nil } diff --git a/pkg/application/services/analysers/ruleset_usage_analyser.go b/pkg/application/services/analysers/ruleset_usage_analyser.go index 73d31f7..f6e6669 100644 --- a/pkg/application/services/analysers/ruleset_usage_analyser.go +++ b/pkg/application/services/analysers/ruleset_usage_analyser.go @@ -3,13 +3,13 @@ package analysers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" - layers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" ) type RulesetUsageAnalyser struct { layerProvider *services.LayerProvider - layerResolver layers2.LayerResolverInterface + layerResolver layers_resolvers.LayerResolverInterface astMapExtractor *ast_map.AstMapExtractor dependencyResolver *services.DependencyResolver tokenResolver *services.TokenResolver @@ -18,7 +18,7 @@ type RulesetUsageAnalyser struct { func NewRulesetUsageAnalyser( layerProvider *services.LayerProvider, - layerResolver layers2.LayerResolverInterface, + layerResolver layers_resolvers.LayerResolverInterface, astMapExtractor *ast_map.AstMapExtractor, dependencyResolver *services.DependencyResolver, tokenResolver *services.TokenResolver, diff --git a/pkg/application/services/ast_map/ast_loader_test.go b/pkg/application/services/ast_map/ast_loader_test.go index 7f2f080..15ba8d6 100644 --- a/pkg/application/services/ast_map/ast_loader_test.go +++ b/pkg/application/services/ast_map/ast_loader_test.go @@ -2,7 +2,7 @@ package ast_map import ( "encoding/json" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/di" "os" "path" "runtime" @@ -10,8 +10,8 @@ import ( ) func TestAstLoaderCreateAstMap(t *testing.T) { - app.UseVoidConfig() - loader := app.ProvideTestContainerService("AstLoader").(*AstLoader) + di.UseVoidConfig() + loader := di.ProvideTestContainerService("AstLoader").(*AstLoader) _, filename, _, _ := runtime.Caller(0) dir := path.Join(path.Dir(filename), "../resources") diff --git a/pkg/application/services/dependency_resolver.go b/pkg/application/services/dependency_resolver.go index 966d09b..1ae8bf0 100644 --- a/pkg/application/services/dependency_resolver.go +++ b/pkg/application/services/dependency_resolver.go @@ -7,7 +7,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "reflect" ) @@ -41,27 +41,27 @@ func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependencies.Depe return nil, apperrors.NewInvalidEmitterConfigurationExceptionIsNotEmitter(string(typeConfig), dependencyEmitterInterface) } - err := r.eventDispatcher.DispatchEvent(events2.NewPreEmitEvent(dependencyEmitterInterface.GetName())) + err := r.eventDispatcher.DispatchEvent(events.NewPreEmitEvent(dependencyEmitterInterface.GetName())) if err != nil { return nil, err } dependencyEmitterInterface.ApplyDependencies(*astMap, result) - errDispatchPostEmit := r.eventDispatcher.DispatchEvent(events2.NewPostEmitEvent()) + errDispatchPostEmit := r.eventDispatcher.DispatchEvent(events.NewPostEmitEvent()) if errDispatchPostEmit != nil { return nil, errDispatchPostEmit } } - errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(events2.NewPreFlattenEvent()) + errDispatchPreFlatten := r.eventDispatcher.DispatchEvent(events.NewPreFlattenEvent()) if errDispatchPreFlatten != nil { return nil, errDispatchPreFlatten } r.inheritanceFlattener.FlattenDependencies(*astMap, result) - errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(events2.NewPostFlattenEvent()) + errDispatchPostFlatten := r.eventDispatcher.DispatchEvent(events.NewPostFlattenEvent()) if errDispatchPostFlatten != nil { return nil, errDispatchPostFlatten } diff --git a/pkg/application/services/inheritance_flattener.go b/pkg/application/services/inheritance_flattener.go index 9341f1f..c95d447 100644 --- a/pkg/application/services/inheritance_flattener.go +++ b/pkg/application/services/inheritance_flattener.go @@ -2,7 +2,7 @@ package services import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" - dependencies2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -12,12 +12,12 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies2.DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { classLikeName := classLikeReference.GetToken().(*tokens.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { for _, dep := range dependencyList.GetDependenciesByClass(inherit.ClassLikeName.ToString()) { - dependencyList.AddInheritDependency(dependencies2.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) + dependencyList.AddInheritDependency(dependencies.NewInheritDependency(classLikeName, dep.GetDependent(), dep, inherit)) } } } diff --git a/pkg/application/services/reference_visitors/file_reference_visitor.go b/pkg/application/services/reference_visitors/file_reference_visitor.go index 28c3b39..78bd7e9 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor.go @@ -3,7 +3,7 @@ package reference_visitors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" - types2 "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/hashicorp/go-multierror" @@ -14,16 +14,16 @@ import ( type FileReferenceVisitor struct { dependencyResolvers []extractors.ReferenceExtractorInterface - currentTypeScope *types2.TypeScope + currentTypeScope *types.TypeScope currentReference references_builders.ReferenceBuilderInterface fileReferenceBuilder *references_builders.FileReferenceBuilder - typeResolver *types2.TypeResolver + typeResolver *types.TypeResolver nodeNamer *services.NodeNamer errors []error nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types2.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, @@ -31,7 +31,7 @@ func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileRefer nodeNamer: nodeNamer, errors: make([]error, 0), dependencyResolvers: extractors, - currentTypeScope: types2.NewTypeScope(""), + currentTypeScope: types.NewTypeScope(""), } } @@ -72,7 +72,7 @@ func (f *FileReferenceVisitor) enterNode(node ast.Node) { packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) f.addErrIfNeeded(err) - f.currentTypeScope = types2.NewTypeScope(packageFileName).SetFileNode(typedNode) + f.currentTypeScope = types.NewTypeScope(packageFileName).SetFileNode(typedNode) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: diff --git a/pkg/domain/services/node_namer_test.go b/pkg/domain/services/node_namer_test.go index 2d86d9e..737aefe 100644 --- a/pkg/domain/services/node_namer_test.go +++ b/pkg/domain/services/node_namer_test.go @@ -2,12 +2,12 @@ package services_test import ( "github.com/KoNekoD/go-deptrac/pkg/domain/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/di" "testing" ) func TestOk(t *testing.T) { - namer := app.ProvideTestContainerService("NodeNamer").(*services.NodeNamer) + namer := di.ProvideTestContainerService("NodeNamer").(*services.NodeNamer) name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") diff --git a/pkg/infrastructure/app/application.go b/pkg/infrastructure/app/application.go index e74da5b..f502c38 100644 --- a/pkg/infrastructure/app/application.go +++ b/pkg/infrastructure/app/application.go @@ -3,6 +3,7 @@ package app import ( "flag" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/di" "github.com/gookit/color" "os" "slices" @@ -98,7 +99,7 @@ func (a *Application) doRun() (int, error) { cache := cacheFile - factory := NewServiceContainerBuilder(currentWorkingDirectory) + factory := di.NewServiceContainerBuilder(currentWorkingDirectory) if !slices.Contains([]string{"init", "list", "help", "completion"}, commandArgument) { factory, err = factory.WithConfig(config) diff --git a/pkg/infrastructure/app/container_builder.go b/pkg/infrastructure/app/container_builder.go deleted file mode 100644 index ef2d529..0000000 --- a/pkg/infrastructure/app/container_builder.go +++ /dev/null @@ -1,83 +0,0 @@ -package app - -import ( - event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" - analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" - "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" - "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" - "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" - "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - parsers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" - "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" - "github.com/KoNekoD/go-deptrac/pkg/domain/services" - "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" - services3 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - dispatchers2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" - formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" -) - -type ContainerBuilder struct { - ProjectDirectory string - CacheFile *string - Configuration *configs.DeptracConfig - EventDispatcher dispatchers2.EventDispatcherInterface - FileInputCollector input_collectors.InputCollector - YmlFileLoader *services3.YmlFileLoader - Dumper *utils.Dumper - AstLoader *ast_map2.AstLoader - AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache - AstFileReferenceDeferredCacheInterface ast_file_reference_cache.AstFileReferenceDeferredCacheInterface - AstFileReferenceCacheInterface ast_file_reference_cache.AstFileReferenceCacheInterface - CacheableFileSubscriber *event_handlers2.CacheableFile - AstFileReferenceInMemoryCache *ast_file_reference_cache.AstFileReferenceInMemoryCache - TypeResolver *types.TypeResolver - ReferenceExtractors []extractors.ReferenceExtractorInterface - ParserInterface parsers2.ParserInterface - LayerProvider *services2.LayerProvider - EventHelper *dispatchers2.EventHelper - AllowDependencyHandler *event_handlers2.AllowDependency - DependsOnPrivateLayer *event_handlers2.DependsOnPrivateLayer - DependsOnInternalToken *event_handlers2.DependsOnInternalToken - DependsOnDisallowedLayer *event_handlers2.DependsOnDisallowedLayer - MatchingLayersHandler *event_handlers2.MatchingLayers - UncoveredDependentHandler *event_handlers2.UncoveredDependent - UnmatchedSkippedViolations *event_handlers2.UnmatchedSkippedViolations - ConsoleSubscriber *event_handlers2.Console - ProgressSubscriber *event_handlers2.Progress - VerboseBoolFlag *bool - DebugBoolFlag *bool - Style *formatters2.Style - SymfonyOutput *services3.SymfonyOutput - TimeStopwatch *stopwatch.Stopwatch - AstMapExtractor *ast_map2.AstMapExtractor - InheritanceFlattener *services2.InheritanceFlattener - DependencyResolver *services2.DependencyResolver - TokenResolver *services2.TokenResolver - CollectorResolver *collectors_resolvers.CollectorResolver - LayerResolver layers_resolvers.LayerResolverInterface - NikicPhpParser *parsers2.NikicPhpParser - CollectorProvider *services2.CollectorProvider - DependencyLayersAnalyser *analysers2.DependencyLayersAnalyser - TokenInLayerAnalyser *analysers2.TokenInLayerAnalyser - LayerForTokenAnalyser *analysers2.LayerForTokenAnalyser - UnassignedTokenAnalyser *analysers2.UnassignedTokenAnalyser - LayerDependenciesAnalyser *analysers2.LayerDependenciesAnalyser - RulesetUsageAnalyser *analysers2.RulesetUsageAnalyser - FormatterProvider *formatters2.FormatterProvider - FormatterConfiguration *formatters2.FormatterConfiguration - AnalyseRunner *AnalyseRunner - AnalyseCommand *commands.AnalyseCommand - NodeNamer *services.NodeNamer - AnalyseOptions *options.AnalyseOptions -} - -func NewContainerBuilder(workingDirectory string) *ContainerBuilder { - return &ContainerBuilder{} -} diff --git a/pkg/infrastructure/commands/analyse_command.go b/pkg/infrastructure/commands/analyse_command.go index b4479ac..0321d47 100644 --- a/pkg/infrastructure/commands/analyse_command.go +++ b/pkg/infrastructure/commands/analyse_command.go @@ -1,27 +1,27 @@ package commands import ( - event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" - formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" ) // AnalyseCommand - Analyses your project using the provided depfile type AnalyseCommand struct { - runner *app.AnalyseRunner + runner *runners.AnalyseRunner dispatcher dispatchers.EventDispatcherInterface - formatterProvider *formatters2.FormatterProvider + formatterProvider *formatters.FormatterProvider verboseBoolFlag bool debugBoolFlag bool - consoleSubscriber *event_handlers2.Console - progressSubscriber *event_handlers2.Progress + consoleSubscriber *event_handlers.Console + progressSubscriber *event_handlers.Progress analyseOptions *options.AnalyseOptions } -func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters2.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers2.Console, progressSubscriber *event_handlers2.Progress, analyseOptions *options.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, analyseOptions *options.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, @@ -35,7 +35,7 @@ func NewAnalyseCommand(runner *app.AnalyseRunner, dispatcher dispatchers.EventDi } func (c *AnalyseCommand) Run() error { - symfonyOutput := services.NewSymfonyOutput(formatters2.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) + symfonyOutput := services.NewSymfonyOutput(formatters.NewStyle(c.verboseBoolFlag, c.debugBoolFlag)) // Moved to services //event_subscriber_interface_map_reg.RegForAnalyseCommand(c.consoleSubscriber, c.progressSubscriber, !options.NoProgress) diff --git a/pkg/infrastructure/commands/changed_files_command.go b/pkg/infrastructure/commands/changed_files_command.go index 4d5162e..070f234 100644 --- a/pkg/infrastructure/commands/changed_files_command.go +++ b/pkg/infrastructure/commands/changed_files_command.go @@ -1,15 +1,15 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" "github.com/spf13/cobra" ) type ChangedFilesCommand struct { - runner *app.ChangedFilesRunner + runner *runners.ChangedFilesRunner } const ( @@ -17,7 +17,7 @@ const ( argFiles = "files" ) -func NewChangedFilesCommand(runner *app.ChangedFilesRunner) *cobra.Command { +func NewChangedFilesCommand(runner *runners.ChangedFilesRunner) *cobra.Command { cmd := &ChangedFilesCommand{runner: runner} cobraCmd := &cobra.Command{ diff --git a/pkg/infrastructure/app/cache.go b/pkg/infrastructure/di/cache.go similarity index 80% rename from pkg/infrastructure/app/cache.go rename to pkg/infrastructure/di/cache.go index bff1df9..16fd911 100644 --- a/pkg/infrastructure/app/cache.go +++ b/pkg/infrastructure/di/cache.go @@ -1,12 +1,13 @@ -package app +package di import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" ) func Cache(builder *ContainerBuilder) { - builder.AstFileReferenceFileCache = ast_file_reference_cache.NewAstFileReferenceFileCache(*builder.CacheFile, Version) + builder.AstFileReferenceFileCache = ast_file_reference_cache.NewAstFileReferenceFileCache(*builder.CacheFile, app.Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache builder.CacheableFileSubscriber = event_handlers.NewCacheableFile(builder.AstFileReferenceDeferredCacheInterface) diff --git a/pkg/infrastructure/di/container_builder.go b/pkg/infrastructure/di/container_builder.go new file mode 100644 index 0000000..bcac22c --- /dev/null +++ b/pkg/infrastructure/di/container_builder.go @@ -0,0 +1,84 @@ +package di + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + applicationServices "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" + "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" + "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" +) + +type ContainerBuilder struct { + ProjectDirectory string + CacheFile *string + Configuration *configs.DeptracConfig + EventDispatcher dispatchers.EventDispatcherInterface + FileInputCollector input_collectors.InputCollector + YmlFileLoader *services.YmlFileLoader + Dumper *utils.Dumper + AstLoader *ast_map.AstLoader + AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache + AstFileReferenceDeferredCacheInterface ast_file_reference_cache.AstFileReferenceDeferredCacheInterface + AstFileReferenceCacheInterface ast_file_reference_cache.AstFileReferenceCacheInterface + CacheableFileSubscriber *event_handlers.CacheableFile + AstFileReferenceInMemoryCache *ast_file_reference_cache.AstFileReferenceInMemoryCache + TypeResolver *types.TypeResolver + ReferenceExtractors []extractors.ReferenceExtractorInterface + ParserInterface parsers.ParserInterface + LayerProvider *applicationServices.LayerProvider + EventHelper *dispatchers.EventHelper + AllowDependencyHandler *event_handlers.AllowDependency + DependsOnPrivateLayer *event_handlers.DependsOnPrivateLayer + DependsOnInternalToken *event_handlers.DependsOnInternalToken + DependsOnDisallowedLayer *event_handlers.DependsOnDisallowedLayer + MatchingLayersHandler *event_handlers.MatchingLayers + UncoveredDependentHandler *event_handlers.UncoveredDependent + UnmatchedSkippedViolations *event_handlers.UnmatchedSkippedViolations + ConsoleSubscriber *event_handlers.Console + ProgressSubscriber *event_handlers.Progress + VerboseBoolFlag *bool + DebugBoolFlag *bool + Style *formatters.Style + SymfonyOutput *services.SymfonyOutput + TimeStopwatch *stopwatch.Stopwatch + AstMapExtractor *ast_map.AstMapExtractor + InheritanceFlattener *applicationServices.InheritanceFlattener + DependencyResolver *applicationServices.DependencyResolver + TokenResolver *applicationServices.TokenResolver + CollectorResolver *collectors_resolvers.CollectorResolver + LayerResolver layers_resolvers.LayerResolverInterface + NikicPhpParser *parsers.NikicPhpParser + CollectorProvider *applicationServices.CollectorProvider + DependencyLayersAnalyser *analysers.DependencyLayersAnalyser + TokenInLayerAnalyser *analysers.TokenInLayerAnalyser + LayerForTokenAnalyser *analysers.LayerForTokenAnalyser + UnassignedTokenAnalyser *analysers.UnassignedTokenAnalyser + LayerDependenciesAnalyser *analysers.LayerDependenciesAnalyser + RulesetUsageAnalyser *analysers.RulesetUsageAnalyser + FormatterProvider *formatters.FormatterProvider + FormatterConfiguration *formatters.FormatterConfiguration + AnalyseRunner *runners.AnalyseRunner + AnalyseCommand *commands.AnalyseCommand + NodeNamer *domainServices.NodeNamer + AnalyseOptions *options.AnalyseOptions +} + +func NewContainerBuilder(workingDirectory string) *ContainerBuilder { + return &ContainerBuilder{} +} diff --git a/pkg/infrastructure/app/service_container_builder.go b/pkg/infrastructure/di/service_container_builder.go similarity index 99% rename from pkg/infrastructure/app/service_container_builder.go rename to pkg/infrastructure/di/service_container_builder.go index 373335a..f233613 100644 --- a/pkg/infrastructure/app/service_container_builder.go +++ b/pkg/infrastructure/di/service_container_builder.go @@ -1,4 +1,4 @@ -package app +package di import ( "fmt" diff --git a/pkg/infrastructure/app/services.go b/pkg/infrastructure/di/services.go similarity index 58% rename from pkg/infrastructure/app/services.go rename to pkg/infrastructure/di/services.go index 0b65dcc..71bcc11 100644 --- a/pkg/infrastructure/app/services.go +++ b/pkg/infrastructure/di/services.go @@ -1,13 +1,13 @@ -package app +package di import ( "flag" "fmt" - event_handlers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" - analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + applicationServices "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - ast_map2 "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" @@ -17,25 +17,26 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - events2 "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/domain/services" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/events" + domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" - services3 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - dispatchers2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" - formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/elliotchance/orderedmap/v2" "os" "strings" ) -func getDefaultFormatter() enums2.OutputFormatterType { +func getDefaultFormatter() enums.OutputFormatterType { if os.Getenv("GITHUB_ACTIONS") != "" { - return formatters2.NewGithubActionsOutputFormatter().GetName() + return formatters.NewGithubActionsOutputFormatter().GetName() } - return formatters2.NewTableOutputFormatter().GetName() + return formatters.NewTableOutputFormatter().GetName() } func Services(builder *ContainerBuilder) error { @@ -45,20 +46,20 @@ func Services(builder *ContainerBuilder) error { projectDirectory := builder.ProjectDirectory verboseBoolFlag := flag.Bool("verbose", true, "Verbose mode") debugBoolFlag := flag.Bool("debug", false, "Debug mode") - style := formatters2.NewStyle( + style := formatters.NewStyle( verboseBoolFlag != nil && *verboseBoolFlag == true, debugBoolFlag != nil && *debugBoolFlag == true, ) - symfonyOutput := services3.NewSymfonyOutput(style) + symfonyOutput := services.NewSymfonyOutput(style) timeStopwatch := stopwatch.NewStopwatch() - nodeNamer := services.NewNodeNamer(projectDirectory) + nodeNamer := domainServices.NewNodeNamer(projectDirectory) /* * Utilities */ - eventDispatcher := dispatchers2.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + eventDispatcher := dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) fileInputCollector, err := input_collectors.NewFileInputCollector( builderConfiguration.Paths, @@ -69,7 +70,7 @@ func Services(builder *ContainerBuilder) error { return err } - ymlFileLoader := services3.NewYmlFileLoader() + ymlFileLoader := services.NewYmlFileLoader() dumper := utils.NewDumper("/deptrac_template.yaml") /* @@ -98,28 +99,28 @@ func Services(builder *ContainerBuilder) error { } nikicPhpParser := parsers.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser - astLoader := ast_map2.NewAstLoader(parserInterface, eventDispatcher) + astLoader := ast_map.NewAstLoader(parserInterface, eventDispatcher) /* * Dependency */ - dependencyEmitters := map[enums2.EmitterType]emitters.DependencyEmitterInterface{ - enums2.EmitterTypeClassToken: emitters.NewClassDependencyEmitter(), - enums2.EmitterTypeClassSuperGlobalToken: emitters.NewClassSuperglobalDependencyEmitter(), - enums2.EmitterTypeFileToken: emitters.NewFileDependencyEmitter(), - enums2.EmitterTypeFunctionToken: emitters.NewFunctionDependencyEmitter(), - enums2.EmitterTypeFunctionCall: emitters.NewFunctionCallDependencyEmitter(), - enums2.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), - enums2.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), + dependencyEmitters := map[enums.EmitterType]emitters.DependencyEmitterInterface{ + enums.EmitterTypeClassToken: emitters.NewClassDependencyEmitter(), + enums.EmitterTypeClassSuperGlobalToken: emitters.NewClassSuperglobalDependencyEmitter(), + enums.EmitterTypeFileToken: emitters.NewFileDependencyEmitter(), + enums.EmitterTypeFunctionToken: emitters.NewFunctionDependencyEmitter(), + enums.EmitterTypeFunctionCall: emitters.NewFunctionCallDependencyEmitter(), + enums.EmitterTypeFunctionSuperGlobalToken: emitters.NewFunctionSuperglobalDependencyEmitter(), + enums.EmitterTypeUseToken: emitters.NewUsesDependencyEmitter(), } - inheritanceFlattener := services2.NewInheritanceFlattener() - dependencyResolver := services2.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) - tokenResolver := services2.NewTokenResolver() + inheritanceFlattener := applicationServices.NewInheritanceFlattener() + dependencyResolver := applicationServices.NewDependencyResolver(builderConfiguration.Analyser, dependencyEmitters, inheritanceFlattener, eventDispatcher) + tokenResolver := applicationServices.NewTokenResolver() - astMapExtractor := ast_map2.NewAstMapExtractor(fileInputCollector, astLoader) + astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) - layerProvider := services2.NewLayerProvider(builderConfiguration.Rulesets) - eventHelper := dispatchers2.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) + layerProvider := applicationServices.NewLayerProvider(builderConfiguration.Rulesets) + eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* * Events (before first possible event) @@ -127,43 +128,43 @@ func Services(builder *ContainerBuilder) error { /* * Events */ - event_handlers2.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []event_handlers2.EventHandlerInterface]]() + event_handlers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []event_handlers.EventHandlerInterface]]() // Events - uncoveredDependentHandler := event_handlers2.NewUncoveredDependent(builderConfiguration.IgnoreUncoveredInternalStructs) - matchingLayersHandler := event_handlers2.NewMatchingLayers() - allowDependencyHandler := event_handlers2.NewAllowDependency() - consoleSubscriber := event_handlers2.NewConsole(symfonyOutput, timeStopwatch) - progressSubscriber := event_handlers2.NewProgress(symfonyOutput) - dependsOnDisallowedLayer := event_handlers2.NewDependsOnDisallowedLayer(eventHelper) - dependsOnPrivateLayer := event_handlers2.NewDependsOnPrivateLayer(eventHelper) - dependsOnInternalToken := event_handlers2.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) - unmatchedSkippedViolations := event_handlers2.NewUnmatchedSkippedViolations(eventHelper) + uncoveredDependentHandler := event_handlers.NewUncoveredDependent(builderConfiguration.IgnoreUncoveredInternalStructs) + matchingLayersHandler := event_handlers.NewMatchingLayers() + allowDependencyHandler := event_handlers.NewAllowDependency() + consoleSubscriber := event_handlers.NewConsole(symfonyOutput, timeStopwatch) + progressSubscriber := event_handlers.NewProgress(symfonyOutput) + dependsOnDisallowedLayer := event_handlers.NewDependsOnDisallowedLayer(eventHelper) + dependsOnPrivateLayer := event_handlers.NewDependsOnPrivateLayer(eventHelper) + dependsOnInternalToken := event_handlers.NewDependsOnInternalToken(eventHelper, builderConfiguration.Analyser) + unmatchedSkippedViolations := event_handlers.NewUnmatchedSkippedViolations(eventHelper) - processEvent := &events2.ProcessEvent{} - postProcessEvent := &events2.PostProcessEvent{} - preCreateAstMapEvent := &events2.PreCreateAstMapEvent{} - postCreateAstMapEvent := &events2.PostCreateAstMapEvent{} + processEvent := &events.ProcessEvent{} + postProcessEvent := &events.PostProcessEvent{} + preCreateAstMapEvent := &events.PreCreateAstMapEvent{} + postCreateAstMapEvent := &events.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" - event_handlers2.Reg(processEvent, allowDependencyHandler, -100) - event_handlers2.Reg(processEvent, dependsOnPrivateLayer, -3) - event_handlers2.Reg(processEvent, dependsOnInternalToken, -2) - event_handlers2.Reg(processEvent, dependsOnDisallowedLayer, -1) - event_handlers2.Reg(processEvent, matchingLayersHandler, 1) - event_handlers2.Reg(processEvent, uncoveredDependentHandler, 2) - event_handlers2.Reg(postProcessEvent, unmatchedSkippedViolations, event_handlers2.DefaultPriority) + event_handlers.Reg(processEvent, allowDependencyHandler, -100) + event_handlers.Reg(processEvent, dependsOnPrivateLayer, -3) + event_handlers.Reg(processEvent, dependsOnInternalToken, -2) + event_handlers.Reg(processEvent, dependsOnDisallowedLayer, -1) + event_handlers.Reg(processEvent, matchingLayersHandler, 1) + event_handlers.Reg(processEvent, uncoveredDependentHandler, 2) + event_handlers.Reg(postProcessEvent, unmatchedSkippedViolations, event_handlers.DefaultPriority) if cacheableFileSubscriber != nil { - event_handlers2.Reg(preCreateAstMapEvent, cacheableFileSubscriber, event_handlers2.DefaultPriority) - event_handlers2.Reg(postCreateAstMapEvent, cacheableFileSubscriber, event_handlers2.DefaultPriority) + event_handlers.Reg(preCreateAstMapEvent, cacheableFileSubscriber, event_handlers.DefaultPriority) + event_handlers.Reg(postCreateAstMapEvent, cacheableFileSubscriber, event_handlers.DefaultPriority) } /* * OutputFormatter */ - outputFormatter := map[enums2.OutputFormatterType]formatters2.OutputFormatterInterface{ - enums2.Table: formatters2.NewTableOutputFormatter(), - enums2.GithubActions: formatters2.NewGithubActionsOutputFormatter(), + outputFormatter := map[enums.OutputFormatterType]formatters.OutputFormatterInterface{ + enums.Table: formatters.NewTableOutputFormatter(), + enums.GithubActions: formatters.NewGithubActionsOutputFormatter(), // TODO: // $services->set(ConsoleOutputFormatter::class)->tag('output_formatter_contract'); // $services->set(JUnitOutputFormatter::class)->tag('output_formatter_contract'); @@ -177,8 +178,8 @@ func Services(builder *ContainerBuilder) error { // $services->set(CodeclimateOutputFormatter::class)->tag('output_formatter_contract'); // $services->set(MermaidJSOutputFormatter::class)->tag('output_formatter_contract'); } - formatterProvider := formatters2.NewFormatterProvider(outputFormatter) - formatterConfiguration := formatters2.NewFormatterConfiguration(builderConfiguration.Formatters) + formatterProvider := formatters.NewFormatterProvider(outputFormatter) + formatterConfiguration := formatters.NewFormatterConfiguration(builderConfiguration.Formatters) // knownFormattersStr := make([]string, 0) @@ -188,7 +189,7 @@ func Services(builder *ContainerBuilder) error { var ( formatterUsagePossible = strings.Join(knownFormattersStr, ", ") formatterUsage = fmt.Sprintf("Format in which to print the result_contract of the analysis. Possible: [\"%s\"]", formatterUsagePossible) - formatter = flag.String("formatter", string(enums2.Table), formatterUsage) + formatter = flag.String("formatter", string(enums.Table), formatterUsage) output = flag.String("output", "", "Output file_supportive path for formatter (if applicable)") noProgress = flag.Bool("no-progress", false, "Do not show progress bar") reportSkipped = flag.Bool("report-skipped", false, "Report skipped violations") @@ -209,7 +210,7 @@ func Services(builder *ContainerBuilder) error { nil != reportUncovered && *reportUncovered == true, nil != failOnUncovered && *failOnUncovered == true, ) - event_handlers2.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + event_handlers.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) // /* @@ -227,48 +228,48 @@ func Services(builder *ContainerBuilder) error { if err != nil { return err } - collectorProvider := services2.NewCollectorProvider() + collectorProvider := applicationServices.NewCollectorProvider() collectorResolver := collectors_resolvers.NewCollectorResolver(collectorProvider) layerResolver := layers_resolvers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[enums2.CollectorType]dependencies_collectors.CollectorInterface{ + collectors := map[enums.CollectorType]dependencies_collectors.CollectorInterface{ //AttributeCollector - enums2.CollectorTypeTypeBool: dependencies_collectors.NewBoolCollector(collectorResolver), - enums2.CollectorTypeTypeClass: dependencies_collectors.NewClassCollector(), - enums2.CollectorTypeTypeClasslike: dependencies_collectors.NewClassLikeCollector(), - enums2.CollectorTypeTypeClassNameRegex: dependencies_collectors.NewClassNameRegexCollector(), + enums.CollectorTypeTypeBool: dependencies_collectors.NewBoolCollector(collectorResolver), + enums.CollectorTypeTypeClass: dependencies_collectors.NewClassCollector(), + enums.CollectorTypeTypeClasslike: dependencies_collectors.NewClassLikeCollector(), + enums.CollectorTypeTypeClassNameRegex: dependencies_collectors.NewClassNameRegexCollector(), //CollectorType.TypeTagValueRegex: TagValueRegexCollector.NewTagValueRegexCollector(), - enums2.CollectorTypeTypeDirectory: dependencies_collectors.NewDirectoryCollector(), + enums.CollectorTypeTypeDirectory: dependencies_collectors.NewDirectoryCollector(), //CollectorType.TypeExtends: ExtendsCollector.NewExtendsCollector(collectorResolver), - enums2.CollectorTypeTypeFunctionName: dependencies_collectors.NewFunctionNameCollector(), - enums2.CollectorTypeTypeGlob: dependencies_collectors.NewGlobCollector(projectDirectory), + enums.CollectorTypeTypeFunctionName: dependencies_collectors.NewFunctionNameCollector(), + enums.CollectorTypeTypeGlob: dependencies_collectors.NewGlobCollector(projectDirectory), //ImplementsCollector - enums2.CollectorTypeTypeInheritance: inheritanceLevelCollector, - enums2.CollectorTypeTypeInterface: dependencies_collectors.NewInterfaceCollector(), - enums2.CollectorTypeTypeInherits: inheritsCollector, - enums2.CollectorTypeTypeLayer: dependencies_collectors.NewLayerCollector(layerResolver), - enums2.CollectorTypeTypeMethod: dependencies_collectors.NewMethodCollector(nikicPhpParser), - enums2.CollectorTypeTypeSuperGlobal: dependencies_collectors.NewSuperglobalCollector(), - enums2.CollectorTypeTypeTrait: dependencies_collectors.NewTraitCollector(), - enums2.CollectorTypeTypeUses: usesCollector, + enums.CollectorTypeTypeInheritance: inheritanceLevelCollector, + enums.CollectorTypeTypeInterface: dependencies_collectors.NewInterfaceCollector(), + enums.CollectorTypeTypeInherits: inheritsCollector, + enums.CollectorTypeTypeLayer: dependencies_collectors.NewLayerCollector(layerResolver), + enums.CollectorTypeTypeMethod: dependencies_collectors.NewMethodCollector(nikicPhpParser), + enums.CollectorTypeTypeSuperGlobal: dependencies_collectors.NewSuperglobalCollector(), + enums.CollectorTypeTypeTrait: dependencies_collectors.NewTraitCollector(), + enums.CollectorTypeTypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector - enums2.CollectorTypeTypeComposer: dependencies_collectors.NewComposerCollector(), + enums.CollectorTypeTypeComposer: dependencies_collectors.NewComposerCollector(), } collectorProvider.Set(collectors) /* * SetAnalyser */ - dependencyLayersAnalyser := analysers2.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) - tokenInLayerAnalyser := analysers2.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerForTokenAnalyser := analysers2.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) - unassignedTokenAnalyser := analysers2.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) - layerDependenciesAnalyser := analysers2.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) - rulesetUsageAnalyser := analysers2.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) + dependencyLayersAnalyser := analysers.NewDependencyLayersAnalyser(astMapExtractor, dependencyResolver, tokenResolver, layerResolver, eventDispatcher) + tokenInLayerAnalyser := analysers.NewTokenInLayerAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerForTokenAnalyser := analysers.NewLayerForTokenAnalyser(astMapExtractor, tokenResolver, layerResolver) + unassignedTokenAnalyser := analysers.NewUnassignedTokenAnalyser(astMapExtractor, tokenResolver, layerResolver, builderConfiguration.Analyser) + layerDependenciesAnalyser := analysers.NewLayerDependenciesAnalyser(astMapExtractor, tokenResolver, dependencyResolver, layerResolver) + rulesetUsageAnalyser := analysers.NewRulesetUsageAnalyser(layerProvider, layerResolver, astMapExtractor, dependencyResolver, tokenResolver, builderConfiguration.Layers) /* * Console */ - analyseRunner := NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + analyseRunner := runners.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) analyseCommand := commands.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) // TODO: other commands diff --git a/pkg/infrastructure/app/test_container_provider.go b/pkg/infrastructure/di/test_container_provider.go similarity index 80% rename from pkg/infrastructure/app/test_container_provider.go rename to pkg/infrastructure/di/test_container_provider.go index 244a054..d77afcf 100644 --- a/pkg/infrastructure/app/test_container_provider.go +++ b/pkg/infrastructure/di/test_container_provider.go @@ -1,13 +1,14 @@ -package app +package di import ( + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "os" "reflect" ) var currentWorkingDirectory, _ = os.Getwd() -var TestConfigFile = currentWorkingDirectory + DirectorySeparator + "deptrac.yaml" +var TestConfigFile = currentWorkingDirectory + app.DirectorySeparator + "deptrac.yaml" func UseVoidConfig() { TestConfigFile = "resources/deptrac-empty.yaml" diff --git a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go b/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go index fb09c1e..b6ec59d 100644 --- a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go +++ b/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go @@ -2,7 +2,7 @@ package dispatchers import ( "fmt" - subscribers2 "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "reflect" "slices" ) @@ -20,7 +20,7 @@ func NewEventDispatcher(isDebug bool) EventDispatcherInterface { func (d *EventDispatcher) DispatchEvent(event interface{}) error { typeName := reflect.TypeOf(event).String() - subscribers, ok := subscribers2.Map.Get(typeName) + handlers, ok := event_handlers.Map.Get(typeName) if !ok { return nil // No subscribers registered for this event @@ -31,14 +31,14 @@ func (d *EventDispatcher) DispatchEvent(event interface{}) error { stop = true } - subscribersPriorities := subscribers.Keys() + subscribersPriorities := handlers.Keys() // Sort high to low priority slices.Sort(subscribersPriorities) slices.Reverse(subscribersPriorities) for _, priority := range subscribersPriorities { - subscribersByPriority, okGet := subscribers.Get(priority) + subscribersByPriority, okGet := handlers.Get(priority) if !okGet { continue } diff --git a/pkg/infrastructure/services/dispatchers/event_helper.go b/pkg/infrastructure/services/dispatchers/event_helper.go index 9a68285..669cd4b 100644 --- a/pkg/infrastructure/services/dispatchers/event_helper.go +++ b/pkg/infrastructure/services/dispatchers/event_helper.go @@ -3,7 +3,7 @@ package dispatchers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" - violations2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" ) @@ -54,10 +54,10 @@ func (e *EventHelper) UnmatchedSkippedViolations() map[string][]string { return e.UnmatchedSkippedViolation } -func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *results.AnalysisResult, dependentLayer string, violationCreatingRule violations2.ViolationCreatingInterface) { +func (e *EventHelper) AddSkippableViolation(event *events.ProcessEvent, analysisResult *results.AnalysisResult, dependentLayer string, violationCreatingRule violations_rules.ViolationCreatingInterface) { if e.shouldViolationBeSkipped(event.Dependency.GetDepender().ToString(), event.Dependency.GetDependent().ToString()) { - analysisResult.AddRule(violations2.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) + analysisResult.AddRule(violations_rules.NewSkippedViolation(event.Dependency, event.DependerLayer, dependentLayer)) } else { - analysisResult.AddRule(violations2.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) + analysisResult.AddRule(violations_rules.NewViolation(event.Dependency, event.DependerLayer, dependentLayer, violationCreatingRule)) } } diff --git a/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go index b642a6f..f45827b 100644 --- a/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go +++ b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go @@ -4,20 +4,20 @@ import ( "crypto/sha1" "encoding/json" "fmt" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" ) type CodeclimateOutputFormatter struct { - config map[enums2.SeverityType]interface{} + config map[enums.SeverityType]interface{} } func NewCodeclimateOutputFormatter(config FormatterConfiguration) *CodeclimateOutputFormatter { - extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[enums2.SeverityType]interface{}) + extractedConfig := config.GetConfigFor("codeclimate").(interface{}).(map[enums.SeverityType]interface{}) return &CodeclimateOutputFormatter{config: extractedConfig} } @@ -25,27 +25,27 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { - formatterConfig := enums2.NewConfigurationCodeclimateFromArray(f.config) - var violations []map[string]interface{} +func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { + formatterConfig := enums.NewConfigurationCodeclimateFromArray(f.config) + var violationsList []map[string]interface{} if input.ReportSkipped { - for _, rule := range outputResult.AllOf(enums2.TypeSkippedViolation) { - f.addSkipped(&violations, rule.(*violations.SkippedViolation), formatterConfig) + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { + f.addSkipped(&violationsList, rule.(*violations_rules.SkippedViolation), formatterConfig) } } if input.ReportUncovered { - for _, rule := range outputResult.AllOf(enums2.TypeUncovered) { - f.addUncovered(&violations, rule.(*violations.Uncovered), formatterConfig) + for _, rule := range outputResult.AllOf(enums.TypeUncovered) { + f.addUncovered(&violationsList, rule.(*violations_rules.Uncovered), formatterConfig) } } - for _, rule := range outputResult.AllOf(enums2.TypeViolation) { - f.addFailure(&violations, rule.(*violations.Violation), formatterConfig) + for _, rule := range outputResult.AllOf(enums.TypeViolation) { + f.addFailure(&violationsList, rule.(*violations_rules.Violation), formatterConfig) } - jsonData, err := json.MarshalIndent(violations, "", " ") + jsonData, err := json.MarshalIndent(violationsList, "", " ") if err != nil { return fmt.Errorf("unable to render codeclimate output: %v", err) } @@ -63,7 +63,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results2.OutputResult, return nil } -func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *violations_rules.Violation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addFailure(violations *[]map[string]interface{}, violation *violations_rules.Violation, config *enums.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getFailureMessage(violation), config.GetSeverity("failure"))) } @@ -72,7 +72,7 @@ func (f *CodeclimateOutputFormatter) getFailureMessage(violation *violations_rul return utils.AsPtr(fmt.Sprintf("%s must not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *violations_rules.SkippedViolation, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addSkipped(violations *[]map[string]interface{}, violation *violations_rules.SkippedViolation, config *enums.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getWarningMessage(violation), config.GetSeverity("skipped"))) } @@ -81,7 +81,7 @@ func (f *CodeclimateOutputFormatter) getWarningMessage(violation *violations_rul return utils.AsPtr(fmt.Sprintf("%s should not depend on %s (%s on %s)", dependency.GetDepender(), dependency.GetDependent(), violation.GetDependerLayer(), violation.GetDependentLayer())) } -func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *violations_rules.Uncovered, config *enums2.ConfigurationCodeclimate) { +func (f *CodeclimateOutputFormatter) addUncovered(violations *[]map[string]interface{}, violation *violations_rules.Uncovered, config *enums.ConfigurationCodeclimate) { *violations = append(*violations, f.buildRuleArray(violation, f.getUncoveredMessage(violation), config.GetSeverity("uncovered"))) } diff --git a/pkg/infrastructure/services/formatters/console_output_formatter.go b/pkg/infrastructure/services/formatters/console_output_formatter.go index afcd5e0..83aa454 100644 --- a/pkg/infrastructure/services/formatters/console_output_formatter.go +++ b/pkg/infrastructure/services/formatters/console_output_formatter.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -21,7 +21,7 @@ func (f *ConsoleOutputFormatter) GetName() string { return "console_supportive" } -func (f *ConsoleOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) { +func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { f.printViolation(rule.(*violations_rules.Violation), output) } @@ -91,7 +91,7 @@ func (f *ConsoleOutputFormatter) printMultilinePath(output services.OutputInterf output.WriteLineFormatted(services.StringOrArrayOfStrings{String: buffer.String()}) } -func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, output services.OutputInterface) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -109,7 +109,7 @@ func (f *ConsoleOutputFormatter) printSummary(result results2.OutputResult, outp output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) } -func (f *ConsoleOutputFormatter) printUncovered(result results2.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, output services.OutputInterface) { uncovered := result.Uncovered() if len(uncovered) == 0 { return @@ -139,14 +139,14 @@ func (f *ConsoleOutputFormatter) printFileOccurrence(output services.OutputInter output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } -func (f *ConsoleOutputFormatter) printErrors(result results2.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printErrors(result results.OutputResult, output services.OutputInterface) { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) for _, err := range result.Errors { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) } } -func (f *ConsoleOutputFormatter) printWarnings(result results2.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printWarnings(result results.OutputResult, output services.OutputInterface) { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) for _, warning := range result.Warnings { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) diff --git a/pkg/infrastructure/services/formatters/github_actions_output_formatter.go b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go index d279d46..c037b72 100644 --- a/pkg/infrastructure/services/formatters/github_actions_output_formatter.go +++ b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go @@ -3,9 +3,9 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" - enums2 "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "strings" ) @@ -16,16 +16,16 @@ func NewGithubActionsOutputFormatter() *GithubActionsOutputFormatter { return &GithubActionsOutputFormatter{} } -func (g *GithubActionsOutputFormatter) GetName() enums2.OutputFormatterType { - return enums2.GithubActions +func (g *GithubActionsOutputFormatter) GetName() enums.OutputFormatterType { + return enums.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { - for _, rule := range outputResult.AllOf(enums2.TypeViolation) { +func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { + for _, rule := range outputResult.AllOf(enums.TypeViolation) { g.printViolation(rule, output) } if outputFormatterInput.ReportSkipped { - for _, rule := range outputResult.AllOf(enums2.TypeSkippedViolation) { + for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { g.printViolation(rule, output) } } @@ -53,7 +53,7 @@ func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.R } } -func (g *GithubActionsOutputFormatter) printUncovered(result *results2.OutputResult, output services.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResult, output services.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -86,13 +86,13 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.Dep return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *results2.OutputResult, output services.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *results.OutputResult, output services.OutputInterface) { for _, e := range result.Errors { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *results2.OutputResult, output services.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResult, output services.OutputInterface) { for _, warning := range result.Warnings { output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go index 527eec5..63c97b1 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/goccy/go-graphviz" @@ -21,7 +21,7 @@ func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFo return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) diff --git a/pkg/infrastructure/services/formatters/json_output_formatter.go b/pkg/infrastructure/services/formatters/json_output_formatter.go index 378df07..d515bf9 100644 --- a/pkg/infrastructure/services/formatters/json_output_formatter.go +++ b/pkg/infrastructure/services/formatters/json_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/json" "fmt" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -21,7 +21,7 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violations := make(map[string]FileViolations) diff --git a/pkg/infrastructure/services/formatters/junit_output_formatter.go b/pkg/infrastructure/services/formatters/junit_output_formatter.go index f716979..8830de0 100644 --- a/pkg/infrastructure/services/formatters/junit_output_formatter.go +++ b/pkg/infrastructure/services/formatters/junit_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/xml" "fmt" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -23,7 +23,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -42,7 +42,7 @@ func (f *JUnitOutputFormatter) Finish(result results2.OutputResult, output servi return nil } -func (f *JUnitOutputFormatter) createXML(outputResult results2.OutputResult) (string, error) { +func (f *JUnitOutputFormatter) createXML(outputResult results.OutputResult) (string, error) { testSuites := TestSuites{} if outputResult.HasErrors() { errorSuite := TestSuite{ @@ -126,7 +126,7 @@ func (f *JUnitOutputFormatter) createXML(outputResult results2.OutputResult) (st return xml.Header + string(xmlData), nil } -func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results2.OutputResult) map[string][]violations_rules.RuleInterface { +func (f *JUnitOutputFormatter) groupRulesByLayer(outputResult results.OutputResult) map[string][]violations_rules.RuleInterface { layers := make(map[string][]violations_rules.RuleInterface) for _, rule := range outputResult.AllRules() { switch r := rule.(type) { diff --git a/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go index d5a7b14..d362e6f 100644 --- a/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go +++ b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "strings" @@ -32,7 +32,7 @@ func (f *MermaidJSOutputFormatter) GetName() string { return "mermaidjs" } -func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *MermaidJSOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { graph := f.parseResults(result) violations := result.Violations() var buffer strings.Builder @@ -93,7 +93,7 @@ func (f *MermaidJSOutputFormatter) Finish(result results2.OutputResult, output s return nil } -func (f *MermaidJSOutputFormatter) parseResults(result results2.OutputResult) map[string]map[string]int { +func (f *MermaidJSOutputFormatter) parseResults(result results.OutputResult) map[string]map[string]int { graph := make(map[string]map[string]int) for _, rule := range result.Allowed() { dependerLayer := rule.GetDependerLayer() diff --git a/pkg/infrastructure/services/formatters/output_formatter_interface.go b/pkg/infrastructure/services/formatters/output_formatter_interface.go index c1ebf0e..f0ed621 100644 --- a/pkg/infrastructure/services/formatters/output_formatter_interface.go +++ b/pkg/infrastructure/services/formatters/output_formatter_interface.go @@ -1,7 +1,7 @@ package formatters import ( - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) @@ -11,5 +11,5 @@ type OutputFormatterInterface interface { GetName() enums.OutputFormatterType // Finish - Renders the final result_contract. - Finish(result *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error + Finish(result *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error } diff --git a/pkg/infrastructure/services/formatters/table_output_formatter.go b/pkg/infrastructure/services/formatters/table_output_formatter.go index 5f18c94..7e1eb33 100644 --- a/pkg/infrastructure/services/formatters/table_output_formatter.go +++ b/pkg/infrastructure/services/formatters/table_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -23,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { return enums.Table } -func (t *TableOutputFormatter) Finish(outputResult *results2.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { @@ -111,7 +111,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyIn return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *results2.OutputResult, output services.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output services.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -180,7 +180,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output services.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output services.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -190,7 +190,7 @@ func (t *TableOutputFormatter) printErrors(result *results2.OutputResult, output output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *results2.OutputResult, output services.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results.OutputResult, output services.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/infrastructure/services/formatters/xml_output_formatter.go b/pkg/infrastructure/services/formatters/xml_output_formatter.go index 02154e4..5259564 100644 --- a/pkg/infrastructure/services/formatters/xml_output_formatter.go +++ b/pkg/infrastructure/services/formatters/xml_output_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/xml" "fmt" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -23,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -42,7 +42,7 @@ func (f *XMLOutputFormatter) Finish(result results2.OutputResult, output service return nil } -func (f *XMLOutputFormatter) createXML(dependencyContext results2.OutputResult) (string, error) { +func (f *XMLOutputFormatter) createXML(dependencyContext results.OutputResult) (string, error) { entries := Entries{} for _, rule := range dependencyContext.Violations() { diff --git a/pkg/infrastructure/app/analyse_runner.go b/pkg/infrastructure/services/runners/analyse_runner.go similarity index 89% rename from pkg/infrastructure/app/analyse_runner.go rename to pkg/infrastructure/services/runners/analyse_runner.go index 1bf9f6c..adaf90c 100644 --- a/pkg/infrastructure/app/analyse_runner.go +++ b/pkg/infrastructure/services/runners/analyse_runner.go @@ -1,4 +1,4 @@ -package app +package runners import ( "encoding/json" @@ -6,10 +6,10 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - formatters2 "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/hashicorp/go-multierror" "strings" ) @@ -17,10 +17,10 @@ import ( // AnalyseRunner - Should only be used by AnalyseCommand type AnalyseRunner struct { analyzer *analysers.DependencyLayersAnalyser - formatterProvider *formatters2.FormatterProvider + formatterProvider *formatters.FormatterProvider } -func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterProvider *formatters2.FormatterProvider) *AnalyseRunner { +func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterProvider *formatters.FormatterProvider) *AnalyseRunner { return &AnalyseRunner{ analyzer: analyzer, formatterProvider: formatterProvider, @@ -37,7 +37,7 @@ func (r *AnalyseRunner) Run(options *options.AnalyseOptions, output services.Out r.printFormatterNotFoundException(output, options.Formatter) return apperrors.NewCommandRunExceptionInvalidFormatter() } - formatterInput := formatters2.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) + formatterInput := formatters.NewOutputFormatterInput(*options.Output, options.ReportSkipped, options.ReportUncovered, options.FailOnUncovered) r.printCollectViolations(output) analysisResult, errAnalyse := r.analyzer.Analyse() @@ -45,7 +45,7 @@ func (r *AnalyseRunner) Run(options *options.AnalyseOptions, output services.Out r.printAnalysisException(output, multierror.Append(errAnalyse)) return apperrors.NewCommandRunExceptionAnalyserException(errAnalyse) } - result := results2.NewOutputResultFromAnalysisResult(analysisResult) + result := results.NewOutputResultFromAnalysisResult(analysisResult) r.printFormattingStart(output) errFinish := formatter.Finish(result, output, formatterInput) if errFinish != nil { diff --git a/pkg/infrastructure/app/changed_files_runner.go b/pkg/infrastructure/services/runners/changed_files_runner.go similarity index 83% rename from pkg/infrastructure/app/changed_files_runner.go rename to pkg/infrastructure/services/runners/changed_files_runner.go index 71886ae..5b899de 100644 --- a/pkg/infrastructure/app/changed_files_runner.go +++ b/pkg/infrastructure/services/runners/changed_files_runner.go @@ -1,9 +1,9 @@ -package app +package runners import ( - analysers2 "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - results2 "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -13,11 +13,11 @@ import ( // ChangedFilesRunner - Should only be used by ChangedFilesCommand type ChangedFilesRunner struct { - layerForTokenAnalyser *analysers2.LayerForTokenAnalyser - dependencyLayersAnalyser *analysers2.DependencyLayersAnalyser + layerForTokenAnalyser *analysers.LayerForTokenAnalyser + dependencyLayersAnalyser *analysers.DependencyLayersAnalyser } -func NewChangedFilesRunner(layerForTokenAnalyser *analysers2.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers2.DependencyLayersAnalyser) *ChangedFilesRunner { +func NewChangedFilesRunner(layerForTokenAnalyser *analysers.LayerForTokenAnalyser, dependencyLayersAnalyser *analysers.DependencyLayersAnalyser) *ChangedFilesRunner { return &ChangedFilesRunner{ layerForTokenAnalyser: layerForTokenAnalyser, dependencyLayersAnalyser: dependencyLayersAnalyser, @@ -43,7 +43,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output s if err != nil { return apperrors.NewCommandRunExceptionAnalyserException(err) } - analysisResult := results2.NewOutputResultFromAnalysisResult(analyseResult) + analysisResult := results.NewOutputResultFromAnalysisResult(analyseResult) layersDependOnLayers := r.calculateLayerDependencies(analysisResult.AllRules()) layerDependencies := make(map[string]string) for _, layer := range layers { diff --git a/pkg/infrastructure/services/yml_file_loader.go b/pkg/infrastructure/services/yml_file_loader.go index 9160414..7569613 100644 --- a/pkg/infrastructure/services/yml_file_loader.go +++ b/pkg/infrastructure/services/yml_file_loader.go @@ -1,7 +1,7 @@ package services import ( - apperrors2 "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "gopkg.in/yaml.v3" ) @@ -22,7 +22,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { err := yaml.Unmarshal([]byte(file), &yamlMap) if err != nil { - return nil, apperrors2.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) + return nil, apperrors.NewFileCannotBeParsedAsYamlExceptionFromFilenameAndException(file, err) } _, ok1 := yamlMap["parameters"] @@ -30,7 +30,7 @@ func (y *YmlFileLoader) ParseFile(file string) (*ParseFileResult, error) { _, ok3 := yamlMap["imports"] if !ok1 || !ok2 || !ok3 { - return nil, apperrors2.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) + return nil, apperrors.NewParsedYamlIsNotAnArrayExceptionFromFilename(file) } result := &ParseFileResult{ From a9c2e9165c3212d8ce5290a725c27e5bf5c626fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 09:25:29 +0300 Subject: [PATCH 29/40] refactor: structure --- cmd/ttt/main.go | 14 +++--- go.mod | 2 + go.sum | 5 +++ .../analyse_options.go | 2 +- .../dtos/commands_options/init_options.go | 5 +++ pkg/domain/{utils => services}/dumper.go | 2 +- pkg/domain/utils/map.go | 9 ++++ .../app/DebugDependenciesRunner.php | 43 ------------------- pkg/infrastructure/app/application.go | 1 - pkg/infrastructure/commands/InitCommand.php | 41 ------------------ .../commands/analyse_command.go | 6 +-- pkg/infrastructure/commands/init_command.go | 32 ++++++++++++++ pkg/infrastructure/di/container_builder.go | 7 ++- pkg/infrastructure/di/services.go | 7 ++- .../services/analyse_options_hook.go | 8 ++-- .../runners}/DebugLayerRunner.php | 0 .../runners}/DebugTokenRunner.php | 0 .../runners}/DebugUnassignedRunner.php | 0 .../runners}/DebugUnusedRunner.php | 0 .../services/runners/analyse_runner.go | 4 +- .../runners/debug_dependencies_runner.go | 40 +++++++++++++++++ 21 files changed, 118 insertions(+), 110 deletions(-) rename pkg/domain/dtos/{options => commands_options}/analyse_options.go (95%) create mode 100644 pkg/domain/dtos/commands_options/init_options.go rename pkg/domain/{utils => services}/dumper.go (96%) create mode 100644 pkg/domain/utils/map.go delete mode 100644 pkg/infrastructure/app/DebugDependenciesRunner.php delete mode 100644 pkg/infrastructure/commands/InitCommand.php create mode 100644 pkg/infrastructure/commands/init_command.go rename pkg/infrastructure/{app => services/runners}/DebugLayerRunner.php (100%) rename pkg/infrastructure/{app => services/runners}/DebugTokenRunner.php (100%) rename pkg/infrastructure/{app => services/runners}/DebugUnassignedRunner.php (100%) rename pkg/infrastructure/{app => services/runners}/DebugUnusedRunner.php (100%) create mode 100644 pkg/infrastructure/services/runners/debug_dependencies_runner.go diff --git a/cmd/ttt/main.go b/cmd/ttt/main.go index 39b904a..a09ebfd 100644 --- a/cmd/ttt/main.go +++ b/cmd/ttt/main.go @@ -1,12 +1,14 @@ package main -import "fmt" - -type TTT struct { -} +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + "github.com/alexflint/go-arg" +) func main() { - t := &TTT{} + options := commands_options.InitOptions{} + arg.MustParse(&options) - fmt.Printf("%T\n", t) + fmt.Println(options) } diff --git a/go.mod b/go.mod index 98e8c53..1a859f7 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,8 @@ require ( ) require ( + github.com/alexflint/go-arg v1.5.1 // indirect + github.com/alexflint/go-scalar v1.2.0 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/charmbracelet/lipgloss v0.10.0 // indirect github.com/fogleman/gg v1.3.0 // indirect diff --git a/go.sum b/go.sum index 5fc3717..7c2c864 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,7 @@ +github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8Y= +github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8= +github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw= +github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s= @@ -60,6 +64,7 @@ github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3k github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= diff --git a/pkg/domain/dtos/options/analyse_options.go b/pkg/domain/dtos/commands_options/analyse_options.go similarity index 95% rename from pkg/domain/dtos/options/analyse_options.go rename to pkg/domain/dtos/commands_options/analyse_options.go index 8885be8..b371373 100644 --- a/pkg/domain/dtos/options/analyse_options.go +++ b/pkg/domain/dtos/commands_options/analyse_options.go @@ -1,4 +1,4 @@ -package options +package commands_options type AnalyseOptions struct { NoProgress bool diff --git a/pkg/domain/dtos/commands_options/init_options.go b/pkg/domain/dtos/commands_options/init_options.go new file mode 100644 index 0000000..d05606c --- /dev/null +++ b/pkg/domain/dtos/commands_options/init_options.go @@ -0,0 +1,5 @@ +package commands_options + +type InitOptions struct { + ConfigFile string `arg:"required"` +} diff --git a/pkg/domain/utils/dumper.go b/pkg/domain/services/dumper.go similarity index 96% rename from pkg/domain/utils/dumper.go rename to pkg/domain/services/dumper.go index b335a7f..a04009b 100644 --- a/pkg/domain/utils/dumper.go +++ b/pkg/domain/services/dumper.go @@ -1,4 +1,4 @@ -package utils +package services import ( "errors" diff --git a/pkg/domain/utils/map.go b/pkg/domain/utils/map.go new file mode 100644 index 0000000..28d5033 --- /dev/null +++ b/pkg/domain/utils/map.go @@ -0,0 +1,9 @@ +package utils + +func Map[T, V any](ts []T, fn func(T) V) []V { + result := make([]V, len(ts)) + for i, t := range ts { + result[i] = fn(t) + } + return result +} diff --git a/pkg/infrastructure/app/DebugDependenciesRunner.php b/pkg/infrastructure/app/DebugDependenciesRunner.php deleted file mode 100644 index 10c556b..0000000 --- a/pkg/infrastructure/app/DebugDependenciesRunner.php +++ /dev/null @@ -1,43 +0,0 @@ -analyser->getDependencies($layer, $target); - foreach ($dependencies as $targetLayer => $violations) { - $output->getStyle()->table([$targetLayer], \array_map(fn(Uncovered $violation): array => $this->formatRow($violation), $violations)); - } - } catch (AnalyserException $e) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - } - /** - * @return array - */ - private function formatRow(Uncovered $rule) : array - { - $dependency = $rule->getDependency(); - $message = \sprintf('%s depends on %s (%s)', $dependency->getDepender()->toString(), $dependency->getDependent()->toString(), $rule->layer); - $fileOccurrence = $dependency->getContext()->fileOccurrence; - $message .= \sprintf("\n%s:%d", $fileOccurrence->filepath, $fileOccurrence->line); - return [$message]; - } -} diff --git a/pkg/infrastructure/app/application.go b/pkg/infrastructure/app/application.go index f502c38..f9fe090 100644 --- a/pkg/infrastructure/app/application.go +++ b/pkg/infrastructure/app/application.go @@ -85,7 +85,6 @@ func (a *Application) doRun() (int, error) { currentWorkingDirectory+DirectorySeparator+"deptrac.yaml", "Location of Depfile containing the configuration", ) - flag.Parse() var ( diff --git a/pkg/infrastructure/commands/InitCommand.php b/pkg/infrastructure/commands/InitCommand.php deleted file mode 100644 index 08a0182..0000000 --- a/pkg/infrastructure/commands/InitCommand.php +++ /dev/null @@ -1,41 +0,0 @@ -setName('init'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - try { - /** @var string $targetFile */ - $targetFile = $input->getOption('config-file'); - $this->dumper->dump($targetFile); - $output->writeln('Depfile dumped.'); - return self::SUCCESS; - } catch (FileNotWritableException|FileAlreadyExistsException|IOException|FileNotExistsException $fileException) { - $output->writeln(sprintf('%s', $fileException->getMessage())); - return self::FAILURE; - } - } -} diff --git a/pkg/infrastructure/commands/analyse_command.go b/pkg/infrastructure/commands/analyse_command.go index 0321d47..50c1bdf 100644 --- a/pkg/infrastructure/commands/analyse_command.go +++ b/pkg/infrastructure/commands/analyse_command.go @@ -2,7 +2,7 @@ package commands import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" @@ -18,10 +18,10 @@ type AnalyseCommand struct { debugBoolFlag bool consoleSubscriber *event_handlers.Console progressSubscriber *event_handlers.Progress - analyseOptions *options.AnalyseOptions + analyseOptions *commands_options.AnalyseOptions } -func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, analyseOptions *options.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, analyseOptions *commands_options.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, diff --git a/pkg/infrastructure/commands/init_command.go b/pkg/infrastructure/commands/init_command.go new file mode 100644 index 0000000..57236f3 --- /dev/null +++ b/pkg/infrastructure/commands/init_command.go @@ -0,0 +1,32 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" + services "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" +) + +// InitCommand - init - Creates a depfile template +type InitCommand struct { + dumper *domainServices.Dumper + initOptions *commands_options.InitOptions +} + +func NewInitCommand(dumper *domainServices.Dumper, initOptions *commands_options.InitOptions) *InitCommand { + return &InitCommand{ + dumper: dumper, + initOptions: initOptions, + } +} + +func (c *InitCommand) Run(output services.OutputStyleInterface) error { + err := c.dumper.Dump(c.initOptions.ConfigFile) + if err != nil { + output.Error(services.StringOrArrayOfStrings{String: "Depfile dumping failed. error: " + err.Error()}) + return err + } + + output.Success(services.StringOrArrayOfStrings{String: "Depfile dumped."}) + + return nil +} diff --git a/pkg/infrastructure/di/container_builder.go b/pkg/infrastructure/di/container_builder.go index bcac22c..b8a338e 100644 --- a/pkg/infrastructure/di/container_builder.go +++ b/pkg/infrastructure/di/container_builder.go @@ -12,11 +12,10 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" @@ -31,7 +30,7 @@ type ContainerBuilder struct { EventDispatcher dispatchers.EventDispatcherInterface FileInputCollector input_collectors.InputCollector YmlFileLoader *services.YmlFileLoader - Dumper *utils.Dumper + Dumper *domainServices.Dumper AstLoader *ast_map.AstLoader AstFileReferenceFileCache *ast_file_reference_cache.AstFileReferenceFileCache AstFileReferenceDeferredCacheInterface ast_file_reference_cache.AstFileReferenceDeferredCacheInterface @@ -76,7 +75,7 @@ type ContainerBuilder struct { AnalyseRunner *runners.AnalyseRunner AnalyseCommand *commands.AnalyseCommand NodeNamer *domainServices.NodeNamer - AnalyseOptions *options.AnalyseOptions + AnalyseOptions *commands_options.AnalyseOptions } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/infrastructure/di/services.go b/pkg/infrastructure/di/services.go index 71bcc11..ba7d622 100644 --- a/pkg/infrastructure/di/services.go +++ b/pkg/infrastructure/di/services.go @@ -16,12 +16,11 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/events" domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/domain/utils" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" @@ -71,7 +70,7 @@ func Services(builder *ContainerBuilder) error { } ymlFileLoader := services.NewYmlFileLoader() - dumper := utils.NewDumper("/deptrac_template.yaml") + dumper := domainServices.NewDumper("/deptrac_template.yaml") /* * AST @@ -202,7 +201,7 @@ func Services(builder *ContainerBuilder) error { formatter = &formatterTmp } - analyseOptions := options.NewAnalyseOptions( + analyseOptions := commands_options.NewAnalyseOptions( nil != noProgress && *noProgress == true, *formatter, output, diff --git a/pkg/infrastructure/services/analyse_options_hook.go b/pkg/infrastructure/services/analyse_options_hook.go index bac35d6..0a629f1 100644 --- a/pkg/infrastructure/services/analyse_options_hook.go +++ b/pkg/infrastructure/services/analyse_options_hook.go @@ -2,12 +2,12 @@ package services import ( "flag" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" ) type analyseOptionsHook struct{} type AnalyseOptionsHook interface { - GetOptions() *options.AnalyseOptions + GetOptions() *commands_options.AnalyseOptions } func NewAnalyseOptionsHook() AnalyseOptionsHook { @@ -30,7 +30,7 @@ const ( OptionNoProgressUsage = "Do not show progress bar" ) -func (h *analyseOptionsHook) GetOptions() *options.AnalyseOptions { +func (h *analyseOptionsHook) GetOptions() *commands_options.AnalyseOptions { reportUncovered := flag.Bool(OptionReportUncovered, false, OptionReportUncoveredUsage) failOnUncovered := flag.Bool(OptionFailOnUncovered, false, OptionFailOnUncoveredUsage) @@ -39,7 +39,7 @@ func (h *analyseOptionsHook) GetOptions() *options.AnalyseOptions { output := flag.String(OptionOutput, "", OptionOutputUsage) noProgress := flag.Bool(OptionNoProgress, false, OptionNoProgressUsage) - return &options.AnalyseOptions{ + return &commands_options.AnalyseOptions{ ReportUncovered: *reportUncovered, FailOnUncovered: *failOnUncovered, ReportSkipped: *reportSkipped, diff --git a/pkg/infrastructure/app/DebugLayerRunner.php b/pkg/infrastructure/services/runners/DebugLayerRunner.php similarity index 100% rename from pkg/infrastructure/app/DebugLayerRunner.php rename to pkg/infrastructure/services/runners/DebugLayerRunner.php diff --git a/pkg/infrastructure/app/DebugTokenRunner.php b/pkg/infrastructure/services/runners/DebugTokenRunner.php similarity index 100% rename from pkg/infrastructure/app/DebugTokenRunner.php rename to pkg/infrastructure/services/runners/DebugTokenRunner.php diff --git a/pkg/infrastructure/app/DebugUnassignedRunner.php b/pkg/infrastructure/services/runners/DebugUnassignedRunner.php similarity index 100% rename from pkg/infrastructure/app/DebugUnassignedRunner.php rename to pkg/infrastructure/services/runners/DebugUnassignedRunner.php diff --git a/pkg/infrastructure/app/DebugUnusedRunner.php b/pkg/infrastructure/services/runners/DebugUnusedRunner.php similarity index 100% rename from pkg/infrastructure/app/DebugUnusedRunner.php rename to pkg/infrastructure/services/runners/DebugUnusedRunner.php diff --git a/pkg/infrastructure/services/runners/analyse_runner.go b/pkg/infrastructure/services/runners/analyse_runner.go index adaf90c..28d2928 100644 --- a/pkg/infrastructure/services/runners/analyse_runner.go +++ b/pkg/infrastructure/services/runners/analyse_runner.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/options" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" @@ -27,7 +27,7 @@ func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterPro } } -func (r *AnalyseRunner) Run(options *options.AnalyseOptions, output services.OutputInterface) error { +func (r *AnalyseRunner) Run(options *commands_options.AnalyseOptions, output services.OutputInterface) error { outputFormatterType, err := enums.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err diff --git a/pkg/infrastructure/services/runners/debug_dependencies_runner.go b/pkg/infrastructure/services/runners/debug_dependencies_runner.go new file mode 100644 index 0000000..07f8d9a --- /dev/null +++ b/pkg/infrastructure/services/runners/debug_dependencies_runner.go @@ -0,0 +1,40 @@ +package runners + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/gookit/color" +) + +type DebugDependenciesRunner struct { + analyser *analysers.LayerDependenciesAnalyser +} + +func NewDebugDependenciesRunner(analyser *analysers.LayerDependenciesAnalyser) *DebugDependenciesRunner { + return &DebugDependenciesRunner{analyser: analyser} +} + +func (d *DebugDependenciesRunner) Run(output services.OutputStyleInterface, layer string, target *string) error { + uncoveredMap, err := d.analyser.GetDependencies(layer, target) + if err != nil { + return apperrors.NewCommandRunExceptionAnalyserException(err) + } + + for targetLayer, violations := range uncoveredMap { + output.Table([]string{targetLayer}, utils.Map(violations, d.FormatRow)) + } + + return nil +} + +func (d *DebugDependenciesRunner) FormatRow(rule *violations_rules.Uncovered) []string { + dependency := rule.GetDependency() + message := color.Sprintf("%s depends on %s (%s)", dependency.GetDepender().ToString(), dependency.GetDependent().ToString(), rule.Layer) + fileOccurrence := dependency.GetContext().FileOccurrence + message += fmt.Sprintf("\n%s:%d", fileOccurrence.FilePath, fileOccurrence.Line) + return []string{message} +} From 98fda992dd36abae0ac80849c7752d054e7bf1d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 09:34:33 +0300 Subject: [PATCH 30/40] refactor: structure --- pkg/domain/utils/map.go | 12 +++++- .../services/runners/DebugLayerRunner.php | 35 ---------------- .../runners/debug_dependencies_runner.go | 2 +- .../services/runners/debug_layer_runner.go | 42 +++++++++++++++++++ 4 files changed, 54 insertions(+), 37 deletions(-) delete mode 100644 pkg/infrastructure/services/runners/DebugLayerRunner.php create mode 100644 pkg/infrastructure/services/runners/debug_layer_runner.go diff --git a/pkg/domain/utils/map.go b/pkg/domain/utils/map.go index 28d5033..038ae94 100644 --- a/pkg/domain/utils/map.go +++ b/pkg/domain/utils/map.go @@ -1,9 +1,19 @@ package utils -func Map[T, V any](ts []T, fn func(T) V) []V { +func MapSlice[T, V any](ts []T, fn func(T) V) []V { result := make([]V, len(ts)) for i, t := range ts { result[i] = fn(t) } return result } + +func Map[T1 comparable, T2, V any](ts map[T1]T2, fn func(T1, T2) V) []V { + result := make([]V, len(ts)) + i := 0 + for k, v := range ts { + result[i] = fn(k, v) + i++ + } + return result +} diff --git a/pkg/infrastructure/services/runners/DebugLayerRunner.php b/pkg/infrastructure/services/runners/DebugLayerRunner.php deleted file mode 100644 index b836d43..0000000 --- a/pkg/infrastructure/services/runners/DebugLayerRunner.php +++ /dev/null @@ -1,35 +0,0 @@ ->>}> $layers - */ - public function __construct(private readonly TokenInLayerAnalyser $analyser, private readonly array $layers) - { - } - /** - * @throws CommandRunException - */ - public function run(?string $layer, OutputInterface $output) : void - { - $debugLayers = $layer ? [$layer] : array_map(static fn(array $layer): string => $layer['name'], $this->layers); - try { - foreach ($debugLayers as $debugLayer) { - $output->getStyle()->table([$debugLayer, 'Token Type'], $this->analyser->findTokensInLayer($debugLayer)); - } - } catch (AnalyserException $e) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - } -} diff --git a/pkg/infrastructure/services/runners/debug_dependencies_runner.go b/pkg/infrastructure/services/runners/debug_dependencies_runner.go index 07f8d9a..87f4ee8 100644 --- a/pkg/infrastructure/services/runners/debug_dependencies_runner.go +++ b/pkg/infrastructure/services/runners/debug_dependencies_runner.go @@ -25,7 +25,7 @@ func (d *DebugDependenciesRunner) Run(output services.OutputStyleInterface, laye } for targetLayer, violations := range uncoveredMap { - output.Table([]string{targetLayer}, utils.Map(violations, d.FormatRow)) + output.Table([]string{targetLayer}, utils.MapSlice(violations, d.FormatRow)) } return nil diff --git a/pkg/infrastructure/services/runners/debug_layer_runner.go b/pkg/infrastructure/services/runners/debug_layer_runner.go new file mode 100644 index 0000000..a6a3e24 --- /dev/null +++ b/pkg/infrastructure/services/runners/debug_layer_runner.go @@ -0,0 +1,42 @@ +package runners + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" +) + +type DebugLayerRunner struct { + analyser *analysers.TokenInLayerAnalyser + layers []*rules.Layer +} + +func NewDebugLayerRunner(analyser *analysers.TokenInLayerAnalyser, layers []*rules.Layer) *DebugLayerRunner { + return &DebugLayerRunner{analyser: analyser, layers: layers} +} + +func (d *DebugLayerRunner) Run(output services.OutputStyleInterface, layer *string) error { + debugLayers := make([]string, 0) + + if layer != nil { + debugLayers = append(debugLayers, *layer) + } else { + debugLayers = utils.MapSlice(d.layers, func(layer *rules.Layer) string { return layer.Name }) + } + + for _, debugLayer := range debugLayers { + found, err := d.analyser.FindTokensInLayer(debugLayer) + if err != nil { + return apperrors.NewCommandRunExceptionAnalyserException(err) + } + + values := utils.Map(found, func(t1 string, t2 enums.TokenType) []string { return []string{t1, string(t2)} }) + + output.Table([]string{debugLayer, "Token Type"}, values) + } + + return nil +} From b4d857fb12a0e22576984a256a756b065b0490d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 14:24:21 +0300 Subject: [PATCH 31/40] refactor: structure --- .../debug_dependencies_options.go | 6 +++ .../commands_options/debug_layer_options.go | 5 +++ .../commands/DebugDependenciesCommand.php | 45 ------------------- .../commands/DebugLayerCommand.php | 40 ----------------- .../commands/debug_dependencies_command.go | 28 ++++++++++++ .../commands/debug_layer_command.go | 28 ++++++++++++ 6 files changed, 67 insertions(+), 85 deletions(-) create mode 100644 pkg/domain/dtos/commands_options/debug_dependencies_options.go create mode 100644 pkg/domain/dtos/commands_options/debug_layer_options.go delete mode 100644 pkg/infrastructure/commands/DebugDependenciesCommand.php delete mode 100644 pkg/infrastructure/commands/DebugLayerCommand.php create mode 100644 pkg/infrastructure/commands/debug_dependencies_command.go create mode 100644 pkg/infrastructure/commands/debug_layer_command.go diff --git a/pkg/domain/dtos/commands_options/debug_dependencies_options.go b/pkg/domain/dtos/commands_options/debug_dependencies_options.go new file mode 100644 index 0000000..fd702b4 --- /dev/null +++ b/pkg/domain/dtos/commands_options/debug_dependencies_options.go @@ -0,0 +1,6 @@ +package commands_options + +type DebugDependenciesOptions struct { + Layer string + TargetLayer *string +} diff --git a/pkg/domain/dtos/commands_options/debug_layer_options.go b/pkg/domain/dtos/commands_options/debug_layer_options.go new file mode 100644 index 0000000..947efdc --- /dev/null +++ b/pkg/domain/dtos/commands_options/debug_layer_options.go @@ -0,0 +1,5 @@ +package commands_options + +type DebugLayerOptions struct { + Layer *string +} diff --git a/pkg/infrastructure/commands/DebugDependenciesCommand.php b/pkg/infrastructure/commands/DebugDependenciesCommand.php deleted file mode 100644 index ba3c5a1..0000000 --- a/pkg/infrastructure/commands/DebugDependenciesCommand.php +++ /dev/null @@ -1,45 +0,0 @@ -addArgument('layer', InputArgument::REQUIRED, 'Layer to debug'); - /** @throws void */ - $this->addArgument('targetLayer', InputArgument::OPTIONAL, 'Target layer to filter dependencies to only one layer'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - $outputStyle = new Style(new SymfonyStyle($input, $output)); - $symfonyOutput = new SymfonyOutput($output, $outputStyle); - try { - /** @var ?string $target */ - $target = $input->getArgument('targetLayer'); - /** @var string $layer */ - $layer = $input->getArgument('layer'); - $this->runner->run($symfonyOutput, $layer, $target); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException $exception) { - $outputStyle->error($exception->getMessage()); - return self::FAILURE; - } - return self::SUCCESS; - } -} diff --git a/pkg/infrastructure/commands/DebugLayerCommand.php b/pkg/infrastructure/commands/DebugLayerCommand.php deleted file mode 100644 index a169c56..0000000 --- a/pkg/infrastructure/commands/DebugLayerCommand.php +++ /dev/null @@ -1,40 +0,0 @@ -addArgument('layer', InputArgument::OPTIONAL, 'Layer to debug'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - $outputStyle = new Style(new SymfonyStyle($input, $output)); - $symfonyOutput = new SymfonyOutput($output, $outputStyle); - /** @var ?string $layer */ - $layer = $input->getArgument('layer'); - try { - $this->runner->run($layer, $symfonyOutput); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException $exception) { - $outputStyle->error($exception->getMessage()); - return self::FAILURE; - } - return self::SUCCESS; - } -} diff --git a/pkg/infrastructure/commands/debug_dependencies_command.go b/pkg/infrastructure/commands/debug_dependencies_command.go new file mode 100644 index 0000000..b30680e --- /dev/null +++ b/pkg/infrastructure/commands/debug_dependencies_command.go @@ -0,0 +1,28 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" + "github.com/pkg/errors" +) + +// DebugDependenciesCommand - debug:dependencies - List layer dependencies +type DebugDependenciesCommand struct { + runner *runners.DebugDependenciesRunner + options *commands_options.DebugDependenciesOptions +} + +func NewDebugDependenciesCommand(debugDependenciesRunner *runners.DebugDependenciesRunner, options *commands_options.DebugDependenciesOptions) *DebugDependenciesCommand { + return &DebugDependenciesCommand{runner: debugDependenciesRunner, options: options} +} + +func (c *DebugDependenciesCommand) Run(output services.OutputStyleInterface) error { + err := c.runner.Run(output, c.options.Layer, c.options.TargetLayer) + if err != nil { + output.Error(services.StringOrArrayOfStrings{String: "Dependency debugging failed. error: " + err.Error()}) + return errors.WithStack(err) + } + + return nil +} diff --git a/pkg/infrastructure/commands/debug_layer_command.go b/pkg/infrastructure/commands/debug_layer_command.go new file mode 100644 index 0000000..6a85bd5 --- /dev/null +++ b/pkg/infrastructure/commands/debug_layer_command.go @@ -0,0 +1,28 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" + "github.com/pkg/errors" +) + +// DebugLayerCommand - debug:layer - Checks which tokens belong to the provided layer +type DebugLayerCommand struct { + runner *runners.DebugLayerRunner + options *commands_options.DebugLayerOptions +} + +func NewDebugLayerCommand(debugLayerRunner *runners.DebugLayerRunner, options *commands_options.DebugLayerOptions) *DebugLayerCommand { + return &DebugLayerCommand{runner: debugLayerRunner, options: options} +} + +func (c *DebugLayerCommand) Run(output services.OutputStyleInterface) error { + err := c.runner.Run(output, c.options.Layer) + if err != nil { + output.Error(services.StringOrArrayOfStrings{String: "Layer debugging failed. error: " + err.Error()}) + return errors.WithStack(err) + } + + return nil +} From 60c646d6fbf1c4c7e121098e28af2a353a1a8b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 14:55:02 +0300 Subject: [PATCH 32/40] refactor: structure --- .../commands_options/debug_token_options.go | 6 +++ .../commands_options/debug_unused_options.go | 5 ++ pkg/domain/enums/token_type.go | 15 ++++++ .../commands/DebugTokenCommand.php | 44 ---------------- .../commands/DebugUnassignedCommand.php | 33 ------------ .../commands/DebugUnusedCommand.php | 40 --------------- .../commands/debug_token_command.go | 34 +++++++++++++ .../commands/debug_unassigned_command.go | 32 ++++++++++++ .../commands/debug_unused_command.go | 28 ++++++++++ .../formatters/json_output_formatter.go | 14 ++--- .../services/runners/DebugTokenRunner.php | 41 --------------- .../runners/DebugUnassignedRunner.php | 36 ------------- .../services/runners/DebugUnusedRunner.php | 51 ------------------- .../services/runners/debug_token_runner.go | 43 ++++++++++++++++ .../runners/debug_unassigned_runner.go | 32 ++++++++++++ .../services/runners/debug_unused_runner.go | 43 ++++++++++++++++ 16 files changed, 245 insertions(+), 252 deletions(-) create mode 100644 pkg/domain/dtos/commands_options/debug_token_options.go create mode 100644 pkg/domain/dtos/commands_options/debug_unused_options.go delete mode 100644 pkg/infrastructure/commands/DebugTokenCommand.php delete mode 100644 pkg/infrastructure/commands/DebugUnassignedCommand.php delete mode 100644 pkg/infrastructure/commands/DebugUnusedCommand.php create mode 100644 pkg/infrastructure/commands/debug_token_command.go create mode 100644 pkg/infrastructure/commands/debug_unassigned_command.go create mode 100644 pkg/infrastructure/commands/debug_unused_command.go delete mode 100644 pkg/infrastructure/services/runners/DebugTokenRunner.php delete mode 100644 pkg/infrastructure/services/runners/DebugUnassignedRunner.php delete mode 100644 pkg/infrastructure/services/runners/DebugUnusedRunner.php create mode 100644 pkg/infrastructure/services/runners/debug_token_runner.go create mode 100644 pkg/infrastructure/services/runners/debug_unassigned_runner.go create mode 100644 pkg/infrastructure/services/runners/debug_unused_runner.go diff --git a/pkg/domain/dtos/commands_options/debug_token_options.go b/pkg/domain/dtos/commands_options/debug_token_options.go new file mode 100644 index 0000000..fc84eaa --- /dev/null +++ b/pkg/domain/dtos/commands_options/debug_token_options.go @@ -0,0 +1,6 @@ +package commands_options + +type DebugTokenOptions struct { + Token string + Type string +} diff --git a/pkg/domain/dtos/commands_options/debug_unused_options.go b/pkg/domain/dtos/commands_options/debug_unused_options.go new file mode 100644 index 0000000..bc935bc --- /dev/null +++ b/pkg/domain/dtos/commands_options/debug_unused_options.go @@ -0,0 +1,5 @@ +package commands_options + +type DebugUnusedOptions struct { + Limit int +} diff --git a/pkg/domain/enums/token_type.go b/pkg/domain/enums/token_type.go index b463d27..4001b6d 100644 --- a/pkg/domain/enums/token_type.go +++ b/pkg/domain/enums/token_type.go @@ -1,5 +1,7 @@ package enums +import "github.com/pkg/errors" + type TokenType string const ( @@ -8,6 +10,19 @@ const ( TokenTypeFile TokenType = "file_supportive" ) +func NewTokenType(s string) (TokenType, error) { + switch s { + case string(TokenTypeClassLike): + return TokenTypeClassLike, nil + case string(TokenTypeFunction): + return TokenTypeFunction, nil + case string(TokenTypeFile): + return TokenTypeFile, nil + default: + return "", errors.New("invalid token type string: " + s) + } +} + func NewTokenTypeTryFromEmitterType(emitterType EmitterType) *TokenType { if emitterType == EmitterTypeClassToken { classLikeTokenType := TokenTypeClassLike diff --git a/pkg/infrastructure/commands/DebugTokenCommand.php b/pkg/infrastructure/commands/DebugTokenCommand.php deleted file mode 100644 index 0777c10..0000000 --- a/pkg/infrastructure/commands/DebugTokenCommand.php +++ /dev/null @@ -1,44 +0,0 @@ -addArgument('token', InputArgument::REQUIRED, 'Full qualified token name to debug'); - $this->addArgument('type', InputArgument::OPTIONAL, 'Token type (class-like, function, file)', 'class-like'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - $outputStyle = new Style(new SymfonyStyle($input, $output)); - $symfonyOutput = new SymfonyOutput($output, $outputStyle); - /** @var string $tokenName */ - $tokenName = $input->getArgument('token'); - /** @var string $tokenType */ - $tokenType = $input->getArgument('type'); - try { - $this->runner->run($tokenName, TokenType::from($tokenType), $symfonyOutput); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException $exception) { - $outputStyle->error($exception->getMessage()); - return self::FAILURE; - } - return self::SUCCESS; - } -} diff --git a/pkg/infrastructure/commands/DebugUnassignedCommand.php b/pkg/infrastructure/commands/DebugUnassignedCommand.php deleted file mode 100644 index a62ca85..0000000 --- a/pkg/infrastructure/commands/DebugUnassignedCommand.php +++ /dev/null @@ -1,33 +0,0 @@ -runner->run($symfonyOutput); - return $result ? self::EXIT_WITH_UNASSIGNED_TOKENS : self::SUCCESS; - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException $exception) { - $outputStyle->error($exception->getMessage()); - return self::FAILURE; - } - } -} diff --git a/pkg/infrastructure/commands/DebugUnusedCommand.php b/pkg/infrastructure/commands/DebugUnusedCommand.php deleted file mode 100644 index 04fe82f..0000000 --- a/pkg/infrastructure/commands/DebugUnusedCommand.php +++ /dev/null @@ -1,40 +0,0 @@ -addOption('limit', 'l', InputOption::VALUE_OPTIONAL, 'How many times can it be used to be considered unused', 0); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - $outputStyle = new Style(new SymfonyStyle($input, $output)); - $symfonyOutput = new SymfonyOutput($output, $outputStyle); - try { - /** @var string $limit */ - $limit = $input->getOption('limit'); - $this->runner->run($symfonyOutput, (int) $limit); - } catch (\Qossmic\Deptrac\Supportive\Console\Command\CommandRunException $exception) { - $outputStyle->error($exception->getMessage()); - return self::FAILURE; - } - return self::SUCCESS; - } -} diff --git a/pkg/infrastructure/commands/debug_token_command.go b/pkg/infrastructure/commands/debug_token_command.go new file mode 100644 index 0000000..9038c37 --- /dev/null +++ b/pkg/infrastructure/commands/debug_token_command.go @@ -0,0 +1,34 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" + "github.com/pkg/errors" +) + +// DebugTokenCommand - debug:token|debug:class-like - Checks which layers the provided token belongs to +type DebugTokenCommand struct { + runner *runners.DebugTokenRunner + options *commands_options.DebugTokenOptions +} + +func NewDebugTokenCommand(runner *runners.DebugTokenRunner, options *commands_options.DebugTokenOptions) *DebugTokenCommand { + return &DebugTokenCommand{runner: runner, options: options} +} + +func (c *DebugTokenCommand) Run(output services.OutputInterface) error { + tokenType, err := enums.NewTokenType(c.options.Type) + if err != nil { + return err + } + + err = c.runner.Run(output, c.options.Token, tokenType) + if err != nil { + output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Token debugging failed. error: " + err.Error()}) + return errors.WithStack(err) + } + + return nil +} diff --git a/pkg/infrastructure/commands/debug_unassigned_command.go b/pkg/infrastructure/commands/debug_unassigned_command.go new file mode 100644 index 0000000..67157d0 --- /dev/null +++ b/pkg/infrastructure/commands/debug_unassigned_command.go @@ -0,0 +1,32 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" + "github.com/pkg/errors" +) + +// DebugUnassignedCommand - debug:unassigned - Lists tokens that are not assigned to any layer +type DebugUnassignedCommand struct { + runner *runners.DebugUnassignedRunner +} + +func NewDebugUnassignedCommand(runner *runners.DebugUnassignedRunner) *DebugUnassignedCommand { + return &DebugUnassignedCommand{runner: runner} +} + +func (c *DebugUnassignedCommand) Run(output services.OutputInterface) error { + result, err := c.runner.Run(output) + if err != nil { + output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Unassigned token debugging failed. error: " + err.Error()}) + return errors.WithStack(err) + } + + if result { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "There are unassigned tokens."}) + + return errors.New("There are unassigned tokens.") + } + + return nil +} diff --git a/pkg/infrastructure/commands/debug_unused_command.go b/pkg/infrastructure/commands/debug_unused_command.go new file mode 100644 index 0000000..74067b0 --- /dev/null +++ b/pkg/infrastructure/commands/debug_unused_command.go @@ -0,0 +1,28 @@ +package commands + +import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" + "github.com/pkg/errors" +) + +// DebugUnusedCommand - debug:unused - Lists unused (or barely used) layer dependencies +type DebugUnusedCommand struct { + runner *runners.DebugUnusedRunner + options *commands_options.DebugUnusedOptions +} + +func NewDebugUnusedCommand(runner *runners.DebugUnusedRunner, options *commands_options.DebugUnusedOptions) *DebugUnusedCommand { + return &DebugUnusedCommand{runner: runner, options: options} +} + +func (c *DebugUnusedCommand) Run(output services.OutputInterface) error { + err := c.runner.Run(output, c.options.Limit) + if err != nil { + output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Dependency debugging failed. error: " + err.Error()}) + return errors.WithStack(err) + } + + return nil +} diff --git a/pkg/infrastructure/services/formatters/json_output_formatter.go b/pkg/infrastructure/services/formatters/json_output_formatter.go index d515bf9..0cda3cb 100644 --- a/pkg/infrastructure/services/formatters/json_output_formatter.go +++ b/pkg/infrastructure/services/formatters/json_output_formatter.go @@ -23,20 +23,20 @@ func (f *JsonOutputFormatter) GetName() string { func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) - violations := make(map[string]FileViolations) + violationsList := make(map[string]FileViolations) if input.ReportSkipped { for _, rule := range outputResult.AllOf(enums.TypeSkippedViolation) { - f.addSkipped(violations, rule.(*violations.SkippedViolation)) + f.addSkipped(violationsList, rule.(*violations_rules.SkippedViolation)) } } if input.ReportUncovered { for _, rule := range outputResult.AllOf(enums.TypeUncovered) { - f.addUncovered(violations, rule.(*violations.Uncovered)) + f.addUncovered(violationsList, rule.(*violations_rules.Uncovered)) } } for _, rule := range outputResult.AllOf(enums.TypeViolation) { - f.addFailure(violations, rule.(*violations.Violation)) + f.addFailure(violationsList, rule.(*violations_rules.Violation)) } // Add report summary to jsonArray @@ -50,12 +50,12 @@ func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output s } // Add violation count to each file_supportive - for fileName, fileViolation := range violations { + for fileName, fileViolation := range violationsList { fileViolation.Violations = len(fileViolation.Messages) - violations[fileName] = fileViolation + violationsList[fileName] = fileViolation } - jsonArray["files"] = violations + jsonArray["files"] = violationsList jsonData, err := json.MarshalIndent(jsonArray, "", " ") if err != nil { diff --git a/pkg/infrastructure/services/runners/DebugTokenRunner.php b/pkg/infrastructure/services/runners/DebugTokenRunner.php deleted file mode 100644 index d9b4bae..0000000 --- a/pkg/infrastructure/services/runners/DebugTokenRunner.php +++ /dev/null @@ -1,41 +0,0 @@ -analyser->findLayerForToken($tokenName, $tokenType); - } catch (AnalyserException $e) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - if ([] === $matches) { - $output->writeLineFormatted(sprintf('Could not find a token matching "%s"', $tokenName)); - return; - } - $headers = ['matching token', 'layers']; - $rows = []; - foreach ($matches as $token => $layers) { - $rows[] = [$token, [] !== $layers ? implode(', ', $layers) : '---']; - } - $output->getStyle()->table($headers, $rows); - } -} diff --git a/pkg/infrastructure/services/runners/DebugUnassignedRunner.php b/pkg/infrastructure/services/runners/DebugUnassignedRunner.php deleted file mode 100644 index dd15ddc..0000000 --- a/pkg/infrastructure/services/runners/DebugUnassignedRunner.php +++ /dev/null @@ -1,36 +0,0 @@ -analyser->findUnassignedTokens(); - } catch (AnalyserException $e) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - if ([] === $unassignedTokens) { - $output->writeLineFormatted('There are no unassigned tokens.'); - return \false; - } - $output->writeLineFormatted($unassignedTokens); - return \true; - } -} diff --git a/pkg/infrastructure/services/runners/DebugUnusedRunner.php b/pkg/infrastructure/services/runners/DebugUnusedRunner.php deleted file mode 100644 index ae09f0f..0000000 --- a/pkg/infrastructure/services/runners/DebugUnusedRunner.php +++ /dev/null @@ -1,51 +0,0 @@ -analyser->analyse(); - $outputTable = $this->prepareOutputTable($rulesetUsages, $limit); - $output->getStyle()->table(['Unused'], $outputTable); - } catch (AnalyserException $e) { - throw \Qossmic\Deptrac\Supportive\Console\Command\CommandRunException::analyserException($e); - } - } - /** - * @param array> $layerNames - * - * @return array - */ - private function prepareOutputTable(array $layerNames, int $limit) : array - { - $rows = []; - foreach ($layerNames as $dependerLayerName => $dependentLayerNames) { - foreach ($dependentLayerNames as $dependentLayerName => $numberOfDependencies) { - if ($numberOfDependencies <= $limit) { - if (0 === $numberOfDependencies) { - $rows[] = ["{$dependerLayerName} layer is not dependent on {$dependentLayerName}"]; - } else { - $rows[] = ["{$dependerLayerName} layer is dependent {$dependentLayerName} layer {$numberOfDependencies} times"]; - } - } - } - } - return $rows; - } -} diff --git a/pkg/infrastructure/services/runners/debug_token_runner.go b/pkg/infrastructure/services/runners/debug_token_runner.go new file mode 100644 index 0000000..f3980ca --- /dev/null +++ b/pkg/infrastructure/services/runners/debug_token_runner.go @@ -0,0 +1,43 @@ +package runners + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" +) + +type DebugTokenRunner struct { + analyser *analysers.LayerForTokenAnalyser +} + +func NewDebugTokenRunner(analyser *analysers.LayerForTokenAnalyser) *DebugTokenRunner { + return &DebugTokenRunner{analyser: analyser} +} + +func (r *DebugTokenRunner) Run(output services.OutputInterface, tokenName string, tokenType enums.TokenType) error { + matches, err := r.analyser.FindLayerForToken(tokenName, tokenType) + if err != nil { + return apperrors.NewCommandRunExceptionAnalyserException(err) + } + + if len(matches) == 0 { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Could not find a token matching \"%s\"", tokenName)}) + return nil + } + + headers := []string{"matching token", "layers"} + rows := make([][]string, 0) + for token, layers := range matches { + layersJoined := "---" + + if len(layers) > 0 { + layersJoined = fmt.Sprintf("%s", layers) + } + + rows = append(rows, []string{token, layersJoined}) + } + output.GetStyle().Table(headers, rows) + return nil +} diff --git a/pkg/infrastructure/services/runners/debug_unassigned_runner.go b/pkg/infrastructure/services/runners/debug_unassigned_runner.go new file mode 100644 index 0000000..beea2e4 --- /dev/null +++ b/pkg/infrastructure/services/runners/debug_unassigned_runner.go @@ -0,0 +1,32 @@ +package runners + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" +) + +type DebugUnassignedRunner struct { + analyser *analysers.UnassignedTokenAnalyser +} + +func NewDebugUnassignedRunner(analyser *analysers.UnassignedTokenAnalyser) *DebugUnassignedRunner { + return &DebugUnassignedRunner{analyser: analyser} +} + +// Run - returns are there any unassigned tokens? +func (d *DebugUnassignedRunner) Run(output services.OutputInterface) (bool, error) { + unassignedTokens, err := d.analyser.FindUnassignedTokens() + if err != nil { + return false, apperrors.NewCommandRunExceptionAnalyserException(err) + } + + if len(unassignedTokens) == 0 { + output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "There are no unassigned tokens."}) + return false, nil + } + + output.WriteLineFormatted(services.StringOrArrayOfStrings{Strings: unassignedTokens}) + + return true, err +} diff --git a/pkg/infrastructure/services/runners/debug_unused_runner.go b/pkg/infrastructure/services/runners/debug_unused_runner.go new file mode 100644 index 0000000..4434046 --- /dev/null +++ b/pkg/infrastructure/services/runners/debug_unused_runner.go @@ -0,0 +1,43 @@ +package runners + +import ( + "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" + "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" +) + +type DebugUnusedRunner struct { + analyser *analysers.RulesetUsageAnalyser +} + +func NewDebugUnusedRunner(analyser *analysers.RulesetUsageAnalyser) *DebugUnusedRunner { + return &DebugUnusedRunner{analyser: analyser} +} + +func (r *DebugUnusedRunner) Run(output services.OutputInterface, limit int) error { + rulesetUsages, err := r.analyser.Analyse() + if err != nil { + return apperrors.NewCommandRunExceptionAnalyserException(err) + } + + outputTable := r.prepareOutputTable(rulesetUsages, limit) + output.GetStyle().Table([]string{"Unused"}, outputTable) + return nil +} + +func (r *DebugUnusedRunner) prepareOutputTable(layerNames map[string]map[string]int, limit int) [][]string { + rows := make([][]string, 0) + for dependerLayerName, dependentLayerNames := range layerNames { + for dependentLayerName, numberOfDependencies := range dependentLayerNames { + if numberOfDependencies <= limit { + if numberOfDependencies == 0 { + rows = append(rows, []string{fmt.Sprintf("%s layer is not dependent on %s", dependerLayerName, dependentLayerName)}) + } else { + rows = append(rows, []string{fmt.Sprintf("%s layer is dependent %s layer %d times", dependerLayerName, dependentLayerName, numberOfDependencies)}) + } + } + } + } + return rows +} From 9463b0407427baf601c07af794788f96aae09800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 17:31:51 +0300 Subject: [PATCH 33/40] refactor: structure --- .../superglobal_collector.go | 40 ---------------- .../extractors/AnonymousClassExtractor.php | 30 ------------ .../extractors/ClassConstantExtractor.php | 20 -------- .../extractors/FunctionCallResolver.php | 23 --------- .../extractors/FunctionLikeExtractor.php | 41 ---------------- .../services/extractors/KeywordExtractor.php | 46 ------------------ .../services/extractors/PropertyExtractor.php | 34 -------------- .../services/extractors/StaticExtractor.php | 31 ------------ .../services/extractors/VariableExtractor.php | 26 ---------- .../extractors/function_call_resolver.go | 27 +++++++++++ .../extractors/function_like_extractor.go | 47 +++++++++++++++++++ .../services/extractors/keyword_extractor.go | 24 ++++++++++ .../services/extractors/property_extractor.go | 33 +++++++++++++ .../file_reference_visitor.go | 2 +- .../references_builders/reference_builder.go | 6 --- pkg/application/services/token_resolver.go | 3 -- pkg/application/services/types/type_scope.go | 7 +++ .../apperrors/circular_reference_exception.go | 29 +----------- .../collectors_configs/super_global_config.go | 32 ------------- .../tokens_references/variable_reference.go | 22 --------- pkg/domain/enums/collector_type.go | 2 - pkg/domain/enums/super_global_token.go | 37 --------------- pkg/infrastructure/di/services.go | 19 ++------ 23 files changed, 144 insertions(+), 437 deletions(-) delete mode 100644 pkg/application/services/dependencies_collectors/superglobal_collector.go delete mode 100644 pkg/application/services/extractors/AnonymousClassExtractor.php delete mode 100644 pkg/application/services/extractors/ClassConstantExtractor.php delete mode 100644 pkg/application/services/extractors/FunctionCallResolver.php delete mode 100644 pkg/application/services/extractors/FunctionLikeExtractor.php delete mode 100644 pkg/application/services/extractors/KeywordExtractor.php delete mode 100644 pkg/application/services/extractors/PropertyExtractor.php delete mode 100644 pkg/application/services/extractors/StaticExtractor.php delete mode 100644 pkg/application/services/extractors/VariableExtractor.php create mode 100644 pkg/application/services/extractors/function_call_resolver.go create mode 100644 pkg/application/services/extractors/function_like_extractor.go create mode 100644 pkg/application/services/extractors/keyword_extractor.go create mode 100644 pkg/application/services/extractors/property_extractor.go delete mode 100644 pkg/domain/dtos/collectors_configs/super_global_config.go delete mode 100644 pkg/domain/dtos/tokens_references/variable_reference.go delete mode 100644 pkg/domain/enums/super_global_token.go diff --git a/pkg/application/services/dependencies_collectors/superglobal_collector.go b/pkg/application/services/dependencies_collectors/superglobal_collector.go deleted file mode 100644 index 2b229fc..0000000 --- a/pkg/application/services/dependencies_collectors/superglobal_collector.go +++ /dev/null @@ -1,40 +0,0 @@ -package dependencies_collectors - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/domain/utils" -) - -type SuperglobalCollector struct{} - -func NewSuperglobalCollector() *SuperglobalCollector { - return &SuperglobalCollector{} -} - -func (c SuperglobalCollector) Satisfy(config map[string]interface{}, reference tokens_references.TokenReferenceInterface) (bool, error) { - if _, ok := reference.(*tokens_references.VariableReference); !ok { - return false, nil - } - - names, err := c.getNames(config) - if err != nil { - return false, err - } - - for _, name := range names { - if reference.GetToken().ToString() == name { - return true, nil - } - } - - return false, nil -} - -func (c SuperglobalCollector) getNames(config map[string]interface{}) ([]string, error) { - if !utils.MapKeyExists(config, "value") || !utils.MapKeyIsArrayOfStrings(config, "value") { - return nil, apperrors.NewInvalidCollectorDefinitionInvalidCollectorConfiguration("SuperglobalCollector needs the names configuration.") - } - - return config["value"].([]string), nil -} diff --git a/pkg/application/services/extractors/AnonymousClassExtractor.php b/pkg/application/services/extractors/AnonymousClassExtractor.php deleted file mode 100644 index 9509a57..0000000 --- a/pkg/application/services/extractors/AnonymousClassExtractor.php +++ /dev/null @@ -1,30 +0,0 @@ -name) { - return; - } - if ($node->extends instanceof Name) { - $referenceBuilder->anonymousClassExtends($node->extends->toCodeString(), $node->extends->getLine()); - } - foreach ($node->implements as $implement) { - $referenceBuilder->anonymousClassImplements($implement->toCodeString(), $implement->getLine()); - } - foreach ($node->getTraitUses() as $traitUse) { - foreach ($traitUse->traits as $trait) { - $referenceBuilder->anonymousClassTrait($trait->toCodeString(), $trait->getLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/ClassConstantExtractor.php b/pkg/application/services/extractors/ClassConstantExtractor.php deleted file mode 100644 index 1274819..0000000 --- a/pkg/application/services/extractors/ClassConstantExtractor.php +++ /dev/null @@ -1,20 +0,0 @@ -class instanceof Name || $node->class->isSpecialClassName()) { - return; - } - $referenceBuilder->constFetch($node->class->toCodeString(), $node->class->getLine()); - } -} diff --git a/pkg/application/services/extractors/FunctionCallResolver.php b/pkg/application/services/extractors/FunctionCallResolver.php deleted file mode 100644 index 8495e3b..0000000 --- a/pkg/application/services/extractors/FunctionCallResolver.php +++ /dev/null @@ -1,23 +0,0 @@ -typeResolver->resolvePHPParserTypes($typeScope, $node->name) as $functionName) { - $referenceBuilder->unresolvedFunctionCall($functionName, $node->getLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/FunctionLikeExtractor.php b/pkg/application/services/extractors/FunctionLikeExtractor.php deleted file mode 100644 index 8ccfa69..0000000 --- a/pkg/application/services/extractors/FunctionLikeExtractor.php +++ /dev/null @@ -1,41 +0,0 @@ -getAttrGroups() as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $attribute->name) as $classLikeName) { - $referenceBuilder->attribute($classLikeName, $attribute->getLine()); - } - } - } - foreach ($node->getParams() as $param) { - if (null !== $param->type) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $param->type) as $classLikeName) { - $referenceBuilder->parameter($classLikeName, $param->type->getLine()); - } - } - } - $returnType = $node->getReturnType(); - if (null !== $returnType) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $returnType) as $classLikeName) { - $referenceBuilder->returnType($classLikeName, $returnType->getLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/KeywordExtractor.php b/pkg/application/services/extractors/KeywordExtractor.php deleted file mode 100644 index bd041a6..0000000 --- a/pkg/application/services/extractors/KeywordExtractor.php +++ /dev/null @@ -1,46 +0,0 @@ -typeResolver->resolvePHPParserTypes($typeScope, ...$node->traits) as $classLikeName) { - $referenceBuilder->trait($classLikeName, $node->getLine()); - } - return; - } - if ($node instanceof Instanceof_ && $node->class instanceof Name) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $node->class) as $classLikeName) { - $referenceBuilder->instanceof($classLikeName, $node->class->getLine()); - } - return; - } - if ($node instanceof New_ && $node->class instanceof Name) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $node->class) as $classLikeName) { - $referenceBuilder->newStatement($classLikeName, $node->class->getLine()); - } - return; - } - if ($node instanceof Catch_) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, ...$node->types) as $classLikeName) { - $referenceBuilder->catchStmt($classLikeName, $node->getLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/PropertyExtractor.php b/pkg/application/services/extractors/PropertyExtractor.php deleted file mode 100644 index 543fa1f..0000000 --- a/pkg/application/services/extractors/PropertyExtractor.php +++ /dev/null @@ -1,34 +0,0 @@ -attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $attribute->name) as $classLikeName) { - $referenceBuilder->attribute($classLikeName, $attribute->getLine()); - } - } - } - if (null !== $node->type) { - foreach ($this->typeResolver->resolvePropertyType($node->type) as $type) { - $referenceBuilder->variable($type, $node->type->getStartLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/StaticExtractor.php b/pkg/application/services/extractors/StaticExtractor.php deleted file mode 100644 index 4ce4a3b..0000000 --- a/pkg/application/services/extractors/StaticExtractor.php +++ /dev/null @@ -1,31 +0,0 @@ -class instanceof Name) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $node->class) as $classLikeName) { - $referenceBuilder->staticProperty($classLikeName, $node->class->getLine()); - } - } - if ($node instanceof StaticCall && $node->class instanceof Name) { - foreach ($this->typeResolver->resolvePHPParserTypes($typeScope, $node->class) as $classLikeName) { - $referenceBuilder->staticMethod($classLikeName, $node->class->getLine()); - } - } - } -} diff --git a/pkg/application/services/extractors/VariableExtractor.php b/pkg/application/services/extractors/VariableExtractor.php deleted file mode 100644 index 5cb4164..0000000 --- a/pkg/application/services/extractors/VariableExtractor.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - private array $allowedNames; - public function __construct() - { - $this->allowedNames = SuperGlobalToken::allowedNames(); - } - public function processNode(Node $node, ReferenceBuilder $referenceBuilder, TypeScope $typeScope) : void - { - if ($node instanceof Node\Expr\Variable && \in_array($node->name, $this->allowedNames, \true)) { - $referenceBuilder->superglobal($node->name, $node->getLine()); - } - } -} diff --git a/pkg/application/services/extractors/function_call_resolver.go b/pkg/application/services/extractors/function_call_resolver.go new file mode 100644 index 0000000..494f5c1 --- /dev/null +++ b/pkg/application/services/extractors/function_call_resolver.go @@ -0,0 +1,27 @@ +package extractors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "go/ast" +) + +type FunctionCallResolver struct { + typeResolver *types.TypeResolver +} + +func NewFunctionCallResolver(typeResolver *types.TypeResolver) *FunctionCallResolver { + return &FunctionCallResolver{typeResolver: typeResolver} +} + +func (e *FunctionCallResolver) ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) { + typedNode, ok := node.(*ast.CallExpr) + if !ok { + return + } + + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, typedNode.Fun) { + referenceBuilder.UnresolvedFunctionCall(classLikeName, utils.GetLineByPosition(typeScope.FilePath, int(typedNode.Fun.Pos()))) + } +} diff --git a/pkg/application/services/extractors/function_like_extractor.go b/pkg/application/services/extractors/function_like_extractor.go new file mode 100644 index 0000000..576fc5c --- /dev/null +++ b/pkg/application/services/extractors/function_like_extractor.go @@ -0,0 +1,47 @@ +package extractors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "go/ast" +) + +type FunctionLikeExtractor struct { + typeResolver *types.TypeResolver +} + +func NewFunctionLikeExtractor(typeResolver *types.TypeResolver) *FunctionLikeExtractor { + return &FunctionLikeExtractor{typeResolver: typeResolver} +} + +func (e *FunctionLikeExtractor) ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) { + typedNode, ok := node.(*ast.FuncType) + if !ok { + return + } + + for _, field := range typedNode.Params.List { + if nil == field.Type { + continue + } + + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, field.Type) { + pos := int(field.Type.Pos()) + + referenceBuilder.Parameter(classLikeName, utils.GetLineByPosition(typeScope.FilePath, pos)) + } + } + + for _, returnType := range typedNode.Results.List { + if nil == returnType.Type { + continue + } + + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, returnType.Type) { + pos := int(returnType.Type.Pos()) + + referenceBuilder.ReturnType(classLikeName, utils.GetLineByPosition(typeScope.FilePath, pos)) + } + } +} diff --git a/pkg/application/services/extractors/keyword_extractor.go b/pkg/application/services/extractors/keyword_extractor.go new file mode 100644 index 0000000..536d34b --- /dev/null +++ b/pkg/application/services/extractors/keyword_extractor.go @@ -0,0 +1,24 @@ +package extractors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "go/ast" +) + +type KeywordExtractor struct { + typeResolver *types.TypeResolver +} + +func NewKeywordExtractor(typeResolver *types.TypeResolver) *KeywordExtractor { + return &KeywordExtractor{typeResolver: typeResolver} +} + +func (e *KeywordExtractor) ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) { + if assertTypedNode, ok := node.(*ast.TypeAssertExpr); ok { + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, assertTypedNode.Type) { + referenceBuilder.Instanceof(classLikeName, utils.GetLineByPosition(typeScope.FilePath, int(assertTypedNode.Type.Pos()))) + } + } +} diff --git a/pkg/application/services/extractors/property_extractor.go b/pkg/application/services/extractors/property_extractor.go new file mode 100644 index 0000000..69ccd9b --- /dev/null +++ b/pkg/application/services/extractors/property_extractor.go @@ -0,0 +1,33 @@ +package extractors + +import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/types" + "github.com/KoNekoD/go-deptrac/pkg/domain/utils" + "go/ast" +) + +type PropertyExtractor struct { + typeResolver *types.TypeResolver +} + +func NewPropertyExtractor(typeResolver *types.TypeResolver) *PropertyExtractor { + return &PropertyExtractor{typeResolver: typeResolver} +} + +func (e *PropertyExtractor) ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) { + typedStructNode, ok := node.(*ast.StructType) + if !ok { + return + } + + for _, field := range typedStructNode.Fields.List { + if nil == field.Type { + continue + } + + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, field.Type) { + referenceBuilder.Variable(classLikeName, utils.GetLineByPosition(typeScope.FilePath, int(field.Type.Pos()))) + } + } +} diff --git a/pkg/application/services/reference_visitors/file_reference_visitor.go b/pkg/application/services/reference_visitors/file_reference_visitor.go index 78bd7e9..145c834 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor.go @@ -72,7 +72,7 @@ func (f *FileReferenceVisitor) enterNode(node ast.Node) { packageFileName, err := f.nodeNamer.GetPackageFilename(f.fileReferenceBuilder.Filepath) f.addErrIfNeeded(err) - f.currentTypeScope = types.NewTypeScope(packageFileName).SetFileNode(typedNode) + f.currentTypeScope = types.NewTypeScope(packageFileName).SetFileNode(typedNode).SetFilePath(f.fileReferenceBuilder.Filepath) case *ast.FuncDecl: f.enterFunction(typedNode) case *ast.GenDecl: diff --git a/pkg/application/services/references_builders/reference_builder.go b/pkg/application/services/references_builders/reference_builder.go index d4f3fdb..412cfcd 100644 --- a/pkg/application/services/references_builders/reference_builder.go +++ b/pkg/application/services/references_builders/reference_builder.go @@ -20,7 +20,6 @@ type ReferenceBuilderInterface interface { CreateContext(occursAtLine int, dependencyType enums.DependencyType) *dependencies.DependencyContext UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder Variable(classLikeName string, occursAtLine int) *ReferenceBuilder - Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder @@ -65,11 +64,6 @@ func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *Ref return r } -func (r *ReferenceBuilder) Superglobal(superglobalName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(enums.NewSuperGlobalToken(superglobalName), r.CreateContext(occursAtLine, enums.DependencyTypeSuperGlobalVariable))) - return r -} - func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeReturnType))) return r diff --git a/pkg/application/services/token_resolver.go b/pkg/application/services/token_resolver.go index e39e8c8..ddabd98 100644 --- a/pkg/application/services/token_resolver.go +++ b/pkg/application/services/token_resolver.go @@ -4,7 +4,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" - "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) type TokenResolver struct{} @@ -19,8 +18,6 @@ func (r *TokenResolver) Resolve(token tokens.TokenInterface, astMap *ast_map.Ast return astMap.GetClassReferenceForToken(v) case *tokens.FunctionToken: return astMap.GetFunctionReferenceForToken(v) - case *enums.SuperGlobalToken: - return tokens_references.NewVariableReference(v) case *tokens.FileToken: return astMap.GetFileReferenceForToken(v) default: diff --git a/pkg/application/services/types/type_scope.go b/pkg/application/services/types/type_scope.go index 6eb572f..204d3a7 100644 --- a/pkg/application/services/types/type_scope.go +++ b/pkg/application/services/types/type_scope.go @@ -9,6 +9,7 @@ type TypeScope struct { Namespace string Uses map[string]string FileNode *ast.File + FilePath string } func NewTypeScope(namespace string) *TypeScope { @@ -25,6 +26,12 @@ func (s *TypeScope) SetFileNode(fileNode *ast.File) *TypeScope { return s } +func (s *TypeScope) SetFilePath(filepath string) *TypeScope { + s.FilePath = filepath + + return s +} + func (s *TypeScope) AddUse(className string, alias *string) { key := className if alias != nil { diff --git a/pkg/domain/apperrors/circular_reference_exception.go b/pkg/domain/apperrors/circular_reference_exception.go index 98f6df0..eebee1f 100644 --- a/pkg/domain/apperrors/circular_reference_exception.go +++ b/pkg/domain/apperrors/circular_reference_exception.go @@ -5,34 +5,7 @@ import ( "strings" ) -// CircularReferenceException - $others -// */ -// public static function circularLayerDependency(string $layer_contract, array $others) : self -// { -// return new self(sprintf('Circular ruleset dependency_contract for layer_contract %s depending on: %s', $layer_contract, implode('->', $others))); -// } -// } +// CircularReferenceException - when there are circular dependencies between layers. type CircularReferenceException struct { Message string } diff --git a/pkg/domain/dtos/collectors_configs/super_global_config.go b/pkg/domain/dtos/collectors_configs/super_global_config.go deleted file mode 100644 index f8747e4..0000000 --- a/pkg/domain/dtos/collectors_configs/super_global_config.go +++ /dev/null @@ -1,32 +0,0 @@ -package collectors_configs - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/enums" -) - -type SuperGlobalConfig struct { - *CollectorConfig - collectorType enums.CollectorType - config []string -} - -func NewSuperGlobalConfig(config []string) *SuperGlobalConfig { - return &SuperGlobalConfig{ - CollectorConfig: &CollectorConfig{}, - collectorType: enums.CollectorTypeTypeSuperGlobal, - config: config, - } -} - -func CreateSuperGlobalConfig(config ...string) *SuperGlobalConfig { - return NewSuperGlobalConfig(config) -} - -func (c *SuperGlobalConfig) ToArray() map[string]interface{} { - parent := c.CollectorConfig.ToArray() - - parent["type"] = string(c.collectorType) - parent["value"] = c.config - - return parent -} diff --git a/pkg/domain/dtos/tokens_references/variable_reference.go b/pkg/domain/dtos/tokens_references/variable_reference.go deleted file mode 100644 index d3d0cb3..0000000 --- a/pkg/domain/dtos/tokens_references/variable_reference.go +++ /dev/null @@ -1,22 +0,0 @@ -package tokens_references - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - "github.com/KoNekoD/go-deptrac/pkg/domain/enums" -) - -type VariableReference struct { - tokenName *enums.SuperGlobalToken -} - -func NewVariableReference(tokenName *enums.SuperGlobalToken) *VariableReference { - return &VariableReference{tokenName: tokenName} -} - -func (v *VariableReference) GetFilepath() *string { - return nil -} - -func (v *VariableReference) GetToken() tokens.TokenInterface { - return v.tokenName -} diff --git a/pkg/domain/enums/collector_type.go b/pkg/domain/enums/collector_type.go index b6cbf2f..140ea7e 100644 --- a/pkg/domain/enums/collector_type.go +++ b/pkg/domain/enums/collector_type.go @@ -21,7 +21,6 @@ const ( CollectorTypeTypeInterface CollectorType = "interface" CollectorTypeTypeLayer CollectorType = "layer_contract" CollectorTypeTypeMethod CollectorType = "method" - CollectorTypeTypeSuperGlobal CollectorType = "superGlobal" CollectorTypeTypeGlobal CollectorType = "global" CollectorTypeTypeTrait CollectorType = "trait" CollectorTypeTypeUses CollectorType = "uses" @@ -46,7 +45,6 @@ var availableTypes = []CollectorType{ CollectorTypeTypeInterface, CollectorTypeTypeLayer, CollectorTypeTypeMethod, - CollectorTypeTypeSuperGlobal, CollectorTypeTypeGlobal, CollectorTypeTypeTrait, CollectorTypeTypeUses, diff --git a/pkg/domain/enums/super_global_token.go b/pkg/domain/enums/super_global_token.go deleted file mode 100644 index bbd751c..0000000 --- a/pkg/domain/enums/super_global_token.go +++ /dev/null @@ -1,37 +0,0 @@ -package enums - -type SuperGlobalToken string - -const ( - GLOBALS SuperGlobalToken = "GLOBALS" - SERVER SuperGlobalToken = "_SERVER" - GET SuperGlobalToken = "_GET" - POST SuperGlobalToken = "_POST" - FILES SuperGlobalToken = "_FILES" - COOKIE SuperGlobalToken = "_COOKIE" - SESSION SuperGlobalToken = "_SESSION" - REQUEST SuperGlobalToken = "_REQUEST" - ENV SuperGlobalToken = "_ENV" -) - -func NewSuperGlobalToken(superglobalName string) SuperGlobalToken { - return SuperGlobalToken(superglobalName) -} - -func (s SuperGlobalToken) AllowedNames() []string { - return []string{ - string(GLOBALS), - string(SERVER), - string(GET), - string(POST), - string(FILES), - string(COOKIE), - string(SESSION), - string(REQUEST), - string(ENV), - } -} - -func (s SuperGlobalToken) ToString() string { - return "$" + string(s) -} diff --git a/pkg/infrastructure/di/services.go b/pkg/infrastructure/di/services.go index ba7d622..c1f1a1e 100644 --- a/pkg/infrastructure/di/services.go +++ b/pkg/infrastructure/di/services.go @@ -81,20 +81,10 @@ func Services(builder *ContainerBuilder) error { } typeResolver := types.NewTypeResolver(nodeNamer) referenceExtractors := []extractors.ReferenceExtractorInterface{ - /** - - TODO: Implement all reference extractors - - AnnotationReferenceExtractor.NewAnnotationReferenceExtractor(), - AnonymousClassExtractor.NewAnonymousClassExtractor(), - ClassConstantExtractor.NewClassConstantExtractor(), - FunctionLikeExtractor.NewFunctionLikeExtractor(), - PropertyExtractor.NewPropertyExtractor(), - KeywordExtractor.NewKeywordExtractor(), - StaticExtractor.NewStaticExtractor(), - FunctionCallResolver.NewFunctionCallResolver(), - - */ + extractors.NewFunctionLikeExtractor(typeResolver), + extractors.NewPropertyExtractor(typeResolver), + extractors.NewKeywordExtractor(typeResolver), + extractors.NewFunctionCallResolver(typeResolver), } nikicPhpParser := parsers.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser @@ -247,7 +237,6 @@ func Services(builder *ContainerBuilder) error { enums.CollectorTypeTypeInherits: inheritsCollector, enums.CollectorTypeTypeLayer: dependencies_collectors.NewLayerCollector(layerResolver), enums.CollectorTypeTypeMethod: dependencies_collectors.NewMethodCollector(nikicPhpParser), - enums.CollectorTypeTypeSuperGlobal: dependencies_collectors.NewSuperglobalCollector(), enums.CollectorTypeTypeTrait: dependencies_collectors.NewTraitCollector(), enums.CollectorTypeTypeUses: usesCollector, //CollectorType.TypePhpInternal: PhpInternalCollector From dc8a0e251c573274860e152bb77cd8cfb1230d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 17:45:25 +0300 Subject: [PATCH 34/40] refactor: structure --- .../event_dispatchers/event_dispatcher.go} | 6 ++- pkg/application/event_handlers/console.go | 20 +++---- .../depends_on_disallowed_layer.go | 6 +-- .../depends_on_internal_token.go | 6 +-- .../depends_on_private_layer.go | 6 +-- pkg/application/event_handlers/progress.go | 8 +-- .../unmatched_skipped_violations.go | 6 +-- .../analysers/dependency_layers_analyser.go | 6 +-- .../services/ast_map/ast_loader.go | 6 +-- .../services/dependency_resolver.go | 6 +-- .../services}/event_helper.go | 7 ++- .../services/output_interface.go | 0 .../services/output_style_interface.go | 0 .../commands/analyse_command.go | 6 +-- .../commands/debug_dependencies_command.go | 2 +- .../commands/debug_layer_command.go | 2 +- .../commands/debug_token_command.go | 6 +-- .../commands/debug_unassigned_command.go | 8 +-- .../commands/debug_unused_command.go | 6 +-- pkg/infrastructure/commands/init_command.go | 2 +- pkg/infrastructure/di/container_builder.go | 6 +-- pkg/infrastructure/di/services.go | 6 +-- .../dispatchers/event_dispatcher_interface.go | 5 -- .../formatters/baseline_output_formatter.go | 8 +-- .../codeclimate_output_formatter.go | 6 +-- .../formatters/console_output_formatter.go | 52 +++++++++---------- .../github_actions_output_formatter.go | 20 +++---- .../graph_viz_output_display_formatter.go | 2 +- .../graph_viz_output_dot_formatter.go | 6 +-- .../formatters/graph_viz_output_formatter.go | 10 ++-- .../graph_viz_output_html_formatter.go | 6 +-- .../graph_viz_output_image_formatter.go | 6 +-- .../formatters/json_output_formatter.go | 6 +-- .../formatters/junit_output_formatter.go | 6 +-- .../formatters/mermaid_js_output_formatter.go | 2 +- .../formatters/output_formatter_interface.go | 2 +- .../services/formatters/style.go | 2 +- .../formatters/table_output_formatter.go | 12 ++--- .../formatters/xml_output_formatter.go | 6 +-- .../services/runners/analyse_runner.go | 32 ++++++------ .../services/runners/changed_files_runner.go | 8 +-- .../runners/debug_dependencies_runner.go | 2 +- .../services/runners/debug_layer_runner.go | 2 +- .../services/runners/debug_token_runner.go | 6 +-- .../runners/debug_unassigned_runner.go | 8 +-- .../services/runners/debug_unused_runner.go | 2 +- pkg/infrastructure/services/symfony_output.go | 9 ++-- 47 files changed, 176 insertions(+), 177 deletions(-) rename pkg/{infrastructure/services/dispatchers/event_dispatcher_interface2.go => application/event_dispatchers/event_dispatcher.go} (91%) rename pkg/{infrastructure/services/dispatchers => application/services}/event_helper.go (92%) rename pkg/{infrastructure => application}/services/output_interface.go (100%) rename pkg/{infrastructure => application}/services/output_style_interface.go (100%) delete mode 100644 pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go diff --git a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go b/pkg/application/event_dispatchers/event_dispatcher.go similarity index 91% rename from pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go rename to pkg/application/event_dispatchers/event_dispatcher.go index b6ec59d..96dfdad 100644 --- a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface2.go +++ b/pkg/application/event_dispatchers/event_dispatcher.go @@ -1,4 +1,4 @@ -package dispatchers +package event_dispatchers import ( "fmt" @@ -7,6 +7,10 @@ import ( "slices" ) +type EventDispatcherInterface interface { + DispatchEvent(event interface{}) error +} + type EventDispatcher struct { isDebug bool } diff --git a/pkg/application/event_handlers/console.go b/pkg/application/event_handlers/console.go index 1372cb0..db97e90 100644 --- a/pkg/application/event_handlers/console.go +++ b/pkg/application/event_handlers/console.go @@ -2,17 +2,17 @@ package event_handlers import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type Console struct { - output services.OutputInterface + output services2.OutputInterface stopwatch *stopwatch.Stopwatch } -func NewConsole(output services.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { +func NewConsole(output services2.OutputInterface, stopwatch *stopwatch.Stopwatch) *Console { return &Console{ output: output, stopwatch: stopwatch, @@ -27,7 +27,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Start to create an AstMap for %d Files.", event.ExpectedFileCount)}) } case *events.PostCreateAstMapEvent: if s.output.IsVerbose() { @@ -35,17 +35,17 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro } case *events.AstFileAnalysedEvent: if s.output.IsVerbose() { - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Parsing File %s", event.File)}) } case *events.AstFileSyntaxErrorEvent: - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("\nSyntax Error on File %s\n%s\n", event.File, event.SyntaxError)}) case *events.PreEmitEvent: if s.output.IsVerbose() { err := s.stopwatchStart("deps") if err != nil { return err } - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("start emitting dependencies %s", event.EmitterName)}) } case *events.PostEmitEvent: if s.output.IsVerbose() { @@ -57,7 +57,7 @@ func (s *Console) HandleEvent(rawEvent interface{}, stopPropagation func()) erro if err != nil { return err } - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "start flatten dependencies"}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "start flatten dependencies"}) } case *events.PostFlattenEvent: if s.output.IsVerbose() { @@ -81,9 +81,9 @@ func (s *Console) printMessageWithTime(event string, messageWithTime string, mes period, err := s.stopwatch.Stop(event) if err != nil { - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: messageWithoutTime}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: messageWithoutTime}) return } - s.output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) } diff --git a/pkg/application/event_handlers/depends_on_disallowed_layer.go b/pkg/application/event_handlers/depends_on_disallowed_layer.go index 1736260..ec577c5 100644 --- a/pkg/application/event_handlers/depends_on_disallowed_layer.go +++ b/pkg/application/event_handlers/depends_on_disallowed_layer.go @@ -1,17 +1,17 @@ package event_handlers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnDisallowedLayer struct { - eventHelper *dispatchers.EventHelper + eventHelper *services.EventHelper } -func NewDependsOnDisallowedLayer(eventHelper *dispatchers.EventHelper) *DependsOnDisallowedLayer { +func NewDependsOnDisallowedLayer(eventHelper *services.EventHelper) *DependsOnDisallowedLayer { return &DependsOnDisallowedLayer{eventHelper: eventHelper} } diff --git a/pkg/application/event_handlers/depends_on_internal_token.go b/pkg/application/event_handlers/depends_on_internal_token.go index 401c4c9..30a5e83 100644 --- a/pkg/application/event_handlers/depends_on_internal_token.go +++ b/pkg/application/event_handlers/depends_on_internal_token.go @@ -1,18 +1,18 @@ package event_handlers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnInternalToken struct { - eventHelper *dispatchers.EventHelper + eventHelper *services.EventHelper internalTag *string } -func NewDependsOnInternalToken(eventHelper *dispatchers.EventHelper, analyser *configs.AnalyserConfig) *DependsOnInternalToken { +func NewDependsOnInternalToken(eventHelper *services.EventHelper, analyser *configs.AnalyserConfig) *DependsOnInternalToken { return &DependsOnInternalToken{eventHelper: eventHelper, internalTag: analyser.InternalTag} } diff --git a/pkg/application/event_handlers/depends_on_private_layer.go b/pkg/application/event_handlers/depends_on_private_layer.go index 1b1fe8c..8745b55 100644 --- a/pkg/application/event_handlers/depends_on_private_layer.go +++ b/pkg/application/event_handlers/depends_on_private_layer.go @@ -1,15 +1,15 @@ package event_handlers import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependsOnPrivateLayer struct { - eventHelper *dispatchers.EventHelper + eventHelper *services.EventHelper } -func NewDependsOnPrivateLayer(eventHelper *dispatchers.EventHelper) *DependsOnPrivateLayer { +func NewDependsOnPrivateLayer(eventHelper *services.EventHelper) *DependsOnPrivateLayer { return &DependsOnPrivateLayer{eventHelper: eventHelper} } diff --git a/pkg/application/event_handlers/progress.go b/pkg/application/event_handlers/progress.go index 0c2ebe8..f34f977 100644 --- a/pkg/application/event_handlers/progress.go +++ b/pkg/application/event_handlers/progress.go @@ -1,15 +1,15 @@ package event_handlers import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type Progress struct { - output services.OutputInterface + output services2.OutputInterface } -func NewProgress(output services.OutputInterface) *Progress { +func NewProgress(output services2.OutputInterface) *Progress { return &Progress{output: output} } @@ -23,7 +23,7 @@ func (s *Progress) HandleEvent(rawEvent interface{}, stopPropagation func()) err return err } case *events.AstFileAnalysedEvent: - err := s.output.GetStyle().ProgressAdvance(services.ProgressAdvanceDefault) + err := s.output.GetStyle().ProgressAdvance(services2.ProgressAdvanceDefault) if err != nil { return err } diff --git a/pkg/application/event_handlers/unmatched_skipped_violations.go b/pkg/application/event_handlers/unmatched_skipped_violations.go index 76a6388..c0e4a66 100644 --- a/pkg/application/event_handlers/unmatched_skipped_violations.go +++ b/pkg/application/event_handlers/unmatched_skipped_violations.go @@ -2,16 +2,16 @@ package event_handlers import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type UnmatchedSkippedViolations struct { - eventHelper *dispatchers.EventHelper + eventHelper *services.EventHelper } -func NewUnmatchedSkippedViolations(eventHelper *dispatchers.EventHelper) *UnmatchedSkippedViolations { +func NewUnmatchedSkippedViolations(eventHelper *services.EventHelper) *UnmatchedSkippedViolations { return &UnmatchedSkippedViolations{eventHelper: eventHelper} } diff --git a/pkg/application/services/analysers/dependency_layers_analyser.go b/pkg/application/services/analysers/dependency_layers_analyser.go index a545be6..6f5e0cf 100644 --- a/pkg/application/services/analysers/dependency_layers_analyser.go +++ b/pkg/application/services/analysers/dependency_layers_analyser.go @@ -2,6 +2,7 @@ package analysers import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" @@ -10,7 +11,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type DependencyLayersAnalyser struct { @@ -18,7 +18,7 @@ type DependencyLayersAnalyser struct { dependencyResolver *services.DependencyResolver tokenResolver *services.TokenResolver layerResolver layers_resolvers.LayerResolverInterface - eventDispatcher dispatchers.EventDispatcherInterface + eventDispatcher event_dispatchers.EventDispatcherInterface } func NewDependencyLayersAnalyser( @@ -26,7 +26,7 @@ func NewDependencyLayersAnalyser( dependencyResolver *services.DependencyResolver, tokenResolver *services.TokenResolver, layerResolver layers_resolvers.LayerResolverInterface, - eventDispatcher dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { + eventDispatcher event_dispatchers.EventDispatcherInterface) *DependencyLayersAnalyser { return &DependencyLayersAnalyser{ astMapExtractor: astMapExtractor, dependencyResolver: dependencyResolver, diff --git a/pkg/application/services/ast_map/ast_loader.go b/pkg/application/services/ast_map/ast_loader.go index 6acd039..ee9aab6 100644 --- a/pkg/application/services/ast_map/ast_loader.go +++ b/pkg/application/services/ast_map/ast_loader.go @@ -1,19 +1,19 @@ package ast_map import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" ) type AstLoader struct { parser parsers.ParserInterface - eventDispatcher dispatchers.EventDispatcherInterface + eventDispatcher event_dispatchers.EventDispatcherInterface } -func NewAstLoader(parser parsers.ParserInterface, eventDispatcher dispatchers.EventDispatcherInterface) *AstLoader { +func NewAstLoader(parser parsers.ParserInterface, eventDispatcher event_dispatchers.EventDispatcherInterface) *AstLoader { return &AstLoader{ parser: parser, eventDispatcher: eventDispatcher, diff --git a/pkg/application/services/dependency_resolver.go b/pkg/application/services/dependency_resolver.go index 1ae8bf0..034810c 100644 --- a/pkg/application/services/dependency_resolver.go +++ b/pkg/application/services/dependency_resolver.go @@ -1,6 +1,7 @@ package services import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" @@ -8,7 +9,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "reflect" ) @@ -16,10 +16,10 @@ type DependencyResolver struct { config *configs.AnalyserConfig inheritanceFlattener *InheritanceFlattener emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface - eventDispatcher dispatchers.EventDispatcherInterface + eventDispatcher event_dispatchers.EventDispatcherInterface } -func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *InheritanceFlattener, eventDispatcher dispatchers.EventDispatcherInterface) *DependencyResolver { +func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator map[enums.EmitterType]emitters.DependencyEmitterInterface, inheritanceFlattener *InheritanceFlattener, eventDispatcher event_dispatchers.EventDispatcherInterface) *DependencyResolver { return &DependencyResolver{ config: typesConfig, emitterLocator: emitterLocator, diff --git a/pkg/infrastructure/services/dispatchers/event_helper.go b/pkg/application/services/event_helper.go similarity index 92% rename from pkg/infrastructure/services/dispatchers/event_helper.go rename to pkg/application/services/event_helper.go index 669cd4b..f647dde 100644 --- a/pkg/infrastructure/services/dispatchers/event_helper.go +++ b/pkg/application/services/event_helper.go @@ -1,7 +1,6 @@ -package dispatchers +package services import ( - "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/events" @@ -12,10 +11,10 @@ import ( type EventHelper struct { UnmatchedSkippedViolation map[string][]string SkippedViolations map[string][]string - LayerProvider *services.LayerProvider + LayerProvider *LayerProvider } -func NewEventHelper(skippedViolations map[string][]string, layerProvider *services.LayerProvider) *EventHelper { +func NewEventHelper(skippedViolations map[string][]string, layerProvider *LayerProvider) *EventHelper { return &EventHelper{ UnmatchedSkippedViolation: skippedViolations, SkippedViolations: skippedViolations, diff --git a/pkg/infrastructure/services/output_interface.go b/pkg/application/services/output_interface.go similarity index 100% rename from pkg/infrastructure/services/output_interface.go rename to pkg/application/services/output_interface.go diff --git a/pkg/infrastructure/services/output_style_interface.go b/pkg/application/services/output_style_interface.go similarity index 100% rename from pkg/infrastructure/services/output_style_interface.go rename to pkg/application/services/output_style_interface.go diff --git a/pkg/infrastructure/commands/analyse_command.go b/pkg/infrastructure/commands/analyse_command.go index 50c1bdf..5cc7977 100644 --- a/pkg/infrastructure/commands/analyse_command.go +++ b/pkg/infrastructure/commands/analyse_command.go @@ -1,10 +1,10 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" ) @@ -12,7 +12,7 @@ import ( // AnalyseCommand - Analyses your project using the provided depfile type AnalyseCommand struct { runner *runners.AnalyseRunner - dispatcher dispatchers.EventDispatcherInterface + dispatcher event_dispatchers.EventDispatcherInterface formatterProvider *formatters.FormatterProvider verboseBoolFlag bool debugBoolFlag bool @@ -21,7 +21,7 @@ type AnalyseCommand struct { analyseOptions *commands_options.AnalyseOptions } -func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, analyseOptions *commands_options.AnalyseOptions) *AnalyseCommand { +func NewAnalyseCommand(runner *runners.AnalyseRunner, dispatcher event_dispatchers.EventDispatcherInterface, formatterProvider *formatters.FormatterProvider, verboseBoolFlag bool, debugBoolFlag bool, consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, analyseOptions *commands_options.AnalyseOptions) *AnalyseCommand { return &AnalyseCommand{ runner: runner, dispatcher: dispatcher, diff --git a/pkg/infrastructure/commands/debug_dependencies_command.go b/pkg/infrastructure/commands/debug_dependencies_command.go index b30680e..59bc8ec 100644 --- a/pkg/infrastructure/commands/debug_dependencies_command.go +++ b/pkg/infrastructure/commands/debug_dependencies_command.go @@ -1,8 +1,8 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" ) diff --git a/pkg/infrastructure/commands/debug_layer_command.go b/pkg/infrastructure/commands/debug_layer_command.go index 6a85bd5..86d7fd2 100644 --- a/pkg/infrastructure/commands/debug_layer_command.go +++ b/pkg/infrastructure/commands/debug_layer_command.go @@ -1,8 +1,8 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" ) diff --git a/pkg/infrastructure/commands/debug_token_command.go b/pkg/infrastructure/commands/debug_token_command.go index 9038c37..2fd102e 100644 --- a/pkg/infrastructure/commands/debug_token_command.go +++ b/pkg/infrastructure/commands/debug_token_command.go @@ -1,9 +1,9 @@ package commands import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" ) @@ -18,7 +18,7 @@ func NewDebugTokenCommand(runner *runners.DebugTokenRunner, options *commands_op return &DebugTokenCommand{runner: runner, options: options} } -func (c *DebugTokenCommand) Run(output services.OutputInterface) error { +func (c *DebugTokenCommand) Run(output services2.OutputInterface) error { tokenType, err := enums.NewTokenType(c.options.Type) if err != nil { return err @@ -26,7 +26,7 @@ func (c *DebugTokenCommand) Run(output services.OutputInterface) error { err = c.runner.Run(output, c.options.Token, tokenType) if err != nil { - output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Token debugging failed. error: " + err.Error()}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{String: "Token debugging failed. error: " + err.Error()}) return errors.WithStack(err) } diff --git a/pkg/infrastructure/commands/debug_unassigned_command.go b/pkg/infrastructure/commands/debug_unassigned_command.go index 67157d0..c1550b3 100644 --- a/pkg/infrastructure/commands/debug_unassigned_command.go +++ b/pkg/infrastructure/commands/debug_unassigned_command.go @@ -1,7 +1,7 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" ) @@ -15,15 +15,15 @@ func NewDebugUnassignedCommand(runner *runners.DebugUnassignedRunner) *DebugUnas return &DebugUnassignedCommand{runner: runner} } -func (c *DebugUnassignedCommand) Run(output services.OutputInterface) error { +func (c *DebugUnassignedCommand) Run(output services2.OutputInterface) error { result, err := c.runner.Run(output) if err != nil { - output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Unassigned token debugging failed. error: " + err.Error()}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{String: "Unassigned token debugging failed. error: " + err.Error()}) return errors.WithStack(err) } if result { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "There are unassigned tokens."}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "There are unassigned tokens."}) return errors.New("There are unassigned tokens.") } diff --git a/pkg/infrastructure/commands/debug_unused_command.go b/pkg/infrastructure/commands/debug_unused_command.go index 74067b0..a8fe788 100644 --- a/pkg/infrastructure/commands/debug_unused_command.go +++ b/pkg/infrastructure/commands/debug_unused_command.go @@ -1,8 +1,8 @@ package commands import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" ) @@ -17,10 +17,10 @@ func NewDebugUnusedCommand(runner *runners.DebugUnusedRunner, options *commands_ return &DebugUnusedCommand{runner: runner, options: options} } -func (c *DebugUnusedCommand) Run(output services.OutputInterface) error { +func (c *DebugUnusedCommand) Run(output services2.OutputInterface) error { err := c.runner.Run(output, c.options.Limit) if err != nil { - output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Dependency debugging failed. error: " + err.Error()}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{String: "Dependency debugging failed. error: " + err.Error()}) return errors.WithStack(err) } diff --git a/pkg/infrastructure/commands/init_command.go b/pkg/infrastructure/commands/init_command.go index 57236f3..87b006c 100644 --- a/pkg/infrastructure/commands/init_command.go +++ b/pkg/infrastructure/commands/init_command.go @@ -1,9 +1,9 @@ package commands import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" domainServices "github.com/KoNekoD/go-deptrac/pkg/domain/services" - services "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) // InitCommand - init - Creates a depfile template diff --git a/pkg/infrastructure/di/container_builder.go b/pkg/infrastructure/di/container_builder.go index b8a338e..1e1195d 100644 --- a/pkg/infrastructure/di/container_builder.go +++ b/pkg/infrastructure/di/container_builder.go @@ -1,6 +1,7 @@ package di import ( + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" applicationServices "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" @@ -18,7 +19,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" ) @@ -27,7 +27,7 @@ type ContainerBuilder struct { ProjectDirectory string CacheFile *string Configuration *configs.DeptracConfig - EventDispatcher dispatchers.EventDispatcherInterface + EventDispatcher event_dispatchers.EventDispatcherInterface FileInputCollector input_collectors.InputCollector YmlFileLoader *services.YmlFileLoader Dumper *domainServices.Dumper @@ -41,7 +41,7 @@ type ContainerBuilder struct { ReferenceExtractors []extractors.ReferenceExtractorInterface ParserInterface parsers.ParserInterface LayerProvider *applicationServices.LayerProvider - EventHelper *dispatchers.EventHelper + EventHelper *applicationServices.EventHelper AllowDependencyHandler *event_handlers.AllowDependency DependsOnPrivateLayer *event_handlers.DependsOnPrivateLayer DependsOnInternalToken *event_handlers.DependsOnInternalToken diff --git a/pkg/infrastructure/di/services.go b/pkg/infrastructure/di/services.go index c1f1a1e..f05f00a 100644 --- a/pkg/infrastructure/di/services.go +++ b/pkg/infrastructure/di/services.go @@ -3,6 +3,7 @@ package di import ( "flag" "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" applicationServices "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" @@ -23,7 +24,6 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/domain/stopwatch" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/commands" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/dispatchers" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/elliotchance/orderedmap/v2" @@ -58,7 +58,7 @@ func Services(builder *ContainerBuilder) error { /* * Utilities */ - eventDispatcher := dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) + eventDispatcher := event_dispatchers.NewEventDispatcher(debugBoolFlag != nil && *debugBoolFlag == true) fileInputCollector, err := input_collectors.NewFileInputCollector( builderConfiguration.Paths, @@ -109,7 +109,7 @@ func Services(builder *ContainerBuilder) error { astMapExtractor := ast_map.NewAstMapExtractor(fileInputCollector, astLoader) layerProvider := applicationServices.NewLayerProvider(builderConfiguration.Rulesets) - eventHelper := dispatchers.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) + eventHelper := applicationServices.NewEventHelper(builderConfiguration.SkipViolations, layerProvider) /* * Events (before first possible event) diff --git a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go b/pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go deleted file mode 100644 index 6787833..0000000 --- a/pkg/infrastructure/services/dispatchers/event_dispatcher_interface.go +++ /dev/null @@ -1,5 +0,0 @@ -package dispatchers - -type EventDispatcherInterface interface { - DispatchEvent(event interface{}) error -} diff --git a/pkg/infrastructure/services/formatters/baseline_output_formatter.go b/pkg/infrastructure/services/formatters/baseline_output_formatter.go index 1c8ea9a..917015b 100644 --- a/pkg/infrastructure/services/formatters/baseline_output_formatter.go +++ b/pkg/infrastructure/services/formatters/baseline_output_formatter.go @@ -1,9 +1,9 @@ package formatters import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" @@ -20,7 +20,7 @@ func NewBaselineOutputFormatter() *BaselineOutputFormatter { return &BaselineOutputFormatter{} } -func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, output services2.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedViolations := b.collectViolations(outputResult) for _, violations := range groupedViolations { @@ -36,7 +36,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, out if stat, _ := os.Stat(dirname); stat == nil || !stat.IsDir() { if err := os.MkdirAll(dirname, 0777); err != nil { if stat2, _ := os.Stat(dirname); stat2 == nil || !stat2.IsDir() { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: color.Sprintf("Unable to create %s", dirname)}) return err } } @@ -52,7 +52,7 @@ func (b *BaselineOutputFormatter) Finish(outputResult *results.OutputResult, out return err } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: color.Sprintf("Baseline dumped to %s", baselineFile)}) return nil } diff --git a/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go index f45827b..0a68a14 100644 --- a/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go +++ b/pkg/infrastructure/services/formatters/codeclimate_output_formatter.go @@ -4,11 +4,11 @@ import ( "crypto/sha1" "encoding/json" "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" ) @@ -25,7 +25,7 @@ func (f *CodeclimateOutputFormatter) GetName() string { return "codeclimate" } -func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) error { formatterConfig := enums.NewConfigurationCodeclimateFromArray(f.config) var violationsList []map[string]interface{} @@ -55,7 +55,7 @@ func (f *CodeclimateOutputFormatter) Finish(outputResult results.OutputResult, o if err != nil { return err } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Codeclimate Report dumped to %s", *input.OutputPath)}) return nil } diff --git a/pkg/infrastructure/services/formatters/console_output_formatter.go b/pkg/infrastructure/services/formatters/console_output_formatter.go index 83aa454..670d2d2 100644 --- a/pkg/infrastructure/services/formatters/console_output_formatter.go +++ b/pkg/infrastructure/services/formatters/console_output_formatter.go @@ -2,12 +2,12 @@ package formatters import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "strings" ) @@ -21,7 +21,7 @@ func (f *ConsoleOutputFormatter) GetName() string { return "console_supportive" } -func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) { +func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) { for _, rule := range outputResult.AllOf(enums.TypeViolation) { f.printViolation(rule.(*violations_rules.Violation), output) } @@ -47,7 +47,7 @@ func (f *ConsoleOutputFormatter) Finish(outputResult results.OutputResult, outpu f.printSummary(outputResult, output) } -func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services2.OutputInterface) { dep := rule.GetDependency() skippedText := "" @@ -66,7 +66,7 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } output.WriteLineFormatted( - services.StringOrArrayOfStrings{ + services2.StringOrArrayOfStrings{ String: fmt.Sprintf("%s%s must not depend on %s (%s on %s)", skippedText, dep.GetDepender().ToString(), @@ -83,15 +83,15 @@ func (f *ConsoleOutputFormatter) printViolation(rule violations_rules.RuleInterf } } -func (f *ConsoleOutputFormatter) printMultilinePath(output services.OutputInterface, dep dependencies.DependencyInterface) { +func (f *ConsoleOutputFormatter) printMultilinePath(output services2.OutputInterface, dep dependencies.DependencyInterface) { var buffer strings.Builder for _, depSerialized := range dep.Serialize() { buffer.WriteString(fmt.Sprintf("\t%s:%d -> \n", depSerialized["name"], depSerialized["line"])) } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: buffer.String()}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: buffer.String()}) } -func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, output services2.OutputInterface) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -99,27 +99,27 @@ func (f *ConsoleOutputFormatter) printSummary(result results.OutputResult, outpu warningsCount := len(result.Warnings) errorsCount := len(result.Errors) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "Report:"}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "Report:"}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Violations: %d", f.getColor(violationCount > 0, "red", "default"), violationCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Skipped violations: %d", f.getColor(skippedViolationCount > 0, "yellow", "default"), skippedViolationCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Uncovered: %d", f.getColor(uncoveredCount > 0, "yellow", "default"), uncoveredCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Allowed: %d", allowedCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Warnings: %d", f.getColor(warningsCount > 0, "yellow", "default"), warningsCount)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Errors: %d", f.getColor(errorsCount > 0, "red", "default"), errorsCount)}) } -func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, output services.OutputInterface) { +func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, output services2.OutputInterface) { uncovered := result.Uncovered() if len(uncovered) == 0 { return } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "Uncovered dependencies:"}) for _, u := range uncovered { dep := u.GetDependency() output.WriteLineFormatted( - services.StringOrArrayOfStrings{ + services2.StringOrArrayOfStrings{ String: fmt.Sprintf("%s has uncovered dependency_contract on %s (%s)", dep.GetDepender().ToString(), dep.GetDependent().ToString(), @@ -135,21 +135,21 @@ func (f *ConsoleOutputFormatter) printUncovered(result results.OutputResult, out } } -func (f *ConsoleOutputFormatter) printFileOccurrence(output services.OutputInterface, fileOccurrence *dtos.FileOccurrence) { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) +func (f *ConsoleOutputFormatter) printFileOccurrence(output services2.OutputInterface, fileOccurrence *dtos.FileOccurrence) { + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("%s:%d", fileOccurrence.FilePath, fileOccurrence.Line)}) } -func (f *ConsoleOutputFormatter) printErrors(result results.OutputResult, output services.OutputInterface) { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printErrors(result results.OutputResult, output services2.OutputInterface) { + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) for _, err := range result.Errors { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("[ERROR] %s", err)}) } } -func (f *ConsoleOutputFormatter) printWarnings(result results.OutputResult, output services.OutputInterface) { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) +func (f *ConsoleOutputFormatter) printWarnings(result results.OutputResult, output services2.OutputInterface) { + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) for _, warning := range result.Warnings { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("[WARNING] %s", warning)}) } } diff --git a/pkg/infrastructure/services/formatters/github_actions_output_formatter.go b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go index c037b72..36db599 100644 --- a/pkg/infrastructure/services/formatters/github_actions_output_formatter.go +++ b/pkg/infrastructure/services/formatters/github_actions_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "strings" ) @@ -20,7 +20,7 @@ func (g *GithubActionsOutputFormatter) GetName() enums.OutputFormatterType { return enums.GithubActions } -func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (g *GithubActionsOutputFormatter) Finish(outputResult *results.OutputResult, output services2.OutputInterface, outputFormatterInput *OutputFormatterInput) error { for _, rule := range outputResult.AllOf(enums.TypeViolation) { g.printViolation(rule, output) } @@ -53,7 +53,7 @@ func (g *GithubActionsOutputFormatter) determineLogLevel(rule violations_rules.R } } -func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResult, output services.OutputInterface, reportAsError bool) { +func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResult, output services2.OutputInterface, reportAsError bool) { for _, u := range result.Uncovered() { dependency := u.GetDependency() @@ -63,7 +63,7 @@ func (g *GithubActionsOutputFormatter) printUncovered(result *results.OutputResu } output.WriteLineFormatted( - services.StringOrArrayOfStrings{ + services2.StringOrArrayOfStrings{ String: fmt.Sprintf( "::%s file_supportive=%s,line=%d::%s has uncovered dependency_contract on %s (%s)", reportAs, @@ -86,19 +86,19 @@ func (g *GithubActionsOutputFormatter) multilinePathMessage(dep dependencies.Dep return strings.Join(lines, " ->%0A") } -func (g *GithubActionsOutputFormatter) printErrors(result *results.OutputResult, output services.OutputInterface) { +func (g *GithubActionsOutputFormatter) printErrors(result *results.OutputResult, output services2.OutputInterface) { for _, e := range result.Errors { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("::error ::%s", e.ToString())}) } } -func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResult, output services.OutputInterface) { +func (g *GithubActionsOutputFormatter) printWarnings(result *results.OutputResult, output services2.OutputInterface) { for _, warning := range result.Warnings { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("::warning ::%s", warning.ToString())}) } } -func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services.OutputInterface) { +func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.RuleInterface, output services2.OutputInterface) { dependency := rule.GetDependency() prefix := "" dependerLayer := "" @@ -117,5 +117,5 @@ func (g *GithubActionsOutputFormatter) printViolation(rule violations_rules.Rule message += "%0A" + g.multilinePathMessage(dependency) } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("::%s file_supportive=%s,line=%d::%s", g.determineLogLevel(rule), dependency.GetContext().FileOccurrence.FilePath, dependency.GetContext().FileOccurrence.Line, message)}) } diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go index 964a355..f80c997 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_display_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "os/exec" "runtime" "time" diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go index 4456f72..d61998e 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_dot_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputDotFormatter) GetName() string { return "graphviz-dot" } -func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services2.OutputInterface, input OutputFormatterInput) error { dumpDotPath := input.OutputPath if dumpDotPath == nil || *dumpDotPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -42,6 +42,6 @@ func (f *GraphVizOutputDotFormatter) output(g *graphviz.Graphviz, graph *cgraph. // return fmt.Errorf("unable to write DOT data to file_supportive: %v", err) //} - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Script dumped to %s", filepath.Clean(*dumpDotPath))}) return nil } diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go index 63c97b1..28c222f 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_formatter.go @@ -2,10 +2,10 @@ package formatters import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/goccy/go-graphviz" "github.com/goccy/go-graphviz/cgraph" "os" @@ -21,7 +21,7 @@ func NewGraphVizOutputFormatter(config FormatterConfiguration) *GraphVizOutputFo return &GraphVizOutputFormatter{config: extractedConfig} } -func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) Finish(result results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) error { layerViolations := f.calculateViolations(result.Violations()) layersDependOnLayers := f.calculateLayerDependencies(result.AllRules()) @@ -147,7 +147,7 @@ func (f *GraphVizOutputFormatter) addNodesToGraph(graph *cgraph.Graph, nodes map } } -func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services2.OutputInterface, input OutputFormatterInput) error { filename, err := f.getTempImage(g, graph) if err != nil { return fmt.Errorf("unable to create temp file_supportive for output: %v", err) @@ -157,11 +157,11 @@ func (f *GraphVizOutputFormatter) output(g *graphviz.Graphviz, graph *cgraph.Gra if err := os.Rename(filename, *input.OutputPath); err != nil { return fmt.Errorf("unable to move temp file_supportive to output path: %v", err) } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz Report saved to %s", filepath.Clean(*input.OutputPath))}) return nil } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("GraphViz temp image created at %s", filename)}) return nil } diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go index 361d970..0ade9e6 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_html_formatter.go @@ -3,7 +3,7 @@ package formatters import ( "encoding/base64" "fmt" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "os" "path/filepath" @@ -25,7 +25,7 @@ func (f *GraphVizOutputHtmlFormatter) GetName() string { return "graphviz-html" } -func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services2.OutputInterface, input OutputFormatterInput) error { dumpHtmlPath := input.OutputPath if dumpHtmlPath == nil || *dumpHtmlPath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -62,6 +62,6 @@ func (f *GraphVizOutputHtmlFormatter) output(g *graphviz.Graphviz, graph *cgraph return fmt.Errorf("unable to write HTML file_supportive: %v", err) } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("HTML dumped to %s", filepath.Clean(*dumpHtmlPath))}) return nil } diff --git a/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go b/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go index 483eb96..c292dd5 100644 --- a/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go +++ b/pkg/infrastructure/services/formatters/graph_viz_output_image_formatter.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "os" "path/filepath" @@ -24,7 +24,7 @@ func (f *GraphVizOutputImageFormatter) GetName() string { return "graphviz-image" } -func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services.OutputInterface, input OutputFormatterInput) error { +func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgraph.Graph, output services2.OutputInterface, input OutputFormatterInput) error { dumpImagePath := input.OutputPath if dumpImagePath == nil || *dumpImagePath == "" { return fmt.Errorf("no '--output' defined for GraphViz formatter") @@ -39,7 +39,7 @@ func (f *GraphVizOutputImageFormatter) output(g *graphviz.Graphviz, graph *cgrap return fmt.Errorf("unable to display output: %v", err) } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Image dumped to %s", *dumpImagePath)}) return nil } diff --git a/pkg/infrastructure/services/formatters/json_output_formatter.go b/pkg/infrastructure/services/formatters/json_output_formatter.go index 0cda3cb..cfd7f76 100644 --- a/pkg/infrastructure/services/formatters/json_output_formatter.go +++ b/pkg/infrastructure/services/formatters/json_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/json" "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -21,7 +21,7 @@ func (f *JsonOutputFormatter) GetName() string { return "json" } -func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) error { jsonArray := make(map[string]interface{}) violationsList := make(map[string]FileViolations) @@ -66,7 +66,7 @@ func (f *JsonOutputFormatter) Finish(outputResult results.OutputResult, output s if err := os.WriteFile(*input.OutputPath, jsonData, 0644); err != nil { return err } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("JSON Report dumped to %s", filepath.Clean(*input.OutputPath))}) return nil } diff --git a/pkg/infrastructure/services/formatters/junit_output_formatter.go b/pkg/infrastructure/services/formatters/junit_output_formatter.go index 8830de0..4b8791a 100644 --- a/pkg/infrastructure/services/formatters/junit_output_formatter.go +++ b/pkg/infrastructure/services/formatters/junit_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *JUnitOutputFormatter) GetName() string { return "junit" } -func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *JUnitOutputFormatter) Finish(result results.OutputResult, output servic return err } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("JUnit Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go index d362e6f..03a8870 100644 --- a/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go +++ b/pkg/infrastructure/services/formatters/mermaid_js_output_formatter.go @@ -2,9 +2,9 @@ package formatters import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/formatters_configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "strings" ) diff --git a/pkg/infrastructure/services/formatters/output_formatter_interface.go b/pkg/infrastructure/services/formatters/output_formatter_interface.go index f0ed621..523a2ef 100644 --- a/pkg/infrastructure/services/formatters/output_formatter_interface.go +++ b/pkg/infrastructure/services/formatters/output_formatter_interface.go @@ -1,9 +1,9 @@ package formatters import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type OutputFormatterInterface interface { diff --git a/pkg/infrastructure/services/formatters/style.go b/pkg/infrastructure/services/formatters/style.go index 7208fcb..a500174 100644 --- a/pkg/infrastructure/services/formatters/style.go +++ b/pkg/infrastructure/services/formatters/style.go @@ -2,7 +2,7 @@ package formatters import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/gookit/color" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" diff --git a/pkg/infrastructure/services/formatters/table_output_formatter.go b/pkg/infrastructure/services/formatters/table_output_formatter.go index 7e1eb33..28f230f 100644 --- a/pkg/infrastructure/services/formatters/table_output_formatter.go +++ b/pkg/infrastructure/services/formatters/table_output_formatter.go @@ -2,11 +2,11 @@ package formatters import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" "golang.org/x/exp/maps" "slices" @@ -23,7 +23,7 @@ func (t *TableOutputFormatter) GetName() enums.OutputFormatterType { return enums.Table } -func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output services.OutputInterface, outputFormatterInput *OutputFormatterInput) error { +func (t *TableOutputFormatter) Finish(outputResult *results.OutputResult, output services2.OutputInterface, outputFormatterInput *OutputFormatterInput) error { groupedRules := make(map[string][]violations_rules.RuleInterface) for _, ruleItem := range outputResult.Violations() { @@ -111,7 +111,7 @@ func (t *TableOutputFormatter) formatMultilinePath(dep dependencies.DependencyIn return strings.Join(lines, " -> \n") } -func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output services.OutputInterface, reportUncoveredAsError bool) { +func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output services2.OutputInterface, reportUncoveredAsError bool) { violationCount := len(result.Violations()) skippedViolationCount := len(result.SkippedViolations()) uncoveredCount := len(result.Uncovered()) @@ -152,7 +152,7 @@ func (t *TableOutputFormatter) printSummary(result *results.OutputResult, output style := output.GetStyle() style.NewLine(1) style.DefinitionList( - []services.StringOrArrayOfStringsOrTableSeparator{ + []services2.StringOrArrayOfStringsOrTableSeparator{ {String: "Report"}, {TableSeparator: true}, {StringsMap: map[string]string{"Violations": color.Sprintf("%d", violationsColor, violationCount)}}, @@ -180,7 +180,7 @@ func (t *TableOutputFormatter) uncoveredRow(rule *violations_rules.Uncovered, re return []string{color.Sprintf("Uncovered", uncoveredFg), message} } -func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output services.OutputInterface) { +func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output services2.OutputInterface) { errors := make([]string, 0) for _, e := range result.Errors { @@ -190,7 +190,7 @@ func (t *TableOutputFormatter) printErrors(result *results.OutputResult, output output.GetStyle().Table([]string{color.Sprint("Errors")}, [][]string{errors}) } -func (t *TableOutputFormatter) printWarnings(result *results.OutputResult, output services.OutputInterface) { +func (t *TableOutputFormatter) printWarnings(result *results.OutputResult, output services2.OutputInterface) { warnings := make([]string, 0) for _, w := range result.Warnings { diff --git a/pkg/infrastructure/services/formatters/xml_output_formatter.go b/pkg/infrastructure/services/formatters/xml_output_formatter.go index 5259564..2e706f4 100644 --- a/pkg/infrastructure/services/formatters/xml_output_formatter.go +++ b/pkg/infrastructure/services/formatters/xml_output_formatter.go @@ -3,10 +3,10 @@ package formatters import ( "encoding/xml" "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "os" "path/filepath" ) @@ -23,7 +23,7 @@ func (f *XMLOutputFormatter) GetName() string { return "xml" } -func (f *XMLOutputFormatter) Finish(result results.OutputResult, output services.OutputInterface, input OutputFormatterInput) error { +func (f *XMLOutputFormatter) Finish(result results.OutputResult, output services2.OutputInterface, input OutputFormatterInput) error { xmlData, err := f.createXML(result) if err != nil { return err @@ -38,7 +38,7 @@ func (f *XMLOutputFormatter) Finish(result results.OutputResult, output services return err } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("XML Report dumped to %s", filepath.Clean(*dumpXmlPath))}) return nil } diff --git a/pkg/infrastructure/services/runners/analyse_runner.go b/pkg/infrastructure/services/runners/analyse_runner.go index 28d2928..0e28746 100644 --- a/pkg/infrastructure/services/runners/analyse_runner.go +++ b/pkg/infrastructure/services/runners/analyse_runner.go @@ -3,12 +3,12 @@ package runners import ( "encoding/json" "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" "github.com/hashicorp/go-multierror" "strings" @@ -27,7 +27,7 @@ func NewAnalyseRunner(analyzer *analysers.DependencyLayersAnalyser, formatterPro } } -func (r *AnalyseRunner) Run(options *commands_options.AnalyseOptions, output services.OutputInterface) error { +func (r *AnalyseRunner) Run(options *commands_options.AnalyseOptions, output services2.OutputInterface) error { outputFormatterType, err := enums.NewOutputFormatterTypeFromString(options.Formatter) if err != nil { return err @@ -64,22 +64,22 @@ func (r *AnalyseRunner) Run(options *commands_options.AnalyseOptions, output ser return nil } -func (r *AnalyseRunner) printCollectViolations(output services.OutputInterface) { +func (r *AnalyseRunner) printCollectViolations(output services2.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "collecting violations."}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "collecting violations."}) } } -func (r *AnalyseRunner) printFormattingStart(output services.OutputInterface) { +func (r *AnalyseRunner) printFormattingStart(output services2.OutputInterface) { if output.IsVerbose() { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "formatting dependencies."}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "formatting dependencies."}) } } -func (r *AnalyseRunner) printFormatterError(output services.OutputInterface, formatterName string, error error) { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) - output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterError(output services2.OutputInterface, formatterName string, error error) { + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{Strings: []string{"", fmt.Sprintf("OutputInterface formatter %s threw an Exception:", formatterName), fmt.Sprintf("Message: %s", error.Error()), ""}}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) } var JsonMultiErrFormatFunc = func(es []error) string { @@ -97,19 +97,19 @@ var JsonMultiErrFormatFunc = func(es []error) string { return string(marshalled) } -func (r *AnalyseRunner) printAnalysisException(output services.OutputInterface, exception *multierror.Error) { +func (r *AnalyseRunner) printAnalysisException(output services2.OutputInterface, exception *multierror.Error) { message := []string{"Analysis finished with an Exception.", JsonMultiErrFormatFunc(exception.Errors), ""} - output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: message}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{Strings: message}) } -func (r *AnalyseRunner) printFormatterNotFoundException(output services.OutputInterface, formatterName string) { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) +func (r *AnalyseRunner) printFormatterNotFoundException(output services2.OutputInterface, formatterName string) { + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) knownFormatters := make([]string, 0) for _, formatterType := range r.formatterProvider.GetKnownFormatters() { knownFormatters = append(knownFormatters, string(formatterType)) } - output.GetStyle().Error(services.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: ""}) + output.GetStyle().Error(services2.StringOrArrayOfStrings{Strings: []string{fmt.Sprintf("Output formatter %s not found.", formatterName), "Available formatters:", strings.Join(knownFormatters, ", "), ""}}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: ""}) } diff --git a/pkg/infrastructure/services/runners/changed_files_runner.go b/pkg/infrastructure/services/runners/changed_files_runner.go index 5b899de..7d2fd95 100644 --- a/pkg/infrastructure/services/runners/changed_files_runner.go +++ b/pkg/infrastructure/services/runners/changed_files_runner.go @@ -1,12 +1,12 @@ package runners import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "golang.org/x/exp/maps" "strings" ) @@ -24,7 +24,7 @@ func NewChangedFilesRunner(layerForTokenAnalyser *analysers.LayerForTokenAnalyse } } -func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output services.OutputInterface) error { +func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output services2.OutputInterface) error { layers := make(map[string]string) for _, file := range files { matches, err := r.layerForTokenAnalyser.FindLayerForToken(file, enums.TokenTypeFile) @@ -37,7 +37,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output s } } } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layers), ";")}) if withDependencies { analyseResult, err := r.dependencyLayersAnalyser.Analyse() if err != nil { @@ -59,7 +59,7 @@ func (r *ChangedFilesRunner) Run(files []string, withDependencies bool, output s layerDependencies[layerDependency] = layersDependOnLayers[layerDependency][layerDependency] } } - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: strings.Join(maps.Keys(layerDependencies), ";")}) } return nil } diff --git a/pkg/infrastructure/services/runners/debug_dependencies_runner.go b/pkg/infrastructure/services/runners/debug_dependencies_runner.go index 87f4ee8..f16e540 100644 --- a/pkg/infrastructure/services/runners/debug_dependencies_runner.go +++ b/pkg/infrastructure/services/runners/debug_dependencies_runner.go @@ -2,11 +2,11 @@ package runners import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/violations_rules" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" "github.com/gookit/color" ) diff --git a/pkg/infrastructure/services/runners/debug_layer_runner.go b/pkg/infrastructure/services/runners/debug_layer_runner.go index a6a3e24..e519b39 100644 --- a/pkg/infrastructure/services/runners/debug_layer_runner.go +++ b/pkg/infrastructure/services/runners/debug_layer_runner.go @@ -1,12 +1,12 @@ package runners import ( + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/rules" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type DebugLayerRunner struct { diff --git a/pkg/infrastructure/services/runners/debug_token_runner.go b/pkg/infrastructure/services/runners/debug_token_runner.go index f3980ca..bd06385 100644 --- a/pkg/infrastructure/services/runners/debug_token_runner.go +++ b/pkg/infrastructure/services/runners/debug_token_runner.go @@ -2,10 +2,10 @@ package runners import ( "fmt" + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type DebugTokenRunner struct { @@ -16,14 +16,14 @@ func NewDebugTokenRunner(analyser *analysers.LayerForTokenAnalyser) *DebugTokenR return &DebugTokenRunner{analyser: analyser} } -func (r *DebugTokenRunner) Run(output services.OutputInterface, tokenName string, tokenType enums.TokenType) error { +func (r *DebugTokenRunner) Run(output services2.OutputInterface, tokenName string, tokenType enums.TokenType) error { matches, err := r.analyser.FindLayerForToken(tokenName, tokenType) if err != nil { return apperrors.NewCommandRunExceptionAnalyserException(err) } if len(matches) == 0 { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: fmt.Sprintf("Could not find a token matching \"%s\"", tokenName)}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf("Could not find a token matching \"%s\"", tokenName)}) return nil } diff --git a/pkg/infrastructure/services/runners/debug_unassigned_runner.go b/pkg/infrastructure/services/runners/debug_unassigned_runner.go index beea2e4..4c468bc 100644 --- a/pkg/infrastructure/services/runners/debug_unassigned_runner.go +++ b/pkg/infrastructure/services/runners/debug_unassigned_runner.go @@ -1,9 +1,9 @@ package runners import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type DebugUnassignedRunner struct { @@ -15,18 +15,18 @@ func NewDebugUnassignedRunner(analyser *analysers.UnassignedTokenAnalyser) *Debu } // Run - returns are there any unassigned tokens? -func (d *DebugUnassignedRunner) Run(output services.OutputInterface) (bool, error) { +func (d *DebugUnassignedRunner) Run(output services2.OutputInterface) (bool, error) { unassignedTokens, err := d.analyser.FindUnassignedTokens() if err != nil { return false, apperrors.NewCommandRunExceptionAnalyserException(err) } if len(unassignedTokens) == 0 { - output.WriteLineFormatted(services.StringOrArrayOfStrings{String: "There are no unassigned tokens."}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: "There are no unassigned tokens."}) return false, nil } - output.WriteLineFormatted(services.StringOrArrayOfStrings{Strings: unassignedTokens}) + output.WriteLineFormatted(services2.StringOrArrayOfStrings{Strings: unassignedTokens}) return true, err } diff --git a/pkg/infrastructure/services/runners/debug_unused_runner.go b/pkg/infrastructure/services/runners/debug_unused_runner.go index 4434046..0339ba7 100644 --- a/pkg/infrastructure/services/runners/debug_unused_runner.go +++ b/pkg/infrastructure/services/runners/debug_unused_runner.go @@ -2,9 +2,9 @@ package runners import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/analysers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" ) type DebugUnusedRunner struct { diff --git a/pkg/infrastructure/services/symfony_output.go b/pkg/infrastructure/services/symfony_output.go index eaa9ec7..dce59ef 100644 --- a/pkg/infrastructure/services/symfony_output.go +++ b/pkg/infrastructure/services/symfony_output.go @@ -1,14 +1,15 @@ package services import ( + services2 "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/gookit/color" ) type SymfonyOutput struct { - style OutputStyleInterface + style services2.OutputStyleInterface } -func NewSymfonyOutput(style OutputStyleInterface) *SymfonyOutput { +func NewSymfonyOutput(style services2.OutputStyleInterface) *SymfonyOutput { return &SymfonyOutput{ style: style, } @@ -18,7 +19,7 @@ func (o *SymfonyOutput) WriteFormatted(message string) { color.Print(message) } -func (o *SymfonyOutput) WriteLineFormatted(message StringOrArrayOfStrings) { +func (o *SymfonyOutput) WriteLineFormatted(message services2.StringOrArrayOfStrings) { color.Println(message.ToString()) } @@ -26,7 +27,7 @@ func (o *SymfonyOutput) WriteRaw(message string) { color.Println(message) } -func (o *SymfonyOutput) GetStyle() OutputStyleInterface { +func (o *SymfonyOutput) GetStyle() services2.OutputStyleInterface { return o.style } From e6a2699739fc075332ace17b140e082fbb917d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 19:12:20 +0300 Subject: [PATCH 35/40] refactor: structure --- cmd/{go_deptrac => }/main.go | 2 +- cmd/ttt/main.go | 14 ---- examples/run_test.go | 6 +- examples/simple_invalid_mvc/run_test.go | 2 +- examples/simple_mvc/run_test.go | 2 +- pkg/application/dtos/collectable.go | 6 +- .../event_dispatchers/event_dispatcher.go | 38 +++++++++-- pkg/application/event_handlers/console.go | 2 +- .../event_handlers/event_handler.go | 67 ------------------- .../analysers/layer_for_token_analyser.go | 2 +- .../services/ast_map/ast_loader.go | 6 +- .../services/ast_map/ast_map_extractor.go | 6 +- .../ast_map/ast_map_extractor_test.go | 4 +- .../services/collector_provider.go | 8 +-- .../inheritance_level_collector.go | 2 +- .../inherits_collector.go | 2 +- .../dependencies_collectors/uses_collector.go | 2 +- .../services/dependency_resolver.go | 4 +- .../emitters/class_dependency_emitter.go | 4 +- .../class_superglobal_dependency_emitter.go | 4 +- .../emitters/dependency_emitter_interface.go | 4 +- .../emitters/file_dependency_emitter.go | 4 +- .../function_call_dependency_emitter.go | 6 +- .../emitters/function_dependency_emitter.go | 4 +- ...function_superglobal_dependency_emitter.go | 4 +- .../emitters/uses_dependency_emitter.go | 7 +- .../services/inheritance_flattener.go | 4 +- .../services/parsers/nikic_php_parser.go | 6 +- .../file_reference_visitor.go | 6 +- .../file_reference_visitor_test.go | 4 +- .../class_like_reference_builder.go | 12 ++-- .../file_reference_builder.go | 3 +- .../references_builders/reference_builder.go | 34 +++++----- .../function_call_resolver.go | 4 +- .../function_like_extractor.go | 18 ++--- .../keyword_extractor.go | 4 +- .../property_extractor.go | 2 +- .../reference_extractor_interface.go | 2 +- pkg/application/services/token_resolver.go | 4 +- .../services/types/type_resolver.go | 19 +++++- .../{ast_map => ast_inherits}/ast_inherit.go | 2 +- .../dtos/{ast_map => ast_maps}/ast_map.go | 19 +++--- pkg/domain/dtos/dependencies/dependency.go | 4 -- .../dtos/dependencies/dependency_token.go | 12 ++++ .../dtos/dependencies/inherit_dependency.go | 6 +- pkg/domain/dtos/tokens/class_like_token.go | 2 + pkg/domain/dtos/tokens/dependency_token.go | 14 ---- pkg/domain/dtos/tokens/file_token.go | 2 + pkg/domain/dtos/tokens/function_token.go | 2 + pkg/domain/dtos/tokens/token.go | 1 + .../tokens_references/class_like_reference.go | 11 +-- .../dtos/tokens_references/file_reference.go | 7 +- .../tokens_references/function_reference.go | 7 +- ...n_reference_with_dependencies_interface.go | 4 +- .../services}/collector_interface.go | 2 +- pkg/domain/services/node_namer_test.go | 19 ------ pkg/domain/stopwatch/period.go | 13 ++++ pkg/domain/utils/parse_yaml_file_test.go | 19 ------ .../app/{application.go => app.go} | 34 ++++------ pkg/infrastructure/di/cache.go | 5 +- pkg/infrastructure/di/container_builder.go | 4 +- .../di/service_container_builder.go | 6 +- pkg/infrastructure/di/services.go | 66 +++++++++++++----- .../di/test_container_provider.go | 3 +- resources/test/example.yaml | 35 ---------- resources/test/parse_yaml_file_test_1.yaml | 14 ---- .../app => tests}/application_test.go | 5 +- 67 files changed, 285 insertions(+), 367 deletions(-) rename cmd/{go_deptrac => }/main.go (77%) delete mode 100644 cmd/ttt/main.go delete mode 100644 pkg/application/event_handlers/event_handler.go rename pkg/application/services/{extractors => references_extractors}/function_call_resolver.go (93%) rename pkg/application/services/{extractors => references_extractors}/function_like_extractor.go (70%) rename pkg/application/services/{extractors => references_extractors}/keyword_extractor.go (88%) rename pkg/application/services/{extractors => references_extractors}/property_extractor.go (96%) rename pkg/application/services/{extractors => references_extractors}/reference_extractor_interface.go (95%) rename pkg/domain/dtos/{ast_map => ast_inherits}/ast_inherit.go (98%) rename pkg/domain/dtos/{ast_map => ast_maps}/ast_map.go (90%) create mode 100644 pkg/domain/dtos/dependencies/dependency_token.go delete mode 100644 pkg/domain/dtos/tokens/dependency_token.go rename pkg/{application/services/dependencies_collectors => domain/services}/collector_interface.go (91%) delete mode 100644 pkg/domain/services/node_namer_test.go delete mode 100644 pkg/domain/utils/parse_yaml_file_test.go rename pkg/infrastructure/app/{application.go => app.go} (72%) delete mode 100644 resources/test/example.yaml delete mode 100644 resources/test/parse_yaml_file_test_1.yaml rename {pkg/infrastructure/app => tests}/application_test.go (70%) diff --git a/cmd/go_deptrac/main.go b/cmd/main.go similarity index 77% rename from cmd/go_deptrac/main.go rename to cmd/main.go index 781fdc7..f0b3b00 100644 --- a/cmd/go_deptrac/main.go +++ b/cmd/main.go @@ -5,5 +5,5 @@ import ( ) func main() { - app.NewApplication().Run() + app.Run() } diff --git a/cmd/ttt/main.go b/cmd/ttt/main.go deleted file mode 100644 index a09ebfd..0000000 --- a/cmd/ttt/main.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "fmt" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" - "github.com/alexflint/go-arg" -) - -func main() { - options := commands_options.InitOptions{} - arg.MustParse(&options) - - fmt.Println(options) -} diff --git a/examples/run_test.go b/examples/run_test.go index 9a5490b..1ae0af9 100644 --- a/examples/run_test.go +++ b/examples/run_test.go @@ -15,20 +15,20 @@ func TestRunSimpleCleanarch(t *testing.T) { configArg := "--config=examples/simple_clean_arch/deptrac.yaml" os.Args = []string{"", configArg, "analyse"} flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - app.NewApplication().Run() + app.NewApp().Run() }) t.Run("simple_invalid_mvc", func(t *testing.T) { configArg := "--config=examples/simple_invalid_mvc/deptrac.yaml" os.Args = []string{"", configArg, "analyse"} flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - app.NewApplication().Run() + app.NewApp().Run() }) t.Run("simple_mvc", func(t *testing.T) { configArg := "--config=examples/simple_mvc/deptrac.yaml" os.Args = []string{"", configArg, "analyse"} flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - app.NewApplication().Run() + app.NewApp().Run() }) } diff --git a/examples/simple_invalid_mvc/run_test.go b/examples/simple_invalid_mvc/run_test.go index 363416e..c8b8c37 100644 --- a/examples/simple_invalid_mvc/run_test.go +++ b/examples/simple_invalid_mvc/run_test.go @@ -21,6 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - app.NewApplication(). + app.NewApp(). Run() } diff --git a/examples/simple_mvc/run_test.go b/examples/simple_mvc/run_test.go index 863802a..4fc3339 100644 --- a/examples/simple_mvc/run_test.go +++ b/examples/simple_mvc/run_test.go @@ -21,6 +21,6 @@ func TestRun(t *testing.T) { // t.Fatal(err) //} - app.NewApplication(). + app.NewApp(). Run() } diff --git a/pkg/application/dtos/collectable.go b/pkg/application/dtos/collectable.go index 65d2e99..d57eae9 100644 --- a/pkg/application/dtos/collectable.go +++ b/pkg/application/dtos/collectable.go @@ -1,14 +1,14 @@ package dtos import ( - "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" ) type Collectable struct { - Collector dependencies_collectors.CollectorInterface + Collector services.CollectorInterface Attributes map[string]interface{} } -func NewCollectable(collector dependencies_collectors.CollectorInterface, attributes map[string]interface{}) *Collectable { +func NewCollectable(collector services.CollectorInterface, attributes map[string]interface{}) *Collectable { return &Collectable{Collector: collector, Attributes: attributes} } diff --git a/pkg/application/event_dispatchers/event_dispatcher.go b/pkg/application/event_dispatchers/event_dispatcher.go index 96dfdad..e130f27 100644 --- a/pkg/application/event_dispatchers/event_dispatcher.go +++ b/pkg/application/event_dispatchers/event_dispatcher.go @@ -2,7 +2,7 @@ package event_dispatchers import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + "github.com/elliotchance/orderedmap/v2" "reflect" "slices" ) @@ -16,15 +16,13 @@ type EventDispatcher struct { } func NewEventDispatcher(isDebug bool) EventDispatcherInterface { - return &EventDispatcher{ - isDebug: isDebug, - } + return &EventDispatcher{isDebug: isDebug} } func (d *EventDispatcher) DispatchEvent(event interface{}) error { typeName := reflect.TypeOf(event).String() - handlers, ok := event_handlers.Map.Get(typeName) + handlers, ok := Map.Get(typeName) if !ok { return nil // No subscribers registered for this event @@ -67,3 +65,33 @@ func (d *EventDispatcher) DispatchEvent(event interface{}) error { return nil } + +type EventHandlerInterface interface { + HandleEvent(rawEvent interface{}, stopPropagation func()) error +} + +var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventHandlerInterface]] + +const DefaultPriority = 0 + +func Reg(event interface{}, sub EventHandlerInterface, priority int) { + eventTypeof := reflect.TypeOf(event) + eventType := eventTypeof.String() + + // Get or create event type row + e, ok := Map.Get(eventType) + if !ok { + e = orderedmap.NewOrderedMap[int, []EventHandlerInterface]() + Map.Set(eventType, e) + } + + // Get or create priority column + subs, ok := e.Get(priority) + if !ok { + subs = []EventHandlerInterface{} + } + + subs = append(subs, sub) + + e.Set(priority, subs) +} diff --git a/pkg/application/event_handlers/console.go b/pkg/application/event_handlers/console.go index db97e90..edf0372 100644 --- a/pkg/application/event_handlers/console.go +++ b/pkg/application/event_handlers/console.go @@ -85,5 +85,5 @@ func (s *Console) printMessageWithTime(event string, messageWithTime string, mes return } - s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToSeconds())}) + s.output.WriteLineFormatted(services2.StringOrArrayOfStrings{String: fmt.Sprintf(messageWithTime, period.ToFloatSeconds())}) } diff --git a/pkg/application/event_handlers/event_handler.go b/pkg/application/event_handlers/event_handler.go deleted file mode 100644 index 75c714d..0000000 --- a/pkg/application/event_handlers/event_handler.go +++ /dev/null @@ -1,67 +0,0 @@ -package event_handlers - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/events" - "github.com/elliotchance/orderedmap/v2" - "reflect" -) - -type EventHandlerInterface interface { - HandleEvent(rawEvent interface{}, stopPropagation func()) error -} - -const DefaultPriority = 0 - -var Map *orderedmap.OrderedMap[string, *orderedmap.OrderedMap[int, []EventHandlerInterface]] - -func RegForAnalyseCommand(consoleSubscriber *Console, progressSubscriber *Progress, withProgress bool) { - processEvent := &events.ProcessEvent{} - postProcessEvent := &events.PostProcessEvent{} - preCreateAstMapEvent := &events.PreCreateAstMapEvent{} - postCreateAstMapEvent := &events.PostCreateAstMapEvent{} - astFileAnalysedEvent := &events.AstFileAnalysedEvent{} - astFileSyntaxErrorEvent := &events.AstFileSyntaxErrorEvent{} - preEmitEvent := &events.PreEmitEvent{} - postEmitEvent := &events.PostEmitEvent{} - preFlattenEvent := &events.PreFlattenEvent{} - postFlattenEvent := &events.PostFlattenEvent{} - - Reg(preCreateAstMapEvent, consoleSubscriber, DefaultPriority) - Reg(postCreateAstMapEvent, consoleSubscriber, DefaultPriority) - Reg(processEvent, consoleSubscriber, DefaultPriority) - Reg(postProcessEvent, consoleSubscriber, DefaultPriority) - Reg(astFileAnalysedEvent, consoleSubscriber, DefaultPriority) - Reg(astFileSyntaxErrorEvent, consoleSubscriber, DefaultPriority) - Reg(preEmitEvent, consoleSubscriber, DefaultPriority) - Reg(postEmitEvent, consoleSubscriber, DefaultPriority) - Reg(preFlattenEvent, consoleSubscriber, DefaultPriority) - Reg(postFlattenEvent, consoleSubscriber, DefaultPriority) - - if withProgress { - Reg(preCreateAstMapEvent, progressSubscriber, DefaultPriority) - Reg(postCreateAstMapEvent, progressSubscriber, 1) - Reg(astFileAnalysedEvent, progressSubscriber, DefaultPriority) - } -} - -func Reg(event interface{}, sub EventHandlerInterface, priority int) { - eventTypeof := reflect.TypeOf(event) - eventType := eventTypeof.String() - - // Get or create event type row - e, ok := Map.Get(eventType) - if !ok { - e = orderedmap.NewOrderedMap[int, []EventHandlerInterface]() - Map.Set(eventType, e) - } - - // Get or create priority column - subs, ok := e.Get(priority) - if !ok { - subs = []EventHandlerInterface{} - } - - subs = append(subs, sub) - - e.Set(priority, subs) -} diff --git a/pkg/application/services/analysers/layer_for_token_analyser.go b/pkg/application/services/analysers/layer_for_token_analyser.go index a4b931f..c3f2aeb 100644 --- a/pkg/application/services/analysers/layer_for_token_analyser.go +++ b/pkg/application/services/analysers/layer_for_token_analyser.go @@ -4,7 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" - dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "github.com/pkg/errors" diff --git a/pkg/application/services/ast_map/ast_loader.go b/pkg/application/services/ast_map/ast_loader.go index ee9aab6..84c3c16 100644 --- a/pkg/application/services/ast_map/ast_loader.go +++ b/pkg/application/services/ast_map/ast_loader.go @@ -3,7 +3,7 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) @@ -20,7 +20,7 @@ func NewAstLoader(parser parsers.ParserInterface, eventDispatcher event_dispatch } } -func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { +func (l *AstLoader) CreateAstMap(files []string) (*ast_maps.AstMap, error) { references := make([]*tokens_references.FileReference, 0) err := l.eventDispatcher.DispatchEvent(events.NewPreCreateAstMapEvent(len(files))) @@ -47,7 +47,7 @@ func (l *AstLoader) CreateAstMap(files []string) (*ast_map.AstMap, error) { } } - astMap := ast_map.NewAstMap(references) + astMap := ast_maps.NewAstMap(references) errDispatchPostCreateMap := l.eventDispatcher.DispatchEvent(events.NewPostCreateAstMapEvent()) if errDispatchPostCreateMap != nil { diff --git a/pkg/application/services/ast_map/ast_map_extractor.go b/pkg/application/services/ast_map/ast_map_extractor.go index a896119..c18df54 100644 --- a/pkg/application/services/ast_map/ast_map_extractor.go +++ b/pkg/application/services/ast_map/ast_map_extractor.go @@ -2,13 +2,13 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" ) type AstMapExtractor struct { inputCollector input_collectors.InputCollector astLoader *AstLoader - astMapCache *ast_map.AstMap + astMapCache *ast_maps.AstMap } func NewAstMapExtractor(inputCollector input_collectors.InputCollector, astLoader *AstLoader) *AstMapExtractor { @@ -19,7 +19,7 @@ func NewAstMapExtractor(inputCollector input_collectors.InputCollector, astLoade } } -func (e *AstMapExtractor) Extract() (*ast_map.AstMap, error) { +func (e *AstMapExtractor) Extract() (*ast_maps.AstMap, error) { if e.astMapCache == nil { collected, err := e.inputCollector.Collect() diff --git a/pkg/application/services/ast_map/ast_map_extractor_test.go b/pkg/application/services/ast_map/ast_map_extractor_test.go index bbcd16a..a37526f 100644 --- a/pkg/application/services/ast_map/ast_map_extractor_test.go +++ b/pkg/application/services/ast_map/ast_map_extractor_test.go @@ -2,9 +2,9 @@ package ast_map import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "os" "testing" @@ -44,7 +44,7 @@ func TestAstMapExtractorExtractWorkedFine(t *testing.T) { nil, ), nil, - []extractors.ReferenceExtractorInterface{}, + []references_extractors.ReferenceExtractorInterface{}, ), nil, ) diff --git a/pkg/application/services/collector_provider.go b/pkg/application/services/collector_provider.go index b48f711..2605e58 100644 --- a/pkg/application/services/collector_provider.go +++ b/pkg/application/services/collector_provider.go @@ -1,25 +1,25 @@ package services import ( - "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" + "github.com/KoNekoD/go-deptrac/pkg/domain/services" "golang.org/x/exp/maps" ) type CollectorProvider struct { - collectors map[enums.CollectorType]dependencies_collectors.CollectorInterface + collectors map[enums.CollectorType]services.CollectorInterface } func NewCollectorProvider() *CollectorProvider { return &CollectorProvider{} } -func (p *CollectorProvider) Set(collectors map[enums.CollectorType]dependencies_collectors.CollectorInterface) *CollectorProvider { +func (p *CollectorProvider) Set(collectors map[enums.CollectorType]services.CollectorInterface) *CollectorProvider { p.collectors = collectors return p } -func (p *CollectorProvider) Get(id enums.CollectorType) dependencies_collectors.CollectorInterface { +func (p *CollectorProvider) Get(id enums.CollectorType) services.CollectorInterface { return p.collectors[id] } diff --git a/pkg/application/services/dependencies_collectors/inheritance_level_collector.go b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go index 96fc4ee..447b064 100644 --- a/pkg/application/services/dependencies_collectors/inheritance_level_collector.go +++ b/pkg/application/services/dependencies_collectors/inheritance_level_collector.go @@ -3,7 +3,7 @@ package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" diff --git a/pkg/application/services/dependencies_collectors/inherits_collector.go b/pkg/application/services/dependencies_collectors/inherits_collector.go index ef8e510..b825cbd 100644 --- a/pkg/application/services/dependencies_collectors/inherits_collector.go +++ b/pkg/application/services/dependencies_collectors/inherits_collector.go @@ -3,7 +3,7 @@ package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" diff --git a/pkg/application/services/dependencies_collectors/uses_collector.go b/pkg/application/services/dependencies_collectors/uses_collector.go index 7dca0ed..a8b58c1 100644 --- a/pkg/application/services/dependencies_collectors/uses_collector.go +++ b/pkg/application/services/dependencies_collectors/uses_collector.go @@ -3,7 +3,7 @@ package dependencies_collectors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + dtosAstMap "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" diff --git a/pkg/application/services/dependency_resolver.go b/pkg/application/services/dependency_resolver.go index 034810c..4e0d640 100644 --- a/pkg/application/services/dependency_resolver.go +++ b/pkg/application/services/dependency_resolver.go @@ -4,7 +4,7 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -28,7 +28,7 @@ func NewDependencyResolver(typesConfig *configs.AnalyserConfig, emitterLocator m } } -func (r *DependencyResolver) Resolve(astMap *ast_map.AstMap) (*dependencies.DependencyList, error) { +func (r *DependencyResolver) Resolve(astMap *ast_maps.AstMap) (*dependencies.DependencyList, error) { result := dependencies.NewDependencyList() for _, typeConfig := range r.config.Types { diff --git a/pkg/application/services/emitters/class_dependency_emitter.go b/pkg/application/services/emitters/class_dependency_emitter.go index 02825be..fa90562 100644 --- a/pkg/application/services/emitters/class_dependency_emitter.go +++ b/pkg/application/services/emitters/class_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -17,7 +17,7 @@ func (c *ClassDependencyEmitter) GetName() string { return "ClassDependencyEmitter" } -func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (c *ClassDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { classLikeName := classReference.GetToken().(*tokens.ClassLikeToken) diff --git a/pkg/application/services/emitters/class_superglobal_dependency_emitter.go b/pkg/application/services/emitters/class_superglobal_dependency_emitter.go index 8e3f144..bebaba4 100644 --- a/pkg/application/services/emitters/class_superglobal_dependency_emitter.go +++ b/pkg/application/services/emitters/class_superglobal_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (c ClassSuperglobalDependencyEmitter) GetName() string { return "ClassSuperglobalDependencyEmitter" } -func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (c ClassSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, classReference := range astMap.GetClassLikeReferences() { for _, dependencyToken := range classReference.Dependencies { if dependencyToken.Context.DependencyType != enums.DependencyTypeSuperGlobalVariable { diff --git a/pkg/application/services/emitters/dependency_emitter_interface.go b/pkg/application/services/emitters/dependency_emitter_interface.go index 2d77959..ef23b5e 100644 --- a/pkg/application/services/emitters/dependency_emitter_interface.go +++ b/pkg/application/services/emitters/dependency_emitter_interface.go @@ -1,11 +1,11 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" ) type DependencyEmitterInterface interface { GetName() string - ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) + ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) } diff --git a/pkg/application/services/emitters/file_dependency_emitter.go b/pkg/application/services/emitters/file_dependency_emitter.go index 16bf801..69bb951 100644 --- a/pkg/application/services/emitters/file_dependency_emitter.go +++ b/pkg/application/services/emitters/file_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FileDependencyEmitter) GetName() string { return "FileDependencyEmitter" } -func (f FileDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f FileDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, dependencyToken := range fileReference.Dependencies { if dependencyToken.Context.DependencyType == enums.DependencyTypeUse { diff --git a/pkg/application/services/emitters/function_call_dependency_emitter.go b/pkg/application/services/emitters/function_call_dependency_emitter.go index 717257e..9acbd3a 100644 --- a/pkg/application/services/emitters/function_call_dependency_emitter.go +++ b/pkg/application/services/emitters/function_call_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" @@ -17,7 +17,7 @@ func NewFunctionCallDependencyEmitter() *FunctionCallDependencyEmitter { func (f *FunctionCallDependencyEmitter) GetName() string { return "FunctionCallDependencyEmitter" } -func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { references := make([]tokens_references.TokenReferenceWithDependenciesInterface, 0) for _, reference := range astMap.GetClassLikeReferences() { references = append(references, reference) @@ -37,7 +37,7 @@ func (f *FunctionCallDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, f.createDependenciesForReferences(references, astMap, dependencyList) } -func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens_references.TokenReferenceWithDependenciesInterface, astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionCallDependencyEmitter) createDependenciesForReferences(references []tokens_references.TokenReferenceWithDependenciesInterface, astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, referenceInterface := range references { reference := referenceInterface.(tokens_references.TokenReferenceWithDependenciesInterface) for _, dependencyToken := range reference.GetDependencies() { diff --git a/pkg/application/services/emitters/function_dependency_emitter.go b/pkg/application/services/emitters/function_dependency_emitter.go index 42754e6..5616421 100644 --- a/pkg/application/services/emitters/function_dependency_emitter.go +++ b/pkg/application/services/emitters/function_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f FunctionDependencyEmitter) GetName() string { return "FunctionDependencyEmitter" } -func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f FunctionDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { diff --git a/pkg/application/services/emitters/function_superglobal_dependency_emitter.go b/pkg/application/services/emitters/function_superglobal_dependency_emitter.go index e6cf533..2e63894 100644 --- a/pkg/application/services/emitters/function_superglobal_dependency_emitter.go +++ b/pkg/application/services/emitters/function_superglobal_dependency_emitter.go @@ -1,7 +1,7 @@ package emitters import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -16,7 +16,7 @@ func (f *FunctionSuperglobalDependencyEmitter) GetName() string { return "FunctionSuperglobalDependencyEmitter" } -func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *FunctionSuperglobalDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, fileReference := range astMap.GetFileReferences() { for _, astFunctionReference := range fileReference.FunctionReferences { for _, dependencyToken := range astFunctionReference.Dependencies { diff --git a/pkg/application/services/emitters/uses_dependency_emitter.go b/pkg/application/services/emitters/uses_dependency_emitter.go index 9bdee02..f56eb93 100644 --- a/pkg/application/services/emitters/uses_dependency_emitter.go +++ b/pkg/application/services/emitters/uses_dependency_emitter.go @@ -2,9 +2,8 @@ package emitters import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" "strings" @@ -20,7 +19,7 @@ func (u *UsesDependencyEmitter) GetName() string { return "UsesDependencyEmitter" } -func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { references := make([]tokens_references.TaggedTokenReferenceInterface, 0) for _, structLikeReference := range astMap.GetClassLikeReferences() { references = append(references, structLikeReference) @@ -52,7 +51,7 @@ func (u *UsesDependencyEmitter) ApplyDependencies(astMap ast_map.AstMap, depende } } -func (u *UsesDependencyEmitter) IsFQDN(dependency *tokens.DependencyToken, FQDNIndex *dtos.FQDNIndexNode) bool { +func (u *UsesDependencyEmitter) IsFQDN(dependency *dependencies.DependencyToken, FQDNIndex *dtos.FQDNIndexNode) bool { dependencyFQDN := dependency.Token.ToString() pathSplit := strings.Split(dependencyFQDN, "\\") value := FQDNIndex.GetNestedNode(pathSplit) diff --git a/pkg/application/services/inheritance_flattener.go b/pkg/application/services/inheritance_flattener.go index c95d447..48a2b8a 100644 --- a/pkg/application/services/inheritance_flattener.go +++ b/pkg/application/services/inheritance_flattener.go @@ -1,7 +1,7 @@ package services import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -12,7 +12,7 @@ func NewInheritanceFlattener() *InheritanceFlattener { return &InheritanceFlattener{} } -func (f *InheritanceFlattener) FlattenDependencies(astMap ast_map.AstMap, dependencyList *dependencies.DependencyList) { +func (f *InheritanceFlattener) FlattenDependencies(astMap ast_maps.AstMap, dependencyList *dependencies.DependencyList) { for _, classLikeReference := range astMap.GetClassLikeReferences() { classLikeName := classLikeReference.GetToken().(*tokens.ClassLikeToken) for _, inherit := range astMap.GetClassInherits(classLikeName) { diff --git a/pkg/application/services/parsers/nikic_php_parser.go b/pkg/application/services/parsers/nikic_php_parser.go index 8ee405a..88ea76a 100644 --- a/pkg/application/services/parsers/nikic_php_parser.go +++ b/pkg/application/services/parsers/nikic_php_parser.go @@ -2,9 +2,9 @@ package parsers import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/reference_visitors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/services" @@ -53,10 +53,10 @@ type NikicPhpParser struct { cache ast_file_reference_cache.AstFileReferenceCacheInterface typeResolver *types.TypeResolver nodeNamer *services.NodeNamer - extractors []extractors.ReferenceExtractorInterface + extractors []references_extractors.ReferenceExtractorInterface } -func NewNikicPhpParser(cache ast_file_reference_cache.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []extractors.ReferenceExtractorInterface) *NikicPhpParser { +func NewNikicPhpParser(cache ast_file_reference_cache.AstFileReferenceCacheInterface, typeResolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors []references_extractors.ReferenceExtractorInterface) *NikicPhpParser { return &NikicPhpParser{ classAstMap: make(map[string]*ast.Ident), cache: cache, diff --git a/pkg/application/services/reference_visitors/file_reference_visitor.go b/pkg/application/services/reference_visitors/file_reference_visitor.go index 145c834..9531834 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor.go @@ -1,8 +1,8 @@ package reference_visitors import ( - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/services" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" @@ -13,7 +13,7 @@ import ( ) type FileReferenceVisitor struct { - dependencyResolvers []extractors.ReferenceExtractorInterface + dependencyResolvers []references_extractors.ReferenceExtractorInterface currentTypeScope *types.TypeScope currentReference references_builders.ReferenceBuilderInterface fileReferenceBuilder *references_builders.FileReferenceBuilder @@ -23,7 +23,7 @@ type FileReferenceVisitor struct { nestingStack []ast.Node } -func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...extractors.ReferenceExtractorInterface) *FileReferenceVisitor { +func NewFileReferenceVisitor(fileReferenceBuilder *references_builders.FileReferenceBuilder, resolver *types.TypeResolver, nodeNamer *services.NodeNamer, extractors ...references_extractors.ReferenceExtractorInterface) *FileReferenceVisitor { return &FileReferenceVisitor{ currentReference: fileReferenceBuilder, fileReferenceBuilder: fileReferenceBuilder, diff --git a/pkg/application/services/reference_visitors/file_reference_visitor_test.go b/pkg/application/services/reference_visitors/file_reference_visitor_test.go index 9d63bcb..20c869e 100644 --- a/pkg/application/services/reference_visitors/file_reference_visitor_test.go +++ b/pkg/application/services/reference_visitors/file_reference_visitor_test.go @@ -2,8 +2,8 @@ package reference_visitors import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" _ "github.com/KoNekoD/go-deptrac/resources" "go/ast" @@ -21,7 +21,7 @@ func TestFileReferenceVisitorOk(t *testing.T) { t.Error(err) } - referenceExtractorInterfaces := make([]extractors.ReferenceExtractorInterface, 0) + referenceExtractorInterfaces := make([]references_extractors.ReferenceExtractorInterface, 0) fileReferenceVisitor := NewFileReferenceVisitor( references_builders.CreateFileReferenceBuilder(file), diff --git a/pkg/application/services/references_builders/class_like_reference_builder.go b/pkg/application/services/references_builders/class_like_reference_builder.go index dc95a01..f522eaa 100644 --- a/pkg/application/services/references_builders/class_like_reference_builder.go +++ b/pkg/application/services/references_builders/class_like_reference_builder.go @@ -2,7 +2,7 @@ package references_builders import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_inherits" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -11,7 +11,7 @@ import ( type ClassLikeReferenceBuilder struct { *ReferenceBuilder - inherits []*ast_map.AstInherit + inherits []*ast_inherits.AstInherit classLikeToken *tokens.ClassLikeToken classLikeType *enums.ClassLikeType @@ -21,7 +21,7 @@ type ClassLikeReferenceBuilder struct { func NewClassLikeReferenceBuilder(tokenTemplates []string, filepath string, classLikeToken *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, tags map[string][]string) *ClassLikeReferenceBuilder { return &ClassLikeReferenceBuilder{ ReferenceBuilder: NewReferenceBuilder(tokenTemplates, filepath), - inherits: make([]*ast_map.AstInherit, 0), + inherits: make([]*ast_inherits.AstInherit, 0), classLikeToken: classLikeToken, classLikeType: classLikeType, tags: tags, @@ -54,16 +54,16 @@ func (b *ClassLikeReferenceBuilder) Build() *tokens_references.ClassLikeReferenc } func (b *ClassLikeReferenceBuilder) Extends(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeExtends, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_inherits.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeExtends, make([]*ast_inherits.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Implements(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeImplements, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_inherits.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeImplements, make([]*ast_inherits.AstInherit, 0))) return b } func (b *ClassLikeReferenceBuilder) Trait(classLikeName string, occursAtLine int) *ClassLikeReferenceBuilder { - b.inherits = append(b.inherits, ast_map.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeUses, make([]*ast_map.AstInherit, 0))) + b.inherits = append(b.inherits, ast_inherits.NewAstInherit(tokens.NewClassLikeTokenFromFQCN(classLikeName), dtos.NewFileOccurrence(b.Filepath, occursAtLine), enums.AstInheritTypeUses, make([]*ast_inherits.AstInherit, 0))) return b } diff --git a/pkg/application/services/references_builders/file_reference_builder.go b/pkg/application/services/references_builders/file_reference_builder.go index dcd9feb..1280105 100644 --- a/pkg/application/services/references_builders/file_reference_builder.go +++ b/pkg/application/services/references_builders/file_reference_builder.go @@ -1,6 +1,7 @@ package references_builders import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -17,7 +18,7 @@ func CreateFileReferenceBuilder(filepath string) *FileReferenceBuilder { } func (b *FileReferenceBuilder) UseStatement(classLikeName string, occursAtLine int) *FileReferenceBuilder { - b.Dependencies = append(b.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, enums.DependencyTypeUse))) + b.Dependencies = append(b.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), b.CreateContext(occursAtLine, enums.DependencyTypeUse))) return b } diff --git a/pkg/application/services/references_builders/reference_builder.go b/pkg/application/services/references_builders/reference_builder.go index 412cfcd..1a0d560 100644 --- a/pkg/application/services/references_builders/reference_builder.go +++ b/pkg/application/services/references_builders/reference_builder.go @@ -9,7 +9,7 @@ import ( ) type ReferenceBuilder struct { - Dependencies []*tokens.DependencyToken + Dependencies []*dependencies.DependencyToken tokenTemplates []string Filepath string ref *tokens_references.FileReference @@ -39,7 +39,7 @@ type ReferenceBuilderInterface interface { func NewReferenceBuilder(tokenTemplates []string, filepath string) *ReferenceBuilder { return &ReferenceBuilder{ - Dependencies: make([]*tokens.DependencyToken, 0), + Dependencies: make([]*dependencies.DependencyToken, 0), tokenTemplates: tokenTemplates, Filepath: filepath, } @@ -55,77 +55,77 @@ func (r *ReferenceBuilder) CreateContext(occursAtLine int, dependencyType enums. // UnresolvedFunctionCall - Unqualified function and constant names inside a namespace cannot be statically resolved. Inside a namespace Foo, a call to strlen() may either refer to the namespaced \Foo\strlen(), or the global \strlen(). Because PHP-ParserInterface does not have the necessary context to decide this, such names are left unresolved. func (r *ReferenceBuilder) UnresolvedFunctionCall(functionName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, enums.DependencyTypeUnresolvedFunctionCall))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewFunctionTokenFromFQCN(functionName), r.CreateContext(occursAtLine, enums.DependencyTypeUnresolvedFunctionCall))) return r } func (r *ReferenceBuilder) Variable(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeVariable))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeVariable))) return r } func (r *ReferenceBuilder) ReturnType(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeReturnType))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeReturnType))) return r } func (r *ReferenceBuilder) ThrowStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeThrow))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeThrow))) return r } func (r *ReferenceBuilder) AnonymousClassExtends(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassExtends))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassExtends))) return r } func (r *ReferenceBuilder) AnonymousClassTrait(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassTrait))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassTrait))) return r } func (r *ReferenceBuilder) ConstFetch(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeConst))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeConst))) return r } func (r *ReferenceBuilder) AnonymousClassImplements(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassImplements))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAnonymousClassImplements))) return r } func (r *ReferenceBuilder) Parameter(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeParameter))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeParameter))) return r } func (r *ReferenceBuilder) Attribute(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAttribute))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeAttribute))) return r } func (r *ReferenceBuilder) Instanceof(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeInstanceof))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeInstanceof))) return r } func (r *ReferenceBuilder) NewStatement(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeNew))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeNew))) return r } func (r *ReferenceBuilder) StaticProperty(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticProperty))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticProperty))) return r } func (r *ReferenceBuilder) StaticMethod(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticMethod))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeStaticMethod))) return r } func (r *ReferenceBuilder) CatchStmt(classLikeName string, occursAtLine int) *ReferenceBuilder { - r.Dependencies = append(r.Dependencies, tokens.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeCatch))) + r.Dependencies = append(r.Dependencies, dependencies.NewDependencyToken(tokens.NewClassLikeTokenFromFQCN(classLikeName), r.CreateContext(occursAtLine, enums.DependencyTypeCatch))) return r } diff --git a/pkg/application/services/extractors/function_call_resolver.go b/pkg/application/services/references_extractors/function_call_resolver.go similarity index 93% rename from pkg/application/services/extractors/function_call_resolver.go rename to pkg/application/services/references_extractors/function_call_resolver.go index 494f5c1..0b43cce 100644 --- a/pkg/application/services/extractors/function_call_resolver.go +++ b/pkg/application/services/references_extractors/function_call_resolver.go @@ -1,4 +1,4 @@ -package extractors +package references_extractors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" @@ -21,7 +21,7 @@ func (e *FunctionCallResolver) ProcessNode(node ast.Node, referenceBuilder refer return } - for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, typedNode.Fun) { + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, typedNode) { referenceBuilder.UnresolvedFunctionCall(classLikeName, utils.GetLineByPosition(typeScope.FilePath, int(typedNode.Fun.Pos()))) } } diff --git a/pkg/application/services/extractors/function_like_extractor.go b/pkg/application/services/references_extractors/function_like_extractor.go similarity index 70% rename from pkg/application/services/extractors/function_like_extractor.go rename to pkg/application/services/references_extractors/function_like_extractor.go index 576fc5c..fa29ad0 100644 --- a/pkg/application/services/extractors/function_like_extractor.go +++ b/pkg/application/services/references_extractors/function_like_extractor.go @@ -1,4 +1,4 @@ -package extractors +package references_extractors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" @@ -33,15 +33,17 @@ func (e *FunctionLikeExtractor) ProcessNode(node ast.Node, referenceBuilder refe } } - for _, returnType := range typedNode.Results.List { - if nil == returnType.Type { - continue - } + if nil != typedNode.Results { + for _, returnType := range typedNode.Results.List { + if nil == returnType.Type { + continue + } - for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, returnType.Type) { - pos := int(returnType.Type.Pos()) + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, returnType.Type) { + pos := int(returnType.Type.Pos()) - referenceBuilder.ReturnType(classLikeName, utils.GetLineByPosition(typeScope.FilePath, pos)) + referenceBuilder.ReturnType(classLikeName, utils.GetLineByPosition(typeScope.FilePath, pos)) + } } } } diff --git a/pkg/application/services/extractors/keyword_extractor.go b/pkg/application/services/references_extractors/keyword_extractor.go similarity index 88% rename from pkg/application/services/extractors/keyword_extractor.go rename to pkg/application/services/references_extractors/keyword_extractor.go index 536d34b..5d039c3 100644 --- a/pkg/application/services/extractors/keyword_extractor.go +++ b/pkg/application/services/references_extractors/keyword_extractor.go @@ -1,4 +1,4 @@ -package extractors +package references_extractors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" @@ -17,7 +17,7 @@ func NewKeywordExtractor(typeResolver *types.TypeResolver) *KeywordExtractor { func (e *KeywordExtractor) ProcessNode(node ast.Node, referenceBuilder references_builders.ReferenceBuilderInterface, typeScope *types.TypeScope) { if assertTypedNode, ok := node.(*ast.TypeAssertExpr); ok { - for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, assertTypedNode.Type) { + for _, classLikeName := range e.typeResolver.ResolvePHPParserTypes(typeScope, append([]ast.Expr{assertTypedNode.Type, assertTypedNode.X})...) { referenceBuilder.Instanceof(classLikeName, utils.GetLineByPosition(typeScope.FilePath, int(assertTypedNode.Type.Pos()))) } } diff --git a/pkg/application/services/extractors/property_extractor.go b/pkg/application/services/references_extractors/property_extractor.go similarity index 96% rename from pkg/application/services/extractors/property_extractor.go rename to pkg/application/services/references_extractors/property_extractor.go index 69ccd9b..80376cc 100644 --- a/pkg/application/services/extractors/property_extractor.go +++ b/pkg/application/services/references_extractors/property_extractor.go @@ -1,4 +1,4 @@ -package extractors +package references_extractors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" diff --git a/pkg/application/services/extractors/reference_extractor_interface.go b/pkg/application/services/references_extractors/reference_extractor_interface.go similarity index 95% rename from pkg/application/services/extractors/reference_extractor_interface.go rename to pkg/application/services/references_extractors/reference_extractor_interface.go index 08dc850..d13fc8b 100644 --- a/pkg/application/services/extractors/reference_extractor_interface.go +++ b/pkg/application/services/references_extractors/reference_extractor_interface.go @@ -1,4 +1,4 @@ -package extractors +package references_extractors import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/references_builders" diff --git a/pkg/application/services/token_resolver.go b/pkg/application/services/token_resolver.go index ddabd98..852b7be 100644 --- a/pkg/application/services/token_resolver.go +++ b/pkg/application/services/token_resolver.go @@ -1,7 +1,7 @@ package services import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_maps" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" ) @@ -12,7 +12,7 @@ func NewTokenResolver() *TokenResolver { return &TokenResolver{} } -func (r *TokenResolver) Resolve(token tokens.TokenInterface, astMap *ast_map.AstMap) tokens_references.TokenReferenceInterface { +func (r *TokenResolver) Resolve(token tokens.TokenInterface, astMap *ast_maps.AstMap) tokens_references.TokenReferenceInterface { switch v := token.(type) { case *tokens.ClassLikeToken: return astMap.GetClassReferenceForToken(v) diff --git a/pkg/application/services/types/type_resolver.go b/pkg/application/services/types/type_resolver.go index b2d45ba..407c397 100644 --- a/pkg/application/services/types/type_resolver.go +++ b/pkg/application/services/types/type_resolver.go @@ -54,6 +54,23 @@ func (r *TypeResolver) resolvePHPParserType(scope *TypeScope, node ast.Expr) []s return r.resolveInterfaceType(scope, v) case *ast.FuncType: return r.resolveFieldList(scope, v.Results, v.TypeParams, v.Results) + case *ast.CallExpr: + return r.resolvePHPParserType(scope, v.Fun) + case *ast.IndexListExpr: + return r.ResolvePHPParserTypes(scope, append(v.Indices, v.X)...) + case nil: + return make([]string, 0) + case *ast.StructType: + return r.resolveFieldList(scope, v.Fields) + case *ast.IndexExpr: + return r.ResolvePHPParserTypes(scope, v.X, v.Index) + case *ast.BasicLit: + return make([]string, 0) + case *ast.TypeAssertExpr: + return r.ResolvePHPParserTypes(scope, v.X, v.Type) + case *ast.FuncLit: + return r.resolveFieldList(scope, v.Type.TypeParams, v.Type.Params, v.Type.Results) + default: panic("5") } @@ -169,7 +186,7 @@ func (r *TypeResolver) resolveFields(scope *TypeScope, fields ...*ast.Field) []s resolvedUse := scope.GetUse(name.Name) if resolvedUse == nil { - panic("4") + return make([]string, 0) } resolved = append(resolved, *resolvedUse) diff --git a/pkg/domain/dtos/ast_map/ast_inherit.go b/pkg/domain/dtos/ast_inherits/ast_inherit.go similarity index 98% rename from pkg/domain/dtos/ast_map/ast_inherit.go rename to pkg/domain/dtos/ast_inherits/ast_inherit.go index ffc5c2f..274d378 100644 --- a/pkg/domain/dtos/ast_map/ast_inherit.go +++ b/pkg/domain/dtos/ast_inherits/ast_inherit.go @@ -1,4 +1,4 @@ -package ast_map +package ast_inherits import ( "fmt" diff --git a/pkg/domain/dtos/ast_map/ast_map.go b/pkg/domain/dtos/ast_maps/ast_map.go similarity index 90% rename from pkg/domain/dtos/ast_map/ast_map.go rename to pkg/domain/dtos/ast_maps/ast_map.go index 43330ec..7e604eb 100644 --- a/pkg/domain/dtos/ast_map/ast_map.go +++ b/pkg/domain/dtos/ast_maps/ast_map.go @@ -1,7 +1,8 @@ -package ast_map +package ast_maps import ( "fmt" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_inherits" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "strings" @@ -100,12 +101,12 @@ func (a *AstMap) GetFileReferenceForToken(filePath *tokens.FileToken) *tokens_re return v } -func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstInherit { +func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*ast_inherits.AstInherit { structReference := a.GetClassReferenceForToken(structLikeName) if structReference == nil { return nil } - inherits := make([]*AstInherit, 0) + inherits := make([]*ast_inherits.AstInherit, 0) for _, dep := range structReference.Inherits { inherits = append(inherits, dep) outArr := a.recursivelyResolveDependencies(dep, nil, nil) @@ -117,25 +118,25 @@ func (a *AstMap) GetClassInherits(structLikeName *tokens.ClassLikeToken) []*AstI } type stack struct { - s []*AstInherit + s []*ast_inherits.AstInherit } -func (s *stack) Push(v *AstInherit) { +func (s *stack) Push(v *ast_inherits.AstInherit) { s.s = append(s.s, v) } -func (s *stack) Pop() *AstInherit { +func (s *stack) Pop() *ast_inherits.AstInherit { v := s.s[len(s.s)-1] s.s = s.s[:len(s.s)-1] return v } -func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*AstInherit { +func (a *AstMap) recursivelyResolveDependencies(inheritDependency *ast_inherits.AstInherit, alreadyResolved map[string]bool, pathStack *stack) []*ast_inherits.AstInherit { if alreadyResolved == nil { alreadyResolved = make(map[string]bool) } if pathStack == nil { - pathStack = &stack{s: make([]*AstInherit, 0)} + pathStack = &stack{s: make([]*ast_inherits.AstInherit, 0)} pathStack.Push(inheritDependency) } structName := inheritDependency.ClassLikeName.ToString() @@ -147,7 +148,7 @@ func (a *AstMap) recursivelyResolveDependencies(inheritDependency *AstInherit, a if structReference == nil { return nil } - out := make([]*AstInherit, 0) + out := make([]*ast_inherits.AstInherit, 0) for _, inherit := range structReference.Inherits { alreadyResolved[structName] = true path := pathStack.s diff --git a/pkg/domain/dtos/dependencies/dependency.go b/pkg/domain/dtos/dependencies/dependency.go index 984fbb5..a4b5134 100644 --- a/pkg/domain/dtos/dependencies/dependency.go +++ b/pkg/domain/dtos/dependencies/dependency.go @@ -11,10 +11,6 @@ type Dependency struct { } func NewDependency(depender tokens.TokenInterface, dependent tokens.TokenInterface, context *DependencyContext) *Dependency { - if dependent.ToString() == "" { - panic("1") - } - return &Dependency{depender: depender, dependent: dependent, context: context} } diff --git a/pkg/domain/dtos/dependencies/dependency_token.go b/pkg/domain/dtos/dependencies/dependency_token.go new file mode 100644 index 0000000..23cb2f2 --- /dev/null +++ b/pkg/domain/dtos/dependencies/dependency_token.go @@ -0,0 +1,12 @@ +package dependencies + +import "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + +type DependencyToken struct { + Token tokens.TokenInterface + Context *DependencyContext +} + +func NewDependencyToken(token tokens.TokenInterface, context *DependencyContext) *DependencyToken { + return &DependencyToken{Token: token, Context: context} +} diff --git a/pkg/domain/dtos/dependencies/inherit_dependency.go b/pkg/domain/dtos/dependencies/inherit_dependency.go index d2d9975..767d199 100644 --- a/pkg/domain/dtos/dependencies/inherit_dependency.go +++ b/pkg/domain/dtos/dependencies/inherit_dependency.go @@ -1,7 +1,7 @@ package dependencies import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_inherits" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -9,10 +9,10 @@ type InheritDependency struct { depender *tokens.ClassLikeToken dependent tokens.TokenInterface originalDependency DependencyInterface - inheritPath *ast_map.AstInherit + inheritPath *ast_inherits.AstInherit } -func NewInheritDependency(depender *tokens.ClassLikeToken, dependent tokens.TokenInterface, originalDependency DependencyInterface, inheritPath *ast_map.AstInherit) *InheritDependency { +func NewInheritDependency(depender *tokens.ClassLikeToken, dependent tokens.TokenInterface, originalDependency DependencyInterface, inheritPath *ast_inherits.AstInherit) *InheritDependency { return &InheritDependency{depender: depender, dependent: dependent, originalDependency: originalDependency, inheritPath: inheritPath} } diff --git a/pkg/domain/dtos/tokens/class_like_token.go b/pkg/domain/dtos/tokens/class_like_token.go index 6306563..3995b8d 100644 --- a/pkg/domain/dtos/tokens/class_like_token.go +++ b/pkg/domain/dtos/tokens/class_like_token.go @@ -33,3 +33,5 @@ func (t *ClassLikeToken) ToString() string { func (t *ClassLikeToken) Equals(token *ClassLikeToken) bool { return t.ClassName == token.ClassName } + +func (t *ClassLikeToken) tokenInterface() {} diff --git a/pkg/domain/dtos/tokens/dependency_token.go b/pkg/domain/dtos/tokens/dependency_token.go deleted file mode 100644 index 963e8a5..0000000 --- a/pkg/domain/dtos/tokens/dependency_token.go +++ /dev/null @@ -1,14 +0,0 @@ -package tokens - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" -) - -type DependencyToken struct { - Token TokenInterface - Context *dependencies.DependencyContext -} - -func NewDependencyToken(token TokenInterface, context *dependencies.DependencyContext) *DependencyToken { - return &DependencyToken{Token: token, Context: context} -} diff --git a/pkg/domain/dtos/tokens/file_token.go b/pkg/domain/dtos/tokens/file_token.go index cd631a3..6a8ba77 100644 --- a/pkg/domain/dtos/tokens/file_token.go +++ b/pkg/domain/dtos/tokens/file_token.go @@ -29,3 +29,5 @@ func (t *FileToken) ToString() string { return t.path } + +func (t *FileToken) tokenInterface() {} diff --git a/pkg/domain/dtos/tokens/function_token.go b/pkg/domain/dtos/tokens/function_token.go index 219b5bf..cade4ff 100644 --- a/pkg/domain/dtos/tokens/function_token.go +++ b/pkg/domain/dtos/tokens/function_token.go @@ -43,3 +43,5 @@ func (t *FunctionToken) ToString() string { func (t *FunctionToken) Equals(token *FunctionToken) bool { return t.FunctionName == token.FunctionName } + +func (t *FunctionToken) tokenInterface() {} diff --git a/pkg/domain/dtos/tokens/token.go b/pkg/domain/dtos/tokens/token.go index 2804fb7..fe891e4 100644 --- a/pkg/domain/dtos/tokens/token.go +++ b/pkg/domain/dtos/tokens/token.go @@ -3,4 +3,5 @@ package tokens // TokenInterface - Represents an AST-TokenInterface, which can be referenced as dependency_contract. type TokenInterface interface { ToString() string + tokenInterface() } diff --git a/pkg/domain/dtos/tokens_references/class_like_reference.go b/pkg/domain/dtos/tokens_references/class_like_reference.go index 02750b9..2780039 100644 --- a/pkg/domain/dtos/tokens_references/class_like_reference.go +++ b/pkg/domain/dtos/tokens_references/class_like_reference.go @@ -1,7 +1,8 @@ package tokens_references import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_map" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/ast_inherits" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" ) @@ -10,13 +11,13 @@ type ClassLikeReference struct { Type *enums.ClassLikeType classLikeName *tokens.ClassLikeToken - Inherits []*ast_map.AstInherit - Dependencies []*tokens.DependencyToken + Inherits []*ast_inherits.AstInherit + Dependencies []*dependencies.DependencyToken fileReference *FileReference *TaggedTokenReference } -func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_map.AstInherit, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { +func NewClassLikeReference(classLikeName *tokens.ClassLikeToken, classLikeType *enums.ClassLikeType, inherits []*ast_inherits.AstInherit, dependencies []*dependencies.DependencyToken, tags map[string][]string, fileReference *FileReference) *ClassLikeReference { if classLikeType == nil { classLikeTypeTmp := enums.TypeClasslike classLikeType = &classLikeTypeTmp @@ -44,6 +45,6 @@ func (c *ClassLikeReference) GetToken() tokens.TokenInterface { return c.classLikeName } -func (c *ClassLikeReference) GetDependencies() []*tokens.DependencyToken { +func (c *ClassLikeReference) GetDependencies() []*dependencies.DependencyToken { return c.Dependencies } diff --git a/pkg/domain/dtos/tokens_references/file_reference.go b/pkg/domain/dtos/tokens_references/file_reference.go index cc06d96..81385d3 100644 --- a/pkg/domain/dtos/tokens_references/file_reference.go +++ b/pkg/domain/dtos/tokens_references/file_reference.go @@ -1,6 +1,7 @@ package tokens_references import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) @@ -8,10 +9,10 @@ type FileReference struct { Filepath *string ClassLikeReferences []*ClassLikeReference FunctionReferences []*FunctionReference - Dependencies []*tokens.DependencyToken + Dependencies []*dependencies.DependencyToken } -func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*tokens.DependencyToken) *FileReference { +func NewFileReference(filepath *string, structLikeReferences []*ClassLikeReference, functionReferences []*FunctionReference, dependencies []*dependencies.DependencyToken) *FileReference { structLikeReferencesMapped := make([]*ClassLikeReference, 0) functionReferencesMapped := make([]*FunctionReference, 0) @@ -41,6 +42,6 @@ func (r *FileReference) GetToken() tokens.TokenInterface { return tokens.NewFileToken(r.Filepath) } -func (r *FileReference) GetDependencies() []*tokens.DependencyToken { +func (r *FileReference) GetDependencies() []*dependencies.DependencyToken { return r.Dependencies } diff --git a/pkg/domain/dtos/tokens_references/function_reference.go b/pkg/domain/dtos/tokens_references/function_reference.go index ff52aaa..1ea936c 100644 --- a/pkg/domain/dtos/tokens_references/function_reference.go +++ b/pkg/domain/dtos/tokens_references/function_reference.go @@ -1,17 +1,18 @@ package tokens_references import ( + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" ) type FunctionReference struct { *TaggedTokenReference functionName *tokens.FunctionToken - Dependencies []*tokens.DependencyToken + Dependencies []*dependencies.DependencyToken fileReference *FileReference } -func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*tokens.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { +func NewFunctionReference(functionName *tokens.FunctionToken, dependencies []*dependencies.DependencyToken, tags map[string][]string, fileReference *FileReference) *FunctionReference { for _, dependency := range dependencies { if dependency.Token.ToString() == "" { panic("1") @@ -38,6 +39,6 @@ func (r *FunctionReference) GetToken() tokens.TokenInterface { return r.functionName } -func (r *FunctionReference) GetDependencies() []*tokens.DependencyToken { +func (r *FunctionReference) GetDependencies() []*dependencies.DependencyToken { return r.Dependencies } diff --git a/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go b/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go index db003ed..34802e7 100644 --- a/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go +++ b/pkg/domain/dtos/tokens_references/token_reference_with_dependencies_interface.go @@ -1,10 +1,10 @@ package tokens_references import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/dependencies" ) type TokenReferenceWithDependenciesInterface interface { TokenReferenceInterface - GetDependencies() []*tokens.DependencyToken + GetDependencies() []*dependencies.DependencyToken } diff --git a/pkg/application/services/dependencies_collectors/collector_interface.go b/pkg/domain/services/collector_interface.go similarity index 91% rename from pkg/application/services/dependencies_collectors/collector_interface.go rename to pkg/domain/services/collector_interface.go index 8da6ad8..e93a060 100644 --- a/pkg/application/services/dependencies_collectors/collector_interface.go +++ b/pkg/domain/services/collector_interface.go @@ -1,4 +1,4 @@ -package dependencies_collectors +package services import ( "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" diff --git a/pkg/domain/services/node_namer_test.go b/pkg/domain/services/node_namer_test.go deleted file mode 100644 index 737aefe..0000000 --- a/pkg/domain/services/node_namer_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package services_test - -import ( - "github.com/KoNekoD/go-deptrac/pkg/domain/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/di" - "testing" -) - -func TestOk(t *testing.T) { - namer := di.ProvideTestContainerService("NodeNamer").(*services.NodeNamer) - - name, err := namer.GetRootPackageName("pkg/supportive/console_supportive/application") - - if err != nil { - t.Error(err) - } - - t.Log(name) -} diff --git a/pkg/domain/stopwatch/period.go b/pkg/domain/stopwatch/period.go index 41421d6..ad4f2c2 100644 --- a/pkg/domain/stopwatch/period.go +++ b/pkg/domain/stopwatch/period.go @@ -24,8 +24,21 @@ func NewPeriodStop(startedPeriod *StartedPeriod) *Period { ) } +// ToSeconds - 10 seconds func (p *Period) ToSeconds() time.Duration { duration := p.endedAt - p.startedAt return duration / 1000000000.0 } + +// ToMilliseconds - 1000 milliseconds +func (p *Period) ToMilliseconds() time.Duration { + duration := p.endedAt - p.startedAt + + return duration / 1000000.0 +} + +// ToFloatSeconds - 10.64 seconds +func (p *Period) ToFloatSeconds() float64 { + return float64(p.ToMilliseconds()) / float64(1000) +} diff --git a/pkg/domain/utils/parse_yaml_file_test.go b/pkg/domain/utils/parse_yaml_file_test.go deleted file mode 100644 index fac173b..0000000 --- a/pkg/domain/utils/parse_yaml_file_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils - -import ( - _ "github.com/KoNekoD/go-deptrac/resources" - "testing" -) - -func TestParseYamlFile(t *testing.T) { - data, err := ParseYamlFile("pkg/util/parse_yaml_file_test_1.yaml") - - if err != nil { - panic(err) - } - - _, ok := data["test"] - if !ok { - panic("Key 'test' not found in the yaml file_supportive") - } -} diff --git a/pkg/infrastructure/app/application.go b/pkg/infrastructure/app/app.go similarity index 72% rename from pkg/infrastructure/app/application.go rename to pkg/infrastructure/app/app.go index f9fe090..6d3c9e8 100644 --- a/pkg/infrastructure/app/application.go +++ b/pkg/infrastructure/app/app.go @@ -9,47 +9,37 @@ import ( "slices" ) -const Version = "@git-version@" +func Run() { + NewApp().Run() +} -type Application struct { +type App struct { defaultCommand string } -func NewApplication() *Application { - return &Application{} +func NewApp() *App { + return &App{} } -func (a *Application) Run() { +func (a *App) Run() { _, err := a.doRun() if err != nil { color.Printf("\n" + err.Error() + "\n") } } -func (a *Application) getDefaultInputDefinition() { +func (a *App) getDefaultInputDefinition() { // $definition = parent::getDefaultInputDefinition(); // return $definition; } -const DirectorySeparator = "/" - -func (a *Application) doRun() (int, error) { +func (a *App) doRun() (int, error) { currentWorkingDirectory, err := os.Getwd() if err != nil { return 0, apperrors.NewCannotGetCurrentWorkingDirectoryExceptionCannotGetCWD() } - // try { - // $input->bind($this->getDefinition()); - // } catch (ExceptionInterface) { - // // Errors must be ignored, full binding/validation happens later when the command is known. - // } - - // if (null === $input->getArgument('command') && \true === $input->getOption('version')) { - // return parent::doRun($input, $output); - // } - var help bool flag.BoolVar( &help, @@ -82,7 +72,7 @@ func (a *Application) doRun() (int, error) { flag.StringVar( &configFile, "config", - currentWorkingDirectory+DirectorySeparator+"deptrac.yaml", + currentWorkingDirectory+"/deptrac.yaml", "Location of Depfile containing the configuration", ) flag.Parse() @@ -91,7 +81,7 @@ func (a *Application) doRun() (int, error) { commandArgument = flag.Arg(0) ) - config := currentWorkingDirectory + DirectorySeparator + "deptrac.yaml" + config := currentWorkingDirectory + "/deptrac.yaml" if configFile != "" { config = configFile } @@ -138,6 +128,6 @@ func (a *Application) doRun() (int, error) { return 0, nil } -func (a *Application) setDefaultCommand(command string) { +func (a *App) setDefaultCommand(command string) { a.defaultCommand = command } diff --git a/pkg/infrastructure/di/cache.go b/pkg/infrastructure/di/cache.go index 16fd911..f00d047 100644 --- a/pkg/infrastructure/di/cache.go +++ b/pkg/infrastructure/di/cache.go @@ -3,11 +3,12 @@ package di import ( "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" ) +const Version = "@git-version@" + func Cache(builder *ContainerBuilder) { - builder.AstFileReferenceFileCache = ast_file_reference_cache.NewAstFileReferenceFileCache(*builder.CacheFile, app.Version) + builder.AstFileReferenceFileCache = ast_file_reference_cache.NewAstFileReferenceFileCache(*builder.CacheFile, Version) builder.AstFileReferenceDeferredCacheInterface = builder.AstFileReferenceFileCache builder.AstFileReferenceCacheInterface = builder.AstFileReferenceFileCache builder.CacheableFileSubscriber = event_handlers.NewCacheableFile(builder.AstFileReferenceDeferredCacheInterface) diff --git a/pkg/infrastructure/di/container_builder.go b/pkg/infrastructure/di/container_builder.go index 1e1195d..a490bd9 100644 --- a/pkg/infrastructure/di/container_builder.go +++ b/pkg/infrastructure/di/container_builder.go @@ -8,10 +8,10 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_file_reference_cache" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" @@ -38,7 +38,7 @@ type ContainerBuilder struct { CacheableFileSubscriber *event_handlers.CacheableFile AstFileReferenceInMemoryCache *ast_file_reference_cache.AstFileReferenceInMemoryCache TypeResolver *types.TypeResolver - ReferenceExtractors []extractors.ReferenceExtractorInterface + ReferenceExtractors []references_extractors.ReferenceExtractorInterface ParserInterface parsers.ParserInterface LayerProvider *applicationServices.LayerProvider EventHelper *applicationServices.EventHelper diff --git a/pkg/infrastructure/di/service_container_builder.go b/pkg/infrastructure/di/service_container_builder.go index f233613..1789d0c 100644 --- a/pkg/infrastructure/di/service_container_builder.go +++ b/pkg/infrastructure/di/service_container_builder.go @@ -2,7 +2,7 @@ package di import ( "fmt" - "github.com/KoNekoD/go-deptrac/pkg/application/event_handlers" + "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/domain/apperrors" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/configs" "github.com/KoNekoD/go-deptrac/pkg/domain/utils" @@ -82,8 +82,8 @@ func (b *ServiceContainerBuilder) Build(cacheOverride *string, clearCache bool) // Debug event subscriber if b.containerBuilder.DebugBoolFlag != nil && *b.containerBuilder.DebugBoolFlag == true { - for _, key := range event_handlers.Map.Keys() { - mapByPriorities, _ := event_handlers.Map.Get(key) + for _, key := range event_dispatchers.Map.Keys() { + mapByPriorities, _ := event_dispatchers.Map.Get(key) for _, priority := range mapByPriorities.Keys() { subscribers, _ := mapByPriorities.Get(priority) diff --git a/pkg/infrastructure/di/services.go b/pkg/infrastructure/di/services.go index f05f00a..a8ac119 100644 --- a/pkg/infrastructure/di/services.go +++ b/pkg/infrastructure/di/services.go @@ -12,10 +12,10 @@ import ( "github.com/KoNekoD/go-deptrac/pkg/application/services/collectors_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/dependencies_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/emitters" - "github.com/KoNekoD/go-deptrac/pkg/application/services/extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/input_collectors" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/application/services/parsers" + "github.com/KoNekoD/go-deptrac/pkg/application/services/references_extractors" "github.com/KoNekoD/go-deptrac/pkg/application/services/types" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/domain/enums" @@ -80,11 +80,11 @@ func Services(builder *ContainerBuilder) error { builder.AstFileReferenceCacheInterface = astFileReferenceInMemoryCache } typeResolver := types.NewTypeResolver(nodeNamer) - referenceExtractors := []extractors.ReferenceExtractorInterface{ - extractors.NewFunctionLikeExtractor(typeResolver), - extractors.NewPropertyExtractor(typeResolver), - extractors.NewKeywordExtractor(typeResolver), - extractors.NewFunctionCallResolver(typeResolver), + referenceExtractors := []references_extractors.ReferenceExtractorInterface{ + references_extractors.NewFunctionLikeExtractor(typeResolver), + references_extractors.NewPropertyExtractor(typeResolver), + references_extractors.NewKeywordExtractor(typeResolver), + references_extractors.NewFunctionCallResolver(typeResolver), } nikicPhpParser := parsers.NewNikicPhpParser(builder.AstFileReferenceCacheInterface, typeResolver, nodeNamer, referenceExtractors) parserInterface := nikicPhpParser @@ -117,7 +117,7 @@ func Services(builder *ContainerBuilder) error { /* * Events */ - event_handlers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []event_handlers.EventHandlerInterface]]() + event_dispatchers.Map = orderedmap.NewOrderedMap[string, *orderedmap.OrderedMap[int, []event_dispatchers.EventHandlerInterface]]() // Events uncoveredDependentHandler := event_handlers.NewUncoveredDependent(builderConfiguration.IgnoreUncoveredInternalStructs) @@ -136,16 +136,16 @@ func Services(builder *ContainerBuilder) error { postCreateAstMapEvent := &events.PostCreateAstMapEvent{} // Events Handlers // TODO: Тут надо реализовать глобальный хук на параметры deptrac чтобы сделать что-то вида "param('skip_violations')" - event_handlers.Reg(processEvent, allowDependencyHandler, -100) - event_handlers.Reg(processEvent, dependsOnPrivateLayer, -3) - event_handlers.Reg(processEvent, dependsOnInternalToken, -2) - event_handlers.Reg(processEvent, dependsOnDisallowedLayer, -1) - event_handlers.Reg(processEvent, matchingLayersHandler, 1) - event_handlers.Reg(processEvent, uncoveredDependentHandler, 2) - event_handlers.Reg(postProcessEvent, unmatchedSkippedViolations, event_handlers.DefaultPriority) + event_dispatchers.Reg(processEvent, allowDependencyHandler, -100) + event_dispatchers.Reg(processEvent, dependsOnPrivateLayer, -3) + event_dispatchers.Reg(processEvent, dependsOnInternalToken, -2) + event_dispatchers.Reg(processEvent, dependsOnDisallowedLayer, -1) + event_dispatchers.Reg(processEvent, matchingLayersHandler, 1) + event_dispatchers.Reg(processEvent, uncoveredDependentHandler, 2) + event_dispatchers.Reg(postProcessEvent, unmatchedSkippedViolations, event_dispatchers.DefaultPriority) if cacheableFileSubscriber != nil { - event_handlers.Reg(preCreateAstMapEvent, cacheableFileSubscriber, event_handlers.DefaultPriority) - event_handlers.Reg(postCreateAstMapEvent, cacheableFileSubscriber, event_handlers.DefaultPriority) + event_dispatchers.Reg(preCreateAstMapEvent, cacheableFileSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postCreateAstMapEvent, cacheableFileSubscriber, event_dispatchers.DefaultPriority) } /* @@ -199,7 +199,7 @@ func Services(builder *ContainerBuilder) error { nil != reportUncovered && *reportUncovered == true, nil != failOnUncovered && *failOnUncovered == true, ) - event_handlers.RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) // /* @@ -220,7 +220,7 @@ func Services(builder *ContainerBuilder) error { collectorProvider := applicationServices.NewCollectorProvider() collectorResolver := collectors_resolvers.NewCollectorResolver(collectorProvider) layerResolver := layers_resolvers.NewLayerResolver(collectorResolver, builderConfiguration.Layers) - collectors := map[enums.CollectorType]dependencies_collectors.CollectorInterface{ + collectors := map[enums.CollectorType]domainServices.CollectorInterface{ //AttributeCollector enums.CollectorTypeTypeBool: dependencies_collectors.NewBoolCollector(collectorResolver), enums.CollectorTypeTypeClass: dependencies_collectors.NewClassCollector(), @@ -323,3 +323,33 @@ func Services(builder *ContainerBuilder) error { return nil } + +func RegForAnalyseCommand(consoleSubscriber *event_handlers.Console, progressSubscriber *event_handlers.Progress, withProgress bool) { + processEvent := &events.ProcessEvent{} + postProcessEvent := &events.PostProcessEvent{} + preCreateAstMapEvent := &events.PreCreateAstMapEvent{} + postCreateAstMapEvent := &events.PostCreateAstMapEvent{} + astFileAnalysedEvent := &events.AstFileAnalysedEvent{} + astFileSyntaxErrorEvent := &events.AstFileSyntaxErrorEvent{} + preEmitEvent := &events.PreEmitEvent{} + postEmitEvent := &events.PostEmitEvent{} + preFlattenEvent := &events.PreFlattenEvent{} + postFlattenEvent := &events.PostFlattenEvent{} + + event_dispatchers.Reg(preCreateAstMapEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postCreateAstMapEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(processEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postProcessEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(astFileAnalysedEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(astFileSyntaxErrorEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(preEmitEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postEmitEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(preFlattenEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postFlattenEvent, consoleSubscriber, event_dispatchers.DefaultPriority) + + if withProgress { + event_dispatchers.Reg(preCreateAstMapEvent, progressSubscriber, event_dispatchers.DefaultPriority) + event_dispatchers.Reg(postCreateAstMapEvent, progressSubscriber, 1) + event_dispatchers.Reg(astFileAnalysedEvent, progressSubscriber, event_dispatchers.DefaultPriority) + } +} diff --git a/pkg/infrastructure/di/test_container_provider.go b/pkg/infrastructure/di/test_container_provider.go index d77afcf..80c59f9 100644 --- a/pkg/infrastructure/di/test_container_provider.go +++ b/pkg/infrastructure/di/test_container_provider.go @@ -1,14 +1,13 @@ package di import ( - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "os" "reflect" ) var currentWorkingDirectory, _ = os.Getwd() -var TestConfigFile = currentWorkingDirectory + app.DirectorySeparator + "deptrac.yaml" +var TestConfigFile = currentWorkingDirectory + "/deptrac.yaml" func UseVoidConfig() { TestConfigFile = "resources/deptrac-empty.yaml" diff --git a/resources/test/example.yaml b/resources/test/example.yaml deleted file mode 100644 index 4c96f4b..0000000 --- a/resources/test/example.yaml +++ /dev/null @@ -1,35 +0,0 @@ -deptrac: - ruleset: - Layer: - - Ast - - Symfony - Console: - - Analyser - - OutputFormatter - - DependencyInjection - - File - - Time - - Symfony - Dependency: - - Ast - Analyser: - - Layer - - Dependency - - Ast - - Symfony - OutputFormatter: - - DependencyInjection - - Symfony - Ast: - - File - - InputCollector - - Symfony - InputCollector: - - File - - Symfony - DependencyInjection: - - Symfony - Contract: - - Symfony - File: - - Symfony \ No newline at end of file diff --git a/resources/test/parse_yaml_file_test_1.yaml b/resources/test/parse_yaml_file_test_1.yaml deleted file mode 100644 index 1c3fd19..0000000 --- a/resources/test/parse_yaml_file_test_1.yaml +++ /dev/null @@ -1,14 +0,0 @@ -test: - a: - b: - c: - d: 1 - e: 2 - f: 3 - g: 4 - h: 5 - i: 6 - j: 7 - k: 8 - l: 9 - m: 10 \ No newline at end of file diff --git a/pkg/infrastructure/app/application_test.go b/tests/application_test.go similarity index 70% rename from pkg/infrastructure/app/application_test.go rename to tests/application_test.go index 0446529..a69aa9d 100644 --- a/pkg/infrastructure/app/application_test.go +++ b/tests/application_test.go @@ -1,8 +1,9 @@ -package app +package tests import ( "flag" "fmt" + "github.com/KoNekoD/go-deptrac/pkg/infrastructure/app" "os" "testing" ) @@ -14,7 +15,7 @@ func TestApplicationOk(t *testing.T) { } flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) - NewApplication().Run() + app.NewApp().Run() fmt.Println("", "") } From cb1843dcfa1437665a87cb642f77e06a62c058b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 20:08:30 +0300 Subject: [PATCH 36/40] refactor: structure --- deptrac.yaml | 130 +++++---------------------------------------------- 1 file changed, 12 insertions(+), 118 deletions(-) diff --git a/deptrac.yaml b/deptrac.yaml index 2c533d1..ce2e796 100644 --- a/deptrac.yaml +++ b/deptrac.yaml @@ -16,6 +16,7 @@ deptrac: - function - function_superglobal - function_call + - use formatters: graphviz: @@ -39,129 +40,22 @@ deptrac: layers: # Domains - - name: Analyser + - name: domain collectors: - type: directory - value: pkg/core/analyser_contract/.* - - name: Ast + value: pkg/domain/.* + - name: application collectors: - type: directory - value: pkg/core/ast_contract/.* - - type: composer - private: true - composerPath: composer.json - composerLockPath: composer.lock - packages: - - phpstan/phpdoc-parser - - nikic/php-parser - - phpdocumentor/type-resolver - - name: Console + value: pkg/application/.* + - name: infrastructure collectors: - type: directory - value: pkg/supportive/console_supportive/.* - - name: Dependency - collectors: - - type: directory - value: pkg/core/dependency_contract/.* - - name: DependencyInjection - collectors: - - type: directory - value: pkg/supportive/dependency_injection_supportive/.* - - name: Contract - collectors: - - type: directory - value: pkg/contract/.* - - name: InputCollector - collectors: - - type: directory - value: pkg/core/input_collector_core/.* - - name: Layer - collectors: - - type: directory - value: pkg/core/layer_contract/.* - - name: OutputFormatter - collectors: - - type: directory - value: pkg/supportive/output_formatter_contract/.* - - type: composer - private: true - composerPath: composer.json - composerLockPath: composer.lock - packages: - - phpdocumentor/graphviz - - name: File - collectors: - - type: directory - value: pkg/supportive/file_supportive/.* - - name: Time - collectors: - - type: directory - value: pkg/supportive/time/.* - - name: Supportive - collectors: - - type: bool - must_not: - - type: directory - value: pkg/supportive/.*/.* - must: - - type: directory - value: pkg/supportive/.* - - name: Symfony - collectors: - - type: composer - composerPath: composer.json - composerLockPath: composer.lock - packages: - - symfony/config_contract - - symfony/console_supportive - - symfony/dependency_contract-injection - - symfony/event-dispatcher - - symfony/filesystem - - symfony/finder - - symfony/yaml + value: pkg/infrastructure/.* ruleset: - Layer: - - Ast - - Symfony - - Contract - Console: - - Analyser - - OutputFormatter - - DependencyInjection - - File - - Time - - Symfony - - Contract - Dependency: - - Ast - - Contract - - DependencyInjection - Analyser: - - Layer - - Dependency - - Ast - - Symfony - - Contract - - DependencyInjection - OutputFormatter: - - DependencyInjection - - Symfony - - Contract - Ast: - - File - - InputCollector - - Symfony - - Contract - - DependencyInjection - InputCollector: - - File - - Symfony - DependencyInjection: - - Symfony - - Console - - Contract - Contract: - - Symfony - File: - - Symfony + application: + - domain + infrastructure: + - application + - domain From 97795f027e371b4c232f5e4e977991351e4de93d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 20:10:25 +0300 Subject: [PATCH 37/40] refactor: structure --- .../services/analysers/dependency_layers_analyser.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/pkg/application/services/analysers/dependency_layers_analyser.go b/pkg/application/services/analysers/dependency_layers_analyser.go index 6f5e0cf..ef79611 100644 --- a/pkg/application/services/analysers/dependency_layers_analyser.go +++ b/pkg/application/services/analysers/dependency_layers_analyser.go @@ -1,15 +1,12 @@ package analysers import ( - "fmt" "github.com/KoNekoD/go-deptrac/pkg/application/event_dispatchers" "github.com/KoNekoD/go-deptrac/pkg/application/services" "github.com/KoNekoD/go-deptrac/pkg/application/services/ast_map" "github.com/KoNekoD/go-deptrac/pkg/application/services/layers_resolvers" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results" "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/results/issues" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens" - "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/tokens_references" "github.com/KoNekoD/go-deptrac/pkg/domain/events" ) @@ -51,15 +48,6 @@ func (a *DependencyLayersAnalyser) Analyse() (*results.AnalysisResult, error) { depender := dependency.GetDepender() dependerRef := a.tokenResolver.Resolve(depender, astMap) - if v, ok55 := dependerRef.(*tokens_references.FunctionReference); ok55 { - t := v.GetToken() - if tt, ok66 := t.(*tokens.FunctionToken); ok66 { - if tt.FunctionName == "ParseFile" { - fmt.Println() - } - } - } - dependerLayersMap, err := a.layerResolver.GetLayersForReference(dependerRef) if err != nil { return nil, err From 19de9209f7fb34610f7e9580f63d8b22462e4471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 20:10:40 +0300 Subject: [PATCH 38/40] refactor: structure --- deptrac_template.yaml | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 deptrac_template.yaml diff --git a/deptrac_template.yaml b/deptrac_template.yaml deleted file mode 100644 index 195cd1a..0000000 --- a/deptrac_template.yaml +++ /dev/null @@ -1,24 +0,0 @@ -deptrac: - paths: - - ./src - exclude_files: - - '#.*test.*#' - layers: - - name: Controller - collectors: - - type: classLike - value: .*Controller.* - - name: Repository - collectors: - - type: classLike - value: .*Repository.* - - name: Service - collectors: - - type: classLike - value: .*Service.* - ruleset: - Controller: - - Service - Service: - - Repository - Repository: From 04d398a80daa6158170b854b814df6f3ddd1a3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Fri, 11 Oct 2024 20:36:57 +0300 Subject: [PATCH 39/40] refactor: structure --- pkg/application/services/types/type_resolver.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/application/services/types/type_resolver.go b/pkg/application/services/types/type_resolver.go index 407c397..1f54213 100644 --- a/pkg/application/services/types/type_resolver.go +++ b/pkg/application/services/types/type_resolver.go @@ -14,9 +14,7 @@ type TypeResolver struct { } func NewTypeResolver(nodeNamer *services.NodeNamer) *TypeResolver { - return &TypeResolver{ - nodeNamer: nodeNamer, - } + return &TypeResolver{nodeNamer: nodeNamer} } func (r *TypeResolver) ResolvePHPParserTypes(typeScope *TypeScope, nodes ...ast.Expr) []string { @@ -108,7 +106,7 @@ func (r *TypeResolver) resolveSelectorExpr(scope *TypeScope, v *ast.SelectorExpr xResolvedZero := xResolved[0] - pathValidate := strings.Replace(xResolvedZero, "github.com/KoNekoD/go_deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go_deptrac/", 1) + pathValidate := strings.Replace(xResolvedZero, "github.com/KoNekoD/go-deptrac/", "/home/mizuki/Documents/dev/KoNekoD/go-deptrac/", 1) parseDir, err := parser.ParseDir(token.NewFileSet(), pathValidate, nil, 0) if len(maps.Keys(parseDir)) != 1 { // TODO: Add checking in go.mod, если там нет такого модуля - ошибка From 0fe39e26ce47ccc408a87d1ea4a66adbb4e251f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=A6=85KoNekoD?= Date: Sat, 12 Oct 2024 10:26:48 +0300 Subject: [PATCH 40/40] refactor: structure --- .../commands_options/changed_files_options.go | 6 +++ .../commands/changed_files_command.go | 44 ++++--------------- pkg/infrastructure/di/container_builder.go | 9 +++- pkg/infrastructure/di/services.go | 32 +++++++++++++- 4 files changed, 54 insertions(+), 37 deletions(-) create mode 100644 pkg/domain/dtos/commands_options/changed_files_options.go diff --git a/pkg/domain/dtos/commands_options/changed_files_options.go b/pkg/domain/dtos/commands_options/changed_files_options.go new file mode 100644 index 0000000..0dd0051 --- /dev/null +++ b/pkg/domain/dtos/commands_options/changed_files_options.go @@ -0,0 +1,6 @@ +package commands_options + +type ChangedFilesOptions struct { + WithDependencies bool + Files []string +} diff --git a/pkg/infrastructure/commands/changed_files_command.go b/pkg/infrastructure/commands/changed_files_command.go index 070f234..3f9dc64 100644 --- a/pkg/infrastructure/commands/changed_files_command.go +++ b/pkg/infrastructure/commands/changed_files_command.go @@ -1,51 +1,25 @@ package commands import ( - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services" - "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/formatters" + services "github.com/KoNekoD/go-deptrac/pkg/application/services" + "github.com/KoNekoD/go-deptrac/pkg/domain/dtos/commands_options" "github.com/KoNekoD/go-deptrac/pkg/infrastructure/services/runners" "github.com/pkg/errors" - "github.com/spf13/cobra" ) type ChangedFilesCommand struct { - runner *runners.ChangedFilesRunner + runner *runners.ChangedFilesRunner + options *commands_options.ChangedFilesOptions } -const ( - argWithDependencies = "with-dependencies" - argFiles = "files" -) - -func NewChangedFilesCommand(runner *runners.ChangedFilesRunner) *cobra.Command { - cmd := &ChangedFilesCommand{runner: runner} - - cobraCmd := &cobra.Command{ - Use: "debug:changed-files", - Short: "Lists layers corresponding to the changed files", - RunE: cmd.run, - } - - cobraCmd.Flags().BoolP("verbose", "v", false, "verbose output") - cobraCmd.Flags().BoolP("debug", "d", false, "debug output") - - cobraCmd.Flags().Bool(argWithDependencies, false, "show dependent layers") - cobraCmd.Flags().StringArray(argFiles, []string{}, "List of changed files") - _ = cobraCmd.MarkFlagRequired(argFiles) - - return cobraCmd +func NewChangedFilesCommand(runner *runners.ChangedFilesRunner, options *commands_options.ChangedFilesOptions) *ChangedFilesCommand { + return &ChangedFilesCommand{runner: runner, options: options} } -func (cmd *ChangedFilesCommand) run(cobraCmd *cobra.Command, args []string) error { - symfonyOutput := services.NewSymfonyOutput(formatters.NewStyle(cobraCmd.Flags().Changed("verbose"), cobraCmd.Flags().Changed("debug"))) - - files, err := cobraCmd.Flags().GetStringArray(argFiles) - if err != nil { - return errors.WithStack(err) - } - - err = cmd.runner.Run(files, cobraCmd.Flags().Changed(argWithDependencies), symfonyOutput) +func (c *ChangedFilesCommand) Run(output services.OutputInterface) error { + err := c.runner.Run(c.options.Files, c.options.WithDependencies, output) if err != nil { + output.GetStyle().Error(services.StringOrArrayOfStrings{String: "Changed files debugging failed. error: " + err.Error()}) return errors.WithStack(err) } diff --git a/pkg/infrastructure/di/container_builder.go b/pkg/infrastructure/di/container_builder.go index a490bd9..9b17224 100644 --- a/pkg/infrastructure/di/container_builder.go +++ b/pkg/infrastructure/di/container_builder.go @@ -73,9 +73,16 @@ type ContainerBuilder struct { FormatterProvider *formatters.FormatterProvider FormatterConfiguration *formatters.FormatterConfiguration AnalyseRunner *runners.AnalyseRunner - AnalyseCommand *commands.AnalyseCommand NodeNamer *domainServices.NodeNamer AnalyseOptions *commands_options.AnalyseOptions + AnalyseCommand *commands.AnalyseCommand + ChangedFilesCommand *commands.ChangedFilesCommand + DebugDependenciesCommand *commands.DebugDependenciesCommand + DebugLayerCommand *commands.DebugLayerCommand + DebugTokenCommand *commands.DebugTokenCommand + DebugUnassignedCommand *commands.DebugUnassignedCommand + DebugUnusedCommand *commands.DebugUnusedCommand + InitCommand *commands.InitCommand } func NewContainerBuilder(workingDirectory string) *ContainerBuilder { diff --git a/pkg/infrastructure/di/services.go b/pkg/infrastructure/di/services.go index a8ac119..8038f57 100644 --- a/pkg/infrastructure/di/services.go +++ b/pkg/infrastructure/di/services.go @@ -200,6 +200,14 @@ func Services(builder *ContainerBuilder) error { nil != failOnUncovered && *failOnUncovered == true, ) RegForAnalyseCommand(consoleSubscriber, progressSubscriber, !analyseOptions.NoProgress) + + // TODO + debugDependenciesOptions := &commands_options.DebugDependenciesOptions{} + debugLayerOptions := &commands_options.DebugLayerOptions{} + debugTokenOptions := &commands_options.DebugTokenOptions{} + debugUnusedOptions := &commands_options.DebugUnusedOptions{} + initOptions := &commands_options.InitOptions{} + changedFilesOptions := &commands_options.ChangedFilesOptions{} // /* @@ -258,7 +266,21 @@ func Services(builder *ContainerBuilder) error { * Console */ analyseRunner := runners.NewAnalyseRunner(dependencyLayersAnalyser, formatterProvider) + changedFilesRunner := runners.NewChangedFilesRunner(layerForTokenAnalyser, dependencyLayersAnalyser) + debugDependenciesRunner := runners.NewDebugDependenciesRunner(layerDependenciesAnalyser) + debugLayerRunner := runners.NewDebugLayerRunner(tokenInLayerAnalyser, builderConfiguration.Layers) + debugTokenRunner := runners.NewDebugTokenRunner(layerForTokenAnalyser) + debugUnassignedRunner := runners.NewDebugUnassignedRunner(unassignedTokenAnalyser) + debugUnusedRunner := runners.NewDebugUnusedRunner(rulesetUsageAnalyser) + analyseCommand := commands.NewAnalyseCommand(analyseRunner, eventDispatcher, formatterProvider, *verboseBoolFlag, *debugBoolFlag, consoleSubscriber, progressSubscriber, analyseOptions) + changedFilesCommand := commands.NewChangedFilesCommand(changedFilesRunner, changedFilesOptions) + debugDependenciesCommand := commands.NewDebugDependenciesCommand(debugDependenciesRunner, debugDependenciesOptions) + debugLayerCommand := commands.NewDebugLayerCommand(debugLayerRunner, debugLayerOptions) + debugTokenCommand := commands.NewDebugTokenCommand(debugTokenRunner, debugTokenOptions) + debugUnassignedCommand := commands.NewDebugUnassignedCommand(debugUnassignedRunner) + debugUnusedCommand := commands.NewDebugUnusedCommand(debugUnusedRunner, debugUnusedOptions) + initCommand := commands.NewInitCommand(dumper, initOptions) // TODO: other commands // $services->set(InitCommand::class)->autowire()->tag('console_supportive.command'); @@ -317,10 +339,18 @@ func Services(builder *ContainerBuilder) error { builder.FormatterProvider = formatterProvider builder.FormatterConfiguration = formatterConfiguration builder.AnalyseRunner = analyseRunner - builder.AnalyseCommand = analyseCommand builder.NodeNamer = nodeNamer builder.AnalyseOptions = analyseOptions + builder.AnalyseCommand = analyseCommand + builder.ChangedFilesCommand = changedFilesCommand + builder.DebugDependenciesCommand = debugDependenciesCommand + builder.DebugLayerCommand = debugLayerCommand + builder.DebugTokenCommand = debugTokenCommand + builder.DebugUnassignedCommand = debugUnassignedCommand + builder.DebugUnusedCommand = debugUnusedCommand + builder.InitCommand = initCommand + return nil }