Skip to content

Commit

Permalink
Ported all transformation Slime rules
Browse files Browse the repository at this point in the history
  • Loading branch information
jbrichau committed Jan 7, 2024
1 parent 1ec525d commit 59552a5
Show file tree
Hide file tree
Showing 66 changed files with 364 additions and 9 deletions.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
initialization
initialize
super initialize.
self
replace: '``@collection withIndexDo: [ :`each :`index | | `@temps | ``@.body ]'
with: '``@collection keysAndValuesDo: [ :`index :`each | | `@temps | ``@.body ]';
replace: '``@collection doWithIndex: [ :`each :`index | | `@temps | ``@.body ]'
with: '``@collection keysAndValuesDo: [ :`index :`each | | `@temps | ``@.body ]';
replace: '``@collection collect: ``@block1 thenDo: ``@block2'
with: '(``@collection collect: ``@block1) do: ``@block2';
replace: '``@collection collect: ``@block1 thenSelect: ``@block2'
with: '(``@collection collect: ``@block1) select: ``@block2';
replace: '``@collection pairsDo: [ :`t1 :`t2 | ``@.statements ]'
with: '1 to: ``@collection size by: 2 do: [ :index | | `t1 `t2 | `t1 := ``@collection at: index. `t2 := ``@collection at: index + 1. ``@.statements ]';
replace: '``@collection reject: ``@block1 thenDo: ``@block2'
with: '(``@collection reject: ``@block1) do: ``@block2';
replace: '``@collection select: ``@block1 thenCollect: ``@block2'
with: '(``@collection select: ``@block1) collect: ``@block2';
replace: '``@collection select: ``@block1 thenDo: ``@block2'
with: '(``@collection select: ``@block1) do: ``@block2';
replace: '``@collection detectSum: [ :`t1 | ``@.statements. `.last ]'
with: '``@collection inject: 0 into: [ :sum :`t1 | ``@.statements. sum + (`.last) ]';
replace: '``@collection valuesDo: ``@block'
with: '``@collection do: ``@block';
replace: '``@collection reversed'
with: '``@collection reverse';
replace: '``@dictionary keysSortedSafely'
with: '``@dictionary keys asSortedCollection';
replace: '``@collectionClass new: ``@size withAll: ``@character'
with: '(``@collectionClass new: ``@size) atAllPut: ``@character'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Collections'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ 'Some collection methods are not ANSI compatible: #pairsDo:, #collect:thenDo:, #reject:thenDo:, #detectSum:, #valuesDo:, #keysSortedSafely, #new:withAll:, etc.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiCollectionsRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
initialization
initialize

super initialize.
self
replace: '``@boolean ifNotNilDo: ``@block'
with: '``@boolean ifNotNil: ``@block';
replace: '``@boolean ifNotNilDo: ``@block1 ifNil: ``@block2'
with: '``@boolean ifNotNil: ``@block1 ifNil: ``@block2';
replace: '``@boolean ifNil: ``@block1 ifNotNilDo: ``@block2'
with: '``@boolean ifNil: ``@block1 ifNotNil: ``@block2';
replace: '``@boolean ifNotNil: [ | `@temps | ``@.body ]'
with: '``@boolean ifNotNil: [ :arg | | `@temps | ``@.body ]';
replace: '``@boolean ifNotNil: [ | `@temps | ``@.body ] ifNil: ``@block '
with: '``@boolean ifNotNil: [ :arg | | `@temps | ``@.body ] ifNil: ``@block';
replace: '``@boolean ifNil: ``@block ifNotNil: [ | `@temps | ``@.body ]'
with: '``@boolean ifNil: ``@block ifNotNil: [ :arg | | `@temps | ``@.body ]'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Conditionals'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ 'Conditionals like #ifNotNilDo: are not ANSI compatible.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiConditionalsRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
initialization
initialize

super initialize.
self
replace: '``@object asString' with: '``@object greaseString';
replace: '``@object asInteger' with: '``@object greaseInteger'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Convertors'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ 'The ANSI standard does not support #asInteger and #asString on Object.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiConvertorRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
initialization
initialize

