From 746c1f2b54c1ccb939fba892944bce4a17c2b053 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Thu, 28 May 2026 16:05:12 +0200 Subject: [PATCH 1/6] fix: baseline --- .../BaselineOfMooseRuleEngine.class.st | 9 ++-- .../BaselineOfMooseRuleEngine.class.st | 51 ------------------- 2 files changed, 3 insertions(+), 57 deletions(-) delete mode 100644 src/MooseRuleEngine/BaselineOfMooseRuleEngine.class.st diff --git a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st index 3526b86..6a564f6 100644 --- a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st +++ b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st @@ -1,6 +1,6 @@ Class { #name : 'BaselineOfMooseRuleEngine', - #superclass : 'BaselineOf', + #superclass : 'Object', #category : 'BaselineOfMooseRuleEngine', #package : 'BaselineOfMooseRuleEngine' } @@ -31,10 +31,7 @@ BaselineOfMooseRuleEngine >> defineDependencies: spec [ with: [ spec repository: 'github://Evref-BL/Sonarqube-Pharo-API:develop' ]. - spec baseline: 'FASTJava' with: [ - spec - repository: 'github://moosetechnology/FAST-Java:v3/src'; - loads: #( 'smacc' ) ]. + ] @@ -47,7 +44,7 @@ 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' ) ] 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' ) ] -] From a5d291b871b067ac5a3303fc57f78683583b2b97 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Thu, 28 May 2026 16:12:33 +0200 Subject: [PATCH 2/6] feat: add supported extensions in MRERule --- .../BaselineOfMooseRuleEngine.class.st | 17 ++++----- .../MRERuleTest.class.st | 12 ++++++ .../MooseRuleEngineTest.class.st | 38 +++++++++++++++++++ src/MooseRuleEngine-Tests/RuleMock1.class.st | 6 +++ .../RuleMockJava.class.st | 12 ++++++ src/MooseRuleEngine/MRERule.class.st | 13 +++++++ src/MooseRuleEngine/MooseRuleEngine.class.st | 8 ++-- 7 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 src/MooseRuleEngine-Tests/RuleMockJava.class.st diff --git a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st index 6a564f6..ea8b537 100644 --- a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st +++ b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st @@ -1,6 +1,6 @@ Class { #name : 'BaselineOfMooseRuleEngine', - #superclass : 'Object', + #superclass : 'BaselineOf', #category : 'BaselineOfMooseRuleEngine', #package : 'BaselineOfMooseRuleEngine' } @@ -21,22 +21,21 @@ 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' ]. - - + spec + baseline: 'SonarqubePharoAPI' + with: [ + spec repository: 'github://Evref-BL/Sonarqube-Pharo-API:develop' ] ] { #category : 'groups' } BaselineOfMooseRuleEngine >> defineGroups: spec [ + + ] { #category : 'packages' } 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/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' } From 9e31930da6b7023cc397a8e44fba8974d71240b3 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Thu, 28 May 2026 16:23:34 +0200 Subject: [PATCH 3/6] ci: add FASTJava in baseline for tests --- .../BaselineOfMooseRuleEngine.class.st | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st index ea8b537..5535161 100644 --- a/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st +++ b/src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st @@ -29,7 +29,12 @@ BaselineOfMooseRuleEngine >> defineDependencies: spec [ 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' ) ] ] { #category : 'groups' } @@ -46,5 +51,5 @@ BaselineOfMooseRuleEngine >> definePackages: spec [ with: [ spec requires: #( 'LLMAPI' 'SonarqubePharoAPI' ) ]. spec package: 'MooseRuleEngine-Tests' - with: [ spec requires: #( 'MooseRuleEngine' 'Mocketry' ) ] + with: [ spec requires: #( 'MooseRuleEngine' 'Mocketry' 'FASTJava' ) ] ] From 0466b60adcd9e941339a4effbe41faaa14ee55e9 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Thu, 28 May 2026 16:40:42 +0200 Subject: [PATCH 4/6] feat: add language trait --- src/MooseRuleEngine/TJavaRule.trait.st | 11 +++++++++++ src/MooseRuleEngine/TTypescriptRule.trait.st | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/MooseRuleEngine/TJavaRule.trait.st create mode 100644 src/MooseRuleEngine/TTypescriptRule.trait.st 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' ) +] From 1291d41621462e6e1bd1316c05323bd9d47d96d9 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Thu, 28 May 2026 17:22:56 +0200 Subject: [PATCH 5/6] doc: update read me for supported extension --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b4eccd..baa64e7 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,8 @@ initialize - `analyse`: Takes an `MREFile` and returns a collection of `MREViolation`. - `fix`: Takes an `MREViolation` and returns a collection of `MREFix`. +A rule must also specify the file extensions it supports. To help with common languages, MooseRuleEngine provides traits such as `TJavaRule` for Java files and `TTypescriptRule` for TypeScript files. + ### Helper Helpers are classes injected into rules to assist in writing them. They are useful for interacting with external systems like SonarQube or LLMs. @@ -200,4 +202,4 @@ llmApi := LLMAPI chat. llmApi host: ''. llmApi apiKey: ''. llmHelper := MRELLMHelper new llmApi: llmApi. -``` \ No newline at end of file +``` From dc327ca8b06c8d836cc8beda54c11bec8541b55a Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Tue, 2 Jun 2026 10:44:37 +0200 Subject: [PATCH 6/6] feat: add YAMLRule trait --- src/MooseRuleEngine/TYAMLRule.trait.st | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/MooseRuleEngine/TYAMLRule.trait.st diff --git a/src/MooseRuleEngine/TYAMLRule.trait.st b/src/MooseRuleEngine/TYAMLRule.trait.st new file mode 100644 index 0000000..1ee1a65 --- /dev/null +++ b/src/MooseRuleEngine/TYAMLRule.trait.st @@ -0,0 +1,11 @@ +Trait { + #name : 'TYAMLRule', + #category : 'MooseRuleEngine', + #package : 'MooseRuleEngine' +} + +{ #category : 'accessing' } +TYAMLRule >> supportedExtensions [ + + ^ #( 'yaml' 'yml' ) +]