[Ann] BPatterns: The rewrite engine at your fingertips
Hi all. This is the release of *BPatterns* project, one of my old ideas on how to make the rewrite engine usable for scripting. As a quick reminder, here is an example of the classic rewrite-engine matching syntax: *``@receiver isNil ifTrue: ``@nilBlock* In practice, patterns like this usually live inside string literalsâhidden away in lint rules, deprecations, or refactorings. To use them for *manual* code search or rewriting, you typically need a dedicated tool. Now compare that with the same pattern expressed as a *BPattern*: *[ any isNil ifTrue: anyBlock ] bpattern* No special syntax. No magical tools. Just pure Smalltalk. You write a block. You send #bpattern. Youâre done. Every editor understands it. Every tool respects it. Want to see where this pattern appears? * [ any isNil ifTrue: anyBlock ] bpattern browseUsers* [image: Screenshot 2026-01-31 at 12.16.19.png] Want to rewrite all of them? *[[ any isNil ifTrue: anyBlock ] -> [ any ifNil: anyBlock ]] brewrite preview* [image: Screenshot 2026-01-31 at 12.17.57.png] Because *BPatterns are real Smalltalk code*, all development tools work out of the box: syntax highlighting, completion, navigation, refactorings. This is the rewrite engine treated as a *first-class citizen*. Not strings. Not tooling sidecars. Not just for advanced users. *A rewrite engine you can actually use.* * A rewrite engine at your fingertips.* More details are in the blog post: - https://dionisiydk.blogspot.com/2026/02/bpatterns-rewrite-engine-with-smallt... And follow the project on GitHub: - https://github.com/dionisiydk/BPatterns -
Excellent! That is so welcome!! On Mon, Feb 2, 2026, 04:52 Denis Kudriashov via Pharo-users < pharo-users@lists.pharo.org> wrote:
Hi all.
This is the release of *BPatterns* project, one of my old ideas on how to make the rewrite engine usable for scripting.
As a quick reminder, here is an example of the classic rewrite-engine matching syntax:
*``@receiver isNil ifTrue: ``@nilBlock*
In practice, patterns like this usually live inside string literalsâhidden away in lint rules, deprecations, or refactorings. To use them for *manual* code search or rewriting, you typically need a dedicated tool.
Now compare that with the same pattern expressed as a *BPattern*:
*[ any isNil ifTrue: anyBlock ] bpattern*
No special syntax. No magical tools. Just pure Smalltalk.
You write a block. You send #bpattern. Youâre done.
Every editor understands it. Every tool respects it.
Want to see where this pattern appears?
* [ any isNil ifTrue: anyBlock ] bpattern browseUsers*
[image: Screenshot 2026-01-31 at 12.16.19.png]
Want to rewrite all of them?
*[[ any isNil ifTrue: anyBlock ] -> [ any ifNil: anyBlock ]] brewrite preview*
[image: Screenshot 2026-01-31 at 12.17.57.png]
Because *BPatterns are real Smalltalk code*, all development tools work out of the box: syntax highlighting, completion, navigation, refactorings.
This is the rewrite engine treated as a *first-class citizen*.
Not strings. Not tooling sidecars. Not just for advanced users.
*A rewrite engine you can actually use.* * A rewrite engine at your fingertips.* More details are in the blog post:
- https://dionisiydk.blogspot.com/2026/02/bpatterns-rewrite-engine-with-smallt...
And follow the project on GitHub:
- https://github.com/dionisiydk/BPatterns
-
participants (2)
-
Denis Kudriashov -
Richard Sargent