super initialize.
self
replace: '``@block on: `class do: [ | `@temps | ``@.body ]'
with: '``@block on: `class do: [ :err | | `@temps | ``@.body ]'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Exceptions'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ 'Exception handlers expect exactly one argument in ANSI.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiExceptionsRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
initialization
initialize

super initialize.
self
replace: '`{ :node :context | node isVariable and: [ (Smalltalk includesKey: node name asSymbol) not and: [ context at: ''`receiver'' ifAbsentPut: [ node ]. true ] ] } cr'
with: '`{ :context | context at: ''`receiver'' } nextPut: Character cr';
replace: '`{ :node :context | node isVariable and: [ (Smalltalk includesKey: node name asSymbol) not and: [ context at: ''`receiver'' ifAbsentPut: [ node ]. true ] ] } lf'
with: '`{ :context | context at: ''`receiver'' } nextPut: Character lf';
replace: '``@stream nextPut: Character cr; nextPut: Character lf'
with: '``@stream crlf';
replace: '``@collection writeStream'
with: 'WriteStream on: ``@collection'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Streams'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ '#cr and #lf are not part of the ANSI stream protocol.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiStreamsRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'ANSI Compatibility'
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
initialization
initialize

super initialize.
self
replace: 'String tab' with: '(String with: Character tab)';
replace: 'String cr' with: '(String with: Character cr)';
replace: 'String lf' with: '(String with: Character lf)';
replace: 'String crlf' with: '(String with: Character cr with: Character lf)';
replace: 'String space' with: '(String with: Character space)';
replace: '`@string includesSubString: `@subString'
with: '(`@string indexOfSubCollection: `@subString startingAt: 0) ~= 0';
replace: '`@string includesSubstring: `@subString'
with: '(`@string indexOfSubCollection: `@subString startingAt: 0) ~= 0'
"replace: '``@string findTokens: ``@arg' withValueFrom: [ :node |
| argument |
argument := node arguments first.
argument isLiteralNode ifTrue: [
argument value isArray
ifTrue: [ argument replaceWith: (RBLiteralNode value: (String withAll: argument value)) ].
argument value isCharacter
ifTrue: [ argument replaceWith: (RBLiteralNode value: (String with: argument value)) ] ].
node
selector: #subStrings:;
yourself ]"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Strings'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ '#cr, #crlf, #lf, #space, #tab, #findTokens:, ... are not part of the ANSI string protocol.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRAnsiStringsRule",
"type" : "normal"
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'Grease Portability'
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
initialization
initialize

super initialize.
self
replace: '`@collection beginsWith: `@subCollection'
with: '`@collection greaseBeginsWith: `@subCollection';
replace: '`@collection endsWith: `@subCollection'
with: '`@collection greaseEndsWith: `@subCollection'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Collections'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ '#beginsWith: and #endsWith: are not portable.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRNotPortableCollectionsRule",
"type" : "normal"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I detect senders of Object >> #in:
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
group

^ 'Grease Portability'
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
initialization
initialize

super initialize.
self
replace: '``@object in: [ :`var | | `@temps | `@.statements ]'
with: '[ :`var | | `@temps | `@.statements ] value: ``@object'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
name

^ 'Object>>#in:'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
rationale

^ 'Object>>#in: has different semantics on different Smalltalk dialects.'
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "pmm 9/12/2009 10:37",
"super" : "GRReSlimeTransformationRule",
"category" : "Grease-Pharo110-Slime",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "GRObjectInRule",
"type" : "normal"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I check for TestCase >> #fail.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
hooks
afterCheck: aNode mappings: mappingsDict

aNode methodNode methodClass isMeta
ifTrue: [ ^ false ].
(aNode methodNode methodClass allSuperclasses includes: (Smalltalk at: #TestCase))
ifTrue: [ ^ true ].
^ false
Loading

0 comments on commit 59552a5

Please sign in to comment.