Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -200,4 +202,4 @@ llmApi := LLMAPI chat.
llmApi host: '<llm_host>'.
llmApi apiKey: '<llm_api_key>'.
llmHelper := MRELLMHelper new llmApi: llmApi.
```
```
19 changes: 10 additions & 9 deletions src/BaselineOfMooseRuleEngine/BaselineOfMooseRuleEngine.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,35 @@ 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' }
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' ) ]
]
12 changes: 12 additions & 0 deletions src/MooseRuleEngine-Tests/MRERuleTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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 [

Expand Down
38 changes: 38 additions & 0 deletions src/MooseRuleEngine-Tests/MooseRuleEngineTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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 [

Expand Down
6 changes: 6 additions & 0 deletions src/MooseRuleEngine-Tests/RuleMock1.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,9 @@ RuleMock1 >> fix: violation [
fix := MREFix new.
^ { fix }
]

{ #category : 'accessing' }
RuleMock1 >> supportedExtensions [

^ #( 'ts' )
]
12 changes: 12 additions & 0 deletions src/MooseRuleEngine-Tests/RuleMockJava.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Class {
#name : 'RuleMockJava',
#superclass : 'RuleMock1',
#category : 'MooseRuleEngine-Tests',
#package : 'MooseRuleEngine-Tests'
}

{ #category : 'accessing' }
RuleMockJava >> supportedExtensions [

^ #( 'java' )
]
51 changes: 0 additions & 51 deletions src/MooseRuleEngine/BaselineOfMooseRuleEngine.class.st

This file was deleted.

13 changes: 13 additions & 0 deletions src/MooseRuleEngine/MRERule.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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 [

Expand Down Expand Up @@ -87,3 +94,9 @@ MRERule >> name: anObject [

name := anObject
]

{ #category : 'accessing' }
MRERule >> supportedExtensions [

^ #( )
]
8 changes: 4 additions & 4 deletions src/MooseRuleEngine/MooseRuleEngine.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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' }
Expand Down
11 changes: 11 additions & 0 deletions src/MooseRuleEngine/TJavaRule.trait.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Trait {
#name : 'TJavaRule',
#category : 'MooseRuleEngine',
#package : 'MooseRuleEngine'
}

{ #category : 'accessing' }
TJavaRule >> supportedExtensions [

^ #( 'java' )
]
11 changes: 11 additions & 0 deletions src/MooseRuleEngine/TTypescriptRule.trait.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Trait {
#name : 'TTypescriptRule',
#category : 'MooseRuleEngine',
#package : 'MooseRuleEngine'
}

{ #category : 'accessing' }
TTypescriptRule >> supportedExtensions [

^ #( 'ts' )
]
11 changes: 11 additions & 0 deletions src/MooseRuleEngine/TYAMLRule.trait.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Trait {
#name : 'TYAMLRule',
#category : 'MooseRuleEngine',
#package : 'MooseRuleEngine'
}

{ #category : 'accessing' }
TYAMLRule >> supportedExtensions [

^ #( 'yaml' 'yml' )
]
Loading