@dxworks/insider 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build.yml +19 -0
- package/.github/workflows/release-docs.yml +15 -0
- package/.github/workflows/release-voyager.yml +57 -0
- package/.github/workflows/release.yml +102 -0
- package/Dockerfile +8 -0
- package/README.md +89 -0
- package/TODO.txt +7 -0
- package/bin/insider.bat +1 -0
- package/bin/insider.sh +1 -0
- package/build.gradle +55 -0
- package/config/.ignore +4 -0
- package/config/comments.json +71 -0
- package/config/fingerprints/_anomalies-full.json +116 -0
- package/config/fingerprints/_extLibs.json +2555 -0
- package/config/fingerprints/code_smells.json +94 -0
- package/config/fingerprints/generated_code.json +17 -0
- package/config/fingerprints/libraries.json +4667 -0
- package/config/ignoredImports.txt +0 -0
- package/config/insider-conf.properties +3 -0
- package/config/rules/cloud_services/ad_networks.json +50 -0
- package/config/rules/cloud_services/bigdata.json +21 -0
- package/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/config/rules/cloud_services/data_storage.json +291 -0
- package/config/rules/cloud_services/ecommerce.json +45 -0
- package/config/rules/cloud_services/socialmedia.json +82 -0
- package/config/rules/cloud_services/web_analytics.json +108 -0
- package/config/rules/components/active_content.json +157 -0
- package/config/rules/components/load_dll.json +66 -0
- package/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/config/rules/cryptography/certificate.json +199 -0
- package/config/rules/cryptography/ciphers.json +174 -0
- package/config/rules/cryptography/crypto_currency.json +32 -0
- package/config/rules/cryptography/encoding.json +20 -0
- package/config/rules/cryptography/extended.json +220 -0
- package/config/rules/cryptography/external_libraries.json +141 -0
- package/config/rules/cryptography/hash_algorithm.json +98 -0
- package/config/rules/cryptography/key_derivation.json +65 -0
- package/config/rules/cryptography/protocol.json +156 -0
- package/config/rules/cryptography/random.json +97 -0
- package/config/rules/cryptography/weakssl.json +206 -0
- package/config/rules/data_handling/compressed_files.json +18 -0
- package/config/rules/data_handling/database.json +361 -0
- package/config/rules/data_handling/deserialization.json +296 -0
- package/config/rules/data_handling/json_parsing.json +49 -0
- package/config/rules/data_handling/media_parsing.json +33 -0
- package/config/rules/data_handling/pastebin.json +18 -0
- package/config/rules/data_handling/xml_parsing.json +168 -0
- package/config/rules/data_types/financial.json +106 -0
- package/config/rules/data_types/media.json +48 -0
- package/config/rules/data_types/secrets.json +91 -0
- package/config/rules/data_types/sensitive.json +176 -0
- package/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/config/rules/device_permissions/UWP.json +221 -0
- package/config/rules/device_permissions/android_intents.json +599 -0
- package/config/rules/frameworks/PHP.json +172 -0
- package/config/rules/frameworks/build.json +189 -0
- package/config/rules/frameworks/c.json +45 -0
- package/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/config/rules/frameworks/java.json +291 -0
- package/config/rules/frameworks/javascript.json +318 -0
- package/config/rules/frameworks/logging.json +103 -0
- package/config/rules/frameworks/microsoft.json +257 -0
- package/config/rules/frameworks/python.json +274 -0
- package/config/rules/frameworks/ruby.json +53 -0
- package/config/rules/frameworks/rust.json +77 -0
- package/config/rules/general/OSS_license.json +146 -0
- package/config/rules/general/code_metrics.json +132 -0
- package/config/rules/general/dependencies.json +199 -0
- package/config/rules/general/hygiene.json +47 -0
- package/config/rules/general/platforms.json +283 -0
- package/config/rules/general/solutioninfo.json +378 -0
- package/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/config/rules/networkcomms/outbound_network.json +429 -0
- package/config/rules/os/acl.json +250 -0
- package/config/rules/os/dynamic_execution.json +359 -0
- package/config/rules/os/file_io.json +468 -0
- package/config/rules/os/process.json +179 -0
- package/config/rules/os/setenv.json +270 -0
- package/config/rules/os/system_registry.json +237 -0
- package/config/rules/os/user_accts.json +34 -0
- package/config/rules/security_feature/authentication.json +387 -0
- package/config/rules/security_feature/authorization.json +148 -0
- package/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/config/rules/test_frameworks/go_testing.json +18 -0
- package/config/rules/test_frameworks/java_testing.json +720 -0
- package/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/config/rules/test_frameworks/php_testing.json +156 -0
- package/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/config/rules/test_frameworks/python_testing.json +108 -0
- package/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/config/rules/tools/pipeline.json +195 -0
- package/config/rules/webapp/comms.json +89 -0
- package/config/rules/webapp/headers.json +178 -0
- package/config/rules/webapp/media.json +56 -0
- package/config/rules/webapp/sessions.json +228 -0
- package/config/rules/webapp/storage.json +215 -0
- package/dist/config/.ignore +4 -0
- package/dist/config/comments.json +71 -0
- package/dist/config/fingerprints/_anomalies-full.json +116 -0
- package/dist/config/fingerprints/_extLibs.json +2555 -0
- package/dist/config/fingerprints/code_smells.json +94 -0
- package/dist/config/fingerprints/generated_code.json +17 -0
- package/dist/config/fingerprints/libraries.json +4667 -0
- package/dist/config/ignoredImports.txt +0 -0
- package/dist/config/insider-conf.properties +3 -0
- package/dist/config/rules/cloud_services/ad_networks.json +50 -0
- package/dist/config/rules/cloud_services/bigdata.json +21 -0
- package/dist/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/dist/config/rules/cloud_services/data_storage.json +291 -0
- package/dist/config/rules/cloud_services/ecommerce.json +45 -0
- package/dist/config/rules/cloud_services/socialmedia.json +82 -0
- package/dist/config/rules/cloud_services/web_analytics.json +108 -0
- package/dist/config/rules/components/active_content.json +157 -0
- package/dist/config/rules/components/load_dll.json +66 -0
- package/dist/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/dist/config/rules/cryptography/certificate.json +199 -0
- package/dist/config/rules/cryptography/ciphers.json +174 -0
- package/dist/config/rules/cryptography/crypto_currency.json +32 -0
- package/dist/config/rules/cryptography/encoding.json +20 -0
- package/dist/config/rules/cryptography/extended.json +220 -0
- package/dist/config/rules/cryptography/external_libraries.json +141 -0
- package/dist/config/rules/cryptography/hash_algorithm.json +98 -0
- package/dist/config/rules/cryptography/key_derivation.json +65 -0
- package/dist/config/rules/cryptography/protocol.json +156 -0
- package/dist/config/rules/cryptography/random.json +97 -0
- package/dist/config/rules/cryptography/weakssl.json +206 -0
- package/dist/config/rules/data_handling/compressed_files.json +18 -0
- package/dist/config/rules/data_handling/database.json +361 -0
- package/dist/config/rules/data_handling/deserialization.json +296 -0
- package/dist/config/rules/data_handling/json_parsing.json +49 -0
- package/dist/config/rules/data_handling/media_parsing.json +33 -0
- package/dist/config/rules/data_handling/pastebin.json +18 -0
- package/dist/config/rules/data_handling/xml_parsing.json +168 -0
- package/dist/config/rules/data_types/financial.json +106 -0
- package/dist/config/rules/data_types/media.json +48 -0
- package/dist/config/rules/data_types/secrets.json +91 -0
- package/dist/config/rules/data_types/sensitive.json +176 -0
- package/dist/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/dist/config/rules/device_permissions/UWP.json +221 -0
- package/dist/config/rules/device_permissions/android_intents.json +599 -0
- package/dist/config/rules/frameworks/PHP.json +172 -0
- package/dist/config/rules/frameworks/build.json +189 -0
- package/dist/config/rules/frameworks/c.json +45 -0
- package/dist/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/dist/config/rules/frameworks/java.json +291 -0
- package/dist/config/rules/frameworks/javascript.json +318 -0
- package/dist/config/rules/frameworks/logging.json +103 -0
- package/dist/config/rules/frameworks/microsoft.json +257 -0
- package/dist/config/rules/frameworks/python.json +274 -0
- package/dist/config/rules/frameworks/ruby.json +53 -0
- package/dist/config/rules/frameworks/rust.json +77 -0
- package/dist/config/rules/general/OSS_license.json +146 -0
- package/dist/config/rules/general/code_metrics.json +132 -0
- package/dist/config/rules/general/dependencies.json +199 -0
- package/dist/config/rules/general/hygiene.json +47 -0
- package/dist/config/rules/general/platforms.json +283 -0
- package/dist/config/rules/general/solutioninfo.json +378 -0
- package/dist/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/dist/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/dist/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/dist/config/rules/networkcomms/outbound_network.json +429 -0
- package/dist/config/rules/os/acl.json +250 -0
- package/dist/config/rules/os/dynamic_execution.json +359 -0
- package/dist/config/rules/os/file_io.json +468 -0
- package/dist/config/rules/os/process.json +179 -0
- package/dist/config/rules/os/setenv.json +270 -0
- package/dist/config/rules/os/system_registry.json +237 -0
- package/dist/config/rules/os/user_accts.json +34 -0
- package/dist/config/rules/security_feature/authentication.json +387 -0
- package/dist/config/rules/security_feature/authorization.json +148 -0
- package/dist/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/dist/config/rules/test_frameworks/go_testing.json +18 -0
- package/dist/config/rules/test_frameworks/java_testing.json +720 -0
- package/dist/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/dist/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/dist/config/rules/test_frameworks/php_testing.json +156 -0
- package/dist/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/dist/config/rules/test_frameworks/python_testing.json +108 -0
- package/dist/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/dist/config/rules/tools/pipeline.json +195 -0
- package/dist/config/rules/webapp/comms.json +89 -0
- package/dist/config/rules/webapp/headers.json +178 -0
- package/dist/config/rules/webapp/media.json +56 -0
- package/dist/config/rules/webapp/sessions.json +228 -0
- package/dist/config/rules/webapp/storage.json +215 -0
- package/dist/index.js +13 -0
- package/dist/insider.jar +0 -0
- package/dist/insider.js +7 -0
- package/dist/lib.js +21 -0
- package/docs/config/config.md +3 -0
- package/docs/config/ignore.md +3 -0
- package/docs/config/languages.md +3 -0
- package/docs/index.md +58 -0
- package/dxworks-site.json +13 -0
- package/gradle.properties +0 -0
- package/gradlew +240 -0
- package/gradlew.bat +91 -0
- package/insider/README.md +89 -0
- package/insider/config/.ignore +4 -0
- package/insider/config/comments.json +71 -0
- package/insider/config/fingerprints/_anomalies-full.json +116 -0
- package/insider/config/fingerprints/_extLibs.json +2555 -0
- package/insider/config/fingerprints/code_smells.json +94 -0
- package/insider/config/fingerprints/generated_code.json +17 -0
- package/insider/config/fingerprints/libraries.json +4667 -0
- package/insider/config/ignoredImports.txt +0 -0
- package/insider/config/insider-conf.properties +3 -0
- package/insider/config/rules/cloud_services/ad_networks.json +50 -0
- package/insider/config/rules/cloud_services/bigdata.json +21 -0
- package/insider/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/insider/config/rules/cloud_services/data_storage.json +291 -0
- package/insider/config/rules/cloud_services/ecommerce.json +45 -0
- package/insider/config/rules/cloud_services/socialmedia.json +82 -0
- package/insider/config/rules/cloud_services/web_analytics.json +108 -0
- package/insider/config/rules/components/active_content.json +157 -0
- package/insider/config/rules/components/load_dll.json +66 -0
- package/insider/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/insider/config/rules/cryptography/certificate.json +199 -0
- package/insider/config/rules/cryptography/ciphers.json +174 -0
- package/insider/config/rules/cryptography/crypto_currency.json +32 -0
- package/insider/config/rules/cryptography/encoding.json +20 -0
- package/insider/config/rules/cryptography/extended.json +220 -0
- package/insider/config/rules/cryptography/external_libraries.json +141 -0
- package/insider/config/rules/cryptography/hash_algorithm.json +98 -0
- package/insider/config/rules/cryptography/key_derivation.json +65 -0
- package/insider/config/rules/cryptography/protocol.json +156 -0
- package/insider/config/rules/cryptography/random.json +97 -0
- package/insider/config/rules/cryptography/weakssl.json +206 -0
- package/insider/config/rules/data_handling/compressed_files.json +18 -0
- package/insider/config/rules/data_handling/database.json +361 -0
- package/insider/config/rules/data_handling/deserialization.json +296 -0
- package/insider/config/rules/data_handling/json_parsing.json +49 -0
- package/insider/config/rules/data_handling/media_parsing.json +33 -0
- package/insider/config/rules/data_handling/pastebin.json +18 -0
- package/insider/config/rules/data_handling/xml_parsing.json +168 -0
- package/insider/config/rules/data_types/financial.json +106 -0
- package/insider/config/rules/data_types/media.json +48 -0
- package/insider/config/rules/data_types/secrets.json +91 -0
- package/insider/config/rules/data_types/sensitive.json +176 -0
- package/insider/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/insider/config/rules/device_permissions/UWP.json +221 -0
- package/insider/config/rules/device_permissions/android_intents.json +599 -0
- package/insider/config/rules/frameworks/PHP.json +172 -0
- package/insider/config/rules/frameworks/build.json +189 -0
- package/insider/config/rules/frameworks/c.json +45 -0
- package/insider/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/insider/config/rules/frameworks/java.json +291 -0
- package/insider/config/rules/frameworks/javascript.json +318 -0
- package/insider/config/rules/frameworks/logging.json +103 -0
- package/insider/config/rules/frameworks/microsoft.json +257 -0
- package/insider/config/rules/frameworks/python.json +274 -0
- package/insider/config/rules/frameworks/ruby.json +53 -0
- package/insider/config/rules/frameworks/rust.json +77 -0
- package/insider/config/rules/general/OSS_license.json +146 -0
- package/insider/config/rules/general/code_metrics.json +132 -0
- package/insider/config/rules/general/dependencies.json +199 -0
- package/insider/config/rules/general/hygiene.json +47 -0
- package/insider/config/rules/general/platforms.json +283 -0
- package/insider/config/rules/general/solutioninfo.json +378 -0
- package/insider/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/insider/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/insider/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/insider/config/rules/networkcomms/outbound_network.json +429 -0
- package/insider/config/rules/os/acl.json +250 -0
- package/insider/config/rules/os/dynamic_execution.json +359 -0
- package/insider/config/rules/os/file_io.json +468 -0
- package/insider/config/rules/os/process.json +179 -0
- package/insider/config/rules/os/setenv.json +270 -0
- package/insider/config/rules/os/system_registry.json +237 -0
- package/insider/config/rules/os/user_accts.json +34 -0
- package/insider/config/rules/security_feature/authentication.json +387 -0
- package/insider/config/rules/security_feature/authorization.json +148 -0
- package/insider/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/insider/config/rules/test_frameworks/go_testing.json +18 -0
- package/insider/config/rules/test_frameworks/java_testing.json +720 -0
- package/insider/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/insider/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/insider/config/rules/test_frameworks/php_testing.json +156 -0
- package/insider/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/insider/config/rules/test_frameworks/python_testing.json +108 -0
- package/insider/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/insider/config/rules/tools/pipeline.json +195 -0
- package/insider/config/rules/webapp/comms.json +89 -0
- package/insider/config/rules/webapp/headers.json +178 -0
- package/insider/config/rules/webapp/media.json +56 -0
- package/insider/config/rules/webapp/sessions.json +228 -0
- package/insider/config/rules/webapp/storage.json +215 -0
- package/insider/insider.bat +1 -0
- package/insider/insider.jar +0 -0
- package/insider/insider.sh +1 -0
- package/insider/languages.yml +3988 -0
- package/instrument.yml +37 -0
- package/languages.yml +3988 -0
- package/lib/index.js +13 -0
- package/lib/insider.js +7 -0
- package/lib/lib.js +21 -0
- package/lombok.config +2 -0
- package/mkdocs.yml +18 -0
- package/package.json +51 -0
- package/releaseNotes/v2.6.0.md +1 -0
- package/releaseNotes/v2.7.1.md +1 -0
- package/settings.gradle +2 -0
- package/src/main/java/org/dxworks/insider/ChronosTag.java +14 -0
- package/src/main/java/org/dxworks/insider/Insider.java +214 -0
- package/src/main/java/org/dxworks/insider/InsiderAnalysis.java +7 -0
- package/src/main/java/org/dxworks/insider/InsiderFile.java +125 -0
- package/src/main/java/org/dxworks/insider/InsiderOptions.java +78 -0
- package/src/main/java/org/dxworks/insider/InsiderResult.java +15 -0
- package/src/main/java/org/dxworks/insider/application/inspector/CodeRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/CommentRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/FileRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/RuleExtractor.java +11 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Comment.java +18 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/CommentPattern.java +44 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Condition.java +15 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/InsiderPattern.java +149 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/PatternMatch.java +23 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Rule.java +61 -0
- package/src/main/java/org/dxworks/insider/application/inspector/services/CommentService.java +165 -0
- package/src/main/java/org/dxworks/insider/application/inspector/services/RuleService.java +54 -0
- package/src/main/java/org/dxworks/insider/commands/AddCommand.java +125 -0
- package/src/main/java/org/dxworks/insider/commands/AllFilesCommand.java +4 -0
- package/src/main/java/org/dxworks/insider/commands/ConvertCommand.java +55 -0
- package/src/main/java/org/dxworks/insider/commands/DetectCommand.java +42 -0
- package/src/main/java/org/dxworks/insider/commands/DiagnoseCommand.java +74 -0
- package/src/main/java/org/dxworks/insider/commands/ExtractCommand.java +35 -0
- package/src/main/java/org/dxworks/insider/commands/FindCommand.java +102 -0
- package/src/main/java/org/dxworks/insider/commands/HelpCommand.java +56 -0
- package/src/main/java/org/dxworks/insider/commands/IndentationCount.java +69 -0
- package/src/main/java/org/dxworks/insider/commands/InsiderCommand.java +71 -0
- package/src/main/java/org/dxworks/insider/commands/InspectCommand.java +98 -0
- package/src/main/java/org/dxworks/insider/commands/MeasureCommand.java +47 -0
- package/src/main/java/org/dxworks/insider/commands/NoFilesCommand.java +4 -0
- package/src/main/java/org/dxworks/insider/commands/VersionCommand.java +34 -0
- package/src/main/java/org/dxworks/insider/configuration/InsiderConfiguration.java +123 -0
- package/src/main/java/org/dxworks/insider/constants/InsiderConstants.java +19 -0
- package/src/main/java/org/dxworks/insider/depext/AbstractImportsProcessor.java +57 -0
- package/src/main/java/org/dxworks/insider/depext/CPPImportsProcessor.java +55 -0
- package/src/main/java/org/dxworks/insider/depext/CSharpImportsProcessor.java +53 -0
- package/src/main/java/org/dxworks/insider/depext/DependencyExtractor.java +105 -0
- package/src/main/java/org/dxworks/insider/depext/ImportItem.java +19 -0
- package/src/main/java/org/dxworks/insider/depext/ImportResult.java +32 -0
- package/src/main/java/org/dxworks/insider/depext/JavastackImportsProcessor.java +88 -0
- package/src/main/java/org/dxworks/insider/depext/VBImportsProcessor.java +41 -0
- package/src/main/java/org/dxworks/insider/exceptions/InsiderException.java +7 -0
- package/src/main/java/org/dxworks/insider/library/detector/C_ImportsContainer.java +73 -0
- package/src/main/java/org/dxworks/insider/library/detector/ImportsContainer.java +122 -0
- package/src/main/java/org/dxworks/insider/library/detector/JavaImportsContainer.java +63 -0
- package/src/main/java/org/dxworks/insider/library/detector/LibraryDetector.java +150 -0
- package/src/main/java/org/dxworks/insider/library/detector/LibraryDetectorLanguage.java +6 -0
- package/src/main/java/org/dxworks/insider/library/detector/model/PackagingUnit.java +26 -0
- package/src/main/java/org/dxworks/insider/technology/finder/LinguistService.java +79 -0
- package/src/main/java/org/dxworks/insider/technology/finder/converters/XmlToJsonConverter.java +41 -0
- package/src/main/java/org/dxworks/insider/technology/finder/exceptions/FingerprintParseException.java +7 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/Technology.java +73 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/json/JsonConfigurationDTO.java +14 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/json/TechnologyJsonDTO.java +66 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/CategoryXmlDTO.java +21 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/ConfigurationDataXmlDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/FingerprintXmlDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguageXmlDTO.java +20 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguagesXmlDTO.java +18 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/TechnologyXmlDTO.java +19 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/XmlConfigurationDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsParser.java +14 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParser.java +57 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/JavaLibrariesCsvParser.java +71 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/JsonFingerprintParser.java +58 -0
- package/src/main/java/org/dxworks/insider/utils/FileUtils.java +45 -0
- package/src/main/java/org/dxworks/insider/utils/ImportUtils.java +21 -0
- package/src/main/java/org/dxworks/insider/utils/LibraryImport.java +17 -0
- package/src/main/java/org/dxworks/insider/utils/LibraryImportInOtherTechnology.java +30 -0
- package/src/main/java/org/dxworks/insider/utils/MapUtils.java +19 -0
- package/src/main/resources/insider-version +1 -0
- package/src/test/java/org/dxworks/insider/application/inspector/services/CommentServiceTest.java +40 -0
- package/src/test/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParserTest.java +15 -0
- package/src/test/java/org/dxworks/insider/utils/FileUtilsTest.java +31 -0
- package/src/test/java/org/dxworks/insider/utils/ImportUtilsTest.java +24 -0
- package/src/test/java/org/dxworks/insider/utils/transformers/JsonToCsvTransformerTest.java +18 -0
- package/src/test/resources/Test1.java +21 -0
- package/src/test/resources/Test2.java +21 -0
- package/src/test/resources/cobol/CM201M.CBL +88 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import lombok.extern.slf4j.Slf4j;
|
|
4
|
+
import org.dxworks.insider.InsiderFile;
|
|
5
|
+
import org.dxworks.insider.technology.finder.model.Technology;
|
|
6
|
+
import org.dxworks.insider.technology.finder.parsers.JavaLibrariesCsvParser;
|
|
7
|
+
import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
|
|
8
|
+
|
|
9
|
+
import java.io.IOException;
|
|
10
|
+
import java.nio.file.Paths;
|
|
11
|
+
import java.util.List;
|
|
12
|
+
|
|
13
|
+
@Slf4j
|
|
14
|
+
public class ConvertCommand implements NoFilesCommand {
|
|
15
|
+
protected String sourceFile;
|
|
16
|
+
protected String targetFile;
|
|
17
|
+
|
|
18
|
+
@Override
|
|
19
|
+
public boolean parse(List<String> args) {
|
|
20
|
+
if (args.size() != 3)
|
|
21
|
+
return false;
|
|
22
|
+
|
|
23
|
+
sourceFile = args.get(1);
|
|
24
|
+
targetFile = args.get(2);
|
|
25
|
+
|
|
26
|
+
return fileExists(sourceFile);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@Override
|
|
30
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
31
|
+
try {
|
|
32
|
+
transformJsonFileToCsv(sourceFile, targetFile);
|
|
33
|
+
} catch (IOException e) {
|
|
34
|
+
log.error("Could not transform file!", e);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private void transformJsonFileToCsv(String jsonFile, String csvFile) throws IOException {
|
|
39
|
+
JsonFingerprintParser jsonFingerprintParser = new JsonFingerprintParser();
|
|
40
|
+
List<Technology> technologies = jsonFingerprintParser.parseTechnologiesFile(jsonFile);
|
|
41
|
+
|
|
42
|
+
JavaLibrariesCsvParser javaLibrariesCsvParser = new JavaLibrariesCsvParser();
|
|
43
|
+
javaLibrariesCsvParser.writeTechnologiesToFile(technologies, Paths.get(csvFile));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public String usage() {
|
|
48
|
+
return "insider convert <path_to_json> <path_to_csv>";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Override
|
|
52
|
+
public String getName() {
|
|
53
|
+
return CONVERT;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import org.dxworks.insider.InsiderFile;
|
|
4
|
+
import org.dxworks.insider.library.detector.LibraryDetector;
|
|
5
|
+
import org.dxworks.insider.library.detector.LibraryDetectorLanguage;
|
|
6
|
+
import org.dxworks.insider.technology.finder.LinguistService;
|
|
7
|
+
|
|
8
|
+
import java.util.List;
|
|
9
|
+
|
|
10
|
+
public class DetectCommand implements InsiderCommand {
|
|
11
|
+
|
|
12
|
+
@Override
|
|
13
|
+
public boolean parse(List<String> args) {
|
|
14
|
+
return args.size() == 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@Override
|
|
19
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
20
|
+
LibraryDetector libraryDetector = new LibraryDetector(LibraryDetectorLanguage.JAVA);
|
|
21
|
+
insiderFiles.stream()
|
|
22
|
+
.filter(libraryDetector::accepts)
|
|
23
|
+
.forEach(libraryDetector::analyze);
|
|
24
|
+
|
|
25
|
+
libraryDetector.generateResults();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Override
|
|
29
|
+
public String usage() {
|
|
30
|
+
return "insider detect";
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
public String getName() {
|
|
35
|
+
return DETECT;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@Override
|
|
39
|
+
public boolean acceptsFile(String path) {
|
|
40
|
+
return LinguistService.getInstance().hasAcceptedExtension(path, LibraryDetector.ACCEPTED_LANGUAGES);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import org.dxworks.insider.InsiderFile;
|
|
4
|
+
import org.dxworks.insider.technology.finder.model.Technology;
|
|
5
|
+
import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
|
|
6
|
+
import org.dxworks.insider.utils.ImportUtils;
|
|
7
|
+
import org.dxworks.insider.utils.LibraryImport;
|
|
8
|
+
import org.dxworks.insider.utils.LibraryImportInOtherTechnology;
|
|
9
|
+
|
|
10
|
+
import java.util.ArrayList;
|
|
11
|
+
import java.util.List;
|
|
12
|
+
import java.util.Map;
|
|
13
|
+
import java.util.stream.Collectors;
|
|
14
|
+
|
|
15
|
+
public class DiagnoseCommand implements NoFilesCommand {
|
|
16
|
+
|
|
17
|
+
private String file;
|
|
18
|
+
|
|
19
|
+
@Override
|
|
20
|
+
public boolean parse(List<String> args) {
|
|
21
|
+
if (args.size() != 2)
|
|
22
|
+
return false;
|
|
23
|
+
|
|
24
|
+
file = args.get(1);
|
|
25
|
+
|
|
26
|
+
return fileExists(file);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@Override
|
|
30
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
31
|
+
|
|
32
|
+
JsonFingerprintParser jsonFingerprintParser = new JsonFingerprintParser();
|
|
33
|
+
List<Technology> jsonTechnologies = jsonFingerprintParser.parseTechnologiesFile(file);
|
|
34
|
+
|
|
35
|
+
List<String> duplicatedTechnologies = jsonTechnologies.stream()
|
|
36
|
+
.collect(Collectors.groupingBy(Technology::getName, Collectors.counting()))
|
|
37
|
+
.entrySet().stream()
|
|
38
|
+
.filter(e -> e.getValue() > 1)
|
|
39
|
+
.map(Map.Entry::getKey)
|
|
40
|
+
.collect(Collectors.toList());
|
|
41
|
+
|
|
42
|
+
System.out.println("Duplicated technologies: " + duplicatedTechnologies.toString());
|
|
43
|
+
|
|
44
|
+
List<LibraryImportInOtherTechnology> duplicatedFingerPrints = new ArrayList<>();
|
|
45
|
+
|
|
46
|
+
jsonTechnologies.forEach(technology -> {
|
|
47
|
+
List<String> fingerprints = technology.getFingerprints();
|
|
48
|
+
fingerprints.forEach(fingerprint ->
|
|
49
|
+
jsonTechnologies.forEach(otherTechnology -> {
|
|
50
|
+
if (technology.equals(otherTechnology))
|
|
51
|
+
return;
|
|
52
|
+
if (otherTechnology.getFingerprints().contains(fingerprint)) {
|
|
53
|
+
duplicatedFingerPrints.add(new LibraryImportInOtherTechnology(fingerprint, technology.getName(), otherTechnology.getName()));
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
System.out.println("Duplicated Fingerprints: " + duplicatedFingerPrints.stream()
|
|
59
|
+
.distinct()
|
|
60
|
+
.map(LibraryImport::get_import)
|
|
61
|
+
.map(ImportUtils::unwrapImportPackage)
|
|
62
|
+
.collect(Collectors.toList()));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Override
|
|
66
|
+
public String usage() {
|
|
67
|
+
return "insider diagnose <path_to_json>";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@Override
|
|
71
|
+
public String getName() {
|
|
72
|
+
return DIAGNOSE;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import org.dxworks.insider.InsiderFile;
|
|
4
|
+
import org.dxworks.insider.depext.DependencyExtractor;
|
|
5
|
+
|
|
6
|
+
import java.util.List;
|
|
7
|
+
|
|
8
|
+
public class ExtractCommand implements InsiderCommand {
|
|
9
|
+
private final DependencyExtractor dependencyExtractor = new DependencyExtractor();
|
|
10
|
+
|
|
11
|
+
@Override
|
|
12
|
+
public boolean parse(List<String> args) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
18
|
+
dependencyExtractor.processAndWriteResults(insiderFiles);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
public String usage() {
|
|
23
|
+
return "insider extract";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Override
|
|
27
|
+
public String getName() {
|
|
28
|
+
return EXTRACT;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
public boolean acceptsFile(String path) {
|
|
33
|
+
return dependencyExtractor.acceptFile(path);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import lombok.extern.slf4j.Slf4j;
|
|
5
|
+
import me.tongfei.progressbar.ProgressBar;
|
|
6
|
+
import me.tongfei.progressbar.ProgressBarBuilder;
|
|
7
|
+
import me.tongfei.progressbar.ProgressBarStyle;
|
|
8
|
+
import org.dxworks.insider.InsiderFile;
|
|
9
|
+
import org.dxworks.insider.InsiderResult;
|
|
10
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
11
|
+
import org.dxworks.insider.technology.finder.model.Technology;
|
|
12
|
+
import org.dxworks.insider.technology.finder.model.json.JsonConfigurationDTO;
|
|
13
|
+
import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
|
|
14
|
+
|
|
15
|
+
import java.io.File;
|
|
16
|
+
import java.io.FileWriter;
|
|
17
|
+
import java.io.IOException;
|
|
18
|
+
import java.nio.file.Paths;
|
|
19
|
+
import java.util.List;
|
|
20
|
+
import java.util.Objects;
|
|
21
|
+
import java.util.stream.Collectors;
|
|
22
|
+
import java.util.stream.Stream;
|
|
23
|
+
|
|
24
|
+
import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
|
|
25
|
+
|
|
26
|
+
@Slf4j
|
|
27
|
+
public class FindCommand implements InsiderCommand {
|
|
28
|
+
|
|
29
|
+
private List<String> fingerprintFiles;
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
public boolean parse(List<String> args) {
|
|
33
|
+
if (args.size() == 1) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
List<String> files = args.subList(1, args.size());
|
|
38
|
+
fingerprintFiles = files.stream().filter(this::fileExists).collect(Collectors.toList());
|
|
39
|
+
|
|
40
|
+
return !fingerprintFiles.isEmpty() && files.size() == fingerprintFiles.size();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Override
|
|
44
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
45
|
+
JsonFingerprintParser parser = new JsonFingerprintParser();
|
|
46
|
+
|
|
47
|
+
fingerprintFiles.forEach(file -> {
|
|
48
|
+
JsonConfigurationDTO configurationDTO = parser.getConfigurationDTO(file);
|
|
49
|
+
|
|
50
|
+
List<Technology> technologies = parser.parseTechnologiesFile(file);
|
|
51
|
+
|
|
52
|
+
List<InsiderResult> insiderResults;
|
|
53
|
+
|
|
54
|
+
try (ProgressBar pb = new ProgressBarBuilder()
|
|
55
|
+
.setInitialMax(insiderFiles.size())
|
|
56
|
+
.setUnit(" Files", 1)
|
|
57
|
+
.setTaskName("Matching")
|
|
58
|
+
.setStyle(ProgressBarStyle.ASCII)
|
|
59
|
+
.setUpdateIntervalMillis(100)
|
|
60
|
+
.setPrintStream(System.err)
|
|
61
|
+
.build()) {
|
|
62
|
+
insiderResults = insiderFiles.parallelStream()
|
|
63
|
+
.flatMap(insiderFile ->
|
|
64
|
+
{
|
|
65
|
+
Stream<InsiderResult> insiderResultStream = technologies.parallelStream()
|
|
66
|
+
.map(technology -> technology.analyze(insiderFile))
|
|
67
|
+
.filter(Objects::nonNull)
|
|
68
|
+
.filter(insiderResult -> insiderResult.getValue() > 0);
|
|
69
|
+
pb.step();
|
|
70
|
+
return insiderResultStream;
|
|
71
|
+
})
|
|
72
|
+
.collect(Collectors.toList());
|
|
73
|
+
}
|
|
74
|
+
int sum = insiderResults.stream().mapToInt(InsiderResult::getValue).sum();
|
|
75
|
+
|
|
76
|
+
System.out.println(sum);
|
|
77
|
+
|
|
78
|
+
String outputFileName = configurationDTO.getOutputFileName();
|
|
79
|
+
if (outputFileName == null) {
|
|
80
|
+
outputFileName = InsiderConfiguration.getInstance().getProjectID() + "-" + Paths.get(file).toFile().getName();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
ObjectMapper objectMapper = new ObjectMapper();
|
|
84
|
+
File outputFile = Paths.get(RESULTS_FOLDER, outputFileName).toFile();
|
|
85
|
+
try {
|
|
86
|
+
objectMapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(outputFile), insiderResults);
|
|
87
|
+
} catch (IOException e) {
|
|
88
|
+
log.error("Could not write JSON file" + outputFile + "!", e);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@Override
|
|
94
|
+
public String usage() {
|
|
95
|
+
return "insider find <paths_to_json>...";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@Override
|
|
99
|
+
public String getName() {
|
|
100
|
+
return FIND;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import org.dxworks.insider.InsiderFile;
|
|
4
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
5
|
+
|
|
6
|
+
import java.util.List;
|
|
7
|
+
import java.util.stream.Collectors;
|
|
8
|
+
import java.util.stream.Stream;
|
|
9
|
+
|
|
10
|
+
public class HelpCommand implements NoFilesCommand {
|
|
11
|
+
@Override
|
|
12
|
+
public boolean parse(List<String> args) {
|
|
13
|
+
if (args.size() != 1)
|
|
14
|
+
return false;
|
|
15
|
+
|
|
16
|
+
return HELP.contains(args.get(0));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Override
|
|
20
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
21
|
+
String usage = "Insider " + InsiderConfiguration.getInstance().getInsiderVersion() + " - usage guide:\n";
|
|
22
|
+
usage += "Configure the source root and the project id in the config/insider-conf.properties file\n\n";
|
|
23
|
+
|
|
24
|
+
usage += "This is a list of the commands:\n";
|
|
25
|
+
|
|
26
|
+
usage += Stream.of(
|
|
27
|
+
new HelpCommand(),
|
|
28
|
+
new VersionCommand(),
|
|
29
|
+
new AddCommand(),
|
|
30
|
+
new ConvertCommand(),
|
|
31
|
+
new DiagnoseCommand(),
|
|
32
|
+
new DetectCommand(),
|
|
33
|
+
new FindCommand(),
|
|
34
|
+
new InspectCommand(),
|
|
35
|
+
new ExtractCommand(),
|
|
36
|
+
new MeasureCommand(),
|
|
37
|
+
new IndentationCount())
|
|
38
|
+
.map(InsiderCommand::usage)
|
|
39
|
+
.map(s -> "\t" + s)
|
|
40
|
+
.collect(Collectors.joining("\n"));
|
|
41
|
+
|
|
42
|
+
usage += "\n\nPlease run insider with the specified commands from the folder you have installed Insider to!\n";
|
|
43
|
+
|
|
44
|
+
System.out.println(usage);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@Override
|
|
48
|
+
public String usage() {
|
|
49
|
+
return "insider {-h | -help | --help | help}";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@Override
|
|
53
|
+
public String getName() {
|
|
54
|
+
return "help";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import lombok.SneakyThrows;
|
|
5
|
+
import org.dxworks.insider.InsiderFile;
|
|
6
|
+
import org.dxworks.insider.InsiderResult;
|
|
7
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
8
|
+
import org.dxworks.insider.constants.InsiderConstants;
|
|
9
|
+
|
|
10
|
+
import java.nio.file.Path;
|
|
11
|
+
import java.util.Arrays;
|
|
12
|
+
import java.util.IntSummaryStatistics;
|
|
13
|
+
import java.util.List;
|
|
14
|
+
import java.util.stream.Collectors;
|
|
15
|
+
import java.util.stream.Stream;
|
|
16
|
+
|
|
17
|
+
public class IndentationCount implements AllFilesCommand {
|
|
18
|
+
@Override
|
|
19
|
+
public boolean parse(List<String> args) {
|
|
20
|
+
return args.size() == 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@SneakyThrows
|
|
24
|
+
@Override
|
|
25
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
26
|
+
List<InsiderResult> insiderResults = insiderFiles.stream().flatMap(file -> {
|
|
27
|
+
IntSummaryStatistics summary = Arrays.stream(file.getContent().split("\n"))
|
|
28
|
+
.filter(l -> !l.isBlank())
|
|
29
|
+
.mapToInt(this::getLineIndentation)
|
|
30
|
+
.summaryStatistics();
|
|
31
|
+
|
|
32
|
+
return Stream.of(new InsiderResult("max_indentation", "complexity", file.getFullyQualifiedName(), summary.getMax()),
|
|
33
|
+
new InsiderResult("avg_indentation", "complexity", file.getFullyQualifiedName(), (int) Math.round(summary.getAverage())),
|
|
34
|
+
new InsiderResult("total_indentation", "complexity", file.getFullyQualifiedName(), (int) summary.getSum())
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
).collect(Collectors.toList());
|
|
38
|
+
|
|
39
|
+
ObjectMapper objectMapper = new ObjectMapper();
|
|
40
|
+
|
|
41
|
+
objectMapper.writeValue(Path.of(InsiderConstants.RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-indentation.json").toFile(), insiderResults);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private int getLineIndentation(String l) {
|
|
45
|
+
int indentation = 0;
|
|
46
|
+
for (int i = 0; i < l.toCharArray().length; i++) {
|
|
47
|
+
char ch = l.charAt(i);
|
|
48
|
+
if (Character.isWhitespace(ch)) {
|
|
49
|
+
if (ch == '\t')
|
|
50
|
+
indentation += 2;
|
|
51
|
+
if (ch == ' ')
|
|
52
|
+
indentation += 1;
|
|
53
|
+
} else {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return indentation / 2;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@Override
|
|
61
|
+
public String usage() {
|
|
62
|
+
return "insider indent";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Override
|
|
66
|
+
public String getName() {
|
|
67
|
+
return INDENT;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import org.dxworks.insider.InsiderFile;
|
|
4
|
+
import org.slf4j.Logger;
|
|
5
|
+
import org.slf4j.LoggerFactory;
|
|
6
|
+
|
|
7
|
+
import java.nio.file.Files;
|
|
8
|
+
import java.nio.file.Path;
|
|
9
|
+
import java.nio.file.Paths;
|
|
10
|
+
import java.util.Arrays;
|
|
11
|
+
import java.util.List;
|
|
12
|
+
|
|
13
|
+
public interface InsiderCommand {
|
|
14
|
+
|
|
15
|
+
Logger log = LoggerFactory.getLogger(InsiderCommand.class);
|
|
16
|
+
|
|
17
|
+
String DETECT = "detect";
|
|
18
|
+
String FIND = "find";
|
|
19
|
+
String ADD = "add";
|
|
20
|
+
String DIAGNOSE = "diagnose";
|
|
21
|
+
String CONVERT = "convert";
|
|
22
|
+
String INSPECT = "inspect";
|
|
23
|
+
String EXTRACT = "extract";
|
|
24
|
+
String INDENT = "indent";
|
|
25
|
+
String MEASURE = "measure";
|
|
26
|
+
List<String> VERSION = Arrays.asList("version", "-version", "--version", "-v");
|
|
27
|
+
List<String> HELP = Arrays.asList("help", "-help", "--help", "-h");
|
|
28
|
+
|
|
29
|
+
boolean parse(List<String> args);
|
|
30
|
+
|
|
31
|
+
default boolean fileExists(String filePath) {
|
|
32
|
+
Path path = Path.of(filePath).toAbsolutePath();
|
|
33
|
+
|
|
34
|
+
if (!Files.exists(path)) {
|
|
35
|
+
log.error("File " + path.toAbsolutePath() + " does not exist");
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!Files.isRegularFile(path)) {
|
|
40
|
+
log.error("File " + path.toAbsolutePath() + " is not a file!");
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
default boolean folderExists(String folderPath) {
|
|
48
|
+
Path path = Paths.get(folderPath).toAbsolutePath();
|
|
49
|
+
if (!Files.exists(path)) {
|
|
50
|
+
log.error("Folder " + path.toAbsolutePath() + " does not exist");
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!Files.isDirectory(path)) {
|
|
55
|
+
log.error("Folder " + path.toAbsolutePath() + " is not a firectory!");
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
default boolean acceptsFile(String path) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void execute(List<InsiderFile> insiderFiles, List<String> args);
|
|
67
|
+
|
|
68
|
+
String usage();
|
|
69
|
+
|
|
70
|
+
String getName();
|
|
71
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import lombok.extern.slf4j.Slf4j;
|
|
5
|
+
import me.tongfei.progressbar.ProgressBar;
|
|
6
|
+
import me.tongfei.progressbar.ProgressBarBuilder;
|
|
7
|
+
import me.tongfei.progressbar.ProgressBarStyle;
|
|
8
|
+
import org.apache.commons.lang.math.IntRange;
|
|
9
|
+
import org.dxworks.insider.ChronosTag;
|
|
10
|
+
import org.dxworks.insider.InsiderFile;
|
|
11
|
+
import org.dxworks.insider.InsiderResult;
|
|
12
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
13
|
+
import org.dxworks.insider.application.inspector.dtos.Rule;
|
|
14
|
+
import org.dxworks.insider.application.inspector.services.CommentService;
|
|
15
|
+
import org.dxworks.insider.application.inspector.services.RuleService;
|
|
16
|
+
|
|
17
|
+
import java.io.IOException;
|
|
18
|
+
import java.nio.file.Paths;
|
|
19
|
+
import java.util.ArrayList;
|
|
20
|
+
import java.util.List;
|
|
21
|
+
import java.util.Map;
|
|
22
|
+
import java.util.stream.Collectors;
|
|
23
|
+
import java.util.stream.Stream;
|
|
24
|
+
|
|
25
|
+
import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
|
|
26
|
+
|
|
27
|
+
@Slf4j
|
|
28
|
+
public class InspectCommand implements InsiderCommand {
|
|
29
|
+
|
|
30
|
+
private List<String> ruleFiles;
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public boolean parse(List<String> args) {
|
|
34
|
+
if (args.size() == 1)
|
|
35
|
+
return false;
|
|
36
|
+
|
|
37
|
+
List<String> files = args.subList(1, args.size());
|
|
38
|
+
ruleFiles = files.stream().filter(filePath -> folderExists(filePath) || fileExists(filePath)).collect(Collectors.toList());
|
|
39
|
+
|
|
40
|
+
return !ruleFiles.isEmpty() && files.size() == ruleFiles.size();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Override
|
|
44
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
45
|
+
RuleService ruleService = new RuleService();
|
|
46
|
+
List<Rule> rules = ruleService.getRuleFromFiles(ruleFiles);
|
|
47
|
+
rules.forEach(Rule::transformPatterns);
|
|
48
|
+
|
|
49
|
+
List<InsiderResult> insiderResults;
|
|
50
|
+
|
|
51
|
+
try (ProgressBar pb = new ProgressBarBuilder()
|
|
52
|
+
.setInitialMax(insiderFiles.size())
|
|
53
|
+
.setUnit(" Files", 1)
|
|
54
|
+
.setTaskName("Inspecting...")
|
|
55
|
+
.setStyle(ProgressBarStyle.ASCII)
|
|
56
|
+
.setUpdateIntervalMillis(100)
|
|
57
|
+
.setPrintStream(System.err)
|
|
58
|
+
.build()) {
|
|
59
|
+
insiderResults = insiderFiles.parallelStream()
|
|
60
|
+
.flatMap(insiderFile -> {
|
|
61
|
+
List<IntRange> commentRanges = getCommentRanges(insiderFile);
|
|
62
|
+
|
|
63
|
+
Stream<InsiderResult> insiderResultStream = rules.parallelStream()
|
|
64
|
+
.flatMap(rule -> rule.analyze(insiderFile, commentRanges).stream());
|
|
65
|
+
pb.step();
|
|
66
|
+
return insiderResultStream;
|
|
67
|
+
})
|
|
68
|
+
.collect(Collectors.toList());
|
|
69
|
+
|
|
70
|
+
List<ChronosTag> chronosTags = insiderResults.stream().map(insiderResult -> new ChronosTag(insiderResult.getFile(), "appinspector." + insiderResult.getName(), insiderResult.getValue())).collect(Collectors.toList());
|
|
71
|
+
Map<String, Map<String, List<ChronosTag>>> chronosResult = Map.of("file", Map.of("concerns", chronosTags));
|
|
72
|
+
|
|
73
|
+
ObjectMapper objectMapper = new ObjectMapper();
|
|
74
|
+
objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-tags.json").toFile(), insiderResults);
|
|
75
|
+
objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-chronos-tags.json").toFile(), chronosResult);
|
|
76
|
+
} catch (IOException e) {
|
|
77
|
+
log.error("Inspect command finished unsuccessfully!", e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private List<IntRange> getCommentRanges(InsiderFile insiderFile) {
|
|
82
|
+
List<IntRange> commentRanges = new ArrayList<>();
|
|
83
|
+
CommentService commentService = CommentService.getInstance();
|
|
84
|
+
commentRanges.addAll(commentService.extractInlineCommentLines(insiderFile));
|
|
85
|
+
commentRanges.addAll(commentService.extractMultilineCommentLines(insiderFile));
|
|
86
|
+
return commentRanges;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Override
|
|
90
|
+
public String usage() {
|
|
91
|
+
return "insider inspect <paths_to_rule>...";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@Override
|
|
95
|
+
public String getName() {
|
|
96
|
+
return INSPECT;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
package org.dxworks.insider.commands;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import org.dxworks.insider.ChronosTag;
|
|
5
|
+
import org.dxworks.insider.InsiderFile;
|
|
6
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
7
|
+
|
|
8
|
+
import java.io.IOException;
|
|
9
|
+
import java.nio.file.Paths;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
import java.util.stream.Collectors;
|
|
12
|
+
import java.util.stream.Stream;
|
|
13
|
+
|
|
14
|
+
import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
|
|
15
|
+
|
|
16
|
+
public class MeasureCommand implements AllFilesCommand {
|
|
17
|
+
@Override
|
|
18
|
+
public boolean parse(List<String> args) {
|
|
19
|
+
return args.size() == 1;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Override
|
|
23
|
+
public void execute(List<InsiderFile> insiderFiles, List<String> args) {
|
|
24
|
+
List<ChronosTag> sizeTags = insiderFiles.stream().flatMap(insiderFile -> Stream.of(
|
|
25
|
+
new ChronosTag(insiderFile.getFullyQualifiedName(), "loc", insiderFile.getLines()),
|
|
26
|
+
new ChronosTag(insiderFile.getFullyQualifiedName(), "size", (int) insiderFile.getSize()))
|
|
27
|
+
).collect(Collectors.toList());
|
|
28
|
+
|
|
29
|
+
ObjectMapper objectMapper = new ObjectMapper();
|
|
30
|
+
try {
|
|
31
|
+
objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-size.json").toFile(), sizeTags);
|
|
32
|
+
} catch (IOException e) {
|
|
33
|
+
System.err.println("Measure command finished unsuccessfully");
|
|
34
|
+
e.printStackTrace();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@Override
|
|
39
|
+
public String usage() {
|
|
40
|
+
return "insider measure";
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Override
|
|
44
|
+
public String getName() {
|
|
45
|
+
return MEASURE;
|
|
46
|
+
}
|
|
47
|
+
}
|