diff --git a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st index 3526b86..5535161 100644 --- a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st +++ b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st @@ -21,25 +21,26 @@ BaselineOfMooseRuleEngine >> defineDependencies: spec [ spec baseline: 'Mocketry' with: [ spec repository: 'github://dionisiydk/Mocketry' ]. - + spec baseline: 'LLMAPI' with: [ spec repository: 'github://Evref-BL/Pharo-LLMAPI:main/src' ]. - - spec - baseline: 'SonarqubePharoAPI' + + spec + baseline: 'SonarqubePharoAPI' with: [ - spec repository: 'github://Evref-BL/Sonarqube-Pharo-API:develop' ]. + spec repository: 'github://Evref-BL/Sonarqube-Pharo-API:develop' ]. spec baseline: 'FASTJava' with: [ spec repository: 'github://moosetechnology/FAST-Java:v3/src'; - loads: #( 'smacc' ) ]. - + loads: #( 'smacc' ) ] ] { #category : 'groups' } BaselineOfMooseRuleEngine >> defineGroups: spec [ + + ] { #category : 'packages' } @@ -47,8 +48,8 @@ BaselineOfMooseRuleEngine >> definePackages: spec [ spec package: 'MooseRuleEngine' - with: [ spec requires: #( 'LLMAPI' 'SonarqubePharoAPI' 'FASTJava' ) ]. + with: [ spec requires: #( 'LLMAPI' 'SonarqubePharoAPI' ) ]. spec package: 'MooseRuleEngine-Tests' - with: [ spec requires: #( 'MooseRuleEngine' 'Mocketry' ) ] + with: [ spec requires: #( 'MooseRuleEngine' 'Mocketry' 'FASTJava' ) ] ] diff --git a/src/MooseRuleEngine-Tests/MRERuleTest.class.st b/src/MooseRuleEngine-Tests/MRERuleTest.class.st index c966b42..d7edca7 100644 --- a/src/MooseRuleEngine-Tests/MRERuleTest.class.st +++ b/src/MooseRuleEngine-Tests/MRERuleTest.class.st @@ -8,6 +8,18 @@ Class { #package : 'MooseRuleEngine-Tests' } +{ #category : 'tests' } +MRERuleTest >> testDoesNotApplyWithoutSupportedExtensions [ + + | rule file | + rule := MRERule new. + file := MREFile new + path: 'test.java'; + content: 'content'. + + self deny: (rule appliesToFile: file) +] + { #category : 'tests' } MRERuleTest >> testGetHelper [ diff --git a/src/MooseRuleEngine-Tests/MooseRuleEngineTest.class.st b/src/MooseRuleEngine-Tests/MooseRuleEngineTest.class.st index 906720a..382ea97 100644 --- a/src/MooseRuleEngine-Tests/MooseRuleEngineTest.class.st +++ b/src/MooseRuleEngine-Tests/MooseRuleEngineTest.class.st @@ -71,6 +71,44 @@ MooseRuleEngineTest >> testDetectAndFix [ self assert: result size equals: 1 ] +{ #category : 'tests' } +MooseRuleEngineTest >> testDetectIgnoresUnsupportedFiles [ + + | violations | + ruleEngine rules: { rule1 }. + ruleEngine files: { + file1. + file2 }. + + violations := ruleEngine detect. + + self assert: violations size equals: 1. + self assert: violations first rule equals: rule1 +] + +{ #category : 'tests' } +MooseRuleEngineTest >> testDetectMixedRuleTypes [ + + | javaRule violations | + javaRule := RuleMockJava new. + ruleEngine rules: { + rule1. + javaRule }. + ruleEngine files: { + file1. + file2 }. + + violations := ruleEngine detect. + + self assert: violations size equals: 2. + self + assertCollection: + (violations collect: [ :violation | violation rule ]) + hasSameElements: { + rule1. + javaRule } +] + { #category : 'tests' } MooseRuleEngineTest >> testDetectWithoutFiles [ diff --git a/src/MooseRuleEngine-Tests/RuleMock1.class.st b/src/MooseRuleEngine-Tests/RuleMock1.class.st index 0571647..65816a3 100644 --- a/src/MooseRuleEngine-Tests/RuleMock1.class.st +++ b/src/MooseRuleEngine-Tests/RuleMock1.class.st @@ -20,3 +20,9 @@ RuleMock1 >> fix: violation [ fix := MREFix new. ^ { fix } ] + +{ #category : 'accessing' } +RuleMock1 >> supportedExtensions [ + + ^ #( 'ts' ) +] diff --git a/src/MooseRuleEngine-Tests/RuleMockJava.class.st b/src/MooseRuleEngine-Tests/RuleMockJava.class.st new file mode 100644 index 0000000..a175f19 --- /dev/null +++ b/src/MooseRuleEngine-Tests/RuleMockJava.class.st @@ -0,0 +1,12 @@ +Class { + #name : 'RuleMockJava', + #superclass : 'RuleMock1', + #category : 'MooseRuleEngine-Tests', + #package : 'MooseRuleEngine-Tests' +} + +{ #category : 'accessing' } +RuleMockJava >> supportedExtensions [ + + ^ #( 'java' ) +] diff --git a/src/MooseRuleEngine/BaselineOfMooseRuleEngine.class.st b/src/MooseRuleEngine/BaselineOfMooseRuleEngine.class.st deleted file mode 100644 index 18a1488..0000000 --- a/src/MooseRuleEngine/BaselineOfMooseRuleEngine.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : 'BaselineOfMooseRuleEngine', - #superclass : 'Object', - #category : 'MooseRuleEngine', - #package : 'MooseRuleEngine' -} - -{ #category : 'baselines' } -BaselineOfMooseRuleEngine >> baseline: spec [ - - - spec for: #common do: [ - self defineDependencies: spec. - self definePackages: spec. - self defineGroups: spec ] -] - -{ #category : 'dependencies' } -BaselineOfMooseRuleEngine >> defineDependencies: spec [ - - spec - baseline: 'Mocketry' - with: [ spec repository: 'github://dionisiydk/Mocketry' ]. - - spec - baseline: 'LLMAPI' - with: [ spec repository: 'github://Evref-BL/Pharo-LLMAPI:main/src' ]. - - spec - baseline: 'SonarqubePharoAPI' - with: [ - spec repository: 'github://Evref-BL/Sonarqube-Pharo-API:develop' ]. - - - -] - -{ #category : 'groups' } -BaselineOfMooseRuleEngine >> defineGroups: spec [ -] - -{ #category : 'packages' } -BaselineOfMooseRuleEngine >> definePackages: spec [ - - spec - package: 'MooseRuleEngine' - with: [ spec requires: #( 'LLMAPI' 'SonarqubePharoAPI' ) ]. - spec - package: 'MooseRuleEngine-Tests' - with: [ spec requires: #( 'MooseRuleEngine' 'Mocketry' ) ] -] diff --git a/src/MooseRuleEngine/MRERule.class.st b/src/MooseRuleEngine/MRERule.class.st index d36a7bc..92878ed 100644 --- a/src/MooseRuleEngine/MRERule.class.st +++ b/src/MooseRuleEngine/MRERule.class.st @@ -18,6 +18,13 @@ MRERule >> analyse: file [ ^self subclassResponsibility ] +{ #category : 'testing' } +MRERule >> appliesToFile: file [ + + ^ self supportedExtensions includes: + file path asFileReference extension asLowercase +] + { #category : 'accessing' } MRERule >> description [ @@ -87,3 +94,9 @@ MRERule >> name: anObject [ name := anObject ] + +{ #category : 'accessing' } +MRERule >> supportedExtensions [ + + ^ #( ) +] diff --git a/src/MooseRuleEngine/MooseRuleEngine.class.st b/src/MooseRuleEngine/MooseRuleEngine.class.st index 5e0dced..7006b27 100644 --- a/src/MooseRuleEngine/MooseRuleEngine.class.st +++ b/src/MooseRuleEngine/MooseRuleEngine.class.st @@ -19,13 +19,13 @@ MooseRuleEngine >> addHelper: helper [ { #category : 'as yet unclassified' } MooseRuleEngine >> detect [ + | violations | violations := rules collect: [ :rule | - files collect: [ :file | rule analyse: file ]. - ]. + (files select: [ :file | rule appliesToFile: file ]) + collect: [ :file | rule analyse: file ] ]. - ^ violations flattened - + ^ violations flattened ] { #category : 'as yet unclassified' } diff --git a/src/MooseRuleEngine/TJavaRule.trait.st b/src/MooseRuleEngine/TJavaRule.trait.st new file mode 100644 index 0000000..514ae12 --- /dev/null +++ b/src/MooseRuleEngine/TJavaRule.trait.st @@ -0,0 +1,11 @@ +Trait { + #name : 'TJavaRule', + #category : 'MooseRuleEngine', + #package : 'MooseRuleEngine' +} + +{ #category : 'accessing' } +TJavaRule >> supportedExtensions [ + + ^ #( 'java' ) +] diff --git a/src/MooseRuleEngine/TTypescriptRule.trait.st b/src/MooseRuleEngine/TTypescriptRule.trait.st new file mode 100644 index 0000000..edfcec4 --- /dev/null +++ b/src/MooseRuleEngine/TTypescriptRule.trait.st @@ -0,0 +1,11 @@ +Trait { + #name : 'TTypescriptRule', + #category : 'MooseRuleEngine', + #package : 'MooseRuleEngine' +} + +{ #category : 'accessing' } +TTypescriptRule >> supportedExtensions [ + + ^ #( 'ts' ) +]